diff --git a/CHANGELOG.md b/CHANGELOG.md index 195e43a18..fbbcf45ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +* **Build 287** (2015-08-03) + - Introduced new **MarkdownEditor** form widget (see Backend > Forms docs). + * **Build 284** (2015-07-25) - Introduced new **ImportExport** controller behavior. - The `export` action has been moved from ListController behavior to Import / Export behavior (see Backend > Importing & Exporting docs). @@ -22,7 +25,7 @@ * **Build 270** (2015-06-18) - Introduced the October Storm client-side library. - - Introduced new *MediaFinder* form widget. + - Introduced new **MediaFinder** form widget. - Improved the back-end administrator permissions and `RelationController` UI. - The page setting `hidden` has been renamed to `is_hidden`, this setting may need to be reapplied for some themes. - `FileUpload` form widget has been rebuilt from scratch, it now uses an interface similar to the Media Manager (see Backend > Forms docs). diff --git a/modules/backend/ServiceProvider.php b/modules/backend/ServiceProvider.php index e405a5806..1d961b6bb 100644 --- a/modules/backend/ServiceProvider.php +++ b/modules/backend/ServiceProvider.php @@ -131,6 +131,10 @@ class ServiceProvider extends ModuleServiceProvider 'label' => 'Rich editor', 'code' => 'richeditor' ]); + $manager->registerFormWidget('Backend\FormWidgets\MarkdownEditor', [ + 'label' => 'Markdown editor', + 'code' => 'markdown' + ]); $manager->registerFormWidget('Backend\FormWidgets\FileUpload', [ 'label' => 'File uploader', 'code' => 'fileupload' diff --git a/modules/backend/assets/css/october.css b/modules/backend/assets/css/october.css index 251cdce68..e71823563 100644 --- a/modules/backend/assets/css/october.css +++ b/modules/backend/assets/css/october.css @@ -1,4 +1,4 @@ -@import "../vendor/jcrop/css/jquery.Jcrop.min.css";@-webkit-keyframes showSweetAlert{0%{transform:scale(0.7);-webkit-transform:scale(0.7)} +@import "../vendor/jcrop/css/jquery.Jcrop.min.css";@import "../../../system/assets/vendor/prettify/prettify.css";@import "../../../system/assets/vendor/prettify/theme-desert.css";@-webkit-keyframes showSweetAlert{0%{transform:scale(0.7);-webkit-transform:scale(0.7)} 45%{transform:scale(1.05);-webkit-transform:scale(1.05)} 80%{transform:scale(0.95);-webkit-tranform:scale(0.95)} 100%{transform:scale(1);-webkit-transform:scale(1)} @@ -385,7 +385,7 @@ .control-treeview ol > li.drop-target.has-subitems > div:before{background-position:0px -102px} } .sidenav-tree{width:280px;background:#34495e} -.sidenav-tree .control-toolbar{padding:20px 0 20px 20px} +.sidenav-tree .control-toolbar{height:auto;padding:20px 0 20px 20px} .sidenav-tree .control-toolbar input.form-control{border:none} .sidenav-tree ul{padding:0;margin:0;list-style:none} .sidenav-tree div.scrollbar-thumb{background:#2b3e50 !important} @@ -471,2504 +471,6 @@ div.control-scrollpad > .scrollpad-scrollbar[data-visible]{opacity:0.7} div.control-scrollpad > .scrollpad-scrollbar[data-hidden]{display:none} div.control-scrollpad[data-direction=horizontal] > .scrollpad-scrollbar{top:auto;left:0;width:auto;height:11px} div.control-scrollpad[data-direction=horizontal] > .scrollpad-scrollbar .drag-handle{right:auto;top:2px;height:7px;min-height:0;min-width:10px;width:auto} - html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} -body{margin:0} -article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block} -audio,canvas,progress,video{display:inline-block;vertical-align:baseline} -audio:not([controls]){display:none;height:0} -[hidden],template{display:none} -a{background:transparent} -a:active,a:hover{outline:0} -abbr[title]{border-bottom:1px dotted} -b,strong{font-weight:bold} -dfn{font-style:italic} -h1{font-size:2em;margin:0.67em 0} -mark{background:#ff0;color:#000} -small{font-size:80%} -sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} -sup{top:-0.5em} -sub{bottom:-0.25em} -img{border:0} -svg:not(:root){overflow:hidden} -figure{margin:1em 40px} -hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} -pre{overflow:auto} -code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em} -button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0} -button{overflow:visible} -button,select{text-transform:none} -button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} -button[disabled],html input[disabled]{cursor:default} -button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} -input{line-height:normal} -input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} -input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto} -input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box} -input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none} -fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em} -legend{border:0;padding:0} -textarea{overflow:auto} -optgroup{font-weight:bold} -table{border-collapse:collapse;border-spacing:0} -td,th{padding:0} -*,*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} -html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)} -body{font-family:'Open Sans',Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333333;background-color:#f9f9f9} -input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit} -button,input,select[multiple],textarea{background-image:none} -a{color:#1795f1;text-decoration:none} -a:hover,a:focus{color:#063f68;text-decoration:underline} -a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} -img{vertical-align:middle} -.img-responsive{display:block;max-width:100%;height:auto} -.img-rounded{border-radius:6px} -.img-circle{border-radius:50%} -hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eeeeee} -.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);border:0} -@media print{*{text-shadow:none !important;color:#000 !important;background:transparent !important;box-shadow:none !important} -a,a:visited{text-decoration:underline} -a[href]:after{content:" (" attr(href) ")"} -abbr[title]:after{content:" (" attr(title) ")"} -a[href^="javascript:"]:after,a[href^="#"]:after{content:""} -pre,blockquote{border:1px solid #999;page-break-inside:avoid} -thead{display:table-header-group} -tr,img{page-break-inside:avoid} -img{max-width:100% !important} -p,h2,h3{orphans:3;widows:3} -h2,h3{page-break-after:avoid} -select{background:#fff !important} -.navbar{display:none} -.table td,.table th{background-color:#fff !important} -.btn > .caret,.dropup > .btn > .caret{border-top-color:#000 !important} -.label{border:1px solid #000} -.table{border-collapse:collapse !important} -.table-bordered th,.table-bordered td{border:1px solid #ddd !important} -} -.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px} -@media (min-width:768px){.container{width:750px} -} -@media (min-width:992px){.container{width:970px} -} -@media (min-width:1200px){.container{width:1170px} -} -.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px} -.row{margin-left:-15px;margin-right:-15px} -.row-compact [class*="col-"]{padding-left:0 !important;padding-right:0 !important} -.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px} -.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left} -.col-xs-12{width:100%} -.col-xs-11{width:91.66666667%} -.col-xs-10{width:83.33333333%} -.col-xs-9{width:75%} -.col-xs-8{width:66.66666667%} -.col-xs-7{width:58.33333333%} -.col-xs-6{width:50%} -.col-xs-5{width:41.66666667%} -.col-xs-4{width:33.33333333%} -.col-xs-3{width:25%} -.col-xs-2{width:16.66666667%} -.col-xs-1{width:8.33333333%} -.col-xs-pull-12{right:100%} -.col-xs-pull-11{right:91.66666667%} -.col-xs-pull-10{right:83.33333333%} -.col-xs-pull-9{right:75%} -.col-xs-pull-8{right:66.66666667%} -.col-xs-pull-7{right:58.33333333%} -.col-xs-pull-6{right:50%} -.col-xs-pull-5{right:41.66666667%} -.col-xs-pull-4{right:33.33333333%} -.col-xs-pull-3{right:25%} -.col-xs-pull-2{right:16.66666667%} -.col-xs-pull-1{right:8.33333333%} -.col-xs-pull-0{right:0%} -.col-xs-push-12{left:100%} -.col-xs-push-11{left:91.66666667%} -.col-xs-push-10{left:83.33333333%} -.col-xs-push-9{left:75%} -.col-xs-push-8{left:66.66666667%} -.col-xs-push-7{left:58.33333333%} -.col-xs-push-6{left:50%} -.col-xs-push-5{left:41.66666667%} -.col-xs-push-4{left:33.33333333%} -.col-xs-push-3{left:25%} -.col-xs-push-2{left:16.66666667%} -.col-xs-push-1{left:8.33333333%} -.col-xs-push-0{left:0%} -.col-xs-offset-12{margin-left:100%} -.col-xs-offset-11{margin-left:91.66666667%} -.col-xs-offset-10{margin-left:83.33333333%} -.col-xs-offset-9{margin-left:75%} -.col-xs-offset-8{margin-left:66.66666667%} -.col-xs-offset-7{margin-left:58.33333333%} -.col-xs-offset-6{margin-left:50%} -.col-xs-offset-5{margin-left:41.66666667%} -.col-xs-offset-4{margin-left:33.33333333%} -.col-xs-offset-3{margin-left:25%} -.col-xs-offset-2{margin-left:16.66666667%} -.col-xs-offset-1{margin-left:8.33333333%} -.col-xs-offset-0{margin-left:0%} -@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left} -.col-sm-12{width:100%} -.col-sm-11{width:91.66666667%} -.col-sm-10{width:83.33333333%} -.col-sm-9{width:75%} -.col-sm-8{width:66.66666667%} -.col-sm-7{width:58.33333333%} -.col-sm-6{width:50%} -.col-sm-5{width:41.66666667%} -.col-sm-4{width:33.33333333%} -.col-sm-3{width:25%} -.col-sm-2{width:16.66666667%} -.col-sm-1{width:8.33333333%} -.col-sm-pull-12{right:100%} -.col-sm-pull-11{right:91.66666667%} -.col-sm-pull-10{right:83.33333333%} -.col-sm-pull-9{right:75%} -.col-sm-pull-8{right:66.66666667%} -.col-sm-pull-7{right:58.33333333%} -.col-sm-pull-6{right:50%} -.col-sm-pull-5{right:41.66666667%} -.col-sm-pull-4{right:33.33333333%} -.col-sm-pull-3{right:25%} -.col-sm-pull-2{right:16.66666667%} -.col-sm-pull-1{right:8.33333333%} -.col-sm-pull-0{right:0%} -.col-sm-push-12{left:100%} -.col-sm-push-11{left:91.66666667%} -.col-sm-push-10{left:83.33333333%} -.col-sm-push-9{left:75%} -.col-sm-push-8{left:66.66666667%} -.col-sm-push-7{left:58.33333333%} -.col-sm-push-6{left:50%} -.col-sm-push-5{left:41.66666667%} -.col-sm-push-4{left:33.33333333%} -.col-sm-push-3{left:25%} -.col-sm-push-2{left:16.66666667%} -.col-sm-push-1{left:8.33333333%} -.col-sm-push-0{left:0%} -.col-sm-offset-12{margin-left:100%} -.col-sm-offset-11{margin-left:91.66666667%} -.col-sm-offset-10{margin-left:83.33333333%} -.col-sm-offset-9{margin-left:75%} -.col-sm-offset-8{margin-left:66.66666667%} -.col-sm-offset-7{margin-left:58.33333333%} -.col-sm-offset-6{margin-left:50%} -.col-sm-offset-5{margin-left:41.66666667%} -.col-sm-offset-4{margin-left:33.33333333%} -.col-sm-offset-3{margin-left:25%} -.col-sm-offset-2{margin-left:16.66666667%} -.col-sm-offset-1{margin-left:8.33333333%} -.col-sm-offset-0{margin-left:0%} -} -@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left} -.col-md-12{width:100%} -.col-md-11{width:91.66666667%} -.col-md-10{width:83.33333333%} -.col-md-9{width:75%} -.col-md-8{width:66.66666667%} -.col-md-7{width:58.33333333%} -.col-md-6{width:50%} -.col-md-5{width:41.66666667%} -.col-md-4{width:33.33333333%} -.col-md-3{width:25%} -.col-md-2{width:16.66666667%} -.col-md-1{width:8.33333333%} -.col-md-pull-12{right:100%} -.col-md-pull-11{right:91.66666667%} -.col-md-pull-10{right:83.33333333%} -.col-md-pull-9{right:75%} -.col-md-pull-8{right:66.66666667%} -.col-md-pull-7{right:58.33333333%} -.col-md-pull-6{right:50%} -.col-md-pull-5{right:41.66666667%} -.col-md-pull-4{right:33.33333333%} -.col-md-pull-3{right:25%} -.col-md-pull-2{right:16.66666667%} -.col-md-pull-1{right:8.33333333%} -.col-md-pull-0{right:0%} -.col-md-push-12{left:100%} -.col-md-push-11{left:91.66666667%} -.col-md-push-10{left:83.33333333%} -.col-md-push-9{left:75%} -.col-md-push-8{left:66.66666667%} -.col-md-push-7{left:58.33333333%} -.col-md-push-6{left:50%} -.col-md-push-5{left:41.66666667%} -.col-md-push-4{left:33.33333333%} -.col-md-push-3{left:25%} -.col-md-push-2{left:16.66666667%} -.col-md-push-1{left:8.33333333%} -.col-md-push-0{left:0%} -.col-md-offset-12{margin-left:100%} -.col-md-offset-11{margin-left:91.66666667%} -.col-md-offset-10{margin-left:83.33333333%} -.col-md-offset-9{margin-left:75%} -.col-md-offset-8{margin-left:66.66666667%} -.col-md-offset-7{margin-left:58.33333333%} -.col-md-offset-6{margin-left:50%} -.col-md-offset-5{margin-left:41.66666667%} -.col-md-offset-4{margin-left:33.33333333%} -.col-md-offset-3{margin-left:25%} -.col-md-offset-2{margin-left:16.66666667%} -.col-md-offset-1{margin-left:8.33333333%} -.col-md-offset-0{margin-left:0%} -} -@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left} -.col-lg-12{width:100%} -.col-lg-11{width:91.66666667%} -.col-lg-10{width:83.33333333%} -.col-lg-9{width:75%} -.col-lg-8{width:66.66666667%} -.col-lg-7{width:58.33333333%} -.col-lg-6{width:50%} -.col-lg-5{width:41.66666667%} -.col-lg-4{width:33.33333333%} -.col-lg-3{width:25%} -.col-lg-2{width:16.66666667%} -.col-lg-1{width:8.33333333%} -.col-lg-pull-12{right:100%} -.col-lg-pull-11{right:91.66666667%} -.col-lg-pull-10{right:83.33333333%} -.col-lg-pull-9{right:75%} -.col-lg-pull-8{right:66.66666667%} -.col-lg-pull-7{right:58.33333333%} -.col-lg-pull-6{right:50%} -.col-lg-pull-5{right:41.66666667%} -.col-lg-pull-4{right:33.33333333%} -.col-lg-pull-3{right:25%} -.col-lg-pull-2{right:16.66666667%} -.col-lg-pull-1{right:8.33333333%} -.col-lg-pull-0{right:0%} -.col-lg-push-12{left:100%} -.col-lg-push-11{left:91.66666667%} -.col-lg-push-10{left:83.33333333%} -.col-lg-push-9{left:75%} -.col-lg-push-8{left:66.66666667%} -.col-lg-push-7{left:58.33333333%} -.col-lg-push-6{left:50%} -.col-lg-push-5{left:41.66666667%} -.col-lg-push-4{left:33.33333333%} -.col-lg-push-3{left:25%} -.col-lg-push-2{left:16.66666667%} -.col-lg-push-1{left:8.33333333%} -.col-lg-push-0{left:0%} -.col-lg-offset-12{margin-left:100%} -.col-lg-offset-11{margin-left:91.66666667%} -.col-lg-offset-10{margin-left:83.33333333%} -.col-lg-offset-9{margin-left:75%} -.col-lg-offset-8{margin-left:66.66666667%} -.col-lg-offset-7{margin-left:58.33333333%} -.col-lg-offset-6{margin-left:50%} -.col-lg-offset-5{margin-left:41.66666667%} -.col-lg-offset-4{margin-left:33.33333333%} -.col-lg-offset-3{margin-left:25%} -.col-lg-offset-2{margin-left:16.66666667%} -.col-lg-offset-1{margin-left:8.33333333%} -.col-lg-offset-0{margin-left:0%} -} -.clearfix:before,.clearfix:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical > .btn-group:before,.btn-group-vertical > .btn-group:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.modal-footer:before,.modal-footer:after,.nav:before,.nav:after{content:" ";display:table} -.clearfix:after,.container:after,.container-fluid:after,.row:after,.btn-toolbar:after,.btn-group-vertical > .btn-group:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after{clear:both} -.center-block{display:block;margin-left:auto;margin-right:auto} -.pull-right{float:right !important} -.pull-left{float:left !important} -.hide{display:none !important} -.show{display:block !important} -.invisible{visibility:hidden} -.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0} -.hidden{display:none !important;visibility:hidden !important} -.affix{position:fixed} -@-ms-viewport{width:device-width} -.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important} -@media (max-width:767px){.visible-xs{display:block !important} -table.visible-xs{display:table} -tr.visible-xs{display:table-row !important} -th.visible-xs,td.visible-xs{display:table-cell !important} -} -@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important} -table.visible-sm{display:table} -tr.visible-sm{display:table-row !important} -th.visible-sm,td.visible-sm{display:table-cell !important} -} -@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important} -table.visible-md{display:table} -tr.visible-md{display:table-row !important} -th.visible-md,td.visible-md{display:table-cell !important} -} -@media (min-width:1200px){.visible-lg{display:block !important} -table.visible-lg{display:table} -tr.visible-lg{display:table-row !important} -th.visible-lg,td.visible-lg{display:table-cell !important} -} -@media (max-width:767px){.hidden-xs{display:none !important} -} -@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important} -} -@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important} -} -@media (min-width:1200px){.hidden-lg{display:none !important} -} -.visible-print{display:none !important} -@media print{.visible-print{display:block !important} -table.visible-print{display:table} -tr.visible-print{display:table-row !important} -th.visible-print,td.visible-print{display:table-cell !important} -} -@media print{.hidden-print{display:none !important} -} -h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit} -h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:normal;line-height:1;color:#999999} -h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px} -h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%} -h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px} -h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%} -h1,.h1{font-size:36px} -h2,.h2{font-size:30px} -h3,.h3{font-size:24px} -h4,.h4{font-size:18px} -h5,.h5{font-size:14px} -h6,.h6{font-size:12px} -p{margin:0 0 10px} -.lead{margin-bottom:20px;font-size:16px;font-weight:200;line-height:1.4} -@media (min-width:768px){.lead{font-size:21px} -} -small,.small{font-size:85%} -cite{font-style:normal} -.text-left{text-align:left} -.text-right{text-align:right} -.text-center{text-align:center} -.text-justify{text-align:justify} -.text-muted{color:#999999} -.text-primary{color:#5fb6f5} -a.text-primary:hover{color:#2fa0f2} -.text-success{color:#3c763d} -a.text-success:hover{color:#2b542c} -.text-info{color:#31708f} -a.text-info:hover{color:#245269} -.text-warning{color:#8a6d3b} -a.text-warning:hover{color:#66512c} -.text-danger{color:#a94442} -a.text-danger:hover{color:#843534} -.bg-primary{color:#fff;background-color:#5fb6f5} -a.bg-primary:hover{background-color:#2fa0f2} -.bg-success{background-color:#dff0d8} -a.bg-success:hover{background-color:#c1e2b3} -.bg-info{background-color:#d9edf7} -a.bg-info:hover{background-color:#afd9ee} -.bg-warning{background-color:#fcf8e3} -a.bg-warning:hover{background-color:#f7ecb5} -.bg-danger{background-color:#f2dede} -a.bg-danger:hover{background-color:#e4b9b9} -.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eeeeee} -ul,ol{margin-top:0;margin-bottom:10px} -ul ul,ol ul,ul ol,ol ol{margin-bottom:0} -.list-unstyled{padding-left:0;list-style:none} -.list-inline{padding-left:0;list-style:none;margin-left:-5px} -.list-inline > li{display:inline-block;padding-left:5px;padding-right:5px} -dl{margin-top:0;margin-bottom:20px} -dt,dd{line-height:1.42857143} -dt{font-weight:bold} -dd{margin-left:0} -@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} -.dl-horizontal dd{margin-left:180px} -} -abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999999} -.initialism{font-size:90%;text-transform:uppercase} -blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eeeeee} -blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0} -blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999999} -blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'} -.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eeeeee;border-left:0;text-align:right} -.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''} -.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'} -blockquote:before,blockquote:after{content:""} -address{margin-bottom:20px;font-style:normal;line-height:1.42857143} -.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:9px 16.5px;font-size:14px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} -.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} -.btn:hover,.btn:focus{color:#666666;text-decoration:none} -.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)} -.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none} -.btn-default{color:#666666;background-color:#e3e3e3;border-color:#e3e3e3} -.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{color:#666666;background-color:#cfcfcf;border-color:#c4c4c4} -.btn-default:active,.btn-default.active,.open .dropdown-toggle.btn-default{background-image:none} -.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#e3e3e3;border-color:#e3e3e3} -.btn-default .badge{color:#e3e3e3;background-color:#666666} -.btn-primary{color:#ffffff;background-color:#5fb6f5;border-color:#47abf4} -.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{color:#ffffff;background-color:#39a4f3;border-color:#0f91ee} -.btn-primary:active,.btn-primary.active,.open .dropdown-toggle.btn-primary{background-image:none} -.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#5fb6f5;border-color:#47abf4} -.btn-primary .badge{color:#5fb6f5;background-color:#ffffff} -.btn-success{color:#ffffff;background-color:#5cb85c;border-color:#4cae4c} -.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{color:#ffffff;background-color:#47a447;border-color:#398439} -.btn-success:active,.btn-success.active,.open .dropdown-toggle.btn-success{background-image:none} -.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c} -.btn-success .badge{color:#5cb85c;background-color:#ffffff} -.btn-info{color:#ffffff;background-color:#5bc0de;border-color:#46b8da} -.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{color:#ffffff;background-color:#39b3d7;border-color:#269abc} -.btn-info:active,.btn-info.active,.open .dropdown-toggle.btn-info{background-image:none} -.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da} -.btn-info .badge{color:#5bc0de;background-color:#ffffff} -.btn-warning{color:#ffffff;background-color:#f0ad4e;border-color:#eea236} -.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{color:#ffffff;background-color:#ed9c28;border-color:#d58512} -.btn-warning:active,.btn-warning.active,.open .dropdown-toggle.btn-warning{background-image:none} -.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236} -.btn-warning .badge{color:#f0ad4e;background-color:#ffffff} -.btn-danger{color:#ffffff;background-color:#d9534f;border-color:#d43f3a} -.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{color:#ffffff;background-color:#d2322d;border-color:#ac2925} -.btn-danger:active,.btn-danger.active,.open .dropdown-toggle.btn-danger{background-image:none} -.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a} -.btn-danger .badge{color:#d9534f;background-color:#ffffff} -.btn-link{color:#1795f1;font-weight:normal;cursor:pointer;border-radius:0} -.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none} -.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent} -.btn-link:hover,.btn-link:focus{color:#063f68;text-decoration:underline;background-color:transparent} -.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none} -.btn-lg,.btn-group-lg > .btn{padding:10px 24px;font-size:18px;line-height:1.3333333;border-radius:6px} -.btn-sm,.btn-group-sm > .btn{padding:5px 15px;font-size:12px;line-height:1.5;border-radius:3px} -.btn-xs,.btn-group-xs > .btn{padding:1px 7.5px;font-size:12px;line-height:1.5;border-radius:3px} -.btn-block{display:block;width:100%;padding-left:0;padding-right:0} -.btn-block + .btn-block{margin-top:5px} -input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%} -.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle} -.btn-group > .btn,.btn-group-vertical > .btn{position:relative;float:left} -.btn-group > .btn:hover,.btn-group-vertical > .btn:hover,.btn-group > .btn:focus,.btn-group-vertical > .btn:focus,.btn-group > .btn:active,.btn-group-vertical > .btn:active,.btn-group > .btn.active,.btn-group-vertical > .btn.active{z-index:2} -.btn-group > .btn:focus,.btn-group-vertical > .btn:focus{outline:none} -.btn-group .btn + .btn,.btn-group .btn + .btn-group,.btn-group .btn-group + .btn,.btn-group .btn-group + .btn-group{margin-left:-1px} -.btn-toolbar{margin-left:-5px} -.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left} -.btn-toolbar > .btn,.btn-toolbar > .btn-group,.btn-toolbar > .input-group{margin-left:5px} -.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0} -.btn-group > .btn:first-child{margin-left:0} -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0} -.btn-group > .btn:last-child:not(:first-child),.btn-group > .dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0} -.btn-group > .btn-group{float:left} -.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius:0} -.btn-group > .btn-group:first-child > .btn:last-child,.btn-group > .btn-group:first-child > .dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0} -.btn-group > .btn-group:last-child > .btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0} -.btn-group > .btn + .dropdown-toggle{padding-left:8px;padding-right:8px} -.btn-group > .btn-lg + .dropdown-toggle{padding-left:12px;padding-right:12px} -.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)} -.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none} -.btn .caret{margin-left:0} -.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0} -.dropup .btn-lg .caret{border-width:0 5px 5px} -.btn-group-vertical > .btn,.btn-group-vertical > .btn-group,.btn-group-vertical > .btn-group > .btn{display:block;float:none;width:100%;max-width:100%} -.btn-group-vertical > .btn-group > .btn{float:none} -.btn-group-vertical > .btn + .btn,.btn-group-vertical > .btn + .btn-group,.btn-group-vertical > .btn-group + .btn,.btn-group-vertical > .btn-group + .btn-group{margin-top:-1px;margin-left:0} -.btn-group-vertical > .btn:not(:first-child):not(:last-child){border-radius:0} -.btn-group-vertical > .btn:first-child:not(:last-child){border-top-right-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0} -.btn-group-vertical > .btn:last-child:not(:first-child){border-bottom-left-radius:2px;border-top-right-radius:0;border-top-left-radius:0} -.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn{border-radius:0} -.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0} -.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child{border-top-right-radius:0;border-top-left-radius:0} -.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate} -.btn-group-justified > .btn,.btn-group-justified > .btn-group{float:none;display:table-cell;width:1%} -.btn-group-justified > .btn-group .btn{width:100%} -[data-toggle="buttons"] > .btn > input[type="radio"],[data-toggle="buttons"] > .btn > input[type="checkbox"]{display:none} -.btn{font-size:13px;border:none;text-align:left;outline:none !important} -.btn[class^="oc-icon-"]:before,.btn[class*=" oc-icon-"]:before{font-size:14px;line-height:14px;position:relative} -.btn[disabled]{background-color:#dbdbdb;color:#aaaaaa} -.btn.active,.btn:active{-webkit-box-shadow:none;box-shadow:none} -.btn-default.on{background-color:#95a5a6;color:#f9f9f9} -.btn-group .btn{border-right:1px solid rgba(0,0,0,0.09);margin-left:0 !important} -.btn-group .btn:last-child,.btn-group .btn.last{border-right:none} -.btn-group .btn.last{border-bottom-right-radius:2px !important;border-top-right-radius:2px !important} -.btn-group > .dropdown{float:left} -.btn-group > .dropdown:not(:last-child,.last) > .btn{border-right:1px solid rgba(0,0,0,0.09);border-bottom-right-radius:0 !important;border-top-right-radius:0 !important} -.btn-group > .dropdown:not(:first-child) > .btn{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important} -.btn-group > .dropdown.last .btn{border-right:none} -.btn.offset-right,.btn-group.offset-right{margin-right:10px} -.btn-icon{display:inline-block;height:36px;font-size:21px;background:transparent;border:none;outline:none} -.btn-icon:before{display:block;color:#bcc3c7} -.btn-icon:hover:before{color:#0181b9} -.btn-icon.danger:hover:before{color:#c63e26} -.btn-icon.pull-right:before{margin-right:0} -.btn-icon.margin-left{margin-left:5px} -.btn-icon.small{font-size:17px;height:17px;line-height:15px} -.btn-icon.larger{font-size:21px;height:21px;line-height:17px} -.btn-text{font-size:13px;padding:9px 0;vertical-align:middle;display:inline-block} -.btn-text a{color:#666666} -.btn-text a:hover{color:#0181b9;text-decoration:none} -.oc-icon-glass:before,.icon-glass:before{content:"\f000"} -.oc-icon-music:before,.icon-music:before{content:"\f001"} -.oc-icon-search:before,.icon-search:before{content:"\f002"} -.oc-icon-envelope-o:before,.icon-envelope-o:before{content:"\f003"} -.oc-icon-heart:before,.icon-heart:before{content:"\f004"} -.oc-icon-star:before,.icon-star:before{content:"\f005"} -.oc-icon-star-o:before,.icon-star-o:before{content:"\f006"} -.oc-icon-user:before,.icon-user:before{content:"\f007"} -.oc-icon-film:before,.icon-film:before{content:"\f008"} -.oc-icon-th-large:before,.icon-th-large:before{content:"\f009"} -.oc-icon-th:before,.icon-th:before{content:"\f00a"} -.oc-icon-th-list:before,.icon-th-list:before{content:"\f00b"} -.oc-icon-check:before,.icon-check:before{content:"\f00c"} -.oc-icon-remove:before,.icon-remove:before,.oc-icon-close:before,.icon-close:before,.oc-icon-times:before,.icon-times:before{content:"\f00d"} -.oc-icon-search-plus:before,.icon-search-plus:before{content:"\f00e"} -.oc-icon-search-minus:before,.icon-search-minus:before{content:"\f010"} -.oc-icon-power-off:before,.icon-power-off:before{content:"\f011"} -.oc-icon-signal:before,.icon-signal:before{content:"\f012"} -.oc-icon-gear:before,.icon-gear:before,.oc-icon-cog:before,.icon-cog:before{content:"\f013"} -.oc-icon-trash-o:before,.icon-trash-o:before{content:"\f014"} -.oc-icon-home:before,.icon-home:before{content:"\f015"} -.oc-icon-file-o:before,.icon-file-o:before{content:"\f016"} -.oc-icon-clock-o:before,.icon-clock-o:before{content:"\f017"} -.oc-icon-road:before,.icon-road:before{content:"\f018"} -.oc-icon-download:before,.icon-download:before{content:"\f019"} -.oc-icon-arrow-circle-o-down:before,.icon-arrow-circle-o-down:before{content:"\f01a"} -.oc-icon-arrow-circle-o-up:before,.icon-arrow-circle-o-up:before{content:"\f01b"} -.oc-icon-inbox:before,.icon-inbox:before{content:"\f01c"} -.oc-icon-play-circle-o:before,.icon-play-circle-o:before{content:"\f01d"} -.oc-icon-rotate-right:before,.icon-rotate-right:before,.oc-icon-repeat:before,.icon-repeat:before{content:"\f01e"} -.oc-icon-refresh:before,.icon-refresh:before{content:"\f021"} -.oc-icon-list-alt:before,.icon-list-alt:before{content:"\f022"} -.oc-icon-lock:before,.icon-lock:before{content:"\f023"} -.oc-icon-flag:before,.icon-flag:before{content:"\f024"} -.oc-icon-headphones:before,.icon-headphones:before{content:"\f025"} -.oc-icon-volume-off:before,.icon-volume-off:before{content:"\f026"} -.oc-icon-volume-down:before,.icon-volume-down:before{content:"\f027"} -.oc-icon-volume-up:before,.icon-volume-up:before{content:"\f028"} -.oc-icon-qrcode:before,.icon-qrcode:before{content:"\f029"} -.oc-icon-barcode:before,.icon-barcode:before{content:"\f02a"} -.oc-icon-tag:before,.icon-tag:before{content:"\f02b"} -.oc-icon-tags:before,.icon-tags:before{content:"\f02c"} -.oc-icon-book:before,.icon-book:before{content:"\f02d"} -.oc-icon-bookmark:before,.icon-bookmark:before{content:"\f02e"} -.oc-icon-print:before,.icon-print:before{content:"\f02f"} -.oc-icon-camera:before,.icon-camera:before{content:"\f030"} -.oc-icon-font:before,.icon-font:before{content:"\f031"} -.oc-icon-bold:before,.icon-bold:before{content:"\f032"} -.oc-icon-italic:before,.icon-italic:before{content:"\f033"} -.oc-icon-text-height:before,.icon-text-height:before{content:"\f034"} -.oc-icon-text-width:before,.icon-text-width:before{content:"\f035"} -.oc-icon-align-left:before,.icon-align-left:before{content:"\f036"} -.oc-icon-align-center:before,.icon-align-center:before{content:"\f037"} -.oc-icon-align-right:before,.icon-align-right:before{content:"\f038"} -.oc-icon-align-justify:before,.icon-align-justify:before{content:"\f039"} -.oc-icon-list:before,.icon-list:before{content:"\f03a"} -.oc-icon-dedent:before,.icon-dedent:before,.oc-icon-outdent:before,.icon-outdent:before{content:"\f03b"} -.oc-icon-indent:before,.icon-indent:before{content:"\f03c"} -.oc-icon-video-camera:before,.icon-video-camera:before{content:"\f03d"} -.oc-icon-photo:before,.icon-photo:before,.oc-icon-image:before,.icon-image:before,.oc-icon-picture-o:before,.icon-picture-o:before{content:"\f03e"} -.oc-icon-pencil:before,.icon-pencil:before{content:"\f040"} -.oc-icon-map-marker:before,.icon-map-marker:before{content:"\f041"} -.oc-icon-adjust:before,.icon-adjust:before{content:"\f042"} -.oc-icon-tint:before,.icon-tint:before{content:"\f043"} -.oc-icon-edit:before,.icon-edit:before,.oc-icon-pencil-square-o:before,.icon-pencil-square-o:before{content:"\f044"} -.oc-icon-share-square-o:before,.icon-share-square-o:before{content:"\f045"} -.oc-icon-check-square-o:before,.icon-check-square-o:before{content:"\f046"} -.oc-icon-arrows:before,.icon-arrows:before{content:"\f047"} -.oc-icon-step-backward:before,.icon-step-backward:before{content:"\f048"} -.oc-icon-fast-backward:before,.icon-fast-backward:before{content:"\f049"} -.oc-icon-backward:before,.icon-backward:before{content:"\f04a"} -.oc-icon-play:before,.icon-play:before{content:"\f04b"} -.oc-icon-pause:before,.icon-pause:before{content:"\f04c"} -.oc-icon-stop:before,.icon-stop:before{content:"\f04d"} -.oc-icon-forward:before,.icon-forward:before{content:"\f04e"} -.oc-icon-fast-forward:before,.icon-fast-forward:before{content:"\f050"} -.oc-icon-step-forward:before,.icon-step-forward:before{content:"\f051"} -.oc-icon-eject:before,.icon-eject:before{content:"\f052"} -.oc-icon-chevron-left:before,.icon-chevron-left:before{content:"\f053"} -.oc-icon-chevron-right:before,.icon-chevron-right:before{content:"\f054"} -.oc-icon-plus-circle:before,.icon-plus-circle:before{content:"\f055"} -.oc-icon-minus-circle:before,.icon-minus-circle:before{content:"\f056"} -.oc-icon-times-circle:before,.icon-times-circle:before{content:"\f057"} -.oc-icon-check-circle:before,.icon-check-circle:before{content:"\f058"} -.oc-icon-question-circle:before,.icon-question-circle:before{content:"\f059"} -.oc-icon-info-circle:before,.icon-info-circle:before{content:"\f05a"} -.oc-icon-crosshairs:before,.icon-crosshairs:before{content:"\f05b"} -.oc-icon-times-circle-o:before,.icon-times-circle-o:before{content:"\f05c"} -.oc-icon-check-circle-o:before,.icon-check-circle-o:before{content:"\f05d"} -.oc-icon-ban:before,.icon-ban:before{content:"\f05e"} -.oc-icon-arrow-left:before,.icon-arrow-left:before{content:"\f060"} -.oc-icon-arrow-right:before,.icon-arrow-right:before{content:"\f061"} -.oc-icon-arrow-up:before,.icon-arrow-up:before{content:"\f062"} -.oc-icon-arrow-down:before,.icon-arrow-down:before{content:"\f063"} -.oc-icon-mail-forward:before,.icon-mail-forward:before,.oc-icon-share:before,.icon-share:before{content:"\f064"} -.oc-icon-expand:before,.icon-expand:before{content:"\f065"} -.oc-icon-compress:before,.icon-compress:before{content:"\f066"} -.oc-icon-plus:before,.icon-plus:before{content:"\f067"} -.oc-icon-minus:before,.icon-minus:before{content:"\f068"} -.oc-icon-asterisk:before,.icon-asterisk:before{content:"\f069"} -.oc-icon-exclamation-circle:before,.icon-exclamation-circle:before{content:"\f06a"} -.oc-icon-gift:before,.icon-gift:before{content:"\f06b"} -.oc-icon-leaf:before,.icon-leaf:before{content:"\f06c"} -.oc-icon-fire:before,.icon-fire:before{content:"\f06d"} -.oc-icon-eye:before,.icon-eye:before{content:"\f06e"} -.oc-icon-eye-slash:before,.icon-eye-slash:before{content:"\f070"} -.oc-icon-warning:before,.icon-warning:before,.oc-icon-exclamation-triangle:before,.icon-exclamation-triangle:before{content:"\f071"} -.oc-icon-plane:before,.icon-plane:before{content:"\f072"} -.oc-icon-calendar:before,.icon-calendar:before{content:"\f073"} -.oc-icon-random:before,.icon-random:before{content:"\f074"} -.oc-icon-comment:before,.icon-comment:before{content:"\f075"} -.oc-icon-magnet:before,.icon-magnet:before{content:"\f076"} -.oc-icon-chevron-up:before,.icon-chevron-up:before{content:"\f077"} -.oc-icon-chevron-down:before,.icon-chevron-down:before{content:"\f078"} -.oc-icon-retweet:before,.icon-retweet:before{content:"\f079"} -.oc-icon-shopping-cart:before,.icon-shopping-cart:before{content:"\f07a"} -.oc-icon-folder:before,.icon-folder:before{content:"\f07b"} -.oc-icon-folder-open:before,.icon-folder-open:before{content:"\f07c"} -.oc-icon-arrows-v:before,.icon-arrows-v:before{content:"\f07d"} -.oc-icon-arrows-h:before,.icon-arrows-h:before{content:"\f07e"} -.oc-icon-bar-chart-o:before,.icon-bar-chart-o:before,.oc-icon-bar-chart:before,.icon-bar-chart:before{content:"\f080"} -.oc-icon-twitter-square:before,.icon-twitter-square:before{content:"\f081"} -.oc-icon-facebook-square:before,.icon-facebook-square:before{content:"\f082"} -.oc-icon-camera-retro:before,.icon-camera-retro:before{content:"\f083"} -.oc-icon-key:before,.icon-key:before{content:"\f084"} -.oc-icon-gears:before,.icon-gears:before,.oc-icon-cogs:before,.icon-cogs:before{content:"\f085"} -.oc-icon-comments:before,.icon-comments:before{content:"\f086"} -.oc-icon-thumbs-o-up:before,.icon-thumbs-o-up:before{content:"\f087"} -.oc-icon-thumbs-o-down:before,.icon-thumbs-o-down:before{content:"\f088"} -.oc-icon-star-half:before,.icon-star-half:before{content:"\f089"} -.oc-icon-heart-o:before,.icon-heart-o:before{content:"\f08a"} -.oc-icon-sign-out:before,.icon-sign-out:before{content:"\f08b"} -.oc-icon-linkedin-square:before,.icon-linkedin-square:before{content:"\f08c"} -.oc-icon-thumb-tack:before,.icon-thumb-tack:before{content:"\f08d"} -.oc-icon-external-link:before,.icon-external-link:before{content:"\f08e"} -.oc-icon-sign-in:before,.icon-sign-in:before{content:"\f090"} -.oc-icon-trophy:before,.icon-trophy:before{content:"\f091"} -.oc-icon-github-square:before,.icon-github-square:before{content:"\f092"} -.oc-icon-upload:before,.icon-upload:before{content:"\f093"} -.oc-icon-lemon-o:before,.icon-lemon-o:before{content:"\f094"} -.oc-icon-phone:before,.icon-phone:before{content:"\f095"} -.oc-icon-square-o:before,.icon-square-o:before{content:"\f096"} -.oc-icon-bookmark-o:before,.icon-bookmark-o:before{content:"\f097"} -.oc-icon-phone-square:before,.icon-phone-square:before{content:"\f098"} -.oc-icon-twitter:before,.icon-twitter:before{content:"\f099"} -.oc-icon-facebook-f:before,.icon-facebook-f:before,.oc-icon-facebook:before,.icon-facebook:before{content:"\f09a"} -.oc-icon-github:before,.icon-github:before{content:"\f09b"} -.oc-icon-unlock:before,.icon-unlock:before{content:"\f09c"} -.oc-icon-credit-card:before,.icon-credit-card:before{content:"\f09d"} -.oc-icon-rss:before,.icon-rss:before{content:"\f09e"} -.oc-icon-hdd-o:before,.icon-hdd-o:before{content:"\f0a0"} -.oc-icon-bullhorn:before,.icon-bullhorn:before{content:"\f0a1"} -.oc-icon-bell:before,.icon-bell:before{content:"\f0f3"} -.oc-icon-certificate:before,.icon-certificate:before{content:"\f0a3"} -.oc-icon-hand-o-right:before,.icon-hand-o-right:before{content:"\f0a4"} -.oc-icon-hand-o-left:before,.icon-hand-o-left:before{content:"\f0a5"} -.oc-icon-hand-o-up:before,.icon-hand-o-up:before{content:"\f0a6"} -.oc-icon-hand-o-down:before,.icon-hand-o-down:before{content:"\f0a7"} -.oc-icon-arrow-circle-left:before,.icon-arrow-circle-left:before{content:"\f0a8"} -.oc-icon-arrow-circle-right:before,.icon-arrow-circle-right:before{content:"\f0a9"} -.oc-icon-arrow-circle-up:before,.icon-arrow-circle-up:before{content:"\f0aa"} -.oc-icon-arrow-circle-down:before,.icon-arrow-circle-down:before{content:"\f0ab"} -.oc-icon-globe:before,.icon-globe:before{content:"\f0ac"} -.oc-icon-wrench:before,.icon-wrench:before{content:"\f0ad"} -.oc-icon-tasks:before,.icon-tasks:before{content:"\f0ae"} -.oc-icon-filter:before,.icon-filter:before{content:"\f0b0"} -.oc-icon-briefcase:before,.icon-briefcase:before{content:"\f0b1"} -.oc-icon-arrows-alt:before,.icon-arrows-alt:before{content:"\f0b2"} -.oc-icon-group:before,.icon-group:before,.oc-icon-users:before,.icon-users:before{content:"\f0c0"} -.oc-icon-chain:before,.icon-chain:before,.oc-icon-link:before,.icon-link:before{content:"\f0c1"} -.oc-icon-cloud:before,.icon-cloud:before{content:"\f0c2"} -.oc-icon-flask:before,.icon-flask:before{content:"\f0c3"} -.oc-icon-cut:before,.icon-cut:before,.oc-icon-scissors:before,.icon-scissors:before{content:"\f0c4"} -.oc-icon-copy:before,.icon-copy:before,.oc-icon-files-o:before,.icon-files-o:before{content:"\f0c5"} -.oc-icon-paperclip:before,.icon-paperclip:before{content:"\f0c6"} -.oc-icon-save:before,.icon-save:before,.oc-icon-floppy-o:before,.icon-floppy-o:before{content:"\f0c7"} -.oc-icon-square:before,.icon-square:before{content:"\f0c8"} -.oc-icon-navicon:before,.icon-navicon:before,.oc-icon-reorder:before,.icon-reorder:before,.oc-icon-bars:before,.icon-bars:before{content:"\f0c9"} -.oc-icon-list-ul:before,.icon-list-ul:before{content:"\f0ca"} -.oc-icon-list-ol:before,.icon-list-ol:before{content:"\f0cb"} -.oc-icon-strikethrough:before,.icon-strikethrough:before{content:"\f0cc"} -.oc-icon-underline:before,.icon-underline:before{content:"\f0cd"} -.oc-icon-table:before,.icon-table:before{content:"\f0ce"} -.oc-icon-magic:before,.icon-magic:before{content:"\f0d0"} -.oc-icon-truck:before,.icon-truck:before{content:"\f0d1"} -.oc-icon-pinterest:before,.icon-pinterest:before{content:"\f0d2"} -.oc-icon-pinterest-square:before,.icon-pinterest-square:before{content:"\f0d3"} -.oc-icon-google-plus-square:before,.icon-google-plus-square:before{content:"\f0d4"} -.oc-icon-google-plus:before,.icon-google-plus:before{content:"\f0d5"} -.oc-icon-money:before,.icon-money:before{content:"\f0d6"} -.oc-icon-caret-down:before,.icon-caret-down:before{content:"\f0d7"} -.oc-icon-caret-up:before,.icon-caret-up:before{content:"\f0d8"} -.oc-icon-caret-left:before,.icon-caret-left:before{content:"\f0d9"} -.oc-icon-caret-right:before,.icon-caret-right:before{content:"\f0da"} -.oc-icon-columns:before,.icon-columns:before{content:"\f0db"} -.oc-icon-unsorted:before,.icon-unsorted:before,.oc-icon-sort:before,.icon-sort:before{content:"\f0dc"} -.oc-icon-sort-down:before,.icon-sort-down:before,.oc-icon-sort-desc:before,.icon-sort-desc:before{content:"\f0dd"} -.oc-icon-sort-up:before,.icon-sort-up:before,.oc-icon-sort-asc:before,.icon-sort-asc:before{content:"\f0de"} -.oc-icon-envelope:before,.icon-envelope:before{content:"\f0e0"} -.oc-icon-linkedin:before,.icon-linkedin:before{content:"\f0e1"} -.oc-icon-rotate-left:before,.icon-rotate-left:before,.oc-icon-undo:before,.icon-undo:before{content:"\f0e2"} -.oc-icon-legal:before,.icon-legal:before,.oc-icon-gavel:before,.icon-gavel:before{content:"\f0e3"} -.oc-icon-dashboard:before,.icon-dashboard:before,.oc-icon-tachometer:before,.icon-tachometer:before{content:"\f0e4"} -.oc-icon-comment-o:before,.icon-comment-o:before{content:"\f0e5"} -.oc-icon-comments-o:before,.icon-comments-o:before{content:"\f0e6"} -.oc-icon-flash:before,.icon-flash:before,.oc-icon-bolt:before,.icon-bolt:before{content:"\f0e7"} -.oc-icon-sitemap:before,.icon-sitemap:before{content:"\f0e8"} -.oc-icon-umbrella:before,.icon-umbrella:before{content:"\f0e9"} -.oc-icon-paste:before,.icon-paste:before,.oc-icon-clipboard:before,.icon-clipboard:before{content:"\f0ea"} -.oc-icon-lightbulb-o:before,.icon-lightbulb-o:before{content:"\f0eb"} -.oc-icon-exchange:before,.icon-exchange:before{content:"\f0ec"} -.oc-icon-cloud-download:before,.icon-cloud-download:before{content:"\f0ed"} -.oc-icon-cloud-upload:before,.icon-cloud-upload:before{content:"\f0ee"} -.oc-icon-user-md:before,.icon-user-md:before{content:"\f0f0"} -.oc-icon-stethoscope:before,.icon-stethoscope:before{content:"\f0f1"} -.oc-icon-suitcase:before,.icon-suitcase:before{content:"\f0f2"} -.oc-icon-bell-o:before,.icon-bell-o:before{content:"\f0a2"} -.oc-icon-coffee:before,.icon-coffee:before{content:"\f0f4"} -.oc-icon-cutlery:before,.icon-cutlery:before{content:"\f0f5"} -.oc-icon-file-text-o:before,.icon-file-text-o:before{content:"\f0f6"} -.oc-icon-building-o:before,.icon-building-o:before{content:"\f0f7"} -.oc-icon-hospital-o:before,.icon-hospital-o:before{content:"\f0f8"} -.oc-icon-ambulance:before,.icon-ambulance:before{content:"\f0f9"} -.oc-icon-medkit:before,.icon-medkit:before{content:"\f0fa"} -.oc-icon-fighter-jet:before,.icon-fighter-jet:before{content:"\f0fb"} -.oc-icon-beer:before,.icon-beer:before{content:"\f0fc"} -.oc-icon-h-square:before,.icon-h-square:before{content:"\f0fd"} -.oc-icon-plus-square:before,.icon-plus-square:before{content:"\f0fe"} -.oc-icon-angle-double-left:before,.icon-angle-double-left:before{content:"\f100"} -.oc-icon-angle-double-right:before,.icon-angle-double-right:before{content:"\f101"} -.oc-icon-angle-double-up:before,.icon-angle-double-up:before{content:"\f102"} -.oc-icon-angle-double-down:before,.icon-angle-double-down:before{content:"\f103"} -.oc-icon-angle-left:before,.icon-angle-left:before{content:"\f104"} -.oc-icon-angle-right:before,.icon-angle-right:before{content:"\f105"} -.oc-icon-angle-up:before,.icon-angle-up:before{content:"\f106"} -.oc-icon-angle-down:before,.icon-angle-down:before{content:"\f107"} -.oc-icon-desktop:before,.icon-desktop:before{content:"\f108"} -.oc-icon-laptop:before,.icon-laptop:before{content:"\f109"} -.oc-icon-tablet:before,.icon-tablet:before{content:"\f10a"} -.oc-icon-mobile-phone:before,.icon-mobile-phone:before,.oc-icon-mobile:before,.icon-mobile:before{content:"\f10b"} -.oc-icon-circle-o:before,.icon-circle-o:before{content:"\f10c"} -.oc-icon-quote-left:before,.icon-quote-left:before{content:"\f10d"} -.oc-icon-quote-right:before,.icon-quote-right:before{content:"\f10e"} -.oc-icon-spinner:before,.icon-spinner:before{content:"\f110"} -.oc-icon-circle:before,.icon-circle:before{content:"\f111"} -.oc-icon-mail-reply:before,.icon-mail-reply:before,.oc-icon-reply:before,.icon-reply:before{content:"\f112"} -.oc-icon-github-alt:before,.icon-github-alt:before{content:"\f113"} -.oc-icon-folder-o:before,.icon-folder-o:before{content:"\f114"} -.oc-icon-folder-open-o:before,.icon-folder-open-o:before{content:"\f115"} -.oc-icon-smile-o:before,.icon-smile-o:before{content:"\f118"} -.oc-icon-frown-o:before,.icon-frown-o:before{content:"\f119"} -.oc-icon-meh-o:before,.icon-meh-o:before{content:"\f11a"} -.oc-icon-gamepad:before,.icon-gamepad:before{content:"\f11b"} -.oc-icon-keyboard-o:before,.icon-keyboard-o:before{content:"\f11c"} -.oc-icon-flag-o:before,.icon-flag-o:before{content:"\f11d"} -.oc-icon-flag-checkered:before,.icon-flag-checkered:before{content:"\f11e"} -.oc-icon-terminal:before,.icon-terminal:before{content:"\f120"} -.oc-icon-code:before,.icon-code:before{content:"\f121"} -.oc-icon-mail-reply-all:before,.icon-mail-reply-all:before,.oc-icon-reply-all:before,.icon-reply-all:before{content:"\f122"} -.oc-icon-star-half-empty:before,.icon-star-half-empty:before,.oc-icon-star-half-full:before,.icon-star-half-full:before,.oc-icon-star-half-o:before,.icon-star-half-o:before{content:"\f123"} -.oc-icon-location-arrow:before,.icon-location-arrow:before{content:"\f124"} -.oc-icon-crop:before,.icon-crop:before{content:"\f125"} -.oc-icon-code-fork:before,.icon-code-fork:before{content:"\f126"} -.oc-icon-unlink:before,.icon-unlink:before,.oc-icon-chain-broken:before,.icon-chain-broken:before{content:"\f127"} -.oc-icon-question:before,.icon-question:before{content:"\f128"} -.oc-icon-info:before,.icon-info:before{content:"\f129"} -.oc-icon-exclamation:before,.icon-exclamation:before{content:"\f12a"} -.oc-icon-superscript:before,.icon-superscript:before{content:"\f12b"} -.oc-icon-subscript:before,.icon-subscript:before{content:"\f12c"} -.oc-icon-eraser:before,.icon-eraser:before{content:"\f12d"} -.oc-icon-puzzle-piece:before,.icon-puzzle-piece:before{content:"\f12e"} -.oc-icon-microphone:before,.icon-microphone:before{content:"\f130"} -.oc-icon-microphone-slash:before,.icon-microphone-slash:before{content:"\f131"} -.oc-icon-shield:before,.icon-shield:before{content:"\f132"} -.oc-icon-calendar-o:before,.icon-calendar-o:before{content:"\f133"} -.oc-icon-fire-extinguisher:before,.icon-fire-extinguisher:before{content:"\f134"} -.oc-icon-rocket:before,.icon-rocket:before{content:"\f135"} -.oc-icon-maxcdn:before,.icon-maxcdn:before{content:"\f136"} -.oc-icon-chevron-circle-left:before,.icon-chevron-circle-left:before{content:"\f137"} -.oc-icon-chevron-circle-right:before,.icon-chevron-circle-right:before{content:"\f138"} -.oc-icon-chevron-circle-up:before,.icon-chevron-circle-up:before{content:"\f139"} -.oc-icon-chevron-circle-down:before,.icon-chevron-circle-down:before{content:"\f13a"} -.oc-icon-html5:before,.icon-html5:before{content:"\f13b"} -.oc-icon-css3:before,.icon-css3:before{content:"\f13c"} -.oc-icon-anchor:before,.icon-anchor:before{content:"\f13d"} -.oc-icon-unlock-alt:before,.icon-unlock-alt:before{content:"\f13e"} -.oc-icon-bullseye:before,.icon-bullseye:before{content:"\f140"} -.oc-icon-ellipsis-h:before,.icon-ellipsis-h:before{content:"\f141"} -.oc-icon-ellipsis-v:before,.icon-ellipsis-v:before{content:"\f142"} -.oc-icon-rss-square:before,.icon-rss-square:before{content:"\f143"} -.oc-icon-play-circle:before,.icon-play-circle:before{content:"\f144"} -.oc-icon-ticket:before,.icon-ticket:before{content:"\f145"} -.oc-icon-minus-square:before,.icon-minus-square:before{content:"\f146"} -.oc-icon-minus-square-o:before,.icon-minus-square-o:before{content:"\f147"} -.oc-icon-level-up:before,.icon-level-up:before{content:"\f148"} -.oc-icon-level-down:before,.icon-level-down:before{content:"\f149"} -.oc-icon-check-square:before,.icon-check-square:before{content:"\f14a"} -.oc-icon-pencil-square:before,.icon-pencil-square:before{content:"\f14b"} -.oc-icon-external-link-square:before,.icon-external-link-square:before{content:"\f14c"} -.oc-icon-share-square:before,.icon-share-square:before{content:"\f14d"} -.oc-icon-compass:before,.icon-compass:before{content:"\f14e"} -.oc-icon-toggle-down:before,.icon-toggle-down:before,.oc-icon-caret-square-o-down:before,.icon-caret-square-o-down:before{content:"\f150"} -.oc-icon-toggle-up:before,.icon-toggle-up:before,.oc-icon-caret-square-o-up:before,.icon-caret-square-o-up:before{content:"\f151"} -.oc-icon-toggle-right:before,.icon-toggle-right:before,.oc-icon-caret-square-o-right:before,.icon-caret-square-o-right:before{content:"\f152"} -.oc-icon-euro:before,.icon-euro:before,.oc-icon-eur:before,.icon-eur:before{content:"\f153"} -.oc-icon-gbp:before,.icon-gbp:before{content:"\f154"} -.oc-icon-dollar:before,.icon-dollar:before,.oc-icon-usd:before,.icon-usd:before{content:"\f155"} -.oc-icon-rupee:before,.icon-rupee:before,.oc-icon-inr:before,.icon-inr:before{content:"\f156"} -.oc-icon-cny:before,.icon-cny:before,.oc-icon-rmb:before,.icon-rmb:before,.oc-icon-yen:before,.icon-yen:before,.oc-icon-jpy:before,.icon-jpy:before{content:"\f157"} -.oc-icon-ruble:before,.icon-ruble:before,.oc-icon-rouble:before,.icon-rouble:before,.oc-icon-rub:before,.icon-rub:before{content:"\f158"} -.oc-icon-won:before,.icon-won:before,.oc-icon-krw:before,.icon-krw:before{content:"\f159"} -.oc-icon-bitcoin:before,.icon-bitcoin:before,.oc-icon-btc:before,.icon-btc:before{content:"\f15a"} -.oc-icon-file:before,.icon-file:before{content:"\f15b"} -.oc-icon-file-text:before,.icon-file-text:before{content:"\f15c"} -.oc-icon-sort-alpha-asc:before,.icon-sort-alpha-asc:before{content:"\f15d"} -.oc-icon-sort-alpha-desc:before,.icon-sort-alpha-desc:before{content:"\f15e"} -.oc-icon-sort-amount-asc:before,.icon-sort-amount-asc:before{content:"\f160"} -.oc-icon-sort-amount-desc:before,.icon-sort-amount-desc:before{content:"\f161"} -.oc-icon-sort-numeric-asc:before,.icon-sort-numeric-asc:before{content:"\f162"} -.oc-icon-sort-numeric-desc:before,.icon-sort-numeric-desc:before{content:"\f163"} -.oc-icon-thumbs-up:before,.icon-thumbs-up:before{content:"\f164"} -.oc-icon-thumbs-down:before,.icon-thumbs-down:before{content:"\f165"} -.oc-icon-youtube-square:before,.icon-youtube-square:before{content:"\f166"} -.oc-icon-youtube:before,.icon-youtube:before{content:"\f167"} -.oc-icon-xing:before,.icon-xing:before{content:"\f168"} -.oc-icon-xing-square:before,.icon-xing-square:before{content:"\f169"} -.oc-icon-youtube-play:before,.icon-youtube-play:before{content:"\f16a"} -.oc-icon-dropbox:before,.icon-dropbox:before{content:"\f16b"} -.oc-icon-stack-overflow:before,.icon-stack-overflow:before{content:"\f16c"} -.oc-icon-instagram:before,.icon-instagram:before{content:"\f16d"} -.oc-icon-flickr:before,.icon-flickr:before{content:"\f16e"} -.oc-icon-adn:before,.icon-adn:before{content:"\f170"} -.oc-icon-bitbucket:before,.icon-bitbucket:before{content:"\f171"} -.oc-icon-bitbucket-square:before,.icon-bitbucket-square:before{content:"\f172"} -.oc-icon-tumblr:before,.icon-tumblr:before{content:"\f173"} -.oc-icon-tumblr-square:before,.icon-tumblr-square:before{content:"\f174"} -.oc-icon-long-arrow-down:before,.icon-long-arrow-down:before{content:"\f175"} -.oc-icon-long-arrow-up:before,.icon-long-arrow-up:before{content:"\f176"} -.oc-icon-long-arrow-left:before,.icon-long-arrow-left:before{content:"\f177"} -.oc-icon-long-arrow-right:before,.icon-long-arrow-right:before{content:"\f178"} -.oc-icon-apple:before,.icon-apple:before{content:"\f179"} -.oc-icon-windows:before,.icon-windows:before{content:"\f17a"} -.oc-icon-android:before,.icon-android:before{content:"\f17b"} -.oc-icon-linux:before,.icon-linux:before{content:"\f17c"} -.oc-icon-dribbble:before,.icon-dribbble:before{content:"\f17d"} -.oc-icon-skype:before,.icon-skype:before{content:"\f17e"} -.oc-icon-foursquare:before,.icon-foursquare:before{content:"\f180"} -.oc-icon-trello:before,.icon-trello:before{content:"\f181"} -.oc-icon-female:before,.icon-female:before{content:"\f182"} -.oc-icon-male:before,.icon-male:before{content:"\f183"} -.oc-icon-gittip:before,.icon-gittip:before,.oc-icon-gratipay:before,.icon-gratipay:before{content:"\f184"} -.oc-icon-sun-o:before,.icon-sun-o:before{content:"\f185"} -.oc-icon-moon-o:before,.icon-moon-o:before{content:"\f186"} -.oc-icon-archive:before,.icon-archive:before{content:"\f187"} -.oc-icon-bug:before,.icon-bug:before{content:"\f188"} -.oc-icon-vk:before,.icon-vk:before{content:"\f189"} -.oc-icon-weibo:before,.icon-weibo:before{content:"\f18a"} -.oc-icon-renren:before,.icon-renren:before{content:"\f18b"} -.oc-icon-pagelines:before,.icon-pagelines:before{content:"\f18c"} -.oc-icon-stack-exchange:before,.icon-stack-exchange:before{content:"\f18d"} -.oc-icon-arrow-circle-o-right:before,.icon-arrow-circle-o-right:before{content:"\f18e"} -.oc-icon-arrow-circle-o-left:before,.icon-arrow-circle-o-left:before{content:"\f190"} -.oc-icon-toggle-left:before,.icon-toggle-left:before,.oc-icon-caret-square-o-left:before,.icon-caret-square-o-left:before{content:"\f191"} -.oc-icon-dot-circle-o:before,.icon-dot-circle-o:before{content:"\f192"} -.oc-icon-wheelchair:before,.icon-wheelchair:before{content:"\f193"} -.oc-icon-vimeo-square:before,.icon-vimeo-square:before{content:"\f194"} -.oc-icon-turkish-lira:before,.icon-turkish-lira:before,.oc-icon-try:before,.icon-try:before{content:"\f195"} -.oc-icon-plus-square-o:before,.icon-plus-square-o:before{content:"\f196"} -.oc-icon-space-shuttle:before,.icon-space-shuttle:before{content:"\f197"} -.oc-icon-slack:before,.icon-slack:before{content:"\f198"} -.oc-icon-envelope-square:before,.icon-envelope-square:before{content:"\f199"} -.oc-icon-wordpress:before,.icon-wordpress:before{content:"\f19a"} -.oc-icon-openid:before,.icon-openid:before{content:"\f19b"} -.oc-icon-institution:before,.icon-institution:before,.oc-icon-bank:before,.icon-bank:before,.oc-icon-university:before,.icon-university:before{content:"\f19c"} -.oc-icon-mortar-board:before,.icon-mortar-board:before,.oc-icon-graduation-cap:before,.icon-graduation-cap:before{content:"\f19d"} -.oc-icon-yahoo:before,.icon-yahoo:before{content:"\f19e"} -.oc-icon-google:before,.icon-google:before{content:"\f1a0"} -.oc-icon-reddit:before,.icon-reddit:before{content:"\f1a1"} -.oc-icon-reddit-square:before,.icon-reddit-square:before{content:"\f1a2"} -.oc-icon-stumbleupon-circle:before,.icon-stumbleupon-circle:before{content:"\f1a3"} -.oc-icon-stumbleupon:before,.icon-stumbleupon:before{content:"\f1a4"} -.oc-icon-delicious:before,.icon-delicious:before{content:"\f1a5"} -.oc-icon-digg:before,.icon-digg:before{content:"\f1a6"} -.oc-icon-pied-piper:before,.icon-pied-piper:before{content:"\f1a7"} -.oc-icon-pied-piper-alt:before,.icon-pied-piper-alt:before{content:"\f1a8"} -.oc-icon-drupal:before,.icon-drupal:before{content:"\f1a9"} -.oc-icon-joomla:before,.icon-joomla:before{content:"\f1aa"} -.oc-icon-language:before,.icon-language:before{content:"\f1ab"} -.oc-icon-fax:before,.icon-fax:before{content:"\f1ac"} -.oc-icon-building:before,.icon-building:before{content:"\f1ad"} -.oc-icon-child:before,.icon-child:before{content:"\f1ae"} -.oc-icon-paw:before,.icon-paw:before{content:"\f1b0"} -.oc-icon-spoon:before,.icon-spoon:before{content:"\f1b1"} -.oc-icon-cube:before,.icon-cube:before{content:"\f1b2"} -.oc-icon-cubes:before,.icon-cubes:before{content:"\f1b3"} -.oc-icon-behance:before,.icon-behance:before{content:"\f1b4"} -.oc-icon-behance-square:before,.icon-behance-square:before{content:"\f1b5"} -.oc-icon-steam:before,.icon-steam:before{content:"\f1b6"} -.oc-icon-steam-square:before,.icon-steam-square:before{content:"\f1b7"} -.oc-icon-recycle:before,.icon-recycle:before{content:"\f1b8"} -.oc-icon-automobile:before,.icon-automobile:before,.oc-icon-car:before,.icon-car:before{content:"\f1b9"} -.oc-icon-cab:before,.icon-cab:before,.oc-icon-taxi:before,.icon-taxi:before{content:"\f1ba"} -.oc-icon-tree:before,.icon-tree:before{content:"\f1bb"} -.oc-icon-spotify:before,.icon-spotify:before{content:"\f1bc"} -.oc-icon-deviantart:before,.icon-deviantart:before{content:"\f1bd"} -.oc-icon-soundcloud:before,.icon-soundcloud:before{content:"\f1be"} -.oc-icon-database:before,.icon-database:before{content:"\f1c0"} -.oc-icon-file-pdf-o:before,.icon-file-pdf-o:before{content:"\f1c1"} -.oc-icon-file-word-o:before,.icon-file-word-o:before{content:"\f1c2"} -.oc-icon-file-excel-o:before,.icon-file-excel-o:before{content:"\f1c3"} -.oc-icon-file-powerpoint-o:before,.icon-file-powerpoint-o:before{content:"\f1c4"} -.oc-icon-file-photo-o:before,.icon-file-photo-o:before,.oc-icon-file-picture-o:before,.icon-file-picture-o:before,.oc-icon-file-image-o:before,.icon-file-image-o:before{content:"\f1c5"} -.oc-icon-file-zip-o:before,.icon-file-zip-o:before,.oc-icon-file-archive-o:before,.icon-file-archive-o:before{content:"\f1c6"} -.oc-icon-file-sound-o:before,.icon-file-sound-o:before,.oc-icon-file-audio-o:before,.icon-file-audio-o:before{content:"\f1c7"} -.oc-icon-file-movie-o:before,.icon-file-movie-o:before,.oc-icon-file-video-o:before,.icon-file-video-o:before{content:"\f1c8"} -.oc-icon-file-code-o:before,.icon-file-code-o:before{content:"\f1c9"} -.oc-icon-vine:before,.icon-vine:before{content:"\f1ca"} -.oc-icon-codepen:before,.icon-codepen:before{content:"\f1cb"} -.oc-icon-jsfiddle:before,.icon-jsfiddle:before{content:"\f1cc"} -.oc-icon-life-bouy:before,.icon-life-bouy:before,.oc-icon-life-buoy:before,.icon-life-buoy:before,.oc-icon-life-saver:before,.icon-life-saver:before,.oc-icon-support:before,.icon-support:before,.oc-icon-life-ring:before,.icon-life-ring:before{content:"\f1cd"} -.oc-icon-circle-o-notch:before,.icon-circle-o-notch:before{content:"\f1ce"} -.oc-icon-ra:before,.icon-ra:before,.oc-icon-rebel:before,.icon-rebel:before{content:"\f1d0"} -.oc-icon-ge:before,.icon-ge:before,.oc-icon-empire:before,.icon-empire:before{content:"\f1d1"} -.oc-icon-git-square:before,.icon-git-square:before{content:"\f1d2"} -.oc-icon-git:before,.icon-git:before{content:"\f1d3"} -.oc-icon-hacker-news:before,.icon-hacker-news:before{content:"\f1d4"} -.oc-icon-tencent-weibo:before,.icon-tencent-weibo:before{content:"\f1d5"} -.oc-icon-qq:before,.icon-qq:before{content:"\f1d6"} -.oc-icon-wechat:before,.icon-wechat:before,.oc-icon-weixin:before,.icon-weixin:before{content:"\f1d7"} -.oc-icon-send:before,.icon-send:before,.oc-icon-paper-plane:before,.icon-paper-plane:before{content:"\f1d8"} -.oc-icon-send-o:before,.icon-send-o:before,.oc-icon-paper-plane-o:before,.icon-paper-plane-o:before{content:"\f1d9"} -.oc-icon-history:before,.icon-history:before{content:"\f1da"} -.oc-icon-genderless:before,.icon-genderless:before,.oc-icon-circle-thin:before,.icon-circle-thin:before{content:"\f1db"} -.oc-icon-header:before,.icon-header:before{content:"\f1dc"} -.oc-icon-paragraph:before,.icon-paragraph:before{content:"\f1dd"} -.oc-icon-sliders:before,.icon-sliders:before{content:"\f1de"} -.oc-icon-share-alt:before,.icon-share-alt:before{content:"\f1e0"} -.oc-icon-share-alt-square:before,.icon-share-alt-square:before{content:"\f1e1"} -.oc-icon-bomb:before,.icon-bomb:before{content:"\f1e2"} -.oc-icon-soccer-ball-o:before,.icon-soccer-ball-o:before,.oc-icon-futbol-o:before,.icon-futbol-o:before{content:"\f1e3"} -.oc-icon-tty:before,.icon-tty:before{content:"\f1e4"} -.oc-icon-binoculars:before,.icon-binoculars:before{content:"\f1e5"} -.oc-icon-plug:before,.icon-plug:before{content:"\f1e6"} -.oc-icon-slideshare:before,.icon-slideshare:before{content:"\f1e7"} -.oc-icon-twitch:before,.icon-twitch:before{content:"\f1e8"} -.oc-icon-yelp:before,.icon-yelp:before{content:"\f1e9"} -.oc-icon-newspaper-o:before,.icon-newspaper-o:before{content:"\f1ea"} -.oc-icon-wifi:before,.icon-wifi:before{content:"\f1eb"} -.oc-icon-calculator:before,.icon-calculator:before{content:"\f1ec"} -.oc-icon-paypal:before,.icon-paypal:before{content:"\f1ed"} -.oc-icon-google-wallet:before,.icon-google-wallet:before{content:"\f1ee"} -.oc-icon-cc-visa:before,.icon-cc-visa:before{content:"\f1f0"} -.oc-icon-cc-mastercard:before,.icon-cc-mastercard:before{content:"\f1f1"} -.oc-icon-cc-discover:before,.icon-cc-discover:before{content:"\f1f2"} -.oc-icon-cc-amex:before,.icon-cc-amex:before{content:"\f1f3"} -.oc-icon-cc-paypal:before,.icon-cc-paypal:before{content:"\f1f4"} -.oc-icon-cc-stripe:before,.icon-cc-stripe:before{content:"\f1f5"} -.oc-icon-bell-slash:before,.icon-bell-slash:before{content:"\f1f6"} -.oc-icon-bell-slash-o:before,.icon-bell-slash-o:before{content:"\f1f7"} -.oc-icon-trash:before,.icon-trash:before{content:"\f1f8"} -.oc-icon-copyright:before,.icon-copyright:before{content:"\f1f9"} -.oc-icon-at:before,.icon-at:before{content:"\f1fa"} -.oc-icon-eyedropper:before,.icon-eyedropper:before{content:"\f1fb"} -.oc-icon-paint-brush:before,.icon-paint-brush:before{content:"\f1fc"} -.oc-icon-birthday-cake:before,.icon-birthday-cake:before{content:"\f1fd"} -.oc-icon-area-chart:before,.icon-area-chart:before{content:"\f1fe"} -.oc-icon-pie-chart:before,.icon-pie-chart:before{content:"\f200"} -.oc-icon-line-chart:before,.icon-line-chart:before{content:"\f201"} -.oc-icon-lastfm:before,.icon-lastfm:before{content:"\f202"} -.oc-icon-lastfm-square:before,.icon-lastfm-square:before{content:"\f203"} -.oc-icon-toggle-off:before,.icon-toggle-off:before{content:"\f204"} -.oc-icon-toggle-on:before,.icon-toggle-on:before{content:"\f205"} -.oc-icon-bicycle:before,.icon-bicycle:before{content:"\f206"} -.oc-icon-bus:before,.icon-bus:before{content:"\f207"} -.oc-icon-ioxhost:before,.icon-ioxhost:before{content:"\f208"} -.oc-icon-angellist:before,.icon-angellist:before{content:"\f209"} -.oc-icon-cc:before,.icon-cc:before{content:"\f20a"} -.oc-icon-shekel:before,.icon-shekel:before,.oc-icon-sheqel:before,.icon-sheqel:before,.oc-icon-ils:before,.icon-ils:before{content:"\f20b"} -.oc-icon-meanpath:before,.icon-meanpath:before{content:"\f20c"} -.oc-icon-buysellads:before,.icon-buysellads:before{content:"\f20d"} -.oc-icon-connectdevelop:before,.icon-connectdevelop:before{content:"\f20e"} -.oc-icon-dashcube:before,.icon-dashcube:before{content:"\f210"} -.oc-icon-forumbee:before,.icon-forumbee:before{content:"\f211"} -.oc-icon-leanpub:before,.icon-leanpub:before{content:"\f212"} -.oc-icon-sellsy:before,.icon-sellsy:before{content:"\f213"} -.oc-icon-shirtsinbulk:before,.icon-shirtsinbulk:before{content:"\f214"} -.oc-icon-simplybuilt:before,.icon-simplybuilt:before{content:"\f215"} -.oc-icon-skyatlas:before,.icon-skyatlas:before{content:"\f216"} -.oc-icon-cart-plus:before,.icon-cart-plus:before{content:"\f217"} -.oc-icon-cart-arrow-down:before,.icon-cart-arrow-down:before{content:"\f218"} -.oc-icon-diamond:before,.icon-diamond:before{content:"\f219"} -.oc-icon-ship:before,.icon-ship:before{content:"\f21a"} -.oc-icon-user-secret:before,.icon-user-secret:before{content:"\f21b"} -.oc-icon-motorcycle:before,.icon-motorcycle:before{content:"\f21c"} -.oc-icon-street-view:before,.icon-street-view:before{content:"\f21d"} -.oc-icon-heartbeat:before,.icon-heartbeat:before{content:"\f21e"} -.oc-icon-venus:before,.icon-venus:before{content:"\f221"} -.oc-icon-mars:before,.icon-mars:before{content:"\f222"} -.oc-icon-mercury:before,.icon-mercury:before{content:"\f223"} -.oc-icon-transgender:before,.icon-transgender:before{content:"\f224"} -.oc-icon-transgender-alt:before,.icon-transgender-alt:before{content:"\f225"} -.oc-icon-venus-double:before,.icon-venus-double:before{content:"\f226"} -.oc-icon-mars-double:before,.icon-mars-double:before{content:"\f227"} -.oc-icon-venus-mars:before,.icon-venus-mars:before{content:"\f228"} -.oc-icon-mars-stroke:before,.icon-mars-stroke:before{content:"\f229"} -.oc-icon-mars-stroke-v:before,.icon-mars-stroke-v:before{content:"\f22a"} -.oc-icon-mars-stroke-h:before,.icon-mars-stroke-h:before{content:"\f22b"} -.oc-icon-neuter:before,.icon-neuter:before{content:"\f22c"} -.oc-icon-facebook-official:before,.icon-facebook-official:before{content:"\f230"} -.oc-icon-pinterest-p:before,.icon-pinterest-p:before{content:"\f231"} -.oc-icon-whatsapp:before,.icon-whatsapp:before{content:"\f232"} -.oc-icon-server:before,.icon-server:before{content:"\f233"} -.oc-icon-user-plus:before,.icon-user-plus:before{content:"\f234"} -.oc-icon-user-times:before,.icon-user-times:before{content:"\f235"} -.oc-icon-hotel:before,.icon-hotel:before,.oc-icon-bed:before,.icon-bed:before{content:"\f236"} -.oc-icon-viacoin:before,.icon-viacoin:before{content:"\f237"} -.oc-icon-train:before,.icon-train:before{content:"\f238"} -.oc-icon-subway:before,.icon-subway:before{content:"\f239"} -.oc-icon-medium:before,.icon-medium:before{content:"\f23a"} -.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20)} -.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;opacity:0.5;filter:alpha(opacity=50)} -button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none} -@font-face{font-family:'FontAwesome';src:url('../../../system/assets/ui/font/fontawesome-webfont.eot?v=1.0.0');src:url('../../../system/assets/ui/font/fontawesome-webfont.eot?#iefix&v=1.0.0') format('embedded-opentype'),url('../../../system/assets/ui/font/fontawesome-webfont.woff?v=1.0.0') format('woff'),url('../../../system/assets/ui/font/fontawesome-webfont.ttf?v=1.0.0') format('truetype'),url('../../../system/assets/ui/font/fontawesome-webfont.svg#fontawesomeregular?v=1.0.0') format('svg');font-weight:normal;font-style:normal} -[class^="icon-"],[class*=" icon-"]{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;display:inline;width:auto;height:auto;line-height:normal;vertical-align:baseline;background-image:none;background-position:0% 0%;background-repeat:repeat;margin-top:0} -[class^="icon-"]:before,[class*=" icon-"]:before{text-decoration:inherit;display:inline-block;speak:none} -[class^="icon-"].pull-left,[class*=" icon-"].pull-left{margin-right:.3em} -[class^="icon-"].pull-right,[class*=" icon-"].pull-right{margin-left:.3em} -[class^="oc-icon-"]:before,[class*=" oc-icon-"]:before{display:inline-block;margin-right:8px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;vertical-align:baseline} -[class^="oc-icon-"].empty:before,[class*=" oc-icon-"].empty:before{margin-right:0} -.control-chart{text-align:left} -.control-chart div.canvas{display:inline-block;margin-right:20px;margin-bottom:20px;position:relative} -.control-chart div.canvas span.center{position:absolute;display:block;text-align:center;width:100%;top:50%;margin-top:-21px;font-size:30px;font-weight:100;color:#666666;z-index:10} -.control-chart div.canvas svg{z-index:20} -.control-chart.full-width div.canvas{margin-right:0 !important} -.control-chart ul{display:inline-block;height:inherit;margin:0;padding:0;list-style:none;position:relative;vertical-align:top} -.control-chart ul li{width:120px;white-space:normal;display:block;text-transform:uppercase;color:#666666;font-weight:300;font-size:12px;margin-bottom:10px} -.control-chart ul li span{float:right;font-weight:600} -.control-chart ul li:last-child{margin-bottom:0} -.control-chart div.chart-legend{display:inline-block;vertical-align:top;text-align:left} -.control-chart div.chart-legend table{font-size:12px;color:#666666} -.control-chart div.chart-legend table tr td{padding:0 0 7px 0;vertical-align:top} -.control-chart div.chart-legend table tr td.value{padding-left:10px;font-weight:600} -.control-chart div.chart-legend table tr td i{display:inline-block;width:13px;height:13px;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;text-indent:-100000em;margin-right:5px;position:relative;top:2px} -.control-chart div.chart-legend table tr td.indicator{width:20px} -.control-chart div.chart-legend table tr:last-child td{padding-bottom:0} -.control-chart .canvas{margin-right:20px;display:inline-block} -.control-chart.centered{text-align:center} -.control-chart.centered .canvas{margin-right:0;display:block;margin-left:auto;margin-right:auto} -.control-chart.wrap-legend div.chart-legend table tr{display:inline-block;white-space:nowrap;margin-right:20px} -.control-chart.wrap-legend div.chart-legend table tr:last-child td{padding-bottom:7px} -.report-container .wrapped .control-chart{text-align:left} -.report-container .wrapped .control-chart .canvas{margin-right:20px;display:inline-block} -#flotTip,#chart-tooltip{white-space:nowrap;padding:7px 10px;background:#000000;position:absolute;z-index:100;color:#ffffff;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;font-size:12px;opacity:0.8;filter:alpha(opacity=80)} -.title-value h4{font-size:12px;text-transform:uppercase;color:#666666;margin:0} -.title-value span.goal-meter-indicator{float:left;height:24px;width:10px;margin-right:5px;position:relative;top:9px;background:#cc3300} -.title-value span.goal-meter-indicator > span{text-indent:-10000em;display:block;position:absolute;width:10px;left:0;bottom:0;background:#95b753;height:0;-webkit-transition:all 0.2s;transition:all 0.2s} -.title-value p{color:#666666;margin:0;font-size:28px;line-height:41px} -.title-value p:before{color:#e5a91a;font-size:22px} -.title-value p.success{color:#95b753} -.title-value p.danger{color:#cc3300} -.title-value p.negative:after,.title-value p.positive:after{font-size:17px;vertical-align:top;position:relative;top:-3px;left:5px} -.title-value p.negative{color:#cc3300} -.title-value p.negative:after{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f103"} -.title-value p.positive{color:#95b753} -.title-value p.positive:after{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f102"} -.title-value p.description{color:#999999;font-weight:300;line-height:100%;font-size:13px} -.report-container .title-value{margin-top:-18px} -.report-container .title-value p{font-weight:100;font-size:40px} -.report-container .title-value p.description{font-size:12px;margin-top:9px} -.report-container .title-value p:before{font-size:30px;margin-right:10px} -.report-container .title-value p.negative:after,.report-container .title-value p.positive:after{top:-8px} -.report-container .title-value span.goal-meter-indicator{height:31px;top:4px;width:15px;margin-right:10px} -.report-container .title-value span.goal-meter-indicator span{width:15px} -ul.status-list{margin-bottom:0;padding:0} -ul.status-list li{margin:0 15px 0 0;list-style:none;display:inline-block;font-size:14px;color:#7e8c8d} -ul.status-list li:last-child{margin-right:0} -ul.status-list li a{color:#7e8c8d} -ul.status-list li a:hover{color:#0181b9;text-decoration:none} -ul.status-list li span.status{display:inline-block;padding:1px 5px;color:white;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px} -ul.status-list li span.status.circle{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;width:12px;height:12px;vertical-align:middle;position:relative;top:-1px} -ul.status-list li span.status.success{background:#5cb85c} -ul.status-list li span.status.primary{background:#5fb6f5} -ul.status-list li span.status.warning{background:#f0ad4e} -ul.status-list li span.status.danger{background:#d9534f} -ul.status-list li span.status.info{background:#5bc0de} -.gecko ul.status-list li span.status.circle{top:-2px} -.report-container ul.status-list{margin-top:-10px} -.callout{font-size:14px;margin-bottom:20px} -.callout.fade{opacity:0;filter:alpha(opacity=0);-webkit-transition:all 0.5s,width 0s;transition:all 0.5s,width 0s;-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)} -.callout.fade.in{opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)} -.callout > .close{margin:15px 15px 0 0} -.callout.callout-danger > .header{background:#f6b5b2} -.callout.callout-danger > .header i{color:#9f5551} -.callout.callout-danger > .content{background:#f8d6d5} -.callout.callout-info > .header{background:#b9dbef} -.callout.callout-info > .header i{color:#597f97} -.callout.callout-info > .content{background:#d8eaf4} -.callout.callout-success > .header{background:#d3e9bf} -.callout.callout-success > .header i{color:#6d915e} -.callout.callout-success > .content{background:#e6f1db} -.callout.callout-warning > .header{background:#f6e7b2} -.callout.callout-warning > .header i{color:#9f8e51} -.callout.callout-warning > .content{background:#f8f0d5} -.callout > .header{padding:20px;padding-bottom:15px;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;color:#2f2d26} -.callout > .header h3{letter-spacing:0;margin:0 0 7px 0;font-size:14px;font-weight:bold} -.callout > .header h3,.callout > .header p{margin-left:35px} -.callout > .header *:last-child{margin-bottom:0} -.callout > .header:last-child{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px} -.callout > .header i{font-size:26px;float:left} -.callout > .content{color:#2f2d26;padding:16px 20px 15px} -.callout > .content h1,.callout > .content h2,.callout > .content h3,.callout > .content h4,.callout > .content h5,.callout > .content h6{color:#2f2d26;text-transform:none;margin:20px 0 5px 0;line-height:150%} -.callout > .content h1{font-size:30px} -.callout > .content h2{font-size:26px} -.callout > .content h3{font-size:24px} -.callout > .content h4{font-size:20px} -.callout > .content h5{font-size:18px} -.callout > .content h6{font-size:16px} -.callout > .content *:last-child{margin-bottom:0} -.callout > .content ul li,.callout > .content ol li{margin-bottom:5px} -.callout > .content .action-panel{padding:10px 0 0 0} -.callout.no-icon > .header h3,.callout.no-icon > .header p{margin-left:0} -.callout.no-subheader > .header i{margin-top:-5px} -.form-group > .callout{margin-bottom:0} -.control-toolbar{font-size:0;padding:0 0 20px 0;position:relative} -.control-toolbar:after,.control-toolbar:before{display:none;position:absolute;top:50%;margin-top:-7px;height:9px;font-size:10px;color:#bbbbbb} -.control-toolbar:before{left:-6px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f104"} -.control-toolbar:after{right:-8px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105"} -.control-toolbar.scroll-before:before{display:block} -.control-toolbar.scroll-after:after{display:block} -.control-toolbar.standalone-paddings{padding:20px} -.control-toolbar:before{left:-10px} -.control-toolbar:after{right:-8px} -.control-toolbar .toolbar-item{position:relative;white-space:nowrap;margin-right:20px} -.control-toolbar .toolbar-item.last{margin-right:0} -.control-toolbar .toolbar-item:after,.control-toolbar .toolbar-item:before{display:none;position:absolute;top:50%;margin-top:-7px;height:9px;font-size:10px;color:#bbbbbb} -.control-toolbar .toolbar-item:before{left:-6px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f104"} -.control-toolbar .toolbar-item:after{right:-8px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105"} -.control-toolbar .toolbar-item.scroll-before:before{display:block} -.control-toolbar .toolbar-item.scroll-after:after{display:block} -.control-toolbar .toolbar-item:before{left:-10px} -.control-toolbar .toolbar-item.layout-cell{padding-right:20px;margin-right:0} -.control-toolbar .toolbar-item.layout-cell:after{right:6px} -.control-toolbar .toolbar-item.layout-cell:last-child{padding-right:0} -.control-toolbar .toolbar-item .btn,.control-toolbar .toolbar-item .btn-group,.control-toolbar .toolbar-item .dropdown{white-space:nowrap;float:none;display:inline-block;margin-right:10px} -.control-toolbar .toolbar-item .btn:last-child,.control-toolbar .toolbar-item .btn-group:last-child,.control-toolbar .toolbar-item .dropdown:last-child{margin-right:0} -.control-toolbar .toolbar-item .btn.standalone,.control-toolbar .toolbar-item .btn-group.standalone,.control-toolbar .toolbar-item .dropdown.standalone{margin-right:15px} -.control-toolbar .toolbar-item .btn-group > .btn,.control-toolbar .toolbar-item .btn-group > .dropdown{margin-right:0;display:inline-block;float:none} -.control-toolbar .toolbar-item .btn-group .dropdown > .btn{margin-right:0;border-bottom-right-radius:0;border-top-right-radius:0} -.control-toolbar .toolbar-item .btn-group .dropdown.last > .btn{border-bottom-right-radius:2px !important;border-top-right-radius:2px !important} -.control-toolbar input.form-control[type=text]{height:auto;padding:8px 10px} -[data-control=toolbar]{white-space:nowrap;width:100%;overflow:hidden} -#layout-side-panel .control-toolbar,.panel-contents .control-toolbar{padding:20px 0 20px 20px} -div.scoreboard{position:relative;padding:0} -div.scoreboard:after,div.scoreboard:before{display:none;position:absolute;top:50%;margin-top:-7px;height:9px;font-size:10px;color:#bbbbbb} -div.scoreboard:before{left:-6px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f104"} -div.scoreboard:after{right:-8px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105"} -div.scoreboard.scroll-before:before{display:block} -div.scoreboard.scroll-after:after{display:block} -div.scoreboard:before,div.scoreboard:after{margin-top:-10px} -div.scoreboard:before{left:7px} -div.scoreboard:after{right:10px} -div.scoreboard div.scoreboard-item{display:inline-block;margin-right:40px;margin-bottom:20px;vertical-align:top} -div.scoreboard div.scoreboard-item:last-child{margin-right:0} -div.scoreboard .control-chart{height:67px} -div.scoreboard .control-chart ul{margin-left:77px;top:-2px} -div.scoreboard .control-chart ul li{padding-left:18px} -div.scoreboard .control-chart ul li > i{margin-left:-18px} -div.scoreboard .control-chart .canvas + ul{margin-left:0} -div.scoreboard .scoreboard-offset{padding-left:20px} -body.slim-container div.scoreboard{padding:0 20px} -.control-breadcrumb{font-size:12px;text-transform:uppercase;padding:15px 20px;margin:-20px -20px 20px -20px;background-color:#2b343d} -.control-breadcrumb ul{padding:0;margin:0} -.control-breadcrumb li{list-style:none;margin:0;padding:0;display:inline-block;color:#9da3a7;letter-spacing:0.05em} -.control-breadcrumb li a{color:#ecf0f1;text-decoration:none} -.control-breadcrumb li a:hover{color:#ecf0f1} -.control-breadcrumb li:after{font-size:14px;line-height:14px;display:inline-block;margin-left:6px;margin-right:2px;vertical-align:baseline;color:#9da3a7;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105"} -.control-breadcrumb li:last-child:after{content:''} -body.breadcrumb-flush .control-breadcrumb,.control-breadcrumb.breadcrumb-flush{margin-bottom:0} -body.slim-container .control-breadcrumb{margin-left:0;margin-right:0} -body.compact-container .control-breadcrumb{margin-top:0;margin-left:0;margin-right:0} -#layout-canvas .flash-message{display:none} -.flash-message{position:fixed;width:500px;left:50%;top:13px;margin-left:-250px;color:#ffffff;font-size:13px;padding:10px 30px 10px 15px;z-index:10000;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px} -.flash-message.fade{opacity:0;filter:alpha(opacity=0);-webkit-transition:all 0.5s,width 0s;transition:all 0.5s,width 0s;-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)} -.flash-message.fade.in{opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)} -.flash-message.success{background:#8da85e} -.flash-message.error{background:#cc3300} -.flash-message.warning{background:#f0ad4e} -.flash-message.info{background:#5fb6f5} -.flash-message button{float:none;position:absolute;right:10px;top:8px;color:white} -.flash-message button:hover{color:white} -.flash-message.static{position:static !important;width:auto !important;display:block !important;margin-left:0 !important} -@media (max-width:768px){.flash-message{left:10px;right:10px;top:10px;margin-left:0;width:auto} -} -[class^="flag-"],[class*=" flag-"]{background-image:url("../../../system/assets/ui/images/flag-icons-small.png");width:16px;height:16px;line-height:16px;vertical-align:middle;display:inline-block;margin:-3px 2px 0 2px} -@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (-o-min-device-pixel-ratio:2/1),only screen and (min-device-pixel-ratio:2),only screen and (min-resolution:192dpi),only screen and (min-resolution:2dppx){[class^="flag-"],[class*=" flag-"]{background-image:url("../../../system/assets/ui/images/flag-icons-large.png");background-size:16px 3952px} -} -.flag-AfricanUnion{background-position:0 -16px} -.flag-ArabLeague{background-position:0 -32px} -.flag-ASEAN{background-position:0 -48px} -.flag-CARICOM{background-position:0 -64px} -.flag-CIS{background-position:0 -80px} -.flag-Commonwealth{background-position:0 -96px} -.flag-England{background-position:0 -112px} -.flag-European_Union{background-position:0 -128px} -.flag-Islamic_Conference{background-position:0 -144px} -.flag-Kosovo{background-position:0 -160px} -.flag-NATO{background-position:0 -176px} -.flag-NorthernCyprus{background-position:0 -192px} -.flag-NorthernIreland{background-position:0 -208px} -.flag-OlimpicMovement{background-position:0 -224px} -.flag-OPEC{background-position:0 -240px} -.flag-RedCross{background-position:0 -256px} -.flag-Scotland{background-position:0 -272px} -.flag-Somaliland{background-position:0 -288px} -.flag-Tibet{background-position:0 -304px} -.flag-United_Nations{background-position:0 -320px} -.flag-Wales{background-position:0 -336px} -.flag-eu{background-position:0 -128px} -.flag-ad{background-position:0 -352px} -.flag-ae{background-position:0 -368px} -.flag-af{background-position:0 -384px} -.flag-ag{background-position:0 -400px} -.flag-ai{background-position:0 -416px} -.flag-al{background-position:0 -432px} -.flag-am{background-position:0 -448px} -.flag-ao{background-position:0 -464px} -.flag-aq{background-position:0 -480px} -.flag-ar{background-position:0 -496px} -.flag-as{background-position:0 -512px} -.flag-at{background-position:0 -528px} -.flag-au{background-position:0 -544px} -.flag-aw{background-position:0 -560px} -.flag-ax{background-position:0 -576px} -.flag-az{background-position:0 -592px} -.flag-ba{background-position:0 -608px} -.flag-bb{background-position:0 -624px} -.flag-bd{background-position:0 -640px} -.flag-be{background-position:0 -656px} -.flag-bf{background-position:0 -672px} -.flag-bg{background-position:0 -688px} -.flag-bh{background-position:0 -704px} -.flag-bi{background-position:0 -720px} -.flag-bj{background-position:0 -736px} -.flag-bm{background-position:0 -752px} -.flag-bn{background-position:0 -768px} -.flag-bo{background-position:0 -784px} -.flag-br{background-position:0 -800px} -.flag-bs{background-position:0 -816px} -.flag-bt{background-position:0 -832px} -.flag-bw{background-position:0 -848px} -.flag-by{background-position:0 -864px} -.flag-bz{background-position:0 -880px} -.flag-ca{background-position:0 -896px} -.flag-cg{background-position:0 -912px} -.flag-cf{background-position:0 -928px} -.flag-cd{background-position:0 -944px} -.flag-ch{background-position:0 -960px} -.flag-ci{background-position:0 -976px} -.flag-ck{background-position:0 -992px} -.flag-cl{background-position:0 -1008px} -.flag-cm{background-position:0 -1024px} -.flag-cn{background-position:0 -1040px} -.flag-co{background-position:0 -1056px} -.flag-cr{background-position:0 -1072px} -.flag-cu{background-position:0 -1088px} -.flag-cv{background-position:0 -1104px} -.flag-cy{background-position:0 -1120px} -.flag-cz{background-position:0 -1136px} -.flag-de{background-position:0 -1152px} -.flag-dj{background-position:0 -1168px} -.flag-dk{background-position:0 -1184px} -.flag-dm{background-position:0 -1200px} -.flag-do{background-position:0 -1216px} -.flag-dz{background-position:0 -1232px} -.flag-ec{background-position:0 -1248px} -.flag-ee{background-position:0 -1264px} -.flag-eg{background-position:0 -1280px} -.flag-eh{background-position:0 -1296px} -.flag-er{background-position:0 -1312px} -.flag-es{background-position:0 -1328px} -.flag-et{background-position:0 -1344px} -.flag-fi{background-position:0 -1360px} -.flag-fj{background-position:0 -1376px} -.flag-fm{background-position:0 -1392px} -.flag-fo{background-position:0 -1408px} -.flag-fr{background-position:0 -1424px} -.flag-bl{background-position:0 -1424px} -.flag-cp{background-position:0 -1424px} -.flag-mf{background-position:0 -1424px} -.flag-yt{background-position:0 -1424px} -.flag-ga{background-position:0 -1440px} -.flag-gb{background-position:0 -1456px} -.flag-sh{background-position:0 -1456px} -.flag-gd{background-position:0 -1472px} -.flag-ge{background-position:0 -1488px} -.flag-gg{background-position:0 -1504px} -.flag-gh{background-position:0 -1520px} -.flag-gi{background-position:0 -1536px} -.flag-gl{background-position:0 -1552px} -.flag-gm{background-position:0 -1568px} -.flag-gn{background-position:0 -1584px} -.flag-gp{background-position:0 -1600px} -.flag-gq{background-position:0 -1616px} -.flag-gr{background-position:0 -1632px} -.flag-gt{background-position:0 -1648px} -.flag-gu{background-position:0 -1664px} -.flag-gw{background-position:0 -1680px} -.flag-gy{background-position:0 -1696px} -.flag-hk{background-position:0 -1712px} -.flag-hn{background-position:0 -1728px} -.flag-hr{background-position:0 -1744px} -.flag-ht{background-position:0 -1760px} -.flag-hu{background-position:0 -1776px} -.flag-id{background-position:0 -1792px} -.flag-mc{background-position:0 -1792px} -.flag-ie{background-position:0 -1808px} -.flag-il{background-position:0 -1824px} -.flag-im{background-position:0 -1840px} -.flag-in{background-position:0 -1856px} -.flag-iq{background-position:0 -1872px} -.flag-ir{background-position:0 -1888px} -.flag-is{background-position:0 -1904px} -.flag-it{background-position:0 -1920px} -.flag-je{background-position:0 -1936px} -.flag-jm{background-position:0 -1952px} -.flag-jo{background-position:0 -1968px} -.flag-jp{background-position:0 -1984px} -.flag-ke{background-position:0 -2000px} -.flag-kg{background-position:0 -2016px} -.flag-kh{background-position:0 -2032px} -.flag-ki{background-position:0 -2048px} -.flag-km{background-position:0 -2064px} -.flag-kn{background-position:0 -2080px} -.flag-kp{background-position:0 -2096px} -.flag-kr{background-position:0 -2112px} -.flag-kw{background-position:0 -2128px} -.flag-ky{background-position:0 -2144px} -.flag-kz{background-position:0 -2160px} -.flag-la{background-position:0 -2176px} -.flag-lb{background-position:0 -2192px} -.flag-lc{background-position:0 -2208px} -.flag-li{background-position:0 -2224px} -.flag-lk{background-position:0 -2240px} -.flag-lr{background-position:0 -2256px} -.flag-ls{background-position:0 -2272px} -.flag-lt{background-position:0 -2288px} -.flag-lu{background-position:0 -2304px} -.flag-lv{background-position:0 -2320px} -.flag-ly{background-position:0 -2336px} -.flag-ma{background-position:0 -2352px} -.flag-md{background-position:0 -2368px} -.flag-me{background-position:0 -2384px} -.flag-mg{background-position:0 -2400px} -.flag-mh{background-position:0 -2416px} -.flag-mk{background-position:0 -2432px} -.flag-ml{background-position:0 -2448px} -.flag-mm{background-position:0 -2464px} -.flag-mn{background-position:0 -2480px} -.flag-mo{background-position:0 -2496px} -.flag-mq{background-position:0 -2512px} -.flag-mr{background-position:0 -2528px} -.flag-ms{background-position:0 -2544px} -.flag-mt{background-position:0 -2560px} -.flag-mu{background-position:0 -2576px} -.flag-mv{background-position:0 -2592px} -.flag-mw{background-position:0 -2608px} -.flag-mx{background-position:0 -2624px} -.flag-my{background-position:0 -2640px} -.flag-mz{background-position:0 -2656px} -.flag-na{background-position:0 -2672px} -.flag-nc{background-position:0 -2688px} -.flag-ne{background-position:0 -2704px} -.flag-ng{background-position:0 -2720px} -.flag-ni{background-position:0 -2736px} -.flag-nl{background-position:0 -2752px} -.flag-bq{background-position:0 -2752px} -.flag-no{background-position:0 -2768px} -.flag-bv{background-position:0 -2768px} -.flag-nq{background-position:0 -2768px} -.flag-sj{background-position:0 -2768px} -.flag-np{background-position:0 -2784px} -.flag-nr{background-position:0 -2800px} -.flag-nz{background-position:0 -2816px} -.flag-om{background-position:0 -2832px} -.flag-pa{background-position:0 -2848px} -.flag-pe{background-position:0 -2864px} -.flag-pf{background-position:0 -2880px} -.flag-pg{background-position:0 -2896px} -.flag-ph{background-position:0 -2912px} -.flag-pk{background-position:0 -2928px} -.flag-pl{background-position:0 -2944px} -.flag-pr{background-position:0 -2960px} -.flag-ps{background-position:0 -2976px} -.flag-pt{background-position:0 -2992px} -.flag-pw{background-position:0 -3008px} -.flag-py{background-position:0 -3024px} -.flag-qa{background-position:0 -3040px} -.flag-re{background-position:0 -3056px} -.flag-ro{background-position:0 -3072px} -.flag-rs{background-position:0 -3088px} -.flag-ru{background-position:0 -3104px} -.flag-rw{background-position:0 -3120px} -.flag-sa{background-position:0 -3136px} -.flag-sb{background-position:0 -3152px} -.flag-sc{background-position:0 -3168px} -.flag-sd{background-position:0 -3184px} -.flag-se{background-position:0 -3200px} -.flag-sg{background-position:0 -3216px} -.flag-si{background-position:0 -3232px} -.flag-sk{background-position:0 -3248px} -.flag-sl{background-position:0 -3264px} -.flag-sm{background-position:0 -3280px} -.flag-sn{background-position:0 -3296px} -.flag-so{background-position:0 -3312px} -.flag-sr{background-position:0 -3328px} -.flag-st{background-position:0 -3344px} -.flag-sv{background-position:0 -3360px} -.flag-sy{background-position:0 -3376px} -.flag-sz{background-position:0 -3392px} -.flag-tc{background-position:0 -3408px} -.flag-td{background-position:0 -3424px} -.flag-tg{background-position:0 -3440px} -.flag-th{background-position:0 -3456px} -.flag-tj{background-position:0 -3472px} -.flag-tl{background-position:0 -3488px} -.flag-tm{background-position:0 -3504px} -.flag-tn{background-position:0 -3520px} -.flag-to{background-position:0 -3536px} -.flag-tr{background-position:0 -3552px} -.flag-tt{background-position:0 -3568px} -.flag-tv{background-position:0 -3584px} -.flag-tw{background-position:0 -3600px} -.flag-tz{background-position:0 -3616px} -.flag-ua{background-position:0 -3632px} -.flag-ug{background-position:0 -3648px} -.flag-us{background-position:0 -3664px} -.flag-uy{background-position:0 -3680px} -.flag-uz{background-position:0 -3696px} -.flag-va{background-position:0 -3712px} -.flag-vc{background-position:0 -3728px} -.flag-ve{background-position:0 -3744px} -.flag-vg{background-position:0 -3760px} -.flag-vi{background-position:0 -3776px} -.flag-vn{background-position:0 -3792px} -.flag-vu{background-position:0 -3808px} -.flag-ws{background-position:0 -3824px} -.flag-ye{background-position:0 -3840px} -.flag-za{background-position:0 -3856px} -.flag-zm{background-position:0 -3872px} -.flag-zw{background-position:0 -3888px} -.flag-sx{background-position:0 -3904px} -.flag-cw{background-position:0 -3920px} -.flag-ss{background-position:0 -3936px} -fieldset{padding:0;margin:0;border:0;min-width:0} -legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333333;border:0;border-bottom:1px solid #e5e5e5} -label{display:inline-block;margin-bottom:5px;font-weight:600;font-size:12px} -input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} -input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9; line-height:normal} -input[type="file"]{display:block} -input[type="range"]{display:block;width:100%} -select[multiple],select[size]{height:auto} -input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px} -output{display:block;padding-top:10px;font-size:14px;line-height:1.42857143;color:#555555} -.form-control{display:block;width:100%;height:40px;padding:9px 11px;font-size:13px;line-height:1.42857143;color:#555555;background-color:#ffffff;background-image:none;border:1px solid #e0e0e0;border-radius:3px;-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s} -.form-control:focus{border-color:#808c8d;outline:0} -.form-control::-moz-placeholder{color:#cccccc;opacity:1} -.form-control:-ms-input-placeholder{color:#cccccc} -.form-control::-webkit-input-placeholder{color:#cccccc} -.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eeeeee;opacity:1} -textarea.form-control{height:auto} -.form-control.align-right{text-align:right} -input[type="search"]{-webkit-appearance:none} -input[type="date"]{line-height:40px} -.form-group{margin-bottom:15px} -.radio,.checkbox{display:block;min-height:20px;margin-top:10px;margin-bottom:10px;padding-left:20px} -.radio label,.checkbox label{display:inline;font-weight:normal;cursor:pointer} -.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px} -.radio + .radio,.checkbox + .checkbox{margin-top:-5px} -.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer} -.radio-inline + .radio-inline,.checkbox-inline + .checkbox-inline{margin-top:0;margin-left:10px} -input[type="radio"][disabled],input[type="checkbox"][disabled],.radio[disabled],.radio-inline[disabled],.checkbox[disabled],.checkbox-inline[disabled],fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"],fieldset[disabled] .radio,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox,fieldset[disabled] .checkbox-inline{cursor:not-allowed} -.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} -select.input-sm{height:30px;line-height:30px} -textarea.input-sm,select[multiple].input-sm{height:auto} -.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} -select.input-lg{height:46px;line-height:46px} -textarea.input-lg,select[multiple].input-lg{height:auto} -.has-feedback{position:relative} -.has-feedback .form-control{padding-right:50px} -.has-feedback .form-control-feedback{position:absolute;top:25px;right:0;display:block;width:40px;height:40px;line-height:40px;text-align:center} -.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d} -.has-success .form-control{border-color:#3c763d} -.has-success .form-control:focus{border-color:#2b542c} -.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8} -.has-success .form-control-feedback{color:#3c763d} -.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b} -.has-warning .form-control{border-color:#8a6d3b} -.has-warning .form-control:focus{border-color:#66512c} -.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3} -.has-warning .form-control-feedback{color:#8a6d3b} -.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442} -.has-error .form-control{border-color:#a94442} -.has-error .form-control:focus{border-color:#843534} -.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede} -.has-error .form-control-feedback{color:#a94442} -.form-control-static{margin-bottom:0} -.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373} -@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle} -.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle} -.form-inline .input-group > .form-control{width:100%} -.form-inline .control-label{margin-bottom:0;vertical-align:middle} -.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;padding-left:0;vertical-align:middle} -.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:none;margin-left:0} -.form-inline .has-feedback .form-control-feedback{top:0} -} -.form-horizontal .control-label,.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:10px} -.form-horizontal .radio,.form-horizontal .checkbox{min-height:30px} -.form-horizontal .form-group{margin-left:-15px;margin-right:-15px} -.form-horizontal .form-control-static{padding-top:10px} -@media (min-width:768px){.form-horizontal .control-label{text-align:right} -} -.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px} -.input-group{position:relative;display:table;border-collapse:separate} -.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0} -.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0} -.input-group-lg > .form-control,.input-group-lg > .input-group-addon,.input-group-lg > .input-group-btn > .btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px} -select.input-group-lg > .form-control,select.input-group-lg > .input-group-addon,select.input-group-lg > .input-group-btn > .btn{height:46px;line-height:46px} -textarea.input-group-lg > .form-control,textarea.input-group-lg > .input-group-addon,textarea.input-group-lg > .input-group-btn > .btn,select[multiple].input-group-lg > .form-control,select[multiple].input-group-lg > .input-group-addon,select[multiple].input-group-lg > .input-group-btn > .btn{height:auto} -.input-group-sm > .form-control,.input-group-sm > .input-group-addon,.input-group-sm > .input-group-btn > .btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px} -select.input-group-sm > .form-control,select.input-group-sm > .input-group-addon,select.input-group-sm > .input-group-btn > .btn{height:30px;line-height:30px} -textarea.input-group-sm > .form-control,textarea.input-group-sm > .input-group-addon,textarea.input-group-sm > .input-group-btn > .btn,select[multiple].input-group-sm > .form-control,select[multiple].input-group-sm > .input-group-addon,select[multiple].input-group-sm > .input-group-btn > .btn{height:auto} -.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell} -.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0} -.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle} -.input-group-addon{padding:9px 11px;font-size:14px;font-weight:normal;line-height:1;color:#555555;text-align:center;background-color:#eeeeee;border:1px solid #e0e0e0;border-radius:2px} -.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px} -.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px} -.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0} -.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group > .btn,.input-group-btn:first-child > .dropdown-toggle,.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child > .btn-group:not(:last-child) > .btn{border-bottom-right-radius:0;border-top-right-radius:0} -.input-group-addon:first-child{border-right:0} -.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group > .btn,.input-group-btn:last-child > .dropdown-toggle,.input-group-btn:first-child > .btn:not(:first-child),.input-group-btn:first-child > .btn-group:not(:first-child) > .btn{border-bottom-left-radius:0;border-top-left-radius:0} -.input-group-addon:last-child{border-left:0} -.input-group-btn{position:relative;font-size:0;white-space:nowrap} -.input-group-btn > .btn{position:relative} -.input-group-btn > .btn + .btn{margin-left:-1px} -.input-group-btn > .btn:hover,.input-group-btn > .btn:focus,.input-group-btn > .btn:active{z-index:2} -.input-group-btn:first-child > .btn,.input-group-btn:first-child > .btn-group{margin-right:-1px} -.input-group-btn:last-child > .btn,.input-group-btn:last-child > .btn-group{margin-left:-1px} -.loading-indicator{padding:20px 20px 20px 60px;color:#999999;font-size:14px;font-weight:500;background:#f9f9f9;text-align:left;z-index:100} -.loading-indicator > span{background:transparent url('../../../system/assets/ui/images/loader.gif') no-repeat 0 50%;position:absolute;width:40px;height:40px;top:50%;margin-top:-20px;left:0;display:block} -.loading-indicator-container{position:relative;min-height:40px} -.loading-indicator-container .loading-indicator{position:absolute;left:0;top:0;width:100%;height:100%;padding-top:0} -.loading-indicator-container .loading-indicator > div{position:absolute;top:50%;margin-top:-0.65em} -html.cssanimations .loading-indicator > span{background-image:url('../../../system/assets/ui/images/loader-transparent.svg');background-size:35px 35px;background-position:50% 50%;-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite} -html.cssanimations .loading-indicator.is-opaque > span,html.cssanimations .loading-indicator-container.is-opaque .loading-indicator > span{background-image:url('../../../system/assets/ui/images/loader.svg')} -.loading-indicator-container.size-small{min-height:20px} -.loading-indicator.size-small,.loading-indicator-container.size-small .loading-indicator{padding:16px 16px 16px 30px;font-size:11px} -.loading-indicator.size-small > span,.loading-indicator-container.size-small .loading-indicator > span{height:20px;width:20px;margin-top:-10px} -html.cssanimations .loading-indicator.size-small > span,html.cssanimations .loading-indicator-container.size-small .loading-indicator > span{background-size:20px 20px} -.loading-indicator.indicator-center,.loading-indicator-container.indicator-center .loading-indicator{padding:20px} -.loading-indicator.indicator-center > span,.loading-indicator-container.indicator-center .loading-indicator > span{left:50%;margin-left:-20px;margin-top:-20px} -.loading-indicator.indicator-center > div,.loading-indicator-container.indicator-center .loading-indicator > div{top:auto;text-align:center;position:relative} -.loading-indicator.indicator-inset,.loading-indicator-container.indicator-inset .loading-indicator{padding-left:80px} -.loading-indicator.indicator-inset > span,.loading-indicator-container.indicator-inset .loading-indicator > span{left:20px} -.loading-indicator-container.size-form-field .loading-indicator,.loading-indicator-container.size-input-text .loading-indicator{background-color:transparent;padding:0;margin:0} -.loading-indicator-container.size-form-field .loading-indicator > span,.loading-indicator-container.size-input-text .loading-indicator > span{padding:0;margin:0;left:auto;right:7px;top:6px;width:23px;height:23px;background-size:23px 23px} -.loading-indicator-container.size-form-field .loading-indicator > span{top:0;right:0;width:20px;height:20px;background-size:20px 20px} -html.cssanimations .cursor-loading-indicator{background:transparent url('../../../system/assets/ui/images/loader-transparent.svg') no-repeat 50% 50%;-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite;background-size:20px 20px;position:fixed;width:20px;height:20px} -html.cssanimations .cursor-loading-indicator.hide{display:none} -.bar-loading-indicator{-webkit-transition:opacity 0.4s linear;transition:opacity 0.4s linear} -.bar-loading-indicator .progress-bar{-webkit-animation:infinite-loader 90s ease-in forwards;animation:infinite-loader 90s ease-in forwards;-webkit-transition-duration:0s;transition-duration:0s} -.bar-loading-indicator.bar-loaded{opacity:0;filter:alpha(opacity=0);-webkit-transition-delay:0.3s;transition-delay:0.3s} -.bar-loading-indicator.bar-loaded .progress-bar{width:100% !important;-webkit-transition:width 0.3s linear;transition:width 0.3s linear;-webkit-animation:none;animation:none} -.stripe-loading-indicator{height:4px;background:transparent;position:fixed;top:0;left:0;width:100%;overflow:hidden;z-index:2000} -.stripe-loading-indicator .stripe,.stripe-loading-indicator .stripe-loaded{height:4px;display:block;background:#0090c0;position:absolute;-webkit-box-shadow:inset 0 1px 1px -1px #FFF,inset 0 -1px 1px -1px #FFF;box-shadow:inset 0 1px 1px -1px #FFF,inset 0 -1px 1px -1px #FFF} -.stripe-loading-indicator .stripe{width:100%;-webkit-animation:infinite-loader 60s linear;animation:infinite-loader 60s linear} -.stripe-loading-indicator .stripe-loaded{width:0;display:none} -.stripe-loading-indicator.loaded{display:none;-webkit-transition:opacity 0.4s linear;transition:opacity 0.4s linear;-webkit-transition-delay:0.3s;transition-delay:0.3s} -.stripe-loading-indicator.loaded .stripe-loaded{display:block;-webkit-transition:width 0.3s linear;transition:width 0.3s linear;width:100% !important} -.stripe-loading-indicator.hide{display:none} -@-moz-keyframes infinite-loader{0%{width:0%} -10%{width:42%} -20%{width:63%} -30%{width:78.75%} -40%{width:88.59375%} -50%{width:94.13085938%} -60%{width:97.07244873%} -70%{width:98.58920574%} -80%{width:99.35943391000001%} -90%{width:99.7475567%} -100%{width:99.94237615%} -} -@-webkit-keyframes infinite-loader{0%{width:0%} -10%{width:42%} -20%{width:63%} -30%{width:78.75%} -40%{width:88.59375%} -50%{width:94.13085938%} -60%{width:97.07244873%} -70%{width:98.58920574%} -80%{width:99.35943391000001%} -90%{width:99.7475567%} -100%{width:99.94237615%} -} -@-o-keyframes infinite-loader{0%{width:0%} -10%{width:42%} -20%{width:63%} -30%{width:78.75%} -40%{width:88.59375%} -50%{width:94.13085938%} -60%{width:97.07244873%} -70%{width:98.58920574%} -80%{width:99.35943391000001%} -90%{width:99.7475567%} -100%{width:99.94237615%} -} -@-ms-keyframes infinite-loader{0%{width:0%} -10%{width:42%} -20%{width:63%} -30%{width:78.75%} -40%{width:88.59375%} -50%{width:94.13085938%} -60%{width:97.07244873%} -70%{width:98.58920574%} -80%{width:99.35943391000001%} -90%{width:99.7475567%} -100%{width:99.94237615%} -} -@keyframes infinite-loader{0%{width:0%} -10%{width:42%} -20%{width:63%} -30%{width:78.75%} -40%{width:88.59375%} -50%{width:94.13085938%} -60%{width:97.07244873%} -70%{width:98.58920574%} -80%{width:99.35943391000001%} -90%{width:99.7475567%} -100%{width:99.94237615%} -} -@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)} -100%{-moz-transform:rotate(359deg)} -} -@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)} -100%{-webkit-transform:rotate(359deg)} -} -@-o-keyframes spin{0%{-o-transform:rotate(0deg)} -100%{-o-transform:rotate(359deg)} -} -@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)} -100%{-ms-transform:rotate(359deg)} -} -@keyframes spin{0%{transform:rotate(0deg)} -100%{transform:rotate(359deg)} -} -.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle} -.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none} -.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} -.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px} -.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none} -.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap} -.select2-container .select2-search--inline{float:left} -.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px} -.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} -.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051} -.select2-results{display:block} -.select2-results__options{list-style:none;margin:0;padding:0} -.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none} -.select2-results__option[aria-selected]{cursor:pointer} -.select2-container--open .select2-dropdown{left:0} -.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0} -.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0} -.select2-search--dropdown{display:block;padding:4px} -.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box} -.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none} -.select2-search--dropdown.select2-search--hide{display:none} -.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)} -.select2-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px} -.select2-container .loading-indicator{background:transparent} -.select2-container .loading-indicator > span{background-image:url('../../../system/assets/ui/images/loader-transparent.svg');left:auto;right:10px;top:19px;background-size:17px 17px} -.select2-container.in-progress .select2-selection .select2-selection__arrow b{display:none !important} -.select2-container--default{display:block; } -.select2-container--default .select2-selection{background-color:#ffffff;border:1px solid #e0e0e0;border-radius:3px;color:#555555;font-family:'Open Sans',Arial,sans-serif;font-size:13px;outline:0} -.select2-container--default .select2-search--dropdown{position:relative} -.select2-container--default .select2-search--dropdown:after{position:absolute;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f002";right:10px;top:7px;color:#95a5a6} -.select2-container--default .select2-search--dropdown .select2-search__field{background-color:#ffffff;border:1px solid #e0e0e0;border-radius:3px;color:#555555;font-family:'Open Sans',Arial,sans-serif;font-size:13px} -.select2-container--default .select2-search__field{outline:0} -.select2-container--default .select2-search__field::-webkit-input-placeholder{color:#cccccc} -.select2-container--default .select2-search__field:-moz-placeholder{color:#cccccc} -.select2-container--default .select2-search__field::-moz-placeholder{color:#cccccc;opacity:1} -.select2-container--default .select2-search__field:-ms-input-placeholder{color:#cccccc} -.select2-container--default .select2-results__option[role=group]{padding:0} -.select2-container--default .select2-results__option[aria-disabled=true]{color:#999999;cursor:not-allowed} -.select2-container--default .select2-results__option[aria-selected=true]{background-color:#f5f5f5;color:#262626} -.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#4da7e8;color:#ffffff} -.select2-container--default .select2-results__option .select2-results__option{padding:9px 11px} -.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0} -.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-11px;padding-left:22px} -.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-22px;padding-left:33px} -.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-33px;padding-left:44px} -.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-44px;padding-left:55px} -.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-55px;padding-left:66px} -.select2-container--default .select2-results__group{color:#999999;display:block;padding:9px 11px;font-size:12px;line-height:1.42857143;white-space:nowrap} -.select2-container--default.select2-container--focus .select2-selection,.select2-container--default.select2-container--open .select2-selection{-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;border-color:#808c8d} -.select2-container--default.select2-container--open .select2-selection .select2-selection__arrow b:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f106"} -.select2-container--default.select2-container--open.select2-container--below .select2-selection{border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom-color:transparent} -.select2-container--default.select2-container--open.select2-container--above .select2-selection{border-top-right-radius:0;border-top-left-radius:0;border-top-color:transparent} -.select2-container--default .select2-selection__clear{color:#666666;cursor:pointer;float:right;font-weight:bold;margin-right:10px} -.select2-container--default .select2-selection__clear:hover{color:#333} -.select2-container--default.select2-container--disabled .select2-selection{border-color:#e0e0e0;-webkit-box-shadow:none;box-shadow:none} -.select2-container--default.select2-container--disabled .select2-selection,.select2-container--default.select2-container--disabled .select2-search__field{cursor:not-allowed} -.select2-container--default.select2-container--disabled .select2-selection,.select2-container--default.select2-container--disabled .select2-selection--multiple .select2-selection__choice{background-color:#eeeeee} -.select2-container--default.select2-container--disabled .select2-selection__clear,.select2-container--default.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove{display:none} -.select2-container--default .select2-dropdown{-webkit-box-shadow:0 3px 6px rgba(0,0,0,0.075);box-shadow:0 3px 6px rgba(0,0,0,0.075);border-color:#808c8d;overflow-x:hidden;margin-top:-1px} -.select2-container--default .select2-dropdown--above{margin-top:1px;-webkit-box-shadow:0 -3px 6px rgba(0,0,0,0.075);box-shadow:0 -3px 6px rgba(0,0,0,0.075)} -.select2-container--default .select2-results > .select2-results__options{font-size:13px;max-height:200px;overflow-y:auto} -.select2-container--default .select2-selection--single{height:40px;line-height:1.42857143;padding:9px 23px 9px 11px} -.select2-container--default .select2-selection--single .select2-selection__arrow{position:absolute;bottom:0;right:11px;top:0;width:4px} -.select2-container--default .select2-selection--single .select2-selection__arrow b{position:absolute;top:50%;height:9px;width:8px;right:3px;margin-top:-5px;line-height:9px} -.select2-container--default .select2-selection--single .select2-selection__arrow b:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f107";display:inline-block} -.select2-container--default .select2-selection--single .select2-selection__rendered{color:#555555;padding:0} -.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#cccccc} -.select2-container--default .select2-selection--multiple{min-height:40px} -.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;display:block;line-height:1.42857143;list-style:none;margin:0;overflow:hidden;padding:0;width:100%;text-overflow:ellipsis;white-space:nowrap} -.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#cccccc;float:left;margin-top:5px} -.select2-container--default .select2-selection--multiple .select2-selection__choice{color:#555555;background:#ffffff;border:1px solid #cccccc;border-radius:4px;cursor:default;float:left;margin:8px 0 0 5.5px;padding:0 9px} -.select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field{background:transparent;padding:0 11px;height:38px;line-height:1.42857143;margin-top:0;min-width:5em} -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:4.5px} -.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333} -.select2-container--default .select2-selection--multiple .select2-selection__clear{margin-top:9px} -.select2-container--default.input-sm,.select2-container--default.input-lg{border-radius:0;font-size:12px;height:auto;line-height:1;padding:0} -.select2-container--default.input-sm .select2-selection--single,.input-group-sm .select2-container--default .select2-selection--single,.form-group-sm .select2-container--default .select2-selection--single{border-radius:3px;font-size:12px;height:30px;line-height:1.5;padding:5px 22px 5px 10px; } -.select2-container--default.input-sm .select2-selection--single .select2-selection__arrow b,.input-group-sm .select2-container--default .select2-selection--single .select2-selection__arrow b,.form-group-sm .select2-container--default .select2-selection--single .select2-selection__arrow b{margin-left:-5px} -.select2-container--default.input-sm .select2-selection--multiple,.input-group-sm .select2-container--default .select2-selection--multiple,.form-group-sm .select2-container--default .select2-selection--multiple{min-height:30px} -.select2-container--default.input-sm .select2-selection--multiple .select2-selection__choice,.input-group-sm .select2-container--default .select2-selection--multiple .select2-selection__choice,.form-group-sm .select2-container--default .select2-selection--multiple .select2-selection__choice{font-size:12px;line-height:1.5;margin:4px 0 0 5px;padding:0 5px} -.select2-container--default.input-sm .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-sm .select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-sm .select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 10px;font-size:12px;height:28px;line-height:1.5} -.select2-container--default.input-sm .select2-selection--multiple .select2-selection__clear,.input-group-sm .select2-container--default .select2-selection--multiple .select2-selection__clear,.form-group-sm .select2-container--default .select2-selection--multiple .select2-selection__clear{margin-top:5px} -.select2-container--default.input-lg .select2-selection--single,.input-group-lg .select2-container--default .select2-selection--single,.form-group-lg .select2-container--default .select2-selection--single{border-radius:6px;font-size:18px;height:46px;line-height:1.3333333;padding:10px 31px 10px 16px; } -.select2-container--default.input-lg .select2-selection--single .select2-selection__arrow,.input-group-lg .select2-container--default .select2-selection--single .select2-selection__arrow,.form-group-lg .select2-container--default .select2-selection--single .select2-selection__arrow{width:5px} -.select2-container--default.input-lg .select2-selection--single .select2-selection__arrow b,.input-group-lg .select2-container--default .select2-selection--single .select2-selection__arrow b,.form-group-lg .select2-container--default .select2-selection--single .select2-selection__arrow b{border-width:5px 5px 0 5px;margin-left:-5px;margin-left:-10px;margin-top:-2.5px} -.select2-container--default.input-lg .select2-selection--multiple,.input-group-lg .select2-container--default .select2-selection--multiple,.form-group-lg .select2-container--default .select2-selection--multiple{min-height:46px} -.select2-container--default.input-lg .select2-selection--multiple .select2-selection__choice,.input-group-lg .select2-container--default .select2-selection--multiple .select2-selection__choice,.form-group-lg .select2-container--default .select2-selection--multiple .select2-selection__choice{font-size:18px;line-height:1.3333333;border-radius:4px;margin:9px 0 0 8px;padding:0 10px} -.select2-container--default.input-lg .select2-selection--multiple .select2-search--inline .select2-search__field,.input-group-lg .select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field,.form-group-lg .select2-container--default .select2-selection--multiple .select2-search--inline .select2-search__field{padding:0 16px;font-size:18px;height:44px;line-height:1.3333333} -.select2-container--default.input-lg .select2-selection--multiple .select2-selection__clear,.input-group-lg .select2-container--default .select2-selection--multiple .select2-selection__clear,.form-group-lg .select2-container--default .select2-selection--multiple .select2-selection__clear{margin-top:10px} -.select2-container--default.input-lg.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #666666 transparent;border-width:0 5px 5px 5px} -.input-group-lg .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #666666 transparent;border-width:0 5px 5px 5px} -.select2-container--default[dir="rtl"] .select2-selection--single{padding-left:23px;padding-right:11px} -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:0;padding-left:0;text-align:right; } -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left} -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:11px;right:auto} -.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow b{margin-left:0} -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder{float:right} -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:0;margin-right:5.5px} -.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto} -.has-warning .select2-dropdown,.has-warning .select2-selection{border-color:#8a6d3b} -.has-warning .select2-container--focus .select2-selection,.has-warning .select2-container--open .select2-selection{border-color:#66512c} -.has-warning.select2-drop-active{border-color:#66512c} -.has-warning.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#66512c} -.has-error .select2-dropdown,.has-error .select2-selection{border-color:#a94442} -.has-error .select2-container--focus .select2-selection,.has-error .select2-container--open .select2-selection{border-color:#843534} -.has-error.select2-drop-active{border-color:#843534} -.has-error.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#843534} -.has-success .select2-dropdown,.has-success .select2-selection{border-color:#3c763d} -.has-success .select2-container--focus .select2-selection,.has-success .select2-container--open .select2-selection{border-color:#2b542c} -.has-success.select2-drop-active{border-color:#2b542c} -.has-success.select2-drop-active.select2-drop.select2-drop-above{border-top-color:#2b542c} -.input-group .select2-container--default{display:table;table-layout:fixed;position:relative;z-index:2;float:left;width:100%;margin-bottom:0} -.input-group.select2-default-prepend .select2-container--default .select2-selection{border-bottom-left-radius:0;border-top-left-radius:0} -.input-group.select2-default-append .select2-container--default .select2-selection{border-bottom-right-radius:0;border-top-right-radius:0} -.select2-default-append .select2-container--default,.select2-default-prepend .select2-container--default,.select2-default-append .input-group-btn,.select2-default-prepend .input-group-btn,.select2-default-append .input-group-btn .btn,.select2-default-prepend .input-group-btn .btn{vertical-align:top} - .form-control.select2-hidden-accessible{position:absolute !important;width:1px !important} -.form-inline .select2-container--default{display:inline-block} -.control-balloon-selector ul{padding:0;margin-top:-5px} -.control-balloon-selector ul li{list-style:none;display:inline-block;padding:6px 7px 5px;margin-right:5px;margin-top:6px;text-transform:uppercase;background:#bcc3c7;color:#ffffff;font-size:10px;line-height:100%;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;-webkit-transition:all 0.1s ease;transition:all 0.1s ease} -.control-balloon-selector ul li.active{background:#da5700 !important} -.control-balloon-selector.control-disabled{opacity:0.5;filter:alpha(opacity=50)} -.control-balloon-selector:not(.control-disabled) ul li:hover{background:#0181b9;cursor:pointer} -.form-group .control-balloon-selector ul{margin-bottom:0} -.custom-checkbox.nolabel label,.custom-radio.nolabel label{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0} -.custom-checkbox,.custom-radio{padding-left:23px;margin-top:0} -.custom-checkbox input[type=radio],.custom-radio input[type=radio],.custom-checkbox input[type=checkbox],.custom-radio input[type=checkbox]{display:none} -.custom-checkbox label,.custom-radio label{display:inline-block;cursor:pointer;position:relative;padding-left:20px;margin-right:15px;margin-left:-20px;font-size:12px} -.custom-checkbox label:before,.custom-radio label:before{content:"";display:inline-block;text-align:center;width:16px;height:16px;margin-right:10px;position:absolute;left:-3px;bottom:1px;background-color:#FFFFFF;border:1px solid #999999;color:#666666} -.custom-checkbox label:hover:before,.custom-radio label:hover:before{border-color:#808080;color:#4d4d4d} -.custom-checkbox label:active:before,.custom-radio label:active:before{border-color:#666666;color:#333333} -.custom-checkbox input[type=radio]:checked + label:before,.custom-radio input[type=radio]:checked + label:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f111";font-size:9px;line-height:12px;border-width:2px} -.custom-checkbox input[type=checkbox]:checked + label:before,.custom-radio input[type=checkbox]:checked + label:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f00c";font-size:10px;line-height:12px;border-width:2px} -.custom-checkbox:focus,.custom-radio:focus{outline:none} -.custom-checkbox:focus label:before,.custom-radio:focus label:before{border-color:#5fb6f5} -.custom-checkbox p.help-block,.custom-radio p.help-block{margin-top:0} -.custom-radio label:before{border-radius:8px} -.custom-checkbox label:before{border-radius:2px} -.switch-field .field-switch{padding-left:75px;float:left} -.custom-switch{display:block;width:58px;height:26px;position:relative;text-transform:uppercase;border:none;cursor:pointer;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} -.custom-switch *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} -.custom-switch.disabled{opacity:0.5;filter:alpha(opacity=50)} -.custom-switch .slide-button{z-index:4;display:block;position:absolute;right:34px;top:2px;width:22px;height:22px;background-color:#f6f6f6;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;-webkit-transition:all 0.1s;transition:all 0.1s} -.custom-switch label,.custom-switch > span{line-height:23px;vertical-align:middle} -.custom-switch label{z-index:3;width:100%;display:block;position:relative} -.custom-switch input{z-index:5;position:absolute;left:0;top:0;opacity:0;filter:alpha(opacity=0)} -.custom-switch input:checked ~ .slide-button{right:2px} -.custom-switch input:checked ~ span{background-color:#8da85e} -.custom-switch input:checked ~ span span:first-of-type{color:#FFFFFF;display:block} -.custom-switch input:checked ~ span span:last-of-type{color:#666666;display:none} -.custom-switch > span{display:block;height:100%;position:absolute;left:0;width:100%;background-color:#cc3300;font-size:11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px} -.custom-switch > span span{z-index:5;display:block;width:50%;position:absolute;top:1px;left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} -.custom-switch > span span:last-child{left:50%;color:#FFFFFF;display:block} -.custom-switch > span span:first-of-type{padding-left:9px;display:none;color:#666666} -.form-preview{padding:15px;margin-bottom:20px;background:white;border:1px solid #eee} -.form-preview > .form-group:last-child{padding-bottom:0} -.form-preview.form-flush{border-top:none} -.form-elements:before,.form-tabless-fields:before,.form-elements:after,.form-tabless-fields:after{content:" ";display:table} -.form-elements:after,.form-tabless-fields:after{clear:both} -.form-elements:before,.form-tabless-fields:before,.form-elements:after,.form-tabless-fields:after{content:" ";display:table} -.form-elements:after,.form-tabless-fields:after{clear:both} -.form-control{position:relative;-webkit-appearance:none} -.form-control:focus{border:1px solid #808c8d} -.form-control.icon{background-repeat:no-repeat;background-position:right -2px;padding-right:30px !important;background-image:url('../images/bitmap-icons.png')} -.form-control.icon.plus{background-position:right -124px} -.form-control.icon.search{background-position:right -84px} -.form-control.icon.user{background-position:right -41px} -.form-control.icon.lock{background-position:right 0} -.form-control.growable{width:110px} -.form-control.growable:focus,.form-control.growable:active{width:200px !important} -.form-group{position:relative;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} -.form-group:empty{display:none} -.form-group,.form-group.layout-item{padding-bottom:20px;margin-bottom:0} -.form-group.is-required > label:after{color:#ff0000;vertical-align:super;font-size:60%;content:" *";text-shadow:0 0 2px #b30000} -.form-group.span-full{width:100%;float:left} -.form-group.span-left{float:left;width:48.5%;clear:left} -.form-group.span-right{float:right;width:48.5%;clear:right} -.form-group.layout-relative{padding-bottom:0} -.form-group.checkbox-field{padding-bottom:5px} -.form-group.number-field > .form-control{text-align:right} -.form-group.checkbox-align{padding-left:23px;margin-top:-5px} -.form-group.field-slim.span-left,.form-group.field-slim.span-right{width:50%} -.form-group.field-indent{padding-left:23px} -.form-group.input-sidebar-control{padding-right:35px} -.form-group.input-sidebar-control .sidebar-control{position:absolute;right:8px;top:34px;font-size:16px;color:#c4c4c4} -.form-group.input-sidebar-control .sidebar-control:hover,.form-group.input-sidebar-control .sidebar-control:focus{text-decoration:none;color:#0181b9;outline:none} -.form-group-preview .form-control{background-color:#f6f6f6;height:auto;min-height:38px} -.form-group-preview .custom-checkbox label,.form-group-preview .custom-radio label{cursor:default} -.help-block{font-size:12px;margin-bottom:0} -.help-block.before-field{margin-top:0;margin-bottom:10px} -.input-with-icon{position:relative} -.input-with-icon > .icon{position:absolute;z-index:2;padding:13px;pointer-events:none;color:#bdbdbd;font-size:15px} -.input-with-icon.right-align > .icon{right:0} -.input-with-icon.right-align input{padding-right:32px !important} -.input-with-icon.left-align > .icon{left:0} -.input-with-icon.left-align input{padding-left:32px !important} -.field-section{border-bottom:1px solid #e0e0e0;padding-top:3px;padding-bottom:7px} -.field-section > h4{color:rgba(0,0,0,0.6)} -.field-section > p:first-child,.field-section > h4:first-child{margin:0} -.field-section.is-collapsible{cursor:pointer} -.field-section.is-collapsible > h4:before{display:inline-block;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;vertical-align:baseline;content:"\f0d7";margin:0 8px;float:right;color:rgba(0,0,0,0.4)} -.field-section.is-collapsible:hover{border-bottom:1px solid #c7c7c7} -.field-section.is-collapsible:hover > h4:before{color:inherit} -.field-textarea{resize:vertical} -.field-textarea.size-tiny{min-height:50px} -.field-textarea.size-small{min-height:100px} -.field-textarea.size-large{min-height:200px} -.field-textarea.size-huge{min-height:250px} -.field-textarea.size-giant{min-height:350px} -.field-checkboxlist .checkbox:last-of-type{margin-bottom:0} -.field-checkboxlist-scrollable{background:white;border:1px solid #e2e2e2;padding-left:15px;height:300px} -.field-checkboxlist-scrollable .checkbox{margin-top:15px;margin-bottom:5px} -.field-checkboxlist-scrollable .checkbox ~ .checkbox{margin-top:0} -.field-recordfinder{background-color:#ffffff;border:1px solid #e0e0e0;overflow:hidden;position:relative} -.field-recordfinder .form-control{background:transparent;border-color:transparent;height:auto;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;padding:8px 30px 10px 11px} -.field-recordfinder .btn{background:transparent;position:absolute;right:-2px;top:50%;margin-top:-44px;height:88px;color:#595959} -.field-recordfinder .btn i{font-size:14px} -.field-recordfinder .btn:hover{color:#333333} -.field-recordfinder .text-muted i{font-size:14px;position:relative;top:1px;display:inline-block;margin:0 2px} -.field-recordfinder .primary{font-weight:600} -.recordfinder-search{background-position:right -81px !important;border-top:none !important;border-left:none !important;border-right:none !important;border-radius:0} -.form-buttons{padding-bottom:20px;font-size:0} -.form-buttons:before,.form-buttons:after{content:" ";display:table} -.form-buttons:after{clear:both} -.form-buttons:before,.form-buttons:after{content:" ";display:table} -.form-buttons:after{clear:both} -.form-buttons .btn{margin-right:10px} -.form-buttons .btn.no-margin-right{margin-right:0} -.form-buttons .pull-right{margin-right:0;margin-left:10px} -.form-buttons.buttons-offset{padding-left:20px} -body.slim-container .form-buttons{padding:0 20px 20px} -@media (max-width:769px){.form-group.span-left,.form-group.span-right{width:100%;clear:none} -} -.select2-container--default .select2-selection--single .select2-selection__arrow b{border:none} -.select2-dropdown{z-index:10000} -[data-control=toolbar] .form-control{display:inline-block;margin-right:15px} -[data-control=toolbar] .form-control.width-50{width:50px} -[data-control=toolbar] .form-control.width-100{width:100px} -[data-control=toolbar] .form-control.width-150{width:150px} -[data-control=toolbar] input[type=text].form-control,[data-control=toolbar] label{position:relative;top:5px} -[data-control=toolbar] label{margin-right:7px} -[data-control=toolbar] label.standalone{margin-right:15px} -[data-control=toolbar] .select2-container{display:inline-block;width:auto;height:36px;margin-right:15px} -[data-control=toolbar] .select2-container .select2-selection__rendered{line-height:17px} -[data-control=toolbar] .select2-container .select2-selection--single{height:36px} -[data-control=toolbar] select.form-control.custom-select{display:none} -tr.rowlink td{cursor:pointer} -tr.rowlink td.nolink{cursor:auto} -.table tbody tr.rowlink:hover td{background-color:#f5f5f5} -a.rowlink{color:inherit;font:inherit;text-decoration:inherit} -table{max-width:100%;background-color:transparent} -th{text-align:left} -.table{width:100%;margin-bottom:20px;border-collapse:separate} -.table > thead > tr > th,.table > tbody > tr > th,.table > tfoot > tr > th,.table > thead > tr > td,.table > tbody > tr > td,.table > tfoot > tr > td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #dddddd} -.table > thead > tr > th{vertical-align:bottom;border-bottom:2px solid #dddddd} -.table > caption + thead > tr:first-child > th,.table > colgroup + thead > tr:first-child > th,.table > thead:first-child > tr:first-child > th,.table > caption + thead > tr:first-child > td,.table > colgroup + thead > tr:first-child > td,.table > thead:first-child > tr:first-child > td{border-top:0} -.table > tbody + tbody{border-top:2px solid #dddddd} -.table .table{background-color:#f9f9f9} -.table-condensed > thead > tr > th,.table-condensed > tbody > tr > th,.table-condensed > tfoot > tr > th,.table-condensed > thead > tr > td,.table-condensed > tbody > tr > td,.table-condensed > tfoot > tr > td{padding:5px} -.table-bordered{border:1px solid #dddddd} -.table-bordered > thead > tr > th,.table-bordered > tbody > tr > th,.table-bordered > tfoot > tr > th,.table-bordered > thead > tr > td,.table-bordered > tbody > tr > td,.table-bordered > tfoot > tr > td{border:1px solid #dddddd} -.table-bordered > thead > tr > th,.table-bordered > thead > tr > td{border-bottom-width:2px} -.table-striped > tbody > tr:nth-child(odd) > td,.table-striped > tbody > tr:nth-child(odd) > th{background-color:#f9f9f9} -.table-hover > tbody > tr:hover > td,.table-hover > tbody > tr:hover > th{background-color:#f5f5f5} -table col[class*="col-"]{position:static;float:none;display:table-column} -table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell} -.table > thead > tr > td.active,.table > tbody > tr > td.active,.table > tfoot > tr > td.active,.table > thead > tr > th.active,.table > tbody > tr > th.active,.table > tfoot > tr > th.active,.table > thead > tr.active > td,.table > tbody > tr.active > td,.table > tfoot > tr.active > td,.table > thead > tr.active > th,.table > tbody > tr.active > th,.table > tfoot > tr.active > th{background-color:#f5f5f5} -.table-hover > tbody > tr > td.active:hover,.table-hover > tbody > tr > th.active:hover,.table-hover > tbody > tr.active:hover > td,.table-hover > tbody > tr.active:hover > th{background-color:#e8e8e8} -.table > thead > tr > td.success,.table > tbody > tr > td.success,.table > tfoot > tr > td.success,.table > thead > tr > th.success,.table > tbody > tr > th.success,.table > tfoot > tr > th.success,.table > thead > tr.success > td,.table > tbody > tr.success > td,.table > tfoot > tr.success > td,.table > thead > tr.success > th,.table > tbody > tr.success > th,.table > tfoot > tr.success > th{background-color:#dff0d8} -.table-hover > tbody > tr > td.success:hover,.table-hover > tbody > tr > th.success:hover,.table-hover > tbody > tr.success:hover > td,.table-hover > tbody > tr.success:hover > th{background-color:#d0e9c6} -.table > thead > tr > td.info,.table > tbody > tr > td.info,.table > tfoot > tr > td.info,.table > thead > tr > th.info,.table > tbody > tr > th.info,.table > tfoot > tr > th.info,.table > thead > tr.info > td,.table > tbody > tr.info > td,.table > tfoot > tr.info > td,.table > thead > tr.info > th,.table > tbody > tr.info > th,.table > tfoot > tr.info > th{background-color:#d9edf7} -.table-hover > tbody > tr > td.info:hover,.table-hover > tbody > tr > th.info:hover,.table-hover > tbody > tr.info:hover > td,.table-hover > tbody > tr.info:hover > th{background-color:#c4e3f3} -.table > thead > tr > td.warning,.table > tbody > tr > td.warning,.table > tfoot > tr > td.warning,.table > thead > tr > th.warning,.table > tbody > tr > th.warning,.table > tfoot > tr > th.warning,.table > thead > tr.warning > td,.table > tbody > tr.warning > td,.table > tfoot > tr.warning > td,.table > thead > tr.warning > th,.table > tbody > tr.warning > th,.table > tfoot > tr.warning > th{background-color:#fcf8e3} -.table-hover > tbody > tr > td.warning:hover,.table-hover > tbody > tr > th.warning:hover,.table-hover > tbody > tr.warning:hover > td,.table-hover > tbody > tr.warning:hover > th{background-color:#faf2cc} -.table > thead > tr > td.danger,.table > tbody > tr > td.danger,.table > tfoot > tr > td.danger,.table > thead > tr > th.danger,.table > tbody > tr > th.danger,.table > tfoot > tr > th.danger,.table > thead > tr.danger > td,.table > tbody > tr.danger > td,.table > tfoot > tr.danger > td,.table > thead > tr.danger > th,.table > tbody > tr.danger > th,.table > tfoot > tr.danger > th{background-color:#f2dede} -.table-hover > tbody > tr > td.danger:hover,.table-hover > tbody > tr > th.danger:hover,.table-hover > tbody > tr.danger:hover > td,.table-hover > tbody > tr.danger:hover > th{background-color:#ebcccc} -@media (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;overflow-x:scroll;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #dddddd;-webkit-overflow-scrolling:touch} -.table-responsive > .table{margin-bottom:0} -.table-responsive > .table > thead > tr > th,.table-responsive > .table > tbody > tr > th,.table-responsive > .table > tfoot > tr > th,.table-responsive > .table > thead > tr > td,.table-responsive > .table > tbody > tr > td,.table-responsive > .table > tfoot > tr > td{white-space:nowrap} -.table-responsive > .table-bordered{border:0} -.table-responsive > .table-bordered > thead > tr > th:first-child,.table-responsive > .table-bordered > tbody > tr > th:first-child,.table-responsive > .table-bordered > tfoot > tr > th:first-child,.table-responsive > .table-bordered > thead > tr > td:first-child,.table-responsive > .table-bordered > tbody > tr > td:first-child,.table-responsive > .table-bordered > tfoot > tr > td:first-child{border-left:0} -.table-responsive > .table-bordered > thead > tr > th:last-child,.table-responsive > .table-bordered > tbody > tr > th:last-child,.table-responsive > .table-bordered > tfoot > tr > th:last-child,.table-responsive > .table-bordered > thead > tr > td:last-child,.table-responsive > .table-bordered > tbody > tr > td:last-child,.table-responsive > .table-bordered > tfoot > tr > td:last-child{border-right:0} -.table-responsive > .table-bordered > tbody > tr:last-child > th,.table-responsive > .table-bordered > tfoot > tr:last-child > th,.table-responsive > .table-bordered > tbody > tr:last-child > td,.table-responsive > .table-bordered > tfoot > tr:last-child > td{border-bottom:0} -} -table.table.data{font-size:12px} -table.table.data thead{background:#ffffff} -table.table.data thead td,table.table.data thead th{border-width:1px;border-top:1px solid #e2e2e2 !important;border-color:#e2e2e2;padding:0;font-weight:normal} -table.table.data thead td > a,table.table.data thead th > a,table.table.data thead td > span,table.table.data thead th > span{display:block;padding:13px 15px;text-transform:uppercase;color:#333333;text-decoration:none} -table.table.data thead td > a:hover,table.table.data thead th > a:hover,table.table.data thead td > span:hover,table.table.data thead th > span:hover{color:#000000} -table.table.data thead td.sort-desc > span:after,table.table.data thead th.sort-desc > span:after,table.table.data thead td.sort-desc > a:after,table.table.data thead th.sort-desc > a:after{font-size:14px;line-height:14px;display:inline-block;margin-left:8px;vertical-align:baseline;opacity:0.2;filter:alpha(opacity=20);font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f107"} -table.table.data thead td.sort-desc > span:hover:after,table.table.data thead th.sort-desc > span:hover:after,table.table.data thead td.sort-desc > a:hover:after,table.table.data thead th.sort-desc > a:hover:after{opacity:0.6;filter:alpha(opacity=60)} -table.table.data thead td.sort-asc > span:after,table.table.data thead th.sort-asc > span:after,table.table.data thead td.sort-asc > a:after,table.table.data thead th.sort-asc > a:after{font-size:14px;line-height:14px;display:inline-block;margin-left:8px;vertical-align:baseline;opacity:0.2;filter:alpha(opacity=20);font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f106"} -table.table.data thead td.sort-asc > span:hover:after,table.table.data thead th.sort-asc > span:hover:after,table.table.data thead td.sort-asc > a:hover:after,table.table.data thead th.sort-asc > a:hover:after{opacity:0.6;filter:alpha(opacity=60)} -table.table.data thead td.active,table.table.data thead th.active{background-color:inherit} -table.table.data thead td.active > span:after,table.table.data thead th.active > span:after,table.table.data thead td.active > a:after,table.table.data thead th.active > a:after{color:#c63e26;opacity:1 !important;filter:alpha(opacity=100) !important} -table.table.data thead tr th:first-child{padding-left:5px} -table.table.data tbody tr:nth-child(even) td,table.table.data tbody tr:nth-child(even) th{background-color:#f5f5f5} -table.table.data tbody td,table.table.data tbody th{padding:11px 15px;color:#666666;border-color:#eeeeee} -table.table.data tbody td a,table.table.data tbody th a{color:#666666} -table.table.data tbody td a:hover,table.table.data tbody th a:hover{text-decoration:none} -table.table.data tbody td div.progress,table.table.data tbody th div.progress{position:relative;overflow:visible;height:auto;margin-bottom:0;background-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none} -table.table.data tbody td div.progress div.bar,table.table.data tbody th div.progress div.bar{position:absolute;left:-15px;top:-11px;bottom:-11px;background:#0181b9;opacity:0.3;filter:alpha(opacity=30)} -table.table.data tbody td div.progress a,table.table.data tbody th div.progress a{position:relative} -table.table.data tbody tr:first-child th,table.table.data tbody tr:first-child td{border-top-width:0} -table.table.data tbody tr td:first-child{border-left:3px solid transparent;padding-left:17px} -table.table.data tbody tr.active td{color:#000000} -table.table.data tbody tr.active td:first-child{border-left:3px solid #ff9933} -table.table.data tbody tr:not(.no-data):hover td,table.table.data tbody tr:not(.no-data).selected td{background:#4da7e8 !important;color:white} -table.table.data tbody tr:not(.no-data):hover td a,table.table.data tbody tr:not(.no-data).selected td a,table.table.data tbody tr:not(.no-data):hover td span,table.table.data tbody tr:not(.no-data).selected td span,table.table.data tbody tr:not(.no-data):hover td i[class^="icon-"],table.table.data tbody tr:not(.no-data).selected td i[class^="icon-"]{color:white} -table.table.data tbody tr.hidden td,table.table.data tbody tr.hidden th,table.table.data tbody tr.hidden td a,table.table.data tbody tr.hidden th a{display:none} -table.table.data tbody tr.strike td,table.table.data tbody tr.strike th,table.table.data tbody tr.strike td a,table.table.data tbody tr.strike th a{text-decoration:line-through} -table.table.data tbody tr.frozen td,table.table.data tbody tr.frozen th,table.table.data tbody tr.frozen td a,table.table.data tbody tr.frozen th a{color:#337ab7} -table.table.data tbody tr.processing td,table.table.data tbody tr.processing th,table.table.data tbody tr.processing td a,table.table.data tbody tr.processing th a{color:#666666} -table.table.data tbody tr.negative td,table.table.data tbody tr.negative th,table.table.data tbody tr.negative td a,table.table.data tbody tr.negative th a{color:#b2341c} -table.table.data tbody tr.positive td,table.table.data tbody tr.positive th,table.table.data tbody tr.positive td a,table.table.data tbody tr.positive th a{color:#278731} -table.table.data tbody tr.disabled td,table.table.data tbody tr.deleted td,table.table.data tbody tr.disabled th,table.table.data tbody tr.deleted th,table.table.data tbody tr.disabled td a,table.table.data tbody tr.deleted td a,table.table.data tbody tr.disabled th a,table.table.data tbody tr.deleted th a{color:#888888} -table.table.data tbody tr.new td,table.table.data tbody tr.important td,table.table.data tbody tr.new th,table.table.data tbody tr.important th,table.table.data tbody tr.new td a,table.table.data tbody tr.important td a,table.table.data tbody tr.new th a,table.table.data tbody tr.important th a{font-weight:600} -table.table.data tbody tr.safe td,table.table.data tbody tr.special td,table.table.data tbody tr.safe th,table.table.data tbody tr.special th,table.table.data tbody tr.safe td a,table.table.data tbody tr.special td a,table.table.data tbody tr.safe th a,table.table.data tbody tr.special th a{color:#98a7a8} -table.table.data tbody td.column-break-word{word-wrap:break-word;word-break:break-all} -table.table.data tbody td.column-single-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap} -table.table.data tbody td.column-slim{padding-left:0;padding-right:0} -table.table.data tbody.icons td i[class^="icon-"]{display:inline-block;margin-right:7px;font-size:15px;color:#95a5a6;position:relative;top:1px} -table.table.data tbody.clickable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} -table.table.data tbody td.column-compact{padding:0} -table.table.data tfoot a{color:#666666;text-decoration:none} -table.table.data tfoot td,table.table.data tfoot th{border-color:#e2e2e2;padding:10px 15px} -table.table.data th.list-cell-type-switch,table.table.data td.list-cell-type-switch{text-align:center} -table.table.data .list-checkbox{padding-left:16px;padding-right:8px;width:52px;vertical-align:top;border-right:1px solid #eeeeee} -table.table.data .list-checkbox .checkbox{margin:0} -table.table.data .list-checkbox .custom-checkbox{position:relative;top:5px;left:-2px} -table.table.data .list-checkbox .custom-checkbox label{margin-right:0} -table.table.data thead tr th.list-checkbox{padding:18px 0 0 20px} -table.table.data .list-tree{width:10px;padding:0} -table.table.data .list-tree a.list-expand-collapse{padding:5px;display:block;text-align:center;font-size:14px;position:relative;top:5px;left:10px;text-decoration:none !important} -table.table.data tr.list-tree-level-1 a.list-expand-collapse{left:30px} -table.table.data tr.list-tree-level-1 td.list-cell-index-1{padding-left:35px} -table.table.data tr.list-tree-level-2 a.list-expand-collapse{left:40px} -table.table.data tr.list-tree-level-2 td.list-cell-index-1{padding-left:45px} -table.table.data tr.list-tree-level-3 a.list-expand-collapse{left:50px} -table.table.data tr.list-tree-level-3 td.list-cell-index-1{padding-left:55px} -table.table.data tr.list-tree-level-4 a.list-expand-collapse{left:60px} -table.table.data tr.list-tree-level-4 td.list-cell-index-1{padding-left:65px} -table.table.data tr.list-tree-level-5 a.list-expand-collapse{left:70px} -table.table.data tr.list-tree-level-5 td.list-cell-index-1{padding-left:75px} -table.table.data tr.list-tree-level-6 a.list-expand-collapse{left:80px} -table.table.data tr.list-tree-level-6 td.list-cell-index-1{padding-left:85px} -table.table.data tr.list-tree-level-7 a.list-expand-collapse{left:90px} -table.table.data tr.list-tree-level-7 td.list-cell-index-1{padding-left:95px} -table.table.data tr.list-tree-level-8 a.list-expand-collapse{left:100px} -table.table.data tr.list-tree-level-8 td.list-cell-index-1{padding-left:105px} -table.table.data tr.list-tree-level-9 a.list-expand-collapse{left:110px} -table.table.data tr.list-tree-level-9 td.list-cell-index-1{padding-left:115px} -table.table.data tr.list-tree-level-10 a.list-expand-collapse{left:120px} -table.table.data tr.list-tree-level-10 td.list-cell-index-1{padding-left:125px} -table.table.data tr.list-tree-level-11 a.list-expand-collapse{left:130px} -table.table.data tr.list-tree-level-11 td.list-cell-index-1{padding-left:135px} -table.table.data tr.list-tree-level-12 a.list-expand-collapse{left:140px} -table.table.data tr.list-tree-level-12 td.list-cell-index-1{padding-left:145px} -table.table.data tr.list-tree-level-13 a.list-expand-collapse{left:150px} -table.table.data tr.list-tree-level-13 td.list-cell-index-1{padding-left:155px} -table.table.data tr.list-tree-level-14 a.list-expand-collapse{left:160px} -table.table.data tr.list-tree-level-14 td.list-cell-index-1{padding-left:165px} -table.table.data tr.list-tree-level-15 a.list-expand-collapse{left:170px} -table.table.data tr.list-tree-level-15 td.list-cell-index-1{padding-left:175px} -table.table.data tr.list-tree-level-16 a.list-expand-collapse{left:180px} -table.table.data tr.list-tree-level-16 td.list-cell-index-1{padding-left:185px} -table.table.data tr.list-tree-level-17 a.list-expand-collapse{left:190px} -table.table.data tr.list-tree-level-17 td.list-cell-index-1{padding-left:195px} -table.table.data tr.list-tree-level-18 a.list-expand-collapse{left:200px} -table.table.data tr.list-tree-level-18 td.list-cell-index-1{padding-left:205px} -table.table.data tr.list-tree-level-19 a.list-expand-collapse{left:210px} -table.table.data tr.list-tree-level-19 td.list-cell-index-1{padding-left:215px} -table.table.data tr.list-tree-level-20 a.list-expand-collapse{left:220px} -table.table.data tr.list-tree-level-20 td.list-cell-index-1{padding-left:225px} -table.table.data tr.list-tree-level-21 a.list-expand-collapse{left:230px} -table.table.data tr.list-tree-level-21 td.list-cell-index-1{padding-left:235px} -table.table.data tr.list-tree-level-22 a.list-expand-collapse{left:240px} -table.table.data tr.list-tree-level-22 td.list-cell-index-1{padding-left:245px} -table.table.data tr.list-tree-level-23 a.list-expand-collapse{left:250px} -table.table.data tr.list-tree-level-23 td.list-cell-index-1{padding-left:255px} -table.table.data tr.list-tree-level-24 a.list-expand-collapse{left:260px} -table.table.data tr.list-tree-level-24 td.list-cell-index-1{padding-left:265px} -table.table.data tr.list-tree-level-25 a.list-expand-collapse{left:270px} -table.table.data tr.list-tree-level-25 td.list-cell-index-1{padding-left:275px} -.list-preview{padding:0;margin-bottom:20px;background:white;border:1px solid #e2e2e2} -.list-preview .list-header:first-child{padding-top:20px} -.list-preview .control-list:last-child > table{margin-bottom:0} -.list-flush table.table.data thead tr th{border-top:none !important} -.control-list p.no-data{padding:18px 20px;margin:0 20px;color:#666666;font-size:14px;text-align:center;font-weight:300;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px} -.control-list table.table.data .list-setup{width:48px} -.control-list table.table.data .list-setup a{display:block;color:#000000} -.control-list table.table.data .list-setup a:before{font-size:14px;line-height:14px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f0ca";display:inline-block;margin-left:8px;vertical-align:baseline;opacity:0.6;filter:alpha(opacity=60)} -.control-list table.table.data .list-setup a:hover:before{opacity:1;filter:alpha(opacity=100);color:#4da7e8 !important} -.control-list table.table.data .list-pagination{font-size:14px;text-align:right;padding-top:20px} -.control-list table.table.data .list-pagination .loading-indicator div{margin-left:20px;font-size:12px} -.list-header{background-color:transparent;padding:0 20px 1px 20px} -.list-header h3{font-size:14px;color:#7e8c8d;text-transform:uppercase;font-weight:600;margin-top:0;margin-bottom:15px} -.report-widget .table-container{margin:-15px} -.report-widget .table-container table.table.data{margin-bottom:0} -.report-widget .table-container table.table.data thead tr th{border-top:none !important} -.report-widget .table-container table.table.data tbody tr:nth-child(even) td,.report-widget .table-container table.table.data tbody tr:nth-child(even) th{background-color:transparent} -@media only screen and (max-width:960px){.control-list table,.control-list thead,.control-list tbody,.control-list th,.control-list td,.control-list tr{display:block} -.control-list table{position:relative;border-top:1px solid #e2e2e2} -.control-list table thead tr td,.control-list table thead tr th{position:absolute;top:-9999px;left:-9999px} -.control-list table thead tr th.list-setup{position:absolute;top:auto;left:auto;bottom:0;right:0;border:none !important} -.control-list table thead tr th.list-setup a{padding:10px 15px} -.control-list table tbody tr{border-bottom:1px solid #e2e2e2} -.control-list table tbody tr td{border:none;border-left:3px solid transparent;position:relative;padding-left:40% !important;white-space:normal;text-align:left;min-height:40px} -.control-list table tbody tr td:before{position:absolute;top:0;left:0;width:35%;padding:11px 15px;white-space:nowrap;text-align:left;color:#333333;content:attr(data-title)} -.control-list table tbody tr:hover td:before{color:white !important} -.control-list table tbody tr.active td{border-left:3px solid #ff9933} -.control-list table tbody tr.active td:before{color:#000000} -.control-list table tbody tr td.list-setup{display:none} -.control-list table tfoot tr td{border:none} -.control-list table .list-checkbox{width:100% !important;border-right:none !important;padding-left:16px !important} -} -.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent} -.dropdown{position:relative} -.dropdown-toggle:focus{outline:0} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;background-color:#ffffff;border:1px solid #cccccc;border:1px solid #949ea6;border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box} -.dropdown-menu.pull-right{right:0;left:auto} -.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5} -.dropdown-menu > li > a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857143;color:#39454a;white-space:nowrap} -.dropdown-menu > li > a:hover,.dropdown-menu > li > a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5} -.dropdown-menu > .active > a,.dropdown-menu > .active > a:hover,.dropdown-menu > .active > a:focus{color:#ffffff;text-decoration:none;outline:0;background-color:#5fb6f5} -.dropdown-menu > .disabled > a,.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{color:#999999} -.dropdown-menu > .disabled > a:hover,.dropdown-menu > .disabled > a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed} -.open > .dropdown-menu{display:block} -.open > a{outline:0} -.dropdown-menu-right{left:auto;right:0} -.dropdown-menu-left{left:0;right:auto} -.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999999} -.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990} -.pull-right > .dropdown-menu{right:0;left:auto} -.dropup .caret{border-top:0;border-bottom:4px solid;content:""} -.dropup .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px} -.dropdown-menu{padding:0;background:transparent;border:none;-webkit-box-shadow:none;box-shadow:none} -.dropdown-menu .dropdown-container > ul{border:1px solid #949ea6;background-color:#ffffff;border-radius:2px;padding:0;list-style:none;position:relative;margin-top:7px} -.dropdown-menu .dropdown-container > ul:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #ffffff;position:absolute;left:15px;top:-8px;z-index:101} -.dropdown-menu .dropdown-container > ul:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:9px solid #949ea6;position:absolute;left:14px;top:-9px;z-index:100} -.dropdown-menu .dropdown-container > ul li a{outline:none;padding:8px 15px;font-size:13px;display:block;color:#39454a;position:relative} -.dropdown-menu .dropdown-container > ul li a:hover,.dropdown-menu .dropdown-container > ul li a:focus{text-decoration:none;color:#ffffff;background-color:#2f99da} -.dropdown-menu .dropdown-container > ul li a:hover[class^="oc-icon-"]:before,.dropdown-menu .dropdown-container > ul li a:focus[class^="oc-icon-"]:before,.dropdown-menu .dropdown-container > ul li a:hover[class*=" oc-icon-"]:before,.dropdown-menu .dropdown-container > ul li a:focus[class*=" oc-icon-"]:before{color:white} -.dropdown-menu .dropdown-container > ul li a[class^="oc-icon-"],.dropdown-menu .dropdown-container > ul li a[class*=" oc-icon-"]{padding-left:30px} -.dropdown-menu .dropdown-container > ul li a[class^="oc-icon-"]:before,.dropdown-menu .dropdown-container > ul li a[class*=" oc-icon-"]:before{position:absolute;font-size:14px;left:9px;top:7px;color:#949ea6} -.dropdown-menu .dropdown-container > ul li.first-item a:hover:after,.dropdown-menu .dropdown-container > ul li.first-item a:focus:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #2f99da;position:absolute;left:15px;top:-8px;z-index:102} -.dropdown-menu .dropdown-container > ul li.dropdown-title{display:none} -.dropdown-menu .dropdown-container > ul li.divider{margin:0} -.dropdown-menu.pull-right .dropdown-container > ul:after{left:auto;right:15px} -.dropdown-menu.pull-right .dropdown-container > ul:before{left:auto;right:14px} -.dropdown-menu.pull-right .dropdown-container > ul li.first-item a:hover:after,.dropdown-menu.pull-right .dropdown-container > ul li.first-item a:focus:after{left:auto;right:15px} -.dropdown-menu.top .dropdown-container > ul:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #ffffff;border-bottom-width:0;top:auto;bottom:-8px} -.dropdown-menu.top .dropdown-container > ul:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid #949ea6;border-bottom-width:0;top:auto;bottom:-9px} -.touch .dropdown-menu .dropdown-container > ul li a:hover{color:#39454a;background:white} -.touch .dropdown-menu .dropdown-container > ul li a:hover:before{position:absolute;font-size:14px;left:9px;top:7px;color:#949ea6} -.touch .dropdown-menu .dropdown-container > ul li.first-item a:hover:after{content:'';display:none} -body.dropdown-open .dropdown-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:300} -@media (max-width:480px){body.dropdown-open{overflow:hidden} -body.dropdown-open .dropdown-overlay{background:rgba(0,0,0,0.4)} -body.dropdown-open .dropdown-menu{overflow:auto;overflow-y:scroll;position:fixed !important;margin:0 !important;top:0 !important;right:0 !important;bottom:0 !important;left:0 !important;z-index:1040} -body.dropdown-open .dropdown-menu .dropdown-container{padding:10px;height:100%} -body.dropdown-open .dropdown-menu .dropdown-container ul{min-height:100%;margin-top:0} -body.dropdown-open .dropdown-menu .dropdown-container ul:before,body.dropdown-open .dropdown-menu .dropdown-container ul:after{display:none} -body.dropdown-open .dropdown-menu .dropdown-container ul li.dropdown-title{display:block;padding:8px 15px;border-bottom:1px solid #c9c9c9;color:#39454a;position:relative;cursor:pointer;font-weight:600} -body.dropdown-open .dropdown-menu .dropdown-container ul li.dropdown-title:after{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f00d";position:absolute;top:7px;right:13px;opacity:0.3;filter:alpha(opacity=30)} -body.dropdown-open .dropdown-menu .dropdown-container ul li.first-item a:hover:after,body.dropdown-open .dropdown-menu .dropdown-container ul li.first-item :focus:after{content:'';display:none} -} -div.control-popover{position:absolute;background-clip:content-box;left:0;top:0;z-index:570;visibility:hidden} -div.control-popover.in,div.control-popover.fade{visibility:visible} -div.control-popover.fade > div{opacity:0;filter:alpha(opacity=0);-webkit-transition:all 0.3s,width 0s;transition:all 0.3s,width 0s;-webkit-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7)} -div.control-popover.fade.in > div{opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)} -div.control-popover > div{position:relative;background:#ffffff;-webkit-box-shadow:2px 2px 2px rgba(0,0,0,0.05);box-shadow:2px 2px 2px rgba(0,0,0,0.05);border-top-right-radius:5px;border-top-left-radius:5px;border-bottom-right-radius:2px;border-bottom-left-radius:2px} -div.control-popover > div:after,div.control-popover > div:before{position:absolute} -div.control-popover > div:after{z-index:601} -div.control-popover > div:before{z-index:600} -div.control-popover.placement-bottom > div{border:1px solid #949ea6} -div.control-popover.placement-bottom > div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #ffffff;left:15px;top:-8px} -div.control-popover.placement-bottom > div:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:9px solid #949ea6;left:14px;top:-9px} -div.control-popover.placement-top > div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #ffffff;border-bottom-width:0;left:15px;bottom:-8px} -div.control-popover.placement-top > div:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid #949ea6;border-bottom-width:0;left:14px;bottom:-9px} -div.control-popover.placement-left > div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid #ffffff;right:-8px;top:7px} -div.control-popover.placement-left > div:before{content:'';display:block;width:0;height:0;border-top:8.5px solid transparent;border-bottom:8.5px solid transparent;border-left:9px solid #949ea6;right:-9px;top:6px} -div.control-popover.placement-right > div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid #ffffff;left:-8px;top:7px} -div.control-popover.placement-right > div:before{content:'';display:block;width:0;height:0;border-top:8.5px solid transparent;border-bottom:8.5px solid transparent;border-right:9px solid #949ea6;left:-9px;top:6px} -div.control-popover div.popover-body{padding:15px} -div.control-popover div.popover-body.form-container{padding-bottom:0} -div.control-popover div.popover-footer{padding:0 20px 20px 20px} -div.control-popover .popover-head{background:#d35400;padding:14px 16px;position:relative;color:#ffffff;border-top-right-radius:2px;border-top-left-radius:2px} -div.control-popover .popover-head:before{z-index:602;position:absolute} -div.control-popover .popover-head h3{font-size:14px;font-weight:600;margin-top:0;margin-bottom:0;padding-right:15px;line-height:130%} -div.control-popover .popover-head p{font-size:13px;font-weight:100;margin:10px 0 0 0} -div.control-popover .popover-head .close{float:none;position:absolute;right:11px;top:12px;color:#ffffff;outline:none} -div.control-popover .popover-head .close:hover{opacity:1;filter:alpha(opacity=100)} -div.control-popover.placement-bottom .popover-head:before{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #d35400;left:15px;top:-8px} -div.control-popover.placement-left .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid #d35400;right:-8px;top:7px} -div.control-popover.placement-right .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid #d35400;left:-8px;top:7px} -div.control-popover.popover-danger > div{color:#fff;background-color:#ab2a1c} -div.control-popover.popover-danger.placement-bottom > div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #ab2a1c} -div.control-popover.popover-danger.placement-top > div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #ab2a1c;border-bottom-width:0} -div.control-popover.popover-danger.placement-left > div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid #ab2a1c} -div.control-popover.popover-danger.placement-right > div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid #ab2a1c} -div.control-popover.popover-danger .popover-head{background-color:#ab2a1c} -.popover-highlight{position:relative;z-index:562 !important} -.popover-highlight:hover,.popover-highlight:active,.popover-highlight:focus{z-index:562 !important} -div.popover-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0,0,0,0.3);z-index:560} -@media (max-width:480px){body.popover-open{overflow:hidden} -body.popover-open .control-popover{overflow:auto;overflow-y:scroll;position:fixed;margin:0;padding:10px;width:100% !important;z-index:609;top:0 !important;right:0 !important;bottom:0 !important;left:0 !important} -body.popover-open .control-popover > div{padding:0;min-height:100%;-webkit-box-shadow:none;box-shadow:none} -body.popover-open .control-popover > div:before,body.popover-open .control-popover > div:after{display:none} -body.popover-open .control-popover .popover-head:before{display:none} -} -.tooltip{position:absolute;z-index:1030;display:block;visibility:visible;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0)} -.tooltip.in{opacity:0.9;filter:alpha(opacity=90)} -.tooltip.top{margin-top:-3px;padding:5px 0} -.tooltip.right{margin-left:3px;padding:0 5px} -.tooltip.bottom{margin-top:3px;padding:5px 0} -.tooltip.left{margin-left:-3px;padding:0 5px} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#34495e;border-radius:2px} -.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#34495e} -.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#34495e} -.tooltip.top-right .tooltip-arrow{bottom:0;right:5px;border-width:5px 5px 0;border-top-color:#34495e} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#34495e} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#34495e} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#34495e} -.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#34495e} -.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#34495e} -.inspector-fields{min-width:220px;border-collapse:collapse;width:100%;table-layout:fixed;border-bottom-right-radius:2px;border-bottom-left-radius:2px} -.inspector-fields td,.inspector-fields th{padding:5px 12px;color:#333333;font-size:12px;width:50%;border-bottom:1px solid #c8cccd;text-align:left} -.inspector-fields tr:last-child td,.inspector-fields tr:last-child th{border-bottom:none} -.inspector-fields tr:last-child td,.inspector-fields tr:last-child td input[type=text]{-webkit-border-radius:0 0 2px 0;-moz-border-radius:0 0 2px 0;border-radius:0 0 2px 0} -.inspector-fields tr.group{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} -.inspector-fields tr.group th{background:#e0e4e5;font-weight:600;cursor:pointer} -.inspector-fields tr.collapsed{display:none} -.inspector-fields tr.expanded{display:table-row} -.inspector-fields.has-groups th{padding-left:20px} -.inspector-fields.has-groups tr.grouped th{padding-left:35px} -.inspector-fields td{font-weight:300;border-left:1px solid #f2f2f2;text-overflow:ellipsis;white-space:nowrap;overflow:hidden} -.inspector-fields td.text input[type=text]{background:transparent} -.inspector-fields td.text input[type=text]::-webkit-input-placeholder{font-weight:normal !important;color:#b5babd} -.inspector-fields td.text input[type=text]:-moz-placeholder{font-weight:normal !important;color:#b5babd} -.inspector-fields td.text input[type=text]::-moz-placeholder{font-weight:normal !important;color:#b5babd} -.inspector-fields td.text input[type=text]:-ms-input-placeholder{font-weight:normal !important;color:#b5babd} -.inspector-fields td.text.active{background:#ffffff;border-left:1px solid #c8cccd} -.inspector-fields td.dropdown{padding:0 !important} -.inspector-fields td select{width:90%} -.inspector-fields td div.external-param-editor-container{position:relative;padding-right:30px} -.inspector-fields td div.external-param-editor-container div.external-editor{bottom:0;margin:-5px -12px;right:30px;left:auto;top:0;position:absolute;-webkit-transition:left 0.2s;transition:left 0.2s;-webkit-transform:translateZ(0);-ms-transform:translateZ(0);transform:translateZ(0);will-change:transform} -.inspector-fields td div.external-param-editor-container div.external-editor div.controls{position:absolute;width:100%;height:100%;left:0;top:0} -.inspector-fields td div.external-param-editor-container div.external-editor div.controls a{position:absolute;left:0;top:0;display:inline-block;height:100%;width:30px;color:#2b3e50;outline:none} -.inspector-fields td div.external-param-editor-container div.external-editor div.controls a i{display:inline-block;position:relative;left:10px;top:4px;font-size:15px} -.inspector-fields td div.external-param-editor-container div.external-editor div.controls input{position:absolute;display:block;border:none;width:100%;height:100%;left:0;top:0;padding-left:30px;padding-right:12px;background:transparent} -.inspector-fields td div.external-param-editor-container.editor-visible div.external-editor div.controls input{background:#f2f2f2} -.inspector-fields td.active div.external-param-editor-container div.external-editor div.controls input{background:white} -.inspector-fields td.dropdown div.external-param-editor-container div.external-editor{height:100%;margin:0;bottom:auto} -.inspector-fields th{font-weight:500} -.inspector-fields th > div{position:relative} -.inspector-fields th > div > div{white-space:nowrap;padding-right:10px;text-overflow:ellipsis;overflow:hidden;width:100%} -.inspector-fields th > div > div span.info{display:inline-block;position:absolute;right:-1px;top:3px;font-size:14px;width:10px;height:12px;line-height:80%;opacity:0.4;filter:alpha(opacity=40)} -.inspector-fields th > div > div span.info:before{margin-left:3px} -.inspector-fields th > div > div span.info:hover{opacity:1;filter:alpha(opacity=100)} -.inspector-fields th > div a.expandControl{display:block;position:absolute;width:12px;height:12px;left:-15px;top:2px;text-indent:-100000em} -.inspector-fields th > div a.expandControl span{position:absolute;display:inline-block;left:0;top:0;width:12px;height:12px} -.inspector-fields th > div a.expandControl span:after{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105";position:absolute;left:4px;top:-2px;width:12px;height:12px;font-size:13px;color:#333333;text-indent:0} -.inspector-fields th > div a.expandControl.expanded span:after{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f107";left:2px} -.inspector-fields input[type=text]{display:block;width:100%;border:none;outline:none} -.inspector-fields div.custom-checkbox{margin-top:0;margin-bottom:0} -.inspector-fields div.custom-checkbox label:before{top:-12px} -.inspector-fields .select2-container{width:100% !important} -.inspector-fields .select2-container .select2-selection{background:transparent;height:30px;line-height:29px;padding:0 3px 0 12px;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important;font-size:12px} -.inspector-fields .select2-container .select2-selection.select2-default{font-weight:normal !important} -.inspector-fields .select2-container .loading-indicator > span{top:15px} -.inspector-fields .select2-container.select2-container--open{-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important} -.inspector-fields .select2-container.select2-container--open .select2-selection{background:white} -.inspector-fields .select2-container .select2-selection__rendered{padding:0 22px 0 0} -.inspector-fields tr.changed td{font-weight:600} -.inspector-fields tr.changed td input[type=text]{font-weight:600} -.inspector-fields tr.changed td .select2-container .select2-selection{font-weight:600} -div.control-popover.control-inspector > div{background:#f2f2f2;border:none;-webkit-box-shadow:none;box-shadow:none} -div.control-popover.control-inspector > div:before,div.control-popover.control-inspector > div:after{display:none} -div.control-popover.hero .inspector-fields th,div.control-popover.hero .inspector-fields td{padding:9px 12px;font-weight:600 !important;font-size:13px} -div.control-popover.hero .inspector-fields td{font-weight:400 !important} -div.control-popover.hero .inspector-fields div.custom-select.select2-container .select2-selection{height:36px;line-height:36px} -.select2-dropdown.ocInspectorDropdown{font-size:12px;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important} -.select2-dropdown.ocInspectorDropdown > .select2-results > .select2-results__options{font-size:12px} -.select2-dropdown.ocInspectorDropdown > .select2-results > li > div{padding:5px 12px 5px} -.select2-dropdown.ocInspectorDropdown > .select2-results li.select2-no-results{padding:5px 12px 5px} -.select2-dropdown.ocInspectorDropdown .select2-search{min-height:26px;position:relative;border-bottom:1px solid #b2b9be} -.select2-dropdown.ocInspectorDropdown .select2-search:after{position:absolute;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f002";right:10px;top:10px;color:#95a5a6} -.select2-dropdown.ocInspectorDropdown .select2-search input.select2-search__field{min-height:26px;background:transparent !important;padding-left:12px;padding-right:12px;border:none} -@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0} -to{background-position:0 0} -} -@keyframes progress-bar-stripes{from{background-position:40px 0} -to{background-position:0 0} -} -.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:2px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)} -.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#ffffff;text-align:center;background-color:#5fb6f5;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;transition:width 0.6s ease} -.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite} -.progress-bar-success{background-color:#5cb85c} -.progress-bar-info{background-color:#5bc0de} -.progress-bar-warning{background-color:#f0ad4e} -.progress-bar-danger{background-color:#d9534f} -div.progress{height:9px;-webkit-box-shadow:none;box-shadow:none;background:#d9dee0} -.progress-bar{line-height:9px;-webkit-box-shadow:none;box-shadow:none;background-color:#2f99da} -.progress-bar.progress-bar-success{background-color:#31ac5f} -.control-pagination{font-size:0} -.control-pagination .page-iteration{margin-right:4px;font-size:12px;color:#98a7a8} -.control-pagination .page-next,.control-pagination .page-back{display:inline-block;padding:10px 15px} -.control-pagination .page-next:before,.control-pagination .page-back:before{color:#666666;font-size:19px;line-height:19px;display:inline-block;vertical-align:baseline;position:relative;top:2px} -.control-pagination a.page-next:hover:before,.control-pagination a.page-back:hover:before{color:#1795f1} -.control-pagination span.page-next:before,.control-pagination span.page-back:before{color:#b6b6b6} -.control-pagination .page-next{padding-left:6px} -.control-pagination .page-back{padding-right:6px} -.control-pagination .page-next:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105"} -.control-pagination .page-back:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f104"} -.control-filter{padding:0 10px;font-size:13px;color:#949ea6;background-color:#f3f3f3;border-top:1px solid #949ea6;border-bottom:1px solid #949ea6} -.control-filter a{text-decoration:none;color:#949ea6} -.control-filter > .filter-scope{display:inline-block;padding:15px} -.control-filter > .filter-scope .filter-setting{display:inline-block;-webkit-transition:color 0.6s;transition:color 0.6s} -.control-filter > .filter-scope:after{font-size:14px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f107"} -.control-filter > .filter-scope.active .filter-setting{padding-left:5px;padding-right:5px;color:#FFF;background-color:#cc3300;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:color 1s,background-color 1s;transition:color 1s,background-color 1s} -.control-filter > .filter-scope.checkbox{padding-left:35px} -.control-filter > .filter-scope.checkbox,.control-filter > .filter-scope.checkbox label{margin-bottom:0} -.control-filter > .filter-scope.checkbox:after{content:''} -.control-filter > .filter-scope:hover{color:#000} -.control-filter > .filter-scope:hover .filter-label{color:#949ea6} -.control-filter > .filter-scope:hover.active .filter-setting{background-color:#b32d00} -.control-filter-popover{min-width:275px} -.control-filter-popover .filter-search{min-height:36px} -.control-filter-popover .filter-search input{min-height:36px;border:none;border-bottom:1px solid #949ea6;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:transparent} -.control-filter-popover .filter-search .form-control.icon.search{background-position:right -81px} -.control-filter-popover .filter-search .close{display:none} -.control-filter-popover .filter-items,.control-filter-popover .filter-active-items{color:#949ea6;font-size:13px} -.control-filter-popover .filter-items ul,.control-filter-popover .filter-active-items ul,.control-filter-popover .filter-items li,.control-filter-popover .filter-active-items li{list-style-type:none;margin:0;padding:0} -.control-filter-popover .filter-items li,.control-filter-popover .filter-active-items li{-webkit-transition:color 0.6s,background-color 0.3s;transition:color 0.6s,background-color 0.3s} -.control-filter-popover .filter-items a,.control-filter-popover .filter-active-items a{text-decoration:none;color:#949ea6;display:block;padding:7px 15px} -.control-filter-popover .filter-items a:before,.control-filter-popover .filter-active-items a:before{margin-right:8px;display:inline-block;vertical-align:baseline} -.control-filter-popover .filter-items a:hover,.control-filter-popover .filter-active-items a:hover{background-color:#4da7e8;color:#FFFFFF} -.control-filter-popover .filter-items{height:100px;overflow:auto;background-color:#fafafa;border-bottom:1px solid #949ea6} -.control-filter-popover .filter-items a:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f067"} -.control-filter-popover .filter-items li.loading{padding:7px} -.control-filter-popover .filter-items li.loading > span{display:block;height:20px;width:20px;background-image:url('../../../system/assets/ui/images/loader-transparent.svg');background-size:20px 20px;background-position:50% 50%;-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite} -.control-filter-popover .filter-items li.animate-enter{-webkit-animation:fadeInUp 0.5s;animation:fadeInUp 0.5s} -.control-filter-popover .filter-active-items a:before{font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f00d"} -.control-filter-popover .filter-active-items li.animate-enter{-webkit-animation:fadeInDown 0.5s;animation:fadeInDown 0.5s} -@media (max-width:480px){.control-filter-popover .filter-items{height:200px} -.control-filter-popover .filter-search input{padding-left:36px;padding-right:36px} -.control-filter-popover .filter-search .form-control.icon.search{background-position:0 -81px} -.control-filter-popover .filter-search .close{width:30px;display:block;position:absolute;top:5px;right:5px;font-size:28px;z-index:2} -} -.modal-open{overflow:hidden} -.modal{display:none;overflow:auto;overflow-y:scroll;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0} -.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out} -.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)} -.modal-dialog{position:relative;width:auto;margin:10px} -.modal-content{position:relative;background-color:#ffffff;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:none} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000} -.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)} -.modal-backdrop.in{opacity:0.5;filter:alpha(opacity=50)} -.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.42857143px} -.modal-header .close{margin-top:-2px} -.modal-title{margin:0;line-height:1.42857143} -.modal-body{position:relative;padding:20px} -.modal-footer{margin-top:15px;padding:19px 20px 20px;text-align:right;border-top:1px solid #e5e5e5} -.modal-footer .btn + .btn{margin-left:5px;margin-bottom:0} -.modal-footer .btn-group .btn + .btn{margin-left:-1px} -.modal-footer .btn-block + .btn-block{margin-left:0} -@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto} -.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)} -.modal-sm{width:300px} -} -@media (min-width:992px){.modal-lg{width:900px} -} -.modal-content{-webkit-box-shadow:none;box-shadow:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px;border:none;background:#f9f9f9} -.modal-content .close{color:#fff} -.modal-header{background:#d35400;color:#ecf0f1;border:none} -.modal-header h4{font-weight:600;font-size:16px} -.modal-footer{background:transparent;border:none;margin-top:0;padding:0 20px 20px 20px} -.modal-body{padding-bottom:0} -.modal-body > p:last-child{margin-bottom:20px} -.modal-dialog.size-adaptive{width:100%;padding-right:50px;padding-left:50px} -.modal-dialog.adaptive-height{height:100%;min-height:600px;margin-top:0;margin-bottom:0;padding-top:50px;padding-bottom:50px} -.modal-dialog.adaptive-height .modal-content{height:100%} -@media (min-width:768px){.modal-dialog.size-tiny{width:300px} -.modal-dialog.size-small{width:400px} -} -@media (min-width:992px){.modal-dialog.size-large{width:750px} -.modal-dialog.size-huge{width:900px} -.modal-dialog.size-giant{width:982px} -} -@media (max-width:768px){.modal-dialog.size-adaptive{width:auto;padding:5px 0;margin:0} -} -.control-popup.fade .modal-dialog{opacity:0;filter:alpha(opacity=0);-webkit-transition:all 0.3s,width 0s;transition:all 0.3s,width 0s;-webkit-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7)} -.control-popup.fade.in .modal-dialog{opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)} -.popup-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000000;background-color:rgba(0,0,0,0.2);opacity:1;filter:alpha(opacity=100)} -.popup-backdrop .popup-loading-indicator{display:block;width:100px;height:100px;position:absolute;top:130px;left:50%;margin-left:-50px;-webkit-transition:all 0.3s,width 0s;transition:all 0.3s,width 0s;-webkit-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7);opacity:0;filter:alpha(opacity=0)} -.popup-backdrop .popup-loading-indicator:after{content:' ';display:block;background-size:50px 50px;background-repeat:no-repeat;background-position:50% 50%;background-image:url('../../../system/assets/ui/images/loader-transparent.svg');-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite;width:50px;height:50px;margin:25px 0 0 25px} -.popup-backdrop.loading .popup-loading-indicator{opacity:1;filter:alpha(opacity=100);-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)} -.mac body.modal-open{margin-right:0} -.nav{margin-bottom:0;padding-left:0;list-style:none} -.nav > li{position:relative;display:block} -.nav > li > a{position:relative;display:block;padding:10px 15px} -.nav > li > a:hover,.nav > li > a:focus{text-decoration:none;background-color:#eeeeee} -.nav > li.disabled > a{color:#999999} -.nav > li.disabled > a:hover,.nav > li.disabled > a:focus{color:#999999;text-decoration:none;background-color:transparent;cursor:not-allowed} -.nav .open > a,.nav .open > a:hover,.nav .open > a:focus{background-color:#eeeeee;border-color:#1795f1} -.nav-tabs{border-bottom:1px solid #dddddd} -.nav-tabs > li{float:left;margin-bottom:-1px} -.nav-tabs > li > a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:2px 2px 0 0} -.nav-tabs > li > a:hover{border-color:#eeeeee #eeeeee #dddddd} -.nav-tabs > li.active > a,.nav-tabs > li.active > a:hover,.nav-tabs > li.active > a:focus{color:#555555;background-color:#f9f9f9;border:1px solid #dddddd;border-bottom-color:transparent;cursor:default} -.nav-tabs.nav-justified{width:100%;border-bottom:0} -.nav-tabs.nav-justified > li{float:none} -.nav-tabs.nav-justified > li > a{text-align:center;margin-bottom:5px} -.nav-tabs.nav-justified > .dropdown .dropdown-menu{top:auto;left:auto} -@media (min-width:768px){.nav-tabs.nav-justified > li{display:table-cell;width:1%} -.nav-tabs.nav-justified > li > a{margin-bottom:0} -} -.nav-tabs.nav-justified > li > a{margin-right:0;border-radius:2px} -.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border:1px solid #dddddd} -@media (min-width:768px){.nav-tabs.nav-justified > li > a{border-bottom:1px solid #dddddd;border-radius:2px 2px 0 0} -.nav-tabs.nav-justified > .active > a,.nav-tabs.nav-justified > .active > a:hover,.nav-tabs.nav-justified > .active > a:focus{border-bottom-color:#f9f9f9} -} -.nav-pills > li{float:left} -.nav-pills > li > a{border-radius:2px} -.nav-pills > li + li{margin-left:2px} -.nav-pills > li.active > a,.nav-pills > li.active > a:hover,.nav-pills > li.active > a:focus{color:#ffffff;background-color:#5fb6f5} -.nav-stacked > li{float:none} -.nav-stacked > li + li{margin-top:2px;margin-left:0} -.nav-justified{width:100%} -.nav-justified > li{float:none} -.nav-justified > li > a{text-align:center;margin-bottom:5px} -.nav-justified > .dropdown .dropdown-menu{top:auto;left:auto} -@media (min-width:768px){.nav-justified > li{display:table-cell;width:1%} -.nav-justified > li > a{margin-bottom:0} -} -.nav-tabs-justified{border-bottom:0} -.nav-tabs-justified > li > a{margin-right:0;border-radius:2px} -.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border:1px solid #dddddd} -@media (min-width:768px){.nav-tabs-justified > li > a{border-bottom:1px solid #dddddd;border-radius:2px 2px 0 0} -.nav-tabs-justified > .active > a,.nav-tabs-justified > .active > a:hover,.nav-tabs-justified > .active > a:focus{border-bottom-color:#f9f9f9} -} -.tab-content > .tab-pane{display:none} -.tab-content > .active{display:block} -.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0} -.control-tabs{position:relative;margin-bottom:20px} -.control-tabs:last-child{margin-bottom:0} -.control-tabs:after,.control-tabs:before{display:none;position:absolute;top:50%;margin-top:-7px;height:9px;font-size:10px;color:#bbbbbb} -.control-tabs:before{left:-6px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f104"} -.control-tabs:after{right:-8px;font-family:FontAwesome;font-weight:normal;font-style:normal;text-decoration:inherit;-webkit-font-smoothing:antialiased;*margin-right:.3em;content:"\f105"} -.control-tabs.scroll-before:before{display:block} -.control-tabs.scroll-after:after{display:block} -.control-tabs.scroll-active-before:before{color:#5fb6f5} -.control-tabs.scroll-active-after:after{color:#5fb6f5} -.control-tabs:before,.control-tabs:after{top:5px;margin-top:0} -.control-tabs > ul.nav-tabs,.control-tabs > div > ul.nav-tabs,.control-tabs > div > div > ul.nav-tabs{white-space:nowrap;font-size:0;overflow:hidden;border-bottom:none} -.control-tabs > ul.nav-tabs > li,.control-tabs > div > ul.nav-tabs > li,.control-tabs > div > div > ul.nav-tabs > li{font-size:15px;float:none;display:inline-block;margin-right:20px;position:relative} -.control-tabs > ul.nav-tabs > li:last-child,.control-tabs > div > ul.nav-tabs > li:last-child,.control-tabs > div > div > ul.nav-tabs > li:last-child{margin-right:0} -.control-tabs > ul.nav-tabs > li a,.control-tabs > div > ul.nav-tabs > li a,.control-tabs > div > div > ul.nav-tabs > li a{border-left:none !important;border-top:none !important;border-right:none !important;padding:0 0 10px 0;color:#cccccc;background:#f9f9f9;font-weight:400;overflow:hidden} -.control-tabs > ul.nav-tabs > li a:hover,.control-tabs > div > ul.nav-tabs > li a:hover,.control-tabs > div > div > ul.nav-tabs > li a:hover{background-color:transparent;border-bottom-color:transparent} -.control-tabs > ul.nav-tabs > li a:before,.control-tabs > div > ul.nav-tabs > li a:before,.control-tabs > div > div > ul.nav-tabs > li a:before{font-size:14px} -.control-tabs > ul.nav-tabs > li a > span.title > span,.control-tabs > div > ul.nav-tabs > li a > span.title > span,.control-tabs > div > div > ul.nav-tabs > li a > span.title > span{max-width:150px;height:16px;margin-bottom:-4px;overflow:hidden;text-overflow:ellipsis;display:inline-block} -.control-tabs > ul.nav-tabs > li span.tab-close,.control-tabs > div > ul.nav-tabs > li span.tab-close,.control-tabs > div > div > ul.nav-tabs > li span.tab-close{display:none} -.control-tabs > ul.nav-tabs > li.active a,.control-tabs > div > ul.nav-tabs > li.active a,.control-tabs > div > div > ul.nav-tabs > li.active a{color:#405261} -.control-tabs > ul.nav-tabs > li.active:after,.control-tabs > div > ul.nav-tabs > li.active:after,.control-tabs > div > div > ul.nav-tabs > li.active:after{width:100%;height:3px;bottom:0;background:#5fb6f5} -.control-tabs > div.tab-content > div.tab-pane{padding:20px 0 0 0;display:none} -.control-tabs > div.tab-content > div.tab-pane:before,.control-tabs > div.tab-content > div.tab-pane:after{content:" ";display:table} -.control-tabs > div.tab-content > div.tab-pane:after{clear:both} -.control-tabs > div.tab-content > div.tab-pane:before,.control-tabs > div.tab-content > div.tab-pane:after{content:" ";display:table} -.control-tabs > div.tab-content > div.tab-pane:after{clear:both} -.control-tabs > div.tab-content > div.tab-pane.active{display:block} -.control-tabs > div.tab-content > div.tab-pane.active.layout-cell{display:table-cell} -.control-tabs > div.tab-content > div.tab-pane.pane-compact{padding:0} -.control-tabs > div.tab-content > div.tab-pane.pane-padded{padding:20px 20px 0 20px} -.control-tabs[data-closable] > ul.nav-tabs > li,.control-tabs[data-closable] > div > ul.nav-tabs > li,.control-tabs[data-closable] > div > div > ul.nav-tabs > li{margin-right:5px} -.control-tabs[data-closable] > ul.nav-tabs > li a,.control-tabs[data-closable] > div > ul.nav-tabs > li a,.control-tabs[data-closable] > div > div > ul.nav-tabs > li a{padding-left:20px !important;padding-right:0 !important} -.control-tabs[data-closable] > ul.nav-tabs > li span.tab-close,.control-tabs[data-closable] > div > ul.nav-tabs > li span.tab-close,.control-tabs[data-closable] > div > div > ul.nav-tabs > li span.tab-close{display:block;position:absolute;width:20px;height:20px;top:5px;left:-5px;text-align:right;font-size:12px;color:#cccccc !important;cursor:pointer} -.control-tabs[data-closable] > ul.nav-tabs > li span.tab-close i,.control-tabs[data-closable] > div > ul.nav-tabs > li span.tab-close i,.control-tabs[data-closable] > div > div > ul.nav-tabs > li span.tab-close i{display:inline-block;z-index:101;top:-7px;right:5px;position:relative} -.control-tabs[data-closable] > ul.nav-tabs > li span.tab-close:hover i,.control-tabs[data-closable] > div > ul.nav-tabs > li span.tab-close:hover i,.control-tabs[data-closable] > div > div > ul.nav-tabs > li span.tab-close:hover i{color:#d9534f} -.control-tabs[data-closable] > ul.nav-tabs > li.active span.close,.control-tabs[data-closable] > div > ul.nav-tabs > li.active span.close,.control-tabs[data-closable] > div > div > ul.nav-tabs > li.active span.close{color:#cccccc} -.control-tabs[data-closable] > ul.nav-tabs > li[data-modified] span.tab-close i,.control-tabs[data-closable] > div > ul.nav-tabs > li[data-modified] span.tab-close i,.control-tabs[data-closable] > div > div > ul.nav-tabs > li[data-modified] span.tab-close i{top:-4px} -.control-tabs[data-closable] > ul.nav-tabs > li[data-modified] span.tab-close i:before,.control-tabs[data-closable] > div > ul.nav-tabs > li[data-modified] span.tab-close i:before,.control-tabs[data-closable] > div > div > ul.nav-tabs > li[data-modified] span.tab-close i:before{content:"\f111";font-size:9px} -.control-tabs.master > ul.nav-tabs > li a,.control-tabs.master-tabs > ul.nav-tabs > li a,.control-tabs.master > div > ul.nav-tabs > li a,.control-tabs.master-tabs > div > ul.nav-tabs > li a,.control-tabs.master > div > div > ul.nav-tabs > li a,.control-tabs.master-tabs > div > div > ul.nav-tabs > li a{font-size:15px;border-bottom:transparent 4px solid;position:relative;z-index:101;line-height:100%} -.control-tabs.master > ul.nav-tabs > li.active a,.control-tabs.master-tabs > ul.nav-tabs > li.active a,.control-tabs.master > div > ul.nav-tabs > li.active a,.control-tabs.master-tabs > div > ul.nav-tabs > li.active a,.control-tabs.master > div > div > ul.nav-tabs > li.active a,.control-tabs.master-tabs > div > div > ul.nav-tabs > li.active a{border-bottom:#5fb6f5 4px solid} -.control-tabs.primary,.control-tabs.primary-tabs{margin-bottom:5px} -.control-tabs.primary > ul.nav-tabs,.control-tabs.primary-tabs > ul.nav-tabs,.control-tabs.primary > div > ul.nav-tabs,.control-tabs.primary-tabs > div > ul.nav-tabs,.control-tabs.primary > div > div > ul.nav-tabs,.control-tabs.primary-tabs > div > div > ul.nav-tabs{position:relative;margin-left:0;margin-right:0} -.control-tabs.primary > ul.nav-tabs:before,.control-tabs.primary-tabs > ul.nav-tabs:before,.control-tabs.primary > div > ul.nav-tabs:before,.control-tabs.primary-tabs > div > ul.nav-tabs:before,.control-tabs.primary > div > div > ul.nav-tabs:before,.control-tabs.primary-tabs > div > div > ul.nav-tabs:before{position:absolute;top:26px;height:1px;width:100%;content:' ';border-bottom:1px solid #d7d7d7} -.control-tabs.primary > ul.nav-tabs > li,.control-tabs.primary-tabs > ul.nav-tabs > li,.control-tabs.primary > div > ul.nav-tabs > li,.control-tabs.primary-tabs > div > ul.nav-tabs > li,.control-tabs.primary > div > div > ul.nav-tabs > li,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li{padding-right:10px;padding-left:11px;margin-right:0;margin-left:-30px;background:transparent} -.control-tabs.primary > ul.nav-tabs > li:first-child,.control-tabs.primary-tabs > ul.nav-tabs > li:first-child,.control-tabs.primary > div > ul.nav-tabs > li:first-child,.control-tabs.primary-tabs > div > ul.nav-tabs > li:first-child,.control-tabs.primary > div > div > ul.nav-tabs > li:first-child,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li:first-child{margin-left:0;padding-left:15px !important} -.control-tabs.primary > ul.nav-tabs > li a,.control-tabs.primary-tabs > ul.nav-tabs > li a,.control-tabs.primary > div > ul.nav-tabs > li a,.control-tabs.primary-tabs > div > ul.nav-tabs > li a,.control-tabs.primary > div > div > ul.nav-tabs > li a,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li a{font-size:12px;padding-bottom:3px;padding:0 16px;margin:0;position:relative;z-index:101;background:transparent;overflow:visible} -.control-tabs.primary > ul.nav-tabs > li a > span.title,.control-tabs.primary-tabs > ul.nav-tabs > li a > span.title,.control-tabs.primary > div > ul.nav-tabs > li a > span.title,.control-tabs.primary-tabs > div > ul.nav-tabs > li a > span.title,.control-tabs.primary > div > div > ul.nav-tabs > li a > span.title,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li a > span.title{position:relative;display:inline-block;padding:5px 5px 9px 5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-top:1px solid #f0f0f0;z-index:100} -.control-tabs.primary > ul.nav-tabs > li a > span.title:before,.control-tabs.primary-tabs > ul.nav-tabs > li a > span.title:before,.control-tabs.primary > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary-tabs > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary > div > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary > ul.nav-tabs > li a > span.title:after,.control-tabs.primary-tabs > ul.nav-tabs > li a > span.title:after,.control-tabs.primary > div > ul.nav-tabs > li a > span.title:after,.control-tabs.primary-tabs > div > ul.nav-tabs > li a > span.title:after,.control-tabs.primary > div > div > ul.nav-tabs > li a > span.title:after,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li a > span.title:after{content:' ';position:absolute;background:transparent url('../../../system/assets/ui/images/primary-tab-shape.png') no-repeat left -31px;width:16px;height:26px;display:block;top:-1px;z-index:100} -.control-tabs.primary > ul.nav-tabs > li a > span.title:before,.control-tabs.primary-tabs > ul.nav-tabs > li a > span.title:before,.control-tabs.primary > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary-tabs > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary > div > div > ul.nav-tabs > li a > span.title:before,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li a > span.title:before{left:-16px} -.control-tabs.primary > ul.nav-tabs > li a > span.title:after,.control-tabs.primary-tabs > ul.nav-tabs > li a > span.title:after,.control-tabs.primary > div > ul.nav-tabs > li a > span.title:after,.control-tabs.primary-tabs > div > ul.nav-tabs > li a > span.title:after,.control-tabs.primary > div > div > ul.nav-tabs > li a > span.title:after,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li a > span.title:after{right:-16px;background-position:-61px -31px} -.control-tabs.primary > ul.nav-tabs > li:last-child,.control-tabs.primary-tabs > ul.nav-tabs > li:last-child,.control-tabs.primary > div > ul.nav-tabs > li:last-child,.control-tabs.primary-tabs > div > ul.nav-tabs > li:last-child,.control-tabs.primary > div > div > ul.nav-tabs > li:last-child,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li:last-child{background-image:none;margin-right:0;padding-right:5px} -.control-tabs.primary > ul.nav-tabs > li:first-child,.control-tabs.primary-tabs > ul.nav-tabs > li:first-child,.control-tabs.primary > div > ul.nav-tabs > li:first-child,.control-tabs.primary-tabs > div > ul.nav-tabs > li:first-child,.control-tabs.primary > div > div > ul.nav-tabs > li:first-child,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li:first-child{padding-left:0} -.control-tabs.primary > ul.nav-tabs > li.active a:before,.control-tabs.primary-tabs > ul.nav-tabs > li.active a:before,.control-tabs.primary > div > ul.nav-tabs > li.active a:before,.control-tabs.primary-tabs > div > ul.nav-tabs > li.active a:before,.control-tabs.primary > div > div > ul.nav-tabs > li.active a:before,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li.active a:before{position:absolute;top:26px;height:1px;right:2px;left:0;content:' ';background-color:#f9f9f9} -.control-tabs.primary > ul.nav-tabs > li.active a,.control-tabs.primary-tabs > ul.nav-tabs > li.active a,.control-tabs.primary > div > ul.nav-tabs > li.active a,.control-tabs.primary-tabs > div > ul.nav-tabs > li.active a,.control-tabs.primary > div > div > ul.nav-tabs > li.active a,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li.active a{z-index:107} -.control-tabs.primary > ul.nav-tabs > li.active a > span.title,.control-tabs.primary-tabs > ul.nav-tabs > li.active a > span.title,.control-tabs.primary > div > ul.nav-tabs > li.active a > span.title,.control-tabs.primary-tabs > div > ul.nav-tabs > li.active a > span.title,.control-tabs.primary > div > div > ul.nav-tabs > li.active a > span.title,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li.active a > span.title{z-index:105;border-top-color:#d6d6d6} -.control-tabs.primary > ul.nav-tabs > li.active a > span.title:before,.control-tabs.primary-tabs > ul.nav-tabs > li.active a > span.title:before,.control-tabs.primary > div > ul.nav-tabs > li.active a > span.title:before,.control-tabs.primary-tabs > div > ul.nav-tabs > li.active a > span.title:before,.control-tabs.primary > div > div > ul.nav-tabs > li.active a > span.title:before,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li.active a > span.title:before{background-position:left 0;z-index:107} -.control-tabs.primary > ul.nav-tabs > li.active a > span.title:after,.control-tabs.primary-tabs > ul.nav-tabs > li.active a > span.title:after,.control-tabs.primary > div > ul.nav-tabs > li.active a > span.title:after,.control-tabs.primary-tabs > div > ul.nav-tabs > li.active a > span.title:after,.control-tabs.primary > div > div > ul.nav-tabs > li.active a > span.title:after,.control-tabs.primary-tabs > div > div > ul.nav-tabs > li.active a > span.title:after{background-position:-61px 0;z-index:107} -.control-tabs.primary.tabs-inset > ul.nav-tabs,.control-tabs.primary-tabs.tabs-inset > ul.nav-tabs,.control-tabs.primary.tabs-inset > div > ul.nav-tabs,.control-tabs.primary-tabs.tabs-inset > div > ul.nav-tabs,.control-tabs.primary.tabs-inset > div > div > ul.nav-tabs,.control-tabs.primary-tabs.tabs-inset > div > div > ul.nav-tabs{margin-left:-20px;margin-right:-20px} -.control-tabs.secondary > ul.nav-tabs > li,.control-tabs.secondary-tabs > ul.nav-tabs > li,.control-tabs.secondary > div > ul.nav-tabs > li,.control-tabs.secondary-tabs > div > ul.nav-tabs > li,.control-tabs.secondary > div > div > ul.nav-tabs > li,.control-tabs.secondary-tabs > div > div > ul.nav-tabs > li{padding-right:10px;margin-right:10px;border-right:1px solid #d7d7d7} -.control-tabs.secondary > ul.nav-tabs > li a,.control-tabs.secondary-tabs > ul.nav-tabs > li a,.control-tabs.secondary > div > ul.nav-tabs > li a,.control-tabs.secondary-tabs > div > ul.nav-tabs > li a,.control-tabs.secondary > div > div > ul.nav-tabs > li a,.control-tabs.secondary-tabs > div > div > ul.nav-tabs > li a{font-size:12px;font-weight:600;padding-bottom:0} -.control-tabs.secondary > ul.nav-tabs > li:last-child,.control-tabs.secondary-tabs > ul.nav-tabs > li:last-child,.control-tabs.secondary > div > ul.nav-tabs > li:last-child,.control-tabs.secondary-tabs > div > ul.nav-tabs > li:last-child,.control-tabs.secondary > div > div > ul.nav-tabs > li:last-child,.control-tabs.secondary-tabs > div > div > ul.nav-tabs > li:last-child{border-right:none;margin-right:0;padding-right:0} -.control-tabs.content-tabs > ul.nav-tabs{position:relative} -.control-tabs.content-tabs > ul.nav-tabs:before{content:' ';position:absolute;bottom:0;left:0;width:100%;height:1px;background:#e3e5e7} -.control-tabs.content-tabs > ul.nav-tabs li{margin-right:0;border-top:1px solid #e3e5e7;border-right:1px solid #e3e5e7} -.control-tabs.content-tabs > ul.nav-tabs li a{font-size:12px;padding:17px 20px;margin:0;border:none;text-transform:uppercase;background:transparent} -.control-tabs.content-tabs > ul.nav-tabs li:first-child{border-left:1px solid #e3e5e7} -.control-tabs.content-tabs > ul.nav-tabs li:last-child{border-right:1px solid #e3e5e7} -.control-tabs.content-tabs > ul.nav-tabs li.active{background:#ffffff} -.control-tabs.content-tabs > ul.nav-tabs li.active a{font-weight:600} -.control-tabs.content-tabs > .tab-content > .tab-pane{padding-top:0} -.control-tabs.content-tabs > .tab-content > .tab-pane div.list-header,.control-tabs.content-tabs > .tab-content > .tab-pane div.padded-container,.control-tabs.content-tabs > .tab-content > .tab-pane div.toolbar-widget{background:#ffffff;padding-top:20px} -.control-tabs.content-tabs.tabs-inset > ul.nav-tabs,.control-tabs.content-tabs.tabs-inset > div > ul.nav-tabs,.control-tabs.content-tabs.tabs-inset > div > div > ul.nav-tabs{margin-left:-20px;margin-right:-20px} -.control-tabs.content-tabs.tabs-inset > ul.nav-tabs li:first-child,.control-tabs.content-tabs.tabs-inset > div > ul.nav-tabs li:first-child,.control-tabs.content-tabs.tabs-inset > div > div > ul.nav-tabs li:first-child{margin-left:20px} -.control-tabs.content-tabs.tabs-offset > ul.nav-tabs li:first-child{margin-left:20px} -.control-tabs.content-tabs.tabs-flush > ul.nav-tabs li{border-top:none} -.control-tabs.content-tabs.tabs-flush > ul.nav-tabs li:last-child{border-right:1px solid transparent} -.control-tabs.content-tabs.tabs-flush > ul.nav-tabs li:first-child{border-left:1px solid transparent} -.control-tabs.content-tabs.tabs-flush > ul.nav-tabs li.active:last-child{border-right:1px solid #e3e5e7} -.hide-tabs .control-tabs ul.nav-tabs{display:none} -.hide-tabs .control-tabs > div.tab-content > div.tab-pane{padding-top:0} -.form-sidebar .control-tabs.secondary > div > ul.nav-tabs > li a{background:transparent} @font-face{font-family:'Open Sans';src:url('../font/OpenSans-Light.eot');src:url('../font/OpenSans-Light.eot?#iefix') format('embedded-opentype'),url('../font/OpenSans-Light.svg#open_sanslight') format('svg'),url('../font/OpenSans-Light.woff') format('woff'),url('../font/OpenSans-Light.ttf') format('truetype');font-style:normal;font-weight:300} @font-face{font-family:'Open Sans';src:url('../font/OpenSans-Regular.eot');src:url('../font/OpenSans-Regular.eot?#iefix') format('embedded-opentype'),url('../font/OpenSans-Regular.svg#open_sansregular') format('svg'),url('../font/OpenSans-Regular.woff') format('woff'),url('../font/OpenSans-Regular.ttf') format('truetype');font-style:normal;font-weight:400} @font-face{font-family:'Open Sans';src:url('../font/OpenSans-Semibold.eot');src:url('../font/OpenSans-Semibold.eot?#iefix') format('embedded-opentype'),url('../font/OpenSans-Semibold.svg#open_sanssemibold') format('svg'),url('../font/OpenSans-Semibold.woff') format('woff'),url('../font/OpenSans-Semibold.ttf') format('truetype');font-style:normal;font-weight:600} @@ -3061,7 +563,7 @@ body.dragging,body.dragging *{cursor:move !important} body.loading,body.loading *{cursor:wait !important} body.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default !important} html,body{height:100%; } -body{webkit-font-smoothing:antialiased;background:#f9f9f9} +body{webkit-font-smoothing:antialiased;font-family:'Open Sans',Arial,sans-serif;background:#f9f9f9} #layout-canvas{min-height:100%;height:100%} .control-tabs.primary-tabs > ul.nav-tabs,.control-tabs.primary-tabs > div > ul.nav-tabs,.control-tabs.primary-tabs > div > div > ul.nav-tabs{margin-left:-20px;margin-right:-20px} .control-tabs.primary-tabs.tabs-no-inset > ul.nav-tabs,.control-tabs.primary-tabs.tabs-no-inset > div > ul.nav-tabs,.control-tabs.primary-tabs.tabs-no-inset > div > div > ul.nav-tabs{margin-left:0;margin-right:0} @@ -3119,7 +621,7 @@ body.slim-container .layout.layout-container,body.slim-container .layout .layout .layout.responsive-sidebar > .layout-cell:last-child .layout-absolute{position:static} } body.mainmenu-open{overflow:hidden} -nav#layout-mainmenu.navbar{background-color:#111111;padding:0 0 0 20px;line-height:0;white-space:nowrap} +nav#layout-mainmenu.navbar{background-color:#111111;height:auto;padding:0 0 0 20px;line-height:0;white-space:nowrap} nav#layout-mainmenu.navbar a{text-decoration:none} nav#layout-mainmenu.navbar a:focus{background:transparent} nav#layout-mainmenu.navbar ul{margin:0;padding:0;list-style:none;float:left;font-weight:600;white-space:nowrap;overflow:hidden} @@ -3236,7 +738,7 @@ body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizonta body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form input{vertical-align:top;margin-right:9px;display:inline-block;border:none;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px} body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form input.width-1{width:160px} body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form input.width-2{width:323px} -body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form button{background:#1795f1;text-align:center;font-size:13px;font-weight:600;height:40px;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} +body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form button{background:#0181b9;text-align:center;font-size:13px;font-weight:600;height:40px;vertical-align:top;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box} body.outer .layout > .layout-row > .layout-cell .outer-form-container .horizontal-form button.login-button{display:inline-block;width:98px} body.outer .layout > .layout-row > .layout-cell .outer-form-container .forgot-password{margin-top:30px;font-size:13px;top:8px} body.outer .layout > .layout-row > .layout-cell .outer-form-container .forgot-password a{color:rgba(255,255,255,0.44)} @@ -3328,8 +830,6 @@ html.csstransitions body.outer.preload .outer-form-container{-webkit-transform:s .fancy-layout .form-tabless-fields{position:relative;background:#e67e22;padding:18px 23px 0 23px;-webkit-transition:all 0.5s;transition:all 0.5s} .fancy-layout .form-tabless-fields:before,.fancy-layout .form-tabless-fields:after{content:" ";display:table} .fancy-layout .form-tabless-fields:after{clear:both} -.fancy-layout .form-tabless-fields:before,.fancy-layout .form-tabless-fields:after{content:" ";display:table} -.fancy-layout .form-tabless-fields:after{clear:both} .fancy-layout .form-tabless-fields label{text-transform:uppercase;color:rgba(255,255,255,0.5);margin-bottom:0} .fancy-layout .form-tabless-fields input[type=text]{background:transparent;border:none;color:#ffffff;font-size:35px;font-weight:100;height:auto;padding:0} .fancy-layout .form-tabless-fields input[type=text]::-moz-placeholder{color:#f4c69e;opacity:1} diff --git a/modules/backend/assets/js/october-min.js b/modules/backend/assets/js/october-min.js index 8af52ee68..28ca8f9eb 100644 --- a/modules/backend/assets/js/october-min.js +++ b/modules/backend/assets/js/october-min.js @@ -698,3956 +698,24 @@ if(Touch.support)$trk.bind('touchstart.jcrop',Touch.newSelection);$hdl_holder.hi else{if(this.tagName=='IMG') $.Jcrop.Loader(this,function(){$(this).css({display:'block',visibility:'hidden'});api=$.Jcrop(this,options);if($.isFunction(callback))callback.call(api);});else{$(this).css({display:'block',visibility:'hidden'});api=$.Jcrop(this,options);if($.isFunction(callback))callback.call(api);}}});return this;};$.Jcrop.Loader=function(imgobj,success,error){var $img=$(imgobj),img=$img[0];function completeCheck(){if(img.complete){$img.unbind('.jcloader');if($.isFunction(success))success.call(img);} else window.setTimeout(completeCheck,50);} -$img.bind('load.jcloader',completeCheck).bind('error.jcloader',function(e){$img.unbind('.jcloader');if($.isFunction(error))error.call(img);});if(img.complete&&$.isFunction(success)){$img.unbind('.jcloader');success.call(img);}};$.Jcrop.defaults={allowSelect:true,allowMove:true,allowResize:true,trackDocument:true,baseClass:'jcrop',addClass:null,bgColor:'black',bgOpacity:0.6,bgFade:false,borderOpacity:0.4,handleOpacity:0.5,handleSize:null,aspectRatio:0,keySupport:true,createHandles:['n','s','e','w','nw','ne','se','sw'],createDragbars:['n','s','e','w'],createBorders:['n','s','e','w'],drawBorders:true,dragEdges:true,fixedSupport:true,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}};}(jQuery));+function($){"use strict";if($.oc===undefined) -$.oc={} -if($.oc.foundation===undefined) -$.oc.foundation={} -$.oc.foundation._proxyCounter=0 -var Base=function(){this.proxiedMethods={}} -Base.prototype.dispose=function() -{for(var key in this.proxiedMethods){this.proxiedMethods[key]=null} -this.proxiedMethods=null} -Base.prototype.proxy=function(method){if(method.ocProxyId===undefined){$.oc.foundation._proxyCounter++ -method.ocProxyId=$.oc.foundation._proxyCounter} -if(this.proxiedMethods[method.ocProxyId]!==undefined) -return this.proxiedMethods[method.ocProxyId] -this.proxiedMethods[method.ocProxyId]=method.bind(this) -return this.proxiedMethods[method.ocProxyId]} -$.oc.foundation.base=Base;}(window.jQuery);+function($){"use strict";if($.oc===undefined) -$.oc={} -if($.oc.foundation===undefined) -$.oc.foundation={} -var Element={hasClass:function(el,className){if(el.classList) -return el.classList.contains(className);return new RegExp('(^| )'+className+'( |$)','gi').test(el.className);},addClass:function(el,className){if(this.hasClass(el,className)) -return -if(el.classList) -el.classList.add(className);else -el.className+=' '+className;},removeClass:function(el,className){if(el.classList) -el.classList.remove(className);else -el.className=el.className.replace(new RegExp('(^|\\b)'+className.split(' ').join('|')+'(\\b|$)','gi'),' ');},absolutePosition:function(element,ignoreScrolling){var top=ignoreScrolling===true?0:document.body.scrollTop,left=0 -do{top+=element.offsetTop||0;if(ignoreScrolling!==true) -top-=element.scrollTop||0 -left+=element.offsetLeft||0 -element=element.offsetParent}while(element) -return{top:top,left:left}},getCaretPosition:function(input){if(document.selection){var selection=document.selection.createRange() -selection.moveStart('character',-input.value.length) -return selection.text.length} -if(input.selectionStart!==undefined) -return input.selectionStart -return 0},setCaretPosition:function(input,position){if(document.selection){var range=input.createTextRange() -setTimeout(function(){range.collapse(true) -range.moveStart("character",position) -range.moveEnd("character",0) -range.select() -range=null -input=null},0)} -if(input.selectionStart!==undefined){setTimeout(function(){input.selectionStart=position -input.selectionEnd=position -input=null},0)}}} -$.oc.foundation.element=Element;}(window.jQuery);+function($){"use strict";if($.oc===undefined) -$.oc={} -if($.oc.foundation===undefined) -$.oc.foundation={} -var Event={getTarget:function(ev,tag){var target=ev.target?ev.target:ev.srcElement -if(tag===undefined) -return target -var tagName=target.tagName -while(tagName!=tag){target=target.parentNode -if(!target) -return null -tagName=target.tagName} -return target},stop:function(ev){if(ev.stopPropagation) -ev.stopPropagation() -else -ev.cancelBubble=true -if(ev.preventDefault) -ev.preventDefault() -else -ev.returnValue=false},pageCoordinates:function(ev){if(ev.pageX||ev.pageY){return{x:ev.pageX,y:ev.pageY}} -else if(ev.clientX||ev.clientY){return{x:(ev.clientX+document.body.scrollLeft+document.documentElement.scrollLeft),y:(ev.clientY+document.body.scrollTop+document.documentElement.scrollTop)}} -return{x:0,y:0}}} -$.oc.foundation.event=Event;}(window.jQuery);+function($){"use strict";if($.oc===undefined) -$.oc={} -if($.oc.foundation===undefined) -$.oc.foundation={} -var ControlUtils={markDisposable:function(el){el.setAttribute('data-disposable','')},disposeControls:function(container){var controls=container.querySelectorAll('[data-disposable]') -for(var i=0,len=controls.length;i p.flash-message').remove() -if($element.length==0) -$element=$('

').addClass(options.class).html(options.text) -$element.addClass('flash-message fade') -$element.attr('data-control',null) -$element.append('') -$element.on('click','button',remove) -$element.on('click',remove) -$(document.body).append($element) -setTimeout(function(){$element.addClass('in')},1) -var timer=window.setTimeout(remove,options.interval*1000) -function removeElement(){$element.remove()} -function remove(){window.clearInterval(timer) -$element.removeClass('in') -$.support.transition&&$element.hasClass('fade')?$element.one($.support.transition.end,removeElement).emulateTransitionEnd(500):removeElement()}} -FlashMessage.DEFAULTS={class:'success',text:'Default text',interval:2} +$img.bind('load.jcloader',completeCheck).bind('error.jcloader',function(e){$img.unbind('.jcloader');if($.isFunction(error))error.call(img);});if(img.complete&&$.isFunction(success)){$img.unbind('.jcloader');success.call(img);}};$.Jcrop.defaults={allowSelect:true,allowMove:true,allowResize:true,trackDocument:true,baseClass:'jcrop',addClass:null,bgColor:'black',bgOpacity:0.6,bgFade:false,borderOpacity:0.4,handleOpacity:0.5,handleSize:null,aspectRatio:0,keySupport:true,createHandles:['n','s','e','w','nw','ne','se','sw'],createDragbars:['n','s','e','w'],createBorders:['n','s','e','w'],drawBorders:true,dragEdges:true,fixedSupport:true,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}};}(jQuery));!function(){var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;(function(){function S(a){function d(e){var b=e.charCodeAt(0);if(b!==92)return b;var a=e.charAt(1);return(b=r[a])?b:"0"<=a&&a<="7"?parseInt(e.substring(1),8):a==="u"||a==="x"?parseInt(e.substring(2),16):e.charCodeAt(1)}function g(e){if(e<32)return(e<16?"\\x0":"\\x")+e.toString(16);e=String.fromCharCode(e);return e==="\\"||e==="-"||e==="]"||e==="^"?"\\"+e:e}function b(e){var b=e.substring(1,e.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),e=[],a=b[0]==="^",c=["["];a&&c.push("^");for(var a=a?1:0,f=b.length;a122||(l<65||h>90||e.push([Math.max(65,h)|32,Math.min(l,90)|32]),l<97||h>122||e.push([Math.max(97,h)&-33,Math.min(l,122)&-33]))}}e.sort(function(e,a){return e[0]-a[0]||a[1]-e[1]});b=[];f=[];for(a=0;ah[0]&&(h[1]+1>h[0]&&c.push("-"),c.push(g(h[1])));c.push("]");return c.join("")}function s(e){for(var a=e.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),c=a.length,d=[],f=0,h=0;f=2&&e==="["?a[f]=b(l):e!=="\\"&&(a[f]=l.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return a.join("")}for(var x=0,m=!1,j=!1,k=0,c=a.length;k=5&&"lang-"===w.substring(0,5))&&!(t&&typeof t[1]==="string"))f=!1,w="src";f||(r[z]=w)}h=c;c+=z.length;if(f){f=t[1];var l=z.indexOf(f),B=l+f.length;t[2]&&(B=z.length-t[2].length,l=B-f.length);w=w.substring(5);H(j+h,z.substring(0,l),g,k);H(j+h+l,f,I(w,f),k);H(j+h+B,z.substring(B),g,k)}else k.push(j+h,w)}a.g=k}var b={},s;(function(){for(var g=a.concat(d),j=[],k={},c=0,i=g.length;c=0;)b[n.charAt(e)]=r;r=r[1];n=""+r;k.hasOwnProperty(n)||(j.push(r),k[n]=q)}j.push(/[\S\s]/);s=S(j)})();var x=d.length;return g}function v(a){var d=[],g=[];a.tripleQuotedStrings?d.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?d.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,q,"'\"`"]):d.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&g.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var b=a.hashComments;b&&(a.cStyleComments?(b>1?d.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):d.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),g.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,q])):d.push(["com",/^#[^\n\r]*/,q,"#"]));a.cStyleComments&&(g.push(["com",/^\/\/[^\n\r]*/,q]),g.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));if(b=a.regexLiterals){var s=(b=b>1?"":"\n\r")?".":"[\\S\\s]";g.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*("+("/(?=[^/*"+b+"])(?:[^/\\x5B\\x5C"+b+"]|\\x5C"+s+"|\\x5B(?:[^\\x5C\\x5D"+b+"]|\\x5C"+ +s+")*(?:\\x5D|$))+/")+")")])}(b=a.types)&&g.push(["typ",b]);b=(""+a.keywords).replace(/^ | $/g,"");b.length&&g.push(["kwd",RegExp("^(?:"+b.replace(/[\s,]+/g,"|")+")\\b"),q]);d.push(["pln",/^\s+/,q," \r\n\t\u00a0"]);b="^.[^\\s\\w.$@'\"`/\\\\]*";a.regexLiterals&&(b+="(?!s*/)");g.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",RegExp(b),q]);return C(d,g)}function J(a,d,g){function b(a){var c=a.nodeType;if(c==1&&!x.test(a.className))if("br"===a.nodeName)s(a),a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)b(a);else if((c==3||c==4)&&g){var d=a.nodeValue,i=d.match(m);if(i)c=d.substring(0,i.index),a.nodeValue=c,(d=d.substring(i.index+i[0].length))&&a.parentNode.insertBefore(j.createTextNode(d),a.nextSibling),s(a),c||a.parentNode.removeChild(a)}}function s(a){function b(a,c){var d=c?a.cloneNode(!1):a,e=a.parentNode;if(e){var e=b(e,1),g=a.nextSibling;e.appendChild(d);for(var i=g;i;i=g)g=i.nextSibling,e.appendChild(i)}return d}for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),d;(d=a.parentNode)&&d.nodeType===1;)a=d;c.push(a)}for(var x=/(?:^|\s)nocode(?:\s|$)/,m=/\r\n?|\n/,j=a.ownerDocument,k=j.createElement("li");a.firstChild;)k.appendChild(a.firstChild);for(var c=[k],i=0;i=0;){var b=d[g];F.hasOwnProperty(b)?D.console&&console.warn("cannot override language handler %s",b):F[b]=a}}function I(a,d){if(!a||!F.hasOwnProperty(a))a=/^\s*=l&&(b+=2);g>=B&&(r+=2)}}finally{if(f)f.style.display=h}}catch(u){D.console&&console.log(u&&u.stack||u)}}var D=window,y=["break,continue,do,else,for,if,return,while"],E=[[y,"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],M=[E,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],N=[E,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],O=[N,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],E=[E,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],P=[y,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],Q=[y,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],W=[y,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],y=[y,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],R=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,V=/\S/,X=v({keywords:[M,O,E,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",P,Q,y],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),F={};p(X,["default-code"]);p(C([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);p(C([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);p(C([],[["atv",/^[\S\s]+/]]),["uq.val"]);p(v({keywords:M,hashComments:!0,cStyleComments:!0,types:R}),["c","cc","cpp","cxx","cyc","m"]);p(v({keywords:"null,true,false"}),["json"]);p(v({keywords:O,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:R}),["cs"]);p(v({keywords:N,cStyleComments:!0}),["java"]);p(v({keywords:y,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]);p(v({keywords:P,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]);p(v({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]);p(v({keywords:Q,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]);p(v({keywords:E,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]);p(v({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);p(v({keywords:W,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]);p(C([],[["str",/^[\S\s]+/]]),["regex"]);var Y=D.PR={createSimpleLexer:C,registerLangHandler:p,sourceDecorator:v,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:D.prettyPrintOne=function(a,d,g){var b=document.createElement("div");b.innerHTML="

"+a+"
";b=b.firstChild;g&&J(b,g,!0);K({h:d,j:g,c:b,i:1});return b.innerHTML},prettyPrint:D.prettyPrint=function(a,d){function g(){for(var b=D.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity;i',rule,''].join('');div.id=mod;(body?div:fakeBody).innerHTML+=style;fakeBody.appendChild(div);if(!body){fakeBody.style.background='';fakeBody.style.overflow='hidden';docOverflow=docElement.style.overflow;docElement.style.overflow='hidden';docElement.appendChild(fakeBody);} -ret=callback(div,rule);if(!body){fakeBody.parentNode.removeChild(fakeBody);docElement.style.overflow=docOverflow;}else{div.parentNode.removeChild(div);} -return!!ret;},testMediaQuery=function(mq){var matchMedia=window.matchMedia||window.msMatchMedia;if(matchMedia){return matchMedia(mq)&&matchMedia(mq).matches||false;} -var bool;injectElementWithStyles('@media '+mq+' { #'+mod+' { position: absolute; } }',function(node){bool=(window.getComputedStyle?getComputedStyle(node,null):node.currentStyle)['position']=='absolute';});return bool;},isEventSupported=(function(){var TAGNAMES={'select':'input','change':'input','submit':'form','reset':'form','error':'img','load':'img','abort':'img'};function isEventSupported(eventName,element){element=element||document.createElement(TAGNAMES[eventName]||'div');eventName='on'+eventName;var isSupported=eventName in element;if(!isSupported){if(!element.setAttribute){element=document.createElement('div');} -if(element.setAttribute&&element.removeAttribute){element.setAttribute(eventName,'');isSupported=is(element[eventName],'function');if(!is(element[eventName],'undefined')){element[eventName]=undefined;} -element.removeAttribute(eventName);}} -element=null;return isSupported;} -return isEventSupported;})(),_hasOwnProperty=({}).hasOwnProperty,hasOwnProp;if(!is(_hasOwnProperty,'undefined')&&!is(_hasOwnProperty.call,'undefined')){hasOwnProp=function(object,property){return _hasOwnProperty.call(object,property);};} -else{hasOwnProp=function(object,property){return((property in object)&&is(object.constructor.prototype[property],'undefined'));};} -if(!Function.prototype.bind){Function.prototype.bind=function bind(that){var target=this;if(typeof target!="function"){throw new TypeError();} -var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var F=function(){};F.prototype=target.prototype;var self=new F();var result=target.apply(self,args.concat(slice.call(arguments)));if(Object(result)===result){return result;} -return self;}else{return target.apply(that,args.concat(slice.call(arguments)));}};return bound;};} -function setCss(str){mStyle.cssText=str;} -function setCssAll(str1,str2){return setCss(prefixes.join(str1+';')+(str2||''));} -function is(obj,type){return typeof obj===type;} -function contains(str,substr){return!!~(''+str).indexOf(substr);} -function testProps(props,prefixed){for(var i in props){var prop=props[i];if(!contains(prop,"-")&&mStyle[prop]!==undefined){return prefixed=='pfx'?prop:true;}} -return false;} -function testDOMProps(props,obj,elem){for(var i in props){var item=obj[props[i]];if(item!==undefined){if(elem===false)return props[i];if(is(item,'function')){return item.bind(elem||obj);} -return item;}} -return false;} -function testPropsAll(prop,prefixed,elem){var ucProp=prop.charAt(0).toUpperCase()+prop.slice(1),props=(prop+' '+cssomPrefixes.join(ucProp+' ')+ucProp).split(' ');if(is(prefixed,"string")||is(prefixed,"undefined")){return testProps(props,prefixed);}else{props=(prop+' '+(domPrefixes).join(ucProp+' ')+ucProp).split(' ');return testDOMProps(props,prefixed,elem);}}tests['flexbox']=function(){return testPropsAll('flexWrap');};tests['flexboxlegacy']=function(){return testPropsAll('boxDirection');};tests['canvas']=function(){var elem=document.createElement('canvas');return!!(elem.getContext&&elem.getContext('2d'));};tests['canvastext']=function(){return!!(Modernizr['canvas']&&is(document.createElement('canvas').getContext('2d').fillText,'function'));};tests['webgl']=function(){return!!window.WebGLRenderingContext;};tests['touch']=function(){var bool;if(('ontouchstart'in window)||window.DocumentTouch&&document instanceof DocumentTouch){bool=true;}else{injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''),function(node){bool=node.offsetTop===9;});} -return bool;};tests['geolocation']=function(){return'geolocation'in navigator;};tests['postmessage']=function(){return!!window.postMessage;};tests['websqldatabase']=function(){return!!window.openDatabase;};tests['indexedDB']=function(){return!!testPropsAll("indexedDB",window);};tests['hashchange']=function(){return isEventSupported('hashchange',window)&&(document.documentMode===undefined||document.documentMode>7);};tests['history']=function(){return!!(window.history&&history.pushState);};tests['draganddrop']=function(){var div=document.createElement('div');return('draggable'in div)||('ondragstart'in div&&'ondrop'in div);};tests['websockets']=function(){return'WebSocket'in window||'MozWebSocket'in window;};tests['rgba']=function(){setCss('background-color:rgba(150,255,150,.5)');return contains(mStyle.backgroundColor,'rgba');};tests['hsla']=function(){setCss('background-color:hsla(120,40%,100%,.5)');return contains(mStyle.backgroundColor,'rgba')||contains(mStyle.backgroundColor,'hsla');};tests['multiplebgs']=function(){setCss('background:url(https://),url(https://),red url(https://)');return(/(url\s*\(.*?){3}/).test(mStyle.background);};tests['backgroundsize']=function(){return testPropsAll('backgroundSize');};tests['borderimage']=function(){return testPropsAll('borderImage');};tests['borderradius']=function(){return testPropsAll('borderRadius');};tests['boxshadow']=function(){return testPropsAll('boxShadow');};tests['textshadow']=function(){return document.createElement('div').style.textShadow==='';};tests['opacity']=function(){setCssAll('opacity:.55');return(/^0.55$/).test(mStyle.opacity);};tests['cssanimations']=function(){return testPropsAll('animationName');};tests['csscolumns']=function(){return testPropsAll('columnCount');};tests['cssgradients']=function(){var str1='background-image:',str2='gradient(linear,left top,right bottom,from(#9f9),to(white));',str3='linear-gradient(left top,#9f9, white);';setCss((str1+'-webkit- '.split(' ').join(str2+str1)+ -prefixes.join(str3+str1)).slice(0,-str1.length));return contains(mStyle.backgroundImage,'gradient');};tests['cssreflections']=function(){return testPropsAll('boxReflect');};tests['csstransforms']=function(){return!!testPropsAll('transform');};tests['csstransforms3d']=function(){var ret=!!testPropsAll('perspective');if(ret&&'webkitPerspective'in docElement.style){injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}',function(node,rule){ret=node.offsetLeft===9&&node.offsetHeight===3;});} -return ret;};tests['csstransitions']=function(){return testPropsAll('transition');};tests['fontface']=function(){var bool;injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}',function(node,rule){var style=document.getElementById('smodernizr'),sheet=style.sheet||style.styleSheet,cssText=sheet?(sheet.cssRules&&sheet.cssRules[0]?sheet.cssRules[0].cssText:sheet.cssText||''):'';bool=/src/i.test(cssText)&&cssText.indexOf(rule.split(' ')[0])===0;});return bool;};tests['generatedcontent']=function(){var bool;injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''),function(node){bool=node.offsetHeight>=3;});return bool;};tests['video']=function(){var elem=document.createElement('video'),bool=false;try{if(bool=!!elem.canPlayType){bool=new Boolean(bool);bool.ogg=elem.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,'');bool.h264=elem.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,'');bool.webm=elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');}}catch(e){} -return bool;};tests['audio']=function(){var elem=document.createElement('audio'),bool=false;try{if(bool=!!elem.canPlayType){bool=new Boolean(bool);bool.ogg=elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');bool.mp3=elem.canPlayType('audio/mpeg;').replace(/^no$/,'');bool.wav=elem.canPlayType('audio/wav; codecs="1"').replace(/^no$/,'');bool.m4a=(elem.canPlayType('audio/x-m4a;')||elem.canPlayType('audio/aac;')).replace(/^no$/,'');}}catch(e){} -return bool;};tests['localstorage']=function(){try{localStorage.setItem(mod,mod);localStorage.removeItem(mod);return true;}catch(e){return false;}};tests['sessionstorage']=function(){try{sessionStorage.setItem(mod,mod);sessionStorage.removeItem(mod);return true;}catch(e){return false;}};tests['webworkers']=function(){return!!window.Worker;};tests['applicationcache']=function(){return!!window.applicationCache;};tests['svg']=function(){return!!document.createElementNS&&!!document.createElementNS(ns.svg,'svg').createSVGRect;};tests['inlinesvg']=function(){var div=document.createElement('div');div.innerHTML='';return(div.firstChild&&div.firstChild.namespaceURI)==ns.svg;};tests['smil']=function(){return!!document.createElementNS&&/SVGAnimate/.test(toString.call(document.createElementNS(ns.svg,'animate')));};tests['svgclippaths']=function(){return!!document.createElementNS&&/SVGClipPath/.test(toString.call(document.createElementNS(ns.svg,'clipPath')));};function webforms(){Modernizr['input']=(function(props){for(var i=0,len=props.length;i';supportsHtml5Styles=('hidden'in a);supportsUnknownElements=a.childNodes.length==1||(function(){(document.createElement)('a');var frag=document.createDocumentFragment();return(typeof frag.cloneNode=='undefined'||typeof frag.createDocumentFragment=='undefined'||typeof frag.createElement=='undefined');}());}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true;}}());function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement('p'),parent=ownerDocument.getElementsByTagName('head')[0]||ownerDocument.documentElement;p.innerHTML='x';return parent.insertBefore(p.lastChild,parent.firstChild);} -function getElements(){var elements=html5.elements;return typeof elements=='string'?elements.split(' '):elements;} -function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data;} -return data;} -function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document;} -if(supportsUnknownElements){return ownerDocument.createElement(nodeName);} -if(!data){data=getExpandoData(ownerDocument);} -var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode();}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode();}else{node=data.createElem(nodeName);} -return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node;} -function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document;} -if(supportsUnknownElements){return ownerDocument.createDocumentFragment();} -data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i":">",'"':'"',"'":''',"/":'/'};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(s){return entityMap[s];});} -var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template) -return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length) -delete tokens[spaces.pop()];}else{spaces=[];} -hasTag=false;nonSpace=false;} -var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tags){if(typeof tags==='string') -tags=tags.split(spaceRe,2);if(!isArray(tags)||tags.length!==2) -throw new Error('Invalid tags: '+tags);openingTagRe=new RegExp(escapeRegExp(tags[0])+'\\s*');closingTagRe=new RegExp('\\s*'+escapeRegExp(tags[1]));closingCurlyRe=new RegExp('\\s*'+escapeRegExp('}'+tags[1]));} -compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token);}} -return nestedTokens;} -function Scanner(string){this.string=string;this.tail=string;this.pos=0;} -Scanner.prototype.eos=function(){return this.tail==="";};Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||match.index!==0) -return'';var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string;};Scanner.prototype.scanUntil=function(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index);} -this.pos+=match.length;return match;};function Context(view,parentContext){this.view=view;this.cache={'.':this.view};this.parent=parentContext;} -Context.prototype.push=function(view){return new Context(view,this);};Context.prototype.lookup=function(name){var cache=this.cache;var value;if(name in cache){value=cache[name];}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf('.')>0){value=context.view;names=name.split('.');index=0;while(value!=null&&index')value=this._renderPartial(token,context,partials,originalTemplate);else if(symbol==='&')value=this._unescapedValue(token,context);else if(symbol==='name')value=this._escapedValue(token,context);else if(symbol==='text')value=this._rawValue(token);if(value!==undefined) -buffer+=value;} -return buffer;};Writer.prototype._renderSection=function(token,context,partials,originalTemplate){var self=this;var buffer='';var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials);} -if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;j').addClass('control-popover') -if(this.options.containerClass) -this.$container.addClass(this.options.containerClass) -if(this.options.useAnimation) -this.$container.addClass('fade') -var $content=$('
').html(this.getContent()) -this.$container.append($content) -if(this.options.width) -this.$container.width(this.options.width) -if(this.options.modal){this.$overlay=$('
').addClass('popover-overlay') -$(document.body).append(this.$overlay) -if(this.options.highlightModalTarget){this.$el.addClass('popover-highlight') -this.$el.blur()}}else{this.$overlay=false} -if(this.options.container) -$(this.options.container).append(this.$container) -else -$(document.body).append(this.$container) -var -placement=this.calcPlacement(),position=this.calcPosition(placement) -this.$container.css({left:position.x,top:position.y}).addClass('placement-'+placement) -this.$container.addClass('in') -if(this.$overlay)this.$overlay.addClass('in') -$(document.body).addClass('popover-open') -var showEvent=jQuery.Event('show.oc.popover',{relatedTarget:this.$container.get(0)}) -this.$el.trigger(showEvent) -this.$container.on('close.oc.popover',function(e){self.hide()}) -this.$container.on('click','[data-dismiss=popover]',function(e){self.hide() -return false}) -this.docClickHandler=$.proxy(this.onDocumentClick,this) -$(document).bind('mousedown',this.docClickHandler);if(this.options.closeOnEsc){$(document).on('keyup.oc.popover',function(e){if($(e.target).hasClass('select2-offscreen')) -return false -if(e.keyCode==27){self.hide() -return false}})}} -Popover.prototype.getContent=function(){return typeof this.options.content=='function'?this.options.content.call(this.$el[0],this):this.options.content} -Popover.prototype.calcDimensions=function(){var -documentWidth=$(document).width(),documentHeight=$(document).height(),targetOffset=this.$el.offset(),targetWidth=this.$el.outerWidth(),targetHeight=this.$el.outerHeight() -return{containerWidth:this.$container.outerWidth()+this.arrowSize,containerHeight:this.$container.outerHeight()+this.arrowSize,targetOffset:targetOffset,targetHeight:targetHeight,targetWidth:targetWidth,spaceLeft:targetOffset.left,spaceRight:documentWidth-(targetWidth+targetOffset.left),spaceTop:targetOffset.top,spaceBottom:documentHeight-(targetHeight+targetOffset.top),spaceHorizontalBottom:documentHeight-targetOffset.top,spaceVerticalRight:documentWidth-targetOffset.left,documentWidth:documentWidth}} -Popover.prototype.fitsLeft=function(dimensions){return dimensions.spaceLeft>=dimensions.containerWidth&&dimensions.spaceHorizontalBottom>=dimensions.containerHeight} -Popover.prototype.fitsRight=function(dimensions){return dimensions.spaceRight>=dimensions.containerWidth&&dimensions.spaceHorizontalBottom>=dimensions.containerHeight} -Popover.prototype.fitsBottom=function(dimensions){return dimensions.spaceBottom>=dimensions.containerHeight&&dimensions.spaceVerticalRight>=dimensions.containerWidth} -Popover.prototype.fitsTop=function(dimensions){return dimensions.spaceTop>=dimensions.containerHeight&&dimensions.spaceVerticalRight>=dimensions.containerWidth} -Popover.prototype.calcPlacement=function(){var -placement=this.options.placement,dimensions=this.calcDimensions();if(placement=='center') -return placement -if(placement!='bottom'&&placement!='top'&&placement!='left'&&placement!='right') -placement='bottom' -var placementFunctions={top:this.fitsTop,bottom:this.fitsBottom,left:this.fitsLeft,right:this.fitsRight} -if(placementFunctions[placement](dimensions)) -return placement -for(var index in placementFunctions){if(placementFunctions[index](dimensions)) -return index} -return this.options.fallbackPlacement} -Popover.prototype.calcPosition=function(placement){var -dimensions=this.calcDimensions(),result -switch(placement){case'left':var realOffset=this.options.offsetY===undefined?this.options.offset:this.options.offsetY -result={x:(dimensions.targetOffset.left-dimensions.containerWidth),y:dimensions.targetOffset.top+realOffset} -break;case'top':var realOffset=this.options.offsetX===undefined?this.options.offset:this.options.offsetX -result={x:dimensions.targetOffset.left+realOffset,y:(dimensions.targetOffset.top-dimensions.containerHeight)} -break;case'bottom':var realOffset=this.options.offsetX===undefined?this.options.offset:this.options.offsetX -result={x:dimensions.targetOffset.left+realOffset,y:(dimensions.targetOffset.top+dimensions.targetHeight+this.arrowSize)} -break;case'right':var realOffset=this.options.offsetY===undefined?this.options.offset:this.options.offsetY -result={x:(dimensions.targetOffset.left+dimensions.targetWidth+this.arrowSize),y:dimensions.targetOffset.top+realOffset} -break;case'center':var windowHeight=$(window).height() -result={x:(dimensions.documentWidth/2-dimensions.containerWidth/2),y:(windowHeight/2-dimensions.containerHeight/2)} -if(result.y<40) -result.y=40 -break;} -if(!this.options.container) -return result -var -$container=$(this.options.container),containerOffset=$container.offset() -result.x-=containerOffset.left -result.y-=containerOffset.top +if($.oc.langMessages===undefined) +$.oc.langMessages={} +$.oc.lang=(function(lang,messages){lang.load=function(locale){if(messages[locale]===undefined){messages[locale]={}} +lang.loadedMessages=messages[locale]} +lang.get=function(name,defaultValue){if(!name)return +var result=lang.loadedMessages +if(!defaultValue)defaultValue=name +$.each(name.split('.'),function(index,value){if(result[value]===undefined){result=defaultValue +return false} +result=result[value]}) return result} -Popover.prototype.onDocumentClick=function(e){if(!this.options.closeOnPageClick) -return -if($.contains(this.$container.get(0),e.target)) -return -this.hide();} -Popover.DEFAULTS={placement:'bottom',fallbackPlacement:'bottom',content:'

Popover content

',width:false,modal:false,highlightModalTarget:false,closeOnPageClick:true,closeOnEsc:true,container:false,containerClass:null,offset:15,useAnimation:false} -var old=$.fn.ocPopover -$.fn.ocPopover=function(option){var args=arguments;return this.each(function(){var $this=$(this) -var data=$this.data('oc.popover') -var options=$.extend({},Popover.DEFAULTS,$this.data(),typeof option=='object'&&option) -if(!data){if(typeof option=='string') -return;$this.data('oc.popover',(data=new Popover(this,options)))}else{if(typeof option!='string') -return;var methodArgs=[];for(var i=1;i

',trigger:'hover focus',title:'',delay:0,html:false,container:false} -Tooltip.prototype.init=function(type,element,options){this.enabled=true -this.type=type -this.$element=$(element) -this.options=this.getOptions(options) -var triggers=this.options.trigger.split(' ') -for(var i=triggers.length;i--;){var trigger=triggers[i] -if(trigger=='click'){this.$element.on('click.'+this.type,this.options.selector,$.proxy(this.toggle,this))}else if(trigger!='manual'){var eventIn=trigger=='hover'?'mouseenter':'focusin' -var eventOut=trigger=='hover'?'mouseleave':'focusout' -this.$element.on(eventIn+'.'+this.type,this.options.selector,$.proxy(this.enter,this)) -this.$element.on(eventOut+'.'+this.type,this.options.selector,$.proxy(this.leave,this))}} -this.options.selector?(this._options=$.extend({},this.options,{trigger:'manual',selector:''})):this.fixTitle()} -Tooltip.prototype.getDefaults=function(){return Tooltip.DEFAULTS} -Tooltip.prototype.getOptions=function(options){options=$.extend({},this.getDefaults(),this.$element.data(),options) -if(options.delay&&typeof options.delay=='number'){options.delay={show:options.delay,hide:options.delay}} -return options} -Tooltip.prototype.getDelegateOptions=function(){var options={} -var defaults=this.getDefaults() -this._options&&$.each(this._options,function(key,value){if(defaults[key]!=value)options[key]=value}) -return options} -Tooltip.prototype.enter=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.'+this.type) -clearTimeout(self.timeout) -self.hoverState='in' -if(!self.options.delay||!self.options.delay.show)return self.show() -self.timeout=setTimeout(function(){if(self.hoverState=='in')self.show()},self.options.delay.show)} -Tooltip.prototype.leave=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.'+this.type) -clearTimeout(self.timeout) -self.hoverState='out' -if(!self.options.delay||!self.options.delay.hide)return self.hide() -self.timeout=setTimeout(function(){if(self.hoverState=='out')self.hide()},self.options.delay.hide)} -Tooltip.prototype.show=function(){var e=$.Event('show.bs.'+this.type) -if(this.hasContent()&&this.enabled){this.$element.trigger(e) -if(e.isDefaultPrevented())return -var that=this;var $tip=this.tip() -this.setContent() -if(this.options.animation)$tip.addClass('fade') -var placement=typeof this.options.placement=='function'?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement -var autoToken=/\s?auto?\s?/i -var autoPlace=autoToken.test(placement) -if(autoPlace)placement=placement.replace(autoToken,'')||'top' -$tip.detach().css({top:0,left:0,display:'block'}).addClass(placement) -this.options.container?$tip.appendTo(this.options.container):$tip.insertAfter(this.$element) -var pos=this.getPosition() -var actualWidth=$tip[0].offsetWidth -var actualHeight=$tip[0].offsetHeight -if(autoPlace){var $parent=this.$element.parent() -var orgPlacement=placement -var docScroll=document.documentElement.scrollTop||document.body.scrollTop -var parentWidth=this.options.container=='body'?window.innerWidth:$parent.outerWidth() -var parentHeight=this.options.container=='body'?window.innerHeight:$parent.outerHeight() -var parentLeft=this.options.container=='body'?0:$parent.offset().left -placement=placement=='bottom'&&pos.top+pos.height+actualHeight-docScroll>parentHeight?'top':placement=='top'&&pos.top-docScroll-actualHeight<0?'bottom':placement=='right'&&pos.right+actualWidth>parentWidth?'left':placement=='left'&&pos.left-actualWidth0){name.splice(i-1,2);i-=2;}}} -name=name.join("/");}else if(name.indexOf('./')===0){name=name.substring(2);}} -if((baseParts||starMap)&&map){nameParts=name.split('/');for(i=nameParts.length;i>0;i-=1){nameSegment=nameParts.slice(0,i).join("/");if(baseParts){for(j=baseParts.length;j>0;j-=1){mapValue=map[baseParts.slice(0,j).join('/')];if(mapValue){mapValue=mapValue[nameSegment];if(mapValue){foundMap=mapValue;foundI=i;break;}}}} -if(foundMap){break;} -if(!foundStarMap&&starMap&&starMap[nameSegment]){foundStarMap=starMap[nameSegment];starI=i;}} -if(!foundMap&&foundStarMap){foundMap=foundStarMap;foundI=starI;} -if(foundMap){nameParts.splice(0,foundI,foundMap);name=nameParts.join('/');}} -return name;} -function makeRequire(relName,forceSync){return function(){return req.apply(undef,aps.call(arguments,0).concat([relName,forceSync]));};} -function makeNormalize(relName){return function(name){return normalize(name,relName);};} -function makeLoad(depName){return function(value){defined[depName]=value;};} -function callDep(name){if(hasProp(waiting,name)){var args=waiting[name];delete waiting[name];defining[name]=true;main.apply(undef,args);} -if(!hasProp(defined,name)&&!hasProp(defining,name)){throw new Error('No '+name);} -return defined[name];} -function splitPrefix(name){var prefix,index=name?name.indexOf('!'):-1;if(index>-1){prefix=name.substring(0,index);name=name.substring(index+1,name.length);} -return[prefix,name];} -makeMap=function(name,relName){var plugin,parts=splitPrefix(name),prefix=parts[0];name=parts[1];if(prefix){prefix=normalize(prefix,relName);plugin=callDep(prefix);} -if(prefix){if(plugin&&plugin.normalize){name=plugin.normalize(name,makeNormalize(relName));}else{name=normalize(name,relName);}}else{name=normalize(name,relName);parts=splitPrefix(name);prefix=parts[0];name=parts[1];if(prefix){plugin=callDep(prefix);}} -return{f:prefix?prefix+'!'+name:name,n:name,pr:prefix,p:plugin};};function makeConfig(name){return function(){return(config&&config.config&&config.config[name])||{};};} -handlers={require:function(name){return makeRequire(name);},exports:function(name){var e=defined[name];if(typeof e!=='undefined'){return e;}else{return(defined[name]={});}},module:function(name){return{id:name,uri:'',exports:defined[name],config:makeConfig(name)};}};main=function(name,deps,callback,relName){var cjsModule,depName,ret,map,i,args=[],callbackType=typeof callback,usingExports;relName=relName||name;if(callbackType==='undefined'||callbackType==='function'){deps=!deps.length&&callback.length?['require','exports','module']:deps;for(i=0;i0){unshift.call(arguments,SuperClass.prototype.constructor);calledConstructor=DecoratorClass.prototype.constructor;} -calledConstructor.apply(this,arguments);} -DecoratorClass.displayName=SuperClass.displayName;function ctr(){this.constructor=DecoratedClass;} -DecoratedClass.prototype=new ctr();for(var m=0;m':'>','"':'"','\'':''','/':'/'};if(typeof markup!=='string'){return markup;} -return String(markup).replace(/[&<>"'\/\\]/g,function(match){return replaceMap[match];});};Utils.appendMany=function($element,$nodes){if($.fn.jquery.substr(0,3)==='1.7'){var $jqNodes=$();$.map($nodes,function(node){$jqNodes=$jqNodes.add(node);});$nodes=$jqNodes;} -$element.append($nodes);};return Utils;});S2.define('select2/results',['jquery','./utils'],function($,Utils){function Results($element,options,dataAdapter){this.$element=$element;this.data=dataAdapter;this.options=options;Results.__super__.constructor.call(this);} -Utils.Extend(Results,Utils.Observable);Results.prototype.render=function(){var $results=$('
    ');if(this.options.get('multiple')){$results.attr('aria-multiselectable','true');} -this.$results=$results;return $results;};Results.prototype.clear=function(){this.$results.empty();};Results.prototype.displayMessage=function(params){var escapeMarkup=this.options.get('escapeMarkup');this.clear();this.hideLoading();var $message=$('
  • ');var message=this.options.get('translations').get(params.message);$message.append(escapeMarkup(message(params.args)));this.$results.append($message);};Results.prototype.append=function(data){this.hideLoading();var $options=[];if(data.results==null||data.results.length===0){if(this.$results.children().length===0){this.trigger('results:message',{message:'noResults'});} -return;} -data.results=this.sort(data.results);for(var d=0;d-1)){$option.attr('aria-selected','true');}else{$option.attr('aria-selected','false');}});var $selected=$options.filter('[aria-selected=true]');if($selected.length>0){$selected.first().trigger('mouseenter');}else{$options.first().trigger('mouseenter');}});};Results.prototype.showLoading=function(params){this.hideLoading();var loadingMore=this.options.get('translations').get('searching');var loading={disabled:true,loading:true,text:loadingMore(params)};var $loading=this.option(loading);$loading.className+=' loading-results';this.$results.prepend($loading);};Results.prototype.hideLoading=function(){this.$results.find('.loading-results').remove();};Results.prototype.option=function(data){var option=document.createElement('li');option.className='select2-results__option';var attrs={'role':'treeitem','aria-selected':'false'};if(data.disabled){delete attrs['aria-selected'];attrs['aria-disabled']='true';} -if(data.id==null){delete attrs['aria-selected'];} -if(data._resultId!=null){option.id=data._resultId;} -if(data.title){option.title=data.title;} -if(data.children){attrs.role='group';attrs['aria-label']=data.text;delete attrs['aria-selected'];} -for(var attr in attrs){var val=attrs[attr];option.setAttribute(attr,val);} -if(data.children){var $option=$(option);var label=document.createElement('strong');label.className='select2-results__group';var $label=$(label);this.template(data,label);var $children=[];for(var c=0;c',{'class':'select2-results__options select2-results__options--nested'});$childrenContainer.append($children);$option.append(label);$option.append($childrenContainer);}else{this.template(data,option);} -$.data(option,'data',data);return option;};Results.prototype.bind=function(container,$container){var self=this;var id=container.id+'-results';this.$results.attr('id',id);container.on('results:all',function(params){self.clear();self.append(params.data);if(container.isOpen()){self.setClasses();}});container.on('results:append',function(params){self.append(params.data);if(container.isOpen()){self.setClasses();}});container.on('query',function(params){self.showLoading(params);});container.on('select',function(){if(!container.isOpen()){return;} -self.setClasses();});container.on('unselect',function(){if(!container.isOpen()){return;} -self.setClasses();});container.on('open',function(){self.$results.attr('aria-expanded','true');self.$results.attr('aria-hidden','false');self.setClasses();self.ensureHighlightVisible();});container.on('close',function(){self.$results.attr('aria-expanded','false');self.$results.attr('aria-hidden','true');self.$results.removeAttr('aria-activedescendant');});container.on('results:toggle',function(){var $highlighted=self.getHighlightedResults();if($highlighted.length===0){return;} -$highlighted.trigger('mouseup');});container.on('results:select',function(){var $highlighted=self.getHighlightedResults();if($highlighted.length===0){return;} -var data=$highlighted.data('data');if($highlighted.attr('aria-selected')=='true'){self.trigger('close');}else{self.trigger('select',{data:data});}});container.on('results:previous',function(){var $highlighted=self.getHighlightedResults();var $options=self.$results.find('[aria-selected]');var currentIndex=$options.index($highlighted);if(currentIndex===0){return;} -var nextIndex=currentIndex-1;if($highlighted.length===0){nextIndex=0;} -var $next=$options.eq(nextIndex);$next.trigger('mouseenter');var currentOffset=self.$results.offset().top;var nextTop=$next.offset().top;var nextOffset=self.$results.scrollTop()+(nextTop-currentOffset);if(nextIndex===0){self.$results.scrollTop(0);}else if(nextTop-currentOffset<0){self.$results.scrollTop(nextOffset);}});container.on('results:next',function(){var $highlighted=self.getHighlightedResults();var $options=self.$results.find('[aria-selected]');var currentIndex=$options.index($highlighted);var nextIndex=currentIndex+1;if(nextIndex>=$options.length){return;} -var $next=$options.eq(nextIndex);$next.trigger('mouseenter');var currentOffset=self.$results.offset().top+ -self.$results.outerHeight(false);var nextBottom=$next.offset().top+$next.outerHeight(false);var nextOffset=self.$results.scrollTop()+nextBottom-currentOffset;if(nextIndex===0){self.$results.scrollTop(0);}else if(nextBottom>currentOffset){self.$results.scrollTop(nextOffset);}});container.on('results:focus',function(params){params.element.addClass('select2-results__option--highlighted');});container.on('results:message',function(params){self.displayMessage(params);});if($.fn.mousewheel){this.$results.on('mousewheel',function(e){var top=self.$results.scrollTop();var bottom=(self.$results.get(0).scrollHeight- -self.$results.scrollTop()+ -e.deltaY);var isAtTop=e.deltaY>0&&top-e.deltaY<=0;var isAtBottom=e.deltaY<0&&bottom<=self.$results.height();if(isAtTop){self.$results.scrollTop(0);e.preventDefault();e.stopPropagation();}else if(isAtBottom){self.$results.scrollTop(self.$results.get(0).scrollHeight-self.$results.height());e.preventDefault();e.stopPropagation();}});} -this.$results.on('mouseup','.select2-results__option[aria-selected]',function(evt){var $this=$(this);var data=$this.data('data');if($this.attr('aria-selected')==='true'){if(self.options.get('multiple')){self.trigger('unselect',{originalEvent:evt,data:data});}else{self.trigger('close');} -return;} -self.trigger('select',{originalEvent:evt,data:data});});this.$results.on('mouseenter','.select2-results__option[aria-selected]',function(evt){var data=$(this).data('data');self.getHighlightedResults().removeClass('select2-results__option--highlighted');self.trigger('results:focus',{data:data,element:$(this)});});};Results.prototype.getHighlightedResults=function(){var $highlighted=this.$results.find('.select2-results__option--highlighted');return $highlighted;};Results.prototype.destroy=function(){this.$results.remove();};Results.prototype.ensureHighlightVisible=function(){var $highlighted=this.getHighlightedResults();if($highlighted.length===0){return;} -var $options=this.$results.find('[aria-selected]');var currentIndex=$options.index($highlighted);var currentOffset=this.$results.offset().top;var nextTop=$highlighted.offset().top;var nextOffset=this.$results.scrollTop()+(nextTop-currentOffset);var offsetDelta=nextTop-currentOffset;nextOffset-=$highlighted.outerHeight(false)*2;if(currentIndex<=2){this.$results.scrollTop(0);}else if(offsetDelta>this.$results.outerHeight()||offsetDelta<0){this.$results.scrollTop(nextOffset);}};Results.prototype.template=function(result,container){var template=this.options.get('templateResult');var escapeMarkup=this.options.get('escapeMarkup');var content=template(result);if(content==null){container.style.display='none';}else if(typeof content==='string'){container.innerHTML=escapeMarkup(content);}else{$(container).append(content);}};return Results;});S2.define('select2/keys',[],function(){var KEYS={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return KEYS;});S2.define('select2/selection/base',['jquery','../utils','../keys'],function($,Utils,KEYS){function BaseSelection($element,options){this.$element=$element;this.options=options;BaseSelection.__super__.constructor.call(this);} -Utils.Extend(BaseSelection,Utils.Observable);BaseSelection.prototype.render=function(){var $selection=$('');this._tabindex=0;if(this.$element.data('old-tabindex')!=null){this._tabindex=this.$element.data('old-tabindex');}else if(this.$element.attr('tabindex')!=null){this._tabindex=this.$element.attr('tabindex');} -$selection.attr('title',this.$element.attr('title'));$selection.attr('tabindex',this._tabindex);this.$selection=$selection;return $selection;};BaseSelection.prototype.bind=function(container,$container){var self=this;var id=container.id+'-container';var resultsId=container.id+'-results';this.container=container;this.$selection.on('focus',function(evt){self.trigger('focus',evt);});this.$selection.on('blur',function(evt){self._handleBlur(evt);});this.$selection.on('keydown',function(evt){self.trigger('keypress',evt);if(evt.which===KEYS.SPACE){evt.preventDefault();}});container.on('results:focus',function(params){self.$selection.attr('aria-activedescendant',params.data._resultId);});container.on('selection:update',function(params){self.update(params.data);});container.on('open',function(){self.$selection.attr('aria-expanded','true');self.$selection.attr('aria-owns',resultsId);self._attachCloseHandler(container);});container.on('close',function(){self.$selection.attr('aria-expanded','false');self.$selection.removeAttr('aria-activedescendant');self.$selection.removeAttr('aria-owns');self.$selection.focus();self._detachCloseHandler(container);});container.on('enable',function(){self.$selection.attr('tabindex',self._tabindex);});container.on('disable',function(){self.$selection.attr('tabindex','-1');});};BaseSelection.prototype._handleBlur=function(evt){var self=this;window.setTimeout(function(){if((document.activeElement==self.$selection[0])||($.contains(self.$selection[0],document.activeElement))){return;} -self.trigger('blur',evt);},1);};BaseSelection.prototype._attachCloseHandler=function(container){var self=this;$(document.body).on('mousedown.select2.'+container.id,function(e){var $target=$(e.target);var $select=$target.closest('.select2');var $all=$('.select2.select2-container--open');$all.each(function(){var $this=$(this);if(this==$select[0]){return;} -var $element=$this.data('element');$element.select2('close');});});};BaseSelection.prototype._detachCloseHandler=function(container){$(document.body).off('mousedown.select2.'+container.id);};BaseSelection.prototype.position=function($selection,$container){var $selectionContainer=$container.find('.selection');$selectionContainer.append($selection);};BaseSelection.prototype.destroy=function(){this._detachCloseHandler(this.container);};BaseSelection.prototype.update=function(data){throw new Error('The `update` method must be defined in child classes.');};return BaseSelection;});S2.define('select2/selection/single',['jquery','./base','../utils','../keys'],function($,BaseSelection,Utils,KEYS){function SingleSelection(){SingleSelection.__super__.constructor.apply(this,arguments);} -Utils.Extend(SingleSelection,BaseSelection);SingleSelection.prototype.render=function(){var $selection=SingleSelection.__super__.render.call(this);$selection.addClass('select2-selection--single');$selection.html(''+''+''+'');return $selection;};SingleSelection.prototype.bind=function(container,$container){var self=this;SingleSelection.__super__.bind.apply(this,arguments);var id=container.id+'-container';this.$selection.find('.select2-selection__rendered').attr('id',id);this.$selection.attr('aria-labelledby',id);this.$selection.on('mousedown',function(evt){if(evt.which!==1){return;} -self.trigger('toggle',{originalEvent:evt});});this.$selection.on('focus',function(evt){});this.$selection.on('blur',function(evt){});container.on('selection:update',function(params){self.update(params.data);});};SingleSelection.prototype.clear=function(){this.$selection.find('.select2-selection__rendered').empty();};SingleSelection.prototype.display=function(data,container){var template=this.options.get('templateSelection');var escapeMarkup=this.options.get('escapeMarkup');return escapeMarkup(template(data,container));};SingleSelection.prototype.selectionContainer=function(){return $('');};SingleSelection.prototype.update=function(data){if(data.length===0){this.clear();return;} -var selection=data[0];var $rendered=this.$selection.find('.select2-selection__rendered');var formatted=this.display(selection,$rendered);$rendered.empty().append(formatted);$rendered.prop('title',selection.title||selection.text);};return SingleSelection;});S2.define('select2/selection/multiple',['jquery','./base','../utils'],function($,BaseSelection,Utils){function MultipleSelection($element,options){MultipleSelection.__super__.constructor.apply(this,arguments);} -Utils.Extend(MultipleSelection,BaseSelection);MultipleSelection.prototype.render=function(){var $selection=MultipleSelection.__super__.render.call(this);$selection.addClass('select2-selection--multiple');$selection.html('
      ');return $selection;};MultipleSelection.prototype.bind=function(container,$container){var self=this;MultipleSelection.__super__.bind.apply(this,arguments);this.$selection.on('click',function(evt){self.trigger('toggle',{originalEvent:evt});});this.$selection.on('click','.select2-selection__choice__remove',function(evt){var $remove=$(this);var $selection=$remove.parent();var data=$selection.data('data');self.trigger('unselect',{originalEvent:evt,data:data});});};MultipleSelection.prototype.clear=function(){this.$selection.find('.select2-selection__rendered').empty();};MultipleSelection.prototype.display=function(data,container){var template=this.options.get('templateSelection');var escapeMarkup=this.options.get('escapeMarkup');return escapeMarkup(template(data,container));};MultipleSelection.prototype.selectionContainer=function(){var $container=$('
    • '+''+'×'+''+'
    • ');return $container;};MultipleSelection.prototype.update=function(data){this.clear();if(data.length===0){return;} -var $selections=[];for(var d=0;d1;if(multipleSelections||singlePlaceholder){return decorated.call(this,data);} -this.clear();var $placeholder=this.createPlaceholder(this.placeholder);this.$selection.find('.select2-selection__rendered').append($placeholder);};return Placeholder;});S2.define('select2/selection/allowClear',['jquery','../keys'],function($,KEYS){function AllowClear(){} -AllowClear.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);if(this.placeholder==null){if(this.options.get('debug')&&window.console&&console.error){console.error('Select2: The `allowClear` option should be used in combination '+'with the `placeholder` option.');}} -this.$selection.on('mousedown','.select2-selection__clear',function(evt){self._handleClear(evt);});container.on('keypress',function(evt){self._handleKeyboardClear(evt,container);});};AllowClear.prototype._handleClear=function(_,evt){if(this.options.get('disabled')){return;} -var $clear=this.$selection.find('.select2-selection__clear');if($clear.length===0){return;} -evt.stopPropagation();var data=$clear.data('data');for(var d=0;d0||data.length===0){return;} -var $remove=$(''+'×'+'');$remove.data('data',data);this.$selection.find('.select2-selection__rendered').prepend($remove);};return AllowClear;});S2.define('select2/selection/search',['jquery','../utils','../keys'],function($,Utils,KEYS){function Search(decorated,$element,options){decorated.call(this,$element,options);} -Search.prototype.render=function(decorated){var $search=$('');this.$searchContainer=$search;this.$search=$search.find('input');var $rendered=decorated.call(this);this._transferTabIndex();return $rendered;};Search.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);container.on('open',function(){self.$search.trigger('focus');});container.on('close',function(){self.$search.val('');self.$search.trigger('focus');});container.on('enable',function(){self.$search.prop('disabled',false);self._transferTabIndex();});container.on('disable',function(){self.$search.prop('disabled',true);});container.on('focus',function(evt){self.$search.trigger('focus');});this.$selection.on('focusin','.select2-search--inline',function(evt){self.trigger('focus',evt);});this.$selection.on('focusout','.select2-search--inline',function(evt){self._handleBlur(evt);});this.$selection.on('keydown','.select2-search--inline',function(evt){evt.stopPropagation();self.trigger('keypress',evt);self._keyUpPrevented=false;var key=evt.which;if(key===KEYS.BACKSPACE&&self.$search.val()===''){var $previousChoice=self.$searchContainer.prev('.select2-selection__choice');if($previousChoice.length>0){var item=$previousChoice.data('data');self.searchRemoveChoice(item);evt.preventDefault();}}});this.$selection.on('input','.select2-search--inline',function(evt){self.$selection.off('keyup.search');});this.$selection.on('keyup.search input','.select2-search--inline',function(evt){var key=evt.which;if(key==KEYS.SHIFT||key==KEYS.CTRL||key==KEYS.ALT){return;} -if(key==KEYS.TAB){return;} -self.handleSearch(evt);});};Search.prototype._transferTabIndex=function(decorated){this.$search.attr('tabindex',this.$selection.attr('tabindex'));this.$selection.attr('tabindex','-1');};Search.prototype.createPlaceholder=function(decorated,placeholder){this.$search.attr('placeholder',placeholder.text);};Search.prototype.update=function(decorated,data){var searchHadFocus=this.$search[0]==document.activeElement;this.$search.attr('placeholder','');decorated.call(this,data);this.$selection.find('.select2-selection__rendered').append(this.$searchContainer);this.resizeSearch();if(searchHadFocus){this.$search.focus();}};Search.prototype.handleSearch=function(){this.resizeSearch();if(!this._keyUpPrevented){var input=this.$search.val();this.trigger('query',{term:input});} -this._keyUpPrevented=false;};Search.prototype.searchRemoveChoice=function(decorated,item){this.trigger('unselect',{data:item});this.trigger('open');this.$search.val(item.text+' ');};Search.prototype.resizeSearch=function(){this.$search.css('width','25px');var width='';if(this.$search.attr('placeholder')!==''){width=this.$selection.find('.select2-selection__rendered').innerWidth();}else{var minimumWidth=this.$search.val().length+1;width=(minimumWidth*0.75)+'em';} -this.$search.css('width',width);};return Search;});S2.define('select2/selection/eventRelay',['jquery'],function($){function EventRelay(){} -EventRelay.prototype.bind=function(decorated,container,$container){var self=this;var relayEvents=['open','opening','close','closing','select','selecting','unselect','unselecting'];var preventableEvents=['opening','closing','selecting','unselecting'];decorated.call(this,container,$container);container.on('*',function(name,params){if($.inArray(name,relayEvents)===-1){return;} -params=params||{};var evt=$.Event('select2:'+name,{params:params});self.$element.trigger(evt);if($.inArray(name,preventableEvents)===-1){return;} -params.prevented=false;});};return EventRelay;});S2.define('select2/translation',['jquery','require'],function($,require){function Translation(dict){this.dict=dict||{};} -Translation.prototype.all=function(){return this.dict;};Translation.prototype.get=function(key){return this.dict[key];};Translation.prototype.extend=function(translation){this.dict=$.extend({},translation.all(),this.dict);};Translation._cache={};Translation.loadPath=function(path){if(!(path in Translation._cache)){var translations=require(path);Translation._cache[path]=translations;} -return new Translation(Translation._cache[path]);};return Translation;});S2.define('select2/diacritics',[],function(){var diacritics={'\u24B6':'A','\uFF21':'A','\u00C0':'A','\u00C1':'A','\u00C2':'A','\u1EA6':'A','\u1EA4':'A','\u1EAA':'A','\u1EA8':'A','\u00C3':'A','\u0100':'A','\u0102':'A','\u1EB0':'A','\u1EAE':'A','\u1EB4':'A','\u1EB2':'A','\u0226':'A','\u01E0':'A','\u00C4':'A','\u01DE':'A','\u1EA2':'A','\u00C5':'A','\u01FA':'A','\u01CD':'A','\u0200':'A','\u0202':'A','\u1EA0':'A','\u1EAC':'A','\u1EB6':'A','\u1E00':'A','\u0104':'A','\u023A':'A','\u2C6F':'A','\uA732':'AA','\u00C6':'AE','\u01FC':'AE','\u01E2':'AE','\uA734':'AO','\uA736':'AU','\uA738':'AV','\uA73A':'AV','\uA73C':'AY','\u24B7':'B','\uFF22':'B','\u1E02':'B','\u1E04':'B','\u1E06':'B','\u0243':'B','\u0182':'B','\u0181':'B','\u24B8':'C','\uFF23':'C','\u0106':'C','\u0108':'C','\u010A':'C','\u010C':'C','\u00C7':'C','\u1E08':'C','\u0187':'C','\u023B':'C','\uA73E':'C','\u24B9':'D','\uFF24':'D','\u1E0A':'D','\u010E':'D','\u1E0C':'D','\u1E10':'D','\u1E12':'D','\u1E0E':'D','\u0110':'D','\u018B':'D','\u018A':'D','\u0189':'D','\uA779':'D','\u01F1':'DZ','\u01C4':'DZ','\u01F2':'Dz','\u01C5':'Dz','\u24BA':'E','\uFF25':'E','\u00C8':'E','\u00C9':'E','\u00CA':'E','\u1EC0':'E','\u1EBE':'E','\u1EC4':'E','\u1EC2':'E','\u1EBC':'E','\u0112':'E','\u1E14':'E','\u1E16':'E','\u0114':'E','\u0116':'E','\u00CB':'E','\u1EBA':'E','\u011A':'E','\u0204':'E','\u0206':'E','\u1EB8':'E','\u1EC6':'E','\u0228':'E','\u1E1C':'E','\u0118':'E','\u1E18':'E','\u1E1A':'E','\u0190':'E','\u018E':'E','\u24BB':'F','\uFF26':'F','\u1E1E':'F','\u0191':'F','\uA77B':'F','\u24BC':'G','\uFF27':'G','\u01F4':'G','\u011C':'G','\u1E20':'G','\u011E':'G','\u0120':'G','\u01E6':'G','\u0122':'G','\u01E4':'G','\u0193':'G','\uA7A0':'G','\uA77D':'G','\uA77E':'G','\u24BD':'H','\uFF28':'H','\u0124':'H','\u1E22':'H','\u1E26':'H','\u021E':'H','\u1E24':'H','\u1E28':'H','\u1E2A':'H','\u0126':'H','\u2C67':'H','\u2C75':'H','\uA78D':'H','\u24BE':'I','\uFF29':'I','\u00CC':'I','\u00CD':'I','\u00CE':'I','\u0128':'I','\u012A':'I','\u012C':'I','\u0130':'I','\u00CF':'I','\u1E2E':'I','\u1EC8':'I','\u01CF':'I','\u0208':'I','\u020A':'I','\u1ECA':'I','\u012E':'I','\u1E2C':'I','\u0197':'I','\u24BF':'J','\uFF2A':'J','\u0134':'J','\u0248':'J','\u24C0':'K','\uFF2B':'K','\u1E30':'K','\u01E8':'K','\u1E32':'K','\u0136':'K','\u1E34':'K','\u0198':'K','\u2C69':'K','\uA740':'K','\uA742':'K','\uA744':'K','\uA7A2':'K','\u24C1':'L','\uFF2C':'L','\u013F':'L','\u0139':'L','\u013D':'L','\u1E36':'L','\u1E38':'L','\u013B':'L','\u1E3C':'L','\u1E3A':'L','\u0141':'L','\u023D':'L','\u2C62':'L','\u2C60':'L','\uA748':'L','\uA746':'L','\uA780':'L','\u01C7':'LJ','\u01C8':'Lj','\u24C2':'M','\uFF2D':'M','\u1E3E':'M','\u1E40':'M','\u1E42':'M','\u2C6E':'M','\u019C':'M','\u24C3':'N','\uFF2E':'N','\u01F8':'N','\u0143':'N','\u00D1':'N','\u1E44':'N','\u0147':'N','\u1E46':'N','\u0145':'N','\u1E4A':'N','\u1E48':'N','\u0220':'N','\u019D':'N','\uA790':'N','\uA7A4':'N','\u01CA':'NJ','\u01CB':'Nj','\u24C4':'O','\uFF2F':'O','\u00D2':'O','\u00D3':'O','\u00D4':'O','\u1ED2':'O','\u1ED0':'O','\u1ED6':'O','\u1ED4':'O','\u00D5':'O','\u1E4C':'O','\u022C':'O','\u1E4E':'O','\u014C':'O','\u1E50':'O','\u1E52':'O','\u014E':'O','\u022E':'O','\u0230':'O','\u00D6':'O','\u022A':'O','\u1ECE':'O','\u0150':'O','\u01D1':'O','\u020C':'O','\u020E':'O','\u01A0':'O','\u1EDC':'O','\u1EDA':'O','\u1EE0':'O','\u1EDE':'O','\u1EE2':'O','\u1ECC':'O','\u1ED8':'O','\u01EA':'O','\u01EC':'O','\u00D8':'O','\u01FE':'O','\u0186':'O','\u019F':'O','\uA74A':'O','\uA74C':'O','\u01A2':'OI','\uA74E':'OO','\u0222':'OU','\u24C5':'P','\uFF30':'P','\u1E54':'P','\u1E56':'P','\u01A4':'P','\u2C63':'P','\uA750':'P','\uA752':'P','\uA754':'P','\u24C6':'Q','\uFF31':'Q','\uA756':'Q','\uA758':'Q','\u024A':'Q','\u24C7':'R','\uFF32':'R','\u0154':'R','\u1E58':'R','\u0158':'R','\u0210':'R','\u0212':'R','\u1E5A':'R','\u1E5C':'R','\u0156':'R','\u1E5E':'R','\u024C':'R','\u2C64':'R','\uA75A':'R','\uA7A6':'R','\uA782':'R','\u24C8':'S','\uFF33':'S','\u1E9E':'S','\u015A':'S','\u1E64':'S','\u015C':'S','\u1E60':'S','\u0160':'S','\u1E66':'S','\u1E62':'S','\u1E68':'S','\u0218':'S','\u015E':'S','\u2C7E':'S','\uA7A8':'S','\uA784':'S','\u24C9':'T','\uFF34':'T','\u1E6A':'T','\u0164':'T','\u1E6C':'T','\u021A':'T','\u0162':'T','\u1E70':'T','\u1E6E':'T','\u0166':'T','\u01AC':'T','\u01AE':'T','\u023E':'T','\uA786':'T','\uA728':'TZ','\u24CA':'U','\uFF35':'U','\u00D9':'U','\u00DA':'U','\u00DB':'U','\u0168':'U','\u1E78':'U','\u016A':'U','\u1E7A':'U','\u016C':'U','\u00DC':'U','\u01DB':'U','\u01D7':'U','\u01D5':'U','\u01D9':'U','\u1EE6':'U','\u016E':'U','\u0170':'U','\u01D3':'U','\u0214':'U','\u0216':'U','\u01AF':'U','\u1EEA':'U','\u1EE8':'U','\u1EEE':'U','\u1EEC':'U','\u1EF0':'U','\u1EE4':'U','\u1E72':'U','\u0172':'U','\u1E76':'U','\u1E74':'U','\u0244':'U','\u24CB':'V','\uFF36':'V','\u1E7C':'V','\u1E7E':'V','\u01B2':'V','\uA75E':'V','\u0245':'V','\uA760':'VY','\u24CC':'W','\uFF37':'W','\u1E80':'W','\u1E82':'W','\u0174':'W','\u1E86':'W','\u1E84':'W','\u1E88':'W','\u2C72':'W','\u24CD':'X','\uFF38':'X','\u1E8A':'X','\u1E8C':'X','\u24CE':'Y','\uFF39':'Y','\u1EF2':'Y','\u00DD':'Y','\u0176':'Y','\u1EF8':'Y','\u0232':'Y','\u1E8E':'Y','\u0178':'Y','\u1EF6':'Y','\u1EF4':'Y','\u01B3':'Y','\u024E':'Y','\u1EFE':'Y','\u24CF':'Z','\uFF3A':'Z','\u0179':'Z','\u1E90':'Z','\u017B':'Z','\u017D':'Z','\u1E92':'Z','\u1E94':'Z','\u01B5':'Z','\u0224':'Z','\u2C7F':'Z','\u2C6B':'Z','\uA762':'Z','\u24D0':'a','\uFF41':'a','\u1E9A':'a','\u00E0':'a','\u00E1':'a','\u00E2':'a','\u1EA7':'a','\u1EA5':'a','\u1EAB':'a','\u1EA9':'a','\u00E3':'a','\u0101':'a','\u0103':'a','\u1EB1':'a','\u1EAF':'a','\u1EB5':'a','\u1EB3':'a','\u0227':'a','\u01E1':'a','\u00E4':'a','\u01DF':'a','\u1EA3':'a','\u00E5':'a','\u01FB':'a','\u01CE':'a','\u0201':'a','\u0203':'a','\u1EA1':'a','\u1EAD':'a','\u1EB7':'a','\u1E01':'a','\u0105':'a','\u2C65':'a','\u0250':'a','\uA733':'aa','\u00E6':'ae','\u01FD':'ae','\u01E3':'ae','\uA735':'ao','\uA737':'au','\uA739':'av','\uA73B':'av','\uA73D':'ay','\u24D1':'b','\uFF42':'b','\u1E03':'b','\u1E05':'b','\u1E07':'b','\u0180':'b','\u0183':'b','\u0253':'b','\u24D2':'c','\uFF43':'c','\u0107':'c','\u0109':'c','\u010B':'c','\u010D':'c','\u00E7':'c','\u1E09':'c','\u0188':'c','\u023C':'c','\uA73F':'c','\u2184':'c','\u24D3':'d','\uFF44':'d','\u1E0B':'d','\u010F':'d','\u1E0D':'d','\u1E11':'d','\u1E13':'d','\u1E0F':'d','\u0111':'d','\u018C':'d','\u0256':'d','\u0257':'d','\uA77A':'d','\u01F3':'dz','\u01C6':'dz','\u24D4':'e','\uFF45':'e','\u00E8':'e','\u00E9':'e','\u00EA':'e','\u1EC1':'e','\u1EBF':'e','\u1EC5':'e','\u1EC3':'e','\u1EBD':'e','\u0113':'e','\u1E15':'e','\u1E17':'e','\u0115':'e','\u0117':'e','\u00EB':'e','\u1EBB':'e','\u011B':'e','\u0205':'e','\u0207':'e','\u1EB9':'e','\u1EC7':'e','\u0229':'e','\u1E1D':'e','\u0119':'e','\u1E19':'e','\u1E1B':'e','\u0247':'e','\u025B':'e','\u01DD':'e','\u24D5':'f','\uFF46':'f','\u1E1F':'f','\u0192':'f','\uA77C':'f','\u24D6':'g','\uFF47':'g','\u01F5':'g','\u011D':'g','\u1E21':'g','\u011F':'g','\u0121':'g','\u01E7':'g','\u0123':'g','\u01E5':'g','\u0260':'g','\uA7A1':'g','\u1D79':'g','\uA77F':'g','\u24D7':'h','\uFF48':'h','\u0125':'h','\u1E23':'h','\u1E27':'h','\u021F':'h','\u1E25':'h','\u1E29':'h','\u1E2B':'h','\u1E96':'h','\u0127':'h','\u2C68':'h','\u2C76':'h','\u0265':'h','\u0195':'hv','\u24D8':'i','\uFF49':'i','\u00EC':'i','\u00ED':'i','\u00EE':'i','\u0129':'i','\u012B':'i','\u012D':'i','\u00EF':'i','\u1E2F':'i','\u1EC9':'i','\u01D0':'i','\u0209':'i','\u020B':'i','\u1ECB':'i','\u012F':'i','\u1E2D':'i','\u0268':'i','\u0131':'i','\u24D9':'j','\uFF4A':'j','\u0135':'j','\u01F0':'j','\u0249':'j','\u24DA':'k','\uFF4B':'k','\u1E31':'k','\u01E9':'k','\u1E33':'k','\u0137':'k','\u1E35':'k','\u0199':'k','\u2C6A':'k','\uA741':'k','\uA743':'k','\uA745':'k','\uA7A3':'k','\u24DB':'l','\uFF4C':'l','\u0140':'l','\u013A':'l','\u013E':'l','\u1E37':'l','\u1E39':'l','\u013C':'l','\u1E3D':'l','\u1E3B':'l','\u017F':'l','\u0142':'l','\u019A':'l','\u026B':'l','\u2C61':'l','\uA749':'l','\uA781':'l','\uA747':'l','\u01C9':'lj','\u24DC':'m','\uFF4D':'m','\u1E3F':'m','\u1E41':'m','\u1E43':'m','\u0271':'m','\u026F':'m','\u24DD':'n','\uFF4E':'n','\u01F9':'n','\u0144':'n','\u00F1':'n','\u1E45':'n','\u0148':'n','\u1E47':'n','\u0146':'n','\u1E4B':'n','\u1E49':'n','\u019E':'n','\u0272':'n','\u0149':'n','\uA791':'n','\uA7A5':'n','\u01CC':'nj','\u24DE':'o','\uFF4F':'o','\u00F2':'o','\u00F3':'o','\u00F4':'o','\u1ED3':'o','\u1ED1':'o','\u1ED7':'o','\u1ED5':'o','\u00F5':'o','\u1E4D':'o','\u022D':'o','\u1E4F':'o','\u014D':'o','\u1E51':'o','\u1E53':'o','\u014F':'o','\u022F':'o','\u0231':'o','\u00F6':'o','\u022B':'o','\u1ECF':'o','\u0151':'o','\u01D2':'o','\u020D':'o','\u020F':'o','\u01A1':'o','\u1EDD':'o','\u1EDB':'o','\u1EE1':'o','\u1EDF':'o','\u1EE3':'o','\u1ECD':'o','\u1ED9':'o','\u01EB':'o','\u01ED':'o','\u00F8':'o','\u01FF':'o','\u0254':'o','\uA74B':'o','\uA74D':'o','\u0275':'o','\u01A3':'oi','\u0223':'ou','\uA74F':'oo','\u24DF':'p','\uFF50':'p','\u1E55':'p','\u1E57':'p','\u01A5':'p','\u1D7D':'p','\uA751':'p','\uA753':'p','\uA755':'p','\u24E0':'q','\uFF51':'q','\u024B':'q','\uA757':'q','\uA759':'q','\u24E1':'r','\uFF52':'r','\u0155':'r','\u1E59':'r','\u0159':'r','\u0211':'r','\u0213':'r','\u1E5B':'r','\u1E5D':'r','\u0157':'r','\u1E5F':'r','\u024D':'r','\u027D':'r','\uA75B':'r','\uA7A7':'r','\uA783':'r','\u24E2':'s','\uFF53':'s','\u00DF':'s','\u015B':'s','\u1E65':'s','\u015D':'s','\u1E61':'s','\u0161':'s','\u1E67':'s','\u1E63':'s','\u1E69':'s','\u0219':'s','\u015F':'s','\u023F':'s','\uA7A9':'s','\uA785':'s','\u1E9B':'s','\u24E3':'t','\uFF54':'t','\u1E6B':'t','\u1E97':'t','\u0165':'t','\u1E6D':'t','\u021B':'t','\u0163':'t','\u1E71':'t','\u1E6F':'t','\u0167':'t','\u01AD':'t','\u0288':'t','\u2C66':'t','\uA787':'t','\uA729':'tz','\u24E4':'u','\uFF55':'u','\u00F9':'u','\u00FA':'u','\u00FB':'u','\u0169':'u','\u1E79':'u','\u016B':'u','\u1E7B':'u','\u016D':'u','\u00FC':'u','\u01DC':'u','\u01D8':'u','\u01D6':'u','\u01DA':'u','\u1EE7':'u','\u016F':'u','\u0171':'u','\u01D4':'u','\u0215':'u','\u0217':'u','\u01B0':'u','\u1EEB':'u','\u1EE9':'u','\u1EEF':'u','\u1EED':'u','\u1EF1':'u','\u1EE5':'u','\u1E73':'u','\u0173':'u','\u1E77':'u','\u1E75':'u','\u0289':'u','\u24E5':'v','\uFF56':'v','\u1E7D':'v','\u1E7F':'v','\u028B':'v','\uA75F':'v','\u028C':'v','\uA761':'vy','\u24E6':'w','\uFF57':'w','\u1E81':'w','\u1E83':'w','\u0175':'w','\u1E87':'w','\u1E85':'w','\u1E98':'w','\u1E89':'w','\u2C73':'w','\u24E7':'x','\uFF58':'x','\u1E8B':'x','\u1E8D':'x','\u24E8':'y','\uFF59':'y','\u1EF3':'y','\u00FD':'y','\u0177':'y','\u1EF9':'y','\u0233':'y','\u1E8F':'y','\u00FF':'y','\u1EF7':'y','\u1E99':'y','\u1EF5':'y','\u01B4':'y','\u024F':'y','\u1EFF':'y','\u24E9':'z','\uFF5A':'z','\u017A':'z','\u1E91':'z','\u017C':'z','\u017E':'z','\u1E93':'z','\u1E95':'z','\u01B6':'z','\u0225':'z','\u0240':'z','\u2C6C':'z','\uA763':'z','\u0386':'\u0391','\u0388':'\u0395','\u0389':'\u0397','\u038A':'\u0399','\u03AA':'\u0399','\u038C':'\u039F','\u038E':'\u03A5','\u03AB':'\u03A5','\u038F':'\u03A9','\u03AC':'\u03B1','\u03AD':'\u03B5','\u03AE':'\u03B7','\u03AF':'\u03B9','\u03CA':'\u03B9','\u0390':'\u03B9','\u03CC':'\u03BF','\u03CD':'\u03C5','\u03CB':'\u03C5','\u03B0':'\u03C5','\u03C9':'\u03C9','\u03C2':'\u03C3'};return diacritics;});S2.define('select2/data/base',['../utils'],function(Utils){function BaseAdapter($element,options){BaseAdapter.__super__.constructor.call(this);} -Utils.Extend(BaseAdapter,Utils.Observable);BaseAdapter.prototype.current=function(callback){throw new Error('The `current` method must be defined in child classes.');};BaseAdapter.prototype.query=function(params,callback){throw new Error('The `query` method must be defined in child classes.');};BaseAdapter.prototype.bind=function(container,$container){};BaseAdapter.prototype.destroy=function(){};BaseAdapter.prototype.generateResultId=function(container,data){var id=container.id+'-result-';id+=Utils.generateChars(4);if(data.id!=null){id+='-'+data.id.toString();}else{id+='-'+Utils.generateChars(4);} -return id;};return BaseAdapter;});S2.define('select2/data/select',['./base','../utils','jquery'],function(BaseAdapter,Utils,$){function SelectAdapter($element,options){this.$element=$element;this.options=options;SelectAdapter.__super__.constructor.call(this);} -Utils.Extend(SelectAdapter,BaseAdapter);SelectAdapter.prototype.current=function(callback){var data=[];var self=this;this.$element.find(':selected').each(function(){var $option=$(this);var option=self.item($option);data.push(option);});callback(data);};SelectAdapter.prototype.select=function(data){var self=this;data.selected=true;if($(data.element).is('option')){data.element.selected=true;this.$element.trigger('change');return;} -if(this.$element.prop('multiple')){this.current(function(currentData){var val=[];data=[data];data.push.apply(data,currentData);for(var d=0;d=0){var $existingOption=$existing.filter(onlyItem(item));var existingData=this.item($existingOption);var newData=$.extend(true,{},existingData,item);var $newOption=this.option(existingData);$existingOption.replaceWith($newOption);continue;} -var $option=this.option(item);if(item.children){var $children=this.convertToOptions(item.children);Utils.appendMany($option,$children);} -$options.push($option);} -return $options;};return ArrayAdapter;});S2.define('select2/data/ajax',['./array','../utils','jquery'],function(ArrayAdapter,Utils,$){function AjaxAdapter($element,options){this.ajaxOptions=this._applyDefaults(options.get('ajax'));if(this.ajaxOptions.processResults!=null){this.processResults=this.ajaxOptions.processResults;} -AjaxAdapter.__super__.constructor.call(this,$element,options);} -Utils.Extend(AjaxAdapter,ArrayAdapter);AjaxAdapter.prototype._applyDefaults=function(options){var defaults={data:function(params){return{q:params.term};},transport:function(params,success,failure){var $request=$.ajax(params);$request.then(success);$request.fail(failure);return $request;}};return $.extend({},defaults,options,true);};AjaxAdapter.prototype.processResults=function(results){return results;};AjaxAdapter.prototype.query=function(params,callback){var matches=[];var self=this;if(this._request!=null){if($.isFunction(this._request.abort)){this._request.abort();} -this._request=null;} -var options=$.extend({type:'GET'},this.ajaxOptions);if(typeof options.url==='function'){options.url=options.url(params);} -if(typeof options.data==='function'){options.data=options.data(params);} -function request(){var $request=options.transport(options,function(data){var results=self.processResults(data,params);if(self.options.get('debug')&&window.console&&console.error){if(!results||!results.results||!$.isArray(results.results)){console.error('Select2: The AJAX results did not return an array in the '+'`results` key of the response.');}} -callback(results);},function(){});self._request=$request;} -if(this.ajaxOptions.delay&¶ms.term!==''){if(this._queryTimeout){window.clearTimeout(this._queryTimeout);} -this._queryTimeout=window.setTimeout(request,this.ajaxOptions.delay);}else{request();}};return AjaxAdapter;});S2.define('select2/data/tags',['jquery'],function($){function Tags(decorated,$element,options){var tags=options.get('tags');var createTag=options.get('createTag');if(createTag!==undefined){this.createTag=createTag;} -decorated.call(this,$element,options);if($.isArray(tags)){for(var t=0;t0&¶ms.term.length>this.maximumInputLength){this.trigger('results:message',{message:'inputTooLong',args:{maximum:this.maximumInputLength,input:params.term,params:params}});return;} -decorated.call(this,params,callback);};return MaximumInputLength;});S2.define('select2/data/maximumSelectionLength',[],function(){function MaximumSelectionLength(decorated,$e,options){this.maximumSelectionLength=options.get('maximumSelectionLength');decorated.call(this,$e,options);} -MaximumSelectionLength.prototype.query=function(decorated,params,callback){var self=this;this.current(function(currentData){var count=currentData!=null?currentData.length:0;if(self.maximumSelectionLength>0&&count>=self.maximumSelectionLength){self.trigger('results:message',{message:'maximumSelected',args:{maximum:self.maximumSelectionLength}});return;} -decorated.call(self,params,callback);});};return MaximumSelectionLength;});S2.define('select2/dropdown',['jquery','./utils'],function($,Utils){function Dropdown($element,options){this.$element=$element;this.options=options;Dropdown.__super__.constructor.call(this);} -Utils.Extend(Dropdown,Utils.Observable);Dropdown.prototype.render=function(){var $dropdown=$(''+''+'');$dropdown.attr('dir',this.options.get('dir'));this.$dropdown=$dropdown;return $dropdown;};Dropdown.prototype.position=function($dropdown,$container){};Dropdown.prototype.destroy=function(){this.$dropdown.remove();};return Dropdown;});S2.define('select2/dropdown/search',['jquery','../utils'],function($,Utils){function Search(){} -Search.prototype.render=function(decorated){var $rendered=decorated.call(this);var $search=$(''+''+'');this.$searchContainer=$search;this.$search=$search.find('input');$rendered.prepend($search);return $rendered;};Search.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);this.$search.on('keydown',function(evt){self.trigger('keypress',evt);self._keyUpPrevented=false;});this.$search.on('input',function(evt){$(this).off('keyup');});this.$search.on('keyup input',function(evt){self.handleSearch(evt);});container.on('open',function(){self.$search.attr('tabindex',0);self.$search.focus();window.setTimeout(function(){self.$search.focus();},0);});container.on('close',function(){self.$search.attr('tabindex',-1);self.$search.val('');});container.on('results:all',function(params){if(params.query.term==null||params.query.term===''){var showSearch=self.showSearch(params);if(showSearch){self.$searchContainer.removeClass('select2-search--hide');}else{self.$searchContainer.addClass('select2-search--hide');}}});};Search.prototype.handleSearch=function(evt){if(!this._keyUpPrevented){var input=this.$search.val();this.trigger('query',{term:input});} -this._keyUpPrevented=false;};Search.prototype.showSearch=function(_,params){return true;};return Search;});S2.define('select2/dropdown/hidePlaceholder',[],function(){function HidePlaceholder(decorated,$element,options,dataAdapter){this.placeholder=this.normalizePlaceholder(options.get('placeholder'));decorated.call(this,$element,options,dataAdapter);} -HidePlaceholder.prototype.append=function(decorated,data){data.results=this.removePlaceholder(data.results);decorated.call(this,data);};HidePlaceholder.prototype.normalizePlaceholder=function(_,placeholder){if(typeof placeholder==='string'){placeholder={id:'',text:placeholder};} -return placeholder;};HidePlaceholder.prototype.removePlaceholder=function(_,data){var modifiedData=data.slice(0);for(var d=data.length-1;d>=0;d--){var item=data[d];if(this.placeholder.id===item.id){modifiedData.splice(d,1);}} -return modifiedData;};return HidePlaceholder;});S2.define('select2/dropdown/infiniteScroll',['jquery'],function($){function InfiniteScroll(decorated,$element,options,dataAdapter){this.lastParams={};decorated.call(this,$element,options,dataAdapter);this.$loadingMore=this.createLoadingMore();this.loading=false;} -InfiniteScroll.prototype.append=function(decorated,data){this.$loadingMore.remove();this.loading=false;decorated.call(this,data);if(this.showLoadingMore(data)){this.$results.append(this.$loadingMore);}};InfiniteScroll.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);container.on('query',function(params){self.lastParams=params;self.loading=true;});container.on('query:append',function(params){self.lastParams=params;self.loading=true;});this.$results.on('scroll',function(){var isLoadMoreVisible=$.contains(document.documentElement,self.$loadingMore[0]);if(self.loading||!isLoadMoreVisible){return;} -var currentOffset=self.$results.offset().top+ -self.$results.outerHeight(false);var loadingMoreOffset=self.$loadingMore.offset().top+ -self.$loadingMore.outerHeight(false);if(currentOffset+50>=loadingMoreOffset){self.loadMore();}});};InfiniteScroll.prototype.loadMore=function(){this.loading=true;var params=$.extend({},{page:1},this.lastParams);params.page++;this.trigger('query:append',params);};InfiniteScroll.prototype.showLoadingMore=function(_,data){return data.pagination&&data.pagination.more;};InfiniteScroll.prototype.createLoadingMore=function(){var $option=$('
    • ');var message=this.options.get('translations').get('loadingMore');$option.html(message(this.lastParams));return $option;};return InfiniteScroll;});S2.define('select2/dropdown/attachBody',['jquery','../utils'],function($,Utils){function AttachBody(decorated,$element,options){this.$dropdownParent=options.get('dropdownParent')||document.body;decorated.call(this,$element,options);} -AttachBody.prototype.bind=function(decorated,container,$container){var self=this;var setupResultsEvents=false;decorated.call(this,container,$container);container.on('open',function(){self._showDropdown();self._attachPositioningHandler(container);if(!setupResultsEvents){setupResultsEvents=true;container.on('results:all',function(){self._positionDropdown();self._resizeDropdown();});container.on('results:append',function(){self._positionDropdown();self._resizeDropdown();});}});container.on('close',function(){self._hideDropdown();self._detachPositioningHandler(container);});this.$dropdownContainer.on('mousedown',function(evt){evt.stopPropagation();});};AttachBody.prototype.position=function(decorated,$dropdown,$container){$dropdown.attr('class',$container.attr('class'));$dropdown.removeClass('select2');$dropdown.addClass('select2-container--open');$dropdown.css({position:'absolute',top:-999999});this.$container=$container;};AttachBody.prototype.render=function(decorated){var $container=$('');var $dropdown=decorated.call(this);$container.append($dropdown);this.$dropdownContainer=$container;return $container;};AttachBody.prototype._hideDropdown=function(decorated){this.$dropdownContainer.detach();};AttachBody.prototype._attachPositioningHandler=function(container){var self=this;var scrollEvent='scroll.select2.'+container.id;var resizeEvent='resize.select2.'+container.id;var orientationEvent='orientationchange.select2.'+container.id;var $watchers=this.$container.parents().filter(Utils.hasScroll);$watchers.each(function(){$(this).data('select2-scroll-position',{x:$(this).scrollLeft(),y:$(this).scrollTop()});});$watchers.on(scrollEvent,function(ev){var position=$(this).data('select2-scroll-position');$(this).scrollTop(position.y);});$(window).on(scrollEvent+' '+resizeEvent+' '+orientationEvent,function(e){self._positionDropdown();self._resizeDropdown();});};AttachBody.prototype._detachPositioningHandler=function(container){var scrollEvent='scroll.select2.'+container.id;var resizeEvent='resize.select2.'+container.id;var orientationEvent='orientationchange.select2.'+container.id;var $watchers=this.$container.parents().filter(Utils.hasScroll);$watchers.off(scrollEvent);$(window).off(scrollEvent+' '+resizeEvent+' '+orientationEvent);};AttachBody.prototype._positionDropdown=function(){var $window=$(window);var isCurrentlyAbove=this.$dropdown.hasClass('select2-dropdown--above');var isCurrentlyBelow=this.$dropdown.hasClass('select2-dropdown--below');var newDirection=null;var position=this.$container.position();var offset=this.$container.offset();offset.bottom=offset.top+this.$container.outerHeight(false);var container={height:this.$container.outerHeight(false)};container.top=offset.top;container.bottom=offset.top+container.height;var dropdown={height:this.$dropdown.outerHeight(false)};var viewport={top:$window.scrollTop(),bottom:$window.scrollTop()+$window.height()};var enoughRoomAbove=viewport.top<(offset.top-dropdown.height);var enoughRoomBelow=viewport.bottom>(offset.bottom+dropdown.height);var css={left:offset.left,top:container.bottom};if(!isCurrentlyAbove&&!isCurrentlyBelow){newDirection='below';} -if(!enoughRoomBelow&&enoughRoomAbove&&!isCurrentlyAbove){newDirection='above';}else if(!enoughRoomAbove&&enoughRoomBelow&&isCurrentlyAbove){newDirection='below';} -if(newDirection=='above'||(isCurrentlyAbove&&newDirection!=='below')){css.top=container.top-dropdown.height;} -if(newDirection!=null){this.$dropdown.removeClass('select2-dropdown--below select2-dropdown--above').addClass('select2-dropdown--'+newDirection);this.$container.removeClass('select2-container--below select2-container--above').addClass('select2-container--'+newDirection);} -this.$dropdownContainer.css(css);};AttachBody.prototype._resizeDropdown=function(){this.$dropdownContainer.width();var css={width:this.$container.outerWidth(false)+'px'};if(this.options.get('dropdownAutoWidth')){css.minWidth=css.width;css.width='auto';} -this.$dropdown.css(css);};AttachBody.prototype._showDropdown=function(decorated){this.$dropdownContainer.appendTo(this.$dropdownParent);this._positionDropdown();this._resizeDropdown();};return AttachBody;});S2.define('select2/dropdown/minimumResultsForSearch',[],function(){function countResults(data){var count=0;for(var d=0;d0){options.dataAdapter=Utils.Decorate(options.dataAdapter,MinimumInputLength);} -if(options.maximumInputLength>0){options.dataAdapter=Utils.Decorate(options.dataAdapter,MaximumInputLength);} -if(options.maximumSelectionLength>0){options.dataAdapter=Utils.Decorate(options.dataAdapter,MaximumSelectionLength);} -if(options.tags){options.dataAdapter=Utils.Decorate(options.dataAdapter,Tags);} -if(options.tokenSeparators!=null||options.tokenizer!=null){options.dataAdapter=Utils.Decorate(options.dataAdapter,Tokenizer);} -if(options.query!=null){var Query=require(options.amdBase+'compat/query');options.dataAdapter=Utils.Decorate(options.dataAdapter,Query);} -if(options.initSelection!=null){var InitSelection=require(options.amdBase+'compat/initSelection');options.dataAdapter=Utils.Decorate(options.dataAdapter,InitSelection);}} -if(options.resultsAdapter==null){options.resultsAdapter=ResultsList;if(options.ajax!=null){options.resultsAdapter=Utils.Decorate(options.resultsAdapter,InfiniteScroll);} -if(options.placeholder!=null){options.resultsAdapter=Utils.Decorate(options.resultsAdapter,HidePlaceholder);} -if(options.selectOnClose){options.resultsAdapter=Utils.Decorate(options.resultsAdapter,SelectOnClose);}} -if(options.dropdownAdapter==null){if(options.multiple){options.dropdownAdapter=Dropdown;}else{var SearchableDropdown=Utils.Decorate(Dropdown,DropdownSearch);options.dropdownAdapter=SearchableDropdown;} -if(options.minimumResultsForSearch!==0){options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,MinimumResultsForSearch);} -if(options.closeOnSelect){options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,CloseOnSelect);} -if(options.dropdownCssClass!=null||options.dropdownCss!=null||options.adaptDropdownCssClass!=null){var DropdownCSS=require(options.amdBase+'compat/dropdownCss');options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,DropdownCSS);} -options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,AttachBody);} -if(options.selectionAdapter==null){if(options.multiple){options.selectionAdapter=MultipleSelection;}else{options.selectionAdapter=SingleSelection;} -if(options.placeholder!=null){options.selectionAdapter=Utils.Decorate(options.selectionAdapter,Placeholder);} -if(options.allowClear){options.selectionAdapter=Utils.Decorate(options.selectionAdapter,AllowClear);} -if(options.multiple){options.selectionAdapter=Utils.Decorate(options.selectionAdapter,SelectionSearch);} -if(options.containerCssClass!=null||options.containerCss!=null||options.adaptContainerCssClass!=null){var ContainerCSS=require(options.amdBase+'compat/containerCss');options.selectionAdapter=Utils.Decorate(options.selectionAdapter,ContainerCSS);} -options.selectionAdapter=Utils.Decorate(options.selectionAdapter,EventRelay);} -if(typeof options.language==='string'){if(options.language.indexOf('-')>0){var languageParts=options.language.split('-');var baseLanguage=languageParts[0];options.language=[options.language,baseLanguage];}else{options.language=[options.language];}} -if($.isArray(options.language)){var languages=new Translation();options.language.push('en');var languageNames=options.language;for(var l=0;l0){var match=$.extend(true,{},data);for(var c=data.children.length-1;c>=0;c--){var child=data.children[c];var matches=matcher(params,child);if(matches==null){match.children.splice(c,1);}} -if(match.children.length>0){return match;} -return matcher(params,match);} -var original=stripDiacritics(data.text).toUpperCase();var term=stripDiacritics(params.term).toUpperCase();if(original.indexOf(term)>-1){return data;} -return null;} -this.defaults={amdBase:'./',amdLanguageBase:'./i18n/',closeOnSelect:true,debug:false,dropdownAutoWidth:false,escapeMarkup:Utils.escapeMarkup,language:EnglishTranslation,matcher:matcher,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:false,sorter:function(data){return data;},templateResult:function(result){return result.text;},templateSelection:function(selection){return selection.text;},theme:'default',width:'resolve'};};Defaults.prototype.set=function(key,value){var camelKey=$.camelCase(key);var data={};data[camelKey]=value;var convertedData=Utils._convertData(data);$.extend(this.defaults,convertedData);};var defaults=new Defaults();return defaults;});S2.define('select2/options',['require','jquery','./defaults','./utils'],function(require,$,Defaults,Utils){function Options(options,$element){this.options=options;if($element!=null){this.fromElement($element);} -this.options=Defaults.apply(this.options);if($element&&$element.is('input')){var InputCompat=require(this.get('amdBase')+'compat/inputData');this.options.dataAdapter=Utils.Decorate(this.options.dataAdapter,InputCompat);}} -Options.prototype.fromElement=function($e){var excludedData=['select2'];if(this.options.multiple==null){this.options.multiple=$e.prop('multiple');} -if(this.options.disabled==null){this.options.disabled=$e.prop('disabled');} -if(this.options.language==null){if($e.prop('lang')){this.options.language=$e.prop('lang').toLowerCase();}else if($e.closest('[lang]').prop('lang')){this.options.language=$e.closest('[lang]').prop('lang');}} -if(this.options.dir==null){if($e.prop('dir')){this.options.dir=$e.prop('dir');}else if($e.closest('[dir]').prop('dir')){this.options.dir=$e.closest('[dir]').prop('dir');}else{this.options.dir='ltr';}} -$e.prop('disabled',this.options.disabled);$e.prop('multiple',this.options.multiple);if($e.data('select2Tags')){if(this.options.debug&&window.console&&console.warn){console.warn('Select2: The `data-select2-tags` attribute has been changed to '+'use the `data-data` and `data-tags="true"` attributes and will be '+'removed in future versions of Select2.');} -$e.data('data',$e.data('select2Tags'));$e.data('tags',true);} -if($e.data('ajaxUrl')){if(this.options.debug&&window.console&&console.warn){console.warn('Select2: The `data-ajax-url` attribute has been changed to '+'`data-ajax--url` and support for the old attribute will be removed'+' in future versions of Select2.');} -$e.attr('ajax--url',$e.data('ajaxUrl'));$e.data('ajax--url',$e.data('ajaxUrl'));} -var dataset={};if($.fn.jquery&&$.fn.jquery.substr(0,2)=='1.'&&$e[0].dataset){dataset=$.extend(true,{},$e[0].dataset,$e.data());}else{dataset=$e.data();} -var data=$.extend(true,{},dataset);data=Utils._convertData(data);for(var key in data){if($.inArray(key,excludedData)>-1){continue;} -if($.isPlainObject(this.options[key])){$.extend(this.options[key],data[key]);}else{this.options[key]=data[key];}} -return this;};Options.prototype.get=function(key){return this.options[key];};Options.prototype.set=function(key,val){this.options[key]=val;};return Options;});S2.define('select2/core',['jquery','./options','./utils','./keys'],function($,Options,Utils,KEYS){var Select2=function($element,options){if($element.data('select2')!=null){$element.data('select2').destroy();} -this.$element=$element;this.id=this._generateId($element);options=options||{};this.options=new Options(options,$element);Select2.__super__.constructor.call(this);var tabindex=$element.attr('tabindex')||0;$element.data('old-tabindex',tabindex);$element.attr('tabindex','-1');var DataAdapter=this.options.get('dataAdapter');this.dataAdapter=new DataAdapter($element,this.options);var $container=this.render();this._placeContainer($container);var SelectionAdapter=this.options.get('selectionAdapter');this.selection=new SelectionAdapter($element,this.options);this.$selection=this.selection.render();this.selection.position(this.$selection,$container);var DropdownAdapter=this.options.get('dropdownAdapter');this.dropdown=new DropdownAdapter($element,this.options);this.$dropdown=this.dropdown.render();this.dropdown.position(this.$dropdown,$container);var ResultsAdapter=this.options.get('resultsAdapter');this.results=new ResultsAdapter($element,this.options,this.dataAdapter);this.$results=this.results.render();this.results.position(this.$results,this.$dropdown);var self=this;this._bindAdapters();this._registerDomEvents();this._registerDataEvents();this._registerSelectionEvents();this._registerDropdownEvents();this._registerResultsEvents();this._registerEvents();this.dataAdapter.current(function(initialData){self.trigger('selection:update',{data:initialData});});$element.addClass('select2-hidden-accessible');$element.attr('aria-hidden','true');this._syncAttributes();$element.data('select2',this);};Utils.Extend(Select2,Utils.Observable);Select2.prototype._generateId=function($element){var id='';if($element.attr('id')!=null){id=$element.attr('id');}else if($element.attr('name')!=null){id=$element.attr('name')+'-'+Utils.generateChars(2);}else{id=Utils.generateChars(4);} -id='select2-'+id;return id;};Select2.prototype._placeContainer=function($container){$container.insertAfter(this.$element);var width=this._resolveWidth(this.$element,this.options.get('width'));if(width!=null){$container.css('width',width);}};Select2.prototype._resolveWidth=function($element,method){var WIDTH=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(method=='resolve'){var styleWidth=this._resolveWidth($element,'style');if(styleWidth!=null){return styleWidth;} -return this._resolveWidth($element,'element');} -if(method=='element'){var elementWidth=$element.outerWidth(false);if(elementWidth<=0){return'auto';} -return elementWidth+'px';} -if(method=='style'){var style=$element.attr('style');if(typeof(style)!=='string'){return null;} -var attrs=style.split(';');for(var i=0,l=attrs.length;i=1){return matches[1];}} -return null;} -return method;};Select2.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container);this.selection.bind(this,this.$container);this.dropdown.bind(this,this.$container);this.results.bind(this,this.$container);};Select2.prototype._registerDomEvents=function(){var self=this;this.$element.on('change.select2',function(){self.dataAdapter.current(function(data){self.trigger('selection:update',{data:data});});});this._sync=Utils.bind(this._syncAttributes,this);if(this.$element[0].attachEvent){this.$element[0].attachEvent('onpropertychange',this._sync);} -var observer=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;if(observer!=null){this._observer=new observer(function(mutations){$.each(mutations,self._sync);});this._observer.observe(this.$element[0],{attributes:true,subtree:false});}else if(this.$element[0].addEventListener){this.$element[0].addEventListener('DOMAttrModified',self._sync,false);}};Select2.prototype._registerDataEvents=function(){var self=this;this.dataAdapter.on('*',function(name,params){self.trigger(name,params);});};Select2.prototype._registerSelectionEvents=function(){var self=this;var nonRelayEvents=['toggle','focus'];this.selection.on('toggle',function(){self.toggleDropdown();});this.selection.on('focus',function(params){self.focus(params);});this.selection.on('*',function(name,params){if($.inArray(name,nonRelayEvents)!==-1){return;} -self.trigger(name,params);});};Select2.prototype._registerDropdownEvents=function(){var self=this;this.dropdown.on('*',function(name,params){self.trigger(name,params);});};Select2.prototype._registerResultsEvents=function(){var self=this;this.results.on('*',function(name,params){self.trigger(name,params);});};Select2.prototype._registerEvents=function(){var self=this;this.on('open',function(){self.$container.addClass('select2-container--open');});this.on('close',function(){self.$container.removeClass('select2-container--open');});this.on('enable',function(){self.$container.removeClass('select2-container--disabled');});this.on('disable',function(){self.$container.addClass('select2-container--disabled');});this.on('blur',function(){self.$container.removeClass('select2-container--focus');});this.on('query',function(params){if(!self.isOpen()){self.trigger('open');} -this.dataAdapter.query(params,function(data){self.trigger('results:all',{data:data,query:params});});});this.on('query:append',function(params){this.dataAdapter.query(params,function(data){self.trigger('results:append',{data:data,query:params});});});this.on('keypress',function(evt){var key=evt.which;if(self.isOpen()){if(key===KEYS.ESC||key===KEYS.TAB||(key===KEYS.UP&&evt.altKey)){self.close();evt.preventDefault();}else if(key===KEYS.ENTER){self.trigger('results:select');evt.preventDefault();}else if((key===KEYS.SPACE&&evt.ctrlKey)){self.trigger('results:toggle');evt.preventDefault();}else if(key===KEYS.UP){self.trigger('results:previous');evt.preventDefault();}else if(key===KEYS.DOWN){self.trigger('results:next');evt.preventDefault();}}else{if(key===KEYS.ENTER||key===KEYS.SPACE||(key===KEYS.DOWN&&evt.altKey)){self.open();evt.preventDefault();}}});};Select2.prototype._syncAttributes=function(){this.options.set('disabled',this.$element.prop('disabled'));if(this.options.get('disabled')){if(this.isOpen()){this.close();} -this.trigger('disable');}else{this.trigger('enable');}};Select2.prototype.trigger=function(name,args){var actualTrigger=Select2.__super__.trigger;var preTriggerMap={'open':'opening','close':'closing','select':'selecting','unselect':'unselecting'};if(name in preTriggerMap){var preTriggerName=preTriggerMap[name];var preTriggerArgs={prevented:false,name:name,args:args};actualTrigger.call(this,preTriggerName,preTriggerArgs);if(preTriggerArgs.prevented){args.prevented=true;return;}} -actualTrigger.call(this,name,args);};Select2.prototype.toggleDropdown=function(){if(this.options.get('disabled')){return;} -if(this.isOpen()){this.close();}else{this.open();}};Select2.prototype.open=function(){if(this.isOpen()){return;} -this.trigger('query',{});this.trigger('open');};Select2.prototype.close=function(){if(!this.isOpen()){return;} -this.trigger('close');};Select2.prototype.isOpen=function(){return this.$container.hasClass('select2-container--open');};Select2.prototype.hasFocus=function(){return this.$container.hasClass('select2-container--focus');};Select2.prototype.focus=function(data){if(this.hasFocus()){return;} -this.$container.addClass('select2-container--focus');this.trigger('focus');};Select2.prototype.enable=function(args){if(this.options.get('debug')&&window.console&&console.warn){console.warn('Select2: The `select2("enable")` method has been deprecated and will'+' be removed in later Select2 versions. Use $element.prop("disabled")'+' instead.');} -if(args==null||args.length===0){args=[true];} -var disabled=!args[0];this.$element.prop('disabled',disabled);};Select2.prototype.data=function(){if(this.options.get('debug')&&arguments.length>0&&window.console&&console.warn){console.warn('Select2: Data can no longer be set using `select2("data")`. You '+'should consider setting the value instead using `$element.val()`.');} -var data=[];this.dataAdapter.current(function(currentData){data=currentData;});return data;};Select2.prototype.val=function(args){if(this.options.get('debug')&&window.console&&console.warn){console.warn('Select2: The `select2("val")` method has been deprecated and will be'+' removed in later Select2 versions. Use $element.val() instead.');} -if(args==null||args.length===0){return this.$element.val();} -var newVal=args[0];if($.isArray(newVal)){newVal=$.map(newVal,function(obj){return obj.toString();});} -this.$element.val(newVal).trigger('change');};Select2.prototype.destroy=function(){this.$container.remove();if(this.$element[0].detachEvent){this.$element[0].detachEvent('onpropertychange',this._sync);} -if(this._observer!=null){this._observer.disconnect();this._observer=null;}else if(this.$element[0].removeEventListener){this.$element[0].removeEventListener('DOMAttrModified',this._sync,false);} -this._sync=null;this.$element.off('.select2');this.$element.attr('tabindex',this.$element.data('old-tabindex'));this.$element.removeClass('select2-hidden-accessible');this.$element.attr('aria-hidden','false');this.$element.removeData('select2');this.dataAdapter.destroy();this.selection.destroy();this.dropdown.destroy();this.results.destroy();this.dataAdapter=null;this.selection=null;this.dropdown=null;this.results=null;};Select2.prototype.render=function(){var $container=$(''+''+''+'');$container.attr('dir',this.options.get('dir'));this.$container=$container;this.$container.addClass('select2-container--'+this.options.get('theme'));$container.data('element',this.$element);return $container;};return Select2;});S2.define('select2/compat/utils',['jquery'],function($){function syncCssClasses($dest,$src,adapter){var classes,replacements=[],adapted;classes=$.trim($dest.attr('class'));if(classes){classes=''+classes;$(classes.split(/\s+/)).each(function(){if(this.indexOf('select2-')===0){replacements.push(this);}});} -classes=$.trim($src.attr('class'));if(classes){classes=''+classes;$(classes.split(/\s+/)).each(function(){if(this.indexOf('select2-')!==0){adapted=adapter(this);if(adapted!=null){replacements.push(adapted);}}});} -$dest.attr('class',replacements.join(' '));} -return{syncCssClasses:syncCssClasses};});S2.define('select2/compat/containerCss',['jquery','./utils'],function($,CompatUtils){function _containerAdapter(clazz){return null;} -function ContainerCSS(){} -ContainerCSS.prototype.render=function(decorated){var $container=decorated.call(this);var containerCssClass=this.options.get('containerCssClass')||'';if($.isFunction(containerCssClass)){containerCssClass=containerCssClass(this.$element);} -var containerCssAdapter=this.options.get('adaptContainerCssClass');containerCssAdapter=containerCssAdapter||_containerAdapter;if(containerCssClass.indexOf(':all:')!==-1){containerCssClass=containerCssClass.replace(':all:','');var _cssAdapter=containerCssAdapter;containerCssAdapter=function(clazz){var adapted=_cssAdapter(clazz);if(adapted!=null){return adapted+' '+clazz;} -return clazz;};} -var containerCss=this.options.get('containerCss')||{};if($.isFunction(containerCss)){containerCss=containerCss(this.$element);} -CompatUtils.syncCssClasses($container,this.$element,containerCssAdapter);$container.css(containerCss);$container.addClass(containerCssClass);return $container;};return ContainerCSS;});S2.define('select2/compat/dropdownCss',['jquery','./utils'],function($,CompatUtils){function _dropdownAdapter(clazz){return null;} -function DropdownCSS(){} -DropdownCSS.prototype.render=function(decorated){var $dropdown=decorated.call(this);var dropdownCssClass=this.options.get('dropdownCssClass')||'';if($.isFunction(dropdownCssClass)){dropdownCssClass=dropdownCssClass(this.$element);} -var dropdownCssAdapter=this.options.get('adaptDropdownCssClass');dropdownCssAdapter=dropdownCssAdapter||_dropdownAdapter;if(dropdownCssClass.indexOf(':all:')!==-1){dropdownCssClass=dropdownCssClass.replace(':all:','');var _cssAdapter=dropdownCssAdapter;dropdownCssAdapter=function(clazz){var adapted=_cssAdapter(clazz);if(adapted!=null){return adapted+' '+clazz;} -return clazz;};} -var dropdownCss=this.options.get('dropdownCss')||{};if($.isFunction(dropdownCss)){dropdownCss=dropdownCss(this.$element);} -CompatUtils.syncCssClasses($dropdown,this.$element,dropdownCssAdapter);$dropdown.css(dropdownCss);$dropdown.addClass(dropdownCssClass);return $dropdown;};return DropdownCSS;});S2.define('select2/compat/initSelection',['jquery'],function($){function InitSelection(decorated,$element,options){if(options.get('debug')&&window.console&&console.warn){console.warn('Select2: The `initSelection` option has been deprecated in favor'+' of a custom data adapter that overrides the `current` method. '+'This method is now called multiple times instead of a single '+'time when the instance is initialized. Support will be removed '+'for the `initSelection` option in future versions of Select2');} -this.initSelection=options.get('initSelection');this._isInitialized=false;decorated.call(this,$element,options);} -InitSelection.prototype.current=function(decorated,callback){var self=this;if(this._isInitialized){decorated.call(this,callback);return;} -this.initSelection.call(null,this.$element,function(data){self._isInitialized=true;if(!$.isArray(data)){data=[data];} -callback(data);});};return InitSelection;});S2.define('select2/compat/inputData',['jquery'],function($){function InputData(decorated,$element,options){this._currentData=[];this._valueSeparator=options.get('valueSeparator')||',';if($element.prop('type')==='hidden'){if(options.get('debug')&&console&&console.warn){console.warn('Select2: Using a hidden input with Select2 is no longer '+'supported and may stop working in the future. It is recommended '+'to use a ` \ - \ - \ - \ -
      \ - ') -$editorContainer.append($td.children()) -$editorContainer.append($editor) -$td.append($editorContainer) -var $editorLink=$('a',$editor) -$editorLink.click(function(){return self.toggleExternalParameterEditor($(this))}).attr('title','Click to enter the external parameter name to load the property value from').tooltip({'container':'body',delay:500}) -var $input=$editor.find('input'),propertyValue=self.propertyValues[property] -$input.on('focus',function(){var $field=$(this) -$('td',$field.closest('table')).removeClass('active') -$field.closest('td').addClass('active')}) -$input.on('change',function(){self.markPropertyChanged(property,true)}) -var matches=[] -if(propertyValue){if(matches=propertyValue.match(/^\{\{([^\}]+)\}\}$/)){var value=$.trim(matches[1]) -if(value.length>0){self.showExternalParameterEditor($editorContainer,$editor,$editorLink,$td,true) -$editor.find('input').val(value) -self.writeProperty(property,null,true)}}}}})} -Inspector.prototype.showExternalParameterEditor=function($container,$editor,$editorLink,$cell,noAnimation){var position=$editor.position() -$('input',$editor).focus() -if(!noAnimation){$editor.css({'left':position.left+'px','right':0})}else{$editor.css('right',0)} -setTimeout(function(){$editor.css('left',0) -$cell.scrollTop(0)},0) -$container.addClass('editor-visible') -$editorLink.attr('data-original-title','Click to enter the property value') -this.toggleCellEditorVisibility($cell,false) -$editor.find('input').attr('tabindex',0)} -Inspector.prototype.toggleExternalParameterEditor=function($editorLink){var $container=$editorLink.closest('.external-param-editor-container'),$editor=$('.external-editor',$container),$cell=$editorLink.closest('td'),self=this -$editorLink.tooltip('hide') -if(!$container.hasClass('editor-visible')){self.showExternalParameterEditor($container,$editor,$editorLink,$cell)}else{var left=$container.width() -$editor.css('left',left+'px') -setTimeout(function(){$editor.css({'left':'auto','right':'30px'}) -$container.removeClass('editor-visible') -$container.closest('td').removeClass('active') -var property=$container.closest('tr').data('property'),propertyEditor=self.findEditor(property) -if(propertyEditor&&propertyEditor.onHideExternalParameterEditor!==undefined) -propertyEditor.onHideExternalParameterEditor()},200) -$editorLink.attr('data-original-title','Click to enter the external parameter name to load the property value from') -$editor.find('input').attr('tabindex',-1) -self.toggleCellEditorVisibility($cell,true)} -return false} -Inspector.prototype.toggleCellEditorVisibility=function($cell,show){var $container=$('.external-param-editor-container',$cell) -$container.children().each(function(){var $el=$(this) -if($el.hasClass('external-editor')) -return -if(show) -$el.removeClass('hide') -else{var height=$cell.data('inspector-cell-height') -if(!height){height=$cell.height() -$cell.data('inspector-cell-height',height)} -$container.css('height',height+'px') -$el.addClass('hide')}})} -Inspector.prototype.preprocessConfig=function(){var fields=[],result={hasGroups:false,properties:[]},groupIndex=0 -function findGroup(title){var groups=$.grep(fields,function(item){return item.itemType!==undefined&&item.itemType=='group'&&item.title==title}) -if(groups.length>0) -return groups[0] -return null} -$.each(this.config,function(){this.itemType='property' -if(this.group===undefined) -fields.push(this) -else{var group=findGroup(this.group) -if(!group){group={itemType:'group',title:this.group,properties:[],groupIndex:groupIndex} -groupIndex++ -fields.push(group)} -this.groupIndex=group.groupIndex -group.properties.push(this)}}) -$.each(fields,function(){result.properties.push(this) -if(this.itemType=='group'){result.hasGroups=true -$.each(this.properties,function(){result.properties.push(this)}) -delete this.properties}}) -return result} -Inspector.prototype.toggleGroup=function(link,$container){var $link=$(link),groupIndex=$link.data('group-index'),propertyRows=$('tr[data-group-index='+groupIndex+']',$container),duration=Math.round(100/propertyRows.length),collapse=true,statuses=this.loadGroupExpandedStatuses(),title=$('span.title-element',$link.closest('tr')).attr('title') -if($link.hasClass('expanded')){$link.removeClass('expanded') -statuses[title]=false}else{$link.addClass('expanded') -collapse=false -statuses[title]=true} -propertyRows.each(function(index){var self=$(this) -setTimeout(function(){self.toggleClass('collapsed',collapse) -self.toggleClass('expanded',!collapse)},index*duration)}) -this.writeGroupExpandedStatuses(statuses)} -Inspector.prototype.loadGroupExpandedStatuses=function(){var statuses=this.$el.data('inspector-group-statuses') -return statuses!==undefined?JSON.parse(statuses):{}} -Inspector.prototype.writeGroupExpandedStatuses=function(statuses){this.$el.data('inspector-group-statuses',JSON.stringify(statuses))} -Inspector.prototype.groupExpanded=function(title){var statuses=this.loadGroupExpandedStatuses() -if(statuses[title]!==undefined) -return statuses[title] -return false} -Inspector.prototype.normalizePropertyCode=function(code){var lowerCaseCode=code.toLowerCase() -for(var index in this.config){var propertyInfo=this.config[index] -if(propertyInfo.property.toLowerCase()==lowerCaseCode) -return propertyInfo.property} -return code} -Inspector.prototype.initProperties=function(){if(!this.propertyValuesField.length){var properties={},attributes=this.$el.get(0).attributes -for(var i=0,len=attributes.length;i',data)} -InspectorEditorString.prototype.validate=function(){var val=$.trim($(this.selector).val()) -if(this.fieldDef.required&&val.length===0) -return this.fieldDef.validationMessage||'Required fields were left blank.' -if(this.fieldDef.validationPattern===undefined) -return -var re=new RegExp(this.fieldDef.validationPattern,'m') -if(!val.match(re)) -return this.fieldDef.validationMessage} -InspectorEditorString.prototype.focus=function(){$(this.selector).focus() -$(this.selector).closest('td').scrollLeft(0)} -$.oc.inspector.editors.inspectorEditorString=InspectorEditorString;var InspectorEditorCheckbox=function(editorId,inspector,fieldDef){this.inspector=inspector -this.fieldDef=fieldDef -this.editorId=editorId -this.selector='#'+this.editorId+' input' -Base.call(this) -$(document).on('change',this.selector,this.proxy(this.applyValue))} -InspectorEditorCheckbox.prototype=Object.create(BaseProto) -InspectorEditorCheckbox.prototype.constructor=InspectorEditorCheckbox -InspectorEditorCheckbox.prototype.dispose=function(){$(document).off('change',this.selector,this.proxy(this.applyValue)) -this.inspector=null -this.fieldDef=null -this.editorId=null -this.selector=null -BaseProto.dispose.call(this)} -InspectorEditorCheckbox.prototype.applyValue=function(){this.inspector.writeProperty(this.fieldDef.property,$(this.selector).get(0).checked?1:0)} -InspectorEditorCheckbox.prototype.renderEditor=function(){var self=this,data={id:this.editorId,cbId:this.editorId+'-cb',title:this.fieldDef.title} -return Mustache.render(this.getTemplate(),data)} -InspectorEditorCheckbox.prototype.init=function(){var isChecked=this.inspector.readProperty(this.fieldDef.property,true) -if(isChecked===undefined){if(this.fieldDef.default!==undefined){isChecked=this.normalizeCheckedValue(this.fieldDef.default)}}else{isChecked=this.normalizeCheckedValue(isChecked)} -$(this.selector).prop('checked',isChecked)} -InspectorEditorCheckbox.prototype.normalizeCheckedValue=function(value){if(value=='0'||value=='false') -return false -return value} -InspectorEditorCheckbox.prototype.focus=function(){$(this.selector).closest('div').focus()} -InspectorEditorCheckbox.prototype.getTemplate=function(){return' \ - \ -
      \ - \ - \ -
      \ - \ - ';} -$.oc.inspector.editors.inspectorEditorCheckbox=InspectorEditorCheckbox;var InspectorEditorDropdown=function(editorId,inspector,fieldDef){this.inspector=inspector -this.fieldDef=fieldDef -this.editorId=editorId -this.selector='#'+this.editorId+' select' -this.dynamicOptions=this.fieldDef.options?false:true -this.initialization=false -Base.call(this) -$(document).on('change',this.selector,this.proxy(this.applyValue))} -InspectorEditorDropdown.prototype=Object.create(BaseProto) -InspectorEditorDropdown.prototype.constructor=InspectorEditorDropdown -InspectorEditorDropdown.prototype.dispose=function(){$(document).off('change',this.selector,this.proxy(this.applyValue)) -var $element=$(this.selector) -if($element.data('select2')!=null){$element.select2('close') -$element.select2('destroy')} -this.inspector=null -this.fieldDef=null -this.editorId=null -this.selector=null -BaseProto.dispose.call(this)} -InspectorEditorDropdown.prototype.applyValue=function(){this.inspector.writeProperty(this.fieldDef.property,$(this.selector).val(),this.initialization)} -InspectorEditorDropdown.prototype.renderEditor=function(){var -self=this,data={id:this.editorId,value:$.trim(this.inspector.readProperty(this.fieldDef.property)),selectId:this.editorId+'-select',defaultOption:function(){return function(text,render){if(self.fieldDef.placeholder==undefined) -return'' -if(!Modernizr.touch) -return''}}} -if(this.fieldDef.options){var options=[] -if(this.fieldDef.placeholder!==undefined&&Modernizr.touch) -options.push({value:null,title:this.fieldDef.placeholder}) -$.each(this.fieldDef.options,function(value,title){options.push({value:value,title:title})}) -data.options=options} -return Mustache.render(this.getTemplate(),data)} -InspectorEditorDropdown.prototype.getTemplate=function(){return' \ - \ - \ - \ - ';} -InspectorEditorDropdown.prototype.init=function(){var value=this.inspector.readProperty(this.fieldDef.property,true) -if(value===undefined) -value=this.inspector.getDefaultValue(this.fieldDef.property) -$(this.selector).val(value) -if(!Modernizr.touch){var options={dropdownCssClass:'ocInspectorDropdown'} -if(this.fieldDef.placeholder!==undefined) -options.placeholder=this.fieldDef.placeholder -$(this.selector).select2(options)} -if(this.dynamicOptions){if(!Modernizr.touch){this.indicatorContainer=$('.select2-container',$(this.selector).closest('td')) -this.indicatorContainer.addClass('loading-indicator-container').addClass('size-small')} -this.loadOptions(true)} -if(this.fieldDef.depends) -this.inspector.$el.on('propertyChanged.oc.Inspector',$.proxy(this.onDependencyChanged,this))} -InspectorEditorDropdown.prototype.onDependencyChanged=function(ev,property){if($.inArray(property,this.fieldDef.depends)===-1) -return -var self=this,dependencyValues=this.getDependencyValues() -if(this.prevDependencyValues===undefined||this.prevDependencyValues!=dependencyValues) -this.loadOptions()} -InspectorEditorDropdown.prototype.saveDependencyValues=function(){this.prevDependencyValues=this.getDependencyValues()} -InspectorEditorDropdown.prototype.getDependencyValues=function(){var dependencyValues='',self=this -$.each(this.fieldDef.depends,function(index,masterProperty){dependencyValues+=masterProperty+':'+self.inspector.readProperty(masterProperty)+'-'}) -return dependencyValues} -InspectorEditorDropdown.prototype.showLoadingIndicator=function(){if(!Modernizr.touch) -this.indicatorContainer.loadIndicator()} -InspectorEditorDropdown.prototype.hideLoadingIndicator=function(){if(!Modernizr.touch) -this.indicatorContainer.loadIndicator('hide')} -InspectorEditorDropdown.prototype.loadOptions=function(initialization){var $form=$(this.selector).closest('form'),data=this.inspector.propertyValues,$select=$(this.selector),currentValue=this.inspector.readProperty(this.fieldDef.property,true),self=this -if(currentValue===undefined) -currentValue=this.inspector.getDefaultValue(this.fieldDef.property) -for(var index in this.inspector.config){var propertyInfo=this.inspector.config[index] -if(propertyInfo.itemType=='property'){if(data[propertyInfo.property]===undefined) -data[propertyInfo.property]=this.inspector.getDefaultValue(propertyInfo.property)}} -if(this.fieldDef.depends) -this.saveDependencyValues() -data.inspectorProperty=this.fieldDef.property -data.inspectorClassName=this.inspector.options.inspectorClass -this.showLoadingIndicator() -$form.request('onInspectableGetOptions',{data:data,success:function(data){$('option',$select).remove() -if(self.fieldDef.placeholder!==undefined) -$select.append($('')) -if(data.options) -$.each(data.options,function(key,obj){$select.append($('').attr('value',obj.value).text(obj.title))}) -var hasOption=$('option[value="'+currentValue+'"]',$select).length>0 -if(hasOption) -$select.val(currentValue) -else -$('option:first-child',$select).attr("selected","selected");self.initialization=initialization -$select.trigger('change') -self.initialization=false -self.hideLoadingIndicator()},error:function(jqXHR,textStatus,errorThrown){alert(jqXHR.responseText.length?jqXHR.responseText:jqXHR.statusText) -self.hideLoadingIndicator()}})} -InspectorEditorDropdown.prototype.onHideExternalParameterEditor=function(){this.loadOptions(false)} -$.oc.inspector.editors.inspectorEditorDropdown=InspectorEditorDropdown;function initInspector($element){var inspector=$element.data('oc.inspector') -if(inspector===undefined){inspector=new Inspector($element.get(0),$element.data()) -inspector.loadConfiguration(function(){inspector.init()}) -$element.data('oc.inspector',inspector)}} -$.fn.inspector=function(option){return this.each(function(){initInspector($(this))})} -$(document).on('click','[data-inspectable]',function(){var $this=$(this) -if($this.data('oc.inspectorVisible')) -return false -initInspector($this) -return false})}(window.jQuery);(function($){$(document).on('keydown','div.custom-checkbox',function(e){if(e.keyCode==32) -e.preventDefault()}) -$(document).on('keyup','div.custom-checkbox',function(e){if(e.keyCode==32){var $cb=$('input',this) -if($cb.data('oc-space-timestamp')==e.timeStamp) -return -$cb.get(0).checked=!$cb.get(0).checked -$cb.data('oc-space-timestamp',e.timeStamp) -$cb.trigger('change') -return false}})})(jQuery);+function($){'use strict';var backdrop='.dropdown-backdrop' -var toggle='[data-toggle=dropdown]' -var Dropdown=function(element){$(element).on('click.bs.dropdown',this.toggle)} -Dropdown.prototype.toggle=function(e){var $this=$(this) -if($this.is('.disabled, :disabled'))return -var $parent=getParent($this) -var isActive=$parent.hasClass('open') -clearMenus() -if(!isActive){if('ontouchstart'in document.documentElement&&!$parent.closest('.navbar-nav').length){$('");row++;} -this.element.innerHTML=html.join("");};this.$textToken={"text":true,"rparen":true,"lparen":true};this.$renderToken=function(stringBuilder,screenColumn,token,value){var self=this;var replaceReg=/\t|&|<|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g;var replaceFunc=function(c,a,b,tabIdx,idx4){if(a){return self.showInvisibles?""+lang.stringRepeat(self.SPACE_CHAR,c.length)+"":c;}else if(c=="&"){return"&";}else if(c=="<"){return"<";}else if(c=="\t"){var tabSize=self.session.getScreenTabSize(screenColumn+tabIdx);screenColumn+=tabSize-1;return self.$tabStrings[tabSize];}else if(c=="\u3000"){var classToUse=self.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk";var space=self.showInvisibles?self.SPACE_CHAR:"";screenColumn+=1;return""+lang.stringRepeat(self.SPACE_CHAR,c.length)+"":c;}else if(c=="&"){return"&";}else if(c=="<"){return"<";}else if(c==">"){return">";}else if(c=="\t"){var tabSize=self.session.getScreenTabSize(screenColumn+tabIdx);screenColumn+=tabSize-1;return self.$tabStrings[tabSize];}else if(c=="\u3000"){var classToUse=self.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk";var space=self.showInvisibles?self.SPACE_CHAR:"";screenColumn+=1;return""+space+"";}else if(b){return""+self.SPACE_CHAR+"";}else{screenColumn+=1;return""+c+"";}};var output=value.replace(replaceReg,replaceFunc);if(!this.$textToken[token.type]){var classes="ace_"+token.type.replace(/\./g," ace_");var style="";if(token.type=="fold") style=" style='width:"+(token.value.length*this.config.characterWidth)+"px;' ";stringBuilder.push("",output,"");} @@ -2367,7 +2375,7 @@ return value;if(value[0]==" "){cols-=cols%this.tabSize;stringBuilder.push(lang.s return value;};this.$renderWrappedLine=function(stringBuilder,tokens,splits,onlyContents){var chars=0;var split=0;var splitChars=splits[0];var screenColumn=0;for(var i=0;i=splitChars){screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value.substring(0,splitChars-chars));value=value.substring(splitChars-chars);chars=splitChars;if(!onlyContents){stringBuilder.push("","
      ");} -split++;screenColumn=0;splitChars=splits[split]||Number.MAX_VALUE;} +stringBuilder.push(lang.stringRepeat("\xa0",splits.indent));split++;screenColumn=0;splitChars=splits[split]||Number.MAX_VALUE;} if(value.length!=0){chars+=value.length;screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value);}}}};this.$renderSimpleLine=function(stringBuilder,tokens){var screenColumn=0;var token=tokens[0];var value=token.value;if(this.displayIndentGuides) value=this.renderIndentGuide(stringBuilder,value);if(value) screenColumn=this.$renderToken(stringBuilder,screenColumn,token,value);for(var i=1;i1){var el=this.cursors.pop();el.parentNode.removeChild(el);return el;}};this.hideCursor=function(){this.isVisible=false;dom.addCssClass(this.element,"ace_hidden-cursors");this.restartTimer();};this.showCursor=function(){this.isVisible=true;dom.removeCssClass(this.element,"ace_hidden-cursors");this.restartTimer();};this.restartTimer=function(){var update=this.$updateCursors;clearInterval(this.intervalId);clearTimeout(this.timeoutId);if(this.smoothBlinking){dom.removeCssClass(this.element,"ace_smooth-blinking");} +cursors[i].style.opacity=val?"":"0";};this.$padding=0;this.setPadding=function(padding){this.$padding=padding;};this.setSession=function(session){this.session=session;};this.setBlinking=function(blinking){if(blinking!=this.isBlinking){this.isBlinking=blinking;this.restartTimer();}};this.setBlinkInterval=function(blinkInterval){if(blinkInterval!=this.blinkInterval){this.blinkInterval=blinkInterval;this.restartTimer();}};this.setSmoothBlinking=function(smoothBlinking){if(smoothBlinking!=this.smoothBlinking&&!isIE8){this.smoothBlinking=smoothBlinking;dom.setCssClass(this.element,"ace_smooth-blinking",smoothBlinking);this.$updateCursors(true);this.$updateCursors=(this.$updateOpacity).bind(this);this.restartTimer();}};this.addCursor=function(){var el=dom.createElement("div");el.className="ace_cursor";this.element.appendChild(el);this.cursors.push(el);return el;};this.removeCursor=function(){if(this.cursors.length>1){var el=this.cursors.pop();el.parentNode.removeChild(el);return el;}};this.hideCursor=function(){this.isVisible=false;dom.addCssClass(this.element,"ace_hidden-cursors");this.restartTimer();};this.showCursor=function(){this.isVisible=true;dom.removeCssClass(this.element,"ace_hidden-cursors");this.restartTimer();};this.restartTimer=function(){var update=this.$updateCursors;clearInterval(this.intervalId);clearTimeout(this.timeoutId);if(this.smoothBlinking){dom.removeCssClass(this.element,"ace_smooth-blinking");} update(true);if(!this.isBlinking||!this.blinkInterval||!this.isVisible) return;if(this.smoothBlinking){setTimeout(function(){dom.addCssClass(this.element,"ace_smooth-blinking");}.bind(this));} var blink=function(){this.timeoutId=setTimeout(function(){update(false);},0.6*this.blinkInterval);}.bind(this);this.intervalId=setInterval(function(){update(true);blink();},this.blinkInterval);blink();};this.getPixelPosition=function(position,onScreen){if(!this.config||!this.session) @@ -2411,8 +2419,7 @@ this.$testFractionalRect();this.$measureNode.innerHTML=lang.stringRepeat("X",CHA CHAR_COUNT=50;else CHAR_COUNT=100;el.parentNode.removeChild(el);};this.$setMeasureNodeStyles=function(style,isRoot){style.width=style.height="auto";style.left=style.top="0px";style.visibility="hidden";style.position="absolute";style.whiteSpace="pre";if(useragent.isIE<8){style["font-family"]="inherit";}else{style.font="inherit";} style.overflow=isRoot?"hidden":"visible";};this.checkForSizeChanges=function(){var size=this.$measureSizes();if(size&&(this.$characterSize.width!==size.width||this.$characterSize.height!==size.height)){this.$measureNode.style.fontWeight="bold";var boldSize=this.$measureSizes();this.$measureNode.style.fontWeight="";this.$characterSize=size;this.charSizes=Object.create(null);this.allowBoldFonts=boldSize&&boldSize.width===size.width&&boldSize.height===size.height;this._emit("changeCharacterSize",{data:size});}};this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer) -return this.$pollSizeChangesTimer;var self=this;return this.$pollSizeChangesTimer=setInterval(function(){self.checkForSizeChanges();},500);};this.setPolling=function(val){if(val){this.$pollSizeChanges();}else{if(this.$pollSizeChangesTimer) -this.$pollSizeChangesTimer;}};this.$measureSizes=function(){if(CHAR_COUNT===50){var rect=null;try{rect=this.$measureNode.getBoundingClientRect();}catch(e){rect={width:0,height:0};};var size={height:rect.height,width:rect.width/CHAR_COUNT};}else{var size={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/CHAR_COUNT};} +return this.$pollSizeChangesTimer;var self=this;return this.$pollSizeChangesTimer=setInterval(function(){self.checkForSizeChanges();},500);};this.setPolling=function(val){if(val){this.$pollSizeChanges();}else if(this.$pollSizeChangesTimer){clearInterval(this.$pollSizeChangesTimer);this.$pollSizeChangesTimer=0;}};this.$measureSizes=function(){if(CHAR_COUNT===50){var rect=null;try{rect=this.$measureNode.getBoundingClientRect();}catch(e){rect={width:0,height:0};};var size={height:rect.height,width:rect.width/CHAR_COUNT};}else{var size={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/CHAR_COUNT};} if(size.width===0||size.height===0) return null;return size;};this.$measureCharWidth=function(ch){this.$main.innerHTML=lang.stringRepeat(ch,CHAR_COUNT);var rect=this.$main.getBoundingClientRect();return rect.width/CHAR_COUNT;};this.getCharacterWidth=function(ch){var w=this.charSizes[ch];if(w===undefined){this.charSizes[ch]=this.$measureCharWidth(ch)/this.$characterSize.width;} return w;};this.destroy=function(){clearInterval(this.$pollSizeChangesTimer);if(this.el&&this.el.parentNode) @@ -2547,6 +2554,7 @@ text-indent: -1em;\ -moz-user-select: text;\ -webkit-user-select: text;\ user-select: text;\ +white-space: pre!important;\ }\ .ace_text-input.ace_composition {\ background: inherit;\ @@ -2590,7 +2598,8 @@ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ -border-left: 2px solid\ +border-left: 2px solid;\ +transform: translatez(0);\ }\ .ace_slim-cursors .ace_cursor {\ border-left-width: 1px;\ @@ -2771,6 +2780,21 @@ background-color: rgba(255, 255, 0,0.2);\ position: absolute;\ z-index: 8;\ }\ +.ace_br1 {border-top-left-radius : 3px;}\ +.ace_br2 {border-top-right-radius : 3px;}\ +.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\ +.ace_br4 {border-bottom-right-radius: 3px;}\ +.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\ +.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\ +.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\ +.ace_br8 {border-bottom-left-radius : 3px;}\ +.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\ +.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\ +.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ ";dom.importCssString(editorCss,"ace_editor.css");var VirtualRenderer=function(container,theme){var _self=this;this.container=container||dom.createElement("div");this.$keepTextAreaAtCursor=!useragent.isOldIE;dom.addCssClass(this.container,"ace_editor");this.setTheme(theme);this.$gutter=dom.createElement("div");this.$gutter.className="ace_gutter";this.container.appendChild(this.$gutter);this.scroller=dom.createElement("div");this.scroller.className="ace_scroller";this.container.appendChild(this.scroller);this.content=dom.createElement("div");this.content.className="ace_content";this.scroller.appendChild(this.content);this.$gutterLayer=new GutterLayer(this.$gutter);this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this));this.$markerBack=new MarkerLayer(this.content);var textLayer=this.$textLayer=new TextLayer(this.content);this.canvas=textLayer.element;this.$markerFront=new MarkerLayer(this.content);this.$cursorLayer=new CursorLayer(this.content);this.$horizScroll=false;this.$vScroll=false;this.scrollBar=this.scrollBarV=new VScrollBar(this.container,this);this.scrollBarH=new HScrollBar(this.container,this);this.scrollBarV.addEventListener("scroll",function(e){if(!_self.$scrollAnimation) _self.session.setScrollTop(e.data-_self.scrollMargin.top);});this.scrollBarH.addEventListener("scroll",function(e){if(!_self.$scrollAnimation) _self.session.setScrollLeft(e.data-_self.scrollMargin.left);});this.scrollTop=0;this.scrollLeft=0;this.cursorPos={row:0,column:0};this.$fontMetrics=new FontMetrics(this.container,500);this.$textLayer.$setFontMetrics(this.$fontMetrics);this.$textLayer.addEventListener("changeCharacterSize",function(e){_self.updateCharacterSize();_self.onResize(true,_self.gutterWidth,_self.$size.width,_self.$size.height);_self._signal("changeCharacterSize",e);});this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:true};this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1};this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0};this.$loop=new RenderLoop(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView);this.$loop.schedule(this.CHANGE_FULL);this.updateCharacterSize();this.setPadding(4);config.resetOptions(this);config._emit("renderer",this);};(function(){this.CHANGE_CURSOR=1;this.CHANGE_MARKER=2;this.CHANGE_GUTTER=4;this.CHANGE_SCROLL=8;this.CHANGE_LINES=16;this.CHANGE_TEXT=32;this.CHANGE_SIZE=64;this.CHANGE_MARKER_BACK=128;this.CHANGE_MARKER_FRONT=256;this.CHANGE_FULL=512;this.CHANGE_H_SCROLL=1024;oop.implement(this,EventEmitter);this.updateCharacterSize=function(){if(this.$textLayer.allowBoldFonts!=this.$allowBoldFonts){this.$allowBoldFonts=this.$textLayer.allowBoldFonts;this.setStyle("ace_nobold",!this.$allowBoldFonts);} @@ -2812,7 +2836,7 @@ this.$changes|=this.$updateCachedSize(true,gutterWidth,this.$size.width,this.$si this.$gutterLineHighlight.style.top=pos.top-this.layerConfig.offset+"px";this.$gutterLineHighlight.style.height=height+"px";};this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl) return;if(!this.$printMarginEl){var containerEl=dom.createElement("div");containerEl.className="ace_layer ace_print-margin-layer";this.$printMarginEl=dom.createElement("div");this.$printMarginEl.className="ace_print-margin";containerEl.appendChild(this.$printMarginEl);this.content.insertBefore(containerEl,this.content.firstChild);} var style=this.$printMarginEl.style;style.left=((this.characterWidth*this.$printMarginColumn)+this.$padding)+"px";style.visibility=this.$showPrintMargin?"visible":"hidden";if(this.session&&this.session.$wrap==-1) -this.adjustWrapLimit();};this.getContainerElement=function(){return this.container;};this.getMouseEventTarget=function(){return this.content;};this.getTextAreaContainer=function(){return this.container;};this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor) +this.adjustWrapLimit();};this.getContainerElement=function(){return this.container;};this.getMouseEventTarget=function(){return this.scroller;};this.getTextAreaContainer=function(){return this.container;};this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor) return;var config=this.layerConfig;var posTop=this.$cursorLayer.$pixelPos.top;var posLeft=this.$cursorLayer.$pixelPos.left;posTop-=config.offset;var style=this.textarea.style;var h=this.lineHeight;if(posTop<0||posTop>config.height-h){style.top=style.left="0";return;} var w=this.characterWidth;if(this.$composition){var val=this.textarea.value.replace(/^\x01+/,"");w*=(this.session.$getStringScreenWidth(val)[0]+2);h+=2;} posLeft-=this.scrollLeft;if(posLeft>this.$size.scrollerWidth-w) @@ -2841,10 +2865,11 @@ this.$gutterLayer.update(config);} if(changes&this.CHANGE_CURSOR){this.$cursorLayer.update(config);this.$moveTextAreaToCursor();this.$highlightGutterLine&&this.$updateGutterLineHighlight();} if(changes&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)){this.$markerFront.update(config);} if(changes&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)){this.$markerBack.update(config);} -this._signal("afterRender");};this.$autosize=function(){var height=this.session.getScreenLength()*this.lineHeight;var maxHeight=this.$maxLines*this.lineHeight;var desiredHeight=Math.max((this.$minLines||1)*this.lineHeight,Math.min(maxHeight,height))+this.scrollMargin.v+(this.$extraHeight||0);var vScroll=height>maxHeight;if(desiredHeight!=this.desiredHeight||this.$size.height!=this.desiredHeight||vScroll!=this.$vScroll){if(vScroll!=this.$vScroll){this.$vScroll=vScroll;this.scrollBarV.setVisible(vScroll);} -var w=this.container.clientWidth;this.container.style.height=desiredHeight+"px";this.$updateCachedSize(true,this.$gutterWidth,w,desiredHeight);this.desiredHeight=desiredHeight;this._signal("autosize");}};this.$computeLayerConfig=function(){if(this.$maxLines&&this.lineHeight>1) -this.$autosize();var session=this.session;var size=this.$size;var hideScrollbars=size.height<=2*this.lineHeight;var screenLines=this.session.getScreenLength();var maxHeight=screenLines*this.lineHeight;var offset=this.scrollTop%this.lineHeight;var minHeight=size.scrollerHeight+this.lineHeight;var longestLine=this.$getLongestLine();var horizScroll=!hideScrollbars&&(this.$hScrollBarAlwaysVisible||size.scrollerWidth-longestLine-2*this.$padding<0);var hScrollChanged=this.$horizScroll!==horizScroll;if(hScrollChanged){this.$horizScroll=horizScroll;this.scrollBarH.setVisible(horizScroll);} -var scrollPastEnd=!this.$maxLines&&this.$scrollPastEnd?(size.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;maxHeight+=scrollPastEnd;this.session.setScrollTop(Math.max(-this.scrollMargin.top,Math.min(this.scrollTop,maxHeight-size.scrollerHeight+this.scrollMargin.bottom)));this.session.setScrollLeft(Math.max(-this.scrollMargin.left,Math.min(this.scrollLeft,longestLine+2*this.$padding-size.scrollerWidth+this.scrollMargin.right)));var vScroll=!hideScrollbars&&(this.$vScrollBarAlwaysVisible||size.scrollerHeight-maxHeight+scrollPastEnd<0||this.scrollTop);var vScrollChanged=this.$vScroll!==vScroll;if(vScrollChanged){this.$vScroll=vScroll;this.scrollBarV.setVisible(vScroll);} +this._signal("afterRender");};this.$autosize=function(){var height=this.session.getScreenLength()*this.lineHeight;var maxHeight=this.$maxLines*this.lineHeight;var desiredHeight=Math.max((this.$minLines||1)*this.lineHeight,Math.min(maxHeight,height))+this.scrollMargin.v+(this.$extraHeight||0);if(this.$horizScroll) +desiredHeight+=this.scrollBarH.getHeight();var vScroll=height>maxHeight;if(desiredHeight!=this.desiredHeight||this.$size.height!=this.desiredHeight||vScroll!=this.$vScroll){if(vScroll!=this.$vScroll){this.$vScroll=vScroll;this.scrollBarV.setVisible(vScroll);} +var w=this.container.clientWidth;this.container.style.height=desiredHeight+"px";this.$updateCachedSize(true,this.$gutterWidth,w,desiredHeight);this.desiredHeight=desiredHeight;this._signal("autosize");}};this.$computeLayerConfig=function(){var session=this.session;var size=this.$size;var hideScrollbars=size.height<=2*this.lineHeight;var screenLines=this.session.getScreenLength();var maxHeight=screenLines*this.lineHeight;var longestLine=this.$getLongestLine();var horizScroll=!hideScrollbars&&(this.$hScrollBarAlwaysVisible||size.scrollerWidth-longestLine-2*this.$padding<0);var hScrollChanged=this.$horizScroll!==horizScroll;if(hScrollChanged){this.$horizScroll=horizScroll;this.scrollBarH.setVisible(horizScroll);} +var vScrollBefore=this.$vScroll;if(this.$maxLines&&this.lineHeight>1) +this.$autosize();var offset=this.scrollTop%this.lineHeight;var minHeight=size.scrollerHeight+this.lineHeight;var scrollPastEnd=!this.$maxLines&&this.$scrollPastEnd?(size.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;maxHeight+=scrollPastEnd;var sm=this.scrollMargin;this.session.setScrollTop(Math.max(-sm.top,Math.min(this.scrollTop,maxHeight-size.scrollerHeight+sm.bottom)));this.session.setScrollLeft(Math.max(-sm.left,Math.min(this.scrollLeft,longestLine+2*this.$padding-size.scrollerWidth+sm.right)));var vScroll=!hideScrollbars&&(this.$vScrollBarAlwaysVisible||size.scrollerHeight-maxHeight+scrollPastEnd<0||this.scrollTop>sm.top);var vScrollChanged=vScrollBefore!==vScroll;if(vScrollChanged){this.$vScroll=vScroll;this.scrollBarV.setVisible(vScroll);} var lineCount=Math.ceil(minHeight/this.lineHeight)-1;var firstRow=Math.max(0,Math.round((this.scrollTop-offset)/this.lineHeight));var lastRow=firstRow+lineCount;var firstRowScreen,firstRowHeight;var lineHeight=this.lineHeight;firstRow=session.screenToDocumentRow(firstRow,0);var foldLine=session.getFoldLine(firstRow);if(foldLine){firstRow=foldLine.start.row;} firstRowScreen=session.documentToScreenRow(firstRow,0);firstRowHeight=session.getRowLength(firstRow)*lineHeight;lastRow=Math.min(session.screenToDocumentRow(lastRow,0),session.getLength()-1);minHeight=size.scrollerHeight+session.getRowLength(lastRow)*lineHeight+ firstRowHeight;offset=this.scrollTop-firstRowScreen*lineHeight;var changes=0;if(this.layerConfig.width!=longestLine) @@ -2902,20 +2927,22 @@ break;case"error":this.reportError(msg.data);break;case"log":window.console&&con this.$doc.off("change",this.changeListener);this.$doc=null;};this.send=function(cmd,args){this.$worker.postMessage({command:cmd,args:args});};this.call=function(cmd,args,callback){if(callback){var id=this.callbackId++;this.callbacks[id]=callback;args.push(id);} this.send(cmd,args);};this.emit=function(event,data){try{this.$worker.postMessage({event:event,data:{data:data.data}});} catch(ex){console.error(ex.stack);}};this.attachToDocument=function(doc){if(this.$doc) -this.terminate();this.$doc=doc;this.call("setValue",[doc.getValue()]);doc.on("change",this.changeListener);};this.changeListener=function(e){if(!this.deltaQueue){this.deltaQueue=[e.data];setTimeout(this.$sendDeltaQueue,0);}else -this.deltaQueue.push(e.data);};this.$sendDeltaQueue=function(){var q=this.deltaQueue;if(!q)return;this.deltaQueue=null;if(q.length>20&&q.length>this.$doc.getLength()>>1){this.call("setValue",[this.$doc.getValue()]);}else +this.terminate();this.$doc=doc;this.call("setValue",[doc.getValue()]);doc.on("change",this.changeListener);};this.changeListener=function(delta){if(!this.deltaQueue){this.deltaQueue=[];setTimeout(this.$sendDeltaQueue,0);} +if(delta.action=="insert") +this.deltaQueue.push(delta.start,delta.lines);else +this.deltaQueue.push(delta.start,delta.end);};this.$sendDeltaQueue=function(){var q=this.deltaQueue;if(!q)return;this.deltaQueue=null;if(q.length>50&&q.length>this.$doc.getLength()>>1){this.call("setValue",[this.$doc.getValue()]);}else this.emit("change",{data:q});};this.$workerBlob=function(workerUrl){var script="importScripts('"+net.qualifyURL(workerUrl)+"');";try{return new Blob([script],{"type":"application/javascript"});}catch(e){var BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder;var blobBuilder=new BlobBuilder();blobBuilder.append(script);return blobBuilder.getBlob("application/javascript");}};}).call(WorkerClient.prototype);var UIWorkerClient=function(topLevelNamespaces,mod,classname){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this);this.changeListener=this.changeListener.bind(this);this.callbackId=1;this.callbacks={};this.messageBuffer=[];var main=null;var emitSync=false;var sender=Object.create(EventEmitter);var _self=this;this.$worker={};this.$worker.terminate=function(){};this.$worker.postMessage=function(e){_self.messageBuffer.push(e);if(main){if(emitSync) setTimeout(processNext);else processNext();}};this.setEmitSync=function(val){emitSync=val};var processNext=function(){var msg=_self.messageBuffer.shift();if(msg.command) main[msg.command].apply(main,msg.args);else if(msg.event) sender._signal(msg.event,msg.data);};sender.postMessage=function(msg){_self.onMessage({data:msg});};sender.callback=function(data,callbackId){this.postMessage({type:"call",id:callbackId,data:data});};sender.emit=function(name,data){this.postMessage({type:"event",name:name,data:data});};config.loadModule(["worker",mod],function(Main){main=new Main[classname](sender);while(_self.messageBuffer.length) processNext();});};UIWorkerClient.prototype=WorkerClient.prototype;exports.UIWorkerClient=UIWorkerClient;exports.WorkerClient=WorkerClient;});ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(require,exports,module){"use strict";var Range=require("./range").Range;var EventEmitter=require("./lib/event_emitter").EventEmitter;var oop=require("./lib/oop");var PlaceHolder=function(session,length,pos,others,mainClass,othersClass){var _self=this;this.length=length;this.session=session;this.doc=session.getDocument();this.mainClass=mainClass;this.othersClass=othersClass;this.$onUpdate=this.onUpdate.bind(this);this.doc.on("change",this.$onUpdate);this.$others=others;this.$onCursorChange=function(){setTimeout(function(){_self.onCursorChange();});};this.$pos=pos;var undoStack=session.getUndoManager().$undoStack||session.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=undoStack.length;this.setup();session.selection.on("changeCursor",this.$onCursorChange);};(function(){oop.implement(this,EventEmitter);this.setup=function(){var _self=this;var doc=this.doc;var session=this.session;var pos=this.$pos;this.selectionBefore=session.selection.toJSON();if(session.selection.inMultiSelectMode) -session.selection.toSingleRange();this.pos=doc.createAnchor(pos.row,pos.column);this.markerId=session.addMarker(new Range(pos.row,pos.column,pos.row,pos.column+this.length),this.mainClass,null,false);this.pos.on("change",function(event){session.removeMarker(_self.markerId);_self.markerId=session.addMarker(new Range(event.value.row,event.value.column,event.value.row,event.value.column+_self.length),_self.mainClass,null,false);});this.others=[];this.$others.forEach(function(other){var anchor=doc.createAnchor(other.row,other.column);_self.others.push(anchor);});session.setUndoSelect(false);};this.showOtherMarkers=function(){if(this.othersActive)return;var session=this.session;var _self=this;this.othersActive=true;this.others.forEach(function(anchor){anchor.markerId=session.addMarker(new Range(anchor.row,anchor.column,anchor.row,anchor.column+_self.length),_self.othersClass,null,false);anchor.on("change",function(event){session.removeMarker(anchor.markerId);anchor.markerId=session.addMarker(new Range(event.value.row,event.value.column,event.value.row,event.value.column+_self.length),_self.othersClass,null,false);});});};this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=false;for(var i=0;i=this.pos.column&&range.start.column<=this.pos.column+this.length+1){var distanceFromStart=range.start.column-this.pos.column;this.length+=lengthDiff;if(!this.session.$fromUndo){if(delta.action==="insertText"){for(var i=this.others.length-1;i>=0;i--){var otherPos=this.others[i];var newPos={row:otherPos.row,column:otherPos.column+distanceFromStart};if(otherPos.row===range.start.row&&range.start.column=0;i--){var otherPos=this.others[i];var newPos={row:otherPos.row,column:otherPos.column+distanceFromStart};if(otherPos.row===range.start.row&&range.start.column=this.pos.column&&range.start.column<=this.pos.column+this.length+1){var distanceFromStart=range.start.column-this.pos.column;this.length+=lengthDiff;if(!this.session.$fromUndo){if(delta.action==='insert'){for(var i=this.others.length-1;i>=0;i--){var otherPos=this.others[i];var newPos={row:otherPos.row,column:otherPos.column+distanceFromStart};if(otherPos.row===range.start.row&&range.start.column=0;i--){var otherPos=this.others[i];var newPos={row:otherPos.row,column:otherPos.column+distanceFromStart};if(otherPos.row===range.start.row&&range.start.column=this.pos.column&&pos.column<=this.pos.column+this.length){this.showOtherMarkers();this._emit("cursorEnter",event);}else{this.hideOtherMarkers();this._emit("cursorLeave",event);}};this.detach=function(){this.session.removeMarker(this.markerId);this.hideOtherMarkers();this.doc.removeEventListener("change",this.$onUpdate);this.session.selection.removeEventListener("changeCursor",this.$onCursorChange);this.pos.detach();for(var i=0;i0);if(fr<0)fr=0;if(lr>=max)lr=max-1;} -var lines=this.session.doc.removeLines(fr,lr);lines=this.$reAlignText(lines,guessRange);this.session.doc.insert({row:fr,column:0},lines.join("\n")+"\n");if(!guessRange){range.start.column=0;range.end.column=lines[lines.length-1].length;} +var lines=this.session.removeFullLines(fr,lr);lines=this.$reAlignText(lines,guessRange);this.session.insert({row:fr,column:0},lines.join("\n")+"\n");if(!guessRange){range.start.column=0;range.end.column=lines[lines.length-1].length;} this.selection.setRange(range);}else{sameRowRanges.forEach(function(r){sel.substractPoint(r.cursor);});var maxCol=0;var minSpace=Infinity;var spaceOffsets=ranges.map(function(r){var p=r.cursor;var line=session.getLine(p.row);var spaceOffset=line.substr(p.column).search(/\S/g);if(spaceOffset==-1) spaceOffset=0;if(p.column>maxCol) maxCol=p.column;if(spaceOffset=0;});if(changedOutside) return this.detach();} var ranges=this.ranges;for(var i=0;i|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:true}],"comment":[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}]};};oop.inherits(LessHighlightRules,TextHighlightRules);exports.LessHighlightRules=LessHighlightRules;});ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(require,exports,module){"use strict";var Range=require("../range").Range;var MatchingBraceOutdent=function(){};(function(){this.checkOutdent=function(line,input){if(!/^\s+$/.test(line)) +return"text";},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z_][a-z0-9-_]*"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:true}],"comment":[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}]};};oop.inherits(LessHighlightRules,TextHighlightRules);exports.LessHighlightRules=LessHighlightRules;});ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(require,exports,module){"use strict";var Range=require("../range").Range;var MatchingBraceOutdent=function(){};(function(){this.checkOutdent=function(line,input){if(!/^\s+$/.test(line)) return false;return/^\s*\}/.test(input);};this.autoOutdent=function(doc,row){var line=doc.getLine(row);var match=line.match(/^(\s*\})/);if(!match)return 0;var column=match[1].length;var openBracePos=doc.findMatchingBracket({row:row,column:column});if(!openBracePos||openBracePos.row==row)return 0;var indent=this.$getIndent(doc.getLine(openBracePos.row));doc.replace(new Range(row,0,row,column-1),indent);};this.$getIndent=function(line){return line.match(/^\s*/)[0];};}).call(MatchingBraceOutdent.prototype);exports.MatchingBraceOutdent=MatchingBraceOutdent;});ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(require,exports,module){"use strict";var oop=require("../../lib/oop");var Behaviour=require("../behaviour").Behaviour;var TokenIterator=require("../../token_iterator").TokenIterator;var lang=require("../../lib/lang");var SAFE_INSERT_IN_TOKENS=["text","paren.rparen","punctuation.operator"];var SAFE_INSERT_BEFORE_TOKENS=["text","paren.rparen","punctuation.operator","comment"];var context;var contextCache={};var initContext=function(editor){var id=-1;if(editor.multiSelect){id=editor.selection.index;if(contextCache.rangeCount!=editor.multiSelect.rangeCount) contextCache={rangeCount:editor.multiSelect.rangeCount};} if(contextCache[id]) @@ -3941,7 +3967,7 @@ return context=contextCache[id];context=contextCache[id]={autoInsertedBrackets:0 var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==='}'){var openBracePos=session.findMatchingBracket({row:cursor.row,column:cursor.column+1},'}');if(!openBracePos) return null;var next_indent=this.$getIndent(session.getLine(openBracePos.row));}else if(closing){var next_indent=this.$getIndent(line);}else{CstyleBehaviour.clearMaybeInsertedClosing();return;} var indent=next_indent+session.getTabString();return{text:'\n'+indent+'\n'+next_indent+closing,selection:[1,indent.length,1,indent.length]};}else{CstyleBehaviour.clearMaybeInsertedClosing();}});this.add("braces","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='{'){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.end.column,range.end.column+1);if(rightChar=='}'){range.end.column++;return range;}else{context.maybeInsertedBrackets--;}}});this.add("parens","insertion",function(state,action,editor,session,text){if(text=='('){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'(',')');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,")");return{text:'()',selection:[1,1]};}}else if(text==')'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==')'){var matching=session.$findOpeningBracket(')',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("parens","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='('){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==')'){range.end.column++;return range;}}});this.add("brackets","insertion",function(state,action,editor,session,text){if(text=='['){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'[',']');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,"]");return{text:'[]',selection:[1,1]};}}else if(text==']'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==']'){var matching=session.$findOpeningBracket(']',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("brackets","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='['){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==']'){range.end.column++;return range;}}});this.add("string_dquotes","insertion",function(state,action,editor,session,text){if(text=='"'||text=="'"){initContext(editor);var quote=text;var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&selected!=="'"&&selected!='"'&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,quote,quote);}else if(!selected){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var leftChar=line.substring(cursor.column-1,cursor.column);var rightChar=line.substring(cursor.column,cursor.column+1);var token=session.getTokenAt(cursor.row,cursor.column);var rightToken=session.getTokenAt(cursor.row,cursor.column+1);if(leftChar=="\\"&&token&&/escape/.test(token.type)) -return null;var stringBefore=token&&/string/.test(token.type);var stringAfter=!rightToken||/string/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) +return null;var stringBefore=token&&/string|escape/.test(token.type);var stringAfter=!rightToken||/string|escape/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) return null;if(stringBefore&&stringAfter) return null;var wordRe=session.$mode.tokenRe;wordRe.lastIndex=0;var isWordBefore=wordRe.test(leftChar);wordRe.lastIndex=0;var isWordAfter=wordRe.test(leftChar);if(isWordBefore||isWordAfter) return null;if(rightChar&&!/[\s;,.})\]\\]/.test(rightChar)) @@ -3979,7 +4005,7 @@ return context=contextCache[id];context=contextCache[id]={autoInsertedBrackets:0 var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==='}'){var openBracePos=session.findMatchingBracket({row:cursor.row,column:cursor.column+1},'}');if(!openBracePos) return null;var next_indent=this.$getIndent(session.getLine(openBracePos.row));}else if(closing){var next_indent=this.$getIndent(line);}else{CstyleBehaviour.clearMaybeInsertedClosing();return;} var indent=next_indent+session.getTabString();return{text:'\n'+indent+'\n'+next_indent+closing,selection:[1,indent.length,1,indent.length]};}else{CstyleBehaviour.clearMaybeInsertedClosing();}});this.add("braces","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='{'){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.end.column,range.end.column+1);if(rightChar=='}'){range.end.column++;return range;}else{context.maybeInsertedBrackets--;}}});this.add("parens","insertion",function(state,action,editor,session,text){if(text=='('){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'(',')');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,")");return{text:'()',selection:[1,1]};}}else if(text==')'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==')'){var matching=session.$findOpeningBracket(')',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("parens","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='('){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==')'){range.end.column++;return range;}}});this.add("brackets","insertion",function(state,action,editor,session,text){if(text=='['){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'[',']');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,"]");return{text:'[]',selection:[1,1]};}}else if(text==']'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==']'){var matching=session.$findOpeningBracket(']',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("brackets","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='['){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==']'){range.end.column++;return range;}}});this.add("string_dquotes","insertion",function(state,action,editor,session,text){if(text=='"'||text=="'"){initContext(editor);var quote=text;var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&selected!=="'"&&selected!='"'&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,quote,quote);}else if(!selected){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var leftChar=line.substring(cursor.column-1,cursor.column);var rightChar=line.substring(cursor.column,cursor.column+1);var token=session.getTokenAt(cursor.row,cursor.column);var rightToken=session.getTokenAt(cursor.row,cursor.column+1);if(leftChar=="\\"&&token&&/escape/.test(token.type)) -return null;var stringBefore=token&&/string/.test(token.type);var stringAfter=!rightToken||/string/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) +return null;var stringBefore=token&&/string|escape/.test(token.type);var stringAfter=!rightToken||/string|escape/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) return null;if(stringBefore&&stringAfter) return null;var wordRe=session.$mode.tokenRe;wordRe.lastIndex=0;var isWordBefore=wordRe.test(leftChar);wordRe.lastIndex=0;var isWordAfter=wordRe.test(leftChar);if(isWordBefore||isWordAfter) return null;if(rightChar&&!/[\s;,.})\]\\]/.test(rightChar)) @@ -4026,7 +4052,7 @@ return context=contextCache[id];context=contextCache[id]={autoInsertedBrackets:0 var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==='}'){var openBracePos=session.findMatchingBracket({row:cursor.row,column:cursor.column+1},'}');if(!openBracePos) return null;var next_indent=this.$getIndent(session.getLine(openBracePos.row));}else if(closing){var next_indent=this.$getIndent(line);}else{CstyleBehaviour.clearMaybeInsertedClosing();return;} var indent=next_indent+session.getTabString();return{text:'\n'+indent+'\n'+next_indent+closing,selection:[1,indent.length,1,indent.length]};}else{CstyleBehaviour.clearMaybeInsertedClosing();}});this.add("braces","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='{'){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.end.column,range.end.column+1);if(rightChar=='}'){range.end.column++;return range;}else{context.maybeInsertedBrackets--;}}});this.add("parens","insertion",function(state,action,editor,session,text){if(text=='('){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'(',')');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,")");return{text:'()',selection:[1,1]};}}else if(text==')'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==')'){var matching=session.$findOpeningBracket(')',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("parens","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='('){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==')'){range.end.column++;return range;}}});this.add("brackets","insertion",function(state,action,editor,session,text){if(text=='['){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'[',']');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,"]");return{text:'[]',selection:[1,1]};}}else if(text==']'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==']'){var matching=session.$findOpeningBracket(']',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("brackets","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='['){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==']'){range.end.column++;return range;}}});this.add("string_dquotes","insertion",function(state,action,editor,session,text){if(text=='"'||text=="'"){initContext(editor);var quote=text;var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&selected!=="'"&&selected!='"'&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,quote,quote);}else if(!selected){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var leftChar=line.substring(cursor.column-1,cursor.column);var rightChar=line.substring(cursor.column,cursor.column+1);var token=session.getTokenAt(cursor.row,cursor.column);var rightToken=session.getTokenAt(cursor.row,cursor.column+1);if(leftChar=="\\"&&token&&/escape/.test(token.type)) -return null;var stringBefore=token&&/string/.test(token.type);var stringAfter=!rightToken||/string/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) +return null;var stringBefore=token&&/string|escape/.test(token.type);var stringAfter=!rightToken||/string|escape/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) return null;if(stringBefore&&stringAfter) return null;var wordRe=session.$mode.tokenRe;wordRe.lastIndex=0;var isWordBefore=wordRe.test(leftChar);wordRe.lastIndex=0;var isWordAfter=wordRe.test(leftChar);if(isWordBefore||isWordAfter) return null;if(rightChar&&!/[\s;,.})\]\\]/.test(rightChar)) @@ -4090,7 +4116,7 @@ return context=contextCache[id];context=contextCache[id]={autoInsertedBrackets:0 var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==='}'){var openBracePos=session.findMatchingBracket({row:cursor.row,column:cursor.column+1},'}');if(!openBracePos) return null;var next_indent=this.$getIndent(session.getLine(openBracePos.row));}else if(closing){var next_indent=this.$getIndent(line);}else{CstyleBehaviour.clearMaybeInsertedClosing();return;} var indent=next_indent+session.getTabString();return{text:'\n'+indent+'\n'+next_indent+closing,selection:[1,indent.length,1,indent.length]};}else{CstyleBehaviour.clearMaybeInsertedClosing();}});this.add("braces","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='{'){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.end.column,range.end.column+1);if(rightChar=='}'){range.end.column++;return range;}else{context.maybeInsertedBrackets--;}}});this.add("parens","insertion",function(state,action,editor,session,text){if(text=='('){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'(',')');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,")");return{text:'()',selection:[1,1]};}}else if(text==')'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==')'){var matching=session.$findOpeningBracket(')',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("parens","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='('){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==')'){range.end.column++;return range;}}});this.add("brackets","insertion",function(state,action,editor,session,text){if(text=='['){initContext(editor);var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,'[',']');}else if(CstyleBehaviour.isSaneInsertion(editor,session)){CstyleBehaviour.recordAutoInsert(editor,session,"]");return{text:'[]',selection:[1,1]};}}else if(text==']'){initContext(editor);var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var rightChar=line.substring(cursor.column,cursor.column+1);if(rightChar==']'){var matching=session.$findOpeningBracket(']',{column:cursor.column+1,row:cursor.row});if(matching!==null&&CstyleBehaviour.isAutoInsertedClosing(cursor,line,text)){CstyleBehaviour.popAutoInsertedClosing();return{text:'',selection:[1,1]};}}}});this.add("brackets","deletion",function(state,action,editor,session,range){var selected=session.doc.getTextRange(range);if(!range.isMultiLine()&&selected=='['){initContext(editor);var line=session.doc.getLine(range.start.row);var rightChar=line.substring(range.start.column+1,range.start.column+2);if(rightChar==']'){range.end.column++;return range;}}});this.add("string_dquotes","insertion",function(state,action,editor,session,text){if(text=='"'||text=="'"){initContext(editor);var quote=text;var selection=editor.getSelectionRange();var selected=session.doc.getTextRange(selection);if(selected!==""&&selected!=="'"&&selected!='"'&&editor.getWrapBehavioursEnabled()){return getWrapped(selection,selected,quote,quote);}else if(!selected){var cursor=editor.getCursorPosition();var line=session.doc.getLine(cursor.row);var leftChar=line.substring(cursor.column-1,cursor.column);var rightChar=line.substring(cursor.column,cursor.column+1);var token=session.getTokenAt(cursor.row,cursor.column);var rightToken=session.getTokenAt(cursor.row,cursor.column+1);if(leftChar=="\\"&&token&&/escape/.test(token.type)) -return null;var stringBefore=token&&/string/.test(token.type);var stringAfter=!rightToken||/string/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) +return null;var stringBefore=token&&/string|escape/.test(token.type);var stringAfter=!rightToken||/string|escape/.test(rightToken.type);var pair;if(rightChar==quote){pair=stringBefore!==stringAfter;}else{if(stringBefore&&!stringAfter) return null;if(stringBefore&&stringAfter) return null;var wordRe=session.$mode.tokenRe;wordRe.lastIndex=0;var isWordBefore=wordRe.test(leftChar);wordRe.lastIndex=0;var isWordAfter=wordRe.test(leftChar);if(isWordBefore||isWordAfter) return null;if(rightChar&&!/[\s;,.})\]\\]/.test(rightChar)) diff --git a/modules/backend/formwidgets/codeeditor/assets/js/build.js b/modules/backend/formwidgets/codeeditor/assets/js/build.js index 635bf6e71..931a6fc5d 100644 --- a/modules/backend/formwidgets/codeeditor/assets/js/build.js +++ b/modules/backend/formwidgets/codeeditor/assets/js/build.js @@ -6,7 +6,7 @@ * * @see build-min.js * - * Current Ace build v1.1.9 using "src-noconflict" + * Current Ace build v1.2.0 using "src-noconflict" * https://github.com/ajaxorg/ace-builds/ * diff --git a/modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less b/modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less index d13d3cb70..dcaca63de 100644 --- a/modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less +++ b/modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less @@ -18,7 +18,7 @@ &.size-giant { min-height: @size-giant; } .ace_search { - font-family: @font-family-sans-serif; + font-family: @font-family-base; font-size: 14px; color: @text-color; z-index: @codeeditor-zindex + 3; diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js index edcdb4a02..251ba54f7 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js @@ -1035,6 +1035,9 @@ exports.importCssString = function importCssString(cssText, id, doc) { var style; + if (id) + cssText += "\n/*# sourceURL=ace/css/" + id + " */"; + if (doc.createStyleSheet) { style = doc.createStyleSheet(); style.cssText = cssText; @@ -1081,42 +1084,6 @@ exports.getInnerHeight = function(element) { ); }; - -if (typeof document == "undefined") - return; - -if (window.pageYOffset !== undefined) { - exports.getPageScrollTop = function() { - return window.pageYOffset; - }; - - exports.getPageScrollLeft = function() { - return window.pageXOffset; - }; -} -else { - exports.getPageScrollTop = function() { - return document.body.scrollTop; - }; - - exports.getPageScrollLeft = function() { - return document.body.scrollLeft; - }; -} - -if (window.getComputedStyle) - exports.computedStyle = function(element, style) { - if (style) - return (window.getComputedStyle(element, "") || {})[style] || ""; - return window.getComputedStyle(element, "") || {}; - }; -else - exports.computedStyle = function(element, style) { - if (style) - return element.currentStyle[style]; - return element.currentStyle; - }; - exports.scrollbarWidth = function(document) { var inner = exports.createElement("ace_inner"); inner.style.width = "100%"; @@ -1153,6 +1120,43 @@ exports.scrollbarWidth = function(document) { return noScrollbar-withScrollbar; }; + +if (typeof document == "undefined") { + exports.importCssString = function() {}; + return; +} + +if (window.pageYOffset !== undefined) { + exports.getPageScrollTop = function() { + return window.pageYOffset; + }; + + exports.getPageScrollLeft = function() { + return window.pageXOffset; + }; +} +else { + exports.getPageScrollTop = function() { + return document.body.scrollTop; + }; + + exports.getPageScrollLeft = function() { + return document.body.scrollLeft; + }; +} + +if (window.getComputedStyle) + exports.computedStyle = function(element, style) { + if (style) + return (window.getComputedStyle(element, "") || {})[style] || ""; + return window.getComputedStyle(element, "") || {}; + }; +else + exports.computedStyle = function(element, style) { + if (style) + return element.currentStyle[style]; + return element.currentStyle; + }; exports.setInnerHtml = function(el, innerHtml) { var element = el.cloneNode(false);//document.createElement("div"); element.innerHTML = innerHtml; @@ -1451,6 +1455,29 @@ exports.capture = function(el, eventHandler, releaseCaptureHandler) { return onMouseUp; }; +exports.addTouchMoveListener = function (el, callback) { + if ("ontouchmove" in el) { + var startx, starty; + exports.addListener(el, "touchstart", function (e) { + var touchObj = e.changedTouches[0]; + startx = touchObj.clientX; + starty = touchObj.clientY; + }); + exports.addListener(el, "touchmove", function (e) { + var factor = 1, + touchObj = e.changedTouches[0]; + + e.wheelX = -(touchObj.clientX - startx) / factor; + e.wheelY = -(touchObj.clientY - starty) / factor; + + startx = touchObj.clientX; + starty = touchObj.clientY; + + callback(e); + }); + } +}; + exports.addMouseWheelListener = function(el, callback) { if ("onmousewheel" in el) { exports.addListener(el, "mousewheel", function(e) { @@ -1580,7 +1607,7 @@ function normalizeCommandKeys(callback, e, keyCode) { if (pressedKeys[keyCode] == 1) ts = e.timeStamp; } else if (keyCode === 18 && hashId === 3 && location === 2) { - var dt = e.timestamp - ts; + var dt = e.timeStamp - ts; if (dt < 50) pressedKeys.altGr = true; } @@ -1652,15 +1679,16 @@ exports.addCommandKeyListener = function(el, callback) { }); if (!pressedKeys) { - pressedKeys = Object.create(null); - addListener(window, "focus", function(e) { - pressedKeys = Object.create(null); - }); + resetPressedKeys(); + addListener(window, "focus", resetPressedKeys); } } }; +function resetPressedKeys(e) { + pressedKeys = Object.create(null); +} -if (window.postMessage && !useragent.isOldIE) { +if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { var postMessageId = 1; exports.nextTick = function(callback, win) { win = win || window; @@ -1677,11 +1705,11 @@ if (window.postMessage && !useragent.isOldIE) { } -exports.nextFrame = window.requestAnimationFrame || - window.mozRequestAnimationFrame || - window.webkitRequestAnimationFrame || - window.msRequestAnimationFrame || - window.oRequestAnimationFrame; +exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + || window.msRequestAnimationFrame + || window.oRequestAnimationFrame); if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window); @@ -1744,20 +1772,24 @@ exports.copyArray = function(array){ return copy; }; -exports.deepCopy = function (obj) { +exports.deepCopy = function deepCopy(obj) { if (typeof obj !== "object" || !obj) return obj; + var copy; + if (Array.isArray(obj)) { + copy = []; + for (var key = 0; key < obj.length; key++) { + copy[key] = deepCopy(obj[key]); + } + return copy; + } var cons = obj.constructor; if (cons === RegExp) return obj; - var copy = cons(); + copy = cons(); for (var key in obj) { - if (typeof obj[key] === "object") { - copy[key] = exports.deepCopy(obj[key]); - } else { - copy[key] = obj[key]; - } + copy[key] = deepCopy(obj[key]); } return copy; }; @@ -1923,14 +1955,19 @@ var TextInput = function(parentNode, host) { }); this.focus = function() { if (tempStyle) return text.focus(); + var top = text.style.top; text.style.position = "fixed"; text.style.top = "-1000px"; text.focus(); setTimeout(function() { text.style.position = ""; + if (text.style.top == "-1000px") + text.style.top = top; }, 0); }; - this.blur = function() { text.blur(); }; + this.blur = function() { + text.blur(); + }; this.isFocused = function() { return isFocused; }; @@ -2135,7 +2172,7 @@ var TextInput = function(parentNode, host) { var data = handleClipboardData(e); if (typeof data == "string") { if (data) - host.onPaste(data); + host.onPaste(data, e); if (useragent.isIE) setTimeout(resetSelection); event.preventDefault(e); @@ -2301,7 +2338,7 @@ var TextInput = function(parentNode, host) { this.onContextMenuClose = onContextMenuClose; var closeTimeout; function onContextMenuClose() { - clearTimeout(closeTimeout) + clearTimeout(closeTimeout); closeTimeout = setTimeout(function () { if (tempStyle) { text.style.cssText = tempStyle; @@ -2343,6 +2380,7 @@ function DefaultHandlers(mouseHandler) { editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler)); + editor.setDefaultHandler("touchmove", this.onTouchMove.bind(mouseHandler)); var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd", "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"]; @@ -2544,6 +2582,19 @@ function DefaultHandlers(mouseHandler) { return ev.stop(); } }; + + this.onTouchMove = function (ev) { + var t = ev.domEvent.timeStamp; + var dt = t - (this.$lastScrollTime || 0); + + var editor = this.editor; + var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + if (isScrolable || dt < 200) { + this.$lastScrollTime = t; + editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); + return ev.stop(); + } + }; }).call(DefaultHandlers.prototype); @@ -3538,7 +3589,7 @@ var AppConfig = require("./lib/app_config").AppConfig; module.exports = exports = new AppConfig(); var global = (function() { - return this; + return this || typeof window != "undefined" && window; })(); var options = { @@ -3730,6 +3781,7 @@ var MouseHandler = function(editor) { } } event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel")); + event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, "touchmove")); var gutterEl = editor.renderer.$gutter; event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown")); @@ -3781,6 +3833,14 @@ var MouseHandler = function(editor) { this.editor._emit(name, mouseEvent); }; + + this.onTouchMove = function (name, e) { + var mouseEvent = new MouseEvent(e, this.editor); + mouseEvent.speed = 1;//this.$scrollSpeed * 2; + mouseEvent.wheelX = e.wheelX; + mouseEvent.wheelY = e.wheelY; + this.editor._emit(name, mouseEvent); + }; this.setState = function(state) { this.state = state; @@ -4852,7 +4912,7 @@ var Selection = function(session) { this.toSingleRange(data[0]); for (var i = data.length; i--; ) { var r = Range.fromPoints(data[i].start, data[i].end); - if (data.isBackwards) + if (data[i].isBackwards) r.cursor = r.start; this.addRange(r, true); } @@ -5567,6 +5627,9 @@ var TokenIterator = function(session, initialRow, initialColumn) { return column; }; + this.getCurrentTokenPosition = function() { + return {row: this.$row, column: this.getCurrentTokenColumn()}; + }; }).call(TokenIterator.prototype); @@ -5926,6 +5989,71 @@ var Mode = function() { exports.Mode = Mode; }); +ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { +"use strict"; + +function throwDeltaError(delta, errorText){ + console.log("Invalid Delta:", delta); + throw "Invalid Delta: " + errorText; +} + +function positionInDocument(docLines, position) { + return position.row >= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; +} + +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); +} + +exports.applyDelta = function(docLines, delta, doNotValidate) { + + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } else { + docLines.splice( + row, endRow - row + 1, + line.substring(0, startColumn) + docLines[endRow].substring(endColumn) + ); + } + break; + } +} +}); + ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; @@ -5952,70 +6080,46 @@ var Anchor = exports.Anchor = function(doc, row, column) { return this.document; }; this.$insertRight = false; - this.onChange = function(e) { - var delta = e.data; - var range = delta.range; - - if (range.start.row == range.end.row && range.start.row != this.row) + this.onChange = function(delta) { + if (delta.start.row == delta.end.row && delta.start.row != this.row) return; - if (range.start.row > this.row) + if (delta.start.row > this.row) return; - - if (range.start.row == this.row && range.start.column > this.column) - return; - - var row = this.row; - var column = this.column; - var start = range.start; - var end = range.end; - - if (delta.action === "insertText") { - if (start.row === row && start.column <= column) { - if (start.column === column && this.$insertRight) { - } else if (start.row === end.row) { - column += end.column - start.column; - } else { - column -= start.column; - row += end.row - start.row; - } - } else if (start.row !== end.row && start.row < row) { - row += end.row - start.row; - } - } else if (delta.action === "insertLines") { - if (start.row === row && column === 0 && this.$insertRight) { - } - else if (start.row <= row) { - row += end.row - start.row; - } - } else if (delta.action === "removeText") { - if (start.row === row && start.column < column) { - if (end.column >= column) - column = start.column; - else - column = Math.max(0, column - (end.column - start.column)); - - } else if (start.row !== end.row && start.row < row) { - if (end.row === row) - column = Math.max(0, column - end.column) + start.column; - row -= (end.row - start.row); - } else if (end.row === row) { - row -= end.row - start.row; - column = Math.max(0, column - end.column) + start.column; - } - } else if (delta.action == "removeLines") { - if (start.row <= row) { - if (end.row <= row) - row -= end.row - start.row; - else { - row = start.row; - column = 0; - } - } - } - - this.setPosition(row, column, true); + + var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); + this.setPosition(point.row, point.column, true); }; + + function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); + } + + function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + + return { + row: deltaStart.row, + column: deltaStart.column + }; + } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { @@ -6075,22 +6179,23 @@ var Anchor = exports.Anchor = function(doc, row, column) { }); -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; -var Document = function(text) { - this.$lines = []; - if (text.length === 0) { +var Document = function(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { this.$lines = [""]; - } else if (Array.isArray(text)) { - this._insertLines(0, text); + } else if (Array.isArray(textOrLines)) { + this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { - this.insert({row: 0, column:0}, text); + this.insert({row: 0, column:0}, textOrLines); } }; @@ -6098,9 +6203,9 @@ var Document = function(text) { oop.implement(this, EventEmitter); this.setValue = function(text) { - var len = this.getLength(); - this.remove(new Range(0, 0, len, this.getLine(len-1).length)); - this.insert({row: 0, column:0}, text); + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); @@ -6108,14 +6213,15 @@ var Document = function(text) { this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; - if ("aaa".split(/a/).length === 0) + if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; - else + } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; + } this.$detectNewLine = function(text) { @@ -6162,252 +6268,247 @@ var Document = function(text) { return this.$lines.length; }; this.getTextRange = function(range) { - if (range.start.row == range.end.row) { - return this.getLine(range.start.row) - .substring(range.start.column, range.end.column); - } - var lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - return lines.join(this.getNewLineCharacter()); + return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; - + this.getLinesForRange = function(range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + this.insertLines = function(row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + this.removeLines = function(firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + this.insertNewLine = function(position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + this.insert = function(position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + + return this.insertMergedLines(position, this.$split(text)); + }; + this.insertInLine = function(position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + + return this.clonePos(end); + }; + + this.clippedPos = function(row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } else if (row < 0) { + row = 0; + } else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return {row: row, column: column}; + }; + + this.clonePos = function(pos) { + return {row: pos.row, column: pos.column}; + }; + + this.pos = function(row, column) { + return {row: row, column: column}; + }; + this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); - position.column = this.getLine(length-1).length; - } else if (position.row < 0) - position.row = 0; - return position; - }; - this.insert = function(position, text) { - if (!text || text.length === 0) - return position; - - position = this.$clipPosition(position); - if (this.getLength() <= 1) - this.$detectNewLine(text); - - var lines = this.$split(text); - var firstLine = lines.splice(0, 1)[0]; - var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; - - position = this.insertInLine(position, firstLine); - if (lastLine !== null) { - position = this.insertNewLine(position); // terminate first line - position = this._insertLines(position.row, lines); - position = this.insertInLine(position, lastLine || ""); + position.column = this.getLine(length - 1).length; + } else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; - this.insertLines = function(row, lines) { - if (row >= this.getLength()) - return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); - return this._insertLines(Math.max(row, 0), lines); - }; - this._insertLines = function(row, lines) { - if (lines.length == 0) - return {row: row, column: 0}; - while (lines.length > 20000) { - var end = this._insertLines(row, lines.slice(0, 20000)); - lines = lines.slice(20000); - row = end.row; + this.insertFullLines = function(row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; } - - var args = [row, 0]; - args.push.apply(args, lines); - this.$lines.splice.apply(this.$lines, args); - - var range = new Range(row, 0, row + lines.length, 0); - var delta = { - action: "insertLines", - range: range, + this.insertMergedLines({row: row, column: column}, lines); + }; + this.insertMergedLines = function(position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + + this.applyDelta({ + start: start, + end: end, + action: "insert", lines: lines - }; - this._signal("change", { data: delta }); - return range.end; - }; - this.insertNewLine = function(position) { - position = this.$clipPosition(position); - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column); - this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); - - var end = { - row : position.row + 1, - column : 0 - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); - - return end; - }; - this.insertInLine = function(position, text) { - if (text.length == 0) - return position; - - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column) + text - + line.substring(position.column); - - var end = { - row : position.row, - column : position.column + text.length - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: text - }; - this._signal("change", { data: delta }); - - return end; + }); + + return this.clonePos(end); }; this.remove = function(range) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - range.start = this.$clipPosition(range.start); - range.end = this.$clipPosition(range.end); - - if (range.isEmpty()) - return range.start; - - var firstRow = range.start.row; - var lastRow = range.end.row; - - if (range.isMultiLine()) { - var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; - var lastFullRow = lastRow - 1; - - if (range.end.column > 0) - this.removeInLine(lastRow, 0, range.end.column); - - if (lastFullRow >= firstFullRow) - this._removeLines(firstFullRow, lastFullRow); - - if (firstFullRow != firstRow) { - this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); - this.removeNewLine(range.start.row); - } - } - else { - this.removeInLine(firstRow, range.start.column, range.end.column); - } - return range.start; + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }); + return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { - if (startColumn == endColumn) - return; - - var range = new Range(row, startColumn, row, endColumn); - var line = this.getLine(row); - var removed = line.substring(startColumn, endColumn); - var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); - this.$lines.splice(row, 1, newLine); - - var delta = { - action: "removeText", - range: range, - text: removed - }; - this._signal("change", { data: delta }); - return range.start; + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }, true); + + return this.clonePos(start); }; - this.removeLines = function(firstRow, lastRow) { - if (firstRow < 0 || lastRow >= this.getLength()) - return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); - return this._removeLines(firstRow, lastRow); - }; - - this._removeLines = function(firstRow, lastRow) { - var range = new Range(firstRow, 0, lastRow + 1, 0); - var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); - - var delta = { - action: "removeLines", - range: range, - nl: this.getNewLineCharacter(), - lines: removed - }; - this._signal("change", { data: delta }); - return removed; + this.removeFullLines = function(firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); + var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); + var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); + var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; }; this.removeNewLine = function(row) { - var firstLine = this.getLine(row); - var secondLine = this.getLine(row+1); - - var range = new Range(row, firstLine.length, row+1, 0); - var line = firstLine + secondLine; - - this.$lines.splice(row, 2, line); - - var delta = { - action: "removeText", - range: range, - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } }; this.replace = function(range, text) { - if (!(range instanceof Range)) + if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); - if (text.length == 0 && range.isEmpty()) + if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); + var end; if (text) { - var end = this.insert(range.start, text); + end = this.insert(range.start, text); } else { end = range.start; } - + return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { - var delta = deltas[i]; - - var range = Range.fromPoints(delta.range.start, delta.range.end); - - if (delta.action == "insertLines") - this._removeLines(range.start.row, range.end.row - 1); - else if (delta.action == "insertText") - this.remove(range); - else if (delta.action == "removeLines") - this._insertLines(range.start.row, delta.lines); - else if (delta.action == "removeText") - this.insert(range.start, delta.text); + this.revertDelta(deltas[i]); } }; + this.applyDelta = function(delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + + if (isInsert && delta.lines.length > 20000) + this.$splitAndapplyLargeDelta(delta, 20000); + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + }; + + this.$splitAndapplyLargeDelta = function(delta, MAX) { + var lines = delta.lines; + var l = lines.length; + var row = delta.start.row; + var column = delta.start.column; + var from = 0, to = 0; + do { + from = to; + to += MAX - 1; + var chunk = lines.slice(from, to); + if (to > l) { + delta.lines = chunk; + delta.start.row = row + from; + delta.start.column = column; + break; + } + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } while(true); + }; + this.revertDelta = function(delta) { + this.applyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; @@ -6457,11 +6558,10 @@ var BackgroundTokenizer = function(tokenizer, editor) { var endLine = -1; var doc = self.doc; + var startLine = currentLine; while (self.lines[currentLine]) currentLine++; - - var startLine = currentLine; - + var len = doc.getLength(); var processedLines = 0; self.running = false; @@ -6523,13 +6623,12 @@ var BackgroundTokenizer = function(tokenizer, editor) { } this.$updateOnChange = function(delta) { - var range = delta.range; - var startRow = range.start.row; - var len = range.end.row - startRow; + var startRow = delta.start.row; + var len = delta.end.row - startRow; if (len === 0) { this.lines[startRow] = null; - } else if (delta.action == "removeText" || delta.action == "removeLines") { + } else if (delta.action == "remove") { this.lines.splice(startRow, len + 1, null); this.states.splice(startRow, len + 1, null); } else { @@ -7001,14 +7100,13 @@ var RangeList = function() { this.session = null; }; - this.$onChange = function(e) { - var changeRange = e.data.range; - if (e.data.action[0] == "i"){ - var start = changeRange.start; - var end = changeRange.end; + this.$onChange = function(delta) { + if (delta.action == "insert"){ + var start = delta.start; + var end = delta.end; } else { - var end = changeRange.start; - var start = changeRange.end; + var end = delta.start; + var start = delta.end; } var startRow = start.row; var endRow = end.row; @@ -7871,15 +7969,13 @@ function Folding() { } }; - this.updateFoldWidgets = function(e) { - var delta = e.data; - var range = delta.range; - var firstRow = range.start.row; - var len = range.end.row - firstRow; + this.updateFoldWidgets = function(delta) { + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; if (len === 0) { this.foldWidgets[firstRow] = null; - } else if (delta.action == "removeText" || delta.action == "removeLines") { + } else if (delta.action == 'remove') { this.foldWidgets.splice(firstRow, len + 1, null); } else { var args = Array(len + 1); @@ -7989,7 +8085,7 @@ function BracketMatch() { typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") - .replace(/\b(?:end|start|begin)\b/, "") + .replace(/\b(?:end)\b/, "(?:start|begin|end)") + ")+" ); } @@ -8041,7 +8137,7 @@ function BracketMatch() { typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") - .replace(/\b(?:end|start|begin)\b/, "") + .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") + ")+" ); } @@ -8107,7 +8203,7 @@ var EditSession = function(text, mode) { this.$foldData = []; this.$foldData.toString = function() { return this.join("\n"); - } + }; this.on("changeFold", this.onChangeFold.bind(this)); this.$onChange = this.onChange.bind(this); @@ -8188,13 +8284,12 @@ var EditSession = function(text, mode) { this.$resetRowCache(fold.start.row); }; - this.onChange = function(e) { - var delta = e.data; + this.onChange = function(delta) { this.$modified = true; - this.$resetRowCache(delta.range.start.row); + this.$resetRowCache(delta.start.row); - var removedFolds = this.$updateInternalDataOnChange(e); + var removedFolds = this.$updateInternalDataOnChange(delta); if (!this.$fromUndo && this.$undoManager && !delta.ignore) { this.$deltasDoc.push(delta); if (removedFolds && removedFolds.length != 0) { @@ -8208,7 +8303,7 @@ var EditSession = function(text, mode) { } this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta); - this._signal("change", e); + this._signal("change", delta); }; this.setValue = function(text) { this.doc.setValue(text); @@ -8724,6 +8819,9 @@ var EditSession = function(text, mode) { this.remove = function(range) { return this.doc.remove(range); }; + this.removeFullLines = function(firstRow, lastRow){ + return this.doc.removeFullLines(firstRow, lastRow); + }; this.undoChanges = function(deltas, dontSelect) { if (!deltas.length) return; @@ -8776,39 +8874,36 @@ var EditSession = function(text, mode) { this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { function isInsert(delta) { - var insert = - delta.action === "insertText" || delta.action === "insertLines"; - return isUndo ? !insert : insert; + return isUndo ? delta.action !== "insert" : delta.action === "insert"; } var delta = deltas[0]; var range, point; var lastDeltaIsInsert = false; if (isInsert(delta)) { - range = Range.fromPoints(delta.range.start, delta.range.end); + range = Range.fromPoints(delta.start, delta.end); lastDeltaIsInsert = true; } else { - range = Range.fromPoints(delta.range.start, delta.range.start); + range = Range.fromPoints(delta.start, delta.start); lastDeltaIsInsert = false; } for (var i = 1; i < deltas.length; i++) { delta = deltas[i]; if (isInsert(delta)) { - point = delta.range.start; + point = delta.start; if (range.compare(point.row, point.column) == -1) { - range.setStart(delta.range.start); + range.setStart(point); } - point = delta.range.end; + point = delta.end; if (range.compare(point.row, point.column) == 1) { - range.setEnd(delta.range.end); + range.setEnd(point); } lastDeltaIsInsert = true; } else { - point = delta.range.start; + point = delta.start; if (range.compare(point.row, point.column) == -1) { - range = - Range.fromPoints(delta.range.start, delta.range.start); + range = Range.fromPoints(delta.start, delta.start); } lastDeltaIsInsert = false; } @@ -8876,7 +8971,7 @@ var EditSession = function(text, mode) { this.indentRows = function(startRow, endRow, indentString) { indentString = indentString.replace(/\t/g, this.getTabString()); for (var row=startRow; row<=endRow; row++) - this.insert({row: row, column:0}, indentString); + this.doc.insertInLine({row: row, column: 0}, indentString); }; this.outdentRows = function (range) { var rowRange = range.collapseRows(); @@ -8926,11 +9021,11 @@ var EditSession = function(text, mode) { x.end.row += diff; return x; }); - + var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) - : this.doc.removeLines(firstRow, lastRow); - this.doc.insertLines(firstRow+diff, lines); + : this.doc.removeFullLines(firstRow, lastRow); + this.doc.insertFullLines(firstRow+diff, lines); folds.length && this.addFolds(folds); return diff; }; @@ -9072,34 +9167,23 @@ var EditSession = function(text, mode) { }; }; - this.$updateInternalDataOnChange = function(e) { + this.$updateInternalDataOnChange = function(delta) { var useWrapMode = this.$useWrapMode; - var len; - var action = e.data.action; - var firstRow = e.data.range.start.row; - var lastRow = e.data.range.end.row; - var start = e.data.range.start; - var end = e.data.range.end; + var action = delta.action; + var start = delta.start; + var end = delta.end; + var firstRow = start.row; + var lastRow = end.row; + var len = lastRow - firstRow; var removedFolds = null; - - if (action.indexOf("Lines") != -1) { - if (action == "insertLines") { - lastRow = firstRow + (e.data.lines.length); - } else { - lastRow = firstRow; - } - len = e.data.lines ? e.data.lines.length : lastRow - firstRow; - } else { - len = lastRow - firstRow; - } - + this.$updating = true; if (len != 0) { - if (action.indexOf("remove") != -1) { + if (action === "remove") { this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); var foldLines = this.$foldData; - removedFolds = this.getFoldsInRange(e.data.range); + removedFolds = this.getFoldsInRange(delta); this.removeFolds(removedFolds); var foldLine = this.getFoldLine(end.row); @@ -9156,9 +9240,9 @@ var EditSession = function(text, mode) { } } } else { - len = Math.abs(e.data.range.start.column - e.data.range.end.column); - if (action.indexOf("remove") != -1) { - removedFolds = this.getFoldsInRange(e.data.range); + len = Math.abs(delta.start.column - delta.end.column); + if (action === "remove") { + removedFolds = this.getFoldsInRange(delta); this.removeFolds(removedFolds); len = -len; @@ -9240,7 +9324,7 @@ var EditSession = function(text, mode) { TAB_SPACE = 12; - this.$computeWrapSplits = function(tokens, wrapLimit) { + this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) { if (tokens.length == 0) { return []; } @@ -9251,6 +9335,31 @@ var EditSession = function(text, mode) { var isCode = this.$wrapAsCode; + var indentedSoftWrap = this.$indentedSoftWrap; + var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) + || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); + + function getWrapIndent() { + var indentation = 0; + if (maxIndent === 0) + return indentation; + if (indentedSoftWrap) { + for (var i = 0; i < tokens.length; i++) { + var token = tokens[i]; + if (token == SPACE) + indentation += 1; + else if (token == TAB) + indentation += tabSize; + else if (token == TAB_SPACE) + continue; + else + break; + } + } + if (isCode && indentedSoftWrap !== false) + indentation += tabSize; + return Math.min(indentation, maxIndent); + } function addSplit(screenPos) { var displayed = tokens.slice(lastSplit, screenPos); var len = displayed.length; @@ -9262,13 +9371,17 @@ var EditSession = function(text, mode) { len -= 1; }); + if (!splits.length) { + indent = getWrapIndent(); + splits.indent = indent; + } lastDocSplit += len; splits.push(lastDocSplit); lastSplit = screenPos; } - - while (displayLength - lastSplit > wrapLimit) { - var split = lastSplit + wrapLimit; + var indent = 0; + while (displayLength - lastSplit > wrapLimit - indent) { + var split = lastSplit + wrapLimit - indent; if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { addSplit(split); continue; @@ -9295,7 +9408,7 @@ var EditSession = function(text, mode) { addSplit(split); continue; } - var minSplit = Math.max(split - (isCode ? 10 : wrapLimit-(wrapLimit>>2)), lastSplit - 1); + var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1); while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } @@ -9318,7 +9431,7 @@ var EditSession = function(text, mode) { split = lastSplit + wrapLimit; if (tokens[split] == CHAR_EXT) split--; - addSplit(split); + addSplit(split - indent); } return splits; }; @@ -9394,6 +9507,16 @@ var EditSession = function(text, mode) { return this.$wrapData[row].length + 1; } }; + + this.getRowWrapIndent = function(screenRow) { + if (this.$useWrapMode) { + var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); + var splits = this.$wrapData[pos.row]; + return splits.length && splits[0] < pos.column ? splits.indent : 0; + } else { + return 0; + } + } this.getScreenLastRowColumn = function(screenRow) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); return this.documentToScreenColumn(pos.row, pos.column); @@ -9484,20 +9607,21 @@ var EditSession = function(text, mode) { line = this.getLine(docRow); foldLine = null; } - + var wrapIndent = 0; if (this.$useWrapMode) { var splits = this.$wrapData[docRow]; if (splits) { var splitIndex = Math.floor(screenRow - row); column = splits[splitIndex]; if(splitIndex > 0 && splits.length) { + wrapIndent = splits.indent; docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; line = line.substring(docColumn); } } } - docColumn += this.$getStringScreenWidth(line, screenColumn)[1]; + docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; if (this.$useWrapMode && docColumn >= column) docColumn = column - 1; @@ -9569,6 +9693,7 @@ var EditSession = function(text, mode) { textLine = this.getLine(docRow).substring(0, docColumn); foldStartRow = docRow; } + var wrapIndent = 0; if (this.$useWrapMode) { var wrapRow = this.$wrapData[foldStartRow]; if (wrapRow) { @@ -9580,12 +9705,13 @@ var EditSession = function(text, mode) { textLine = textLine.substring( wrapRow[screenRowOffset - 1] || 0, textLine.length ); + wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; } } return { row: screenRow, - column: this.$getStringScreenWidth(textLine)[0] + column: wrapIndent + this.$getStringScreenWidth(textLine)[0] }; }; this.documentToScreenColumn = function(row, docColumn) { @@ -9730,6 +9856,7 @@ config.defineOptions(EditSession.prototype, "session", { }, initialValue: "auto" }, + indentedSoftWrap: { initialValue: true }, firstLineNumber: { set: function() {this._signal("changeBreakpoint");}, initialValue: 1 @@ -10135,9 +10262,12 @@ MultiHashHandler.prototype = HashHandler.prototype; } }; - this.bindKey = function(key, command, asDefault) { - if (typeof key == "object") + this.bindKey = function(key, command, position) { + if (typeof key == "object") { + if (position == undefined) + position = key.position; key = key[this.platform]; + } if (!key) return; if (typeof command == "function") @@ -10158,11 +10288,15 @@ MultiHashHandler.prototype = HashHandler.prototype; } var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; - this._addCommandToBinding(chain + id, command, asDefault); + this._addCommandToBinding(chain + id, command, position); }, this); }; - this._addCommandToBinding = function(keyId, command, asDefault) { + function getPosition(command) { + return typeof command == "object" && command.bindKey + && command.bindKey.position || 0; + } + this._addCommandToBinding = function(keyId, command, position) { var ckb = this.commandKeyBinding, i; if (!command) { delete ckb[keyId]; @@ -10174,11 +10308,21 @@ MultiHashHandler.prototype = HashHandler.prototype; } else if ((i = ckb[keyId].indexOf(command)) != -1) { ckb[keyId].splice(i, 1); } - - if (asDefault || command.isDefault) - ckb[keyId].unshift(command); - else - ckb[keyId].push(command); + + if (typeof position != "number") { + if (position || command.isDefault) + position = -100; + else + position = getPosition(command); + } + var commands = ckb[keyId]; + for (i = 0; i < commands.length; i++) { + var other = commands[i]; + var otherPos = getPosition(other); + if (otherPos > position) + break; + } + commands.splice(i, 0, command); } }; @@ -10264,10 +10408,18 @@ MultiHashHandler.prototype = HashHandler.prototype; } } - if (data.$keyChain && keyCode > 0) - data.$keyChain = ""; + if (data.$keyChain) { + if ((!hashId || hashId == 4) && keyString.length == 1) + data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input + else if (hashId == -1 || keyCode > 0) + data.$keyChain = ""; // reset keyChain + } return {command: command}; }; + + this.getStatusText = function(editor, data) { + return data.$keyChain || ""; + }; }).call(HashHandler.prototype); @@ -10772,6 +10924,11 @@ exports.commands = [{ exec: function() {}, passEvent: true, readOnly: true +}, { + name: "copy", + exec: function(editor) { + }, + readOnly: true }, { name: "cut", @@ -10786,6 +10943,12 @@ exports.commands = [{ }, scrollIntoView: "cursor", multiSelectAction: "forEach" +}, { + name: "paste", + exec: function(editor, args) { + editor.$handlePaste(args); + }, + scrollIntoView: "cursor" }, { name: "removeline", bindKey: bindKey("Ctrl-D", "Command-D"), @@ -11177,8 +11340,11 @@ var Editor = function(renderer, session) { var command = this.curOp.command; if (command.name && this.$blockScrolling > 0) this.$blockScrolling--; - if (command && command.scrollIntoView) { - switch (command.scrollIntoView) { + var scrollIntoView = command && command.scrollIntoView; + if (scrollIntoView) { + switch (scrollIntoView) { + case "center-animate": + scrollIntoView = "animate"; case "center": this.renderer.scrollCursorIntoView(null, 0.5); break; @@ -11196,7 +11362,7 @@ var Editor = function(renderer, session) { default: break; } - if (command.scrollIntoView == "animate") + if (scrollIntoView == "animate") this.renderer.animateScrolling(this.curOp.scrollTop); } @@ -11260,6 +11426,8 @@ var Editor = function(renderer, session) { this.setSession = function(session) { if (this.session == session) return; + if (this.curOp) this.endOperation(); + this.curOp = {}; var oldSession = this.session; if (oldSession) { @@ -11359,6 +11527,8 @@ var Editor = function(renderer, session) { oldSession: oldSession }); + this.curOp = null; + oldSession && oldSession._signal("changeEditor", {oldEditor: this}); session && session._signal("changeEditor", {editor: this}); }; @@ -11543,18 +11713,12 @@ var Editor = function(renderer, session) { this.$cursorChange = function() { this.renderer.updateCursor(); }; - this.onDocumentChange = function(e) { - var delta = e.data; - var range = delta.range; - var lastRow; + this.onDocumentChange = function(delta) { + var wrap = this.session.$useWrapMode; + var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity); + this.renderer.updateLines(delta.start.row, lastRow, wrap); - if (range.start.row == range.end.row && delta.action != "insertLines" && delta.action != "removeLines") - lastRow = range.end.row; - else - lastRow = Infinity; - this.renderer.updateLines(range.start.row, lastRow, this.session.$useWrapMode); - - this._signal("change", e); + this._signal("change", delta); this.$cursorChange(); this.$updateHighlightActiveLine(); }; @@ -11719,13 +11883,16 @@ var Editor = function(renderer, session) { this.onCut = function() { this.commands.exec("cut", this); }; - this.onPaste = function(text) { - if (this.$readOnly) - return; - - var e = {text: text}; + this.onPaste = function(text, event) { + var e = {text: text, event: event}; + this.commands.exec("paste", this, e); + }; + + this.$handlePaste = function(e) { + if (typeof e == "string") + e = {text: e}; this._signal("paste", e); - text = e.text; + var text = e.text; if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { this.insert(text); } else { @@ -11743,7 +11910,6 @@ var Editor = function(renderer, session) { this.session.insert(range.start, lines[i]); } } - this.renderer.scrollCursorIntoView(); }; this.execCommand = function(command, args) { @@ -12186,15 +12352,7 @@ var Editor = function(renderer, session) { }; this.removeLines = function() { var rows = this.$getSelectedRows(); - var range; - if (rows.first === 0 || rows.last+1 < this.session.getLength()) - range = new Range(rows.first, 0, rows.last+1, 0); - else - range = new Range( - rows.first-1, this.session.getLine(rows.first-1).length, - rows.last, this.session.getLine(rows.last).length - ); - this.session.remove(range); + this.session.removeFullLines(rows.first, rows.last); this.clearSelection(); }; @@ -12901,6 +13059,7 @@ config.defineOptions(Editor.prototype, "editor", { useSoftTabs: "session", tabSize: "session", wrap: "session", + indentedSoftWrap: "session", foldStyle: "session", mode: "session" }); @@ -12916,42 +13075,39 @@ var UndoManager = function() { (function() { this.execute = function(options) { - var deltas = options.args[0]; + var deltaSets = options.args[0]; this.$doc = options.args[1]; if (options.merge && this.hasUndo()){ this.dirtyCounter--; - deltas = this.$undoStack.pop().concat(deltas); + deltaSets = this.$undoStack.pop().concat(deltaSets); } - this.$undoStack.push(deltas); + this.$undoStack.push(deltaSets); this.$redoStack = []; - if (this.dirtyCounter < 0) { this.dirtyCounter = NaN; } this.dirtyCounter++; }; this.undo = function(dontSelect) { - var deltas = this.$undoStack.pop(); + var deltaSets = this.$undoStack.pop(); var undoSelectionRange = null; - if (deltas) { - undoSelectionRange = - this.$doc.undoChanges(deltas, dontSelect); - this.$redoStack.push(deltas); + if (deltaSets) { + undoSelectionRange = this.$doc.undoChanges(this.$deserializeDeltas(deltaSets), dontSelect); + this.$redoStack.push(deltaSets); this.dirtyCounter--; } return undoSelectionRange; }; this.redo = function(dontSelect) { - var deltas = this.$redoStack.pop(); + var deltaSets = this.$redoStack.pop(); var redoSelectionRange = null; - if (deltas) { + if (deltaSets) { redoSelectionRange = - this.$doc.redoChanges(deltas, dontSelect); - this.$undoStack.push(deltas); + this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect); + this.$undoStack.push(deltaSets); this.dirtyCounter++; } - return redoSelectionRange; }; this.reset = function() { @@ -12971,7 +13127,48 @@ var UndoManager = function() { this.isClean = function() { return this.dirtyCounter === 0; }; - + this.$serializeDeltas = function(deltaSets) { + return cloneDeltaSetsObj(deltaSets, $serializeDelta); + }; + this.$deserializeDeltas = function(deltaSets) { + return cloneDeltaSetsObj(deltaSets, $deserializeDelta); + }; + + function $serializeDelta(delta){ + return { + action: delta.action, + start: delta.start, + end: delta.end, + lines: delta.lines.length == 1 ? null : delta.lines, + text: delta.lines.length == 1 ? delta.lines[0] : null, + }; + } + + function $deserializeDelta(delta) { + return { + action: delta.action, + start: delta.start, + end: delta.end, + lines: delta.lines || [delta.text] + }; + } + + function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) { + var deltaSets_new = new Array(deltaSets_old.length); + for (var i = 0; i < deltaSets_old.length; i++) { + var deltaSet_old = deltaSets_old[i]; + var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)}; + + for (var j = 0; j < deltaSet_old.deltas.length; j++) { + var delta_old = deltaSet_old.deltas[j]; + deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old); + } + + deltaSets_new[i] = deltaSet_new; + } + return deltaSets_new; + } + }).call(UndoManager.prototype); exports.UndoManager = UndoManager; @@ -13048,15 +13245,13 @@ var Gutter = function(parentEl) { } }; - this.$updateAnnotations = function (e) { + this.$updateAnnotations = function (delta) { if (!this.$annotations.length) return; - var delta = e.data; - var range = delta.range; - var firstRow = range.start.row; - var len = range.end.row - firstRow; + var firstRow = delta.start.row; + var len = delta.end.row - firstRow; if (len === 0) { - } else if (delta.action == "removeText" || delta.action == "removeLines") { + } else if (delta.action == 'remove') { this.$annotations.splice(firstRow, len + 1, null); } else { var args = new Array(len + 1); @@ -13294,7 +13489,7 @@ var Marker = function(parentEl) { else this.drawMultiLineMarker(html, range, marker.clazz, config); } else { - this.drawSingleLineMarker(html, range, marker.clazz + " ace_start", config); + this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); } } this.element.innerHTML = html.join(""); @@ -13303,23 +13498,30 @@ var Marker = function(parentEl) { this.$getTop = function(row, layerConfig) { return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; }; + + function getBorderClass(tl, tr, br, bl) { + return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); + } this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { - var row = range.start.row; - - var lineRange = new Range( - row, range.start.column, - row, this.session.getScreenLastRowColumn(row) - ); - this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " ace_start", layerConfig, 1, extraStyle); - row = range.end.row; - lineRange = new Range(row, 0, row, range.end.column); - this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 0, extraStyle); - - for (row = range.start.row + 1; row < range.end.row; row++) { - lineRange.start.row = row; - lineRange.end.row = row; - lineRange.end.column = this.session.getScreenLastRowColumn(row); - this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, extraStyle); + var session = this.session; + var start = range.start.row; + var end = range.end.row; + var row = start; + var prev = 0; + var curr = 0; + var next = session.getScreenLastRowColumn(row); + var lineRange = new Range(row, range.start.column, row, curr); + for (; row <= end; row++) { + lineRange.start.row = lineRange.end.row = row; + lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); + lineRange.end.column = next; + prev = curr; + curr = next; + next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; + this.drawSingleLineMarker(stringBuilder, lineRange, + clazz + (row == start ? " ace_start" : "") + " ace_br" + + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), + layerConfig, row == end ? 0 : 1, extraStyle); } }; this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { @@ -13330,7 +13532,7 @@ var Marker = function(parentEl) { extraStyle = extraStyle || ""; stringBuilder.push( - "
      " ); height = (range.end.row - range.start.row - 1) * config.lineHeight; - if (height < 0) + if (height <= 0) return; top = this.$getTop(range.start.row + 1, config); + + var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); stringBuilder.push( - "
      " - + this.TAB_CHAR - + lang.stringRepeat(" ", i - 1) + + lang.stringRepeat(this.TAB_CHAR, i) + ""); } else { tabStr.push(lang.stringRepeat(" ", i)); @@ -13524,7 +13727,7 @@ var Text = function(parentEl) { spaceClass = " ace_invisible_space"; tabClass = " ace_invisible_tab"; var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); - var tabContent = this.TAB_CHAR + lang.stringRepeat(" ", this.tabSize - 1); + var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize); } else{ var spaceContent = lang.stringRepeat(" ", this.tabSize); var tabContent = spaceContent; @@ -13695,7 +13898,7 @@ var Text = function(parentEl) { this.$renderToken = function(stringBuilder, screenColumn, token, value) { var self = this; - var replaceReg = /\t|&|<|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; + var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; var replaceFunc = function(c, a, b, tabIdx, idx4) { if (a) { return self.showInvisibles @@ -13705,6 +13908,8 @@ var Text = function(parentEl) { return "&"; } else if (c == "<") { return "<"; + } else if (c == ">") { + return ">"; } else if (c == "\t") { var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); screenColumn += tabSize - 1; @@ -13792,6 +13997,8 @@ var Text = function(parentEl) { ); } + stringBuilder.push(lang.stringRepeat("\xa0", splits.indent)); + split ++; screenColumn = 0; splitChars = splits[split] || Number.MAX_VALUE; @@ -13942,15 +14149,15 @@ ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], func "use strict"; var dom = require("../lib/dom"); -var IE8; +var isIE8; var Cursor = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_cursor-layer"; parentEl.appendChild(this.element); - if (IE8 === undefined) - IE8 = "opacity" in this.element; + if (isIE8 === undefined) + isIE8 = !("opacity" in this.element.style); this.isVisible = false; this.isBlinking = true; @@ -13960,7 +14167,9 @@ var Cursor = function(parentEl) { this.cursors = []; this.cursor = this.addCursor(); dom.addCssClass(this.element, "ace_hidden-cursors"); - this.$updateCursors = this.$updateVisibility.bind(this); + this.$updateCursors = (isIE8 + ? this.$updateVisibility + : this.$updateOpacity).bind(this); }; (function() { @@ -14001,13 +14210,11 @@ var Cursor = function(parentEl) { }; this.setSmoothBlinking = function(smoothBlinking) { - if (smoothBlinking != this.smoothBlinking && !IE8) { + if (smoothBlinking != this.smoothBlinking && !isIE8) { this.smoothBlinking = smoothBlinking; dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); this.$updateCursors(true); - this.$updateCursors = (smoothBlinking - ? this.$updateOpacity - : this.$updateVisibility).bind(this); + this.$updateCursors = (this.$updateOpacity).bind(this); this.restartTimer(); } }; @@ -14399,9 +14606,9 @@ var FontMetrics = exports.FontMetrics = function(parentEl, interval) { this.setPolling = function(val) { if (val) { this.$pollSizeChanges(); - } else { - if (this.$pollSizeChangesTimer) - this.$pollSizeChangesTimer; + } else if (this.$pollSizeChangesTimer) { + clearInterval(this.$pollSizeChangesTimer); + this.$pollSizeChangesTimer = 0; } }; @@ -14599,6 +14806,7 @@ text-indent: -1em;\ -moz-user-select: text;\ -webkit-user-select: text;\ user-select: text;\ +white-space: pre!important;\ }\ .ace_text-input.ace_composition {\ background: inherit;\ @@ -14642,7 +14850,8 @@ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ -border-left: 2px solid\ +border-left: 2px solid;\ +transform: translatez(0);\ }\ .ace_slim-cursors .ace_cursor {\ border-left-width: 1px;\ @@ -14823,6 +15032,21 @@ background-color: rgba(255, 255, 0,0.2);\ position: absolute;\ z-index: 8;\ }\ +.ace_br1 {border-top-left-radius : 3px;}\ +.ace_br2 {border-top-right-radius : 3px;}\ +.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\ +.ace_br4 {border-bottom-right-radius: 3px;}\ +.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\ +.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\ +.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\ +.ace_br8 {border-bottom-left-radius : 3px;}\ +.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\ +.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\ +.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ +.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ "; dom.importCssString(editorCss, "ace_editor.css"); @@ -15235,7 +15459,7 @@ var VirtualRenderer = function(container, theme) { return this.container; }; this.getMouseEventTarget = function() { - return this.content; + return this.scroller; }; this.getTextAreaContainer = function() { return this.container; @@ -15464,6 +15688,8 @@ var VirtualRenderer = function(container, theme) { (this.$minLines||1) * this.lineHeight, Math.min(maxHeight, height) ) + this.scrollMargin.v + (this.$extraHeight || 0); + if (this.$horizScroll) + desiredHeight += this.scrollBarH.getHeight(); var vScroll = height > maxHeight; if (desiredHeight != this.desiredHeight || @@ -15483,9 +15709,6 @@ var VirtualRenderer = function(container, theme) { }; this.$computeLayerConfig = function() { - if (this.$maxLines && this.lineHeight > 1) - this.$autosize(); - var session = this.session; var size = this.$size; @@ -15493,9 +15716,6 @@ var VirtualRenderer = function(container, theme) { var screenLines = this.session.getScreenLength(); var maxHeight = screenLines * this.lineHeight; - var offset = this.scrollTop % this.lineHeight; - var minHeight = size.scrollerHeight + this.lineHeight; - var longestLine = this.$getLongestLine(); var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || @@ -15506,21 +15726,28 @@ var VirtualRenderer = function(container, theme) { this.$horizScroll = horizScroll; this.scrollBarH.setVisible(horizScroll); } + var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine + if (this.$maxLines && this.lineHeight > 1) + this.$autosize(); + + var offset = this.scrollTop % this.lineHeight; + var minHeight = size.scrollerHeight + this.lineHeight; var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0; maxHeight += scrollPastEnd; - this.session.setScrollTop(Math.max(-this.scrollMargin.top, - Math.min(this.scrollTop, maxHeight - size.scrollerHeight + this.scrollMargin.bottom))); + var sm = this.scrollMargin; + this.session.setScrollTop(Math.max(-sm.top, + Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); - this.session.setScrollLeft(Math.max(-this.scrollMargin.left, Math.min(this.scrollLeft, - longestLine + 2 * this.$padding - size.scrollerWidth + this.scrollMargin.right))); + this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, + longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || - size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop); - var vScrollChanged = this.$vScroll !== vScroll; + size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); + var vScrollChanged = vScrollBefore !== vScroll; if (vScrollChanged) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); @@ -16204,19 +16431,22 @@ var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) { doc.on("change", this.changeListener); }; - this.changeListener = function(e) { + this.changeListener = function(delta) { if (!this.deltaQueue) { - this.deltaQueue = [e.data]; + this.deltaQueue = []; setTimeout(this.$sendDeltaQueue, 0); - } else - this.deltaQueue.push(e.data); + } + if (delta.action == "insert") + this.deltaQueue.push(delta.start, delta.lines); + else + this.deltaQueue.push(delta.start, delta.end); }; this.$sendDeltaQueue = function() { var q = this.deltaQueue; if (!q) return; this.deltaQueue = null; - if (q.length > 20 && q.length > this.$doc.getLength() >> 1) { + if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { this.call("setValue", [this.$doc.getValue()]); } else this.emit("change", {data: q}); @@ -16372,28 +16602,27 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) this.session.removeMarker(this.others[i].markerId); } }; - this.onUpdate = function(event) { - var delta = event.data; - var range = delta.range; + this.onUpdate = function(delta) { + var range = delta; if(range.start.row !== range.end.row) return; if(range.start.row !== this.pos.row) return; if (this.$updating) return; this.$updating = true; - var lengthDiff = delta.action === "insertText" ? range.end.column - range.start.column : range.start.column - range.end.column; + var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; if(range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1) { var distanceFromStart = range.start.column - this.pos.column; this.length += lengthDiff; if(!this.session.$fromUndo) { - if(delta.action === "insertText") { + if(delta.action === 'insert') { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; if(otherPos.row === range.start.row && range.start.column < otherPos.column) newPos.column += lengthDiff; - this.doc.insert(newPos, delta.text); + this.doc.insertMergedLines(newPos, delta.lines); } - } else if(delta.action === "removeText") { + } else if(delta.action === 'remove') { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; @@ -16402,7 +16631,7 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); } } - if(range.start.column === this.pos.column && delta.action === "insertText") { + if(range.start.column === this.pos.column && delta.action === 'insert') { setTimeout(function() { this.pos.setPosition(this.pos.row, this.pos.column - lengthDiff); for (var i = 0; i < this.others.length; i++) { @@ -16414,7 +16643,7 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) } }.bind(this), 0); } - else if(range.start.column === this.pos.column && delta.action === "removeText") { + else if(range.start.column === this.pos.column && delta.action === 'remove') { setTimeout(function() { for (var i = 0; i < this.others.length; i++) { var other = this.others[i]; @@ -16526,15 +16755,15 @@ function onMouseDown(e) { var selectionMode; if (editor.$mouseHandler.$enableJumpToDef) { if (ctrl && alt || accel && alt) - selectionMode = "add"; - else if (alt) + selectionMode = shift ? "block" : "add"; + else if (alt && editor.$blockSelectEnabled) selectionMode = "block"; } else { if (accel && !alt) { selectionMode = "add"; if (!isMultiSelect && shift) return; - } else if (alt) { + } else if (alt && editor.$blockSelectEnabled) { selectionMode = "block"; } } @@ -16560,7 +16789,7 @@ function onMouseDown(e) { if (shift) { oldRange = null; - range = selection.ranges[0]; + range = selection.ranges[0] || range; editor.removeSelectionMarker(range); } editor.once("mouseup", function() { @@ -16659,54 +16888,54 @@ exports.defaultCommands = [{ exec: function(editor) { editor.selectMoreLines(-1); }, bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "addCursorBelow", exec: function(editor) { editor.selectMoreLines(1); }, bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "addCursorAboveSkipCurrent", exec: function(editor) { editor.selectMoreLines(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "addCursorBelowSkipCurrent", exec: function(editor) { editor.selectMoreLines(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "selectMoreBefore", exec: function(editor) { editor.selectMore(-1); }, bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "selectMoreAfter", exec: function(editor) { editor.selectMore(1); }, bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "selectNextBefore", exec: function(editor) { editor.selectMore(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "selectNextAfter", exec: function(editor) { editor.selectMore(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }, { name: "splitIntoLines", exec: function(editor) { editor.multiSelect.splitIntoLines(); }, bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, - readonly: true + readOnly: true }, { name: "alignCursors", exec: function(editor) { editor.alignCursors(); }, @@ -16717,14 +16946,14 @@ exports.defaultCommands = [{ exec: function(editor) { editor.findAll(); }, bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"}, scrollIntoView: "cursor", - readonly: true + readOnly: true }]; exports.multiSelectCommands = [{ name: "singleSelection", bindKey: "esc", exec: function(editor) { editor.exitMultiSelectMode(); }, scrollIntoView: "cursor", - readonly: true, + readOnly: true, isAvailable: function(editor) {return editor && editor.inMultiSelectMode} }]; @@ -17326,9 +17555,9 @@ var Editor = require("./editor").Editor; if (fr < 0) fr = 0; if (lr >= max) lr = max - 1; } - var lines = this.session.doc.removeLines(fr, lr); + var lines = this.session.removeFullLines(fr, lr); lines = this.$reAlignText(lines, guessRange); - this.session.doc.insert({row: fr, column: 0}, lines.join("\n") + "\n"); + this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n"); if (!guessRange) { range.start.column = 0; range.end.column = lines[lines.length - 1].length; @@ -17489,7 +17718,8 @@ function addAltCursorListeners(editor){ var el = editor.textInput.getElement(); var altCursor = false; event.addListener(el, "keydown", function(e) { - if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { + var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); + if (editor.$blockSelectEnabled && altDown) { if (!altCursor) { editor.renderer.setMouseCursor("crosshair"); altCursor = true; @@ -17525,6 +17755,12 @@ require("./config").defineOptions(Editor.prototype, "editor", { } }, value: true + }, + enableBlockSelect: { + set: function(val) { + this.$blockSelectEnabled = val; + }, + value: true } }); @@ -17721,7 +17957,6 @@ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ -border-radius: 2px;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ @@ -17837,17 +18072,15 @@ function LineWidgets(session) { }); }; - this.updateOnChange = function(e) { + this.updateOnChange = function(delta) { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; - - var delta = e.data; - var range = delta.range; - var startRow = range.start.row; - var len = range.end.row - startRow; + + var startRow = delta.start.row; + var len = delta.end.row - startRow; if (len === 0) { - } else if (delta.action == "removeText" || delta.action == "removeLines") { + } else if (delta.action == 'remove') { var removed = lineWidgets.splice(startRow + 1, len); removed.forEach(function(w) { w && this.removeLineWidget(w); @@ -18237,7 +18470,7 @@ exports.edit = function(el) { value = oldNode.value; el = dom.createElement("pre"); oldNode.parentNode.replaceChild(el, oldNode); - } else { + } else if (el) { value = dom.getInnerText(el); el.innerHTML = ''; } diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-emmet.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-emmet.js index aa8e133bb..5616386bf 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-emmet.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-emmet.js @@ -624,11 +624,11 @@ var TabstopManager = function(editor) { this.editor = null; }; - this.onChange = function(e) { - var changeRange = e.data.range; - var isRemove = e.data.action[0] == "r"; - var start = changeRange.start; - var end = changeRange.end; + this.onChange = function(delta) { + var changeRange = delta; + var isRemove = delta.action[0] == "r"; + var start = delta.start; + var end = delta.end; var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-searchbox.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-searchbox.js index 964646ba5..b4e4c0e0f 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-searchbox.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-searchbox.js @@ -1,4 +1,408 @@ -ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/lang"),s=e("../lib/event"),o=".ace_search {background-color: #ddd;border: 1px solid #cbcbcb;border-top: 0 none;max-width: 325px;overflow: hidden;margin: 0;padding: 4px;padding-right: 6px;padding-bottom: 0;position: absolute;top: 0px;z-index: 99;white-space: normal;}.ace_search.left {border-left: 0 none;border-radius: 0px 0px 5px 0px;left: 0;}.ace_search.right {border-radius: 0px 0px 0px 5px;border-right: 0 none;right: 0;}.ace_search_form, .ace_replace_form {border-radius: 3px;border: 1px solid #cbcbcb;float: left;margin-bottom: 4px;overflow: hidden;}.ace_search_form.ace_nomatch {outline: 1px solid red;}.ace_search_field {background-color: white;border-right: 1px solid #cbcbcb;border: 0 none;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;float: left;height: 22px;outline: 0;padding: 0 7px;width: 214px;margin: 0;}.ace_searchbtn,.ace_replacebtn {background: #fff;border: 0 none;border-left: 1px solid #dcdcdc;cursor: pointer;float: left;height: 22px;margin: 0;padding: 0;position: relative;}.ace_searchbtn:last-child,.ace_replacebtn:last-child {border-top-right-radius: 3px;border-bottom-right-radius: 3px;}.ace_searchbtn:disabled {background: none;cursor: default;}.ace_searchbtn {background-position: 50% 50%;background-repeat: no-repeat;width: 27px;}.ace_searchbtn.prev {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); }.ace_searchbtn.next {background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); }.ace_searchbtn_close {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;border-radius: 50%;border: 0 none;color: #656565;cursor: pointer;float: right;font: 16px/16px Arial;height: 14px;margin: 5px 1px 9px 5px;padding: 0;text-align: center;width: 14px;}.ace_searchbtn_close:hover {background-color: #656565;background-position: 50% 100%;color: white;}.ace_replacebtn.prev {width: 54px}.ace_replacebtn.next {width: 27px}.ace_button {margin-left: 2px;cursor: pointer;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;overflow: hidden;opacity: 0.7;border: 1px solid rgba(100,100,100,0.23);padding: 1px;-moz-box-sizing: border-box;box-sizing: border-box;color: black;}.ace_button:hover {background-color: #eee;opacity:1;}.ace_button:active {background-color: #ddd;}.ace_button.checked {border-color: #3399ff;opacity:1;}.ace_search_options{margin-bottom: 3px;text-align: right;-webkit-user-select: none;-moz-user-select: none;-o-user-select: none;-ms-user-select: none;user-select: none;}",u=e("../keyboard/hash_handler").HashHandler,a=e("../lib/keys");r.importCssString(o,"ace_searchbox");var f=''.replace(/>\s+/g,">"),l=function(e,t,n){var i=r.createElement("div");i.innerHTML=f,this.element=i.firstChild,this.$init(),this.setEditor(e)};(function(){this.setEditor=function(e){e.searchBox=this,e.container.appendChild(this.element),this.editor=e},this.$initElements=function(e){this.searchBox=e.querySelector(".ace_search_form"),this.replaceBox=e.querySelector(".ace_replace_form"),this.searchOptions=e.querySelector(".ace_search_options"),this.regExpOption=e.querySelector("[action=toggleRegexpMode]"),this.caseSensitiveOption=e.querySelector("[action=toggleCaseSensitive]"),this.wholeWordOption=e.querySelector("[action=toggleWholeWords]"),this.searchInput=this.searchBox.querySelector(".ace_search_field"),this.replaceInput=this.replaceBox.querySelector(".ace_search_field")},this.$init=function(){var e=this.element;this.$initElements(e);var t=this;s.addListener(e,"mousedown",function(e){setTimeout(function(){t.activeInput.focus()},0),s.stopPropagation(e)}),s.addListener(e,"click",function(e){var n=e.target||e.srcElement,r=n.getAttribute("action");r&&t[r]?t[r]():t.$searchBarKb.commands[r]&&t.$searchBarKb.commands[r].exec(t),s.stopPropagation(e)}),s.addCommandKeyListener(e,function(e,n,r){var i=a.keyCodeToString(r),o=t.$searchBarKb.findKeyCommand(n,i);o&&o.exec&&(o.exec(t),s.stopEvent(e))}),this.$onChange=i.delayedCall(function(){t.find(!1,!1)}),s.addListener(this.searchInput,"input",function(){t.$onChange.schedule(20)}),s.addListener(this.searchInput,"focus",function(){t.activeInput=t.searchInput,t.searchInput.value&&t.highlight()}),s.addListener(this.replaceInput,"focus",function(){t.activeInput=t.replaceInput,t.searchInput.value&&t.highlight()})},this.$closeSearchBarKb=new u([{bindKey:"Esc",name:"closeSearchBar",exec:function(e){e.searchBox.hide()}}]),this.$searchBarKb=new u,this.$searchBarKb.bindKeys({"Ctrl-f|Command-f|Ctrl-H|Command-Option-F":function(e){var t=e.isReplace=!e.isReplace;e.replaceBox.style.display=t?"":"none",e[t?"replaceInput":"searchInput"].focus()},"Ctrl-G|Command-G":function(e){e.findNext()},"Ctrl-Shift-G|Command-Shift-G":function(e){e.findPrev()},esc:function(e){setTimeout(function(){e.hide()})},Return:function(e){e.activeInput==e.replaceInput&&e.replace(),e.findNext()},"Shift-Return":function(e){e.activeInput==e.replaceInput&&e.replace(),e.findPrev()},"Alt-Return":function(e){e.activeInput==e.replaceInput&&e.replaceAll(),e.findAll()},Tab:function(e){(e.activeInput==e.replaceInput?e.searchInput:e.replaceInput).focus()}}),this.$searchBarKb.addCommands([{name:"toggleRegexpMode",bindKey:{win:"Alt-R|Alt-/",mac:"Ctrl-Alt-R|Ctrl-Alt-/"},exec:function(e){e.regExpOption.checked=!e.regExpOption.checked,e.$syncOptions()}},{name:"toggleCaseSensitive",bindKey:{win:"Alt-C|Alt-I",mac:"Ctrl-Alt-R|Ctrl-Alt-I"},exec:function(e){e.caseSensitiveOption.checked=!e.caseSensitiveOption.checked,e.$syncOptions()}},{name:"toggleWholeWords",bindKey:{win:"Alt-B|Alt-W",mac:"Ctrl-Alt-B|Ctrl-Alt-W"},exec:function(e){e.wholeWordOption.checked=!e.wholeWordOption.checked,e.$syncOptions()}}]),this.$syncOptions=function(){r.setCssClass(this.regExpOption,"checked",this.regExpOption.checked),r.setCssClass(this.wholeWordOption,"checked",this.wholeWordOption.checked),r.setCssClass(this.caseSensitiveOption,"checked",this.caseSensitiveOption.checked),this.find(!1,!1)},this.highlight=function(e){this.editor.session.highlight(e||this.editor.$search.$options.re),this.editor.renderer.updateBackMarkers()},this.find=function(e,t){var n=this.editor.find(this.searchInput.value,{skipCurrent:e,backwards:t,wrap:!0,regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),i=!n&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",i),this.editor._emit("findSearchBox",{match:!i}),this.highlight()},this.findNext=function(){this.find(!0,!1)},this.findPrev=function(){this.find(!0,!0)},this.findAll=function(){var e=this.editor.findAll(this.searchInput.value,{regExp:this.regExpOption.checked,caseSensitive:this.caseSensitiveOption.checked,wholeWord:this.wholeWordOption.checked}),t=!e&&this.searchInput.value;r.setCssClass(this.searchBox,"ace_nomatch",t),this.editor._emit("findSearchBox",{match:!t}),this.highlight(),this.hide()},this.replace=function(){this.editor.getReadOnly()||this.editor.replace(this.replaceInput.value)},this.replaceAndFindNext=function(){this.editor.getReadOnly()||(this.editor.replace(this.replaceInput.value),this.findNext())},this.replaceAll=function(){this.editor.getReadOnly()||this.editor.replaceAll(this.replaceInput.value)},this.hide=function(){this.element.style.display="none",this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb),this.editor.focus()},this.show=function(e,t){this.element.style.display="",this.replaceBox.style.display=t?"":"none",this.isReplace=t,e&&(this.searchInput.value=e),this.searchInput.focus(),this.searchInput.select(),this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb)},this.isFocused=function(){var e=document.activeElement;return e==this.searchInput||e==this.replaceInput}}).call(l.prototype),t.SearchBox=l,t.Search=function(e,t){var n=e.searchBox||new l(e);n.show(e.session.getTextRange(),t)}}); +ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"], function(require, exports, module) { +"use strict"; + +var dom = require("../lib/dom"); +var lang = require("../lib/lang"); +var event = require("../lib/event"); +var searchboxCss = "\ +.ace_search {\ +background-color: #ddd;\ +border: 1px solid #cbcbcb;\ +border-top: 0 none;\ +max-width: 325px;\ +overflow: hidden;\ +margin: 0;\ +padding: 4px;\ +padding-right: 6px;\ +padding-bottom: 0;\ +position: absolute;\ +top: 0px;\ +z-index: 99;\ +white-space: normal;\ +}\ +.ace_search.left {\ +border-left: 0 none;\ +border-radius: 0px 0px 5px 0px;\ +left: 0;\ +}\ +.ace_search.right {\ +border-radius: 0px 0px 0px 5px;\ +border-right: 0 none;\ +right: 0;\ +}\ +.ace_search_form, .ace_replace_form {\ +border-radius: 3px;\ +border: 1px solid #cbcbcb;\ +float: left;\ +margin-bottom: 4px;\ +overflow: hidden;\ +}\ +.ace_search_form.ace_nomatch {\ +outline: 1px solid red;\ +}\ +.ace_search_field {\ +background-color: white;\ +border-right: 1px solid #cbcbcb;\ +border: 0 none;\ +-webkit-box-sizing: border-box;\ +-moz-box-sizing: border-box;\ +box-sizing: border-box;\ +float: left;\ +height: 22px;\ +outline: 0;\ +padding: 0 7px;\ +width: 214px;\ +margin: 0;\ +}\ +.ace_searchbtn,\ +.ace_replacebtn {\ +background: #fff;\ +border: 0 none;\ +border-left: 1px solid #dcdcdc;\ +cursor: pointer;\ +float: left;\ +height: 22px;\ +margin: 0;\ +padding: 0;\ +position: relative;\ +}\ +.ace_searchbtn:last-child,\ +.ace_replacebtn:last-child {\ +border-top-right-radius: 3px;\ +border-bottom-right-radius: 3px;\ +}\ +.ace_searchbtn:disabled {\ +background: none;\ +cursor: default;\ +}\ +.ace_searchbtn {\ +background-position: 50% 50%;\ +background-repeat: no-repeat;\ +width: 27px;\ +}\ +.ace_searchbtn.prev {\ +background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \ +}\ +.ace_searchbtn.next {\ +background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \ +}\ +.ace_searchbtn_close {\ +background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\ +border-radius: 50%;\ +border: 0 none;\ +color: #656565;\ +cursor: pointer;\ +float: right;\ +font: 16px/16px Arial;\ +height: 14px;\ +margin: 5px 1px 9px 5px;\ +padding: 0;\ +text-align: center;\ +width: 14px;\ +}\ +.ace_searchbtn_close:hover {\ +background-color: #656565;\ +background-position: 50% 100%;\ +color: white;\ +}\ +.ace_replacebtn.prev {\ +width: 54px\ +}\ +.ace_replacebtn.next {\ +width: 27px\ +}\ +.ace_button {\ +margin-left: 2px;\ +cursor: pointer;\ +-webkit-user-select: none;\ +-moz-user-select: none;\ +-o-user-select: none;\ +-ms-user-select: none;\ +user-select: none;\ +overflow: hidden;\ +opacity: 0.7;\ +border: 1px solid rgba(100,100,100,0.23);\ +padding: 1px;\ +-moz-box-sizing: border-box;\ +box-sizing: border-box;\ +color: black;\ +}\ +.ace_button:hover {\ +background-color: #eee;\ +opacity:1;\ +}\ +.ace_button:active {\ +background-color: #ddd;\ +}\ +.ace_button.checked {\ +border-color: #3399ff;\ +opacity:1;\ +}\ +.ace_search_options{\ +margin-bottom: 3px;\ +text-align: right;\ +-webkit-user-select: none;\ +-moz-user-select: none;\ +-o-user-select: none;\ +-ms-user-select: none;\ +user-select: none;\ +}"; +var HashHandler = require("../keyboard/hash_handler").HashHandler; +var keyUtil = require("../lib/keys"); + +dom.importCssString(searchboxCss, "ace_searchbox"); + +var html = ''.replace(/>\s+/g, ">"); + +var SearchBox = function(editor, range, showReplaceForm) { + var div = dom.createElement("div"); + div.innerHTML = html; + this.element = div.firstChild; + + this.$init(); + this.setEditor(editor); +}; + +(function() { + this.setEditor = function(editor) { + editor.searchBox = this; + editor.container.appendChild(this.element); + this.editor = editor; + }; + + this.$initElements = function(sb) { + this.searchBox = sb.querySelector(".ace_search_form"); + this.replaceBox = sb.querySelector(".ace_replace_form"); + this.searchOptions = sb.querySelector(".ace_search_options"); + this.regExpOption = sb.querySelector("[action=toggleRegexpMode]"); + this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]"); + this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]"); + this.searchInput = this.searchBox.querySelector(".ace_search_field"); + this.replaceInput = this.replaceBox.querySelector(".ace_search_field"); + }; + + this.$init = function() { + var sb = this.element; + + this.$initElements(sb); + + var _this = this; + event.addListener(sb, "mousedown", function(e) { + setTimeout(function(){ + _this.activeInput.focus(); + }, 0); + event.stopPropagation(e); + }); + event.addListener(sb, "click", function(e) { + var t = e.target || e.srcElement; + var action = t.getAttribute("action"); + if (action && _this[action]) + _this[action](); + else if (_this.$searchBarKb.commands[action]) + _this.$searchBarKb.commands[action].exec(_this); + event.stopPropagation(e); + }); + + event.addCommandKeyListener(sb, function(e, hashId, keyCode) { + var keyString = keyUtil.keyCodeToString(keyCode); + var command = _this.$searchBarKb.findKeyCommand(hashId, keyString); + if (command && command.exec) { + command.exec(_this); + event.stopEvent(e); + } + }); + + this.$onChange = lang.delayedCall(function() { + _this.find(false, false); + }); + + event.addListener(this.searchInput, "input", function() { + _this.$onChange.schedule(20); + }); + event.addListener(this.searchInput, "focus", function() { + _this.activeInput = _this.searchInput; + _this.searchInput.value && _this.highlight(); + }); + event.addListener(this.replaceInput, "focus", function() { + _this.activeInput = _this.replaceInput; + _this.searchInput.value && _this.highlight(); + }); + }; + this.$closeSearchBarKb = new HashHandler([{ + bindKey: "Esc", + name: "closeSearchBar", + exec: function(editor) { + editor.searchBox.hide(); + } + }]); + this.$searchBarKb = new HashHandler(); + this.$searchBarKb.bindKeys({ + "Ctrl-f|Command-f|Ctrl-H|Command-Option-F": function(sb) { + var isReplace = sb.isReplace = !sb.isReplace; + sb.replaceBox.style.display = isReplace ? "" : "none"; + sb[isReplace ? "replaceInput" : "searchInput"].focus(); + }, + "Ctrl-G|Command-G": function(sb) { + sb.findNext(); + }, + "Ctrl-Shift-G|Command-Shift-G": function(sb) { + sb.findPrev(); + }, + "esc": function(sb) { + setTimeout(function() { sb.hide();}); + }, + "Return": function(sb) { + if (sb.activeInput == sb.replaceInput) + sb.replace(); + sb.findNext(); + }, + "Shift-Return": function(sb) { + if (sb.activeInput == sb.replaceInput) + sb.replace(); + sb.findPrev(); + }, + "Alt-Return": function(sb) { + if (sb.activeInput == sb.replaceInput) + sb.replaceAll(); + sb.findAll(); + }, + "Tab": function(sb) { + (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus(); + } + }); + + this.$searchBarKb.addCommands([{ + name: "toggleRegexpMode", + bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"}, + exec: function(sb) { + sb.regExpOption.checked = !sb.regExpOption.checked; + sb.$syncOptions(); + } + }, { + name: "toggleCaseSensitive", + bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"}, + exec: function(sb) { + sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked; + sb.$syncOptions(); + } + }, { + name: "toggleWholeWords", + bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"}, + exec: function(sb) { + sb.wholeWordOption.checked = !sb.wholeWordOption.checked; + sb.$syncOptions(); + } + }]); + + this.$syncOptions = function() { + dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked); + dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked); + dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked); + this.find(false, false); + }; + + this.highlight = function(re) { + this.editor.session.highlight(re || this.editor.$search.$options.re); + this.editor.renderer.updateBackMarkers() + }; + this.find = function(skipCurrent, backwards) { + var range = this.editor.find(this.searchInput.value, { + skipCurrent: skipCurrent, + backwards: backwards, + wrap: true, + regExp: this.regExpOption.checked, + caseSensitive: this.caseSensitiveOption.checked, + wholeWord: this.wholeWordOption.checked + }); + var noMatch = !range && this.searchInput.value; + dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); + this.editor._emit("findSearchBox", { match: !noMatch }); + this.highlight(); + }; + this.findNext = function() { + this.find(true, false); + }; + this.findPrev = function() { + this.find(true, true); + }; + this.findAll = function(){ + var range = this.editor.findAll(this.searchInput.value, { + regExp: this.regExpOption.checked, + caseSensitive: this.caseSensitiveOption.checked, + wholeWord: this.wholeWordOption.checked + }); + var noMatch = !range && this.searchInput.value; + dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); + this.editor._emit("findSearchBox", { match: !noMatch }); + this.highlight(); + this.hide(); + }; + this.replace = function() { + if (!this.editor.getReadOnly()) + this.editor.replace(this.replaceInput.value); + }; + this.replaceAndFindNext = function() { + if (!this.editor.getReadOnly()) { + this.editor.replace(this.replaceInput.value); + this.findNext() + } + }; + this.replaceAll = function() { + if (!this.editor.getReadOnly()) + this.editor.replaceAll(this.replaceInput.value); + }; + + this.hide = function() { + this.element.style.display = "none"; + this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb); + this.editor.focus(); + }; + this.show = function(value, isReplace) { + this.element.style.display = ""; + this.replaceBox.style.display = isReplace ? "" : "none"; + + this.isReplace = isReplace; + + if (value) + this.searchInput.value = value; + this.searchInput.focus(); + this.searchInput.select(); + + this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb); + }; + + this.isFocused = function() { + var el = document.activeElement; + return el == this.searchInput || el == this.replaceInput; + } +}).call(SearchBox.prototype); + +exports.SearchBox = SearchBox; + +exports.Search = function(editor, isReplace) { + var sb = editor.searchBox || new SearchBox(editor); + sb.show(editor.session.getTextRange(), isReplace); +}; + +}); (function() { ace.require(["ace/ext/searchbox"], function() {}); })(); diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-css.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-css.js index 805ba7783..39ad943db 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-css.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-css.js @@ -422,8 +422,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-html.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-html.js index bda519db5..fbd8208e9 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-html.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-html.js @@ -680,8 +680,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-javascript.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-javascript.js index 99420105b..7d638fd29 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-javascript.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-javascript.js @@ -680,8 +680,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-less.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-less.js index 3077309d5..77624320a 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-less.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-less.js @@ -188,7 +188,7 @@ var LessHighlightRules = function() { regex: "\\.[a-z0-9-_]+" }, { token: "variable.language", - regex: ":[a-z0-9-_]+" + regex: ":[a-z_][a-z0-9-_]*" }, { token: "constant", regex: "[a-z0-9-_]+" @@ -507,8 +507,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-markdown.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-markdown.js index 19533f2d5..6da134dc8 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-markdown.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-markdown.js @@ -680,8 +680,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-php.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-php.js index 61856c26b..1b97b0c3a 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-php.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-php.js @@ -2163,8 +2163,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-scss.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-scss.js index 3b239e2f3..384fc5eb4 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-scss.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-scss.js @@ -532,8 +532,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-twig.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-twig.js index 3106084c5..66f3c9ca9 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-twig.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-twig.js @@ -680,8 +680,8 @@ var CstyleBehaviour = function() { if (leftChar == "\\" && token && /escape/.test(token.type)) return null; - var stringBefore = token && /string/.test(token.type); - var stringAfter = !rightToken || /string/.test(rightToken.type); + var stringBefore = token && /string|escape/.test(token.type); + var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds.js index 1fa12d659..83d0d14d5 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds.js @@ -22,7 +22,6 @@ background: #BDD5FC\ }\ .ace-clouds.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ -border-radius: 2px\ }\ .ace-clouds .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds_midnight.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds_midnight.js index b1c6fd263..275e9f296 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds_midnight.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds_midnight.js @@ -22,7 +22,6 @@ background: #000000\ }\ .ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #191919;\ -border-radius: 2px\ }\ .ace-clouds-midnight .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-cobalt.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-cobalt.js index 9aac8f531..c5b6f267c 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-cobalt.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-cobalt.js @@ -22,7 +22,6 @@ background: rgba(179, 101, 57, 0.75)\ }\ .ace-cobalt.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002240;\ -border-radius: 2px\ }\ .ace-cobalt .ace_marker-layer .ace_step {\ background: rgb(127, 111, 19)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dawn.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dawn.js index 38c8f2bb7..f3c15c92e 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dawn.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dawn.js @@ -22,7 +22,6 @@ background: rgba(39, 95, 255, 0.30)\ }\ .ace-dawn.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #F9F9F9;\ -border-radius: 2px\ }\ .ace-dawn .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-idle_fingers.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-idle_fingers.js index 93f7ad4cf..7fcf1cbdb 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-idle_fingers.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-idle_fingers.js @@ -22,7 +22,6 @@ background: rgba(90, 100, 126, 0.88)\ }\ .ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #323232;\ -border-radius: 2px\ }\ .ace-idle-fingers .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-katzenmilch.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-katzenmilch.js index 88ed70c8d..f65ce4a81 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-katzenmilch.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-katzenmilch.js @@ -27,14 +27,13 @@ background: rgba(100, 5, 208, 0.27)\ }\ .ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #f3f2f3;\ -border-radius: 2px\ }\ .ace-katzenmilch .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174)\ }\ .ace-katzenmilch .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ -border: 1px solid #000000\ +border: 1px solid rgba(0, 0, 0, 0.33);\ }\ .ace-katzenmilch .ace_marker-layer .ace_active-line {\ background: rgb(232, 242, 254)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kr_theme.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kr_theme.js index 27dff6e28..8818b33e7 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kr_theme.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kr_theme.js @@ -22,7 +22,6 @@ background: rgba(170, 0, 255, 0.45)\ }\ .ace-kr-theme.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #0B0A09;\ -border-radius: 2px\ }\ .ace-kr-theme .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore.js index faa43ea8a..fc0a72f1c 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore.js @@ -22,7 +22,6 @@ background: #454545\ }\ .ace-merbivore.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #161616;\ -border-radius: 2px\ }\ .ace-merbivore .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore_soft.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore_soft.js index 2adf44a5b..eff246465 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore_soft.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore_soft.js @@ -22,7 +22,6 @@ background: #494949\ }\ .ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #1C1C1C;\ -border-radius: 2px\ }\ .ace-merbivore-soft .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-mono_industrial.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-mono_industrial.js index 277963b0f..0ece0309c 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-mono_industrial.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-mono_industrial.js @@ -22,7 +22,6 @@ background: rgba(145, 153, 148, 0.40)\ }\ .ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #222C28;\ -border-radius: 2px\ }\ .ace-mono-industrial .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-monokai.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-monokai.js index 13f328d24..322c2fa88 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-monokai.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-monokai.js @@ -22,7 +22,6 @@ background: #49483E\ }\ .ace-monokai.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #272822;\ -border-radius: 2px\ }\ .ace-monokai .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-pastel_on_dark.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-pastel_on_dark.js index f49e3aff6..2631ae003 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-pastel_on_dark.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-pastel_on_dark.js @@ -22,7 +22,6 @@ background: rgba(221, 240, 255, 0.20)\ }\ .ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #2C2828;\ -border-radius: 2px\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_dark.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_dark.js index a8873069d..d1acdb46a 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_dark.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_dark.js @@ -28,7 +28,6 @@ background: rgba(255, 255, 255, 0.1)\ }\ .ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002B36;\ -border-radius: 2px\ }\ .ace-solarized-dark .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_light.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_light.js index 73d899616..f0c078ae5 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_light.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_light.js @@ -22,7 +22,6 @@ background: rgba(7, 54, 67, 0.09)\ }\ .ace-solarized-light.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FDF6E3;\ -border-radius: 2px\ }\ .ace-solarized-light .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-sqlserver.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-sqlserver.js index 311992b33..91f34f6c4 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-sqlserver.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-sqlserver.js @@ -2,10 +2,7 @@ ace.define("ace/theme/sqlserver",["require","exports","module","ace/lib/dom"], f exports.isDark = false; exports.cssClass = "ace-sqlserver"; -exports.cssText = ".ace_line {\ -font-family: Consolas;\ -}\ -.ace-sqlserver .ace_gutter {\ +exports.cssText = ".ace-sqlserver .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow: hidden;\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-terminal.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-terminal.js index 577ec4963..def9e69b7 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-terminal.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-terminal.js @@ -22,7 +22,6 @@ background: #424242\ }\ .ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px black;\ -border-radius: 2px\ }\ .ace-terminal-theme .ace_marker-layer .ace_step {\ background: rgb(0, 0, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-textmate.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-textmate.js index 7deba5094..0033edae2 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-textmate.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-textmate.js @@ -98,7 +98,6 @@ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ -border-radius: 2px;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow.js index e44142b84..4661be112 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow.js @@ -22,7 +22,6 @@ background: #D6D6D6\ }\ .ace-tomorrow.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ -border-radius: 2px\ }\ .ace-tomorrow .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night.js index dacc007b1..53e1f39a4 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night.js @@ -22,7 +22,6 @@ background: #373B41\ }\ .ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #1D1F21;\ -border-radius: 2px\ }\ .ace-tomorrow-night .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_blue.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_blue.js index a44918962..956e221ec 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_blue.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_blue.js @@ -23,7 +23,6 @@ background: #003F8E\ }\ .ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002451;\ -border-radius: 2px\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ background: rgb(127, 111, 19)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_bright.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_bright.js index a53295088..8514a0d69 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_bright.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_bright.js @@ -22,7 +22,6 @@ background: #424242\ }\ .ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #000000;\ -border-radius: 2px\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_eighties.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_eighties.js index 7e2e9d2a1..3665e3f7d 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_eighties.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_eighties.js @@ -23,7 +23,6 @@ background: #515151\ }\ .ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #2D2D2D;\ -border-radius: 2px\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-twilight.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-twilight.js index 4a259731c..48ec03098 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-twilight.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-twilight.js @@ -22,7 +22,6 @@ background: rgba(221, 240, 255, 0.20)\ }\ .ace-twilight.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #141414;\ -border-radius: 2px\ }\ .ace-twilight .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-vibrant_ink.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-vibrant_ink.js index d362b84df..db926c705 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-vibrant_ink.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-vibrant_ink.js @@ -22,7 +22,6 @@ background: #6699CC\ }\ .ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #0F0F0F;\ -border-radius: 2px\ }\ .ace-vibrant-ink .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-xcode.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-xcode.js index f3b3753d5..3604a1702 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-xcode.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-xcode.js @@ -23,7 +23,6 @@ background: #B5D5FF\ }\ .ace-xcode.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ -border-radius: 2px\ }\ .ace-xcode .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174)\ diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-css.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-css.js index ae2360872..444267d2c 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-css.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-css.js @@ -1,8 +1,9 @@ "no use strict"; ;(function(window) { -if (typeof window.window != "undefined" && window.document) { +if (typeof window.window != "undefined" && window.document) + return; +if (window.require && window.define) return; -} window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); @@ -19,6 +20,7 @@ window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, + data: err.data, file: file, line: line, col: col, @@ -37,7 +39,7 @@ window.normalizeModule = function(parentId, moduleName) { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } @@ -46,7 +48,7 @@ window.normalizeModule = function(parentId, moduleName) { return moduleName; }; -window.require = function(parentId, id) { +window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; @@ -64,17 +66,36 @@ window.require = function(parentId, id) { } return module.exports; } - - var chunks = id.split("/"); + if (!window.require.tlns) return console.log("unable to load " + id); - chunks[0] = window.require.tlns[chunks[0]] || chunks[0]; - var path = chunks.join("/") + ".js"; + + var path = resolveModuleId(id, window.require.tlns); + if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; + window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; +function resolveModuleId(id, paths) { + var testPath = id, tail = ""; + while (testPath) { + var alias = paths[testPath]; + if (typeof alias == "string") { + return alias + tail; + } else if (alias) { + return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); + } else if (alias === false) { + return ""; + } + var i = testPath.lastIndexOf("/"); + if (i === -1) break; + tail = testPath.substr(i) + tail; + testPath = testPath.slice(0, i); + } + return id; +} window.require.modules = {}; window.require.tlns = {}; @@ -100,9 +121,9 @@ window.define = function(id, deps, factory) { } if (!deps.length) - // If there is no dependencies, we inject 'require', 'exports' and - // 'module' as dependencies, to provide CommonJS compatibility. - deps = ['require', 'exports', 'module']; + // If there is no dependencies, we inject "require", "exports" and + // "module" as dependencies, to provide CommonJS compatibility. + deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); @@ -113,16 +134,16 @@ window.define = function(id, deps, factory) { factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { - switch(dep) { - // Because 'require', 'exports' and 'module' aren't actual - // dependencies, we must handle them seperately. - case 'require': return req; - case 'exports': return module.exports; - case 'module': return module; - // But for all other dependencies, we can just go ahead and - // require them. - default: return req(dep); - } + switch (dep) { + // Because "require", "exports" and "module" aren't actual + // dependencies, we must handle them seperately. + case "require": return req; + case "exports": return module.exports; + case "module": return module; + // But for all other dependencies, we can just go ahead and + // require them. + default: return req(dep); + } })); if (returnExports) module.exports = returnExports; @@ -131,9 +152,10 @@ window.define = function(id, deps, factory) { }; }; window.define.amd = {}; - +require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { - require.tlns = topLevelNamespaces; + for (var i in topLevelNamespaces) + require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { @@ -173,21 +195,23 @@ var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; - if (msg.command) { + if (msg.event && sender) { + sender._signal(msg.event, msg.data); + } + else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); + else if (window[msg.command]) + window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } - else if (msg.init) { - initBaseUrls(msg.tlns); + else if (msg.init) { + window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); - sender = window.sender = initSender(); + sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); - } - else if (msg.event && sender) { - sender._signal(msg.event, msg.data); } }; })(this); @@ -410,132 +434,6 @@ exports.delayedCall = function(fcn, defaultTimeout) { }; }); -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var EventEmitter = {}; -var stopPropagation = function() { this.propagationStopped = true; }; -var preventDefault = function() { this.defaultPrevented = true; }; - -EventEmitter._emit = -EventEmitter._dispatchEvent = function(eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - - if (typeof e != "object" || !e) - e = {}; - - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - - listeners = listeners.slice(); - for (var i=0; i= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; +} + +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); +} + +exports.applyDelta = function(docLines, delta, doNotValidate) { + + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } else { + docLines.splice( + row, endRow - row + 1, + line.substring(0, startColumn) + docLines[endRow].substring(endColumn) + ); + } + break; + } +} +}); + +ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { +"use strict"; + +var EventEmitter = {}; +var stopPropagation = function() { this.propagationStopped = true; }; +var preventDefault = function() { this.defaultPrevented = true; }; + +EventEmitter._emit = +EventEmitter._dispatchEvent = function(eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + + if (typeof e != "object" || !e) + e = {}; + + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + + listeners = listeners.slice(); + for (var i=0; i this.row) + if (delta.start.row > this.row) return; - - if (range.start.row == this.row && range.start.column > this.column) - return; - - var row = this.row; - var column = this.column; - var start = range.start; - var end = range.end; - - if (delta.action === "insertText") { - if (start.row === row && start.column <= column) { - if (start.column === column && this.$insertRight) { - } else if (start.row === end.row) { - column += end.column - start.column; - } else { - column -= start.column; - row += end.row - start.row; - } - } else if (start.row !== end.row && start.row < row) { - row += end.row - start.row; - } - } else if (delta.action === "insertLines") { - if (start.row === row && column === 0 && this.$insertRight) { - } - else if (start.row <= row) { - row += end.row - start.row; - } - } else if (delta.action === "removeText") { - if (start.row === row && start.column < column) { - if (end.column >= column) - column = start.column; - else - column = Math.max(0, column - (end.column - start.column)); - - } else if (start.row !== end.row && start.row < row) { - if (end.row === row) - column = Math.max(0, column - end.column) + start.column; - row -= (end.row - start.row); - } else if (end.row === row) { - row -= end.row - start.row; - column = Math.max(0, column - end.column) + start.column; - } - } else if (delta.action == "removeLines") { - if (start.row <= row) { - if (end.row <= row) - row -= end.row - start.row; - else { - row = start.row; - column = 0; - } - } - } - - this.setPosition(row, column, true); + + var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); + this.setPosition(point.row, point.column, true); }; + + function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); + } + + function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + + return { + row: deltaStart.row, + column: deltaStart.column + }; + } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { @@ -924,22 +989,23 @@ var Anchor = exports.Anchor = function(doc, row, column) { }); -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; -var Document = function(text) { - this.$lines = []; - if (text.length === 0) { +var Document = function(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { this.$lines = [""]; - } else if (Array.isArray(text)) { - this._insertLines(0, text); + } else if (Array.isArray(textOrLines)) { + this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { - this.insert({row: 0, column:0}, text); + this.insert({row: 0, column:0}, textOrLines); } }; @@ -947,9 +1013,9 @@ var Document = function(text) { oop.implement(this, EventEmitter); this.setValue = function(text) { - var len = this.getLength(); - this.remove(new Range(0, 0, len, this.getLine(len-1).length)); - this.insert({row: 0, column:0}, text); + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); @@ -957,14 +1023,15 @@ var Document = function(text) { this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; - if ("aaa".split(/a/).length === 0) + if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; - else + } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; + } this.$detectNewLine = function(text) { @@ -1011,252 +1078,247 @@ var Document = function(text) { return this.$lines.length; }; this.getTextRange = function(range) { - if (range.start.row == range.end.row) { - return this.getLine(range.start.row) - .substring(range.start.column, range.end.column); - } - var lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - return lines.join(this.getNewLineCharacter()); + return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; - + this.getLinesForRange = function(range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + this.insertLines = function(row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + this.removeLines = function(firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + this.insertNewLine = function(position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + this.insert = function(position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + + return this.insertMergedLines(position, this.$split(text)); + }; + this.insertInLine = function(position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + + return this.clonePos(end); + }; + + this.clippedPos = function(row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } else if (row < 0) { + row = 0; + } else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return {row: row, column: column}; + }; + + this.clonePos = function(pos) { + return {row: pos.row, column: pos.column}; + }; + + this.pos = function(row, column) { + return {row: row, column: column}; + }; + this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); - position.column = this.getLine(length-1).length; - } else if (position.row < 0) - position.row = 0; - return position; - }; - this.insert = function(position, text) { - if (!text || text.length === 0) - return position; - - position = this.$clipPosition(position); - if (this.getLength() <= 1) - this.$detectNewLine(text); - - var lines = this.$split(text); - var firstLine = lines.splice(0, 1)[0]; - var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; - - position = this.insertInLine(position, firstLine); - if (lastLine !== null) { - position = this.insertNewLine(position); // terminate first line - position = this._insertLines(position.row, lines); - position = this.insertInLine(position, lastLine || ""); + position.column = this.getLine(length - 1).length; + } else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; - this.insertLines = function(row, lines) { - if (row >= this.getLength()) - return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); - return this._insertLines(Math.max(row, 0), lines); - }; - this._insertLines = function(row, lines) { - if (lines.length == 0) - return {row: row, column: 0}; - while (lines.length > 20000) { - var end = this._insertLines(row, lines.slice(0, 20000)); - lines = lines.slice(20000); - row = end.row; + this.insertFullLines = function(row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; } - - var args = [row, 0]; - args.push.apply(args, lines); - this.$lines.splice.apply(this.$lines, args); - - var range = new Range(row, 0, row + lines.length, 0); - var delta = { - action: "insertLines", - range: range, + this.insertMergedLines({row: row, column: column}, lines); + }; + this.insertMergedLines = function(position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + + this.applyDelta({ + start: start, + end: end, + action: "insert", lines: lines - }; - this._signal("change", { data: delta }); - return range.end; - }; - this.insertNewLine = function(position) { - position = this.$clipPosition(position); - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column); - this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); - - var end = { - row : position.row + 1, - column : 0 - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); - - return end; - }; - this.insertInLine = function(position, text) { - if (text.length == 0) - return position; - - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column) + text - + line.substring(position.column); - - var end = { - row : position.row, - column : position.column + text.length - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: text - }; - this._signal("change", { data: delta }); - - return end; + }); + + return this.clonePos(end); }; this.remove = function(range) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - range.start = this.$clipPosition(range.start); - range.end = this.$clipPosition(range.end); - - if (range.isEmpty()) - return range.start; - - var firstRow = range.start.row; - var lastRow = range.end.row; - - if (range.isMultiLine()) { - var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; - var lastFullRow = lastRow - 1; - - if (range.end.column > 0) - this.removeInLine(lastRow, 0, range.end.column); - - if (lastFullRow >= firstFullRow) - this._removeLines(firstFullRow, lastFullRow); - - if (firstFullRow != firstRow) { - this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); - this.removeNewLine(range.start.row); - } - } - else { - this.removeInLine(firstRow, range.start.column, range.end.column); - } - return range.start; + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }); + return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { - if (startColumn == endColumn) - return; - - var range = new Range(row, startColumn, row, endColumn); - var line = this.getLine(row); - var removed = line.substring(startColumn, endColumn); - var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); - this.$lines.splice(row, 1, newLine); - - var delta = { - action: "removeText", - range: range, - text: removed - }; - this._signal("change", { data: delta }); - return range.start; + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }, true); + + return this.clonePos(start); }; - this.removeLines = function(firstRow, lastRow) { - if (firstRow < 0 || lastRow >= this.getLength()) - return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); - return this._removeLines(firstRow, lastRow); - }; - - this._removeLines = function(firstRow, lastRow) { - var range = new Range(firstRow, 0, lastRow + 1, 0); - var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); - - var delta = { - action: "removeLines", - range: range, - nl: this.getNewLineCharacter(), - lines: removed - }; - this._signal("change", { data: delta }); - return removed; + this.removeFullLines = function(firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); + var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); + var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); + var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; }; this.removeNewLine = function(row) { - var firstLine = this.getLine(row); - var secondLine = this.getLine(row+1); - - var range = new Range(row, firstLine.length, row+1, 0); - var line = firstLine + secondLine; - - this.$lines.splice(row, 2, line); - - var delta = { - action: "removeText", - range: range, - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } }; this.replace = function(range, text) { - if (!(range instanceof Range)) + if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); - if (text.length == 0 && range.isEmpty()) + if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); + var end; if (text) { - var end = this.insert(range.start, text); + end = this.insert(range.start, text); } else { end = range.start; } - + return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { - var delta = deltas[i]; - - var range = Range.fromPoints(delta.range.start, delta.range.end); - - if (delta.action == "insertLines") - this._removeLines(range.start.row, range.end.row - 1); - else if (delta.action == "insertText") - this.remove(range); - else if (delta.action == "removeLines") - this._insertLines(range.start.row, delta.lines); - else if (delta.action == "removeText") - this.insert(range.start, delta.text); + this.revertDelta(deltas[i]); } }; + this.applyDelta = function(delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + + if (isInsert && delta.lines.length > 20000) + this.$splitAndapplyLargeDelta(delta, 20000); + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + }; + + this.$splitAndapplyLargeDelta = function(delta, MAX) { + var lines = delta.lines; + var l = lines.length; + var row = delta.start.row; + var column = delta.start.column; + var from = 0, to = 0; + do { + from = to; + to += MAX - 1; + var chunk = lines.slice(from, to); + if (to > l) { + delta.lines = chunk; + delta.start.row = row + from; + delta.start.column = column; + break; + } + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } while(true); + }; + this.revertDelta = function(delta) { + this.applyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; @@ -1283,9 +1345,10 @@ var Document = function(text) { exports.Document = Document; }); -ace.define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"], function(require, exports, module) { +ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; +var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); @@ -1297,7 +1360,19 @@ var Mirror = exports.Mirror = function(sender) { var _self = this; sender.on("change", function(e) { - doc.applyDeltas(e.data); + var data = e.data; + if (data[0].start) { + doc.applyDeltas(data); + } else { + for (var i = 0; i < data.length; i += 2) { + if (Array.isArray(data[i+1])) { + var d = {action: "insert", start: data[i], lines: data[i+1]}; + } else { + var d = {action: "remove", start: data[i], end: data[i+1]}; + } + doc.applyDelta(d, true); + } + } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-html.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-html.js index 22d83bcb3..941d0d7d9 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-html.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-html.js @@ -1,8 +1,9 @@ "no use strict"; ;(function(window) { -if (typeof window.window != "undefined" && window.document) { +if (typeof window.window != "undefined" && window.document) + return; +if (window.require && window.define) return; -} window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); @@ -19,6 +20,7 @@ window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, + data: err.data, file: file, line: line, col: col, @@ -37,7 +39,7 @@ window.normalizeModule = function(parentId, moduleName) { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } @@ -46,7 +48,7 @@ window.normalizeModule = function(parentId, moduleName) { return moduleName; }; -window.require = function(parentId, id) { +window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; @@ -64,17 +66,36 @@ window.require = function(parentId, id) { } return module.exports; } - - var chunks = id.split("/"); + if (!window.require.tlns) return console.log("unable to load " + id); - chunks[0] = window.require.tlns[chunks[0]] || chunks[0]; - var path = chunks.join("/") + ".js"; + + var path = resolveModuleId(id, window.require.tlns); + if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; + window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; +function resolveModuleId(id, paths) { + var testPath = id, tail = ""; + while (testPath) { + var alias = paths[testPath]; + if (typeof alias == "string") { + return alias + tail; + } else if (alias) { + return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); + } else if (alias === false) { + return ""; + } + var i = testPath.lastIndexOf("/"); + if (i === -1) break; + tail = testPath.substr(i) + tail; + testPath = testPath.slice(0, i); + } + return id; +} window.require.modules = {}; window.require.tlns = {}; @@ -100,9 +121,9 @@ window.define = function(id, deps, factory) { } if (!deps.length) - // If there is no dependencies, we inject 'require', 'exports' and - // 'module' as dependencies, to provide CommonJS compatibility. - deps = ['require', 'exports', 'module']; + // If there is no dependencies, we inject "require", "exports" and + // "module" as dependencies, to provide CommonJS compatibility. + deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); @@ -113,16 +134,16 @@ window.define = function(id, deps, factory) { factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { - switch(dep) { - // Because 'require', 'exports' and 'module' aren't actual - // dependencies, we must handle them seperately. - case 'require': return req; - case 'exports': return module.exports; - case 'module': return module; - // But for all other dependencies, we can just go ahead and - // require them. - default: return req(dep); - } + switch (dep) { + // Because "require", "exports" and "module" aren't actual + // dependencies, we must handle them seperately. + case "require": return req; + case "exports": return module.exports; + case "module": return module; + // But for all other dependencies, we can just go ahead and + // require them. + default: return req(dep); + } })); if (returnExports) module.exports = returnExports; @@ -131,9 +152,10 @@ window.define = function(id, deps, factory) { }; }; window.define.amd = {}; - +require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { - require.tlns = topLevelNamespaces; + for (var i in topLevelNamespaces) + require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { @@ -173,21 +195,23 @@ var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; - if (msg.command) { + if (msg.event && sender) { + sender._signal(msg.event, msg.data); + } + else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); + else if (window[msg.command]) + window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } - else if (msg.init) { - initBaseUrls(msg.tlns); + else if (msg.init) { + window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); - sender = window.sender = initSender(); + sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); - } - else if (msg.event && sender) { - sender._signal(msg.event, msg.data); } }; })(this); @@ -410,132 +434,6 @@ exports.delayedCall = function(fcn, defaultTimeout) { }; }); -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var EventEmitter = {}; -var stopPropagation = function() { this.propagationStopped = true; }; -var preventDefault = function() { this.defaultPrevented = true; }; - -EventEmitter._emit = -EventEmitter._dispatchEvent = function(eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - - if (typeof e != "object" || !e) - e = {}; - - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - - listeners = listeners.slice(); - for (var i=0; i= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; +} + +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); +} + +exports.applyDelta = function(docLines, delta, doNotValidate) { + + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } else { + docLines.splice( + row, endRow - row + 1, + line.substring(0, startColumn) + docLines[endRow].substring(endColumn) + ); + } + break; + } +} +}); + +ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { +"use strict"; + +var EventEmitter = {}; +var stopPropagation = function() { this.propagationStopped = true; }; +var preventDefault = function() { this.defaultPrevented = true; }; + +EventEmitter._emit = +EventEmitter._dispatchEvent = function(eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + + if (typeof e != "object" || !e) + e = {}; + + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + + listeners = listeners.slice(); + for (var i=0; i this.row) + if (delta.start.row > this.row) return; - - if (range.start.row == this.row && range.start.column > this.column) - return; - - var row = this.row; - var column = this.column; - var start = range.start; - var end = range.end; - - if (delta.action === "insertText") { - if (start.row === row && start.column <= column) { - if (start.column === column && this.$insertRight) { - } else if (start.row === end.row) { - column += end.column - start.column; - } else { - column -= start.column; - row += end.row - start.row; - } - } else if (start.row !== end.row && start.row < row) { - row += end.row - start.row; - } - } else if (delta.action === "insertLines") { - if (start.row === row && column === 0 && this.$insertRight) { - } - else if (start.row <= row) { - row += end.row - start.row; - } - } else if (delta.action === "removeText") { - if (start.row === row && start.column < column) { - if (end.column >= column) - column = start.column; - else - column = Math.max(0, column - (end.column - start.column)); - - } else if (start.row !== end.row && start.row < row) { - if (end.row === row) - column = Math.max(0, column - end.column) + start.column; - row -= (end.row - start.row); - } else if (end.row === row) { - row -= end.row - start.row; - column = Math.max(0, column - end.column) + start.column; - } - } else if (delta.action == "removeLines") { - if (start.row <= row) { - if (end.row <= row) - row -= end.row - start.row; - else { - row = start.row; - column = 0; - } - } - } - - this.setPosition(row, column, true); + + var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); + this.setPosition(point.row, point.column, true); }; + + function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); + } + + function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + + return { + row: deltaStart.row, + column: deltaStart.column + }; + } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { @@ -924,22 +989,23 @@ var Anchor = exports.Anchor = function(doc, row, column) { }); -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; -var Document = function(text) { - this.$lines = []; - if (text.length === 0) { +var Document = function(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { this.$lines = [""]; - } else if (Array.isArray(text)) { - this._insertLines(0, text); + } else if (Array.isArray(textOrLines)) { + this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { - this.insert({row: 0, column:0}, text); + this.insert({row: 0, column:0}, textOrLines); } }; @@ -947,9 +1013,9 @@ var Document = function(text) { oop.implement(this, EventEmitter); this.setValue = function(text) { - var len = this.getLength(); - this.remove(new Range(0, 0, len, this.getLine(len-1).length)); - this.insert({row: 0, column:0}, text); + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); @@ -957,14 +1023,15 @@ var Document = function(text) { this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; - if ("aaa".split(/a/).length === 0) + if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; - else + } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; + } this.$detectNewLine = function(text) { @@ -1011,252 +1078,247 @@ var Document = function(text) { return this.$lines.length; }; this.getTextRange = function(range) { - if (range.start.row == range.end.row) { - return this.getLine(range.start.row) - .substring(range.start.column, range.end.column); - } - var lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - return lines.join(this.getNewLineCharacter()); + return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; - + this.getLinesForRange = function(range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + this.insertLines = function(row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + this.removeLines = function(firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + this.insertNewLine = function(position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + this.insert = function(position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + + return this.insertMergedLines(position, this.$split(text)); + }; + this.insertInLine = function(position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + + return this.clonePos(end); + }; + + this.clippedPos = function(row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } else if (row < 0) { + row = 0; + } else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return {row: row, column: column}; + }; + + this.clonePos = function(pos) { + return {row: pos.row, column: pos.column}; + }; + + this.pos = function(row, column) { + return {row: row, column: column}; + }; + this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); - position.column = this.getLine(length-1).length; - } else if (position.row < 0) - position.row = 0; - return position; - }; - this.insert = function(position, text) { - if (!text || text.length === 0) - return position; - - position = this.$clipPosition(position); - if (this.getLength() <= 1) - this.$detectNewLine(text); - - var lines = this.$split(text); - var firstLine = lines.splice(0, 1)[0]; - var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; - - position = this.insertInLine(position, firstLine); - if (lastLine !== null) { - position = this.insertNewLine(position); // terminate first line - position = this._insertLines(position.row, lines); - position = this.insertInLine(position, lastLine || ""); + position.column = this.getLine(length - 1).length; + } else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; - this.insertLines = function(row, lines) { - if (row >= this.getLength()) - return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); - return this._insertLines(Math.max(row, 0), lines); - }; - this._insertLines = function(row, lines) { - if (lines.length == 0) - return {row: row, column: 0}; - while (lines.length > 20000) { - var end = this._insertLines(row, lines.slice(0, 20000)); - lines = lines.slice(20000); - row = end.row; + this.insertFullLines = function(row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; } - - var args = [row, 0]; - args.push.apply(args, lines); - this.$lines.splice.apply(this.$lines, args); - - var range = new Range(row, 0, row + lines.length, 0); - var delta = { - action: "insertLines", - range: range, + this.insertMergedLines({row: row, column: column}, lines); + }; + this.insertMergedLines = function(position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + + this.applyDelta({ + start: start, + end: end, + action: "insert", lines: lines - }; - this._signal("change", { data: delta }); - return range.end; - }; - this.insertNewLine = function(position) { - position = this.$clipPosition(position); - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column); - this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); - - var end = { - row : position.row + 1, - column : 0 - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); - - return end; - }; - this.insertInLine = function(position, text) { - if (text.length == 0) - return position; - - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column) + text - + line.substring(position.column); - - var end = { - row : position.row, - column : position.column + text.length - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: text - }; - this._signal("change", { data: delta }); - - return end; + }); + + return this.clonePos(end); }; this.remove = function(range) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - range.start = this.$clipPosition(range.start); - range.end = this.$clipPosition(range.end); - - if (range.isEmpty()) - return range.start; - - var firstRow = range.start.row; - var lastRow = range.end.row; - - if (range.isMultiLine()) { - var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; - var lastFullRow = lastRow - 1; - - if (range.end.column > 0) - this.removeInLine(lastRow, 0, range.end.column); - - if (lastFullRow >= firstFullRow) - this._removeLines(firstFullRow, lastFullRow); - - if (firstFullRow != firstRow) { - this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); - this.removeNewLine(range.start.row); - } - } - else { - this.removeInLine(firstRow, range.start.column, range.end.column); - } - return range.start; + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }); + return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { - if (startColumn == endColumn) - return; - - var range = new Range(row, startColumn, row, endColumn); - var line = this.getLine(row); - var removed = line.substring(startColumn, endColumn); - var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); - this.$lines.splice(row, 1, newLine); - - var delta = { - action: "removeText", - range: range, - text: removed - }; - this._signal("change", { data: delta }); - return range.start; + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }, true); + + return this.clonePos(start); }; - this.removeLines = function(firstRow, lastRow) { - if (firstRow < 0 || lastRow >= this.getLength()) - return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); - return this._removeLines(firstRow, lastRow); - }; - - this._removeLines = function(firstRow, lastRow) { - var range = new Range(firstRow, 0, lastRow + 1, 0); - var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); - - var delta = { - action: "removeLines", - range: range, - nl: this.getNewLineCharacter(), - lines: removed - }; - this._signal("change", { data: delta }); - return removed; + this.removeFullLines = function(firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); + var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); + var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); + var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; }; this.removeNewLine = function(row) { - var firstLine = this.getLine(row); - var secondLine = this.getLine(row+1); - - var range = new Range(row, firstLine.length, row+1, 0); - var line = firstLine + secondLine; - - this.$lines.splice(row, 2, line); - - var delta = { - action: "removeText", - range: range, - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } }; this.replace = function(range, text) { - if (!(range instanceof Range)) + if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); - if (text.length == 0 && range.isEmpty()) + if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); + var end; if (text) { - var end = this.insert(range.start, text); + end = this.insert(range.start, text); } else { end = range.start; } - + return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { - var delta = deltas[i]; - - var range = Range.fromPoints(delta.range.start, delta.range.end); - - if (delta.action == "insertLines") - this._removeLines(range.start.row, range.end.row - 1); - else if (delta.action == "insertText") - this.remove(range); - else if (delta.action == "removeLines") - this._insertLines(range.start.row, delta.lines); - else if (delta.action == "removeText") - this.insert(range.start, delta.text); + this.revertDelta(deltas[i]); } }; + this.applyDelta = function(delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + + if (isInsert && delta.lines.length > 20000) + this.$splitAndapplyLargeDelta(delta, 20000); + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + }; + + this.$splitAndapplyLargeDelta = function(delta, MAX) { + var lines = delta.lines; + var l = lines.length; + var row = delta.start.row; + var column = delta.start.column; + var from = 0, to = 0; + do { + from = to; + to += MAX - 1; + var chunk = lines.slice(from, to); + if (to > l) { + delta.lines = chunk; + delta.start.row = row + from; + delta.start.column = column; + break; + } + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } while(true); + }; + this.revertDelta = function(delta) { + this.applyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; @@ -1283,9 +1345,10 @@ var Document = function(text) { exports.Document = Document; }); -ace.define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"], function(require, exports, module) { +ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; +var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); @@ -1297,7 +1360,19 @@ var Mirror = exports.Mirror = function(sender) { var _self = this; sender.on("change", function(e) { - doc.applyDeltas(e.data); + var data = e.data; + if (data[0].start) { + doc.applyDeltas(data); + } else { + for (var i = 0; i < data.length; i += 2) { + if (Array.isArray(data[i+1])) { + var d = {action: "insert", start: data[i], lines: data[i+1]}; + } else { + var d = {action: "remove", start: data[i], end: data[i+1]}; + } + doc.applyDelta(d, true); + } + } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-javascript.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-javascript.js index 19df72496..c6b4ddaa2 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-javascript.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-javascript.js @@ -1,8 +1,9 @@ "no use strict"; ;(function(window) { -if (typeof window.window != "undefined" && window.document) { +if (typeof window.window != "undefined" && window.document) + return; +if (window.require && window.define) return; -} window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); @@ -19,6 +20,7 @@ window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, + data: err.data, file: file, line: line, col: col, @@ -37,7 +39,7 @@ window.normalizeModule = function(parentId, moduleName) { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } @@ -46,7 +48,7 @@ window.normalizeModule = function(parentId, moduleName) { return moduleName; }; -window.require = function(parentId, id) { +window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; @@ -64,17 +66,36 @@ window.require = function(parentId, id) { } return module.exports; } - - var chunks = id.split("/"); + if (!window.require.tlns) return console.log("unable to load " + id); - chunks[0] = window.require.tlns[chunks[0]] || chunks[0]; - var path = chunks.join("/") + ".js"; + + var path = resolveModuleId(id, window.require.tlns); + if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; + window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; +function resolveModuleId(id, paths) { + var testPath = id, tail = ""; + while (testPath) { + var alias = paths[testPath]; + if (typeof alias == "string") { + return alias + tail; + } else if (alias) { + return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); + } else if (alias === false) { + return ""; + } + var i = testPath.lastIndexOf("/"); + if (i === -1) break; + tail = testPath.substr(i) + tail; + testPath = testPath.slice(0, i); + } + return id; +} window.require.modules = {}; window.require.tlns = {}; @@ -100,9 +121,9 @@ window.define = function(id, deps, factory) { } if (!deps.length) - // If there is no dependencies, we inject 'require', 'exports' and - // 'module' as dependencies, to provide CommonJS compatibility. - deps = ['require', 'exports', 'module']; + // If there is no dependencies, we inject "require", "exports" and + // "module" as dependencies, to provide CommonJS compatibility. + deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); @@ -113,16 +134,16 @@ window.define = function(id, deps, factory) { factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { - switch(dep) { - // Because 'require', 'exports' and 'module' aren't actual - // dependencies, we must handle them seperately. - case 'require': return req; - case 'exports': return module.exports; - case 'module': return module; - // But for all other dependencies, we can just go ahead and - // require them. - default: return req(dep); - } + switch (dep) { + // Because "require", "exports" and "module" aren't actual + // dependencies, we must handle them seperately. + case "require": return req; + case "exports": return module.exports; + case "module": return module; + // But for all other dependencies, we can just go ahead and + // require them. + default: return req(dep); + } })); if (returnExports) module.exports = returnExports; @@ -131,9 +152,10 @@ window.define = function(id, deps, factory) { }; }; window.define.amd = {}; - +require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { - require.tlns = topLevelNamespaces; + for (var i in topLevelNamespaces) + require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { @@ -173,21 +195,23 @@ var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; - if (msg.command) { + if (msg.event && sender) { + sender._signal(msg.event, msg.data); + } + else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); + else if (window[msg.command]) + window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } - else if (msg.init) { - initBaseUrls(msg.tlns); + else if (msg.init) { + window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); - sender = window.sender = initSender(); + sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); - } - else if (msg.event && sender) { - sender._signal(msg.event, msg.data); } }; })(this); @@ -220,132 +244,6 @@ exports.implement = function(proto, mixin) { }); -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var EventEmitter = {}; -var stopPropagation = function() { this.propagationStopped = true; }; -var preventDefault = function() { this.defaultPrevented = true; }; - -EventEmitter._emit = -EventEmitter._dispatchEvent = function(eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - - if (typeof e != "object" || !e) - e = {}; - - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - - listeners = listeners.slice(); - for (var i=0; i= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; +} + +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); +} + +exports.applyDelta = function(docLines, delta, doNotValidate) { + + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } else { + docLines.splice( + row, endRow - row + 1, + line.substring(0, startColumn) + docLines[endRow].substring(endColumn) + ); + } + break; + } +} +}); + +ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { +"use strict"; + +var EventEmitter = {}; +var stopPropagation = function() { this.propagationStopped = true; }; +var preventDefault = function() { this.defaultPrevented = true; }; + +EventEmitter._emit = +EventEmitter._dispatchEvent = function(eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + + if (typeof e != "object" || !e) + e = {}; + + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + + listeners = listeners.slice(); + for (var i=0; i this.row) + if (delta.start.row > this.row) return; - - if (range.start.row == this.row && range.start.column > this.column) - return; - - var row = this.row; - var column = this.column; - var start = range.start; - var end = range.end; - - if (delta.action === "insertText") { - if (start.row === row && start.column <= column) { - if (start.column === column && this.$insertRight) { - } else if (start.row === end.row) { - column += end.column - start.column; - } else { - column -= start.column; - row += end.row - start.row; - } - } else if (start.row !== end.row && start.row < row) { - row += end.row - start.row; - } - } else if (delta.action === "insertLines") { - if (start.row === row && column === 0 && this.$insertRight) { - } - else if (start.row <= row) { - row += end.row - start.row; - } - } else if (delta.action === "removeText") { - if (start.row === row && start.column < column) { - if (end.column >= column) - column = start.column; - else - column = Math.max(0, column - (end.column - start.column)); - - } else if (start.row !== end.row && start.row < row) { - if (end.row === row) - column = Math.max(0, column - end.column) + start.column; - row -= (end.row - start.row); - } else if (end.row === row) { - row -= end.row - start.row; - column = Math.max(0, column - end.column) + start.column; - } - } else if (delta.action == "removeLines") { - if (start.row <= row) { - if (end.row <= row) - row -= end.row - start.row; - else { - row = start.row; - column = 0; - } - } - } - - this.setPosition(row, column, true); + + var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); + this.setPosition(point.row, point.column, true); }; + + function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); + } + + function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + + return { + row: deltaStart.row, + column: deltaStart.column + }; + } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { @@ -734,22 +799,23 @@ var Anchor = exports.Anchor = function(doc, row, column) { }); -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; -var Document = function(text) { - this.$lines = []; - if (text.length === 0) { +var Document = function(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { this.$lines = [""]; - } else if (Array.isArray(text)) { - this._insertLines(0, text); + } else if (Array.isArray(textOrLines)) { + this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { - this.insert({row: 0, column:0}, text); + this.insert({row: 0, column:0}, textOrLines); } }; @@ -757,9 +823,9 @@ var Document = function(text) { oop.implement(this, EventEmitter); this.setValue = function(text) { - var len = this.getLength(); - this.remove(new Range(0, 0, len, this.getLine(len-1).length)); - this.insert({row: 0, column:0}, text); + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); @@ -767,14 +833,15 @@ var Document = function(text) { this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; - if ("aaa".split(/a/).length === 0) + if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; - else + } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; + } this.$detectNewLine = function(text) { @@ -821,252 +888,247 @@ var Document = function(text) { return this.$lines.length; }; this.getTextRange = function(range) { - if (range.start.row == range.end.row) { - return this.getLine(range.start.row) - .substring(range.start.column, range.end.column); - } - var lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - return lines.join(this.getNewLineCharacter()); + return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; - + this.getLinesForRange = function(range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + this.insertLines = function(row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + this.removeLines = function(firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + this.insertNewLine = function(position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + this.insert = function(position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + + return this.insertMergedLines(position, this.$split(text)); + }; + this.insertInLine = function(position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + + return this.clonePos(end); + }; + + this.clippedPos = function(row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } else if (row < 0) { + row = 0; + } else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return {row: row, column: column}; + }; + + this.clonePos = function(pos) { + return {row: pos.row, column: pos.column}; + }; + + this.pos = function(row, column) { + return {row: row, column: column}; + }; + this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); - position.column = this.getLine(length-1).length; - } else if (position.row < 0) - position.row = 0; - return position; - }; - this.insert = function(position, text) { - if (!text || text.length === 0) - return position; - - position = this.$clipPosition(position); - if (this.getLength() <= 1) - this.$detectNewLine(text); - - var lines = this.$split(text); - var firstLine = lines.splice(0, 1)[0]; - var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; - - position = this.insertInLine(position, firstLine); - if (lastLine !== null) { - position = this.insertNewLine(position); // terminate first line - position = this._insertLines(position.row, lines); - position = this.insertInLine(position, lastLine || ""); + position.column = this.getLine(length - 1).length; + } else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; - this.insertLines = function(row, lines) { - if (row >= this.getLength()) - return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); - return this._insertLines(Math.max(row, 0), lines); - }; - this._insertLines = function(row, lines) { - if (lines.length == 0) - return {row: row, column: 0}; - while (lines.length > 20000) { - var end = this._insertLines(row, lines.slice(0, 20000)); - lines = lines.slice(20000); - row = end.row; + this.insertFullLines = function(row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; } - - var args = [row, 0]; - args.push.apply(args, lines); - this.$lines.splice.apply(this.$lines, args); - - var range = new Range(row, 0, row + lines.length, 0); - var delta = { - action: "insertLines", - range: range, + this.insertMergedLines({row: row, column: column}, lines); + }; + this.insertMergedLines = function(position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + + this.applyDelta({ + start: start, + end: end, + action: "insert", lines: lines - }; - this._signal("change", { data: delta }); - return range.end; - }; - this.insertNewLine = function(position) { - position = this.$clipPosition(position); - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column); - this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); - - var end = { - row : position.row + 1, - column : 0 - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); - - return end; - }; - this.insertInLine = function(position, text) { - if (text.length == 0) - return position; - - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column) + text - + line.substring(position.column); - - var end = { - row : position.row, - column : position.column + text.length - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: text - }; - this._signal("change", { data: delta }); - - return end; + }); + + return this.clonePos(end); }; this.remove = function(range) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - range.start = this.$clipPosition(range.start); - range.end = this.$clipPosition(range.end); - - if (range.isEmpty()) - return range.start; - - var firstRow = range.start.row; - var lastRow = range.end.row; - - if (range.isMultiLine()) { - var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; - var lastFullRow = lastRow - 1; - - if (range.end.column > 0) - this.removeInLine(lastRow, 0, range.end.column); - - if (lastFullRow >= firstFullRow) - this._removeLines(firstFullRow, lastFullRow); - - if (firstFullRow != firstRow) { - this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); - this.removeNewLine(range.start.row); - } - } - else { - this.removeInLine(firstRow, range.start.column, range.end.column); - } - return range.start; + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }); + return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { - if (startColumn == endColumn) - return; - - var range = new Range(row, startColumn, row, endColumn); - var line = this.getLine(row); - var removed = line.substring(startColumn, endColumn); - var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); - this.$lines.splice(row, 1, newLine); - - var delta = { - action: "removeText", - range: range, - text: removed - }; - this._signal("change", { data: delta }); - return range.start; + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }, true); + + return this.clonePos(start); }; - this.removeLines = function(firstRow, lastRow) { - if (firstRow < 0 || lastRow >= this.getLength()) - return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); - return this._removeLines(firstRow, lastRow); - }; - - this._removeLines = function(firstRow, lastRow) { - var range = new Range(firstRow, 0, lastRow + 1, 0); - var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); - - var delta = { - action: "removeLines", - range: range, - nl: this.getNewLineCharacter(), - lines: removed - }; - this._signal("change", { data: delta }); - return removed; + this.removeFullLines = function(firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); + var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); + var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); + var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; }; this.removeNewLine = function(row) { - var firstLine = this.getLine(row); - var secondLine = this.getLine(row+1); - - var range = new Range(row, firstLine.length, row+1, 0); - var line = firstLine + secondLine; - - this.$lines.splice(row, 2, line); - - var delta = { - action: "removeText", - range: range, - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } }; this.replace = function(range, text) { - if (!(range instanceof Range)) + if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); - if (text.length == 0 && range.isEmpty()) + if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); + var end; if (text) { - var end = this.insert(range.start, text); + end = this.insert(range.start, text); } else { end = range.start; } - + return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { - var delta = deltas[i]; - - var range = Range.fromPoints(delta.range.start, delta.range.end); - - if (delta.action == "insertLines") - this._removeLines(range.start.row, range.end.row - 1); - else if (delta.action == "insertText") - this.remove(range); - else if (delta.action == "removeLines") - this._insertLines(range.start.row, delta.lines); - else if (delta.action == "removeText") - this.insert(range.start, delta.text); + this.revertDelta(deltas[i]); } }; + this.applyDelta = function(delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + + if (isInsert && delta.lines.length > 20000) + this.$splitAndapplyLargeDelta(delta, 20000); + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + }; + + this.$splitAndapplyLargeDelta = function(delta, MAX) { + var lines = delta.lines; + var l = lines.length; + var row = delta.start.row; + var column = delta.start.column; + var from = 0, to = 0; + do { + from = to; + to += MAX - 1; + var chunk = lines.slice(from, to); + if (to > l) { + delta.lines = chunk; + delta.start.row = row + from; + delta.start.column = column; + break; + } + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } while(true); + }; + this.revertDelta = function(delta) { + this.applyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; @@ -1283,9 +1345,10 @@ exports.delayedCall = function(fcn, defaultTimeout) { }; }); -ace.define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"], function(require, exports, module) { +ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; +var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); @@ -1297,7 +1360,19 @@ var Mirror = exports.Mirror = function(sender) { var _self = this; sender.on("change", function(e) { - doc.applyDeltas(e.data); + var data = e.data; + if (data[0].start) { + doc.applyDeltas(data); + } else { + for (var i = 0; i < data.length; i += 2) { + if (Array.isArray(data[i+1])) { + var d = {action: "insert", start: data[i], lines: data[i+1]}; + } else { + var d = {action: "remove", start: data[i], end: data[i+1]}; + } + doc.applyDelta(d, true); + } + } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); @@ -1333,8 +1408,285 @@ var Mirror = exports.Mirror = function(sender) { }); ace.define("ace/mode/javascript/jshint",["require","exports","module"], function(require, exports, module) { -module.exports = (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else { + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],"/node_modules/jshint/data/ascii-identifier-data.js":[function(_dereq_,module,exports){ var identifierStartTable = []; for (var i = 0; i < 128; i++) { @@ -1358,9 +1710,7 @@ module.exports = { asciiIdentifierPartTable: identifierPartTable }; -}, -{}], -2:[function(_dereq_,module,exports){ +},{}],"/node_modules/jshint/node_modules/underscore/underscore.js":[function(_dereq_,module,exports){ (function() { var root = this; @@ -1390,7 +1740,7 @@ module.exports = { } else { root._ = _; } - _.VERSION = '1.8.2'; + _.VERSION = '1.8.3'; var optimizeCb = function(func, context, argCount) { if (context === void 0) return func; switch (argCount == null ? 3 : argCount) { @@ -1444,9 +1794,16 @@ module.exports = { Ctor.prototype = null; return result; }; + + var property = function(key) { + return function(obj) { + return obj == null ? void 0 : obj[key]; + }; + }; var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1; + var getLength = property('length'); var isArrayLike = function(collection) { - var length = collection && collection.length; + var length = getLength(collection); return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX; }; _.each = _.forEach = function(obj, iteratee, context) { @@ -1538,9 +1895,10 @@ module.exports = { } return false; }; - _.contains = _.includes = _.include = function(obj, target, fromIndex) { + _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) { if (!isArrayLike(obj)) obj = _.values(obj); - return _.indexOf(obj, target, typeof fromIndex == 'number' && fromIndex) >= 0; + if (typeof fromIndex != 'number' || guard) fromIndex = 0; + return _.indexOf(obj, item, fromIndex) >= 0; }; _.invoke = function(obj, method) { var args = slice.call(arguments, 2); @@ -1700,7 +2058,7 @@ module.exports = { }; var flatten = function(input, shallow, strict, startIndex) { var output = [], idx = 0; - for (var i = startIndex || 0, length = input && input.length; i < length; i++) { + for (var i = startIndex || 0, length = getLength(input); i < length; i++) { var value = input[i]; if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { if (!shallow) value = flatten(value, shallow, strict); @@ -1722,7 +2080,6 @@ module.exports = { return _.difference(array, slice.call(arguments, 1)); }; _.uniq = _.unique = function(array, isSorted, iteratee, context) { - if (array == null) return []; if (!_.isBoolean(isSorted)) { context = iteratee; iteratee = isSorted; @@ -1731,7 +2088,7 @@ module.exports = { if (iteratee != null) iteratee = cb(iteratee, context); var result = []; var seen = []; - for (var i = 0, length = array.length; i < length; i++) { + for (var i = 0, length = getLength(array); i < length; i++) { var value = array[i], computed = iteratee ? iteratee(value, i, array) : value; if (isSorted) { @@ -1752,10 +2109,9 @@ module.exports = { return _.uniq(flatten(arguments, true, true)); }; _.intersection = function(array) { - if (array == null) return []; var result = []; var argsLength = arguments.length; - for (var i = 0, length = array.length; i < length; i++) { + for (var i = 0, length = getLength(array); i < length; i++) { var item = array[i]; if (_.contains(result, item)) continue; for (var j = 1; j < argsLength; j++) { @@ -1775,7 +2131,7 @@ module.exports = { return _.unzip(arguments); }; _.unzip = function(array) { - var length = array && _.max(array, 'length').length || 0; + var length = array && _.max(array, getLength).length || 0; var result = Array(length); for (var index = 0; index < length; index++) { @@ -1785,7 +2141,7 @@ module.exports = { }; _.object = function(list, values) { var result = {}; - for (var i = 0, length = list && list.length; i < length; i++) { + for (var i = 0, length = getLength(list); i < length; i++) { if (values) { result[list[i]] = values[i]; } else { @@ -1794,36 +2150,10 @@ module.exports = { } return result; }; - _.indexOf = function(array, item, isSorted) { - var i = 0, length = array && array.length; - if (typeof isSorted == 'number') { - i = isSorted < 0 ? Math.max(0, length + isSorted) : isSorted; - } else if (isSorted && length) { - i = _.sortedIndex(array, item); - return array[i] === item ? i : -1; - } - if (item !== item) { - return _.findIndex(slice.call(array, i), _.isNaN); - } - for (; i < length; i++) if (array[i] === item) return i; - return -1; - }; - - _.lastIndexOf = function(array, item, from) { - var idx = array ? array.length : 0; - if (typeof from == 'number') { - idx = from < 0 ? idx + from + 1 : Math.min(idx, from + 1); - } - if (item !== item) { - return _.findLastIndex(slice.call(array, 0, idx), _.isNaN); - } - while (--idx >= 0) if (array[idx] === item) return idx; - return -1; - }; - function createIndexFinder(dir) { + function createPredicateIndexFinder(dir) { return function(array, predicate, context) { predicate = cb(predicate, context); - var length = array != null && array.length; + 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; @@ -1831,21 +2161,45 @@ module.exports = { return -1; }; } - _.findIndex = createIndexFinder(1); - - _.findLastIndex = createIndexFinder(-1); + _.findIndex = createPredicateIndexFinder(1); + _.findLastIndex = createPredicateIndexFinder(-1); _.sortedIndex = function(array, obj, iteratee, context) { iteratee = cb(iteratee, context, 1); var value = iteratee(obj); - var low = 0, high = array.length; + 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; }; + function createIndexFinder(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; + }; + } + _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex); + _.lastIndexOf = createIndexFinder(-1, _.findLastIndex); _.range = function(start, stop, step) { - if (arguments.length <= 1) { + if (stop == null) { stop = start || 0; start = 0; } @@ -2131,6 +2485,11 @@ module.exports = { return _.pick(obj, iteratee, context); }; _.defaults = createAssigner(_.allKeys, true); + _.create = function(prototype, props) { + var result = baseCreate(prototype); + if (props) _.extendOwn(result, props); + return result; + }; _.clone = function(obj) { if (!_.isObject(obj)) return obj; return _.isArray(obj) ? obj.slice() : _.extend({}, obj); @@ -2271,11 +2630,7 @@ module.exports = { _.noop = function(){}; - _.property = function(key) { - return function(obj) { - return obj == null ? void 0 : obj[key]; - }; - }; + _.property = property; _.propertyOf = function(obj) { return obj == null ? function(){} : function(key) { return obj[key]; @@ -2441,7 +2796,7 @@ module.exports = { return this._wrapped; }; _.prototype.valueOf = _.prototype.toJSON = _.prototype.value; - + _.prototype.toString = function() { return '' + this._wrapped; }; @@ -2452,9 +2807,7 @@ module.exports = { } }.call(this)); -}, -{}], -3:[function(_dereq_,module,exports){ +},{}],"/node_modules/jshint/src/jshint.js":[function(_dereq_,module,exports){ var _ = _dereq_("underscore"); var events = _dereq_("events"); @@ -2494,7 +2847,6 @@ var JSHINT = (function() { "outer", "unused", "var" ], - funct, // The current function functions, // All of the functions global, // The global scope @@ -2552,12 +2904,12 @@ var JSHINT = (function() { } var meta = token.meta; - if (meta && meta.isFutureReservedWord && state.option.inES5()) { + if (meta && meta.isFutureReservedWord && state.inES5()) { if (!meta.es5) { return false; } if (meta.strictOnly) { - if (!state.option.strict && !state.directive["use strict"]) { + if (!state.option.strict && !state.isStrict()) { return false; } } @@ -2587,7 +2939,8 @@ var JSHINT = (function() { function processenforceall() { if (state.option.enforceall) { for (var enforceopt in options.bool.enforcing) { - if (state.option[enforceopt] === undefined) { + if (state.option[enforceopt] === undefined && + !options.noenforceall[enforceopt]) { state.option[enforceopt] = true; } } @@ -2610,6 +2963,15 @@ var JSHINT = (function() { combine(predefined, vars.ecmaIdentifiers[6]); } + if (state.option.module) { + if (!hasParsedCode(state.funct)) { + error("E055", state.tokens.next, "module"); + } + if (!state.inESNext()) { + warning("W134", state.tokens.next, "module", 6); + } + } + if (state.option.couch) { combine(predefined, vars.couch); } @@ -2697,25 +3059,6 @@ var JSHINT = (function() { if (state.option.mocha) { combine(predefined, vars.mocha); } - - state.option.inMoz = function(strict) { - return state.option.moz; - }; - - state.option.inESNext = function(strict) { - return state.option.moz || state.option.esnext; - }; - - state.option.inES5 = function(/* strict */) { - return !state.option.es3; - }; - - state.option.inES3 = function(strict) { - if (strict) { - return !state.option.moz && !state.option.esnext && state.option.es3; - } - return state.option.es3; - }; } function quit(code, line, chr) { var percentage = Math.floor((line / state.lines.length) * 100); @@ -2758,7 +3101,7 @@ var JSHINT = (function() { msg = messages.info[code]; } - t = t || state.tokens.next; + t = t || state.tokens.next || {}; if (t.id === "(end)") { // `~ t = state.tokens.curr; } @@ -2819,61 +3162,59 @@ var JSHINT = (function() { return i; } function addlabel(name, opts) { - opts = opts || {}; var type = opts.type; var token = opts.token; - var islet = opts.islet; + var isblockscoped = opts.isblockscoped; if (type === "exception") { - if (_.has(funct["(context)"], name)) { - if (funct[name] !== true && !state.option.node) { + if (_.has(state.funct["(context)"], name)) { + if (state.funct[name] !== true && !state.option.node) { warning("W002", state.tokens.next, name); } } } - if (_.has(funct, name) && !funct["(global)"]) { - if (funct[name] === true) { + if (_.has(state.funct, name) && !state.funct["(global)"]) { + if (state.funct[name] === true) { if (state.option.latedef) { - if ((state.option.latedef === true && _.contains([funct[name], type], "unction")) || - !_.contains([funct[name], type], "unction")) { + if ((state.option.latedef === true && _.contains([state.funct[name], type], "unction")) || + !_.contains([state.funct[name], type], "unction")) { warning("W003", state.tokens.next, name); } } } else { if ((!state.option.shadow || _.contains([ "inner", "outer" ], state.option.shadow)) && - type !== "exception" || funct["(blockscope)"].getlabel(name)) { + type !== "exception" || state.funct["(blockscope)"].getlabel(name)) { warning("W004", state.tokens.next, name); } } } - if (funct["(context)"] && _.has(funct["(context)"], name) && type !== "function") { + if (state.funct["(context)"] && _.has(state.funct["(context)"], name) && type !== "function") { if (state.option.shadow === "outer") { warning("W123", state.tokens.next, name); } } - if (islet) { - funct["(blockscope)"].current.add(name, type, state.tokens.curr); - if (funct["(blockscope)"].atTop() && exported[name]) { + if (isblockscoped) { + state.funct["(blockscope)"].current.add(name, type, state.tokens.curr); + if (state.funct["(blockscope)"].atTop() && exported[name]) { state.tokens.curr.exported = true; } } else { - funct["(blockscope)"].shadow(name); - funct[name] = type; + state.funct["(blockscope)"].shadow(name); + state.funct[name] = type; if (token) { - funct["(tokens)"][name] = token; + state.funct["(tokens)"][name] = token; } - setprop(funct, name, { unused: opts.unused || false }); - - if (funct["(global)"]) { - global[name] = funct; + if (state.funct["(global)"]) { + global[name] = state.funct; if (_.has(implied, name)) { if (state.option.latedef) { - if ((state.option.latedef === true && _.contains([funct[name], type], "unction")) || - !_.contains([funct[name], type], "unction")) { + if ((state.option.latedef === true && + _.contains([state.funct[name], type], "unction")) || + !_.contains([state.funct[name], type], "unction")) { warning("W003", state.tokens.next, name); } } @@ -2881,7 +3222,7 @@ var JSHINT = (function() { delete implied[name]; } } else { - scope[name] = funct; + scope[name] = state.funct; } } } @@ -2890,13 +3231,20 @@ var JSHINT = (function() { var nt = state.tokens.next; var body = nt.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g) || []; var predef = {}; - if (nt.type === "globals") { - body.forEach(function(g) { + body.forEach(function(g, idx) { g = g.split(":"); var key = (g[0] || "").trim(); var val = (g[1] || "").trim(); + if (key === "-" || !key.length) { + if (idx > 0 && idx === body.length - 1) { + return; + } + error("E002", nt); + return; + } + if (key.charAt(0) === "-") { key = key.slice(1); val = false; @@ -2918,7 +3266,15 @@ var JSHINT = (function() { } if (nt.type === "exported") { - body.forEach(function(e) { + body.forEach(function(e, idx) { + if (!e.length) { + if (idx > 0 && idx === body.length - 1) { + return; + } + error("E002", nt); + return; + } + exported[e] = true; }); } @@ -2979,7 +3335,7 @@ var JSHINT = (function() { if (key === "validthis") { - if (funct["(global)"]) + if (state.funct["(global)"]) return void error("E009"); if (val !== "true" && val !== "false") @@ -3118,6 +3474,10 @@ var JSHINT = (function() { } j += 1; } + if (!t && state.tokens.next.id === "(end)") { + return state.tokens.next; + } + return t; } @@ -3199,7 +3559,7 @@ var JSHINT = (function() { if (next.id === ";" || next.id === "}" || next.id === ":") { return true; } - if (isInfix(next) === isInfix(curr) || (curr.id === "yield" && state.option.inMoz(true))) { + if (isInfix(next) === isInfix(curr) || (curr.id === "yield" && state.inMoz())) { return curr.line !== startLine(next); } return false; @@ -3214,11 +3574,11 @@ var JSHINT = (function() { state.nameStack.push(); if (!initial && state.tokens.next.value === "let" && peek(0).value === "(") { - if (!state.option.inMoz(true)) { + if (!state.inMoz()) { warning("W118", state.tokens.next, "let expressions"); } isLetExpr = true; - funct["(blockscope)"].stack(); + state.funct["(blockscope)"].stack(); advance("let"); advance("("); state.tokens.prev.fud(); @@ -3240,7 +3600,7 @@ var JSHINT = (function() { advance(); if (initial) { - funct["(verb)"] = state.tokens.curr.value; + state.funct["(verb)"] = state.tokens.curr.value; state.tokens.curr.beginsStmt = true; } @@ -3284,7 +3644,7 @@ var JSHINT = (function() { } } if (isLetExpr) { - funct["(blockscope)"].unstack(); + state.funct["(blockscope)"].unstack(); } state.nameStack.pop(); @@ -3333,7 +3693,7 @@ var JSHINT = (function() { nobreakcomma(state.tokens.prev, state.tokens.curr); } - if (state.tokens.next.identifier && !(opts.property && state.option.inES5())) { + if (state.tokens.next.identifier && !(opts.property && state.inES5())) { switch (state.tokens.next.value) { case "break": case "case": @@ -3430,6 +3790,11 @@ var JSHINT = (function() { this.right.id !== "." && this.right.id !== "[") { warning("W017", this); } + if (this.right && this.right.identifier) { + if (state.funct["(blockscope)"].labeltype(this.right.value) === "const") { + error("E013", this, this.right.value); + } + } } return this; @@ -3485,7 +3850,7 @@ var JSHINT = (function() { if (!w) { nobreaknonadjacent(state.tokens.prev, state.tokens.curr); } - if (s === "in" && left.id === "!") { + if ((s === "in" || s === "instanceof") && left.id === "!") { warning("W018", left, "!"); } if (typeof f === "function") { @@ -3518,7 +3883,8 @@ var JSHINT = (function() { x.led = function(left) { nobreaknonadjacent(state.tokens.prev, state.tokens.curr); - var right = expression(100); + this.left = left; + var right = this.right = expression(100); if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) { warning("W019", this); @@ -3538,8 +3904,6 @@ var JSHINT = (function() { warning("W018", right, "!"); } - this.left = left; - this.right = right; return this; }; return x; @@ -3555,17 +3919,26 @@ var JSHINT = (function() { node.type === "undefined"); } - function isTypoTypeof(left, right) { + var typeofValues = {}; + typeofValues.legacy = [ + "xml", + "unknown" + ]; + typeofValues.es3 = [ + "undefined", "boolean", "number", "string", "function", "object", + ]; + typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy); + typeofValues.es6 = typeofValues.es3.concat("symbol"); + function isTypoTypeof(left, right, state) { + var values; + if (state.option.notypeof) return false; if (!left || !right) return false; - var values = [ - "undefined", "object", "boolean", "number", - "string", "function", "xml", "object", "unknown", "symbol" - ]; + values = state.inESNext() ? typeofValues.es6 : typeofValues.es3; if (right.type === "(identifier)" && right.value === "typeof" && left.type === "(string)") return !_.contains(values, left.value); @@ -3573,9 +3946,9 @@ var JSHINT = (function() { return false; } - function isGlobalEval(left, state, funct) { + function isGlobalEval(left, state) { var isGlobal = false; - if (left.type === "this" && funct["(context)"] === null) { + if (left.type === "this" && state.funct["(context)"] === null) { isGlobal = true; } else if (left.type === "(identifier)") { @@ -3637,14 +4010,14 @@ var JSHINT = (function() { warning("W021", left, left.value); } - if (funct[left.value] === "const") { + if (state.funct["(blockscope)"].labeltype(left.value) === "const") { error("E013", left, left.value); } if (left.id === ".") { if (!left.left) { warning("E031", that); - } else if (left.left.value === "arguments" && !state.directive["use strict"]) { + } else if (left.left.value === "arguments" && !state.isStrict()) { warning("E031", that); } @@ -3654,13 +4027,13 @@ var JSHINT = (function() { } else if (left.id === "[") { if (state.tokens.curr.left.first) { state.tokens.curr.left.first.forEach(function(t) { - if (t && funct[t.value] === "const") { + if (t && state.funct[t.value] === "const") { error("E013", t, t.value); } }); } else if (!left.left) { warning("E031", that); - } else if (left.left.value === "arguments" && !state.directive["use strict"]) { + } else if (left.left.value === "arguments" && !state.isStrict()) { warning("E031", that); } @@ -3669,7 +4042,7 @@ var JSHINT = (function() { that.right = expression(10); return that; } else if (left.identifier && !isReserved(left)) { - if (funct[left.value] === "exception") { + if (state.funct[left.value] === "exception") { warning("W022", left); } state.nameStack.set(left); @@ -3727,7 +4100,6 @@ var JSHINT = (function() { }, 20); } - function suffix(s) { var x = symbol(s, 150); @@ -3737,6 +4109,11 @@ var JSHINT = (function() { } else if ((!left.identifier || isReserved(left)) && left.id !== "." && left.id !== "[") { warning("W017", this); } + if (left && left.identifier) { + if (state.funct["(blockscope)"].labeltype(left.value) === "const") { + error("E013", this, left.value); + } + } this.left = left; return this; @@ -3761,7 +4138,7 @@ var JSHINT = (function() { } if (prop) { - if (state.option.inES5()) { + if (state.inES5()) { return val; } } @@ -3815,7 +4192,7 @@ var JSHINT = (function() { do { t = peek(i); i += 1; - } while (t.id != "(end)" && t.id === "(comment)"); + } while (t.id !== "(end)" && t.id === "(comment)"); if (t.reach) { return; @@ -3863,7 +4240,7 @@ var JSHINT = (function() { } if (t.value === "module" && t.type === "(identifier)") { if (peek().type === "(identifier)") { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W119", state.tokens.curr, "module"); } @@ -3892,7 +4269,7 @@ var JSHINT = (function() { } if (t.id === "{") { - var iscase = (funct["(verb)"] === "case" && state.tokens.curr.value === ":"); + var iscase = (state.funct["(verb)"] === "case" && state.tokens.curr.value === ":"); block(true, true, false, false, iscase); return; } @@ -3900,7 +4277,7 @@ var JSHINT = (function() { r = expression(0, true); if (r && (!r.identifier || r.value !== "function") && (r.type !== "(punctuator)")) { - if (!state.directive["use strict"] && + if (!state.isStrict() && state.option.globalstrict && state.option.strict) { warning("E007"); @@ -3998,13 +4375,13 @@ var JSHINT = (function() { t = state.tokens.next; - var metrics = funct["(metrics)"]; + var metrics = state.funct["(metrics)"]; metrics.nestedBlockDepth += 1; metrics.verifyMaxNestedBlockDepthPerFunction(); if (state.tokens.next.id === "{") { advance("{"); - funct["(blockscope)"].stack(); + state.funct["(blockscope)"].stack(); line = state.tokens.curr.line; if (state.tokens.next.id !== "}") { @@ -4022,8 +4399,8 @@ var JSHINT = (function() { } directives(); - if (state.option.strict && funct["(context)"]["(global)"]) { - if (!m["use strict"] && !state.directive["use strict"]) { + if (state.option.strict && state.funct["(context)"]["(global)"]) { + if (!m["use strict"] && !state.isStrict()) { warning("E007"); } } @@ -4042,13 +4419,13 @@ var JSHINT = (function() { advance("}", t); - funct["(blockscope)"].unstack(); + state.funct["(blockscope)"].unstack(); indent = old_indent; } else if (!ordinary) { if (isfunc) { m = {}; - if (stmt && !isfatarrow && !state.option.inMoz(true)) { + if (stmt && !isfatarrow && !state.inMoz()) { error("W118", state.tokens.curr, "function closure expressions"); } @@ -4061,8 +4438,8 @@ var JSHINT = (function() { } expression(10); - if (state.option.strict && funct["(context)"]["(global)"]) { - if (!m["use strict"] && !state.directive["use strict"]) { + if (state.option.strict && state.funct["(context)"]["(global)"]) { + if (!m["use strict"] && !state.isStrict()) { warning("E007"); } } @@ -4070,7 +4447,7 @@ var JSHINT = (function() { error("E021", state.tokens.next, "{", state.tokens.next.value); } } else { - funct["(nolet)"] = true; + state.funct["(noblockscopedvar)"] = true; if (!stmt || state.option.curly) { warning("W116", state.tokens.next, "{", state.tokens.next.value); @@ -4081,9 +4458,9 @@ var JSHINT = (function() { a = [statement()]; indent -= state.option.indent; - delete funct["(nolet)"]; + delete state.funct["(noblockscopedvar)"]; } - switch (funct["(verb)"]) { + switch (state.funct["(verb)"]) { case "break": case "continue": case "return": @@ -4092,7 +4469,7 @@ var JSHINT = (function() { break; } default: - funct["(verb)"] = null; + state.funct["(verb)"] = null; } if (!ordinary || !state.option.funcscope) scope = s; @@ -4149,30 +4526,30 @@ var JSHINT = (function() { return this; } + block = state.funct["(blockscope)"].getlabel(v); + if (typeof s === "function") { s = undefined; - } else if (!funct["(blockscope)"].current.has(v) && typeof s === "boolean") { - f = funct; - funct = functions[0]; + } else if (!block && typeof s === "boolean") { + f = state.funct; + state.funct = functions[0]; addlabel(v, { type: "var" }); - s = funct; - funct = f; + s = state.funct; + state.funct = f; } - - block = funct["(blockscope)"].getlabel(v); - if (funct === s || block) { - switch (block ? block[v]["(type)"] : funct[v]) { + if (state.funct === s || block) { + switch (block ? block[v]["(type)"] : state.funct[v]) { case "unused": if (block) block[v]["(type)"] = "var"; - else funct[v] = "var"; + else state.funct[v] = "var"; break; case "unction": if (block) block[v]["(type)"] = "function"; - else funct[v] = "function"; + else state.funct[v] = "function"; this["function"] = true; break; case "const": - setprop(funct, v, { unused: false }); + block[v]["(unused)"] = false; break; case "function": this["function"] = true; @@ -4183,7 +4560,7 @@ var JSHINT = (function() { } } else { - switch (funct[v]) { + switch (state.funct[v]) { case "closure": case "function": case "var": @@ -4198,17 +4575,17 @@ var JSHINT = (function() { break; default: if (s === true) { - funct[v] = true; + state.funct[v] = true; } else if (s === null) { warning("W039", state.tokens.curr, v); note_implied(state.tokens.curr); } else if (typeof s !== "object") { - if (!funct["(comparray)"].check(v)) { - isundef(funct, "W117", state.tokens.curr, v); + if (!state.funct["(comparray)"].check(v)) { + isundef(state.funct, "W117", state.tokens.curr, v); } - if (!funct["(global)"]) { - funct[v] = true; + if (!state.funct["(global)"]) { + state.funct[v] = true; } note_implied(state.tokens.curr); @@ -4218,18 +4595,15 @@ var JSHINT = (function() { case "unction": this["function"] = true; s[v] = "closure"; - funct[v] = s["(global)"] ? "global" : "outer"; + state.funct[v] = s["(global)"] ? "global" : "outer"; break; case "var": case "unused": s[v] = "closure"; - funct[v] = s["(global)"] ? "global" : "outer"; - break; - case "const": - setprop(s, v, { unused: false }); + state.funct[v] = s["(global)"] ? "global" : "outer"; break; case "closure": - funct[v] = s["(global)"] ? "global" : "outer"; + state.funct[v] = s["(global)"] ? "global" : "outer"; break; case "label": warning("W037", state.tokens.curr, v); @@ -4300,7 +4674,7 @@ var JSHINT = (function() { reserve("default").reach = true; reserve("finally"); reservevar("arguments", function(x) { - if (state.directive["use strict"] && funct["(global)"]) { + if (state.isStrict() && state.funct["(global)"]) { warning("E008", x); } }); @@ -4309,9 +4683,9 @@ var JSHINT = (function() { reservevar("Infinity"); reservevar("null"); reservevar("this", function(x) { - if (state.directive["use strict"] && !isMethod() && - !state.option.validthis && ((funct["(statement)"] && - funct["(name)"].charAt(0) > "Z") || funct["(global)"])) { + if (state.isStrict() && !isMethod() && + !state.option.validthis && ((state.funct["(statement)"] && + state.funct["(name)"].charAt(0) > "Z") || state.funct["(global)"])) { warning("W040", x); } }); @@ -4390,10 +4764,10 @@ var JSHINT = (function() { case isPoorRelation(right): warning("W041", this, "===", right.value); break; - case isTypoTypeof(right, left): + case isTypoTypeof(right, left, state): warning("W122", this, right.value); break; - case isTypoTypeof(left, right): + case isTypoTypeof(left, right, state): warning("W122", this, left.value); break; } @@ -4401,9 +4775,9 @@ var JSHINT = (function() { return this; }); relation("===", function(left, right) { - if (isTypoTypeof(right, left)) { + if (isTypoTypeof(right, left, state)) { warning("W122", this, right.value); - } else if (isTypoTypeof(left, right)) { + } else if (isTypoTypeof(left, right, state)) { warning("W122", this, left.value); } return this; @@ -4419,17 +4793,17 @@ var JSHINT = (function() { warning("W041", this, "!==", left.value); } else if (isPoorRelation(right)) { warning("W041", this, "!==", right.value); - } else if (isTypoTypeof(right, left)) { + } else if (isTypoTypeof(right, left, state)) { warning("W122", this, right.value); - } else if (isTypoTypeof(left, right)) { + } else if (isTypoTypeof(left, right, state)) { warning("W122", this, left.value); } return this; }); relation("!==", function(left, right) { - if (isTypoTypeof(right, left)) { + if (isTypoTypeof(right, left, state)) { warning("W122", this, right.value); - } else if (isTypoTypeof(left, right)) { + } else if (isTypoTypeof(left, right, state)) { warning("W122", this, left.value); } return this; @@ -4507,7 +4881,7 @@ var JSHINT = (function() { warning("W051"); } this.first = p; - if (p.identifier && !state.directive["use strict"]) { + if (p.identifier && !state.isStrict()) { p.forgiveUndef = true; } return this; @@ -4629,7 +5003,7 @@ var JSHINT = (function() { if (left && left.value === "arguments" && (m === "callee" || m === "caller")) { if (state.option.noarg) warning("W059", left, m); - else if (state.directive["use strict"]) + else if (state.isStrict()) error("E008"); } else if (!state.option.evil && left && left.value === "document" && (m === "write" || m === "writeln")) { @@ -4637,7 +5011,7 @@ var JSHINT = (function() { } if (!state.option.evil && (m === "eval" || m === "execScript")) { - if (isGlobalEval(left, state, funct)) { + if (isGlobalEval(left, state)) { warning("W061"); } } @@ -4681,7 +5055,7 @@ var JSHINT = (function() { advance(")"); if (typeof left === "object") { - if (state.option.inES3() && left.value === "parseInt" && n === 1) { + if (state.inES3() && left.value === "parseInt" && n === 1) { warning("W065", state.tokens.curr); } if (!state.option.evil) { @@ -4789,15 +5163,17 @@ var JSHINT = (function() { if (!isNecessary) { isNecessary = (opening.beginsStmt && (ret.id === "{" || triggerFnExpr || isFunctor(ret))) || - (ret.id === "{" && preceeding.id === "=>") || - (first.id === "+" && preceeding.id === "+"); + (triggerFnExpr && + (!isEndOfExpr() || state.tokens.prev.id !== "}")) || + (isFunctor(ret) && !isEndOfExpr()) || + (ret.id === "{" && preceeding.id === "=>"); } } if (ret) { if (!isNecessary && (first.left || ret.exprs)) { isNecessary = - (!isBeginOfExpr(preceeding) && first.lbp < preceeding.lbp) || + (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) || (!isEndOfExpr() && last.lbp < state.tokens.next.lbp); } @@ -4817,7 +5193,7 @@ var JSHINT = (function() { var e = expression(10), s; if (e && e.type === "(string)") { if (!state.option.evil && (e.value === "eval" || e.value === "execScript")) { - if (isGlobalEval(left, state, funct)) { + if (isGlobalEval(left, state)) { warning("W061"); } } @@ -4844,62 +5220,62 @@ var JSHINT = (function() { function comprehensiveArrayExpression() { var res = {}; res.exps = true; - funct["(comparray)"].stack(); + state.funct["(comparray)"].stack(); var reversed = false; if (state.tokens.next.value !== "for") { reversed = true; - if (!state.option.inMoz(true)) { + if (!state.inMoz()) { warning("W116", state.tokens.next, "for", state.tokens.next.value); } - funct["(comparray)"].setState("use"); + state.funct["(comparray)"].setState("use"); res.right = expression(10); } advance("for"); if (state.tokens.next.value === "each") { advance("each"); - if (!state.option.inMoz(true)) { + if (!state.inMoz()) { warning("W118", state.tokens.curr, "for each"); } } advance("("); - funct["(comparray)"].setState("define"); + state.funct["(comparray)"].setState("define"); res.left = expression(130); if (_.contains(["in", "of"], state.tokens.next.value)) { advance(); } else { error("E045", state.tokens.curr); } - funct["(comparray)"].setState("generate"); + state.funct["(comparray)"].setState("generate"); expression(10); advance(")"); if (state.tokens.next.value === "if") { advance("if"); advance("("); - funct["(comparray)"].setState("filter"); + state.funct["(comparray)"].setState("filter"); res.filter = expression(10); advance(")"); } if (!reversed) { - funct["(comparray)"].setState("use"); + state.funct["(comparray)"].setState("use"); res.right = expression(10); } advance("]"); - funct["(comparray)"].unstack(); + state.funct["(comparray)"].unstack(); return res; } prefix("[", function() { var blocktype = lookupBlockType(); if (blocktype.isCompArray) { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W119", state.tokens.curr, "array comprehension"); } return comprehensiveArrayExpression(); - } else if (blocktype.isDestAssign && !state.option.inESNext()) { + } else if (blocktype.isDestAssign && !state.inESNext()) { warning("W104", state.tokens.curr, "destructuring assignment"); } var b = state.tokens.curr.line !== startLine(state.tokens.next); @@ -4913,7 +5289,7 @@ var JSHINT = (function() { while (state.tokens.next.id !== "(end)") { while (state.tokens.next.id === ",") { if (!state.option.elision) { - if (!state.option.inES5()) { + if (!state.inES5()) { warning("W070"); } else { warning("W128"); @@ -4933,7 +5309,7 @@ var JSHINT = (function() { this.first.push(expression(10)); if (state.tokens.next.id === ",") { comma({ allowTrailing: true }); - if (state.tokens.next.id === "]" && !state.option.inES5(true)) { + if (state.tokens.next.id === "]" && !state.inES5(true)) { warning("W070", state.tokens.curr); break; } @@ -4950,8 +5326,8 @@ var JSHINT = (function() { function isMethod() { - return funct["(statement)"] && funct["(statement)"].type === "class" || - funct["(context)"] && funct["(context)"]["(verb)"] === "class"; + return state.funct["(statement)"] && state.funct["(statement)"].type === "class" || + state.funct["(context)"] && state.funct["(context)"]["(verb)"] === "class"; } @@ -5005,7 +5381,7 @@ var JSHINT = (function() { if (loneArg && loneArg.identifier === true) { addlabel(loneArg.value, { type: "unused", token: loneArg }); - return [loneArg]; + return [loneArg.value]; } next = state.tokens.next; @@ -5045,7 +5421,7 @@ var JSHINT = (function() { } } if (state.tokens.next.id === "=") { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W119", state.tokens.next, "default parameters"); } advance("="); @@ -5064,21 +5440,6 @@ var JSHINT = (function() { } } - function setprop(funct, name, values) { - if (!funct["(properties)"][name]) { - funct["(properties)"][name] = { unused: false }; - } - - _.extend(funct["(properties)"][name], values); - } - - function getprop(funct, name, prop) { - if (!funct["(properties)"][name]) - return null; - - return funct["(properties)"][name][prop] || null; - } - function functor(name, token, scope, overwrites) { var funct = { "(name)" : name, @@ -5123,6 +5484,9 @@ var JSHINT = (function() { function isFunctor(token) { return "(scope)" in token; } + function hasParsedCode(funct) { + return funct["(global)"] && !funct["(verb)"]; + } function doTemplateLiteral(left) { var ctx = this.context; @@ -5130,7 +5494,7 @@ var JSHINT = (function() { var depth = this.depth; if (!noSubst) { - while (!end() && state.tokens.next.id !== "(end)") { + while (!end()) { if (!state.tokens.next.template || state.tokens.next.depth > depth) { expression(0); // should probably have different rbp? } else { @@ -5172,16 +5536,16 @@ var JSHINT = (function() { state.ignored = Object.create(state.ignored); scope = Object.create(scope); - funct = functor(name || state.nameStack.infer(), state.tokens.next, scope, { + state.funct = functor(name || state.nameStack.infer(), state.tokens.next, scope, { "(statement)": statement, - "(context)": funct, + "(context)": state.funct, "(generator)": isGenerator }); - f = funct; - state.tokens.curr.funct = funct; + f = state.funct; + state.tokens.curr.funct = state.funct; - functions.push(funct); + functions.push(state.funct); if (name) { addlabel(name, { type: "function" }); @@ -5191,8 +5555,8 @@ var JSHINT = (function() { addlabel(classExprBinding, { type: "function" }); } - funct["(params)"] = functionparams(options); - funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]); + state.funct["(params)"] = functionparams(options); + state.funct["(metrics)"].verifyMaxParametersPerFunction(state.funct["(params)"]); if (isArrow) { if (!state.option.esnext) { @@ -5207,26 +5571,26 @@ var JSHINT = (function() { block(false, true, true, isArrow); if (!state.option.noyield && isGenerator && - funct["(generator)"] !== "yielded") { + state.funct["(generator)"] !== "yielded") { warning("W124", state.tokens.curr); } - funct["(metrics)"].verifyMaxStatementsPerFunction(); - funct["(metrics)"].verifyMaxComplexityPerFunction(); - funct["(unusedOption)"] = state.option.unused; + state.funct["(metrics)"].verifyMaxStatementsPerFunction(); + state.funct["(metrics)"].verifyMaxComplexityPerFunction(); + state.funct["(unusedOption)"] = state.option.unused; scope = oldScope; state.option = oldOption; state.ignored = oldIgnored; - funct["(last)"] = state.tokens.curr.line; - funct["(lastcharacter)"] = state.tokens.curr.character; + state.funct["(last)"] = state.tokens.curr.line; + state.funct["(lastcharacter)"] = state.tokens.curr.character; - _.map(Object.keys(funct), function(key) { + _.map(Object.keys(state.funct), function(key) { if (key[0] === "(") return; - funct["(blockscope)"].unshadow(key); + state.funct["(blockscope)"].unshadow(key); }); - funct = funct["(context)"]; + state.funct = state.funct["(context)"]; return f; } @@ -5247,7 +5611,7 @@ var JSHINT = (function() { verifyMaxParametersPerFunction: function(params) { params = params || []; - if (state.option.maxparams && params.length > state.option.maxparams) { + if (_.isNumber(state.option.maxparams) && params.length > state.option.maxparams) { warning("W072", functionStartToken, params.length); } }, @@ -5271,7 +5635,7 @@ var JSHINT = (function() { } function increaseComplexityCount() { - funct["(metrics)"].ComplexityCount += 1; + state.funct["(metrics)"].ComplexityCount += 1; } function checkCondAssignment(expr) { @@ -5300,7 +5664,7 @@ var JSHINT = (function() { } } function checkProperties(props) { - if (state.option.inES5()) { + if (state.inES5()) { for (var name in props) { if (_.has(props, name) && props[name].setterToken && !props[name].getterToken) { warning("W078", props[name].setterToken); @@ -5311,7 +5675,7 @@ var JSHINT = (function() { (function(x) { x.nud = function() { - var b, f, i, p, t, g, nextVal; + var b, f, i, p, t, isGeneratorMethod = false, nextVal; var props = {}; // All properties, including accessors b = state.tokens.curr.line !== startLine(state.tokens.next); @@ -5328,15 +5692,25 @@ var JSHINT = (function() { } nextVal = state.tokens.next.value; - if (peek().id !== ":" && (nextVal === "get" || nextVal === "set")) { + if (state.tokens.next.identifier && + (peekIgnoreEOL().id === "," || peekIgnoreEOL().id === "}")) { + if (!state.inESNext()) { + warning("W104", state.tokens.next, "object short notation"); + } + i = propertyName(true); + saveProperty(props, i, state.tokens.next); + + expression(10); + + } else if (peek().id !== ":" && (nextVal === "get" || nextVal === "set")) { advance(nextVal); - if (!state.option.inES5()) { + if (!state.inES5()) { error("E034"); } i = propertyName(); - if (!i && !state.option.inESNext()) { + if (!i && !state.inESNext()) { error("E035"); } if (i) { @@ -5353,44 +5727,36 @@ var JSHINT = (function() { } } else { if (state.tokens.next.value === "*" && state.tokens.next.type === "(punctuator)") { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W104", state.tokens.next, "generator functions"); } advance("*"); - g = true; + isGeneratorMethod = true; + } else { + isGeneratorMethod = false; } - if (state.tokens.next.identifier && - (peekIgnoreEOL().id === "," || peekIgnoreEOL().id === "}")) { - if (!state.option.inESNext()) { - warning("W104", state.tokens.next, "object short notation"); - } - i = propertyName(true); + + if (state.tokens.next.id === "[") { + i = computedPropertyName(); + state.nameStack.set(i); + } else { + state.nameStack.set(state.tokens.next); + i = propertyName(); saveProperty(props, i, state.tokens.next); - expression(10); + if (typeof i !== "string") { + break; + } + } + + if (state.tokens.next.value === "(") { + if (!state.inESNext()) { + warning("W104", state.tokens.curr, "concise methods"); + } + doFunction({ type: isGeneratorMethod ? "generator" : null }); } else { - if (state.tokens.next.id === "[") { - i = computedPropertyName(); - state.nameStack.set(i); - } else { - state.nameStack.set(state.tokens.next); - i = propertyName(); - saveProperty(props, i, state.tokens.next); - - if (typeof i !== "string") { - break; - } - } - - if (state.tokens.next.value === "(") { - if (!state.option.inESNext()) { - warning("W104", state.tokens.curr, "concise methods"); - } - doFunction({ type: g ? "generator" : null }); - } else { - advance(":"); - expression(10); - } + advance(":"); + expression(10); } } @@ -5400,7 +5766,7 @@ var JSHINT = (function() { comma({ allowTrailing: true, property: true }); if (state.tokens.next.id === ",") { warning("W070", state.tokens.curr); - } else if (state.tokens.next.id === "}" && !state.option.inES5(true)) { + } else if (state.tokens.next.id === "}" && !state.inES5(true)) { warning("W070", state.tokens.curr); } } else { @@ -5424,7 +5790,7 @@ var JSHINT = (function() { function destructuringExpression() { var id, ids; var identifiers = []; - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W104", state.tokens.curr, "destructuring expression"); } var nextInnerDE = function() { @@ -5514,17 +5880,30 @@ var JSHINT = (function() { }); } - var conststatement = stmt("const", function(context) { + function blockVariableStatement(type, statement, context) { + var prefix = context && context.prefix; var inexport = context && context.inexport; - var tokens; - var value; - var lone; // State variable to know if it is a lone identifier, or a destructuring statement. + var isLet = type === "let"; + var isConst = type === "const"; + var tokens, lone, value, letblock; - if (!state.option.inESNext()) - warning("W104", state.tokens.curr, "const"); + if (!state.inESNext()) { + warning("W104", state.tokens.curr, type); + } - this.first = []; + if (isLet && state.tokens.next.value === "(") { + if (!state.inMoz()) { + warning("W118", state.tokens.next, "let block"); + } + advance("("); + state.funct["(blockscope)"].stack(); + letblock = true; + } else if (state.funct["(noblockscopedvar)"]) { + error("E048", state.tokens.curr, isConst ? "Const" : "Let"); + } + + statement.first = []; for (;;) { var names = []; if (_.contains(["{", "["], state.tokens.next.value)) { @@ -5541,192 +5920,41 @@ var JSHINT = (function() { for (var t in tokens) { if (tokens.hasOwnProperty(t)) { t = tokens[t]; - if (funct[t.id] === "const") { - warning("E011", null, t.id); + if (state.inESNext()) { + if (state.funct["(blockscope)"].current.labeltype(t.id) === "const") { + warning("E011", null, t.id); + } } - if (funct["(global)"] && predefined[t.id] === false) { - warning("W079", t.token, t.id); + if (state.funct["(global)"]) { + if (predefined[t.id] === false) { + warning("W079", t.token, t.id); + } } - if (t.id) { - addlabel(t.id, { token: t.token, type: "const", unused: true }); + if (t.id && !state.funct["(noblockscopedvar)"]) { + addlabel(t.id, { + type: isConst ? "const" : "unused", + token: t.token, + isblockscoped: true }); names.push(t.token); } } } - if (prefix) { - break; - } - this.first = this.first.concat(names); + statement.first = statement.first.concat(names); - if (state.tokens.next.id !== "=") { + if (!prefix && isConst && state.tokens.next.id !== "=") { warning("E012", state.tokens.curr, state.tokens.curr.value); } if (state.tokens.next.id === "=") { advance("="); - if (state.tokens.next.id === "undefined") { + if (!prefix && state.tokens.next.id === "undefined") { warning("W080", state.tokens.prev, state.tokens.prev.value); } - if (peek(0).id === "=" && state.tokens.next.identifier) { + if (!prefix && peek(0).id === "=" && state.tokens.next.identifier) { warning("W120", state.tokens.next, state.tokens.next.value); } - value = expression(10); - if (lone) { - tokens[0].first = value; - } else { - destructuringExpressionMatch(names, value); - } - } - - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - return this; - }); - - conststatement.exps = true; - var varstatement = stmt("var", function(context) { - var prefix = context && context.prefix; - var inexport = context && context.inexport; - var tokens, lone, value; - - this.first = []; - for (;;) { - var names = []; - if (_.contains(["{", "["], state.tokens.next.value)) { - tokens = destructuringExpression(); - lone = false; - } else { - tokens = [ { id: identifier(), token: state.tokens.curr } ]; - lone = true; - if (inexport) { - exported[state.tokens.curr.value] = true; - state.tokens.curr.exported = true; - } - } - for (var t in tokens) { - if (tokens.hasOwnProperty(t)) { - t = tokens[t]; - if (state.option.inESNext() && funct[t.id] === "const") { - warning("E011", null, t.id); - } - if (funct["(global)"]) { - if (predefined[t.id] === false) { - warning("W079", t.token, t.id); - } else if (state.option.futurehostile === false) { - if ((!state.option.inES5() && vars.ecmaIdentifiers[5][t.id] === false) || - (!state.option.inESNext() && vars.ecmaIdentifiers[6][t.id] === false)) { - warning("W129", t.token, t.id); - } - } - } - if (t.id) { - addlabel(t.id, { type: "unused", token: t.token }); - names.push(t.token); - } - } - } - if (prefix) { - break; - } - - this.first = this.first.concat(names); - - if (state.tokens.next.id === "=") { - state.nameStack.set(state.tokens.curr); - advance("="); - if (state.tokens.next.id === "undefined") { - warning("W080", state.tokens.prev, state.tokens.prev.value); - } - if (peek(0).id === "=" && state.tokens.next.identifier) { - if (!funct["(params)"] || funct["(params)"].indexOf(state.tokens.next.value) === -1) { - warning("W120", state.tokens.next, state.tokens.next.value); - } - } - value = expression(10); - if (lone) { - tokens[0].first = value; - } else { - destructuringExpressionMatch(names, value); - } - } - - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - return this; - }); - varstatement.exps = true; - - var letstatement = stmt("let", function(context) { - var prefix = context && context.prefix; - var inexport = context && context.inexport; - var tokens, lone, value, letblock; - - if (!state.option.inESNext()) { - warning("W104", state.tokens.curr, "let"); - } - - if (state.tokens.next.value === "(") { - if (!state.option.inMoz(true)) { - warning("W118", state.tokens.next, "let block"); - } - advance("("); - funct["(blockscope)"].stack(); - letblock = true; - } else if (funct["(nolet)"]) { - error("E048", state.tokens.curr); - } - - this.first = []; - for (;;) { - var names = []; - if (_.contains(["{", "["], state.tokens.next.value)) { - tokens = destructuringExpression(); - lone = false; - } else { - tokens = [ { id: identifier(), token: state.tokens.curr.value } ]; - lone = true; - if (inexport) { - exported[state.tokens.curr.value] = true; - state.tokens.curr.exported = true; - } - } - for (var t in tokens) { - if (tokens.hasOwnProperty(t)) { - t = tokens[t]; - if (state.option.inESNext() && funct[t.id] === "const") { - warning("E011", null, t.id); - } - if (funct["(global)"] && predefined[t.id] === false) { - warning("W079", t.token, t.id); - } - if (t.id && !funct["(nolet)"]) { - addlabel(t.id, { type: "unused", token: t.token, islet: true }); - names.push(t.token); - } - } - } - if (prefix) { - break; - } - - this.first = this.first.concat(names); - - if (state.tokens.next.id === "=") { - advance("="); - if (state.tokens.next.id === "undefined") { - warning("W080", state.tokens.prev, state.tokens.prev.value); - } - if (peek(0).id === "=" && state.tokens.next.identifier) { - warning("W120", state.tokens.next, state.tokens.next.value); - } - value = expression(10); + value = expression(prefix ? 120 : 10); if (lone) { tokens[0].first = value; } else { @@ -5742,20 +5970,129 @@ var JSHINT = (function() { if (letblock) { advance(")"); block(true, true); - this.block = true; - funct["(blockscope)"].unstack(); + statement.block = true; + state.funct["(blockscope)"].unstack(); + } + + return statement; + } + + var conststatement = stmt("const", function(context) { + return blockVariableStatement("const", this, context); + }); + conststatement.exps = true; + + var letstatement = stmt("let", function(context) { + return blockVariableStatement("let", this, context); + }); + letstatement.exps = true; + + var varstatement = stmt("var", function(context) { + var prefix = context && context.prefix; + var inexport = context && context.inexport; + var tokens, lone, value; + var implied = context && context.implied; + var report = !(context && context.ignore); + + this.first = []; + for (;;) { + var names = []; + if (_.contains(["{", "["], state.tokens.next.value)) { + tokens = destructuringExpression(); + lone = false; + } else { + tokens = [ { id: identifier(), token: state.tokens.curr } ]; + lone = true; + if (inexport) { + exported[state.tokens.curr.value] = true; + state.tokens.curr.exported = true; + } + } + for (var t in tokens) { + if (tokens.hasOwnProperty(t)) { + t = tokens[t]; + if (state.inESNext()) { + if (state.funct["(blockscope)"].labeltype(t.id) === "const") { + warning("E011", null, t.id); + } + } + if (!implied && state.funct["(global)"]) { + if (predefined[t.id] === false) { + warning("W079", t.token, t.id); + } else if (state.option.futurehostile === false) { + if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) || + (!state.inESNext() && vars.ecmaIdentifiers[6][t.id] === false)) { + warning("W129", t.token, t.id); + } + } + } + if (t.id) { + if (implied === "for") { + var ident = t.token.value; + switch (state.funct[ident]) { + case "unused": + state.funct[ident] = "var"; + break; + case "var": + break; + default: + if (!state.funct["(blockscope)"].getlabel(ident) && + !(scope[ident] || {})[ident]) { + if (report) warning("W088", t.token, ident); + } + } + } else { + addlabel(t.id, { type: "unused", token: t.token }); + } + names.push(t.token); + } + } + } + + if (!prefix && report && state.option.varstmt) { + warning("W132", this); + } + + this.first = this.first.concat(names); + + if (state.tokens.next.id === "=") { + state.nameStack.set(state.tokens.curr); + + advance("="); + if (!prefix && report && state.tokens.next.id === "undefined") { + warning("W080", state.tokens.prev, state.tokens.prev.value); + } + if (peek(0).id === "=" && state.tokens.next.identifier) { + if (!prefix && report && + !state.funct["(params)"] || + state.funct["(params)"].indexOf(state.tokens.next.value) === -1) { + warning("W120", state.tokens.next, state.tokens.next.value); + } + } + value = expression(prefix ? 120 : 10); + if (lone) { + tokens[0].first = value; + } else { + destructuringExpressionMatch(names, value); + } + } + + if (state.tokens.next.id !== ",") { + break; + } + comma(); } return this; }); - letstatement.exps = true; + varstatement.exps = true; blockstmt("class", function() { return classdef.call(this, true); }); function classdef(isStatement) { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W104", state.tokens.curr, "class"); } if (isStatement) { @@ -5772,16 +6109,17 @@ var JSHINT = (function() { } function classtail(c) { - var strictness = state.directive["use strict"]; + var wasInClassBody = state.inClassBody; if (state.tokens.next.value === "extends") { advance("extends"); c.heritage = expression(10); } - state.directive["use strict"] = true; + + state.inClassBody = true; advance("{"); c.body = classbody(c); advance("}"); - state.directive["use strict"] = strictness; + state.inClassBody = wasInClassBody; } function classbody(c) { @@ -5797,6 +6135,12 @@ var JSHINT = (function() { isStatic = false; isGenerator = false; getset = null; + if (name.id === ";") { + warning("W032"); + advance(";"); + continue; + } + if (name.id === "*") { isGenerator = true; advance("*"); @@ -5804,6 +6148,7 @@ var JSHINT = (function() { } if (name.id === "[") { name = computedPropertyName(); + computed = true; } else if (isPropertyName(name)) { advance(); computed = false; @@ -5886,7 +6231,7 @@ var JSHINT = (function() { var generator = false; if (state.tokens.next.value === "*") { advance("*"); - if (state.option.inESNext(true)) { + if (state.inESNext({ strict: true })) { generator = true; } else { warning("W119", state.tokens.curr, "function*"); @@ -5901,8 +6246,7 @@ var JSHINT = (function() { if (i === undefined) { warning("W025"); } - - if (funct[i] === "const") { + if (state.funct["(blockscope)"].labeltype(i) === "const") { warning("E011", null, i); } addlabel(i, { type: "unction", token: state.tokens.curr }); @@ -5922,7 +6266,7 @@ var JSHINT = (function() { var generator = false; if (state.tokens.next.value === "*") { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W119", state.tokens.curr, "function*"); } advance("*"); @@ -5935,7 +6279,7 @@ var JSHINT = (function() { function isVariable(name) { return name[0] !== "("; } function isLocal(name) { return fn[name] === "var"; } - if (!state.option.loopfunc && funct["(loopage)"]) { + if (!state.option.loopfunc && state.funct["(loopage)"]) { if (_.some(fn, function(val, name) { return isVariable(name) && !isLocal(name); })) { warning("W083"); } @@ -6001,10 +6345,10 @@ var JSHINT = (function() { advance(); - funct = functor("(catch)", state.tokens.next, scope, { - "(context)" : funct, - "(breakage)" : funct["(breakage)"], - "(loopage)" : funct["(loopage)"], + state.funct = functor("(catch)", state.tokens.next, scope, { + "(context)" : state.funct, + "(breakage)" : state.funct["(breakage)"], + "(loopage)" : state.funct["(loopage)"], "(statement)": false, "(catch)" : true }); @@ -6014,7 +6358,7 @@ var JSHINT = (function() { } if (state.tokens.next.value === "if") { - if (!state.option.inMoz(true)) { + if (!state.inMoz()) { warning("W118", state.tokens.curr, "catch filter"); } advance("if"); @@ -6023,23 +6367,23 @@ var JSHINT = (function() { advance(")"); - state.tokens.curr.funct = funct; - functions.push(funct); + state.tokens.curr.funct = state.funct; + functions.push(state.funct); block(false); scope = oldScope; - funct["(last)"] = state.tokens.curr.line; - funct["(lastcharacter)"] = state.tokens.curr.character; - funct = funct["(context)"]; + state.funct["(last)"] = state.tokens.curr.line; + state.funct["(lastcharacter)"] = state.tokens.curr.character; + state.funct = state.funct["(context)"]; } block(true); while (state.tokens.next.id === "catch") { increaseComplexityCount(); - if (b && (!state.option.inMoz(true))) { + if (b && (!state.inMoz())) { warning("W118", state.tokens.next, "multiple catch blocks"); } doCatch(); @@ -6061,21 +6405,21 @@ var JSHINT = (function() { blockstmt("while", function() { var t = state.tokens.next; - funct["(breakage)"] += 1; - funct["(loopage)"] += 1; + state.funct["(breakage)"] += 1; + state.funct["(loopage)"] += 1; increaseComplexityCount(); advance("("); checkCondAssignment(expression(0)); advance(")", t); block(true, true); - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; + state.funct["(breakage)"] -= 1; + state.funct["(loopage)"] -= 1; return this; }).labelled = true; blockstmt("with", function() { var t = state.tokens.next; - if (state.directive["use strict"]) { + if (state.isStrict()) { error("E010", state.tokens.curr); } else if (!state.option.withstmt) { warning("W085", state.tokens.curr); @@ -6094,7 +6438,7 @@ var JSHINT = (function() { var g = false; var noindent = false; - funct["(breakage)"] += 1; + state.funct["(breakage)"] += 1; advance("("); checkCondAssignment(expression(0)); advance(")", t); @@ -6112,7 +6456,7 @@ var JSHINT = (function() { for (;;) { switch (state.tokens.next.id) { case "case": - switch (funct["(verb)"]) { + switch (state.funct["(verb)"]) { case "yield": case "break": case "case": @@ -6132,10 +6476,10 @@ var JSHINT = (function() { increaseComplexityCount(); g = true; advance(":"); - funct["(verb)"] = "case"; + state.funct["(verb)"] = "case"; break; case "default": - switch (funct["(verb)"]) { + switch (state.funct["(verb)"]) { case "yield": case "break": case "continue": @@ -6159,8 +6503,8 @@ var JSHINT = (function() { indent -= state.option.indent; advance("}", t); - funct["(breakage)"] -= 1; - funct["(verb)"] = undefined; + state.funct["(breakage)"] -= 1; + state.funct["(verb)"] = undefined; return; case "(end)": error("E023", state.tokens.next, "}"); @@ -6204,8 +6548,8 @@ var JSHINT = (function() { (function() { var x = stmt("do", function() { - funct["(breakage)"] += 1; - funct["(loopage)"] += 1; + state.funct["(breakage)"] += 1; + state.funct["(loopage)"] += 1; increaseComplexityCount(); this.first = block(true, true); @@ -6214,8 +6558,8 @@ var JSHINT = (function() { advance("("); checkCondAssignment(expression(0)); advance(")", t); - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; + state.funct["(breakage)"] -= 1; + state.funct["(loopage)"] -= 1; return this; }); x.labelled = true; @@ -6230,53 +6574,58 @@ var JSHINT = (function() { if (t.value === "each") { foreachtok = t; advance("each"); - if (!state.option.inMoz(true)) { + if (!state.inMoz()) { warning("W118", state.tokens.curr, "for each"); } } - funct["(breakage)"] += 1; - funct["(loopage)"] += 1; + state.funct["(breakage)"] += 1; + state.funct["(loopage)"] += 1; increaseComplexityCount(); advance("("); var nextop; // contains the token of the "in" or "of" operator var i = 0; var inof = ["in", "of"]; + var level = 0; // BindingPattern "level" --- level 0 === no BindingPattern + var comma; // First comma punctuator at level 0 + var initializer; // First initializer at level 0 + if (checkPunctuators(state.tokens.next, ["{", "["])) ++level; do { nextop = peek(i); ++i; - } while (!_.contains(inof, nextop.value) && nextop.value !== ";" && nextop.type !== "(end)"); + if (checkPunctuators(nextop, ["{", "["])) ++level; + else if (checkPunctuators(nextop, ["}", "]"])) --level; + if (level < 0) break; + if (level === 0) { + if (!comma && checkPunctuators(nextop, [","])) comma = nextop; + else if (!initializer && checkPunctuators(nextop, ["="])) initializer = nextop; + } + } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== ";" && + nextop.type !== "(end)"); // Is this a JSCS bug? This looks really weird. if (_.contains(inof, nextop.value)) { - if (!state.option.inESNext() && nextop.value === "of") { + if (!state.inESNext() && nextop.value === "of") { error("W104", nextop, "for of"); } + var ok = !(initializer || comma); + if (initializer) { + error("W133", comma, nextop.value, "initializer is forbidden"); + } + + if (comma) { + error("W133", comma, nextop.value, "more than one ForBinding"); + } + if (state.tokens.next.id === "var") { advance("var"); state.tokens.curr.fud({ prefix: true }); - } else if (state.tokens.next.id === "let") { - advance("let"); + } else if (state.tokens.next.id === "let" || state.tokens.next.id === "const") { + advance(state.tokens.next.id); letscope = true; - funct["(blockscope)"].stack(); + state.funct["(blockscope)"].stack(); state.tokens.curr.fud({ prefix: true }); - } else if (!state.tokens.next.identifier) { - error("E030", state.tokens.next, state.tokens.next.type); - advance(); } else { - switch (funct[state.tokens.next.value]) { - case "unused": - funct[state.tokens.next.value] = "var"; - break; - case "var": - break; - default: - var ident = state.tokens.next.value; - if (!funct["(blockscope)"].getlabel(ident) && - !(scope[ident] || {})[ident]) { - warning("W088", state.tokens.next, state.tokens.next.value); - } - } - advance(); + Object.create(varstatement).fud({ prefix: true, implied: "for", ignore: !ok }); } advance(nextop.value); expression(20); @@ -6309,8 +6658,8 @@ var JSHINT = (function() { state.forinifcheckneeded = false; } - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; + state.funct["(breakage)"] -= 1; + state.funct["(loopage)"] -= 1; } else { if (foreachtok) { error("E045", foreachtok); @@ -6322,7 +6671,7 @@ var JSHINT = (function() { } else if (state.tokens.next.id === "let") { advance("let"); letscope = true; - funct["(blockscope)"].stack(); + state.funct["(blockscope)"].stack(); state.tokens.curr.fud(); } else { for (;;) { @@ -6355,12 +6704,12 @@ var JSHINT = (function() { } advance(")", t); block(true, true); - funct["(breakage)"] -= 1; - funct["(loopage)"] -= 1; + state.funct["(breakage)"] -= 1; + state.funct["(loopage)"] -= 1; } if (letscope) { - funct["(blockscope)"].unstack(); + state.funct["(blockscope)"].unstack(); } return this; }).labelled = true; @@ -6369,7 +6718,7 @@ var JSHINT = (function() { stmt("break", function() { var v = state.tokens.next.value; - if (funct["(breakage)"] === 0) + if (state.funct["(breakage)"] === 0) warning("W052", state.tokens.next, this.value); if (!state.option.asi) @@ -6377,9 +6726,9 @@ var JSHINT = (function() { if (state.tokens.next.id !== ";" && !state.tokens.next.reach) { if (state.tokens.curr.line === startLine(state.tokens.next)) { - if (funct[v] !== "label") { + if (state.funct[v] !== "label") { warning("W090", state.tokens.next, v); - } else if (scope[v] !== funct) { + } else if (scope[v] !== state.funct) { warning("W091", state.tokens.next, v); } this.first = state.tokens.next; @@ -6396,7 +6745,7 @@ var JSHINT = (function() { stmt("continue", function() { var v = state.tokens.next.value; - if (funct["(breakage)"] === 0) + if (state.funct["(breakage)"] === 0) warning("W052", state.tokens.next, this.value); if (!state.option.asi) @@ -6404,15 +6753,15 @@ var JSHINT = (function() { if (state.tokens.next.id !== ";" && !state.tokens.next.reach) { if (state.tokens.curr.line === startLine(state.tokens.next)) { - if (funct[v] !== "label") { + if (state.funct[v] !== "label") { warning("W090", state.tokens.next, v); - } else if (scope[v] !== funct) { + } else if (scope[v] !== state.funct) { warning("W091", state.tokens.next, v); } this.first = state.tokens.next; advance(); } - } else if (!funct["(loopage)"]) { + } else if (!state.funct["(loopage)"]) { warning("W052", state.tokens.next, this.value); } @@ -6450,14 +6799,14 @@ var JSHINT = (function() { x.lbp = 25; }(prefix("yield", function() { var prev = state.tokens.prev; - if (state.option.inESNext(true) && !funct["(generator)"]) { - if (!("(catch)" === funct["(name)"] && funct["(context)"]["(generator)"])) { + if (state.inESNext(true) && !state.funct["(generator)"]) { + if (!("(catch)" === state.funct["(name)"] && state.funct["(context)"]["(generator)"])) { error("E046", state.tokens.curr, "yield"); } - } else if (!state.option.inESNext()) { + } else if (!state.inESNext()) { warning("W104", state.tokens.curr, "yield"); } - funct["(generator)"] = "yielded"; + state.funct["(generator)"] = "yielded"; var delegatingYield = false; if (state.tokens.next.value === "*") { @@ -6465,7 +6814,7 @@ var JSHINT = (function() { advance("*"); } - if (this.line === startLine(state.tokens.next) || !state.option.inMoz(true)) { + if (this.line === startLine(state.tokens.next) || !state.inMoz()) { if (delegatingYield || (state.tokens.next.id !== ";" && !state.tokens.next.reach && state.tokens.next.nud)) { @@ -6478,7 +6827,7 @@ var JSHINT = (function() { } } - if (state.option.inMoz(true) && state.tokens.next.id !== ")" && + if (state.inMoz() && state.tokens.next.id !== ")" && (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === "yield")) { error("E050", this); } @@ -6499,7 +6848,7 @@ var JSHINT = (function() { }).exps = true; stmt("import", function() { - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W119", state.tokens.curr, "import"); } @@ -6568,12 +6917,12 @@ var JSHINT = (function() { var token; var identifier; - if (!state.option.inESNext()) { + if (!state.inESNext()) { warning("W119", state.tokens.curr, "export"); ok = false; } - if (!funct["(global)"] || !funct["(blockscope)"].atTop()) { + if (!state.funct["(global)"] || !state.funct["(blockscope)"].atTop()) { error("E053", state.tokens.curr); ok = false; } @@ -6644,11 +6993,11 @@ var JSHINT = (function() { advance("(string)"); } else if (ok) { exportedTokens.forEach(function(token) { - if (!funct[token.value]) { - isundef(funct, "W117", token, token.value); + if (!state.funct[token.value]) { + isundef(state.funct, "W117", token, token.value); } exported[token.value] = true; - funct["(blockscope)"].setExported(token.value); + state.funct["(blockscope)"].setExported(token.value); }); } return this; @@ -6809,7 +7158,7 @@ var JSHINT = (function() { var block = lookupBlockType(); if (block.notJson) { - if (!state.option.inESNext() && block.isDestAssign) { + if (!state.inESNext() && block.isDestAssign) { warning("W104", state.tokens.curr, "destructuring assignment"); } statements(); @@ -6856,7 +7205,7 @@ var JSHINT = (function() { if (v.unused) warning("W098", v.token, v.raw_text || v.value); if (v.undef) - isundef(v.funct, "W117", v.token, v.value); + isundef(v.state.funct, "W117", v.token, v.value); }); _carrays.splice(-1, 1); _current = _carrays[_carrays.length - 1]; @@ -6872,7 +7221,7 @@ var JSHINT = (function() { if (_current && _current.mode === "use") { if (use(v)) { _current.variables.push({ - funct: funct, + funct: state.funct, token: state.tokens.curr, value: v, undef: true, @@ -6883,7 +7232,7 @@ var JSHINT = (function() { } else if (_current && _current.mode === "define") { if (!declare(v)) { _current.variables.push({ - funct: funct, + funct: state.funct, token: state.tokens.curr, value: v, undef: false, @@ -6892,11 +7241,11 @@ var JSHINT = (function() { } return true; } else if (_current && _current.mode === "generate") { - isundef(funct, "W117", state.tokens.curr, v); + isundef(state.funct, "W117", state.tokens.curr, v); return true; } else if (_current && _current.mode === "filter") { if (use(v)) { - isundef(funct, "W117", state.tokens.curr, v); + isundef(state.funct, "W117", state.tokens.curr, v); } return true; } @@ -6988,26 +7337,69 @@ var JSHINT = (function() { } } + var warnUnused = function(name, tkn, type, unused_opt) { + var line = tkn.line; + var chr = tkn.from; + var raw_name = tkn.raw_text || name; + + if (unused_opt === undefined) { + unused_opt = state.option.unused; + } + + if (unused_opt === true) { + unused_opt = "last-param"; + } + + var warnable_types = { + "vars": ["var"], + "last-param": ["var", "param"], + "strict": ["var", "param", "last-param"] + }; + + if (unused_opt) { + if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) { + if (!tkn.exported) { + warningAt("W098", line, chr, raw_name); + } + } + } + + unuseds.push({ + name: name, + line: line, + character: chr + }); + }; + var blockScope = function() { var _current = {}; var _variables = [_current]; function _checkBlockLabels() { for (var t in _current) { - if (_current[t]["(type)"] === "unused") { + var label = _current[t], + labelType = label["(type)"]; + if (labelType === "unused" || (labelType === "const" && label["(unused)"])) { if (state.option.unused) { var tkn = _current[t]["(token)"]; if (tkn.exported) { continue; } - var line = tkn.line; - var chr = tkn.character; - warningAt("W098", line, chr, t); + + warnUnused(t, tkn, "var"); } } } } + function _getLabel(l) { + for (var i = _variables.length - 1 ; i >= 0; --i) { + if (_.has(_variables[i], l) && !_variables[i][l]["(shadowed)"]) { + return _variables[i]; + } + } + } + return { stack: function() { _current = {}; @@ -7020,12 +7412,14 @@ var JSHINT = (function() { _current = _.last(_variables); }, - getlabel: function(l) { - for (var i = _variables.length - 1 ; i >= 0; --i) { - if (_.has(_variables[i], l) && !_variables[i][l]["(shadowed)"]) { - return _variables[i]; - } + getlabel: _getLabel, + + labeltype: function(l) { + var block = _getLabel(l); + if (block) { + return block[l]["(type)"]; } + return null; }, shadow: function(name) { @@ -7049,7 +7443,7 @@ var JSHINT = (function() { }, setExported: function(id) { - if (funct["(blockscope)"].atTop()) { + if (state.funct["(blockscope)"].atTop()) { var item = _current[id]; if (item && item["(token)"]) { item["(token)"].exported = true; @@ -7058,12 +7452,19 @@ var JSHINT = (function() { }, current: { + labeltype: function(t) { + if (_current[t]) { + return _current[t]["(type)"]; + } + return null; + }, + has: function(t) { return _.has(_current, t); }, add: function(t, type, tok) { - _current[t] = { "(type)" : type, "(token)": tok, "(shadowed)": false }; + _current[t] = { "(type)" : type, "(token)": tok, "(shadowed)": false, "(unused)": true }; } } }; @@ -7136,9 +7537,15 @@ var JSHINT = (function() { if (/^-W\d{3}$/g.test(optionKeys[x])) { newIgnoredObj[optionKeys[x].slice(1)] = true; } else { - newOptionObj[optionKeys[x]] = o[optionKeys[x]]; + var optionKey = optionKeys[x]; + newOptionObj[optionKey] = o[optionKey]; + if (optionKey === "es5") { + if (o[optionKey]) { + warning("I003"); + } + } - if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false) + if (optionKeys[x] === "newcap" && o[optionKey] === false) newOptionObj["(explicitNewcap)"] = true; } } @@ -7154,14 +7561,14 @@ var JSHINT = (function() { global = Object.create(predefined); scope = global; - funct = functor("(global)", null, scope, { + state.funct = functor("(global)", null, scope, { "(global)" : true, "(blockscope)": blockScope(), "(comparray)" : arrayComprehension(), "(metrics)" : createMetrics(state.tokens.next) }); - functions = [funct]; + functions = [state.funct]; urls = []; stack = null; member = {}; @@ -7280,9 +7687,10 @@ var JSHINT = (function() { default: directives(); - if (state.directive["use strict"]) { + if (state.isStrict()) { if (!state.option.globalstrict) { - if (!(state.option.node || state.option.phantom || state.option.browserify)) { + if (!(state.option.module || state.option.node || state.option.phantom || + state.option.browserify)) { warning("W097", state.tokens.prev); } } @@ -7290,8 +7698,12 @@ var JSHINT = (function() { statements(); } - advance((state.tokens.next && state.tokens.next.value !== ".") ? "(end)" : undefined); - funct["(blockscope)"].unstack(); + + if (state.tokens.next.id !== "(end)") { + quit("E041", state.tokens.curr.line); + } + + state.funct["(blockscope)"].unstack(); var markDefined = function(name, context) { do { @@ -7327,40 +7739,6 @@ var JSHINT = (function() { implied[name] = newImplied; }; - var warnUnused = function(name, tkn, type, unused_opt) { - var line = tkn.line; - var chr = tkn.from; - var raw_name = tkn.raw_text || name; - - if (unused_opt === undefined) { - unused_opt = state.option.unused; - } - - if (unused_opt === true) { - unused_opt = "last-param"; - } - - var warnable_types = { - "vars": ["var"], - "last-param": ["var", "param"], - "strict": ["var", "param", "last-param"] - }; - - if (unused_opt) { - if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) { - if (!tkn.exported) { - warningAt("W098", line, chr, raw_name); - } - } - } - - unuseds.push({ - name: name, - line: line, - character: chr - }); - }; - var checkUnused = function(func, key) { var type = func[key]; var tkn = func["(tokens)"][key]; @@ -7368,14 +7746,12 @@ var JSHINT = (function() { if (key.charAt(0) === "(") return; - if (type !== "unused" && type !== "unction" && type !== "const") + if (type !== "unused" && type !== "unction") return; if (func["(params)"] && func["(params)"].indexOf(key) !== -1) return; if (func["(global)"] && _.has(exported, key)) return; - if (type === "const" && !getprop(func, key, "unused")) - return; warnUnused(key, tkn, "var"); }; @@ -7557,9 +7933,7 @@ if (typeof exports === "object" && exports) { exports.JSHINT = JSHINT; } -}, -{"./lex.js":4,"./messages.js":5,"./options.js":7,"./reg.js":8,"./state.js":9,"./style.js":10,"./vars.js":11,"events":12,"underscore":2}], -4:[function(_dereq_,module,exports){ +},{"./lex.js":"/node_modules/jshint/src/lex.js","./messages.js":"/node_modules/jshint/src/messages.js","./options.js":"/node_modules/jshint/src/options.js","./reg.js":"/node_modules/jshint/src/reg.js","./state.js":"/node_modules/jshint/src/state.js","./style.js":"/node_modules/jshint/src/style.js","./vars.js":"/node_modules/jshint/src/vars.js","events":"/node_modules/browserify/node_modules/events/events.js","underscore":"/node_modules/jshint/node_modules/underscore/underscore.js"}],"/node_modules/jshint/src/lex.js":[function(_dereq_,module,exports){ "use strict"; @@ -8341,7 +8715,7 @@ Lexer.prototype = { line: this.line, character: this.char }, checks, - function() { return n >= 0 && n <= 7 && state.directive["use strict"]; }); + function() { return n >= 0 && n <= 7 && state.isStrict(); }); break; case "u": var hexCode = this.input.substr(1, 4); @@ -8493,8 +8867,8 @@ Lexer.prototype = { this.skip(); - outer: while (this.peek() !== quote) { - while (this.peek() === "") { // End Of Line + while (this.peek() !== quote) { + if (this.peek() === "") { // End Of Line if (!allowNewLine) { this.trigger("warning", { @@ -8534,32 +8908,31 @@ Lexer.prototype = { quote: quote }; } - - if (this.peek() == quote) - break outer; - } - allowNewLine = false; - var char = this.peek(); - var jump = 1; // A length of a jump, after we're done + } else { // Any character other than End Of Line - if (char < " ") { - this.trigger("warning", { - code: "W113", - line: this.line, - character: this.char, - data: [ "" ] - }); - } - if (char === "\\") { - var parsed = this.scanEscapeSequence(checks); - char = parsed.char; - jump = parsed.jump; - allowNewLine = parsed.allowNewLine; - } + allowNewLine = false; + var char = this.peek(); + var jump = 1; // A length of a jump, after we're done - value += char; - this.skip(jump); + if (char < " ") { + this.trigger("warning", { + code: "W113", + line: this.line, + character: this.char, + data: [ "" ] + }); + } + if (char === "\\") { + var parsed = this.scanEscapeSequence(checks); + char = parsed.char; + jump = parsed.jump; + allowNewLine = parsed.allowNewLine; + } + + value += char; + this.skip(jump); + } } this.skip(); @@ -8823,12 +9196,12 @@ Lexer.prototype = { } var meta = token.meta; - if (meta && meta.isFutureReservedWord && state.option.inES5()) { + if (meta && meta.isFutureReservedWord && state.inES5()) { if (!meta.es5) { return false; } if (meta.strictOnly) { - if (!state.option.strict && !state.directive["use strict"]) { + if (!state.option.strict && !state.isStrict()) { return false; } } @@ -8913,7 +9286,16 @@ Lexer.prototype = { for (;;) { if (!this.input.length) { - return create(this.nextLine() ? "(endline)" : "(end)", ""); + if (this.nextLine()) { + return create("(endline)", ""); + } + + if (this.exhausted) { + return null; + } + + this.exhausted = true; + return create("(end)", ""); } token = this.next(checks); @@ -9027,7 +9409,7 @@ Lexer.prototype = { line: this.line, character: this.char }, checks, function() { - return state.directive["use strict"] && token.base === 8 && token.isLegacy; + return state.isStrict() && token.base === 8 && token.isLegacy; }); this.trigger("Number", { @@ -9075,9 +9457,7 @@ Lexer.prototype = { exports.Lexer = Lexer; exports.Context = Context; -}, -{"../data/ascii-identifier-data.js":1,"./reg.js":8,"./state.js":9,"events":12,"underscore":2}], -5:[function(_dereq_,module,exports){ +},{"../data/ascii-identifier-data.js":"/node_modules/jshint/data/ascii-identifier-data.js","./reg.js":"/node_modules/jshint/src/reg.js","./state.js":"/node_modules/jshint/src/state.js","events":"/node_modules/browserify/node_modules/events/events.js","underscore":"/node_modules/jshint/node_modules/underscore/underscore.js"}],"/node_modules/jshint/src/messages.js":[function(_dereq_,module,exports){ "use strict"; var _ = _dereq_("underscore"); @@ -9130,13 +9510,14 @@ var errors = { E045: "Invalid for each loop.", E046: "A yield statement shall be within a generator function (with syntax: `function*`)", E047: null, // Vacant - E048: "Let declaration not directly within block.", + E048: "{a} declaration not directly within block.", E049: "A {a} cannot be named '{b}'.", E050: "Mozilla requires the yield expression to be parenthesized here.", E051: "Regular parameters cannot come after default parameters.", E052: "Unclosed template literal.", E053: "Export declaration must be in global scope.", - E054: "Class properties must be methods. Expected '(' but instead saw '{a}'." + E054: "Class properties must be methods. Expected '(' but instead saw '{a}'.", + E055: "The '{a}' option cannot be set after any executable code." }; var warnings = { @@ -9273,7 +9654,10 @@ var warnings = { W129: "'{a}' is defined in a future version of JavaScript. Use a " + "different variable name to avoid migration issues.", W130: "Invalid element after rest element.", - W131: "Invalid parameter after rest parameter." + W131: "Invalid parameter after rest parameter.", + W132: "`var` declarations are forbidden. Use `let` or `const` instead.", + W133: "Invalid for-{a} loop left-hand-side: {b}.", + W134: "The '{a}' option is only available when linting ECMAScript {b} code." }; var info = { @@ -9298,9 +9682,7 @@ _.each(info, function(desc, code) { exports.info[code] = { code: code, desc: desc }; }); -}, -{"underscore":2}], -6:[function(_dereq_,module,exports){ +},{"underscore":"/node_modules/jshint/node_modules/underscore/underscore.js"}],"/node_modules/jshint/src/name-stack.js":[function(_dereq_,module,exports){ "use strict"; function NameStack() { @@ -9348,9 +9730,7 @@ NameStack.prototype.infer = function() { module.exports = NameStack; -}, -{}], -7:[function(_dereq_,module,exports){ +},{}],"/node_modules/jshint/src/options.js":[function(_dereq_,module,exports){ "use strict"; exports.bool = { enforcing: { @@ -9365,7 +9745,6 @@ exports.bool = { es5 : true, forin : true, funcscope : true, - globalstrict: true, immed : true, iterator : true, newcap : true, @@ -9376,6 +9755,8 @@ exports.bool = { nonew : true, undef : true, singleGroups: false, + strict : true, + varstmt: false, enforceall : false }, relaxing: { @@ -9383,12 +9764,11 @@ exports.bool = { multistr : true, debug : true, boss : true, - phantom : true, evil : true, + globalstrict: true, plusplus : true, proto : true, scripturl : true, - strict : true, sub : true, supernew : true, laxbreak : true, @@ -9416,6 +9796,7 @@ exports.bool = { prototypejs : true, yui : true, mocha : true, + module : true, wsh : true, worker : true, nonstandard : true, @@ -9423,7 +9804,8 @@ exports.bool = { browserify : true, devel : true, dojo : true, - typed : true + typed : true, + phantom : true }, obsolete: { onecase : true, // if one case switch statements should be allowed @@ -9483,10 +9865,12 @@ exports.removed = { smarttabs: true, trailing: true }; +exports.noenforceall = { + varstmt: true, + strict: true +}; -}, -{}], -8:[function(_dereq_,module,exports){ +},{}],"/node_modules/jshint/src/reg.js":[function(_dereq_,module,exports){ "use strict"; exports.unsafeString = @@ -9504,14 +9888,31 @@ exports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\ exports.fallsThrough = /^\s*\/\*\s*falls?\sthrough\s*\*\/\s*$/; exports.maxlenException = /^(?:(?:\/\/|\/\*|\*) ?)?[^ ]+$/; -}, -{}], -9:[function(_dereq_,module,exports){ +},{}],"/node_modules/jshint/src/state.js":[function(_dereq_,module,exports){ "use strict"; var NameStack = _dereq_("./name-stack.js"); var state = { syntax: {}, + isStrict: function() { + return this.directive["use strict"] || this.inClassBody || + this.option.module; + }, + inMoz: function() { + return this.option.moz; + }, + inESNext: function() { + return this.option.moz || this.option.esnext; + }, + + inES5: function() { + return !this.option.es3; + }, + + inES3: function() { + return this.option.es3; + }, + reset: function() { this.tokens = { @@ -9521,6 +9922,7 @@ var state = { }; this.option = {}; + this.funct = null; this.ignored = {}; this.directive = {}; this.jsonMode = false; @@ -9531,15 +9933,14 @@ var state = { this.ignoredLines = {}; this.forinifcheckneeded = false; this.nameStack = new NameStack(); + this.inClassBody = false; this.ignoreLinterErrors = false; } }; exports.state = state; -}, -{"./name-stack.js":6}], -10:[function(_dereq_,module,exports){ +},{"./name-stack.js":"/node_modules/jshint/src/name-stack.js"}],"/node_modules/jshint/src/style.js":[function(_dereq_,module,exports){ "use strict"; exports.register = function(linter) { @@ -9662,9 +10063,7 @@ exports.register = function(linter) { }); }; -}, -{}], -11:[function(_dereq_,module,exports){ +},{}],"/node_modules/jshint/src/vars.js":[function(_dereq_,module,exports){ "use strict"; @@ -9745,6 +10144,7 @@ exports.browser = { ElementTimeControl : false, Event : false, event : false, + fetch : false, FileReader : false, FormData : false, focus : false, @@ -9758,6 +10158,7 @@ exports.browser = { HTMLBRElement : false, HTMLButtonElement : false, HTMLCanvasElement : false, + HTMLCollection : false, HTMLDirectoryElement : false, HTMLDivElement : false, HTMLDListElement : false, @@ -9837,6 +10238,7 @@ exports.browser = { opener : false, Option : false, parent : false, + performance : false, print : false, Range : false, requestAnimationFrame : false, @@ -10322,6 +10724,7 @@ exports.yui = { }; exports.mocha = { + mocha : false, describe : false, xdescribe : false, it : false, @@ -10343,6 +10746,7 @@ exports.mocha = { exports.jasmine = { jasmine : false, describe : false, + xdescribe : false, it : false, xit : false, beforeEach : false, @@ -10361,268 +10765,7 @@ exports.jasmine = { fit : false }; -}, -{}], -12:[function(_dereq_,module,exports){ - -function EventEmitter() { - this._events = this._events || {}; - this._maxListeners = this._maxListeners || undefined; -} -module.exports = EventEmitter; -EventEmitter.EventEmitter = EventEmitter; - -EventEmitter.prototype._events = undefined; -EventEmitter.prototype._maxListeners = undefined; -EventEmitter.defaultMaxListeners = 10; -EventEmitter.prototype.setMaxListeners = function(n) { - if (!isNumber(n) || n < 0 || isNaN(n)) - throw TypeError('n must be a positive number'); - this._maxListeners = n; - return this; -}; - -EventEmitter.prototype.emit = function(type) { - var er, handler, len, args, i, listeners; - - if (!this._events) - this._events = {}; - if (type === 'error') { - if (!this._events.error || - (isObject(this._events.error) && !this._events.error.length)) { - er = arguments[1]; - if (er instanceof Error) { - throw er; // Unhandled 'error' event - } else { - throw TypeError('Uncaught, unspecified "error" event.'); - } - return false; - } - } - - handler = this._events[type]; - - if (isUndefined(handler)) - return false; - - if (isFunction(handler)) { - switch (arguments.length) { - case 1: - handler.call(this); - break; - case 2: - handler.call(this, arguments[1]); - break; - case 3: - handler.call(this, arguments[1], arguments[2]); - break; - default: - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - handler.apply(this, args); - } - } else if (isObject(handler)) { - len = arguments.length; - args = new Array(len - 1); - for (i = 1; i < len; i++) - args[i - 1] = arguments[i]; - - listeners = handler.slice(); - len = listeners.length; - for (i = 0; i < len; i++) - listeners[i].apply(this, args); - } - - return true; -}; - -EventEmitter.prototype.addListener = function(type, listener) { - var m; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events) - this._events = {}; - if (this._events.newListener) - this.emit('newListener', type, - isFunction(listener.listener) ? - listener.listener : listener); - - if (!this._events[type]) - this._events[type] = listener; - else if (isObject(this._events[type])) - this._events[type].push(listener); - else - this._events[type] = [this._events[type], listener]; - if (isObject(this._events[type]) && !this._events[type].warned) { - var m; - if (!isUndefined(this._maxListeners)) { - m = this._maxListeners; - } else { - m = EventEmitter.defaultMaxListeners; - } - - if (m && m > 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - -}, -{}]},{},[3]) -(3) +},{}]},{},["/node_modules/jshint/src/jshint.js"]); }); diff --git a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-php.js b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-php.js index ef586fb3d..350b9e802 100755 --- a/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-php.js +++ b/modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-php.js @@ -1,8 +1,9 @@ "no use strict"; ;(function(window) { -if (typeof window.window != "undefined" && window.document) { +if (typeof window.window != "undefined" && window.document) + return; +if (window.require && window.define) return; -} window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); @@ -19,6 +20,7 @@ window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, + data: err.data, file: file, line: line, col: col, @@ -37,7 +39,7 @@ window.normalizeModule = function(parentId, moduleName) { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { + while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } @@ -46,7 +48,7 @@ window.normalizeModule = function(parentId, moduleName) { return moduleName; }; -window.require = function(parentId, id) { +window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; @@ -64,17 +66,36 @@ window.require = function(parentId, id) { } return module.exports; } - - var chunks = id.split("/"); + if (!window.require.tlns) return console.log("unable to load " + id); - chunks[0] = window.require.tlns[chunks[0]] || chunks[0]; - var path = chunks.join("/") + ".js"; + + var path = resolveModuleId(id, window.require.tlns); + if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; + window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; +function resolveModuleId(id, paths) { + var testPath = id, tail = ""; + while (testPath) { + var alias = paths[testPath]; + if (typeof alias == "string") { + return alias + tail; + } else if (alias) { + return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); + } else if (alias === false) { + return ""; + } + var i = testPath.lastIndexOf("/"); + if (i === -1) break; + tail = testPath.substr(i) + tail; + testPath = testPath.slice(0, i); + } + return id; +} window.require.modules = {}; window.require.tlns = {}; @@ -100,9 +121,9 @@ window.define = function(id, deps, factory) { } if (!deps.length) - // If there is no dependencies, we inject 'require', 'exports' and - // 'module' as dependencies, to provide CommonJS compatibility. - deps = ['require', 'exports', 'module']; + // If there is no dependencies, we inject "require", "exports" and + // "module" as dependencies, to provide CommonJS compatibility. + deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); @@ -113,16 +134,16 @@ window.define = function(id, deps, factory) { factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { - switch(dep) { - // Because 'require', 'exports' and 'module' aren't actual - // dependencies, we must handle them seperately. - case 'require': return req; - case 'exports': return module.exports; - case 'module': return module; - // But for all other dependencies, we can just go ahead and - // require them. - default: return req(dep); - } + switch (dep) { + // Because "require", "exports" and "module" aren't actual + // dependencies, we must handle them seperately. + case "require": return req; + case "exports": return module.exports; + case "module": return module; + // But for all other dependencies, we can just go ahead and + // require them. + default: return req(dep); + } })); if (returnExports) module.exports = returnExports; @@ -131,9 +152,10 @@ window.define = function(id, deps, factory) { }; }; window.define.amd = {}; - +require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { - require.tlns = topLevelNamespaces; + for (var i in topLevelNamespaces) + require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { @@ -173,21 +195,23 @@ var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; - if (msg.command) { + if (msg.event && sender) { + sender._signal(msg.event, msg.data); + } + else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); + else if (window[msg.command]) + window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } - else if (msg.init) { - initBaseUrls(msg.tlns); + else if (msg.init) { + window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); - sender = window.sender = initSender(); + sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); - } - else if (msg.event && sender) { - sender._signal(msg.event, msg.data); } }; })(this); @@ -220,132 +244,6 @@ exports.implement = function(proto, mixin) { }); -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var EventEmitter = {}; -var stopPropagation = function() { this.propagationStopped = true; }; -var preventDefault = function() { this.defaultPrevented = true; }; - -EventEmitter._emit = -EventEmitter._dispatchEvent = function(eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - - if (typeof e != "object" || !e) - e = {}; - - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - - listeners = listeners.slice(); - for (var i=0; i= 0 && position.row < docLines.length && + position.column >= 0 && position.column <= docLines[position.row].length; +} + +function validateDelta(docLines, delta) { + if (delta.action != "insert" && delta.action != "remove") + throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); + if (!(delta.lines instanceof Array)) + throwDeltaError(delta, "delta.lines must be an Array"); + if (!delta.start || !delta.end) + throwDeltaError(delta, "delta.start/end must be an present"); + var start = delta.start; + if (!positionInDocument(docLines, delta.start)) + throwDeltaError(delta, "delta.start must be contained in document"); + var end = delta.end; + if (delta.action == "remove" && !positionInDocument(docLines, end)) + throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); + var numRangeRows = end.row - start.row; + var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); + if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) + throwDeltaError(delta, "delta.range must match delta lines"); +} + +exports.applyDelta = function(docLines, delta, doNotValidate) { + + var row = delta.start.row; + var startColumn = delta.start.column; + var line = docLines[row] || ""; + switch (delta.action) { + case "insert": + var lines = delta.lines; + if (lines.length === 1) { + docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); + } else { + var args = [row, 1].concat(delta.lines); + docLines.splice.apply(docLines, args); + docLines[row] = line.substring(0, startColumn) + docLines[row]; + docLines[row + delta.lines.length - 1] += line.substring(startColumn); + } + break; + case "remove": + var endColumn = delta.end.column; + var endRow = delta.end.row; + if (row === endRow) { + docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); + } else { + docLines.splice( + row, endRow - row + 1, + line.substring(0, startColumn) + docLines[endRow].substring(endColumn) + ); + } + break; + } +} +}); + +ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { +"use strict"; + +var EventEmitter = {}; +var stopPropagation = function() { this.propagationStopped = true; }; +var preventDefault = function() { this.defaultPrevented = true; }; + +EventEmitter._emit = +EventEmitter._dispatchEvent = function(eventName, e) { + this._eventRegistry || (this._eventRegistry = {}); + this._defaultHandlers || (this._defaultHandlers = {}); + + var listeners = this._eventRegistry[eventName] || []; + var defaultHandler = this._defaultHandlers[eventName]; + if (!listeners.length && !defaultHandler) + return; + + if (typeof e != "object" || !e) + e = {}; + + if (!e.type) + e.type = eventName; + if (!e.stopPropagation) + e.stopPropagation = stopPropagation; + if (!e.preventDefault) + e.preventDefault = preventDefault; + + listeners = listeners.slice(); + for (var i=0; i this.row) + if (delta.start.row > this.row) return; - - if (range.start.row == this.row && range.start.column > this.column) - return; - - var row = this.row; - var column = this.column; - var start = range.start; - var end = range.end; - - if (delta.action === "insertText") { - if (start.row === row && start.column <= column) { - if (start.column === column && this.$insertRight) { - } else if (start.row === end.row) { - column += end.column - start.column; - } else { - column -= start.column; - row += end.row - start.row; - } - } else if (start.row !== end.row && start.row < row) { - row += end.row - start.row; - } - } else if (delta.action === "insertLines") { - if (start.row === row && column === 0 && this.$insertRight) { - } - else if (start.row <= row) { - row += end.row - start.row; - } - } else if (delta.action === "removeText") { - if (start.row === row && start.column < column) { - if (end.column >= column) - column = start.column; - else - column = Math.max(0, column - (end.column - start.column)); - - } else if (start.row !== end.row && start.row < row) { - if (end.row === row) - column = Math.max(0, column - end.column) + start.column; - row -= (end.row - start.row); - } else if (end.row === row) { - row -= end.row - start.row; - column = Math.max(0, column - end.column) + start.column; - } - } else if (delta.action == "removeLines") { - if (start.row <= row) { - if (end.row <= row) - row -= end.row - start.row; - else { - row = start.row; - column = 0; - } - } - } - - this.setPosition(row, column, true); + + var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); + this.setPosition(point.row, point.column, true); }; + + function $pointsInOrder(point1, point2, equalPointsInOrder) { + var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; + return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); + } + + function $getTransformedPoint(delta, point, moveIfEqual) { + var deltaIsInsert = delta.action == "insert"; + var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); + var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); + var deltaStart = delta.start; + var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. + if ($pointsInOrder(point, deltaStart, moveIfEqual)) { + return { + row: point.row, + column: point.column + }; + } + if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { + return { + row: point.row + deltaRowShift, + column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) + }; + } + + return { + row: deltaStart.row, + column: deltaStart.column + }; + } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { @@ -734,22 +799,23 @@ var Anchor = exports.Anchor = function(doc, row, column) { }); -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { +ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); +var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; -var Document = function(text) { - this.$lines = []; - if (text.length === 0) { +var Document = function(textOrLines) { + this.$lines = [""]; + if (textOrLines.length === 0) { this.$lines = [""]; - } else if (Array.isArray(text)) { - this._insertLines(0, text); + } else if (Array.isArray(textOrLines)) { + this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { - this.insert({row: 0, column:0}, text); + this.insert({row: 0, column:0}, textOrLines); } }; @@ -757,9 +823,9 @@ var Document = function(text) { oop.implement(this, EventEmitter); this.setValue = function(text) { - var len = this.getLength(); - this.remove(new Range(0, 0, len, this.getLine(len-1).length)); - this.insert({row: 0, column:0}, text); + var len = this.getLength() - 1; + this.remove(new Range(0, 0, len, this.getLine(len).length)); + this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); @@ -767,14 +833,15 @@ var Document = function(text) { this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; - if ("aaa".split(/a/).length === 0) + if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; - else + } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; + } this.$detectNewLine = function(text) { @@ -821,252 +888,247 @@ var Document = function(text) { return this.$lines.length; }; this.getTextRange = function(range) { - if (range.start.row == range.end.row) { - return this.getLine(range.start.row) - .substring(range.start.column, range.end.column); - } - var lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - return lines.join(this.getNewLineCharacter()); + return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; - + this.getLinesForRange = function(range) { + var lines; + if (range.start.row === range.end.row) { + lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; + } else { + lines = this.getLines(range.start.row, range.end.row); + lines[0] = (lines[0] || "").substring(range.start.column); + var l = lines.length - 1; + if (range.end.row - range.start.row == l) + lines[l] = lines[l].substring(0, range.end.column); + } + return lines; + }; + this.insertLines = function(row, lines) { + console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); + return this.insertFullLines(row, lines); + }; + this.removeLines = function(firstRow, lastRow) { + console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); + return this.removeFullLines(firstRow, lastRow); + }; + this.insertNewLine = function(position) { + console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); + return this.insertMergedLines(position, ["", ""]); + }; + this.insert = function(position, text) { + if (this.getLength() <= 1) + this.$detectNewLine(text); + + return this.insertMergedLines(position, this.$split(text)); + }; + this.insertInLine = function(position, text) { + var start = this.clippedPos(position.row, position.column); + var end = this.pos(position.row, position.column + text.length); + + this.applyDelta({ + start: start, + end: end, + action: "insert", + lines: [text] + }, true); + + return this.clonePos(end); + }; + + this.clippedPos = function(row, column) { + var length = this.getLength(); + if (row === undefined) { + row = length; + } else if (row < 0) { + row = 0; + } else if (row >= length) { + row = length - 1; + column = undefined; + } + var line = this.getLine(row); + if (column == undefined) + column = line.length; + column = Math.min(Math.max(column, 0), line.length); + return {row: row, column: column}; + }; + + this.clonePos = function(pos) { + return {row: pos.row, column: pos.column}; + }; + + this.pos = function(row, column) { + return {row: row, column: column}; + }; + this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); - position.column = this.getLine(length-1).length; - } else if (position.row < 0) - position.row = 0; - return position; - }; - this.insert = function(position, text) { - if (!text || text.length === 0) - return position; - - position = this.$clipPosition(position); - if (this.getLength() <= 1) - this.$detectNewLine(text); - - var lines = this.$split(text); - var firstLine = lines.splice(0, 1)[0]; - var lastLine = lines.length == 0 ? null : lines.splice(lines.length - 1, 1)[0]; - - position = this.insertInLine(position, firstLine); - if (lastLine !== null) { - position = this.insertNewLine(position); // terminate first line - position = this._insertLines(position.row, lines); - position = this.insertInLine(position, lastLine || ""); + position.column = this.getLine(length - 1).length; + } else { + position.row = Math.max(0, position.row); + position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; - this.insertLines = function(row, lines) { - if (row >= this.getLength()) - return this.insert({row: row, column: 0}, "\n" + lines.join("\n")); - return this._insertLines(Math.max(row, 0), lines); - }; - this._insertLines = function(row, lines) { - if (lines.length == 0) - return {row: row, column: 0}; - while (lines.length > 20000) { - var end = this._insertLines(row, lines.slice(0, 20000)); - lines = lines.slice(20000); - row = end.row; + this.insertFullLines = function(row, lines) { + row = Math.min(Math.max(row, 0), this.getLength()); + var column = 0; + if (row < this.getLength()) { + lines = lines.concat([""]); + column = 0; + } else { + lines = [""].concat(lines); + row--; + column = this.$lines[row].length; } - - var args = [row, 0]; - args.push.apply(args, lines); - this.$lines.splice.apply(this.$lines, args); - - var range = new Range(row, 0, row + lines.length, 0); - var delta = { - action: "insertLines", - range: range, + this.insertMergedLines({row: row, column: column}, lines); + }; + this.insertMergedLines = function(position, lines) { + var start = this.clippedPos(position.row, position.column); + var end = { + row: start.row + lines.length - 1, + column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length + }; + + this.applyDelta({ + start: start, + end: end, + action: "insert", lines: lines - }; - this._signal("change", { data: delta }); - return range.end; - }; - this.insertNewLine = function(position) { - position = this.$clipPosition(position); - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column); - this.$lines.splice(position.row + 1, 0, line.substring(position.column, line.length)); - - var end = { - row : position.row + 1, - column : 0 - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); - - return end; - }; - this.insertInLine = function(position, text) { - if (text.length == 0) - return position; - - var line = this.$lines[position.row] || ""; - - this.$lines[position.row] = line.substring(0, position.column) + text - + line.substring(position.column); - - var end = { - row : position.row, - column : position.column + text.length - }; - - var delta = { - action: "insertText", - range: Range.fromPoints(position, end), - text: text - }; - this._signal("change", { data: delta }); - - return end; + }); + + return this.clonePos(end); }; this.remove = function(range) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - range.start = this.$clipPosition(range.start); - range.end = this.$clipPosition(range.end); - - if (range.isEmpty()) - return range.start; - - var firstRow = range.start.row; - var lastRow = range.end.row; - - if (range.isMultiLine()) { - var firstFullRow = range.start.column == 0 ? firstRow : firstRow + 1; - var lastFullRow = lastRow - 1; - - if (range.end.column > 0) - this.removeInLine(lastRow, 0, range.end.column); - - if (lastFullRow >= firstFullRow) - this._removeLines(firstFullRow, lastFullRow); - - if (firstFullRow != firstRow) { - this.removeInLine(firstRow, range.start.column, this.getLine(firstRow).length); - this.removeNewLine(range.start.row); - } - } - else { - this.removeInLine(firstRow, range.start.column, range.end.column); - } - return range.start; + var start = this.clippedPos(range.start.row, range.start.column); + var end = this.clippedPos(range.end.row, range.end.column); + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }); + return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { - if (startColumn == endColumn) - return; - - var range = new Range(row, startColumn, row, endColumn); - var line = this.getLine(row); - var removed = line.substring(startColumn, endColumn); - var newLine = line.substring(0, startColumn) + line.substring(endColumn, line.length); - this.$lines.splice(row, 1, newLine); - - var delta = { - action: "removeText", - range: range, - text: removed - }; - this._signal("change", { data: delta }); - return range.start; + var start = this.clippedPos(row, startColumn); + var end = this.clippedPos(row, endColumn); + + this.applyDelta({ + start: start, + end: end, + action: "remove", + lines: this.getLinesForRange({start: start, end: end}) + }, true); + + return this.clonePos(start); }; - this.removeLines = function(firstRow, lastRow) { - if (firstRow < 0 || lastRow >= this.getLength()) - return this.remove(new Range(firstRow, 0, lastRow + 1, 0)); - return this._removeLines(firstRow, lastRow); - }; - - this._removeLines = function(firstRow, lastRow) { - var range = new Range(firstRow, 0, lastRow + 1, 0); - var removed = this.$lines.splice(firstRow, lastRow - firstRow + 1); - - var delta = { - action: "removeLines", - range: range, - nl: this.getNewLineCharacter(), - lines: removed - }; - this._signal("change", { data: delta }); - return removed; + this.removeFullLines = function(firstRow, lastRow) { + firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); + lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); + var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; + var deleteLastNewLine = lastRow < this.getLength() - 1; + var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); + var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); + var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); + var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); + var range = new Range(startRow, startCol, endRow, endCol); + var deletedLines = this.$lines.slice(firstRow, lastRow + 1); + + this.applyDelta({ + start: range.start, + end: range.end, + action: "remove", + lines: this.getLinesForRange(range) + }); + return deletedLines; }; this.removeNewLine = function(row) { - var firstLine = this.getLine(row); - var secondLine = this.getLine(row+1); - - var range = new Range(row, firstLine.length, row+1, 0); - var line = firstLine + secondLine; - - this.$lines.splice(row, 2, line); - - var delta = { - action: "removeText", - range: range, - text: this.getNewLineCharacter() - }; - this._signal("change", { data: delta }); + if (row < this.getLength() - 1 && row >= 0) { + this.applyDelta({ + start: this.pos(row, this.getLine(row).length), + end: this.pos(row + 1, 0), + action: "remove", + lines: ["", ""] + }); + } }; this.replace = function(range, text) { - if (!(range instanceof Range)) + if (!range instanceof Range) range = Range.fromPoints(range.start, range.end); - if (text.length == 0 && range.isEmpty()) + if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); + var end; if (text) { - var end = this.insert(range.start, text); + end = this.insert(range.start, text); } else { end = range.start; } - + return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { - var delta = deltas[i]; - - var range = Range.fromPoints(delta.range.start, delta.range.end); - - if (delta.action == "insertLines") - this._removeLines(range.start.row, range.end.row - 1); - else if (delta.action == "insertText") - this.remove(range); - else if (delta.action == "removeLines") - this._insertLines(range.start.row, delta.lines); - else if (delta.action == "removeText") - this.insert(range.start, delta.text); + this.revertDelta(deltas[i]); } }; + this.applyDelta = function(delta, doNotValidate) { + var isInsert = delta.action == "insert"; + if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] + : !Range.comparePoints(delta.start, delta.end)) { + return; + } + + if (isInsert && delta.lines.length > 20000) + this.$splitAndapplyLargeDelta(delta, 20000); + applyDelta(this.$lines, delta, doNotValidate); + this._signal("change", delta); + }; + + this.$splitAndapplyLargeDelta = function(delta, MAX) { + var lines = delta.lines; + var l = lines.length; + var row = delta.start.row; + var column = delta.start.column; + var from = 0, to = 0; + do { + from = to; + to += MAX - 1; + var chunk = lines.slice(from, to); + if (to > l) { + delta.lines = chunk; + delta.start.row = row + from; + delta.start.column = column; + break; + } + chunk.push(""); + this.applyDelta({ + start: this.pos(row + from, column), + end: this.pos(row + to, column = 0), + action: delta.action, + lines: chunk + }, true); + } while(true); + }; + this.revertDelta = function(delta) { + this.applyDelta({ + start: this.clonePos(delta.start), + end: this.clonePos(delta.end), + action: (delta.action == "insert" ? "remove" : "insert"), + lines: delta.lines.slice() + }); + }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; @@ -1283,9 +1345,10 @@ exports.delayedCall = function(fcn, defaultTimeout) { }; }); -ace.define("ace/worker/mirror",["require","exports","module","ace/document","ace/lib/lang"], function(require, exports, module) { +ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; +var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); @@ -1297,7 +1360,19 @@ var Mirror = exports.Mirror = function(sender) { var _self = this; sender.on("change", function(e) { - doc.applyDeltas(e.data); + var data = e.data; + if (data[0].start) { + doc.applyDeltas(data); + } else { + for (var i = 0; i < data.length; i += 2) { + if (Array.isArray(data[i+1])) { + var d = {action: "insert", start: data[i], lines: data[i+1]}; + } else { + var d = {action: "remove", start: data[i], end: data[i+1]}; + } + doc.applyDelta(d, true); + } + } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); diff --git a/modules/backend/formwidgets/markdowneditor/assets/css/markdowneditor.css b/modules/backend/formwidgets/markdowneditor/assets/css/markdowneditor.css new file mode 100644 index 000000000..20173ef1f --- /dev/null +++ b/modules/backend/formwidgets/markdowneditor/assets/css/markdowneditor.css @@ -0,0 +1,194 @@ +.field-markdowneditor { + width: 100%; + position: relative; + border: 1px solid #e0e0e0; + background: #fff; + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + border-radius: 5px; +} +.field-markdowneditor textarea { + opacity: 0; + filter: alpha(opacity=0); +} +.field-markdowneditor .editor-toolbar { + border-top-right-radius: 5px; + border-top-left-radius: 5px; +} +.field-markdowneditor.editor-focus { + border: 1px solid #808c8d; +} +.field-markdowneditor.size-tiny .editor-write { + min-height: 50px; +} +.field-markdowneditor.size-tiny .editor-preview { + height: 50px; +} +.field-markdowneditor.size-small .editor-write { + min-height: 100px; +} +.field-markdowneditor.size-small .editor-preview { + height: 100px; +} +.field-markdowneditor.size-large .editor-write { + min-height: 200px; +} +.field-markdowneditor.size-large .editor-preview { + height: 200px; +} +.field-markdowneditor.size-huge .editor-write { + min-height: 250px; +} +.field-markdowneditor.size-huge .editor-preview { + height: 250px; +} +.field-markdowneditor.size-giant .editor-write { + min-height: 350px; +} +.field-markdowneditor.size-giant .editor-preview { + height: 350px; +} +.field-markdowneditor .editor-write { + position: relative; +} +.field-markdowneditor .editor-preview { + padding: 15px; + overflow: auto; +} +.field-markdowneditor .editor-preview-loader { + display: block; + width: 20px; + height: 20px; + position: absolute; + right: 10px; + top: 10px; + margin-top: 40px; + background-image: url('../../../../../system/assets/ui/images/loader-transparent.svg'); + background-size: 20px 20px; + background-position: 50% 50%; + -webkit-animation: spin 1s linear infinite; + animation: spin 1s linear infinite; +} +.field-markdowneditor.mode-tab .editor-preview { + display: none; +} +.field-markdowneditor.mode-tab.is-preview .editor-write { + display: none; +} +.field-markdowneditor.mode-tab.is-preview .editor-preview { + display: block; +} +.field-markdowneditor.mode-split .editor-preview { + float: right; + width: 50%; +} +.field-markdowneditor.mode-split .editor-write { + float: left; + width: 50%; +} +.field-markdowneditor.mode-split .editor-write .editor-code { + border-right: 2px solid #808C8D; +} +.field-markdowneditor.stretch, +.field-markdowneditor.stretch .editor-toolbar { + border-radius: 0 !important; +} +.field-markdowneditor.stretch .editor-toolbar { + height: auto; +} +.field-markdowneditor.stretch .editor-write, +.field-markdowneditor.stretch .editor-preview { + float: none; + height: auto; + position: absolute; + right: 0; + top: 0; + bottom: 0; + margin-top: 40px; +} +.field-markdowneditor.stretch .editor-write { + left: 0; + right: auto; +} +.field-markdowneditor.is-fullscreen { + z-index: 1020; + position: fixed !important; + top: 0; + left: 0; + width: 100%; +} +.field-markdowneditor.is-fullscreen, +.field-markdowneditor.is-fullscreen .editor-toolbar { + border-radius: 0 !important; + border: none; +} +.field-markdowneditor .editor-preview { + color: #515c5d; + font-family: "Helvetica", sans-serif; + line-height: 180%; +} +.field-markdowneditor .editor-preview h1, +.field-markdowneditor .editor-preview h2, +.field-markdowneditor .editor-preview h3, +.field-markdowneditor .editor-preview h4, +.field-markdowneditor .editor-preview h5, +.field-markdowneditor .editor-preview h6 { + margin-top: 20px; + font-weight: bold; +} +.field-markdowneditor .editor-preview h1:first-child, +.field-markdowneditor .editor-preview h2:first-child, +.field-markdowneditor .editor-preview h3:first-child, +.field-markdowneditor .editor-preview h4:first-child, +.field-markdowneditor .editor-preview h5:first-child, +.field-markdowneditor .editor-preview h6:first-child { + margin-top: 0; +} +.field-markdowneditor .editor-preview *:last-child { + margin-bottom: 0; +} +.field-markdowneditor .editor-preview h1 { + font-size: 30px; +} +.field-markdowneditor .editor-preview h2 { + font-size: 26px; +} +.field-markdowneditor .editor-preview h3 { + font-size: 24px; +} +.field-markdowneditor .editor-preview h4 { + font-size: 22px; +} +.field-markdowneditor .editor-preview h5 { + font-size: 20px; +} +.field-markdowneditor .editor-preview h6 { + font-size: 18px; +} +.field-markdowneditor .editor-preview p, +.field-markdowneditor .editor-preview ol, +.field-markdowneditor .editor-preview ul { + font-size: 14px; +} +.field-markdowneditor .editor-preview h1, +.field-markdowneditor .editor-preview h2, +.field-markdowneditor .editor-preview h3, +.field-markdowneditor .editor-preview h4, +.field-markdowneditor .editor-preview h5, +.field-markdowneditor .editor-preview h6, +.field-markdowneditor .editor-preview p, +.field-markdowneditor .editor-preview ol, +.field-markdowneditor .editor-preview ul { + margin-bottom: 15px; +} +.field-markdowneditor .editor-preview pre.prettyprint { + border-width: 0; + padding: 13px 16px; + border-radius: 3px; + line-height: 130%; +} +.field-markdowneditor .editor-preview img { + display: block; + max-width: 100%; + height: auto; +} diff --git a/modules/backend/formwidgets/markdowneditor/assets/js/markdowneditor.js b/modules/backend/formwidgets/markdowneditor/assets/js/markdowneditor.js new file mode 100644 index 000000000..6f2fc4e3e --- /dev/null +++ b/modules/backend/formwidgets/markdowneditor/assets/js/markdowneditor.js @@ -0,0 +1,746 @@ ++function ($) { "use strict"; + var Base = $.oc.foundation.base, + BaseProto = Base.prototype + + var MarkdownEditor = function (element, options) { + this.$el = $(element) + this.options = options || {} + this.$textarea = $('textarea:first', this.$el) + this.$toolbar = $('.editor-toolbar:first', this.$el) + this.$write = $('.editor-write:first', this.$el) + this.$preview = $('.editor-preview:first', this.$el) + this.$code = null + this.editor = null + this.$form = null + this.$buttons = null + this.$fixedButtons = null + this.$indicator = null + this.editorPadding = 15 + + $.oc.foundation.controlUtils.markDisposable(element) + Base.call(this) + this.init() + } + + MarkdownEditor.prototype = Object.create(BaseProto) + MarkdownEditor.prototype.constructor = MarkdownEditor + + MarkdownEditor.prototype.init = function() { + this.$el.one('dispose-control', this.proxy(this.dispose)) + + /* + * Control must have an identifier + */ + if (!this.$el.attr('id')) { + this.$el.attr('id', 'element-' + Math.random().toString(36).substring(7)) + } + + this.$form = this.$el.closest('form') + + this.createCodeContainer() + this.createToolbar() + this.createIndicator() + this.setViewMode(this.options.viewMode) + + this.$toolbar.on('click', '.btn, .md-dropdown-button', this.proxy(this.onClickToolbarButton)) + this.$form.on('oc.beforeRequest', this.proxy(this.onBeforeRequest)) + this.editor.on('change', this.proxy(this.onEditorChange)) + this.editor.getSession().on('changeScrollTop', this.proxy(this.onEditorScrollTop)) + + $('[data-control="tooltip"]', this.$toolbar).tooltip() + $('[data-toggle="dropdown"]', this.$toolbar).dropdown() + } + + MarkdownEditor.prototype.dispose = function() { + this.$el.off('dispose-control', this.proxy(this.dispose)) + + this.$toolbar.off('click', '.btn, .md-dropdown-button', this.proxy(this.onClickToolbarButton)) + this.$form.off('oc.beforeRequest', this.proxy(this.onBeforeRequest)) + this.editor.off('change', this.proxy(this.onEditorChange)) + $(window).off('resize', this.proxy(this.updateFullscreen)) + + this.$el.removeData('oc.markdownEditor') + + this.$el = null + this.$textarea = null + this.$toolbar = null + this.$write = null + this.$preview = null + this.$code = null + this.editor = null + this.$form = null + this.$buttons = null + this.$fixedButtons = null + this.$indicator = null + + this.isSplitMode = null + this.isPreview = null + this.isFullscreen = null + this.dataTrackInputTimer = null + + this.options = null + + BaseProto.dispose.call(this) + } + + MarkdownEditor.prototype.createToolbar = function() { + var self = this, + $button, + $buttons = $('
      '), + $fixedButtons = $('
      ') + + $.each($.oc.markdownEditorButtons, function(code, button) { + $button = $(' - diff --git a/modules/system/assets/ui/docs/input-monitor.md b/modules/system/assets/ui/docs/input-monitor.md index a2c019b26..40ad9f8c3 100644 --- a/modules/system/assets/ui/docs/input-monitor.md +++ b/modules/system/assets/ui/docs/input-monitor.md @@ -1,6 +1,8 @@ # Input Monitoring -Scripts that manage user input events. +This will monitor the user input for unsaved changes and show a confirmation box if the user attempts to leave the page. -# Example +### Example + +TBA diff --git a/modules/system/assets/ui/docs/input-trigger.md b/modules/system/assets/ui/docs/input-trigger.md index f6b3e47d0..1b66f9142 100644 --- a/modules/system/assets/ui/docs/input-trigger.md +++ b/modules/system/assets/ui/docs/input-trigger.md @@ -2,7 +2,42 @@ The API allows to change elements' visibility or status (enabled/disabled) basing on other elements' statuses. Example: enable a button if any checkbox inside another element is checked. -### Supported data attributes: +## Example + +### Checked condition + + + + +### Value condition + +

      + +

      + +
      + +
      + Passphrase is valid! +
      +
      + + +## Supported data attributes: - data-trigger-action, values: show, hide, enable, disable, empty - data-trigger: a CSS selector for elements that trigger the action (checkboxes) @@ -38,21 +73,3 @@ Multie value conditions are supported: trigger: '#cblist input[type=checkbox]', triggerAction: 'enable' }) - -# Example - - - - - - diff --git a/modules/system/assets/ui/docs/inspector.md b/modules/system/assets/ui/docs/inspector.md index 1813d7b94..4f4ff4dcb 100644 --- a/modules/system/assets/ui/docs/inspector.md +++ b/modules/system/assets/ui/docs/inspector.md @@ -1,60 +1,11 @@ # Inspector control +### Inspector + Manages properties of inspectable controls. -### Supported data attributes: +### Basic usage -- data-inspectable - makes a control inspectable. -- data-inspector-title - title for the inspector popup -- data-inspector-description - optional description for the inspector popup -- data-inspector-class - PHP class name of the inspectable object. Required for drop-down fields with dynamic options. -- data-inspector-css-class - CSS class name to apply to the Inspector container element. -- data-inspector-container - specifies a CSS selector for the inspector container. The default container is the document body. The container element should be relative positioned. The 'self' container value allows to inject the inspector to the inspectable element. -- data-inspector-offset - offset in pixels to add to the calculated position, to make the position more "random" -- data-inspector-placement - top | bottom | left | right. The placement could automatically be changed if the popover doesn't fit into the desired position. -- data-inspector-fallback-placement - The placement to use if the default placement and all other possible placements do not work. The default value is "bottom". -- data-inspector-config - Configuration of the inspector fields as an array in the JSON format. - Each element in the array is an object with the following properties: - - property - - title - - group (optional) - - type (currently supported types are: string, checkbox, dropdown) - - description (optional) - - validationPattern (regex pattern for for validating the value, supported by the text editor) - - validationMessage (a message to display if the validation fails) - - placeholder - placholder text, for text and dropdown properties - - default - default value - - depends - a list of properties the property depend on, for dropdown lists - - options - an option list for dropdown lists, optional. If not provided the options are loaded with AJAX. - - showExternalParam - specifies the visibility of the external parameter feature for the property. Default: true. - Example of the configuration string (a single property): - [{"property":"max-width","title":"Max width","type":"string"}] - -The Inspector requires the inspectable element to contain a hidden input element with the attribute "data-inspector-values". -The inspector uses this field to read and write field values. The field value is a JSON string, an object with keys matching property -names and values matching property values. - -Any HTML element that wraps the inspectable element can have the data-inspector-external-parameters property that enables the external -parameters support. External parameters saved with the special syntax {{ paramName }}. The external parameter feature can be toggled -on per-property basis with the showExternalParam option, visible by default. - -### Supported events: - -- change - the event is triggered on the inspectable element when it's properties are updated. -- showing.oc.inspector - triggered before the Inspector is displayed. Allows to cancel the action with e.preventDefault() -- hiding.oc.inspector - triggered before the Inspector is hidden. Allows to cancel the action with e.preventDefault() -- hidden.oc.inspector - triggered after the Inspector is hidden. - -## Dependencies - -- Popover -- Tooltip -- Select -- Checkbox - -# Example - -
      Basic usage
      @@ -26,7 +28,59 @@ Toolbar
      -
      +
      +
      + +

      Editor toolbar

      + +
      \ No newline at end of file diff --git a/modules/backend/assets/images/bitmap-icons.png b/modules/system/assets/ui/images/bitmap-icons.png similarity index 100% rename from modules/backend/assets/images/bitmap-icons.png rename to modules/system/assets/ui/images/bitmap-icons.png diff --git a/modules/system/assets/ui/js/dropdown.js b/modules/system/assets/ui/js/dropdown.js index 42cf556b5..812c88360 100644 --- a/modules/system/assets/ui/js/dropdown.js +++ b/modules/system/assets/ui/js/dropdown.js @@ -94,7 +94,7 @@ } }) - $(document).on('hidden.bs.dropdown', '.dropdown', function(){ + $(document).on('hidden.bs.dropdown', '.dropdown', function() { var dropdown = $(this).data('oc.dropdown') if (dropdown !== undefined) { dropdown.css('display', 'none') @@ -104,4 +104,34 @@ $(document.body).removeClass('dropdown-open'); }) + /* + * Fixed positioned dropdowns + * - Useful for dropdowns inside hidden overflow containers + */ + + var $dropdown, $container, $target + + function fixDropdownPosition() { + var position = $container.offset() + + $dropdown.css({ + position: 'fixed', + top: position.top - 1 - $(window).scrollTop() + $target.outerHeight(), + left: position.left + }) + } + + $(document).on('shown.bs.dropdown', '.dropdown.dropdown-fixed', function(event, eventData) { + $container = $(this) + $dropdown = $('.dropdown-menu', $container) + $target = $(eventData.relatedTarget) + fixDropdownPosition() + + $(window).on('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition) + }) + + $(document).on('hidden.bs.dropdown', '.dropdown.dropdown-fixed', function() { + $(window).off('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition) + }) + }(window.jQuery); \ No newline at end of file diff --git a/modules/system/assets/ui/js/tooltip.js b/modules/system/assets/ui/js/tooltip.js index d31c2cbbf..903110b25 100644 --- a/modules/system/assets/ui/js/tooltip.js +++ b/modules/system/assets/ui/js/tooltip.js @@ -20,7 +20,7 @@ (function($){ $(document).render(function(){ - $('[data-toggle="tooltip"]').tooltip() + $('[data-control="tooltip"], [data-toggle="tooltip"]').tooltip() }) })(jQuery); \ No newline at end of file diff --git a/modules/system/assets/ui/less/button.less b/modules/system/assets/ui/less/button.less index b5d3b242e..5304c79ad 100644 --- a/modules/system/assets/ui/less/button.less +++ b/modules/system/assets/ui/less/button.less @@ -8,8 +8,6 @@ // Buttons // -------------------------------------------------- -@import "button.mixins.less"; -@import "button.variables.less"; @import "button.base.less"; @import "button.groups.less"; @@ -102,7 +100,7 @@ } &:hover:before { - color: @color-link; + color: @link-color; } &.danger:hover:before { @@ -140,7 +138,7 @@ color: @btn-default-color; &:hover { - color: @color-link; + color: @link-color; text-decoration: none; } } diff --git a/modules/system/assets/ui/less/button.variables.less b/modules/system/assets/ui/less/button.variables.less index 1b703e589..1efc220f2 100644 --- a/modules/system/assets/ui/less/button.variables.less +++ b/modules/system/assets/ui/less/button.variables.less @@ -1,8 +1,8 @@ @btn-font-weight: normal; -@btn-default-color: #333; -@btn-default-bg: #fff; -@btn-default-border: #ccc; +@btn-default-color: #666666; +@btn-default-bg: #e3e3e3; +@btn-default-border: #e3e3e3; @btn-primary-color: #fff; @btn-primary-bg: @brand-primary; diff --git a/modules/system/assets/ui/less/chart.less b/modules/system/assets/ui/less/chart.less index ac8ec6273..a8c2f7896 100644 --- a/modules/system/assets/ui/less/chart.less +++ b/modules/system/assets/ui/less/chart.less @@ -308,7 +308,7 @@ ul.status-list { a { color: @color-status-list-text; &:hover { - color: @color-link; + color: @link-color; text-decoration: none; } } diff --git a/modules/system/assets/ui/less/dropdown.less b/modules/system/assets/ui/less/dropdown.less index ba34cb147..67c88ebe5 100644 --- a/modules/system/assets/ui/less/dropdown.less +++ b/modules/system/assets/ui/less/dropdown.less @@ -11,7 +11,6 @@ // -------------------------------------------------- @import "dropdown.base.less"; -@import "dropdown.variables.less"; // // Dropdown diff --git a/modules/system/assets/ui/less/dropdown.variables.less b/modules/system/assets/ui/less/dropdown.variables.less index 0e6ff79a8..5028fa13a 100644 --- a/modules/system/assets/ui/less/dropdown.variables.less +++ b/modules/system/assets/ui/less/dropdown.variables.less @@ -1,9 +1,9 @@ @dropdown-bg: #fff; -@dropdown-border: rgba(0,0,0,.15); +@dropdown-border: #949ea6; @dropdown-fallback-border: #ccc; @dropdown-divider-bg: #e5e5e5; -@dropdown-link-color: @gray-dark; +@dropdown-link-color: #39454a; @dropdown-link-hover-color: darken(@gray-dark, 5%); @dropdown-link-hover-bg: #f5f5f5; @@ -14,10 +14,6 @@ @dropdown-header-color: @gray-light; -// Note: Deprecated @dropdown-caret-color as of v3.1.0 -@dropdown-caret-color: #000; - - @color-dropdown-title-border: #c9c9c9; @color-dropdown-title-text: @dropdown-link-color; @color-dropdown-hover-color: #2f99da; diff --git a/modules/system/assets/ui/less/form.less b/modules/system/assets/ui/less/form.less index 9a0626261..29f592bcc 100644 --- a/modules/system/assets/ui/less/form.less +++ b/modules/system/assets/ui/less/form.less @@ -4,16 +4,11 @@ @import "global.less"; @import "icon.less"; -@import "site.variables.less"; -@import "site.mixins.less"; - // // Forms // -------------------------------------------------- -@import "form.variables.less"; -@import "form.mixins.less"; @import "form.base.less"; @import "form.groups.less"; @@ -41,7 +36,6 @@ } } - // // Nice forms // @@ -62,7 +56,7 @@ background-repeat: no-repeat; background-position: right -2px; padding-right: 30px !important; - background-image: url('../images/bitmap-icons.png'); + background-image: url('@{image-path}/bitmap-icons.png'); &.plus { background-position: right -124px; } &.search { background-position: right -84px; } @@ -158,7 +152,7 @@ color: @color-input-sidebar-control; &:hover, &:focus { text-decoration: none; - color: @color-link; + color: @link-color; outline: none; } } diff --git a/modules/system/assets/ui/less/form.variables.less b/modules/system/assets/ui/less/form.variables.less index 16e473f18..126950e75 100644 --- a/modules/system/assets/ui/less/form.variables.less +++ b/modules/system/assets/ui/less/form.variables.less @@ -11,7 +11,7 @@ @input-border-focus: #808c8d; @input-border-radius: 3px; -@input-color-placeholder: @gray-light; +@input-color-placeholder: #cccccc; @input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); @input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); diff --git a/modules/system/assets/ui/less/global.less b/modules/system/assets/ui/less/global.less index c6c24a3ee..9119e733a 100644 --- a/modules/system/assets/ui/less/global.less +++ b/modules/system/assets/ui/less/global.less @@ -6,3 +6,20 @@ @import "global.mixins.css3.less"; @import "global.mixins.triangle.less"; @import "global.mixins.utility.less"; + +@import "site.variables.less"; +@import "site.mixins.less"; + +@import "button.mixins.less"; +@import "button.variables.less"; + +@import "icon.mixins.less"; +@import "icon.variables.less"; + +@import "form.mixins.less"; +@import "form.variables.less"; + +@import "list.mixins.less"; +@import "list.variables.less"; + +@import "dropdown.variables.less"; \ No newline at end of file diff --git a/modules/system/assets/ui/less/global.variables.less b/modules/system/assets/ui/less/global.variables.less index bd9a1d492..65e39afc4 100644 --- a/modules/system/assets/ui/less/global.variables.less +++ b/modules/system/assets/ui/less/global.variables.less @@ -7,19 +7,21 @@ @text-color: @gray-dark; -// Dupe -@link-color: @brand-primary; -@color-link: #0181b9; +// Old +// @link-color: darken(@brand-primary, 15%); +// @link-hover-color: darken(@link-color, 30%); + +@link-color: #0181b9; +@link-hover-color: darken(@link-color, 30%); -@link-hover-color: darken(@link-color, 15%); @link-hover-decoration: underline; // // Paths // -------------------------------------------------- -@font-path: "../font"; -@image-path: "../images"; +@font-path: "font"; +@image-path: "images"; // // Breakpoints @@ -127,7 +129,7 @@ @gray-light: lighten(#000, 60%); // #999 @gray-lighter: lighten(#000, 93.5%); // #eee -@brand-primary: #428bca; +@brand-primary: #5fb6f5; @brand-success: #5cb85c; @brand-info: #5bc0de; @brand-warning: #f0ad4e; @@ -167,7 +169,7 @@ @line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome @line-height-small: 1.5; -@border-radius-base: 4px; +@border-radius-base: 2px; @border-radius-large: 6px; @border-radius-small: 3px; diff --git a/modules/system/assets/ui/less/icon.less b/modules/system/assets/ui/less/icon.less index b11045826..7c52403f1 100644 --- a/modules/system/assets/ui/less/icon.less +++ b/modules/system/assets/ui/less/icon.less @@ -2,8 +2,6 @@ // Icon // -------------------------------------------------- -@import "icon.variables.less"; -@import "icon.mixins.less"; @import "icon.icons.less"; @import "icon.close.less"; diff --git a/modules/system/assets/ui/less/list.base.less b/modules/system/assets/ui/less/list.base.less index 79b4fce09..54b2f3ef4 100644 --- a/modules/system/assets/ui/less/list.base.less +++ b/modules/system/assets/ui/less/list.base.less @@ -2,7 +2,6 @@ // Tables // -------------------------------------------------- - table { max-width: 100%; background-color: @table-bg; @@ -11,7 +10,6 @@ th { text-align: left; } - // Baseline styles .table { diff --git a/modules/system/assets/ui/less/list.less b/modules/system/assets/ui/less/list.less index 05fb8991c..a46e2864d 100644 --- a/modules/system/assets/ui/less/list.less +++ b/modules/system/assets/ui/less/list.less @@ -9,9 +9,7 @@ // Lists // -------------------------------------------------- -@import "list.variables.less"; @import "list.rowlink.less"; -@import "list.mixins.less"; @import "list.base.less"; // @@ -278,16 +276,24 @@ table.table.data { } } - // Tree levels 1 - 25 - .makeTreeLevel(@count) when (@count < 26) { + // Tree levels 1 - 10 + .makeTreeLevel(@count) { tr.list-tree-level-@{count} { a.list-expand-collapse { left: 20px + (10 * @count); } td.list-cell-index-1 { padding-left: 25px + (10 * @count); } } - .makeTreeLevel(@count + 1); } - .makeTreeLevel(1); + .makeTreeLevel(1); + .makeTreeLevel(2); + .makeTreeLevel(3); + .makeTreeLevel(4); + .makeTreeLevel(5); + .makeTreeLevel(6); + .makeTreeLevel(7); + .makeTreeLevel(8); + .makeTreeLevel(9); + .makeTreeLevel(10); } // @@ -413,7 +419,7 @@ table.table.data { @media only screen and (max-width: 960px) { - .control-list { + .control-list:not(.list-unresponsive) { table, thead, tbody, th, td, tr { display: block; } diff --git a/modules/system/assets/ui/less/list.mixins.less b/modules/system/assets/ui/less/list.mixins.less index 835ba70d8..5bac011b0 100644 --- a/modules/system/assets/ui/less/list.mixins.less +++ b/modules/system/assets/ui/less/list.mixins.less @@ -1,27 +1,27 @@ // Tables // ------------------------- .table-row-variant(@state; @background) { - // Exact selectors below required to override `.table-striped` and prevent - // inheritance to nested tables. - .table > thead > tr, - .table > tbody > tr, - .table > tfoot > tr { - > td.@{state}, - > th.@{state}, - &.@{state} > td, - &.@{state} > th { - background-color: @background; + // Exact selectors below required to override `.table-striped` and prevent + // inheritance to nested tables. + .table > thead > tr, + .table > tbody > tr, + .table > tfoot > tr { + > td.@{state}, + > th.@{state}, + &.@{state} > td, + &.@{state} > th { + background-color: @background; + } } - } - // Hover states for `.table-hover` - // Note: this is not available for cells or rows within `thead` or `tfoot`. - .table-hover > tbody > tr { - > td.@{state}:hover, - > th.@{state}:hover, - &.@{state}:hover > td, - &.@{state}:hover > th { - background-color: darken(@background, 5%); + // Hover states for `.table-hover` + // Note: this is not available for cells or rows within `thead` or `tfoot`. + .table-hover > tbody > tr { + > td.@{state}:hover, + > th.@{state}:hover, + &.@{state}:hover > td, + &.@{state}:hover > th { + background-color: darken(@background, 5%); + } } - } } diff --git a/modules/system/assets/ui/less/select.mixins.less b/modules/system/assets/ui/less/select.mixins.less index 1e93ea5f9..c635d6187 100644 --- a/modules/system/assets/ui/less/select.mixins.less +++ b/modules/system/assets/ui/less/select.mixins.less @@ -7,7 +7,6 @@ border: 1px solid @input-border; border-radius: @input-border-radius; color: @input-color; - font-family: @font-family-base; font-size: @input-font-size; } diff --git a/modules/system/assets/ui/less/site.less b/modules/system/assets/ui/less/site.less index 03dae42ea..e989164d9 100644 --- a/modules/system/assets/ui/less/site.less +++ b/modules/system/assets/ui/less/site.less @@ -8,8 +8,6 @@ // Site structure // -------------------------------------------------- -@import "site.mixins.less"; -@import "site.variables.less"; @import "site.normalize.less"; @import "site.reset.less"; @import "site.print.less"; diff --git a/modules/system/assets/ui/less/toolbar.less b/modules/system/assets/ui/less/toolbar.less index 07b940c83..a2a886d5f 100644 --- a/modules/system/assets/ui/less/toolbar.less +++ b/modules/system/assets/ui/less/toolbar.less @@ -10,7 +10,12 @@ // Toolbars // -------------------------------------------------- -@color-scroll-indicator: #bbbbbb; +@color-scroll-indicator: #bbbbbb; +@color-toolbar-editor-bg: #dddddd; +@color-toolbar-editor-btn-color: #404040; +@color-toolbar-editor-btn-bg-hover: #999999; +@color-toolbar-editor-btn-bg-active: #404040; +@color-toolbar-editor-btn-color-hover: #ffffff; // // Toolbars @@ -108,4 +113,137 @@ .control-toolbar { padding: 20px 0 20px 20px; } -} \ No newline at end of file +} + +// +// Editor toolbar +// -------------------------------------------------- + +.control-toolbar.editor-toolbar { + padding: 0; + background: @color-toolbar-editor-bg; + .border-bottom-radius(0); + + .toolbar-item { + .btn, .btn-group, .dropdown { + margin: 0; + padding: 0; + } + + .btn { + text-align: center; + height: 40px; + width: 40px; + line-height: 40px; + zoom: 1; + color: @color-toolbar-editor-btn-color; + background: transparent; + .user-select(none); + + &:before { + font-size: 14px !important; + } + + &:hover { + outline: none; + background-color: @color-toolbar-editor-btn-bg-hover; + color: @color-toolbar-editor-btn-color-hover; + } + &.active, + &:active { + outline: none; + background-color: @color-toolbar-editor-btn-bg-active; + color: @color-toolbar-editor-btn-color-hover; + } + &.disabled, + &[disabled] { + opacity: .3; + } + } + + .dropdown.open { + .btn { + background-color: @color-toolbar-editor-btn-bg-active; + color: @color-toolbar-editor-btn-color-hover; + } + } + + .btn[class^="oc-icon-"], + .btn[class*=" oc-icon-"] { + &:before { + margin: 0; + } + } + + .btn.oc-autumn-button { + color: #c03f31; + + &:hover { + color: white !important; + } + } + } +} + +// +// Toolbar icons +// -------------------------------------------------- + +@font-face { + font-family: 'ToolbarFont'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggi/NUAAAC8AAAAYGNtYXAaVcx2AAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zm8dIFkAAAFwAAATSGhlYWQACVb9AAAUuAAAADZoaGVhA+ECBQAAFPAAAAAkaG10eEEBA94AABUUAAAAkGxvY2FVlFE8AAAVpAAAAEptYXhwAC8AkgAAFfAAAAAgbmFtZRHEcG0AABYQAAABZnBvc3QAAwAAAAAXeAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADmHwHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIOYf//3//wAAAAAAIOYA//3//wAB/+MaBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAwAAACUCAAGSAAQACQANAAA3EQURBQEFEQURATUXBwACAP4AAdv+SgG2/tySkiUBbgH+lAEBSgH+3AEBJv7/3G9sAAAGAAAASQIAAW4ABAAJAA4AEwAYAB0AABMhFSE1FSEVITUVIRUhNSczFSM1FTMVIzUVMxUjNZIBbv6SAW7+kgFu/pKSSUlJSUlJAW5JSW5JSW5JSdxJSW5JSW5JSQAAAAACAAAAJQH3AZIAFgAuAAAlLgMnBzIuAic+AyMXNh4CByUnMg4CBx4DIxcnHgMXNi4CBwH3Dik/XUABAR04Vjg+WDUYAQFNeEcZEv7MAQENHDMlHzIfEQEBASZUTDYHCSBIZj4lGCQaEARqFi5HLzJFKhJqDC1RZSzVPQoWIxkbJBQID0wCCQ4VDxo4KA8PAAACAG4AJQGSAZIABAAzAAA3IQchJzceAzMyPgI3PgMnNyMXDgMHDgMjIi4CJy4DNycjBx4DF24BJQH+3QFABRIUGg0QGBUQCAYKBgQBAUABAQEEBAQCCAgKBQYJCQcEAgUCAwEBPwEBAwcJCEkkJD8HCgYEBAYKBwcRFRkPtcMGCQkHAwMFAwEBAwUDAwcJCQbDtQ8ZFREHAAUAAP//AgABtwAGAA4AFgBHAF8AAAEzFTMVIzUfAQc1IzUzNS8BNxUzFSMVFx4DFRwBDgEHDgMHMh4CFx4DHwEjJzwBJjQjLgMrARUjNTMyHgIXBzMyPgI3PgM1NC4CJy4DKwEVAUkjS24mkZFvb96RkW9vDAMFAwECAwICBQUGBAECAgIBAQICAgEbIBMBAQIEBQUCCh0qCAwKCQM3DgMFBQMCAQIBAQEBAgECAwQGAw4BtpYgtv9cXEolSUhcXEklSlUDCAoNBwQJBwcCAwUDAgEBAQIBAQMEBANCLgEBAQIGBwYCSLYBAwUDRAECAgECBAQGAwQFBQQBAgIBATIAAAAAAwBtAAABkgGTAAMADAARAAAlIzcXBzM3MxczAyMDFyEVITUBI0YjI7ZKF2MXSmVbZQEBJP7c5nh4eUlJASb+2iRJSQAKAAAAJQIAAZIABAAJAA4AEwAYAB0AIgAnACwAMQAANxEFEQU3FzUHFTU3NScVJwcVFzUVJxU3NRUHFRc1NxUXNQclBxUXNRUnFTc1FQcVFzUAAgD+ALeSkpKSJW1tbW1tbSWSkgEkbW1tbW1tJQFuAf6UASUBSgFIbQFIAUq4AUgBSm8BSgFIbQFIAUrbSAFKAQEBSAFKbwFKAUhtAUgBSgAAAAIACQAlAgABkgAWAC4AACUOAxU1DgMHJj4CFzU0HgIXBT4DNxU1FD4CNy4DNRUmDgIXAgA5VTkcQVxAKA8RGEh3Thc2Vz/+PAY3S1UlECAxICYyHQw9Z0chCt8wRi8VAWsFDxsjGS1kUiwLaQETKUYxYBAUDwgDTRABCRMlGhoiFwkBPhAQJzkZAAAAAgBJAEkBtwFuAEcAjwAAAQ4DFRQeAhceAxc+Azc+AzU0LgInLgMHJg4CBwYiBiYHNAYmIicwLgE0NTQ+Ajc+Azc1DgMHJw4DFRQeAhceAxc+Azc+AzU0LgInLgMHJg4CBwYiBiYVJgYmIjUiJjQmNTQ+Ajc+Azc1DgMHATkJDQkEAwYKBgcOEBAJCA4NDAUGCAUDAwQHBQUKCgwGBQoICAMBAgIBAQEBAQEBAQMGCgYGDxITCxMhHBYJzQkNCQQDBwkHBg4QEQgIDg0MBgUIBQMCBQcFBAoLDAYFCQkIAwECAgEBAQEBAQEBAwcJBgcPERQLEyEcFwkBIgwYHBsQCxgUEgcICwgDAQECBggGBQ0MDwYIDA0KBgUIBAQBAQICBQECAgEBAQECAQQCBQEKEhQRCggQDAwDFwgQFBQNAQwYHBsQCxgUEgcICwgDAQECBggGBQ0MDwYIDA0KBgUIBAQBAQICBQECAgEBAQECAQQCBQEKEhQRCggQDAwDFwgQFBQNAAT//wBJAgABbgAEAAkADgASAAATIRUhNRchFSE1FSEVITUHNQcXAAIA/gC3AUn+twFJ/rclk5MBbklJbklJbklJSbdcWwAAAAUAAABJAgABbgAEAAkADgAaAG0AABMhFSE1FSEVITUVIRUhNSczNSM1IwcVNxUjFRc+Azc+Azc0PgE0NTQuAicuAyMiBioBByIOAiMVPgM3Mj4BMjM6AR4BFx4CFBUcAQYUBw4DBw4DDwEVMzUjPgM3MZIBbv6SAW7+kgFu/pKNRBgUFhYYIAUHBQMBAgICAQEBAQEDBAICBgcHBQEEAwQCAgMEBAICBAQDAgIDAwMCAgMDAwEBAgEBAQEBAgICAQQGCQULRC0BAwQEAgFuSUluSUluSUlrFF0GFAZJFJEFBwYEAQIDBAMBAgMDAwIDBwUFAgIEAgEBAQEBAhUBAgIBAQEBAQIBAQIDBAIBAgMCAQICAwMCAQUHCQYNExQBBAMFAgADAAAASQIAAW4ALAAxAGwAACUiLgInNTMeAzMyPgI1NC4CIyIOAgcjNT4DMzIeAhUUDgIjJzMVIzUnIg4CByMVDgMVFB4CFxUzHgMzMj4CNzMVDgMjIi4CNTQ+AjMyHgIXFSMuAyMBbgoUEhEIHgUKCwsGEyEZDg4ZIRMGCwsKBR4IERIUCh41KBcXKDUet5KSJQYLCwoFHgQHBQICBQcEHgUKCwsGBgsLCgUeCBESFAoeNSgXFyg1HgoUEhEIHgUKCwsGSQMGBwU0AgQDAQ0XHhESHhcNAQMEAjQFBwYDFyg1Hx41KBe3SUkvAQMEAhgFCw0OBwcNDQsGFwIEAwEBAwQCNAUHBgMXKDUeHzUoFwMGBwU0AgQDAQAAAAEAAAC3AgABAAAEAAATIRUhNQACAP4AAQBJSQABAJIASQGSAZIADAAAAQ8CFzcHNxc3DwEXAQcpQQvBC0ApQAvBC0EBWdYBOAE6AdgBOgE4AQAAAAQAAABJAgABbgAEAAkADgASAAATIRUhNRchFSE1FSEVITUHNRcHAAIA/gC3AUn+twFJ/re3k5MBbklJbklJbklJSbdcWwAAAAMAAAAlAgABkgAEAAkAEgAANxEFEQUBBREFEQc/ARcVJTU3FwACAP4AAdv+SgG2tiQwPv6Sbm4lAW4B/pQBAUoB/twBASa4AV5eSgFIk5MABAAlAAAB2wG3AAMAGgAeADUAAAEVJzMHHgIGDwEOAS4BJy4BNDY/AT4BHgEXARcnFTceATI2PwE+AS4BJy4CBg8BDgEeARcB29vbKgMDAQICcwIGBgYCAwMBAnQCBQYGAv5029sqAwYGBQJzAgEBAgMCBgYGAnICAgEDAgG33NwrAgYGBgJzAgEBAgMDBQYGAnMCAQECA/51AdvaKgMDAQJzAgUGBgMCAwECAnMCBQYGAgAABAAA/9sCAAHbAAMAGgAeADUAACU1Fwc3LgI2PwE+AR4BFx4BFAYPAQ4BIiYnBycXNQcuASIGDwEOAR4BFx4CNj8BPgEuAScBJdvbKgMDAQICcwIGBgYCAwMBAnQCBQYGAnTb2yoDBgYFAnMCAQECAwIGBgYCcgICAQMC/9zbASwCBgYGAnICAgEDAgMGBgUCcwIBAwN1AdzbKgMDAQJzAgUGBgMCAwECAnICBgYGAgABAG4AJQFuAZIAEgAAJREjESM1Ii4CNTQ+AjsBESMBSSRKFigeEREeKBaTJSUBSf63khEeKBcWKB4R/pMAAAAAAwAlAAEB3AG2AAoAVwB4AAAlMwcnMzUjNxcjFQcOAwcOAyMiLgInLgM1ND4CNz4DOwE1NC4CJy4DIyIOAgcOAwc1PgM3PgIyMzIeAhceAx0BIzU1IyIOAgcOAxUUHgIXHgMzMj4CNz4DPQEBkkpcXEpKXFxK6wIGBgcEAwgICQUIDw4LBQUHBQIDBQkGBQ8SFAwlAQMDAgMFBwgFBAoJCQQFCQkJBQQJCQkEBQkKCQUNFRENBQUIBQI0FQgMCggDAwUDAQECAwICBQUHAwUJCQcCAwUCApKRkZORkZMHBAYFBQECAwIBAgUHBQULDQ8JCRANCwQFBgUCCQMGBQQCAgICAQEBAgEBAwQFAy8CAwMCAQEBAQIFCAUGDhIXDXgYSwECAwICBgYIBQQGBgUCAgMCAQIEBgQECgsOBwQAAAAEACUASgHbAW4AAwAMAC0AegAANyM3FwczNzMXMwMjAyUVFA4CBw4DIyIuAicuAzU0PgI3PgM7ATcuAyMqAQ4BBw4DBxU+Azc+AzMyHgIXHgMdASMiDgIHDgMVFB4CFx4DMzI+Ajc+AzcVMzU0LgInrjUbGok4EUsSOE1ETQF/AQMFAwMHCQoFBAYGBQIDAwIBAgMEAwMJCw0IFiIFDhIWDQYKCgoFBAoJCgQFCgoJBQUJCgoFBAkHBgIDAwMBJg0WEw8GBgkGAwIFCAUFDA4QCQUJCQgEBAcHBgI3AgUIBsV1dXZHRwEf/uFlBAcOCwsEBAYEAwICAwICBQYHAwUJBwUCAgMCAWIFCAYCAQEBAQMCBAIwAwUEAwIBAgEBAQIDAQIEBgYDCQMEBwQFCw4QCgkPDgsFBQcFAgEBAwICBQUHAxh7DhcTDwUAAAIASQBJAbcBkwAEAIEAABMhFSE1Fx4DFx4DFRQOAgcOAyMiLgInLgMnFR4DFx4DMzI+Ajc+AzU0LgInLgMvAS4DJy4DNTQ+Ajc+AzMyHgIXHgMXNS4DJy4DIyIOAgcOAxUUHgIXHgMfAUkBbv6SvwQIBgYCAgMDAQIDBQQDCAkLBgYNDAwGBg0NDQYGCwwNBgYNDAwHDxoXEggHCwgDAgUHBAUMDxIKHAcNCQcDAgMDAQIDBQMDCAkKBgYLCgsGBQsLCgYGCwwLBgYLDAsGDBcUEQcICwcDAgQHBAUMERUNIAEAJSUxAgMFBAMDBgYHAwUICAYDAgQDAQECAwMCBQcIBEEDBAUDAgECAQEDBgkGBQ8SFQwJEA8NBgYKCggDCwIFBQQDAgUFBgMFBwcFAwIDAwEBAgMCAgQGBgM9AgUDBAEBAgEBAwcJBgYPERMLCA8ODAQFCgoJBQsAAAQAAABJAgABbgAEAAkADgATAAA/ARcHJxc3FwcnJScHFzcXJwcXNwAltiO4AbYluCMB/yO4JbYBuCO2Jdsdkh6TAZQekhwBHZIekwGUHpIcAAAAAAUAAP/bAgAB2wAEAAkADgATABgAABcRIREhASERIREHITUhFRUhNSEVFSE1IRUAAgD+AAHb/koBtkn+3AEk/twBJP7cASQlAgD+AAHc/kkBt5JJSW5JSW5JSQAAAwCTAEkBbQGSABcALwBbAAA3Mh4CFx4DFwYUDgEHDgMrATczNzIeAhceAhQXBhQOAQcOAysBNzMDMzI+Ajc+Ayc2LgInLgMnPgM3PgMnNi4CJy4DKwED+AcNCQkDBAMEAQEBBAQEAgkKDQcqASgBBQsIBwIDAwQBAQQCBAEICAsFKgEoZGQRGRgRCAYLBgQBAQMEBwQGCg8OCggMDQgFAwcDAwEBBAYLBgcQFBcOZAHeAQMEAwMICQwHBgsJCAIDBAMBYYECAgMDAgYHCQUFCQcGAgIEAgFN/uoDBQgGBQ4RFQsKEQ8NBgUJBgQBAQMFBwUECwwOCAsSDw0FBggFAv63AAADACUAAAHbAbcABAANABEAADcRIREhEyMDMzczFzMDBxcjNyUBtv5K/URMOBBLETdLIho0GgABt/5JAW7+20hIASU1eHgAAAACAEIAHwG8AZkAIQBLAAAlBycOAS4BJwcXBw4BIiYvAS4BNDY/AT4BMhYfAR4BFAYHJy4BIgYPAQ4BFBYXHgE+AT8BLgMnLgI2PwE+AhYXBxc3PgE0JicBvJQEBQsMCwYhHg8PJygnDw8PDw8P1w8nKCcPDw8QEA8lCxscHAvFCwwLCgsbHRsLJwMFBgUCCgwDBQhSBg8QEgl+JoYLCwoL9pQEAQECAwMgHg8PDw8PDxAmKCcP1w8QEA8PDycoJw9+CwoLC8YLGx0bCwoLAQsLJgIDBAUCChcXFQhSBgYBBAV9JYYLHBwbCwAAAAMAAABJAgABbgAEAAkADgAAEyEVITUXIRUhNRczFSM1AAIA/gCSAW7+kpPb2wFuSUluSUluSUkAAwAAAEkCAAFuAAQACQAOAAATIRUhNRUhFSE1FTMVIzUAAgD+AAFt/pPc3AFuSUluSUluSUkAAAADAAAASQIAAW4ABAAJAA4AABMhFSE1FSEVITUVIRUhNQAB//4BAf/+AQIA/gABbklJbklJbklJAAMAAABJAgABbgAEAAkADgAAEyEHIScHIRchNxchByEnbgElAf7dAW0B/wH9/wFtASUB/t0BAW5JSW5JSW5JSQAGAAAAJwIAAZUACAANABQAGAAdACEAADc1IxEhFTMRIQEhFSE1FyMVIRUhNQcjNxcXITUhFScXIzdJSQG3Sf5JAUn+kwFtSiX+twFu27hcXG3+2wElKSlJICdJASVK/twBSdzcSbcl3EltbSUlJW5JSQAAAAEAAAABAADCHXSvXw889QALAgAAAAAAz3WLJQAAAADPdYsl////2wIAAdsAAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgD//wAAAgAAAQAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAABAAAAAgAAAAIAAAACAAAAAgAAbgIAAAACAABtAgAAAAIAAAkCAABJAgD//wIAAAACAAAAAgAAAAIAAJICAAAAAgAAAAIAACUCAAAAAgAAbgIAACUCAAAlAgAASQIAAAACAAAAAgAAkwIAACUCAABCAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAAAAoAFAAeAEAAcAC4AQQBhgGoAfoCQAMCAyYDuARGBFQEcASUBLwFFgVuBY4GLgbUB4IHrAfaCFwIgAj2CRIJLglKCWoJpAAAAAEAAAAkAJAACgAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAYAAAAAQAAAAAAAgAOAGoAAQAAAAAAAwAYAC4AAQAAAAAABAAYAHgAAQAAAAAABQAWABgAAQAAAAAABgAMAEYAAQAAAAAACgAoAJAAAwABBAkAAQAYAAAAAwABBAkAAgAOAGoAAwABBAkAAwAYAC4AAwABBAkABAAYAHgAAwABBAkABQAWABgAAwABBAkABgAYAFIAAwABBAkACgAoAJAAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0UmVkYWN0b3JGb250AFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0AFIAZQBnAHUAbABhAHIAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), + url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABIoAAoAAAAAEeAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAADgEAAA4Bg0Rie09TLzIAAA74AAAAYAAAAGAIIvzVY21hcAAAD1gAAABMAAAATBpVzHZnYXNwAAAPpAAAAAgAAAAIAAAAEGhlYWQAAA+sAAAANgAAADYACVb9aGhlYQAAD+QAAAAkAAAAJAPhAgVobXR4AAAQCAAAAJAAAACQQQED3m1heHAAABCYAAAABgAAAAYAJFAAbmFtZQAAEKAAAAFmAAABZhHEcG1wb3N0AAASCAAAACAAAAAgAAMAAAEABAQAAQEBDVJlZGFjdG9yRm9udAABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeKZviU+HQFHQAAAT8PHQAAAUQRHQAAAAkdAAAN+BIAJQEBDRkbHSAlKi80OT5DSE1SV1xhZmtwdXp/hImOk5idoqessba7wFJlZGFjdG9yRm9udFJlZGFjdG9yRm9udHUwdTF1MjB1RTYwMHVFNjAxdUU2MDJ1RTYwM3VFNjA0dUU2MDV1RTYwNnVFNjA3dUU2MDh1RTYwOXVFNjBBdUU2MEJ1RTYwQ3VFNjBEdUU2MEV1RTYwRnVFNjEwdUU2MTF1RTYxMnVFNjEzdUU2MTR1RTYxNXVFNjE2dUU2MTd1RTYxOHVFNjE5dUU2MUF1RTYxQnVFNjFDdUU2MUR1RTYxRXVFNjFGAAACAYkAIgAkAgABAAQABwAKAA0AQQCYAPEBSQH6Ai8CxwMhA98EGwTXBYEFkQW0BfEGLwagBxEHOgf0CLUJaQmsCfwKhAq5C0QLdAuiC9AMAQxo/JQO/JQO/JQO+5QOi7AVi/gB+JSLi/wB/JSLBfhv990V/EqLi/u5+EqLi/e5Bfu4+5QVi/dv9yb7Avsm+wEFDvcm+AIV+AKLi0L8AouL1AWL+wIV+AKLi0L8AouL1AWL+wIV+AKLi0L8AouL1AX7JvdwFdSLi0JCi4vUBYv7AhXUi4tCQouL1AWL+wIV1IuLQkKLi9QFDviLsBVky0yq+0KWCIshBYuLQMb7LPcT9z33GsW4i4sIiyEF92Wr9wT7QV77Cgj7yfdpFYvIBYuLb3ImSOFBtnqLiwiLfIvXBe6F9yJ7nGSl0PsO6Ps2YwgO9wLUFfe4i4tn+7iLi68FysoVnHmngrGLsounlJydnJ2Up4uyCIv3SUyLi/tXBYt8hoCDg4ODgId8i32Lf4+Dk4OTh5aLmgiL91dLi4v7SQWLZJRvnXkIDvfd+EoVrouL+yrWi4tr+wKLi/dKBbH7kxX3JS/7JS+L1fsDi4uw9wOLi9QF+3LTFfsl5/cl54tC9wOLi2b7A4uLQQWXNhWTg499i3iLf4mBhoSGg4SHgYmOio6KjYiNiI6GjoQIpklri3i5BYuMio2KjYaZhZKEiwiBi4tDbouL90q1iwWfi5mHk4MIVEcVmYsFk4uRjY+Pjo+NkYuUi5SJkoiOh4+FjYOLCH2Li1kFDve393oVRYuu9wyu+wwF+0r7DRXVi6LU7ouiQtWLJve6MIsm+7oFjGcV97iLi0L7uIuL1AUOi7AVi/gB+JSLi/wB/JSLBfdLrxX3JouL1Psmi4tCBYv3AhX3JouL1Psmi4tCBWb3SxX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBbD3cBWLQvcmi4vU+yaLBfe4ixX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBQ74lPdzFfss+xNAUIuLCIv1BftCgExsZEte9wr3BPdB92VrCIv1BYuLxV73PfsaCPxYLBWcsvcim+6RCIs/i5oFi4u2nOHVJs5vpIuLCItOBfs2s/sOLqVGCA73zfe2FXNsgGiLY4tpk3Ccd513n4Gji6CLnJKZmpqakpyLn4uehZt+mH+ZfJJ7i32LgIeChQiIiYmKiYuKi4mMioyKjoqPi5GLpJOknKOco6KcqJYIi6EFWXhlcnRrCPthixV0bH9oi2OLaZNwnXecd6CBoougi5ySmpqZmpKci5+LnoWbfph/mX2Seot+i3+IgoQIiImJioqLiYuKjIqMiY6Kj4uRi6SUpJujnKOinKmWCIuhBVh4ZnJzawgOi/gCFfiUi4tC/JSLi9QF90v7AhX33YuLQvvdi4vUBYv7AhX33YuLQvvdi4vUBWZCFYv3S/snL/cnMAUO9yb4AhX4AouLQvwCi4vUBYv7AhX4AouLQvwCi4vUBYv7AhX4AouLQvwCi4vUBfsh9hXPi4ufc4uL6HeLdYWLd6GRi0Jzi4t3Bav7JRWXl5KTjY6PkI2PjY+Mj4yPi5CLlIiThJCFkYKOf4uHi4aKhoqGioaKhokIi3YFkI6QjZCNkIyPjI+LkIuPio6IjoiMh4uGi4iLiImIiYeJh4eHiIiDgX18CIB+i3jPi4ufXosFjo+QkJGRCIuLBQ74AtQVcItyk3aYCIu/qYsFmIWZh5uLvYu0sIu5i7pisFmLe4t9h36FCG2Li78FoJikk6aL3IvMSYs6iztKSTqLCPtL90sV9yaLi0L7JouL1AVmuhV8i3yHfoUIbYuLcwWAfYR6i3iLeZJ5ln0Ii3SpiwWYhZqHmoubi5mPmJEIqYuLVwV2fnKDcIs6i0rNi9uL3MzN3Iumi6SDoH4Ii1dtiwV+kX2Pe4sIDov3lBX4lIuLQvyUi4vUBQ73m/ftFWL7a0qLgFL3VYuWxEuLtPdry4uWxPtVi4BSzIsFDov4AhX4lIuLQvyUi4vUBfdL+wIV992Li0L73YuL1AWL+wIV992Li0L73YuL1AX7S0IVi/dL9ycv+ycwBQ6LsBWL+AH4lIuL/AH8lIsF+G/33RX8SouL+7n4SouL97kF+0r7SxWvi7vqySyLQvwCi4vU9wL3JvcC+yYFDvhv+EsVi/tw+2/3cPdviwVhYBWShIyChoUI+wf7BwWFhoKMhJKEkoqUkJEI9wj3BwWQkJWKkYQI/CD8HxX3b4r7b/dvi/tuBbW1FZKElYqQkAj3B/cHBZCQipWEkoSRgo2FhQj7BvsHBYWGjYGRhQgO97n3kxWL93D3b/tv+2+KBbW3FYSSipSQkQj3B/cGBZGRlIqShJKEjIGGhgj7CPsHBYaGgYyFkgj7CPsJFftvjPdv+3CL928FYWEVhJKBjIaGCPsH+wcFhoaMgZKEkoSUipGRCPcG9wYFkZGJlIWSCA733bAVi/fdZ4uL+91Bi4v3JgVPi1q8i8iLx7y8x4sI9yeLi/wBZosFDvgm9yYV1Ysv+yUv9yXVi4v3J0GL5/cl5/slQYuL+ycF+3+EFYWCgoSBhoGGgIh/i3WLeZF+mH6XhZ2Looujkp2blpqXopGriwiwi4uUBYuUiJKFj4SQgo1/i3+Lf4l/iH+If4V+hAiLugWWkJeOl46XjZiMmIusi6KEmH6ZfZFyi2gIi/sMV4uLowWL1hV2iwV3i32IhIaDhoeCi36LgY6EkIWQhpOIlIuZi5aQkpaTlo+ai58Ii48FDvdC91kVVoum9wml+wkF+x37ChXDi5zS1oudRMOLPvezR4s++7MF+BPwFYuHBYt3h3uDgIOAf4V9i4GLg46GkYWRiJOLlIuYj5WTkJSQmY6giwihiwWt7RV9mXOSaYt8i36Kfol/iH6Hf4YIi1sFmJOYkJiPl46YjZmLl4uViJGHkoaOhIuCCIuCZYsFaYtyhXt/e3+DeItyi3SReZl+mH6ehaOLmIuXjZWQlpCTk5KUCItzwouL9w8Fi6+EpX2ZCA7U95QV+AKLi2b8AouLsAX3U1oVloeUhZGEkYSOgouCi36GgYKEgoR/iHuLe4t6jnuRepB6lHqXCItKBZqEm4Wch5yIm4mci7OLqZOfm5+alKOLq4ujhZ9/mn6bd5dwlAhvlgV3kX6ShZGFkIiTi5OLl4+UlJGTkZeOm4uai5mImoaZhpqEmYIIi8gFfJF8kHuPfI58jXuLaYtxg3h6d3uCdItui3WQeZd+l32hf61+CKuABQ6L928Vr6n3S/snZ277S/cmBYuLFfdL9yevbvtL+ydnqAX4lIsVZ6n7S/snr273S/cmBYuLFftL9ydnbvdL+yevqAUOi2YVi/iU+JSLi/yU/JSLBfhv+HAV/EqLi/xL+EqLi/hLBUL7JhX7uIuL1Pe4i4tCBYv7AhX7uIuL1Pe4i4tCBYv7AhX7uIuL1Pe4i4tCBQ73jPdyFZ6LmYiUg5ODj36LeYt6h3+DhIOEfYd3iwhii4vstIsFi/cVFZuLloiShJKFjoKLfYt+iIGEhYSFgIh7iwhii4vYtIsFJvuqFfCLBbWLqJKemp2ZlKKLqoulhZ9/mn+ZeZRzjZ+NmpKVl5aXkJuLoIungqB5mHqZcJJoiwgmi4v73QUOsIsVi/hL+EqLi/xL/EqLBfeR+AIVR4s/+7nDi5vT1oucQ8KLQPe5BWlWFaX7DFeLpfcMBQ74UPeKFfso+yiHjwV9h3uNfJMIamupbXx8BWJiSYtitAh8mgVitIvNtLQI92v3awW0tM2LtGIImnwFtGKLSWJiCGb3EhVuqFyKbm4I+1n7WgVtbotcp26ob7qLqKkIsrEFg4+EkIWScKaGsJ+gCN3dBZuapIyifwj7EvsRsWb3GvcaBaiojLpuqAgOi/gCFfiUi4tC/JSLi9QF9yb7AhX4AouLQvwCi4vUBfcn+wIV92+Li0L7b4uL1AUOi/gCFfiUi4tC/JSLi9QFi/sCFfgBi4tC/AGLi9QFi/sCFfdwi4tC+3CLi9QFDov4AhX4k4uLQvyTi4vUBYv7AhX4k4uLQvyTi4vUBYv7AhX4lIuLQvyUi4vUBQ73AvgCFfe4i4tC+7iLi9QF+wL7AhX4lIuLQvyUi4vUBfcC+wIV97iLi0L7uIuL1AUO1LIVi9RCi4v3ufhLi4tB1IuL+7j8S4sF99333RX8AYuL+3D4AYuL93AF1UIVZouL+0v73YuLZvgCi4v3cAX7b0IV+0yL5/cB5/sBBfcBZhX7uYuLsPe5i4tmBWL3AhW0QkKLq9QFDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOYfAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAOAAAAAoACAACAAIAAQAg5h///f//AAAAAAAg5gD//f//AAH/4xoEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAQAAhlBJsl8PPPUACwIAAAAAAM91iyUAAAAAz3WLJf///9sCAAHbAAAACAACAAAAAAAAAAEAAAHg/+AAAAIA//8AAAIAAAEAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAAAgAAAAIAAG4CAAAAAgAAbQIAAAACAAAJAgAASQIA//8CAAAAAgAAAAIAAAACAACSAgAAAAIAAAACAAAlAgAAAAIAAG4CAAAlAgAAJQIAAEkCAAAAAgAAAAIAAJMCAAAlAgAAQgIAAAACAAAAAgAAAAIAAAACAAAAAABQAAAkAAAAAAAOAK4AAQAAAAAAAQAYAAAAAQAAAAAAAgAOAGoAAQAAAAAAAwAYAC4AAQAAAAAABAAYAHgAAQAAAAAABQAWABgAAQAAAAAABgAMAEYAAQAAAAAACgAoAJAAAwABBAkAAQAYAAAAAwABBAkAAgAOAGoAAwABBAkAAwAYAC4AAwABBAkABAAYAHgAAwABBAkABQAWABgAAwABBAkABgAYAFIAAwABBAkACgAoAJAAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0UmVkYWN0b3JGb250AFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0AFIAZQBnAHUAbABhAHIAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff'); + font-weight: normal; + font-style: normal; +} + +.tb-icon { + font-family: 'ToolbarFont'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.tb-icon i:before { + position: relative; + font-size: 14px; +} + +.tb-video:before { content: "\e600"; } +.tb-unorderedlist:before { content: "\e601"; } +.tb-undo:before { content: "\e602"; } +.tb-underline:before { content: "\e603"; } +.tb-textdirection:before { content: "\e604"; } +.tb-fontcolor:before { content: "\e605"; } +.tb-table:before { content: "\e606"; } +.tb-redo:before { content: "\e607"; } +.tb-quote:before { content: "\e608"; } +.tb-outdent:before { content: "\e609"; } +.tb-orderedlist:before { content: "\e60a"; } +.tb-link:before { content: "\e60b"; } +.tb-horizontalrule:before { content: "\e60c"; } +.tb-italic:before { content: "\e60d"; } +.tb-indent:before { content: "\e60e"; } +.tb-image:before { content: "\e60f"; } +.tb-fullscreen:before { content: "\e610"; } +.tb-normalscreen:before { content: "\e611"; } +.tb-formatting:before { content: "\e612"; } +.tb-fontsize:before { content: "\e613"; } +.tb-fontfamily:before { content: "\e614"; } +.tb-deleted:before { content: "\e615"; } +.tb-html:before { content: "\e616"; } +.tb-clips:before { content: "\e617"; } +.tb-bold:before { content: "\e618"; } +.tb-backcolor:before { content: "\e619"; } +.tb-file:before { content: "\e61a"; } +.tb-alignright:before { content: "\e61b"; } +.tb-alignment:before, +.tb-alignleft:before { content: "\e61c"; } +.tb-alignjustify:before { content: "\e61d"; } +.tb-aligncenter:before { content: "\e61e"; } +.tb-gallery:before { content: "\e61f"; } diff --git a/modules/system/assets/ui/storm-min.js b/modules/system/assets/ui/storm-min.js new file mode 100644 index 000000000..2a347942d --- /dev/null +++ b/modules/system/assets/ui/storm-min.js @@ -0,0 +1,3960 @@ + ++function($){"use strict";if($.oc===undefined) +$.oc={} +if($.oc.foundation===undefined) +$.oc.foundation={} +$.oc.foundation._proxyCounter=0 +var Base=function(){this.proxiedMethods={}} +Base.prototype.dispose=function() +{for(var key in this.proxiedMethods){this.proxiedMethods[key]=null} +this.proxiedMethods=null} +Base.prototype.proxy=function(method){if(method.ocProxyId===undefined){$.oc.foundation._proxyCounter++ +method.ocProxyId=$.oc.foundation._proxyCounter} +if(this.proxiedMethods[method.ocProxyId]!==undefined) +return this.proxiedMethods[method.ocProxyId] +this.proxiedMethods[method.ocProxyId]=method.bind(this) +return this.proxiedMethods[method.ocProxyId]} +$.oc.foundation.base=Base;}(window.jQuery);+function($){"use strict";if($.oc===undefined) +$.oc={} +if($.oc.foundation===undefined) +$.oc.foundation={} +var Element={hasClass:function(el,className){if(el.classList) +return el.classList.contains(className);return new RegExp('(^| )'+className+'( |$)','gi').test(el.className);},addClass:function(el,className){if(this.hasClass(el,className)) +return +if(el.classList) +el.classList.add(className);else +el.className+=' '+className;},removeClass:function(el,className){if(el.classList) +el.classList.remove(className);else +el.className=el.className.replace(new RegExp('(^|\\b)'+className.split(' ').join('|')+'(\\b|$)','gi'),' ');},absolutePosition:function(element,ignoreScrolling){var top=ignoreScrolling===true?0:document.body.scrollTop,left=0 +do{top+=element.offsetTop||0;if(ignoreScrolling!==true) +top-=element.scrollTop||0 +left+=element.offsetLeft||0 +element=element.offsetParent}while(element) +return{top:top,left:left}},getCaretPosition:function(input){if(document.selection){var selection=document.selection.createRange() +selection.moveStart('character',-input.value.length) +return selection.text.length} +if(input.selectionStart!==undefined) +return input.selectionStart +return 0},setCaretPosition:function(input,position){if(document.selection){var range=input.createTextRange() +setTimeout(function(){range.collapse(true) +range.moveStart("character",position) +range.moveEnd("character",0) +range.select() +range=null +input=null},0)} +if(input.selectionStart!==undefined){setTimeout(function(){input.selectionStart=position +input.selectionEnd=position +input=null},0)}}} +$.oc.foundation.element=Element;}(window.jQuery);+function($){"use strict";if($.oc===undefined) +$.oc={} +if($.oc.foundation===undefined) +$.oc.foundation={} +var Event={getTarget:function(ev,tag){var target=ev.target?ev.target:ev.srcElement +if(tag===undefined) +return target +var tagName=target.tagName +while(tagName!=tag){target=target.parentNode +if(!target) +return null +tagName=target.tagName} +return target},stop:function(ev){if(ev.stopPropagation) +ev.stopPropagation() +else +ev.cancelBubble=true +if(ev.preventDefault) +ev.preventDefault() +else +ev.returnValue=false},pageCoordinates:function(ev){if(ev.pageX||ev.pageY){return{x:ev.pageX,y:ev.pageY}} +else if(ev.clientX||ev.clientY){return{x:(ev.clientX+document.body.scrollLeft+document.documentElement.scrollLeft),y:(ev.clientY+document.body.scrollTop+document.documentElement.scrollTop)}} +return{x:0,y:0}}} +$.oc.foundation.event=Event;}(window.jQuery);+function($){"use strict";if($.oc===undefined) +$.oc={} +if($.oc.foundation===undefined) +$.oc.foundation={} +var ControlUtils={markDisposable:function(el){el.setAttribute('data-disposable','')},disposeControls:function(container){var controls=container.querySelectorAll('[data-disposable]') +for(var i=0,len=controls.length;i p.flash-message').remove() +if($element.length==0) +$element=$('

      ').addClass(options.class).html(options.text) +$element.addClass('flash-message fade') +$element.attr('data-control',null) +$element.append('') +$element.on('click','button',remove) +$element.on('click',remove) +$(document.body).append($element) +setTimeout(function(){$element.addClass('in')},1) +var timer=window.setTimeout(remove,options.interval*1000) +function removeElement(){$element.remove()} +function remove(){window.clearInterval(timer) +$element.removeClass('in') +$.support.transition&&$element.hasClass('fade')?$element.one($.support.transition.end,removeElement).emulateTransitionEnd(500):removeElement()}} +FlashMessage.DEFAULTS={class:'success',text:'Default text',interval:2} +if($.oc===undefined) +$.oc={} +$.oc.flashMsg=FlashMessage +$(document).render(function(){$('[data-control=flash-message]').each(function(){$.oc.flashMsg($(this).data(),this)})})}(window.jQuery);;window.Modernizr=(function(window,document,undefined){var version='2.8.3',Modernizr={},enableClasses=true,docElement=document.documentElement,mod='modernizr',modElem=document.createElement(mod),mStyle=modElem.style,inputElem=document.createElement('input'),smile=':)',toString={}.toString,prefixes=' -webkit- -moz- -o- -ms- '.split(' '),omPrefixes='Webkit Moz O ms',cssomPrefixes=omPrefixes.split(' '),domPrefixes=omPrefixes.toLowerCase().split(' '),ns={'svg':'http://www.w3.org/2000/svg'},tests={},inputs={},attrs={},classes=[],slice=classes.slice,featureName,injectElementWithStyles=function(rule,callback,nodes,testnames){var style,ret,node,docOverflow,div=document.createElement('div'),body=document.body,fakeBody=body||document.createElement('body');if(parseInt(nodes,10)){while(nodes--){node=document.createElement('div');node.id=testnames?testnames[nodes]:mod+(nodes+1);div.appendChild(node);}} +style=['­',''].join('');div.id=mod;(body?div:fakeBody).innerHTML+=style;fakeBody.appendChild(div);if(!body){fakeBody.style.background='';fakeBody.style.overflow='hidden';docOverflow=docElement.style.overflow;docElement.style.overflow='hidden';docElement.appendChild(fakeBody);} +ret=callback(div,rule);if(!body){fakeBody.parentNode.removeChild(fakeBody);docElement.style.overflow=docOverflow;}else{div.parentNode.removeChild(div);} +return!!ret;},testMediaQuery=function(mq){var matchMedia=window.matchMedia||window.msMatchMedia;if(matchMedia){return matchMedia(mq)&&matchMedia(mq).matches||false;} +var bool;injectElementWithStyles('@media '+mq+' { #'+mod+' { position: absolute; } }',function(node){bool=(window.getComputedStyle?getComputedStyle(node,null):node.currentStyle)['position']=='absolute';});return bool;},isEventSupported=(function(){var TAGNAMES={'select':'input','change':'input','submit':'form','reset':'form','error':'img','load':'img','abort':'img'};function isEventSupported(eventName,element){element=element||document.createElement(TAGNAMES[eventName]||'div');eventName='on'+eventName;var isSupported=eventName in element;if(!isSupported){if(!element.setAttribute){element=document.createElement('div');} +if(element.setAttribute&&element.removeAttribute){element.setAttribute(eventName,'');isSupported=is(element[eventName],'function');if(!is(element[eventName],'undefined')){element[eventName]=undefined;} +element.removeAttribute(eventName);}} +element=null;return isSupported;} +return isEventSupported;})(),_hasOwnProperty=({}).hasOwnProperty,hasOwnProp;if(!is(_hasOwnProperty,'undefined')&&!is(_hasOwnProperty.call,'undefined')){hasOwnProp=function(object,property){return _hasOwnProperty.call(object,property);};} +else{hasOwnProp=function(object,property){return((property in object)&&is(object.constructor.prototype[property],'undefined'));};} +if(!Function.prototype.bind){Function.prototype.bind=function bind(that){var target=this;if(typeof target!="function"){throw new TypeError();} +var args=slice.call(arguments,1),bound=function(){if(this instanceof bound){var F=function(){};F.prototype=target.prototype;var self=new F();var result=target.apply(self,args.concat(slice.call(arguments)));if(Object(result)===result){return result;} +return self;}else{return target.apply(that,args.concat(slice.call(arguments)));}};return bound;};} +function setCss(str){mStyle.cssText=str;} +function setCssAll(str1,str2){return setCss(prefixes.join(str1+';')+(str2||''));} +function is(obj,type){return typeof obj===type;} +function contains(str,substr){return!!~(''+str).indexOf(substr);} +function testProps(props,prefixed){for(var i in props){var prop=props[i];if(!contains(prop,"-")&&mStyle[prop]!==undefined){return prefixed=='pfx'?prop:true;}} +return false;} +function testDOMProps(props,obj,elem){for(var i in props){var item=obj[props[i]];if(item!==undefined){if(elem===false)return props[i];if(is(item,'function')){return item.bind(elem||obj);} +return item;}} +return false;} +function testPropsAll(prop,prefixed,elem){var ucProp=prop.charAt(0).toUpperCase()+prop.slice(1),props=(prop+' '+cssomPrefixes.join(ucProp+' ')+ucProp).split(' ');if(is(prefixed,"string")||is(prefixed,"undefined")){return testProps(props,prefixed);}else{props=(prop+' '+(domPrefixes).join(ucProp+' ')+ucProp).split(' ');return testDOMProps(props,prefixed,elem);}}tests['flexbox']=function(){return testPropsAll('flexWrap');};tests['flexboxlegacy']=function(){return testPropsAll('boxDirection');};tests['canvas']=function(){var elem=document.createElement('canvas');return!!(elem.getContext&&elem.getContext('2d'));};tests['canvastext']=function(){return!!(Modernizr['canvas']&&is(document.createElement('canvas').getContext('2d').fillText,'function'));};tests['webgl']=function(){return!!window.WebGLRenderingContext;};tests['touch']=function(){var bool;if(('ontouchstart'in window)||window.DocumentTouch&&document instanceof DocumentTouch){bool=true;}else{injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''),function(node){bool=node.offsetTop===9;});} +return bool;};tests['geolocation']=function(){return'geolocation'in navigator;};tests['postmessage']=function(){return!!window.postMessage;};tests['websqldatabase']=function(){return!!window.openDatabase;};tests['indexedDB']=function(){return!!testPropsAll("indexedDB",window);};tests['hashchange']=function(){return isEventSupported('hashchange',window)&&(document.documentMode===undefined||document.documentMode>7);};tests['history']=function(){return!!(window.history&&history.pushState);};tests['draganddrop']=function(){var div=document.createElement('div');return('draggable'in div)||('ondragstart'in div&&'ondrop'in div);};tests['websockets']=function(){return'WebSocket'in window||'MozWebSocket'in window;};tests['rgba']=function(){setCss('background-color:rgba(150,255,150,.5)');return contains(mStyle.backgroundColor,'rgba');};tests['hsla']=function(){setCss('background-color:hsla(120,40%,100%,.5)');return contains(mStyle.backgroundColor,'rgba')||contains(mStyle.backgroundColor,'hsla');};tests['multiplebgs']=function(){setCss('background:url(https://),url(https://),red url(https://)');return(/(url\s*\(.*?){3}/).test(mStyle.background);};tests['backgroundsize']=function(){return testPropsAll('backgroundSize');};tests['borderimage']=function(){return testPropsAll('borderImage');};tests['borderradius']=function(){return testPropsAll('borderRadius');};tests['boxshadow']=function(){return testPropsAll('boxShadow');};tests['textshadow']=function(){return document.createElement('div').style.textShadow==='';};tests['opacity']=function(){setCssAll('opacity:.55');return(/^0.55$/).test(mStyle.opacity);};tests['cssanimations']=function(){return testPropsAll('animationName');};tests['csscolumns']=function(){return testPropsAll('columnCount');};tests['cssgradients']=function(){var str1='background-image:',str2='gradient(linear,left top,right bottom,from(#9f9),to(white));',str3='linear-gradient(left top,#9f9, white);';setCss((str1+'-webkit- '.split(' ').join(str2+str1)+ +prefixes.join(str3+str1)).slice(0,-str1.length));return contains(mStyle.backgroundImage,'gradient');};tests['cssreflections']=function(){return testPropsAll('boxReflect');};tests['csstransforms']=function(){return!!testPropsAll('transform');};tests['csstransforms3d']=function(){var ret=!!testPropsAll('perspective');if(ret&&'webkitPerspective'in docElement.style){injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}',function(node,rule){ret=node.offsetLeft===9&&node.offsetHeight===3;});} +return ret;};tests['csstransitions']=function(){return testPropsAll('transition');};tests['fontface']=function(){var bool;injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}',function(node,rule){var style=document.getElementById('smodernizr'),sheet=style.sheet||style.styleSheet,cssText=sheet?(sheet.cssRules&&sheet.cssRules[0]?sheet.cssRules[0].cssText:sheet.cssText||''):'';bool=/src/i.test(cssText)&&cssText.indexOf(rule.split(' ')[0])===0;});return bool;};tests['generatedcontent']=function(){var bool;injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''),function(node){bool=node.offsetHeight>=3;});return bool;};tests['video']=function(){var elem=document.createElement('video'),bool=false;try{if(bool=!!elem.canPlayType){bool=new Boolean(bool);bool.ogg=elem.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,'');bool.h264=elem.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,'');bool.webm=elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,'');}}catch(e){} +return bool;};tests['audio']=function(){var elem=document.createElement('audio'),bool=false;try{if(bool=!!elem.canPlayType){bool=new Boolean(bool);bool.ogg=elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,'');bool.mp3=elem.canPlayType('audio/mpeg;').replace(/^no$/,'');bool.wav=elem.canPlayType('audio/wav; codecs="1"').replace(/^no$/,'');bool.m4a=(elem.canPlayType('audio/x-m4a;')||elem.canPlayType('audio/aac;')).replace(/^no$/,'');}}catch(e){} +return bool;};tests['localstorage']=function(){try{localStorage.setItem(mod,mod);localStorage.removeItem(mod);return true;}catch(e){return false;}};tests['sessionstorage']=function(){try{sessionStorage.setItem(mod,mod);sessionStorage.removeItem(mod);return true;}catch(e){return false;}};tests['webworkers']=function(){return!!window.Worker;};tests['applicationcache']=function(){return!!window.applicationCache;};tests['svg']=function(){return!!document.createElementNS&&!!document.createElementNS(ns.svg,'svg').createSVGRect;};tests['inlinesvg']=function(){var div=document.createElement('div');div.innerHTML='';return(div.firstChild&&div.firstChild.namespaceURI)==ns.svg;};tests['smil']=function(){return!!document.createElementNS&&/SVGAnimate/.test(toString.call(document.createElementNS(ns.svg,'animate')));};tests['svgclippaths']=function(){return!!document.createElementNS&&/SVGClipPath/.test(toString.call(document.createElementNS(ns.svg,'clipPath')));};function webforms(){Modernizr['input']=(function(props){for(var i=0,len=props.length;i';supportsHtml5Styles=('hidden'in a);supportsUnknownElements=a.childNodes.length==1||(function(){(document.createElement)('a');var frag=document.createDocumentFragment();return(typeof frag.cloneNode=='undefined'||typeof frag.createDocumentFragment=='undefined'||typeof frag.createElement=='undefined');}());}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true;}}());function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement('p'),parent=ownerDocument.getElementsByTagName('head')[0]||ownerDocument.documentElement;p.innerHTML='x';return parent.insertBefore(p.lastChild,parent.firstChild);} +function getElements(){var elements=html5.elements;return typeof elements=='string'?elements.split(' '):elements;} +function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data;} +return data;} +function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document;} +if(supportsUnknownElements){return ownerDocument.createElement(nodeName);} +if(!data){data=getExpandoData(ownerDocument);} +var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode();}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode();}else{node=data.createElem(nodeName);} +return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node;} +function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document;} +if(supportsUnknownElements){return ownerDocument.createDocumentFragment();} +data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i":">",'"':'"',"'":''',"/":'/'};function escapeHtml(string){return String(string).replace(/[&<>"'\/]/g,function(s){return entityMap[s];});} +var whiteRe=/\s*/;var spaceRe=/\s+/;var equalsRe=/\s*=/;var curlyRe=/\s*\}/;var tagRe=/#|\^|\/|>|\{|&|=|!/;function parseTemplate(template,tags){if(!template) +return[];var sections=[];var tokens=[];var spaces=[];var hasTag=false;var nonSpace=false;function stripSpace(){if(hasTag&&!nonSpace){while(spaces.length) +delete tokens[spaces.pop()];}else{spaces=[];} +hasTag=false;nonSpace=false;} +var openingTagRe,closingTagRe,closingCurlyRe;function compileTags(tags){if(typeof tags==='string') +tags=tags.split(spaceRe,2);if(!isArray(tags)||tags.length!==2) +throw new Error('Invalid tags: '+tags);openingTagRe=new RegExp(escapeRegExp(tags[0])+'\\s*');closingTagRe=new RegExp('\\s*'+escapeRegExp(tags[1]));closingCurlyRe=new RegExp('\\s*'+escapeRegExp('}'+tags[1]));} +compileTags(tags||mustache.tags);var scanner=new Scanner(template);var start,type,value,chr,token,openSection;while(!scanner.eos()){start=scanner.pos;value=scanner.scanUntil(openingTagRe);if(value){for(var i=0,valueLength=value.length;i0?sections[sections.length-1][4]:nestedTokens;break;default:collector.push(token);}} +return nestedTokens;} +function Scanner(string){this.string=string;this.tail=string;this.pos=0;} +Scanner.prototype.eos=function(){return this.tail==="";};Scanner.prototype.scan=function(re){var match=this.tail.match(re);if(!match||match.index!==0) +return'';var string=match[0];this.tail=this.tail.substring(string.length);this.pos+=string.length;return string;};Scanner.prototype.scanUntil=function(re){var index=this.tail.search(re),match;switch(index){case-1:match=this.tail;this.tail="";break;case 0:match="";break;default:match=this.tail.substring(0,index);this.tail=this.tail.substring(index);} +this.pos+=match.length;return match;};function Context(view,parentContext){this.view=view;this.cache={'.':this.view};this.parent=parentContext;} +Context.prototype.push=function(view){return new Context(view,this);};Context.prototype.lookup=function(name){var cache=this.cache;var value;if(name in cache){value=cache[name];}else{var context=this,names,index,lookupHit=false;while(context){if(name.indexOf('.')>0){value=context.view;names=name.split('.');index=0;while(value!=null&&index')value=this._renderPartial(token,context,partials,originalTemplate);else if(symbol==='&')value=this._unescapedValue(token,context);else if(symbol==='name')value=this._escapedValue(token,context);else if(symbol==='text')value=this._rawValue(token);if(value!==undefined) +buffer+=value;} +return buffer;};Writer.prototype._renderSection=function(token,context,partials,originalTemplate){var self=this;var buffer='';var value=context.lookup(token[1]);function subRender(template){return self.render(template,context,partials);} +if(!value)return;if(isArray(value)){for(var j=0,valueLength=value.length;j').addClass('control-popover') +if(this.options.containerClass) +this.$container.addClass(this.options.containerClass) +if(this.options.useAnimation) +this.$container.addClass('fade') +var $content=$('

      ').html(this.getContent()) +this.$container.append($content) +if(this.options.width) +this.$container.width(this.options.width) +if(this.options.modal){this.$overlay=$('
      ').addClass('popover-overlay') +$(document.body).append(this.$overlay) +if(this.options.highlightModalTarget){this.$el.addClass('popover-highlight') +this.$el.blur()}}else{this.$overlay=false} +if(this.options.container) +$(this.options.container).append(this.$container) +else +$(document.body).append(this.$container) +var +placement=this.calcPlacement(),position=this.calcPosition(placement) +this.$container.css({left:position.x,top:position.y}).addClass('placement-'+placement) +this.$container.addClass('in') +if(this.$overlay)this.$overlay.addClass('in') +$(document.body).addClass('popover-open') +var showEvent=jQuery.Event('show.oc.popover',{relatedTarget:this.$container.get(0)}) +this.$el.trigger(showEvent) +this.$container.on('close.oc.popover',function(e){self.hide()}) +this.$container.on('click','[data-dismiss=popover]',function(e){self.hide() +return false}) +this.docClickHandler=$.proxy(this.onDocumentClick,this) +$(document).bind('mousedown',this.docClickHandler);if(this.options.closeOnEsc){$(document).on('keyup.oc.popover',function(e){if($(e.target).hasClass('select2-offscreen')) +return false +if(e.keyCode==27){self.hide() +return false}})}} +Popover.prototype.getContent=function(){return typeof this.options.content=='function'?this.options.content.call(this.$el[0],this):this.options.content} +Popover.prototype.calcDimensions=function(){var +documentWidth=$(document).width(),documentHeight=$(document).height(),targetOffset=this.$el.offset(),targetWidth=this.$el.outerWidth(),targetHeight=this.$el.outerHeight() +return{containerWidth:this.$container.outerWidth()+this.arrowSize,containerHeight:this.$container.outerHeight()+this.arrowSize,targetOffset:targetOffset,targetHeight:targetHeight,targetWidth:targetWidth,spaceLeft:targetOffset.left,spaceRight:documentWidth-(targetWidth+targetOffset.left),spaceTop:targetOffset.top,spaceBottom:documentHeight-(targetHeight+targetOffset.top),spaceHorizontalBottom:documentHeight-targetOffset.top,spaceVerticalRight:documentWidth-targetOffset.left,documentWidth:documentWidth}} +Popover.prototype.fitsLeft=function(dimensions){return dimensions.spaceLeft>=dimensions.containerWidth&&dimensions.spaceHorizontalBottom>=dimensions.containerHeight} +Popover.prototype.fitsRight=function(dimensions){return dimensions.spaceRight>=dimensions.containerWidth&&dimensions.spaceHorizontalBottom>=dimensions.containerHeight} +Popover.prototype.fitsBottom=function(dimensions){return dimensions.spaceBottom>=dimensions.containerHeight&&dimensions.spaceVerticalRight>=dimensions.containerWidth} +Popover.prototype.fitsTop=function(dimensions){return dimensions.spaceTop>=dimensions.containerHeight&&dimensions.spaceVerticalRight>=dimensions.containerWidth} +Popover.prototype.calcPlacement=function(){var +placement=this.options.placement,dimensions=this.calcDimensions();if(placement=='center') +return placement +if(placement!='bottom'&&placement!='top'&&placement!='left'&&placement!='right') +placement='bottom' +var placementFunctions={top:this.fitsTop,bottom:this.fitsBottom,left:this.fitsLeft,right:this.fitsRight} +if(placementFunctions[placement](dimensions)) +return placement +for(var index in placementFunctions){if(placementFunctions[index](dimensions)) +return index} +return this.options.fallbackPlacement} +Popover.prototype.calcPosition=function(placement){var +dimensions=this.calcDimensions(),result +switch(placement){case'left':var realOffset=this.options.offsetY===undefined?this.options.offset:this.options.offsetY +result={x:(dimensions.targetOffset.left-dimensions.containerWidth),y:dimensions.targetOffset.top+realOffset} +break;case'top':var realOffset=this.options.offsetX===undefined?this.options.offset:this.options.offsetX +result={x:dimensions.targetOffset.left+realOffset,y:(dimensions.targetOffset.top-dimensions.containerHeight)} +break;case'bottom':var realOffset=this.options.offsetX===undefined?this.options.offset:this.options.offsetX +result={x:dimensions.targetOffset.left+realOffset,y:(dimensions.targetOffset.top+dimensions.targetHeight+this.arrowSize)} +break;case'right':var realOffset=this.options.offsetY===undefined?this.options.offset:this.options.offsetY +result={x:(dimensions.targetOffset.left+dimensions.targetWidth+this.arrowSize),y:dimensions.targetOffset.top+realOffset} +break;case'center':var windowHeight=$(window).height() +result={x:(dimensions.documentWidth/2-dimensions.containerWidth/2),y:(windowHeight/2-dimensions.containerHeight/2)} +if(result.y<40) +result.y=40 +break;} +if(!this.options.container) +return result +var +$container=$(this.options.container),containerOffset=$container.offset() +result.x-=containerOffset.left +result.y-=containerOffset.top +return result} +Popover.prototype.onDocumentClick=function(e){if(!this.options.closeOnPageClick) +return +if($.contains(this.$container.get(0),e.target)) +return +this.hide();} +Popover.DEFAULTS={placement:'bottom',fallbackPlacement:'bottom',content:'

      Popover content

      ',width:false,modal:false,highlightModalTarget:false,closeOnPageClick:true,closeOnEsc:true,container:false,containerClass:null,offset:15,useAnimation:false} +var old=$.fn.ocPopover +$.fn.ocPopover=function(option){var args=arguments;return this.each(function(){var $this=$(this) +var data=$this.data('oc.popover') +var options=$.extend({},Popover.DEFAULTS,$this.data(),typeof option=='object'&&option) +if(!data){if(typeof option=='string') +return;$this.data('oc.popover',(data=new Popover(this,options)))}else{if(typeof option!='string') +return;var methodArgs=[];for(var i=1;i

      ',trigger:'hover focus',title:'',delay:0,html:false,container:false} +Tooltip.prototype.init=function(type,element,options){this.enabled=true +this.type=type +this.$element=$(element) +this.options=this.getOptions(options) +var triggers=this.options.trigger.split(' ') +for(var i=triggers.length;i--;){var trigger=triggers[i] +if(trigger=='click'){this.$element.on('click.'+this.type,this.options.selector,$.proxy(this.toggle,this))}else if(trigger!='manual'){var eventIn=trigger=='hover'?'mouseenter':'focusin' +var eventOut=trigger=='hover'?'mouseleave':'focusout' +this.$element.on(eventIn+'.'+this.type,this.options.selector,$.proxy(this.enter,this)) +this.$element.on(eventOut+'.'+this.type,this.options.selector,$.proxy(this.leave,this))}} +this.options.selector?(this._options=$.extend({},this.options,{trigger:'manual',selector:''})):this.fixTitle()} +Tooltip.prototype.getDefaults=function(){return Tooltip.DEFAULTS} +Tooltip.prototype.getOptions=function(options){options=$.extend({},this.getDefaults(),this.$element.data(),options) +if(options.delay&&typeof options.delay=='number'){options.delay={show:options.delay,hide:options.delay}} +return options} +Tooltip.prototype.getDelegateOptions=function(){var options={} +var defaults=this.getDefaults() +this._options&&$.each(this._options,function(key,value){if(defaults[key]!=value)options[key]=value}) +return options} +Tooltip.prototype.enter=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.'+this.type) +clearTimeout(self.timeout) +self.hoverState='in' +if(!self.options.delay||!self.options.delay.show)return self.show() +self.timeout=setTimeout(function(){if(self.hoverState=='in')self.show()},self.options.delay.show)} +Tooltip.prototype.leave=function(obj){var self=obj instanceof this.constructor?obj:$(obj.currentTarget)[this.type](this.getDelegateOptions()).data('bs.'+this.type) +clearTimeout(self.timeout) +self.hoverState='out' +if(!self.options.delay||!self.options.delay.hide)return self.hide() +self.timeout=setTimeout(function(){if(self.hoverState=='out')self.hide()},self.options.delay.hide)} +Tooltip.prototype.show=function(){var e=$.Event('show.bs.'+this.type) +if(this.hasContent()&&this.enabled){this.$element.trigger(e) +if(e.isDefaultPrevented())return +var that=this;var $tip=this.tip() +this.setContent() +if(this.options.animation)$tip.addClass('fade') +var placement=typeof this.options.placement=='function'?this.options.placement.call(this,$tip[0],this.$element[0]):this.options.placement +var autoToken=/\s?auto?\s?/i +var autoPlace=autoToken.test(placement) +if(autoPlace)placement=placement.replace(autoToken,'')||'top' +$tip.detach().css({top:0,left:0,display:'block'}).addClass(placement) +this.options.container?$tip.appendTo(this.options.container):$tip.insertAfter(this.$element) +var pos=this.getPosition() +var actualWidth=$tip[0].offsetWidth +var actualHeight=$tip[0].offsetHeight +if(autoPlace){var $parent=this.$element.parent() +var orgPlacement=placement +var docScroll=document.documentElement.scrollTop||document.body.scrollTop +var parentWidth=this.options.container=='body'?window.innerWidth:$parent.outerWidth() +var parentHeight=this.options.container=='body'?window.innerHeight:$parent.outerHeight() +var parentLeft=this.options.container=='body'?0:$parent.offset().left +placement=placement=='bottom'&&pos.top+pos.height+actualHeight-docScroll>parentHeight?'top':placement=='top'&&pos.top-docScroll-actualHeight<0?'bottom':placement=='right'&&pos.right+actualWidth>parentWidth?'left':placement=='left'&&pos.left-actualWidth0){name.splice(i-1,2);i-=2;}}} +name=name.join("/");}else if(name.indexOf('./')===0){name=name.substring(2);}} +if((baseParts||starMap)&&map){nameParts=name.split('/');for(i=nameParts.length;i>0;i-=1){nameSegment=nameParts.slice(0,i).join("/");if(baseParts){for(j=baseParts.length;j>0;j-=1){mapValue=map[baseParts.slice(0,j).join('/')];if(mapValue){mapValue=mapValue[nameSegment];if(mapValue){foundMap=mapValue;foundI=i;break;}}}} +if(foundMap){break;} +if(!foundStarMap&&starMap&&starMap[nameSegment]){foundStarMap=starMap[nameSegment];starI=i;}} +if(!foundMap&&foundStarMap){foundMap=foundStarMap;foundI=starI;} +if(foundMap){nameParts.splice(0,foundI,foundMap);name=nameParts.join('/');}} +return name;} +function makeRequire(relName,forceSync){return function(){return req.apply(undef,aps.call(arguments,0).concat([relName,forceSync]));};} +function makeNormalize(relName){return function(name){return normalize(name,relName);};} +function makeLoad(depName){return function(value){defined[depName]=value;};} +function callDep(name){if(hasProp(waiting,name)){var args=waiting[name];delete waiting[name];defining[name]=true;main.apply(undef,args);} +if(!hasProp(defined,name)&&!hasProp(defining,name)){throw new Error('No '+name);} +return defined[name];} +function splitPrefix(name){var prefix,index=name?name.indexOf('!'):-1;if(index>-1){prefix=name.substring(0,index);name=name.substring(index+1,name.length);} +return[prefix,name];} +makeMap=function(name,relName){var plugin,parts=splitPrefix(name),prefix=parts[0];name=parts[1];if(prefix){prefix=normalize(prefix,relName);plugin=callDep(prefix);} +if(prefix){if(plugin&&plugin.normalize){name=plugin.normalize(name,makeNormalize(relName));}else{name=normalize(name,relName);}}else{name=normalize(name,relName);parts=splitPrefix(name);prefix=parts[0];name=parts[1];if(prefix){plugin=callDep(prefix);}} +return{f:prefix?prefix+'!'+name:name,n:name,pr:prefix,p:plugin};};function makeConfig(name){return function(){return(config&&config.config&&config.config[name])||{};};} +handlers={require:function(name){return makeRequire(name);},exports:function(name){var e=defined[name];if(typeof e!=='undefined'){return e;}else{return(defined[name]={});}},module:function(name){return{id:name,uri:'',exports:defined[name],config:makeConfig(name)};}};main=function(name,deps,callback,relName){var cjsModule,depName,ret,map,i,args=[],callbackType=typeof callback,usingExports;relName=relName||name;if(callbackType==='undefined'||callbackType==='function'){deps=!deps.length&&callback.length?['require','exports','module']:deps;for(i=0;i0){unshift.call(arguments,SuperClass.prototype.constructor);calledConstructor=DecoratorClass.prototype.constructor;} +calledConstructor.apply(this,arguments);} +DecoratorClass.displayName=SuperClass.displayName;function ctr(){this.constructor=DecoratedClass;} +DecoratedClass.prototype=new ctr();for(var m=0;m':'>','"':'"','\'':''','/':'/'};if(typeof markup!=='string'){return markup;} +return String(markup).replace(/[&<>"'\/\\]/g,function(match){return replaceMap[match];});};Utils.appendMany=function($element,$nodes){if($.fn.jquery.substr(0,3)==='1.7'){var $jqNodes=$();$.map($nodes,function(node){$jqNodes=$jqNodes.add(node);});$nodes=$jqNodes;} +$element.append($nodes);};return Utils;});S2.define('select2/results',['jquery','./utils'],function($,Utils){function Results($element,options,dataAdapter){this.$element=$element;this.data=dataAdapter;this.options=options;Results.__super__.constructor.call(this);} +Utils.Extend(Results,Utils.Observable);Results.prototype.render=function(){var $results=$('
        ');if(this.options.get('multiple')){$results.attr('aria-multiselectable','true');} +this.$results=$results;return $results;};Results.prototype.clear=function(){this.$results.empty();};Results.prototype.displayMessage=function(params){var escapeMarkup=this.options.get('escapeMarkup');this.clear();this.hideLoading();var $message=$('
      • ');var message=this.options.get('translations').get(params.message);$message.append(escapeMarkup(message(params.args)));this.$results.append($message);};Results.prototype.append=function(data){this.hideLoading();var $options=[];if(data.results==null||data.results.length===0){if(this.$results.children().length===0){this.trigger('results:message',{message:'noResults'});} +return;} +data.results=this.sort(data.results);for(var d=0;d-1)){$option.attr('aria-selected','true');}else{$option.attr('aria-selected','false');}});var $selected=$options.filter('[aria-selected=true]');if($selected.length>0){$selected.first().trigger('mouseenter');}else{$options.first().trigger('mouseenter');}});};Results.prototype.showLoading=function(params){this.hideLoading();var loadingMore=this.options.get('translations').get('searching');var loading={disabled:true,loading:true,text:loadingMore(params)};var $loading=this.option(loading);$loading.className+=' loading-results';this.$results.prepend($loading);};Results.prototype.hideLoading=function(){this.$results.find('.loading-results').remove();};Results.prototype.option=function(data){var option=document.createElement('li');option.className='select2-results__option';var attrs={'role':'treeitem','aria-selected':'false'};if(data.disabled){delete attrs['aria-selected'];attrs['aria-disabled']='true';} +if(data.id==null){delete attrs['aria-selected'];} +if(data._resultId!=null){option.id=data._resultId;} +if(data.title){option.title=data.title;} +if(data.children){attrs.role='group';attrs['aria-label']=data.text;delete attrs['aria-selected'];} +for(var attr in attrs){var val=attrs[attr];option.setAttribute(attr,val);} +if(data.children){var $option=$(option);var label=document.createElement('strong');label.className='select2-results__group';var $label=$(label);this.template(data,label);var $children=[];for(var c=0;c',{'class':'select2-results__options select2-results__options--nested'});$childrenContainer.append($children);$option.append(label);$option.append($childrenContainer);}else{this.template(data,option);} +$.data(option,'data',data);return option;};Results.prototype.bind=function(container,$container){var self=this;var id=container.id+'-results';this.$results.attr('id',id);container.on('results:all',function(params){self.clear();self.append(params.data);if(container.isOpen()){self.setClasses();}});container.on('results:append',function(params){self.append(params.data);if(container.isOpen()){self.setClasses();}});container.on('query',function(params){self.showLoading(params);});container.on('select',function(){if(!container.isOpen()){return;} +self.setClasses();});container.on('unselect',function(){if(!container.isOpen()){return;} +self.setClasses();});container.on('open',function(){self.$results.attr('aria-expanded','true');self.$results.attr('aria-hidden','false');self.setClasses();self.ensureHighlightVisible();});container.on('close',function(){self.$results.attr('aria-expanded','false');self.$results.attr('aria-hidden','true');self.$results.removeAttr('aria-activedescendant');});container.on('results:toggle',function(){var $highlighted=self.getHighlightedResults();if($highlighted.length===0){return;} +$highlighted.trigger('mouseup');});container.on('results:select',function(){var $highlighted=self.getHighlightedResults();if($highlighted.length===0){return;} +var data=$highlighted.data('data');if($highlighted.attr('aria-selected')=='true'){self.trigger('close');}else{self.trigger('select',{data:data});}});container.on('results:previous',function(){var $highlighted=self.getHighlightedResults();var $options=self.$results.find('[aria-selected]');var currentIndex=$options.index($highlighted);if(currentIndex===0){return;} +var nextIndex=currentIndex-1;if($highlighted.length===0){nextIndex=0;} +var $next=$options.eq(nextIndex);$next.trigger('mouseenter');var currentOffset=self.$results.offset().top;var nextTop=$next.offset().top;var nextOffset=self.$results.scrollTop()+(nextTop-currentOffset);if(nextIndex===0){self.$results.scrollTop(0);}else if(nextTop-currentOffset<0){self.$results.scrollTop(nextOffset);}});container.on('results:next',function(){var $highlighted=self.getHighlightedResults();var $options=self.$results.find('[aria-selected]');var currentIndex=$options.index($highlighted);var nextIndex=currentIndex+1;if(nextIndex>=$options.length){return;} +var $next=$options.eq(nextIndex);$next.trigger('mouseenter');var currentOffset=self.$results.offset().top+ +self.$results.outerHeight(false);var nextBottom=$next.offset().top+$next.outerHeight(false);var nextOffset=self.$results.scrollTop()+nextBottom-currentOffset;if(nextIndex===0){self.$results.scrollTop(0);}else if(nextBottom>currentOffset){self.$results.scrollTop(nextOffset);}});container.on('results:focus',function(params){params.element.addClass('select2-results__option--highlighted');});container.on('results:message',function(params){self.displayMessage(params);});if($.fn.mousewheel){this.$results.on('mousewheel',function(e){var top=self.$results.scrollTop();var bottom=(self.$results.get(0).scrollHeight- +self.$results.scrollTop()+ +e.deltaY);var isAtTop=e.deltaY>0&&top-e.deltaY<=0;var isAtBottom=e.deltaY<0&&bottom<=self.$results.height();if(isAtTop){self.$results.scrollTop(0);e.preventDefault();e.stopPropagation();}else if(isAtBottom){self.$results.scrollTop(self.$results.get(0).scrollHeight-self.$results.height());e.preventDefault();e.stopPropagation();}});} +this.$results.on('mouseup','.select2-results__option[aria-selected]',function(evt){var $this=$(this);var data=$this.data('data');if($this.attr('aria-selected')==='true'){if(self.options.get('multiple')){self.trigger('unselect',{originalEvent:evt,data:data});}else{self.trigger('close');} +return;} +self.trigger('select',{originalEvent:evt,data:data});});this.$results.on('mouseenter','.select2-results__option[aria-selected]',function(evt){var data=$(this).data('data');self.getHighlightedResults().removeClass('select2-results__option--highlighted');self.trigger('results:focus',{data:data,element:$(this)});});};Results.prototype.getHighlightedResults=function(){var $highlighted=this.$results.find('.select2-results__option--highlighted');return $highlighted;};Results.prototype.destroy=function(){this.$results.remove();};Results.prototype.ensureHighlightVisible=function(){var $highlighted=this.getHighlightedResults();if($highlighted.length===0){return;} +var $options=this.$results.find('[aria-selected]');var currentIndex=$options.index($highlighted);var currentOffset=this.$results.offset().top;var nextTop=$highlighted.offset().top;var nextOffset=this.$results.scrollTop()+(nextTop-currentOffset);var offsetDelta=nextTop-currentOffset;nextOffset-=$highlighted.outerHeight(false)*2;if(currentIndex<=2){this.$results.scrollTop(0);}else if(offsetDelta>this.$results.outerHeight()||offsetDelta<0){this.$results.scrollTop(nextOffset);}};Results.prototype.template=function(result,container){var template=this.options.get('templateResult');var escapeMarkup=this.options.get('escapeMarkup');var content=template(result);if(content==null){container.style.display='none';}else if(typeof content==='string'){container.innerHTML=escapeMarkup(content);}else{$(container).append(content);}};return Results;});S2.define('select2/keys',[],function(){var KEYS={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return KEYS;});S2.define('select2/selection/base',['jquery','../utils','../keys'],function($,Utils,KEYS){function BaseSelection($element,options){this.$element=$element;this.options=options;BaseSelection.__super__.constructor.call(this);} +Utils.Extend(BaseSelection,Utils.Observable);BaseSelection.prototype.render=function(){var $selection=$('');this._tabindex=0;if(this.$element.data('old-tabindex')!=null){this._tabindex=this.$element.data('old-tabindex');}else if(this.$element.attr('tabindex')!=null){this._tabindex=this.$element.attr('tabindex');} +$selection.attr('title',this.$element.attr('title'));$selection.attr('tabindex',this._tabindex);this.$selection=$selection;return $selection;};BaseSelection.prototype.bind=function(container,$container){var self=this;var id=container.id+'-container';var resultsId=container.id+'-results';this.container=container;this.$selection.on('focus',function(evt){self.trigger('focus',evt);});this.$selection.on('blur',function(evt){self._handleBlur(evt);});this.$selection.on('keydown',function(evt){self.trigger('keypress',evt);if(evt.which===KEYS.SPACE){evt.preventDefault();}});container.on('results:focus',function(params){self.$selection.attr('aria-activedescendant',params.data._resultId);});container.on('selection:update',function(params){self.update(params.data);});container.on('open',function(){self.$selection.attr('aria-expanded','true');self.$selection.attr('aria-owns',resultsId);self._attachCloseHandler(container);});container.on('close',function(){self.$selection.attr('aria-expanded','false');self.$selection.removeAttr('aria-activedescendant');self.$selection.removeAttr('aria-owns');self.$selection.focus();self._detachCloseHandler(container);});container.on('enable',function(){self.$selection.attr('tabindex',self._tabindex);});container.on('disable',function(){self.$selection.attr('tabindex','-1');});};BaseSelection.prototype._handleBlur=function(evt){var self=this;window.setTimeout(function(){if((document.activeElement==self.$selection[0])||($.contains(self.$selection[0],document.activeElement))){return;} +self.trigger('blur',evt);},1);};BaseSelection.prototype._attachCloseHandler=function(container){var self=this;$(document.body).on('mousedown.select2.'+container.id,function(e){var $target=$(e.target);var $select=$target.closest('.select2');var $all=$('.select2.select2-container--open');$all.each(function(){var $this=$(this);if(this==$select[0]){return;} +var $element=$this.data('element');$element.select2('close');});});};BaseSelection.prototype._detachCloseHandler=function(container){$(document.body).off('mousedown.select2.'+container.id);};BaseSelection.prototype.position=function($selection,$container){var $selectionContainer=$container.find('.selection');$selectionContainer.append($selection);};BaseSelection.prototype.destroy=function(){this._detachCloseHandler(this.container);};BaseSelection.prototype.update=function(data){throw new Error('The `update` method must be defined in child classes.');};return BaseSelection;});S2.define('select2/selection/single',['jquery','./base','../utils','../keys'],function($,BaseSelection,Utils,KEYS){function SingleSelection(){SingleSelection.__super__.constructor.apply(this,arguments);} +Utils.Extend(SingleSelection,BaseSelection);SingleSelection.prototype.render=function(){var $selection=SingleSelection.__super__.render.call(this);$selection.addClass('select2-selection--single');$selection.html(''+''+''+'');return $selection;};SingleSelection.prototype.bind=function(container,$container){var self=this;SingleSelection.__super__.bind.apply(this,arguments);var id=container.id+'-container';this.$selection.find('.select2-selection__rendered').attr('id',id);this.$selection.attr('aria-labelledby',id);this.$selection.on('mousedown',function(evt){if(evt.which!==1){return;} +self.trigger('toggle',{originalEvent:evt});});this.$selection.on('focus',function(evt){});this.$selection.on('blur',function(evt){});container.on('selection:update',function(params){self.update(params.data);});};SingleSelection.prototype.clear=function(){this.$selection.find('.select2-selection__rendered').empty();};SingleSelection.prototype.display=function(data,container){var template=this.options.get('templateSelection');var escapeMarkup=this.options.get('escapeMarkup');return escapeMarkup(template(data,container));};SingleSelection.prototype.selectionContainer=function(){return $('');};SingleSelection.prototype.update=function(data){if(data.length===0){this.clear();return;} +var selection=data[0];var $rendered=this.$selection.find('.select2-selection__rendered');var formatted=this.display(selection,$rendered);$rendered.empty().append(formatted);$rendered.prop('title',selection.title||selection.text);};return SingleSelection;});S2.define('select2/selection/multiple',['jquery','./base','../utils'],function($,BaseSelection,Utils){function MultipleSelection($element,options){MultipleSelection.__super__.constructor.apply(this,arguments);} +Utils.Extend(MultipleSelection,BaseSelection);MultipleSelection.prototype.render=function(){var $selection=MultipleSelection.__super__.render.call(this);$selection.addClass('select2-selection--multiple');$selection.html('
          ');return $selection;};MultipleSelection.prototype.bind=function(container,$container){var self=this;MultipleSelection.__super__.bind.apply(this,arguments);this.$selection.on('click',function(evt){self.trigger('toggle',{originalEvent:evt});});this.$selection.on('click','.select2-selection__choice__remove',function(evt){var $remove=$(this);var $selection=$remove.parent();var data=$selection.data('data');self.trigger('unselect',{originalEvent:evt,data:data});});};MultipleSelection.prototype.clear=function(){this.$selection.find('.select2-selection__rendered').empty();};MultipleSelection.prototype.display=function(data,container){var template=this.options.get('templateSelection');var escapeMarkup=this.options.get('escapeMarkup');return escapeMarkup(template(data,container));};MultipleSelection.prototype.selectionContainer=function(){var $container=$('
        • '+''+'×'+''+'
        • ');return $container;};MultipleSelection.prototype.update=function(data){this.clear();if(data.length===0){return;} +var $selections=[];for(var d=0;d1;if(multipleSelections||singlePlaceholder){return decorated.call(this,data);} +this.clear();var $placeholder=this.createPlaceholder(this.placeholder);this.$selection.find('.select2-selection__rendered').append($placeholder);};return Placeholder;});S2.define('select2/selection/allowClear',['jquery','../keys'],function($,KEYS){function AllowClear(){} +AllowClear.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);if(this.placeholder==null){if(this.options.get('debug')&&window.console&&console.error){console.error('Select2: The `allowClear` option should be used in combination '+'with the `placeholder` option.');}} +this.$selection.on('mousedown','.select2-selection__clear',function(evt){self._handleClear(evt);});container.on('keypress',function(evt){self._handleKeyboardClear(evt,container);});};AllowClear.prototype._handleClear=function(_,evt){if(this.options.get('disabled')){return;} +var $clear=this.$selection.find('.select2-selection__clear');if($clear.length===0){return;} +evt.stopPropagation();var data=$clear.data('data');for(var d=0;d0||data.length===0){return;} +var $remove=$(''+'×'+'');$remove.data('data',data);this.$selection.find('.select2-selection__rendered').prepend($remove);};return AllowClear;});S2.define('select2/selection/search',['jquery','../utils','../keys'],function($,Utils,KEYS){function Search(decorated,$element,options){decorated.call(this,$element,options);} +Search.prototype.render=function(decorated){var $search=$('');this.$searchContainer=$search;this.$search=$search.find('input');var $rendered=decorated.call(this);this._transferTabIndex();return $rendered;};Search.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);container.on('open',function(){self.$search.trigger('focus');});container.on('close',function(){self.$search.val('');self.$search.trigger('focus');});container.on('enable',function(){self.$search.prop('disabled',false);self._transferTabIndex();});container.on('disable',function(){self.$search.prop('disabled',true);});container.on('focus',function(evt){self.$search.trigger('focus');});this.$selection.on('focusin','.select2-search--inline',function(evt){self.trigger('focus',evt);});this.$selection.on('focusout','.select2-search--inline',function(evt){self._handleBlur(evt);});this.$selection.on('keydown','.select2-search--inline',function(evt){evt.stopPropagation();self.trigger('keypress',evt);self._keyUpPrevented=false;var key=evt.which;if(key===KEYS.BACKSPACE&&self.$search.val()===''){var $previousChoice=self.$searchContainer.prev('.select2-selection__choice');if($previousChoice.length>0){var item=$previousChoice.data('data');self.searchRemoveChoice(item);evt.preventDefault();}}});this.$selection.on('input','.select2-search--inline',function(evt){self.$selection.off('keyup.search');});this.$selection.on('keyup.search input','.select2-search--inline',function(evt){var key=evt.which;if(key==KEYS.SHIFT||key==KEYS.CTRL||key==KEYS.ALT){return;} +if(key==KEYS.TAB){return;} +self.handleSearch(evt);});};Search.prototype._transferTabIndex=function(decorated){this.$search.attr('tabindex',this.$selection.attr('tabindex'));this.$selection.attr('tabindex','-1');};Search.prototype.createPlaceholder=function(decorated,placeholder){this.$search.attr('placeholder',placeholder.text);};Search.prototype.update=function(decorated,data){var searchHadFocus=this.$search[0]==document.activeElement;this.$search.attr('placeholder','');decorated.call(this,data);this.$selection.find('.select2-selection__rendered').append(this.$searchContainer);this.resizeSearch();if(searchHadFocus){this.$search.focus();}};Search.prototype.handleSearch=function(){this.resizeSearch();if(!this._keyUpPrevented){var input=this.$search.val();this.trigger('query',{term:input});} +this._keyUpPrevented=false;};Search.prototype.searchRemoveChoice=function(decorated,item){this.trigger('unselect',{data:item});this.trigger('open');this.$search.val(item.text+' ');};Search.prototype.resizeSearch=function(){this.$search.css('width','25px');var width='';if(this.$search.attr('placeholder')!==''){width=this.$selection.find('.select2-selection__rendered').innerWidth();}else{var minimumWidth=this.$search.val().length+1;width=(minimumWidth*0.75)+'em';} +this.$search.css('width',width);};return Search;});S2.define('select2/selection/eventRelay',['jquery'],function($){function EventRelay(){} +EventRelay.prototype.bind=function(decorated,container,$container){var self=this;var relayEvents=['open','opening','close','closing','select','selecting','unselect','unselecting'];var preventableEvents=['opening','closing','selecting','unselecting'];decorated.call(this,container,$container);container.on('*',function(name,params){if($.inArray(name,relayEvents)===-1){return;} +params=params||{};var evt=$.Event('select2:'+name,{params:params});self.$element.trigger(evt);if($.inArray(name,preventableEvents)===-1){return;} +params.prevented=false;});};return EventRelay;});S2.define('select2/translation',['jquery','require'],function($,require){function Translation(dict){this.dict=dict||{};} +Translation.prototype.all=function(){return this.dict;};Translation.prototype.get=function(key){return this.dict[key];};Translation.prototype.extend=function(translation){this.dict=$.extend({},translation.all(),this.dict);};Translation._cache={};Translation.loadPath=function(path){if(!(path in Translation._cache)){var translations=require(path);Translation._cache[path]=translations;} +return new Translation(Translation._cache[path]);};return Translation;});S2.define('select2/diacritics',[],function(){var diacritics={'\u24B6':'A','\uFF21':'A','\u00C0':'A','\u00C1':'A','\u00C2':'A','\u1EA6':'A','\u1EA4':'A','\u1EAA':'A','\u1EA8':'A','\u00C3':'A','\u0100':'A','\u0102':'A','\u1EB0':'A','\u1EAE':'A','\u1EB4':'A','\u1EB2':'A','\u0226':'A','\u01E0':'A','\u00C4':'A','\u01DE':'A','\u1EA2':'A','\u00C5':'A','\u01FA':'A','\u01CD':'A','\u0200':'A','\u0202':'A','\u1EA0':'A','\u1EAC':'A','\u1EB6':'A','\u1E00':'A','\u0104':'A','\u023A':'A','\u2C6F':'A','\uA732':'AA','\u00C6':'AE','\u01FC':'AE','\u01E2':'AE','\uA734':'AO','\uA736':'AU','\uA738':'AV','\uA73A':'AV','\uA73C':'AY','\u24B7':'B','\uFF22':'B','\u1E02':'B','\u1E04':'B','\u1E06':'B','\u0243':'B','\u0182':'B','\u0181':'B','\u24B8':'C','\uFF23':'C','\u0106':'C','\u0108':'C','\u010A':'C','\u010C':'C','\u00C7':'C','\u1E08':'C','\u0187':'C','\u023B':'C','\uA73E':'C','\u24B9':'D','\uFF24':'D','\u1E0A':'D','\u010E':'D','\u1E0C':'D','\u1E10':'D','\u1E12':'D','\u1E0E':'D','\u0110':'D','\u018B':'D','\u018A':'D','\u0189':'D','\uA779':'D','\u01F1':'DZ','\u01C4':'DZ','\u01F2':'Dz','\u01C5':'Dz','\u24BA':'E','\uFF25':'E','\u00C8':'E','\u00C9':'E','\u00CA':'E','\u1EC0':'E','\u1EBE':'E','\u1EC4':'E','\u1EC2':'E','\u1EBC':'E','\u0112':'E','\u1E14':'E','\u1E16':'E','\u0114':'E','\u0116':'E','\u00CB':'E','\u1EBA':'E','\u011A':'E','\u0204':'E','\u0206':'E','\u1EB8':'E','\u1EC6':'E','\u0228':'E','\u1E1C':'E','\u0118':'E','\u1E18':'E','\u1E1A':'E','\u0190':'E','\u018E':'E','\u24BB':'F','\uFF26':'F','\u1E1E':'F','\u0191':'F','\uA77B':'F','\u24BC':'G','\uFF27':'G','\u01F4':'G','\u011C':'G','\u1E20':'G','\u011E':'G','\u0120':'G','\u01E6':'G','\u0122':'G','\u01E4':'G','\u0193':'G','\uA7A0':'G','\uA77D':'G','\uA77E':'G','\u24BD':'H','\uFF28':'H','\u0124':'H','\u1E22':'H','\u1E26':'H','\u021E':'H','\u1E24':'H','\u1E28':'H','\u1E2A':'H','\u0126':'H','\u2C67':'H','\u2C75':'H','\uA78D':'H','\u24BE':'I','\uFF29':'I','\u00CC':'I','\u00CD':'I','\u00CE':'I','\u0128':'I','\u012A':'I','\u012C':'I','\u0130':'I','\u00CF':'I','\u1E2E':'I','\u1EC8':'I','\u01CF':'I','\u0208':'I','\u020A':'I','\u1ECA':'I','\u012E':'I','\u1E2C':'I','\u0197':'I','\u24BF':'J','\uFF2A':'J','\u0134':'J','\u0248':'J','\u24C0':'K','\uFF2B':'K','\u1E30':'K','\u01E8':'K','\u1E32':'K','\u0136':'K','\u1E34':'K','\u0198':'K','\u2C69':'K','\uA740':'K','\uA742':'K','\uA744':'K','\uA7A2':'K','\u24C1':'L','\uFF2C':'L','\u013F':'L','\u0139':'L','\u013D':'L','\u1E36':'L','\u1E38':'L','\u013B':'L','\u1E3C':'L','\u1E3A':'L','\u0141':'L','\u023D':'L','\u2C62':'L','\u2C60':'L','\uA748':'L','\uA746':'L','\uA780':'L','\u01C7':'LJ','\u01C8':'Lj','\u24C2':'M','\uFF2D':'M','\u1E3E':'M','\u1E40':'M','\u1E42':'M','\u2C6E':'M','\u019C':'M','\u24C3':'N','\uFF2E':'N','\u01F8':'N','\u0143':'N','\u00D1':'N','\u1E44':'N','\u0147':'N','\u1E46':'N','\u0145':'N','\u1E4A':'N','\u1E48':'N','\u0220':'N','\u019D':'N','\uA790':'N','\uA7A4':'N','\u01CA':'NJ','\u01CB':'Nj','\u24C4':'O','\uFF2F':'O','\u00D2':'O','\u00D3':'O','\u00D4':'O','\u1ED2':'O','\u1ED0':'O','\u1ED6':'O','\u1ED4':'O','\u00D5':'O','\u1E4C':'O','\u022C':'O','\u1E4E':'O','\u014C':'O','\u1E50':'O','\u1E52':'O','\u014E':'O','\u022E':'O','\u0230':'O','\u00D6':'O','\u022A':'O','\u1ECE':'O','\u0150':'O','\u01D1':'O','\u020C':'O','\u020E':'O','\u01A0':'O','\u1EDC':'O','\u1EDA':'O','\u1EE0':'O','\u1EDE':'O','\u1EE2':'O','\u1ECC':'O','\u1ED8':'O','\u01EA':'O','\u01EC':'O','\u00D8':'O','\u01FE':'O','\u0186':'O','\u019F':'O','\uA74A':'O','\uA74C':'O','\u01A2':'OI','\uA74E':'OO','\u0222':'OU','\u24C5':'P','\uFF30':'P','\u1E54':'P','\u1E56':'P','\u01A4':'P','\u2C63':'P','\uA750':'P','\uA752':'P','\uA754':'P','\u24C6':'Q','\uFF31':'Q','\uA756':'Q','\uA758':'Q','\u024A':'Q','\u24C7':'R','\uFF32':'R','\u0154':'R','\u1E58':'R','\u0158':'R','\u0210':'R','\u0212':'R','\u1E5A':'R','\u1E5C':'R','\u0156':'R','\u1E5E':'R','\u024C':'R','\u2C64':'R','\uA75A':'R','\uA7A6':'R','\uA782':'R','\u24C8':'S','\uFF33':'S','\u1E9E':'S','\u015A':'S','\u1E64':'S','\u015C':'S','\u1E60':'S','\u0160':'S','\u1E66':'S','\u1E62':'S','\u1E68':'S','\u0218':'S','\u015E':'S','\u2C7E':'S','\uA7A8':'S','\uA784':'S','\u24C9':'T','\uFF34':'T','\u1E6A':'T','\u0164':'T','\u1E6C':'T','\u021A':'T','\u0162':'T','\u1E70':'T','\u1E6E':'T','\u0166':'T','\u01AC':'T','\u01AE':'T','\u023E':'T','\uA786':'T','\uA728':'TZ','\u24CA':'U','\uFF35':'U','\u00D9':'U','\u00DA':'U','\u00DB':'U','\u0168':'U','\u1E78':'U','\u016A':'U','\u1E7A':'U','\u016C':'U','\u00DC':'U','\u01DB':'U','\u01D7':'U','\u01D5':'U','\u01D9':'U','\u1EE6':'U','\u016E':'U','\u0170':'U','\u01D3':'U','\u0214':'U','\u0216':'U','\u01AF':'U','\u1EEA':'U','\u1EE8':'U','\u1EEE':'U','\u1EEC':'U','\u1EF0':'U','\u1EE4':'U','\u1E72':'U','\u0172':'U','\u1E76':'U','\u1E74':'U','\u0244':'U','\u24CB':'V','\uFF36':'V','\u1E7C':'V','\u1E7E':'V','\u01B2':'V','\uA75E':'V','\u0245':'V','\uA760':'VY','\u24CC':'W','\uFF37':'W','\u1E80':'W','\u1E82':'W','\u0174':'W','\u1E86':'W','\u1E84':'W','\u1E88':'W','\u2C72':'W','\u24CD':'X','\uFF38':'X','\u1E8A':'X','\u1E8C':'X','\u24CE':'Y','\uFF39':'Y','\u1EF2':'Y','\u00DD':'Y','\u0176':'Y','\u1EF8':'Y','\u0232':'Y','\u1E8E':'Y','\u0178':'Y','\u1EF6':'Y','\u1EF4':'Y','\u01B3':'Y','\u024E':'Y','\u1EFE':'Y','\u24CF':'Z','\uFF3A':'Z','\u0179':'Z','\u1E90':'Z','\u017B':'Z','\u017D':'Z','\u1E92':'Z','\u1E94':'Z','\u01B5':'Z','\u0224':'Z','\u2C7F':'Z','\u2C6B':'Z','\uA762':'Z','\u24D0':'a','\uFF41':'a','\u1E9A':'a','\u00E0':'a','\u00E1':'a','\u00E2':'a','\u1EA7':'a','\u1EA5':'a','\u1EAB':'a','\u1EA9':'a','\u00E3':'a','\u0101':'a','\u0103':'a','\u1EB1':'a','\u1EAF':'a','\u1EB5':'a','\u1EB3':'a','\u0227':'a','\u01E1':'a','\u00E4':'a','\u01DF':'a','\u1EA3':'a','\u00E5':'a','\u01FB':'a','\u01CE':'a','\u0201':'a','\u0203':'a','\u1EA1':'a','\u1EAD':'a','\u1EB7':'a','\u1E01':'a','\u0105':'a','\u2C65':'a','\u0250':'a','\uA733':'aa','\u00E6':'ae','\u01FD':'ae','\u01E3':'ae','\uA735':'ao','\uA737':'au','\uA739':'av','\uA73B':'av','\uA73D':'ay','\u24D1':'b','\uFF42':'b','\u1E03':'b','\u1E05':'b','\u1E07':'b','\u0180':'b','\u0183':'b','\u0253':'b','\u24D2':'c','\uFF43':'c','\u0107':'c','\u0109':'c','\u010B':'c','\u010D':'c','\u00E7':'c','\u1E09':'c','\u0188':'c','\u023C':'c','\uA73F':'c','\u2184':'c','\u24D3':'d','\uFF44':'d','\u1E0B':'d','\u010F':'d','\u1E0D':'d','\u1E11':'d','\u1E13':'d','\u1E0F':'d','\u0111':'d','\u018C':'d','\u0256':'d','\u0257':'d','\uA77A':'d','\u01F3':'dz','\u01C6':'dz','\u24D4':'e','\uFF45':'e','\u00E8':'e','\u00E9':'e','\u00EA':'e','\u1EC1':'e','\u1EBF':'e','\u1EC5':'e','\u1EC3':'e','\u1EBD':'e','\u0113':'e','\u1E15':'e','\u1E17':'e','\u0115':'e','\u0117':'e','\u00EB':'e','\u1EBB':'e','\u011B':'e','\u0205':'e','\u0207':'e','\u1EB9':'e','\u1EC7':'e','\u0229':'e','\u1E1D':'e','\u0119':'e','\u1E19':'e','\u1E1B':'e','\u0247':'e','\u025B':'e','\u01DD':'e','\u24D5':'f','\uFF46':'f','\u1E1F':'f','\u0192':'f','\uA77C':'f','\u24D6':'g','\uFF47':'g','\u01F5':'g','\u011D':'g','\u1E21':'g','\u011F':'g','\u0121':'g','\u01E7':'g','\u0123':'g','\u01E5':'g','\u0260':'g','\uA7A1':'g','\u1D79':'g','\uA77F':'g','\u24D7':'h','\uFF48':'h','\u0125':'h','\u1E23':'h','\u1E27':'h','\u021F':'h','\u1E25':'h','\u1E29':'h','\u1E2B':'h','\u1E96':'h','\u0127':'h','\u2C68':'h','\u2C76':'h','\u0265':'h','\u0195':'hv','\u24D8':'i','\uFF49':'i','\u00EC':'i','\u00ED':'i','\u00EE':'i','\u0129':'i','\u012B':'i','\u012D':'i','\u00EF':'i','\u1E2F':'i','\u1EC9':'i','\u01D0':'i','\u0209':'i','\u020B':'i','\u1ECB':'i','\u012F':'i','\u1E2D':'i','\u0268':'i','\u0131':'i','\u24D9':'j','\uFF4A':'j','\u0135':'j','\u01F0':'j','\u0249':'j','\u24DA':'k','\uFF4B':'k','\u1E31':'k','\u01E9':'k','\u1E33':'k','\u0137':'k','\u1E35':'k','\u0199':'k','\u2C6A':'k','\uA741':'k','\uA743':'k','\uA745':'k','\uA7A3':'k','\u24DB':'l','\uFF4C':'l','\u0140':'l','\u013A':'l','\u013E':'l','\u1E37':'l','\u1E39':'l','\u013C':'l','\u1E3D':'l','\u1E3B':'l','\u017F':'l','\u0142':'l','\u019A':'l','\u026B':'l','\u2C61':'l','\uA749':'l','\uA781':'l','\uA747':'l','\u01C9':'lj','\u24DC':'m','\uFF4D':'m','\u1E3F':'m','\u1E41':'m','\u1E43':'m','\u0271':'m','\u026F':'m','\u24DD':'n','\uFF4E':'n','\u01F9':'n','\u0144':'n','\u00F1':'n','\u1E45':'n','\u0148':'n','\u1E47':'n','\u0146':'n','\u1E4B':'n','\u1E49':'n','\u019E':'n','\u0272':'n','\u0149':'n','\uA791':'n','\uA7A5':'n','\u01CC':'nj','\u24DE':'o','\uFF4F':'o','\u00F2':'o','\u00F3':'o','\u00F4':'o','\u1ED3':'o','\u1ED1':'o','\u1ED7':'o','\u1ED5':'o','\u00F5':'o','\u1E4D':'o','\u022D':'o','\u1E4F':'o','\u014D':'o','\u1E51':'o','\u1E53':'o','\u014F':'o','\u022F':'o','\u0231':'o','\u00F6':'o','\u022B':'o','\u1ECF':'o','\u0151':'o','\u01D2':'o','\u020D':'o','\u020F':'o','\u01A1':'o','\u1EDD':'o','\u1EDB':'o','\u1EE1':'o','\u1EDF':'o','\u1EE3':'o','\u1ECD':'o','\u1ED9':'o','\u01EB':'o','\u01ED':'o','\u00F8':'o','\u01FF':'o','\u0254':'o','\uA74B':'o','\uA74D':'o','\u0275':'o','\u01A3':'oi','\u0223':'ou','\uA74F':'oo','\u24DF':'p','\uFF50':'p','\u1E55':'p','\u1E57':'p','\u01A5':'p','\u1D7D':'p','\uA751':'p','\uA753':'p','\uA755':'p','\u24E0':'q','\uFF51':'q','\u024B':'q','\uA757':'q','\uA759':'q','\u24E1':'r','\uFF52':'r','\u0155':'r','\u1E59':'r','\u0159':'r','\u0211':'r','\u0213':'r','\u1E5B':'r','\u1E5D':'r','\u0157':'r','\u1E5F':'r','\u024D':'r','\u027D':'r','\uA75B':'r','\uA7A7':'r','\uA783':'r','\u24E2':'s','\uFF53':'s','\u00DF':'s','\u015B':'s','\u1E65':'s','\u015D':'s','\u1E61':'s','\u0161':'s','\u1E67':'s','\u1E63':'s','\u1E69':'s','\u0219':'s','\u015F':'s','\u023F':'s','\uA7A9':'s','\uA785':'s','\u1E9B':'s','\u24E3':'t','\uFF54':'t','\u1E6B':'t','\u1E97':'t','\u0165':'t','\u1E6D':'t','\u021B':'t','\u0163':'t','\u1E71':'t','\u1E6F':'t','\u0167':'t','\u01AD':'t','\u0288':'t','\u2C66':'t','\uA787':'t','\uA729':'tz','\u24E4':'u','\uFF55':'u','\u00F9':'u','\u00FA':'u','\u00FB':'u','\u0169':'u','\u1E79':'u','\u016B':'u','\u1E7B':'u','\u016D':'u','\u00FC':'u','\u01DC':'u','\u01D8':'u','\u01D6':'u','\u01DA':'u','\u1EE7':'u','\u016F':'u','\u0171':'u','\u01D4':'u','\u0215':'u','\u0217':'u','\u01B0':'u','\u1EEB':'u','\u1EE9':'u','\u1EEF':'u','\u1EED':'u','\u1EF1':'u','\u1EE5':'u','\u1E73':'u','\u0173':'u','\u1E77':'u','\u1E75':'u','\u0289':'u','\u24E5':'v','\uFF56':'v','\u1E7D':'v','\u1E7F':'v','\u028B':'v','\uA75F':'v','\u028C':'v','\uA761':'vy','\u24E6':'w','\uFF57':'w','\u1E81':'w','\u1E83':'w','\u0175':'w','\u1E87':'w','\u1E85':'w','\u1E98':'w','\u1E89':'w','\u2C73':'w','\u24E7':'x','\uFF58':'x','\u1E8B':'x','\u1E8D':'x','\u24E8':'y','\uFF59':'y','\u1EF3':'y','\u00FD':'y','\u0177':'y','\u1EF9':'y','\u0233':'y','\u1E8F':'y','\u00FF':'y','\u1EF7':'y','\u1E99':'y','\u1EF5':'y','\u01B4':'y','\u024F':'y','\u1EFF':'y','\u24E9':'z','\uFF5A':'z','\u017A':'z','\u1E91':'z','\u017C':'z','\u017E':'z','\u1E93':'z','\u1E95':'z','\u01B6':'z','\u0225':'z','\u0240':'z','\u2C6C':'z','\uA763':'z','\u0386':'\u0391','\u0388':'\u0395','\u0389':'\u0397','\u038A':'\u0399','\u03AA':'\u0399','\u038C':'\u039F','\u038E':'\u03A5','\u03AB':'\u03A5','\u038F':'\u03A9','\u03AC':'\u03B1','\u03AD':'\u03B5','\u03AE':'\u03B7','\u03AF':'\u03B9','\u03CA':'\u03B9','\u0390':'\u03B9','\u03CC':'\u03BF','\u03CD':'\u03C5','\u03CB':'\u03C5','\u03B0':'\u03C5','\u03C9':'\u03C9','\u03C2':'\u03C3'};return diacritics;});S2.define('select2/data/base',['../utils'],function(Utils){function BaseAdapter($element,options){BaseAdapter.__super__.constructor.call(this);} +Utils.Extend(BaseAdapter,Utils.Observable);BaseAdapter.prototype.current=function(callback){throw new Error('The `current` method must be defined in child classes.');};BaseAdapter.prototype.query=function(params,callback){throw new Error('The `query` method must be defined in child classes.');};BaseAdapter.prototype.bind=function(container,$container){};BaseAdapter.prototype.destroy=function(){};BaseAdapter.prototype.generateResultId=function(container,data){var id=container.id+'-result-';id+=Utils.generateChars(4);if(data.id!=null){id+='-'+data.id.toString();}else{id+='-'+Utils.generateChars(4);} +return id;};return BaseAdapter;});S2.define('select2/data/select',['./base','../utils','jquery'],function(BaseAdapter,Utils,$){function SelectAdapter($element,options){this.$element=$element;this.options=options;SelectAdapter.__super__.constructor.call(this);} +Utils.Extend(SelectAdapter,BaseAdapter);SelectAdapter.prototype.current=function(callback){var data=[];var self=this;this.$element.find(':selected').each(function(){var $option=$(this);var option=self.item($option);data.push(option);});callback(data);};SelectAdapter.prototype.select=function(data){var self=this;data.selected=true;if($(data.element).is('option')){data.element.selected=true;this.$element.trigger('change');return;} +if(this.$element.prop('multiple')){this.current(function(currentData){var val=[];data=[data];data.push.apply(data,currentData);for(var d=0;d=0){var $existingOption=$existing.filter(onlyItem(item));var existingData=this.item($existingOption);var newData=$.extend(true,{},existingData,item);var $newOption=this.option(existingData);$existingOption.replaceWith($newOption);continue;} +var $option=this.option(item);if(item.children){var $children=this.convertToOptions(item.children);Utils.appendMany($option,$children);} +$options.push($option);} +return $options;};return ArrayAdapter;});S2.define('select2/data/ajax',['./array','../utils','jquery'],function(ArrayAdapter,Utils,$){function AjaxAdapter($element,options){this.ajaxOptions=this._applyDefaults(options.get('ajax'));if(this.ajaxOptions.processResults!=null){this.processResults=this.ajaxOptions.processResults;} +AjaxAdapter.__super__.constructor.call(this,$element,options);} +Utils.Extend(AjaxAdapter,ArrayAdapter);AjaxAdapter.prototype._applyDefaults=function(options){var defaults={data:function(params){return{q:params.term};},transport:function(params,success,failure){var $request=$.ajax(params);$request.then(success);$request.fail(failure);return $request;}};return $.extend({},defaults,options,true);};AjaxAdapter.prototype.processResults=function(results){return results;};AjaxAdapter.prototype.query=function(params,callback){var matches=[];var self=this;if(this._request!=null){if($.isFunction(this._request.abort)){this._request.abort();} +this._request=null;} +var options=$.extend({type:'GET'},this.ajaxOptions);if(typeof options.url==='function'){options.url=options.url(params);} +if(typeof options.data==='function'){options.data=options.data(params);} +function request(){var $request=options.transport(options,function(data){var results=self.processResults(data,params);if(self.options.get('debug')&&window.console&&console.error){if(!results||!results.results||!$.isArray(results.results)){console.error('Select2: The AJAX results did not return an array in the '+'`results` key of the response.');}} +callback(results);},function(){});self._request=$request;} +if(this.ajaxOptions.delay&¶ms.term!==''){if(this._queryTimeout){window.clearTimeout(this._queryTimeout);} +this._queryTimeout=window.setTimeout(request,this.ajaxOptions.delay);}else{request();}};return AjaxAdapter;});S2.define('select2/data/tags',['jquery'],function($){function Tags(decorated,$element,options){var tags=options.get('tags');var createTag=options.get('createTag');if(createTag!==undefined){this.createTag=createTag;} +decorated.call(this,$element,options);if($.isArray(tags)){for(var t=0;t0&¶ms.term.length>this.maximumInputLength){this.trigger('results:message',{message:'inputTooLong',args:{maximum:this.maximumInputLength,input:params.term,params:params}});return;} +decorated.call(this,params,callback);};return MaximumInputLength;});S2.define('select2/data/maximumSelectionLength',[],function(){function MaximumSelectionLength(decorated,$e,options){this.maximumSelectionLength=options.get('maximumSelectionLength');decorated.call(this,$e,options);} +MaximumSelectionLength.prototype.query=function(decorated,params,callback){var self=this;this.current(function(currentData){var count=currentData!=null?currentData.length:0;if(self.maximumSelectionLength>0&&count>=self.maximumSelectionLength){self.trigger('results:message',{message:'maximumSelected',args:{maximum:self.maximumSelectionLength}});return;} +decorated.call(self,params,callback);});};return MaximumSelectionLength;});S2.define('select2/dropdown',['jquery','./utils'],function($,Utils){function Dropdown($element,options){this.$element=$element;this.options=options;Dropdown.__super__.constructor.call(this);} +Utils.Extend(Dropdown,Utils.Observable);Dropdown.prototype.render=function(){var $dropdown=$(''+''+'');$dropdown.attr('dir',this.options.get('dir'));this.$dropdown=$dropdown;return $dropdown;};Dropdown.prototype.position=function($dropdown,$container){};Dropdown.prototype.destroy=function(){this.$dropdown.remove();};return Dropdown;});S2.define('select2/dropdown/search',['jquery','../utils'],function($,Utils){function Search(){} +Search.prototype.render=function(decorated){var $rendered=decorated.call(this);var $search=$(''+''+'');this.$searchContainer=$search;this.$search=$search.find('input');$rendered.prepend($search);return $rendered;};Search.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);this.$search.on('keydown',function(evt){self.trigger('keypress',evt);self._keyUpPrevented=false;});this.$search.on('input',function(evt){$(this).off('keyup');});this.$search.on('keyup input',function(evt){self.handleSearch(evt);});container.on('open',function(){self.$search.attr('tabindex',0);self.$search.focus();window.setTimeout(function(){self.$search.focus();},0);});container.on('close',function(){self.$search.attr('tabindex',-1);self.$search.val('');});container.on('results:all',function(params){if(params.query.term==null||params.query.term===''){var showSearch=self.showSearch(params);if(showSearch){self.$searchContainer.removeClass('select2-search--hide');}else{self.$searchContainer.addClass('select2-search--hide');}}});};Search.prototype.handleSearch=function(evt){if(!this._keyUpPrevented){var input=this.$search.val();this.trigger('query',{term:input});} +this._keyUpPrevented=false;};Search.prototype.showSearch=function(_,params){return true;};return Search;});S2.define('select2/dropdown/hidePlaceholder',[],function(){function HidePlaceholder(decorated,$element,options,dataAdapter){this.placeholder=this.normalizePlaceholder(options.get('placeholder'));decorated.call(this,$element,options,dataAdapter);} +HidePlaceholder.prototype.append=function(decorated,data){data.results=this.removePlaceholder(data.results);decorated.call(this,data);};HidePlaceholder.prototype.normalizePlaceholder=function(_,placeholder){if(typeof placeholder==='string'){placeholder={id:'',text:placeholder};} +return placeholder;};HidePlaceholder.prototype.removePlaceholder=function(_,data){var modifiedData=data.slice(0);for(var d=data.length-1;d>=0;d--){var item=data[d];if(this.placeholder.id===item.id){modifiedData.splice(d,1);}} +return modifiedData;};return HidePlaceholder;});S2.define('select2/dropdown/infiniteScroll',['jquery'],function($){function InfiniteScroll(decorated,$element,options,dataAdapter){this.lastParams={};decorated.call(this,$element,options,dataAdapter);this.$loadingMore=this.createLoadingMore();this.loading=false;} +InfiniteScroll.prototype.append=function(decorated,data){this.$loadingMore.remove();this.loading=false;decorated.call(this,data);if(this.showLoadingMore(data)){this.$results.append(this.$loadingMore);}};InfiniteScroll.prototype.bind=function(decorated,container,$container){var self=this;decorated.call(this,container,$container);container.on('query',function(params){self.lastParams=params;self.loading=true;});container.on('query:append',function(params){self.lastParams=params;self.loading=true;});this.$results.on('scroll',function(){var isLoadMoreVisible=$.contains(document.documentElement,self.$loadingMore[0]);if(self.loading||!isLoadMoreVisible){return;} +var currentOffset=self.$results.offset().top+ +self.$results.outerHeight(false);var loadingMoreOffset=self.$loadingMore.offset().top+ +self.$loadingMore.outerHeight(false);if(currentOffset+50>=loadingMoreOffset){self.loadMore();}});};InfiniteScroll.prototype.loadMore=function(){this.loading=true;var params=$.extend({},{page:1},this.lastParams);params.page++;this.trigger('query:append',params);};InfiniteScroll.prototype.showLoadingMore=function(_,data){return data.pagination&&data.pagination.more;};InfiniteScroll.prototype.createLoadingMore=function(){var $option=$('
        • ');var message=this.options.get('translations').get('loadingMore');$option.html(message(this.lastParams));return $option;};return InfiniteScroll;});S2.define('select2/dropdown/attachBody',['jquery','../utils'],function($,Utils){function AttachBody(decorated,$element,options){this.$dropdownParent=options.get('dropdownParent')||document.body;decorated.call(this,$element,options);} +AttachBody.prototype.bind=function(decorated,container,$container){var self=this;var setupResultsEvents=false;decorated.call(this,container,$container);container.on('open',function(){self._showDropdown();self._attachPositioningHandler(container);if(!setupResultsEvents){setupResultsEvents=true;container.on('results:all',function(){self._positionDropdown();self._resizeDropdown();});container.on('results:append',function(){self._positionDropdown();self._resizeDropdown();});}});container.on('close',function(){self._hideDropdown();self._detachPositioningHandler(container);});this.$dropdownContainer.on('mousedown',function(evt){evt.stopPropagation();});};AttachBody.prototype.position=function(decorated,$dropdown,$container){$dropdown.attr('class',$container.attr('class'));$dropdown.removeClass('select2');$dropdown.addClass('select2-container--open');$dropdown.css({position:'absolute',top:-999999});this.$container=$container;};AttachBody.prototype.render=function(decorated){var $container=$('');var $dropdown=decorated.call(this);$container.append($dropdown);this.$dropdownContainer=$container;return $container;};AttachBody.prototype._hideDropdown=function(decorated){this.$dropdownContainer.detach();};AttachBody.prototype._attachPositioningHandler=function(container){var self=this;var scrollEvent='scroll.select2.'+container.id;var resizeEvent='resize.select2.'+container.id;var orientationEvent='orientationchange.select2.'+container.id;var $watchers=this.$container.parents().filter(Utils.hasScroll);$watchers.each(function(){$(this).data('select2-scroll-position',{x:$(this).scrollLeft(),y:$(this).scrollTop()});});$watchers.on(scrollEvent,function(ev){var position=$(this).data('select2-scroll-position');$(this).scrollTop(position.y);});$(window).on(scrollEvent+' '+resizeEvent+' '+orientationEvent,function(e){self._positionDropdown();self._resizeDropdown();});};AttachBody.prototype._detachPositioningHandler=function(container){var scrollEvent='scroll.select2.'+container.id;var resizeEvent='resize.select2.'+container.id;var orientationEvent='orientationchange.select2.'+container.id;var $watchers=this.$container.parents().filter(Utils.hasScroll);$watchers.off(scrollEvent);$(window).off(scrollEvent+' '+resizeEvent+' '+orientationEvent);};AttachBody.prototype._positionDropdown=function(){var $window=$(window);var isCurrentlyAbove=this.$dropdown.hasClass('select2-dropdown--above');var isCurrentlyBelow=this.$dropdown.hasClass('select2-dropdown--below');var newDirection=null;var position=this.$container.position();var offset=this.$container.offset();offset.bottom=offset.top+this.$container.outerHeight(false);var container={height:this.$container.outerHeight(false)};container.top=offset.top;container.bottom=offset.top+container.height;var dropdown={height:this.$dropdown.outerHeight(false)};var viewport={top:$window.scrollTop(),bottom:$window.scrollTop()+$window.height()};var enoughRoomAbove=viewport.top<(offset.top-dropdown.height);var enoughRoomBelow=viewport.bottom>(offset.bottom+dropdown.height);var css={left:offset.left,top:container.bottom};if(!isCurrentlyAbove&&!isCurrentlyBelow){newDirection='below';} +if(!enoughRoomBelow&&enoughRoomAbove&&!isCurrentlyAbove){newDirection='above';}else if(!enoughRoomAbove&&enoughRoomBelow&&isCurrentlyAbove){newDirection='below';} +if(newDirection=='above'||(isCurrentlyAbove&&newDirection!=='below')){css.top=container.top-dropdown.height;} +if(newDirection!=null){this.$dropdown.removeClass('select2-dropdown--below select2-dropdown--above').addClass('select2-dropdown--'+newDirection);this.$container.removeClass('select2-container--below select2-container--above').addClass('select2-container--'+newDirection);} +this.$dropdownContainer.css(css);};AttachBody.prototype._resizeDropdown=function(){this.$dropdownContainer.width();var css={width:this.$container.outerWidth(false)+'px'};if(this.options.get('dropdownAutoWidth')){css.minWidth=css.width;css.width='auto';} +this.$dropdown.css(css);};AttachBody.prototype._showDropdown=function(decorated){this.$dropdownContainer.appendTo(this.$dropdownParent);this._positionDropdown();this._resizeDropdown();};return AttachBody;});S2.define('select2/dropdown/minimumResultsForSearch',[],function(){function countResults(data){var count=0;for(var d=0;d0){options.dataAdapter=Utils.Decorate(options.dataAdapter,MinimumInputLength);} +if(options.maximumInputLength>0){options.dataAdapter=Utils.Decorate(options.dataAdapter,MaximumInputLength);} +if(options.maximumSelectionLength>0){options.dataAdapter=Utils.Decorate(options.dataAdapter,MaximumSelectionLength);} +if(options.tags){options.dataAdapter=Utils.Decorate(options.dataAdapter,Tags);} +if(options.tokenSeparators!=null||options.tokenizer!=null){options.dataAdapter=Utils.Decorate(options.dataAdapter,Tokenizer);} +if(options.query!=null){var Query=require(options.amdBase+'compat/query');options.dataAdapter=Utils.Decorate(options.dataAdapter,Query);} +if(options.initSelection!=null){var InitSelection=require(options.amdBase+'compat/initSelection');options.dataAdapter=Utils.Decorate(options.dataAdapter,InitSelection);}} +if(options.resultsAdapter==null){options.resultsAdapter=ResultsList;if(options.ajax!=null){options.resultsAdapter=Utils.Decorate(options.resultsAdapter,InfiniteScroll);} +if(options.placeholder!=null){options.resultsAdapter=Utils.Decorate(options.resultsAdapter,HidePlaceholder);} +if(options.selectOnClose){options.resultsAdapter=Utils.Decorate(options.resultsAdapter,SelectOnClose);}} +if(options.dropdownAdapter==null){if(options.multiple){options.dropdownAdapter=Dropdown;}else{var SearchableDropdown=Utils.Decorate(Dropdown,DropdownSearch);options.dropdownAdapter=SearchableDropdown;} +if(options.minimumResultsForSearch!==0){options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,MinimumResultsForSearch);} +if(options.closeOnSelect){options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,CloseOnSelect);} +if(options.dropdownCssClass!=null||options.dropdownCss!=null||options.adaptDropdownCssClass!=null){var DropdownCSS=require(options.amdBase+'compat/dropdownCss');options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,DropdownCSS);} +options.dropdownAdapter=Utils.Decorate(options.dropdownAdapter,AttachBody);} +if(options.selectionAdapter==null){if(options.multiple){options.selectionAdapter=MultipleSelection;}else{options.selectionAdapter=SingleSelection;} +if(options.placeholder!=null){options.selectionAdapter=Utils.Decorate(options.selectionAdapter,Placeholder);} +if(options.allowClear){options.selectionAdapter=Utils.Decorate(options.selectionAdapter,AllowClear);} +if(options.multiple){options.selectionAdapter=Utils.Decorate(options.selectionAdapter,SelectionSearch);} +if(options.containerCssClass!=null||options.containerCss!=null||options.adaptContainerCssClass!=null){var ContainerCSS=require(options.amdBase+'compat/containerCss');options.selectionAdapter=Utils.Decorate(options.selectionAdapter,ContainerCSS);} +options.selectionAdapter=Utils.Decorate(options.selectionAdapter,EventRelay);} +if(typeof options.language==='string'){if(options.language.indexOf('-')>0){var languageParts=options.language.split('-');var baseLanguage=languageParts[0];options.language=[options.language,baseLanguage];}else{options.language=[options.language];}} +if($.isArray(options.language)){var languages=new Translation();options.language.push('en');var languageNames=options.language;for(var l=0;l0){var match=$.extend(true,{},data);for(var c=data.children.length-1;c>=0;c--){var child=data.children[c];var matches=matcher(params,child);if(matches==null){match.children.splice(c,1);}} +if(match.children.length>0){return match;} +return matcher(params,match);} +var original=stripDiacritics(data.text).toUpperCase();var term=stripDiacritics(params.term).toUpperCase();if(original.indexOf(term)>-1){return data;} +return null;} +this.defaults={amdBase:'./',amdLanguageBase:'./i18n/',closeOnSelect:true,debug:false,dropdownAutoWidth:false,escapeMarkup:Utils.escapeMarkup,language:EnglishTranslation,matcher:matcher,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:false,sorter:function(data){return data;},templateResult:function(result){return result.text;},templateSelection:function(selection){return selection.text;},theme:'default',width:'resolve'};};Defaults.prototype.set=function(key,value){var camelKey=$.camelCase(key);var data={};data[camelKey]=value;var convertedData=Utils._convertData(data);$.extend(this.defaults,convertedData);};var defaults=new Defaults();return defaults;});S2.define('select2/options',['require','jquery','./defaults','./utils'],function(require,$,Defaults,Utils){function Options(options,$element){this.options=options;if($element!=null){this.fromElement($element);} +this.options=Defaults.apply(this.options);if($element&&$element.is('input')){var InputCompat=require(this.get('amdBase')+'compat/inputData');this.options.dataAdapter=Utils.Decorate(this.options.dataAdapter,InputCompat);}} +Options.prototype.fromElement=function($e){var excludedData=['select2'];if(this.options.multiple==null){this.options.multiple=$e.prop('multiple');} +if(this.options.disabled==null){this.options.disabled=$e.prop('disabled');} +if(this.options.language==null){if($e.prop('lang')){this.options.language=$e.prop('lang').toLowerCase();}else if($e.closest('[lang]').prop('lang')){this.options.language=$e.closest('[lang]').prop('lang');}} +if(this.options.dir==null){if($e.prop('dir')){this.options.dir=$e.prop('dir');}else if($e.closest('[dir]').prop('dir')){this.options.dir=$e.closest('[dir]').prop('dir');}else{this.options.dir='ltr';}} +$e.prop('disabled',this.options.disabled);$e.prop('multiple',this.options.multiple);if($e.data('select2Tags')){if(this.options.debug&&window.console&&console.warn){console.warn('Select2: The `data-select2-tags` attribute has been changed to '+'use the `data-data` and `data-tags="true"` attributes and will be '+'removed in future versions of Select2.');} +$e.data('data',$e.data('select2Tags'));$e.data('tags',true);} +if($e.data('ajaxUrl')){if(this.options.debug&&window.console&&console.warn){console.warn('Select2: The `data-ajax-url` attribute has been changed to '+'`data-ajax--url` and support for the old attribute will be removed'+' in future versions of Select2.');} +$e.attr('ajax--url',$e.data('ajaxUrl'));$e.data('ajax--url',$e.data('ajaxUrl'));} +var dataset={};if($.fn.jquery&&$.fn.jquery.substr(0,2)=='1.'&&$e[0].dataset){dataset=$.extend(true,{},$e[0].dataset,$e.data());}else{dataset=$e.data();} +var data=$.extend(true,{},dataset);data=Utils._convertData(data);for(var key in data){if($.inArray(key,excludedData)>-1){continue;} +if($.isPlainObject(this.options[key])){$.extend(this.options[key],data[key]);}else{this.options[key]=data[key];}} +return this;};Options.prototype.get=function(key){return this.options[key];};Options.prototype.set=function(key,val){this.options[key]=val;};return Options;});S2.define('select2/core',['jquery','./options','./utils','./keys'],function($,Options,Utils,KEYS){var Select2=function($element,options){if($element.data('select2')!=null){$element.data('select2').destroy();} +this.$element=$element;this.id=this._generateId($element);options=options||{};this.options=new Options(options,$element);Select2.__super__.constructor.call(this);var tabindex=$element.attr('tabindex')||0;$element.data('old-tabindex',tabindex);$element.attr('tabindex','-1');var DataAdapter=this.options.get('dataAdapter');this.dataAdapter=new DataAdapter($element,this.options);var $container=this.render();this._placeContainer($container);var SelectionAdapter=this.options.get('selectionAdapter');this.selection=new SelectionAdapter($element,this.options);this.$selection=this.selection.render();this.selection.position(this.$selection,$container);var DropdownAdapter=this.options.get('dropdownAdapter');this.dropdown=new DropdownAdapter($element,this.options);this.$dropdown=this.dropdown.render();this.dropdown.position(this.$dropdown,$container);var ResultsAdapter=this.options.get('resultsAdapter');this.results=new ResultsAdapter($element,this.options,this.dataAdapter);this.$results=this.results.render();this.results.position(this.$results,this.$dropdown);var self=this;this._bindAdapters();this._registerDomEvents();this._registerDataEvents();this._registerSelectionEvents();this._registerDropdownEvents();this._registerResultsEvents();this._registerEvents();this.dataAdapter.current(function(initialData){self.trigger('selection:update',{data:initialData});});$element.addClass('select2-hidden-accessible');$element.attr('aria-hidden','true');this._syncAttributes();$element.data('select2',this);};Utils.Extend(Select2,Utils.Observable);Select2.prototype._generateId=function($element){var id='';if($element.attr('id')!=null){id=$element.attr('id');}else if($element.attr('name')!=null){id=$element.attr('name')+'-'+Utils.generateChars(2);}else{id=Utils.generateChars(4);} +id='select2-'+id;return id;};Select2.prototype._placeContainer=function($container){$container.insertAfter(this.$element);var width=this._resolveWidth(this.$element,this.options.get('width'));if(width!=null){$container.css('width',width);}};Select2.prototype._resolveWidth=function($element,method){var WIDTH=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if(method=='resolve'){var styleWidth=this._resolveWidth($element,'style');if(styleWidth!=null){return styleWidth;} +return this._resolveWidth($element,'element');} +if(method=='element'){var elementWidth=$element.outerWidth(false);if(elementWidth<=0){return'auto';} +return elementWidth+'px';} +if(method=='style'){var style=$element.attr('style');if(typeof(style)!=='string'){return null;} +var attrs=style.split(';');for(var i=0,l=attrs.length;i=1){return matches[1];}} +return null;} +return method;};Select2.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container);this.selection.bind(this,this.$container);this.dropdown.bind(this,this.$container);this.results.bind(this,this.$container);};Select2.prototype._registerDomEvents=function(){var self=this;this.$element.on('change.select2',function(){self.dataAdapter.current(function(data){self.trigger('selection:update',{data:data});});});this._sync=Utils.bind(this._syncAttributes,this);if(this.$element[0].attachEvent){this.$element[0].attachEvent('onpropertychange',this._sync);} +var observer=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;if(observer!=null){this._observer=new observer(function(mutations){$.each(mutations,self._sync);});this._observer.observe(this.$element[0],{attributes:true,subtree:false});}else if(this.$element[0].addEventListener){this.$element[0].addEventListener('DOMAttrModified',self._sync,false);}};Select2.prototype._registerDataEvents=function(){var self=this;this.dataAdapter.on('*',function(name,params){self.trigger(name,params);});};Select2.prototype._registerSelectionEvents=function(){var self=this;var nonRelayEvents=['toggle','focus'];this.selection.on('toggle',function(){self.toggleDropdown();});this.selection.on('focus',function(params){self.focus(params);});this.selection.on('*',function(name,params){if($.inArray(name,nonRelayEvents)!==-1){return;} +self.trigger(name,params);});};Select2.prototype._registerDropdownEvents=function(){var self=this;this.dropdown.on('*',function(name,params){self.trigger(name,params);});};Select2.prototype._registerResultsEvents=function(){var self=this;this.results.on('*',function(name,params){self.trigger(name,params);});};Select2.prototype._registerEvents=function(){var self=this;this.on('open',function(){self.$container.addClass('select2-container--open');});this.on('close',function(){self.$container.removeClass('select2-container--open');});this.on('enable',function(){self.$container.removeClass('select2-container--disabled');});this.on('disable',function(){self.$container.addClass('select2-container--disabled');});this.on('blur',function(){self.$container.removeClass('select2-container--focus');});this.on('query',function(params){if(!self.isOpen()){self.trigger('open');} +this.dataAdapter.query(params,function(data){self.trigger('results:all',{data:data,query:params});});});this.on('query:append',function(params){this.dataAdapter.query(params,function(data){self.trigger('results:append',{data:data,query:params});});});this.on('keypress',function(evt){var key=evt.which;if(self.isOpen()){if(key===KEYS.ESC||key===KEYS.TAB||(key===KEYS.UP&&evt.altKey)){self.close();evt.preventDefault();}else if(key===KEYS.ENTER){self.trigger('results:select');evt.preventDefault();}else if((key===KEYS.SPACE&&evt.ctrlKey)){self.trigger('results:toggle');evt.preventDefault();}else if(key===KEYS.UP){self.trigger('results:previous');evt.preventDefault();}else if(key===KEYS.DOWN){self.trigger('results:next');evt.preventDefault();}}else{if(key===KEYS.ENTER||key===KEYS.SPACE||(key===KEYS.DOWN&&evt.altKey)){self.open();evt.preventDefault();}}});};Select2.prototype._syncAttributes=function(){this.options.set('disabled',this.$element.prop('disabled'));if(this.options.get('disabled')){if(this.isOpen()){this.close();} +this.trigger('disable');}else{this.trigger('enable');}};Select2.prototype.trigger=function(name,args){var actualTrigger=Select2.__super__.trigger;var preTriggerMap={'open':'opening','close':'closing','select':'selecting','unselect':'unselecting'};if(name in preTriggerMap){var preTriggerName=preTriggerMap[name];var preTriggerArgs={prevented:false,name:name,args:args};actualTrigger.call(this,preTriggerName,preTriggerArgs);if(preTriggerArgs.prevented){args.prevented=true;return;}} +actualTrigger.call(this,name,args);};Select2.prototype.toggleDropdown=function(){if(this.options.get('disabled')){return;} +if(this.isOpen()){this.close();}else{this.open();}};Select2.prototype.open=function(){if(this.isOpen()){return;} +this.trigger('query',{});this.trigger('open');};Select2.prototype.close=function(){if(!this.isOpen()){return;} +this.trigger('close');};Select2.prototype.isOpen=function(){return this.$container.hasClass('select2-container--open');};Select2.prototype.hasFocus=function(){return this.$container.hasClass('select2-container--focus');};Select2.prototype.focus=function(data){if(this.hasFocus()){return;} +this.$container.addClass('select2-container--focus');this.trigger('focus');};Select2.prototype.enable=function(args){if(this.options.get('debug')&&window.console&&console.warn){console.warn('Select2: The `select2("enable")` method has been deprecated and will'+' be removed in later Select2 versions. Use $element.prop("disabled")'+' instead.');} +if(args==null||args.length===0){args=[true];} +var disabled=!args[0];this.$element.prop('disabled',disabled);};Select2.prototype.data=function(){if(this.options.get('debug')&&arguments.length>0&&window.console&&console.warn){console.warn('Select2: Data can no longer be set using `select2("data")`. You '+'should consider setting the value instead using `$element.val()`.');} +var data=[];this.dataAdapter.current(function(currentData){data=currentData;});return data;};Select2.prototype.val=function(args){if(this.options.get('debug')&&window.console&&console.warn){console.warn('Select2: The `select2("val")` method has been deprecated and will be'+' removed in later Select2 versions. Use $element.val() instead.');} +if(args==null||args.length===0){return this.$element.val();} +var newVal=args[0];if($.isArray(newVal)){newVal=$.map(newVal,function(obj){return obj.toString();});} +this.$element.val(newVal).trigger('change');};Select2.prototype.destroy=function(){this.$container.remove();if(this.$element[0].detachEvent){this.$element[0].detachEvent('onpropertychange',this._sync);} +if(this._observer!=null){this._observer.disconnect();this._observer=null;}else if(this.$element[0].removeEventListener){this.$element[0].removeEventListener('DOMAttrModified',this._sync,false);} +this._sync=null;this.$element.off('.select2');this.$element.attr('tabindex',this.$element.data('old-tabindex'));this.$element.removeClass('select2-hidden-accessible');this.$element.attr('aria-hidden','false');this.$element.removeData('select2');this.dataAdapter.destroy();this.selection.destroy();this.dropdown.destroy();this.results.destroy();this.dataAdapter=null;this.selection=null;this.dropdown=null;this.results=null;};Select2.prototype.render=function(){var $container=$(''+''+''+'');$container.attr('dir',this.options.get('dir'));this.$container=$container;this.$container.addClass('select2-container--'+this.options.get('theme'));$container.data('element',this.$element);return $container;};return Select2;});S2.define('select2/compat/utils',['jquery'],function($){function syncCssClasses($dest,$src,adapter){var classes,replacements=[],adapted;classes=$.trim($dest.attr('class'));if(classes){classes=''+classes;$(classes.split(/\s+/)).each(function(){if(this.indexOf('select2-')===0){replacements.push(this);}});} +classes=$.trim($src.attr('class'));if(classes){classes=''+classes;$(classes.split(/\s+/)).each(function(){if(this.indexOf('select2-')!==0){adapted=adapter(this);if(adapted!=null){replacements.push(adapted);}}});} +$dest.attr('class',replacements.join(' '));} +return{syncCssClasses:syncCssClasses};});S2.define('select2/compat/containerCss',['jquery','./utils'],function($,CompatUtils){function _containerAdapter(clazz){return null;} +function ContainerCSS(){} +ContainerCSS.prototype.render=function(decorated){var $container=decorated.call(this);var containerCssClass=this.options.get('containerCssClass')||'';if($.isFunction(containerCssClass)){containerCssClass=containerCssClass(this.$element);} +var containerCssAdapter=this.options.get('adaptContainerCssClass');containerCssAdapter=containerCssAdapter||_containerAdapter;if(containerCssClass.indexOf(':all:')!==-1){containerCssClass=containerCssClass.replace(':all:','');var _cssAdapter=containerCssAdapter;containerCssAdapter=function(clazz){var adapted=_cssAdapter(clazz);if(adapted!=null){return adapted+' '+clazz;} +return clazz;};} +var containerCss=this.options.get('containerCss')||{};if($.isFunction(containerCss)){containerCss=containerCss(this.$element);} +CompatUtils.syncCssClasses($container,this.$element,containerCssAdapter);$container.css(containerCss);$container.addClass(containerCssClass);return $container;};return ContainerCSS;});S2.define('select2/compat/dropdownCss',['jquery','./utils'],function($,CompatUtils){function _dropdownAdapter(clazz){return null;} +function DropdownCSS(){} +DropdownCSS.prototype.render=function(decorated){var $dropdown=decorated.call(this);var dropdownCssClass=this.options.get('dropdownCssClass')||'';if($.isFunction(dropdownCssClass)){dropdownCssClass=dropdownCssClass(this.$element);} +var dropdownCssAdapter=this.options.get('adaptDropdownCssClass');dropdownCssAdapter=dropdownCssAdapter||_dropdownAdapter;if(dropdownCssClass.indexOf(':all:')!==-1){dropdownCssClass=dropdownCssClass.replace(':all:','');var _cssAdapter=dropdownCssAdapter;dropdownCssAdapter=function(clazz){var adapted=_cssAdapter(clazz);if(adapted!=null){return adapted+' '+clazz;} +return clazz;};} +var dropdownCss=this.options.get('dropdownCss')||{};if($.isFunction(dropdownCss)){dropdownCss=dropdownCss(this.$element);} +CompatUtils.syncCssClasses($dropdown,this.$element,dropdownCssAdapter);$dropdown.css(dropdownCss);$dropdown.addClass(dropdownCssClass);return $dropdown;};return DropdownCSS;});S2.define('select2/compat/initSelection',['jquery'],function($){function InitSelection(decorated,$element,options){if(options.get('debug')&&window.console&&console.warn){console.warn('Select2: The `initSelection` option has been deprecated in favor'+' of a custom data adapter that overrides the `current` method. '+'This method is now called multiple times instead of a single '+'time when the instance is initialized. Support will be removed '+'for the `initSelection` option in future versions of Select2');} +this.initSelection=options.get('initSelection');this._isInitialized=false;decorated.call(this,$element,options);} +InitSelection.prototype.current=function(decorated,callback){var self=this;if(this._isInitialized){decorated.call(this,callback);return;} +this.initSelection.call(null,this.$element,function(data){self._isInitialized=true;if(!$.isArray(data)){data=[data];} +callback(data);});};return InitSelection;});S2.define('select2/compat/inputData',['jquery'],function($){function InputData(decorated,$element,options){this._currentData=[];this._valueSeparator=options.get('valueSeparator')||',';if($element.prop('type')==='hidden'){if(options.get('debug')&&console&&console.warn){console.warn('Select2: Using a hidden input with Select2 is no longer '+'supported and may stop working in the future. It is recommended '+'to use a ` \ + \ + \ + \ +
          \ +
          ') +$editorContainer.append($td.children()) +$editorContainer.append($editor) +$td.append($editorContainer) +var $editorLink=$('a',$editor) +$editorLink.click(function(){return self.toggleExternalParameterEditor($(this))}).attr('title','Click to enter the external parameter name to load the property value from').tooltip({'container':'body',delay:500}) +var $input=$editor.find('input'),propertyValue=self.propertyValues[property] +$input.on('focus',function(){var $field=$(this) +$('td',$field.closest('table')).removeClass('active') +$field.closest('td').addClass('active')}) +$input.on('change',function(){self.markPropertyChanged(property,true)}) +var matches=[] +if(propertyValue){if(matches=propertyValue.match(/^\{\{([^\}]+)\}\}$/)){var value=$.trim(matches[1]) +if(value.length>0){self.showExternalParameterEditor($editorContainer,$editor,$editorLink,$td,true) +$editor.find('input').val(value) +self.writeProperty(property,null,true)}}}}})} +Inspector.prototype.showExternalParameterEditor=function($container,$editor,$editorLink,$cell,noAnimation){var position=$editor.position() +$('input',$editor).focus() +if(!noAnimation){$editor.css({'left':position.left+'px','right':0})}else{$editor.css('right',0)} +setTimeout(function(){$editor.css('left',0) +$cell.scrollTop(0)},0) +$container.addClass('editor-visible') +$editorLink.attr('data-original-title','Click to enter the property value') +this.toggleCellEditorVisibility($cell,false) +$editor.find('input').attr('tabindex',0)} +Inspector.prototype.toggleExternalParameterEditor=function($editorLink){var $container=$editorLink.closest('.external-param-editor-container'),$editor=$('.external-editor',$container),$cell=$editorLink.closest('td'),self=this +$editorLink.tooltip('hide') +if(!$container.hasClass('editor-visible')){self.showExternalParameterEditor($container,$editor,$editorLink,$cell)}else{var left=$container.width() +$editor.css('left',left+'px') +setTimeout(function(){$editor.css({'left':'auto','right':'30px'}) +$container.removeClass('editor-visible') +$container.closest('td').removeClass('active') +var property=$container.closest('tr').data('property'),propertyEditor=self.findEditor(property) +if(propertyEditor&&propertyEditor.onHideExternalParameterEditor!==undefined) +propertyEditor.onHideExternalParameterEditor()},200) +$editorLink.attr('data-original-title','Click to enter the external parameter name to load the property value from') +$editor.find('input').attr('tabindex',-1) +self.toggleCellEditorVisibility($cell,true)} +return false} +Inspector.prototype.toggleCellEditorVisibility=function($cell,show){var $container=$('.external-param-editor-container',$cell) +$container.children().each(function(){var $el=$(this) +if($el.hasClass('external-editor')) +return +if(show) +$el.removeClass('hide') +else{var height=$cell.data('inspector-cell-height') +if(!height){height=$cell.height() +$cell.data('inspector-cell-height',height)} +$container.css('height',height+'px') +$el.addClass('hide')}})} +Inspector.prototype.preprocessConfig=function(){var fields=[],result={hasGroups:false,properties:[]},groupIndex=0 +function findGroup(title){var groups=$.grep(fields,function(item){return item.itemType!==undefined&&item.itemType=='group'&&item.title==title}) +if(groups.length>0) +return groups[0] +return null} +$.each(this.config,function(){this.itemType='property' +if(this.group===undefined) +fields.push(this) +else{var group=findGroup(this.group) +if(!group){group={itemType:'group',title:this.group,properties:[],groupIndex:groupIndex} +groupIndex++ +fields.push(group)} +this.groupIndex=group.groupIndex +group.properties.push(this)}}) +$.each(fields,function(){result.properties.push(this) +if(this.itemType=='group'){result.hasGroups=true +$.each(this.properties,function(){result.properties.push(this)}) +delete this.properties}}) +return result} +Inspector.prototype.toggleGroup=function(link,$container){var $link=$(link),groupIndex=$link.data('group-index'),propertyRows=$('tr[data-group-index='+groupIndex+']',$container),duration=Math.round(100/propertyRows.length),collapse=true,statuses=this.loadGroupExpandedStatuses(),title=$('span.title-element',$link.closest('tr')).attr('title') +if($link.hasClass('expanded')){$link.removeClass('expanded') +statuses[title]=false}else{$link.addClass('expanded') +collapse=false +statuses[title]=true} +propertyRows.each(function(index){var self=$(this) +setTimeout(function(){self.toggleClass('collapsed',collapse) +self.toggleClass('expanded',!collapse)},index*duration)}) +this.writeGroupExpandedStatuses(statuses)} +Inspector.prototype.loadGroupExpandedStatuses=function(){var statuses=this.$el.data('inspector-group-statuses') +return statuses!==undefined?JSON.parse(statuses):{}} +Inspector.prototype.writeGroupExpandedStatuses=function(statuses){this.$el.data('inspector-group-statuses',JSON.stringify(statuses))} +Inspector.prototype.groupExpanded=function(title){var statuses=this.loadGroupExpandedStatuses() +if(statuses[title]!==undefined) +return statuses[title] +return false} +Inspector.prototype.normalizePropertyCode=function(code){var lowerCaseCode=code.toLowerCase() +for(var index in this.config){var propertyInfo=this.config[index] +if(propertyInfo.property.toLowerCase()==lowerCaseCode) +return propertyInfo.property} +return code} +Inspector.prototype.initProperties=function(){if(!this.propertyValuesField.length){var properties={},attributes=this.$el.get(0).attributes +for(var i=0,len=attributes.length;i',data)} +InspectorEditorString.prototype.validate=function(){var val=$.trim($(this.selector).val()) +if(this.fieldDef.required&&val.length===0) +return this.fieldDef.validationMessage||'Required fields were left blank.' +if(this.fieldDef.validationPattern===undefined) +return +var re=new RegExp(this.fieldDef.validationPattern,'m') +if(!val.match(re)) +return this.fieldDef.validationMessage} +InspectorEditorString.prototype.focus=function(){$(this.selector).focus() +$(this.selector).closest('td').scrollLeft(0)} +$.oc.inspector.editors.inspectorEditorString=InspectorEditorString;var InspectorEditorCheckbox=function(editorId,inspector,fieldDef){this.inspector=inspector +this.fieldDef=fieldDef +this.editorId=editorId +this.selector='#'+this.editorId+' input' +Base.call(this) +$(document).on('change',this.selector,this.proxy(this.applyValue))} +InspectorEditorCheckbox.prototype=Object.create(BaseProto) +InspectorEditorCheckbox.prototype.constructor=InspectorEditorCheckbox +InspectorEditorCheckbox.prototype.dispose=function(){$(document).off('change',this.selector,this.proxy(this.applyValue)) +this.inspector=null +this.fieldDef=null +this.editorId=null +this.selector=null +BaseProto.dispose.call(this)} +InspectorEditorCheckbox.prototype.applyValue=function(){this.inspector.writeProperty(this.fieldDef.property,$(this.selector).get(0).checked?1:0)} +InspectorEditorCheckbox.prototype.renderEditor=function(){var self=this,data={id:this.editorId,cbId:this.editorId+'-cb',title:this.fieldDef.title} +return Mustache.render(this.getTemplate(),data)} +InspectorEditorCheckbox.prototype.init=function(){var isChecked=this.inspector.readProperty(this.fieldDef.property,true) +if(isChecked===undefined){if(this.fieldDef.default!==undefined){isChecked=this.normalizeCheckedValue(this.fieldDef.default)}}else{isChecked=this.normalizeCheckedValue(isChecked)} +$(this.selector).prop('checked',isChecked)} +InspectorEditorCheckbox.prototype.normalizeCheckedValue=function(value){if(value=='0'||value=='false') +return false +return value} +InspectorEditorCheckbox.prototype.focus=function(){$(this.selector).closest('div').focus()} +InspectorEditorCheckbox.prototype.getTemplate=function(){return' \ + \ +
          \ + \ + \ +
          \ + \ + ';} +$.oc.inspector.editors.inspectorEditorCheckbox=InspectorEditorCheckbox;var InspectorEditorDropdown=function(editorId,inspector,fieldDef){this.inspector=inspector +this.fieldDef=fieldDef +this.editorId=editorId +this.selector='#'+this.editorId+' select' +this.dynamicOptions=this.fieldDef.options?false:true +this.initialization=false +Base.call(this) +$(document).on('change',this.selector,this.proxy(this.applyValue))} +InspectorEditorDropdown.prototype=Object.create(BaseProto) +InspectorEditorDropdown.prototype.constructor=InspectorEditorDropdown +InspectorEditorDropdown.prototype.dispose=function(){$(document).off('change',this.selector,this.proxy(this.applyValue)) +var $element=$(this.selector) +if($element.data('select2')!=null){$element.select2('close') +$element.select2('destroy')} +this.inspector=null +this.fieldDef=null +this.editorId=null +this.selector=null +BaseProto.dispose.call(this)} +InspectorEditorDropdown.prototype.applyValue=function(){this.inspector.writeProperty(this.fieldDef.property,$(this.selector).val(),this.initialization)} +InspectorEditorDropdown.prototype.renderEditor=function(){var +self=this,data={id:this.editorId,value:$.trim(this.inspector.readProperty(this.fieldDef.property)),selectId:this.editorId+'-select',defaultOption:function(){return function(text,render){if(self.fieldDef.placeholder==undefined) +return'' +if(!Modernizr.touch) +return''}}} +if(this.fieldDef.options){var options=[] +if(this.fieldDef.placeholder!==undefined&&Modernizr.touch) +options.push({value:null,title:this.fieldDef.placeholder}) +$.each(this.fieldDef.options,function(value,title){options.push({value:value,title:title})}) +data.options=options} +return Mustache.render(this.getTemplate(),data)} +InspectorEditorDropdown.prototype.getTemplate=function(){return' \ + \ + \ + \ + ';} +InspectorEditorDropdown.prototype.init=function(){var value=this.inspector.readProperty(this.fieldDef.property,true) +if(value===undefined) +value=this.inspector.getDefaultValue(this.fieldDef.property) +$(this.selector).val(value) +if(!Modernizr.touch){var options={dropdownCssClass:'ocInspectorDropdown'} +if(this.fieldDef.placeholder!==undefined) +options.placeholder=this.fieldDef.placeholder +$(this.selector).select2(options)} +if(this.dynamicOptions){if(!Modernizr.touch){this.indicatorContainer=$('.select2-container',$(this.selector).closest('td')) +this.indicatorContainer.addClass('loading-indicator-container').addClass('size-small')} +this.loadOptions(true)} +if(this.fieldDef.depends) +this.inspector.$el.on('propertyChanged.oc.Inspector',$.proxy(this.onDependencyChanged,this))} +InspectorEditorDropdown.prototype.onDependencyChanged=function(ev,property){if($.inArray(property,this.fieldDef.depends)===-1) +return +var self=this,dependencyValues=this.getDependencyValues() +if(this.prevDependencyValues===undefined||this.prevDependencyValues!=dependencyValues) +this.loadOptions()} +InspectorEditorDropdown.prototype.saveDependencyValues=function(){this.prevDependencyValues=this.getDependencyValues()} +InspectorEditorDropdown.prototype.getDependencyValues=function(){var dependencyValues='',self=this +$.each(this.fieldDef.depends,function(index,masterProperty){dependencyValues+=masterProperty+':'+self.inspector.readProperty(masterProperty)+'-'}) +return dependencyValues} +InspectorEditorDropdown.prototype.showLoadingIndicator=function(){if(!Modernizr.touch) +this.indicatorContainer.loadIndicator()} +InspectorEditorDropdown.prototype.hideLoadingIndicator=function(){if(!Modernizr.touch) +this.indicatorContainer.loadIndicator('hide')} +InspectorEditorDropdown.prototype.loadOptions=function(initialization){var $form=$(this.selector).closest('form'),data=this.inspector.propertyValues,$select=$(this.selector),currentValue=this.inspector.readProperty(this.fieldDef.property,true),self=this +if(currentValue===undefined) +currentValue=this.inspector.getDefaultValue(this.fieldDef.property) +for(var index in this.inspector.config){var propertyInfo=this.inspector.config[index] +if(propertyInfo.itemType=='property'){if(data[propertyInfo.property]===undefined) +data[propertyInfo.property]=this.inspector.getDefaultValue(propertyInfo.property)}} +if(this.fieldDef.depends) +this.saveDependencyValues() +data.inspectorProperty=this.fieldDef.property +data.inspectorClassName=this.inspector.options.inspectorClass +this.showLoadingIndicator() +$form.request('onInspectableGetOptions',{data:data,success:function(data){$('option',$select).remove() +if(self.fieldDef.placeholder!==undefined) +$select.append($('')) +if(data.options) +$.each(data.options,function(key,obj){$select.append($('').attr('value',obj.value).text(obj.title))}) +var hasOption=$('option[value="'+currentValue+'"]',$select).length>0 +if(hasOption) +$select.val(currentValue) +else +$('option:first-child',$select).attr("selected","selected");self.initialization=initialization +$select.trigger('change') +self.initialization=false +self.hideLoadingIndicator()},error:function(jqXHR,textStatus,errorThrown){alert(jqXHR.responseText.length?jqXHR.responseText:jqXHR.statusText) +self.hideLoadingIndicator()}})} +InspectorEditorDropdown.prototype.onHideExternalParameterEditor=function(){this.loadOptions(false)} +$.oc.inspector.editors.inspectorEditorDropdown=InspectorEditorDropdown;function initInspector($element){var inspector=$element.data('oc.inspector') +if(inspector===undefined){inspector=new Inspector($element.get(0),$element.data()) +inspector.loadConfiguration(function(){inspector.init()}) +$element.data('oc.inspector',inspector)}} +$.fn.inspector=function(option){return this.each(function(){initInspector($(this))})} +$(document).on('click','[data-inspectable]',function(){var $this=$(this) +if($this.data('oc.inspectorVisible')) +return false +initInspector($this) +return false})}(window.jQuery);(function($){$(document).on('keydown','div.custom-checkbox',function(e){if(e.keyCode==32) +e.preventDefault()}) +$(document).on('keyup','div.custom-checkbox',function(e){if(e.keyCode==32){var $cb=$('input',this) +if($cb.data('oc-space-timestamp')==e.timeStamp) +return +$cb.get(0).checked=!$cb.get(0).checked +$cb.data('oc-space-timestamp',e.timeStamp) +$cb.trigger('change') +return false}})})(jQuery);+function($){'use strict';var backdrop='.dropdown-backdrop' +var toggle='[data-toggle=dropdown]' +var Dropdown=function(element){$(element).on('click.bs.dropdown',this.toggle)} +Dropdown.prototype.toggle=function(e){var $this=$(this) +if($this.is('.disabled, :disabled'))return +var $parent=getParent($this) +var isActive=$parent.hasClass('open') +clearMenus() +if(!isActive){if('ontouchstart'in document.documentElement&&!$parent.closest('.navbar-nav').length){$('