2016-07-21 14:35:23 +02:00
/ * !
* jsoneditor . js
*
* @ brief
* JSONEditor is a web - based tool to view , edit , and format JSON .
* It shows data a clear , editable treeview .
*
* Supported browsers : Chrome , Firefox , Safari , Opera , Internet Explorer 8 +
*
* @ license
* Licensed under the Apache License , Version 2.0 ( the "License" ) ; you may not
* use this file except in compliance with the License . You may obtain a copy
* of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS , WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied . See the
* License for the specific language governing permissions and limitations under
* the License .
*
* Copyright ( c ) 2011 - 2015 Jos de Jong , http : //jsoneditoronline.org
*
* @ author Jos de Jong , < wjosdejong @ gmail . com >
* @ version 4.2 . 1
* @ date 2015 - 06 - 13
* /
! function ( e , t ) { "object" == typeof exports && "object" == typeof module ? module . exports = t ( ) : "function" == typeof define && define . amd ? define ( t ) : "object" == typeof exports ? exports . JSONEditor = t ( ) : e . JSONEditor = t ( ) } ( this , function ( ) { return function ( e ) { function t ( n ) { if ( i [ n ] ) return i [ n ] . exports ; var o = i [ n ] = { exports : { } , id : n , loaded : ! 1 } ; return e [ n ] . call ( o . exports , o , o . exports , t ) , o . loaded = ! 0 , o . exports } var i = { } ; return t . m = e , t . c = i , t . p = "" , t ( 0 ) } ( [ function ( e , t , i ) { function n ( e , t , i ) { if ( ! ( this instanceof n ) ) throw new Error ( 'JSONEditor constructor called without "new".' ) ; var o = s . getInternetExplorerVersion ( ) ; if ( - 1 != o && 9 > o ) throw new Error ( "Unsupported browser, IE9 or newer required. Please install the newest version of your browser." ) ; arguments . length && this . _create ( e , t , i ) } var o = i ( 1 ) , r = i ( 2 ) , s = i ( 3 ) ; n . modes = { } , n . prototype . _create = function ( e , t , i ) { this . container = e , this . options = t || { } , this . json = i || { } ; var n = this . options . mode || "tree" ; this . setMode ( n ) } , n . prototype . _delete = function ( ) { } , n . prototype . set = function ( e ) { this . json = e } , n . prototype . get = function ( ) { return this . json } , n . prototype . setText = function ( e ) { this . json = s . parse ( e ) } , n . prototype . getText = function ( ) { return JSON . stringify ( this . json ) } , n . prototype . setName = function ( e ) { this . options || ( this . options = { } ) , this . options . name = e } , n . prototype . getName = function ( ) { return this . options && this . options . name } , n . prototype . setMode = function ( e ) { var t , i , o = this . container , r = s . extend ( { } , this . options ) ; r . mode = e ; var a = n . modes [ e ] ; if ( ! a ) throw new Error ( 'Unknown mode "' + r . mode + '"' ) ; try { var l = "text" == a . data ; if ( i = this . getName ( ) , t = this [ l ? "getText" : "get" ] ( ) , this . _delete ( ) , s . clear ( this ) , s . extend ( this , a . mixin ) , this . create ( o , r ) , this . setName ( i ) , this [ l ? "setText" : "set" ] ( t ) , "function" == typeof a . load ) try { a . load . call ( this ) } catch ( c ) { } } catch ( c ) { this . _onError ( c ) } } , n . prototype . _onError = function ( e ) { if ( "function" == typeof this . onError && ( s . log ( "WARNING: JSONEditor.onError is deprecated. Use options.error instead." ) , this . onError ( e ) ) , ! this . options || "function" != typeof this . options . error ) throw e ; this . options . error ( e ) } , n . registerMode = function ( e ) { var t , i ; if ( s . isArray ( e ) ) for ( t = 0 ; t < e . length ; t ++ ) n . registerMode ( e [ t ] ) ; else { if ( ! ( "mode" in e ) ) throw new Error ( 'Property "mode" missing' ) ; if ( ! ( "mixin" in e ) ) throw new Error ( 'Property "mixin" missing' ) ; if ( ! ( "data" in e ) ) throw new Error ( 'Property "data" missing' ) ; var o = e . mode ; if ( o in n . modes ) throw new Error ( 'Mode "' + o + '" already registered' ) ; if ( "function" != typeof e . mixin . create ) throw new Error ( 'Required function "create" missing on mixin' ) ; var r = [ "setMode" , "registerMode" , "modes" ] ; for ( t = 0 ; t < r . length ; t ++ ) if ( i = r [ t ] , i in e . mixin ) throw new Error ( 'Reserved property "' + i + '" not allowed in mixin' ) ; n . modes [ o ] = e } } , n . registerMode ( o ) , n . registerMode ( r ) , e . exports = n } , function ( e , t , i ) { var n = i ( 4 ) , o = i ( 5 ) , r = i ( 6 ) , s = i ( 7 ) , a = i ( 8 ) , l = i ( 3 ) , c = { } ; c . create = function ( e , t ) { if ( ! e ) throw new Error ( "No container element provided." ) ; this . container = e , this . dom = { } , this . highlighter = new n , this . selection = void 0 , this . _setOptions ( t ) , this . options . history && "view" !== this . options . mode && ( this . history = new o ( this ) ) , this . _createFrame ( ) , this . _createTable ( ) } , c . _delete = function ( ) { this . frame && this . container && this . frame . parentNode == this . container && this . container . removeChild ( this . frame ) } , c . _setOptions = function ( e ) { if ( this . options = { search : ! 0 , history : ! 0 , mode : "tree" , name : void 0 } , e ) for ( var t in e ) e . hasOwnProperty ( t ) && ( this . options [ t ] = e [ t ] ) } ; var h = void 0 , u = null ; c . set = function ( e , t ) { if ( t && ( l . log ( 'Warning: second parameter "name" is deprecated. Use setName(name) instead.' ) , this . options . name = t ) , e instanceof Function || void 0 === e ) this . clear ( ) ; else { this . content . removeChild ( this . table ) ; var i = { field : this . options . name , value : e } , n = new s ( this , i ) ; this . _setRoot ( n ) ; var o = ! 1 ; this . node . expand ( o ) , this . content . appendChild ( this . table ) } this . history && this . history . clear ( ) } , c . get = function ( ) { return h && h . blur ( ) , this . node ? this . node . getValue ( ) : void 0 } , c . getText = function ( ) { return JSON . stringify ( this . get ( ) ) } , c . setText = function ( e ) { this . set ( l . parse ( e ) ) } , c . setName = function ( e ) { this . options . name = e , this . node && this . node . updateField ( this . options . name ) } , c . getName = function ( ) { return this . options . name } , c . focus = function ( ) { var e = this . content . querySelecto
break ; case "field" : t . field && this . fieldEditable ? ( t . field . focus ( ) , s . selectContentEditable ( t . field ) ) : t . value && ! this . _hasChilds ( ) ? ( t . value . focus ( ) , s . selectContentEditable ( t . value ) ) : this . _hasChilds ( ) ? t . expand . focus ( ) : t . menu . focus ( ) ; break ; case "value" : default : t . value && ! this . _hasChilds ( ) ? ( t . value . focus ( ) , s . selectContentEditable ( t . value ) ) : t . field && this . fieldEditable ? ( t . field . focus ( ) , s . selectContentEditable ( t . field ) ) : this . _hasChilds ( ) ? t . expand . focus ( ) : t . menu . focus ( ) } } } , n . select = function ( e ) { setTimeout ( function ( ) { s . selectContentEditable ( e ) } , 0 ) } , n . prototype . blur = function ( ) { this . _getDomValue ( ! 1 ) , this . _getDomField ( ! 1 ) } , n . prototype . _duplicate = function ( e ) { var t = e . clone ( ) ; return this . insertAfter ( t , e ) , t } , n . prototype . containsNode = function ( e ) { if ( this == e ) return ! 0 ; var t = this . childs ; if ( t ) for ( var i = 0 , n = t . length ; n > i ; i ++ ) if ( t [ i ] . containsNode ( e ) ) return ! 0 ; return ! 1 } , n . prototype . _move = function ( e , t ) { if ( e != t ) { if ( e . containsNode ( this ) ) throw new Error ( "Cannot move a field into a child of itself" ) ; e . parent && e . parent . removeChild ( e ) ; var i = e . clone ( ) ; e . clearDom ( ) , t ? this . insertBefore ( i , t ) : this . appendChild ( i ) } } , n . prototype . removeChild = function ( e ) { if ( this . childs ) { var t = this . childs . indexOf ( e ) ; if ( - 1 != t ) { e . hide ( ) , delete e . searchField , delete e . searchValue ; var i = this . childs . splice ( t , 1 ) [ 0 ] ; return this . updateDom ( { updateIndexes : ! 0 } ) , i } } return void 0 } , n . prototype . _remove = function ( e ) { this . removeChild ( e ) } , n . prototype . changeType = function ( e ) { var t = this . type ; if ( t != e ) { if ( "string" != e && "auto" != e || "string" != t && "auto" != t ) { var i , n = this . dom . tr ? this . dom . tr . parentNode : void 0 ; i = this . expanded ? this . getAppend ( ) : this . getDom ( ) ; var o = i && i . parentNode ? i . nextSibling : void 0 ; this . hide ( ) , this . clearDom ( ) , this . type = e , "object" == e ? ( this . childs || ( this . childs = [ ] ) , this . childs . forEach ( function ( e , t ) { e . clearDom ( ) , delete e . index , e . fieldEditable = ! 0 , void 0 == e . field && ( e . field = "" ) } ) , ( "string" == t || "auto" == t ) && ( this . expanded = ! 0 ) ) : "array" == e ? ( this . childs || ( this . childs = [ ] ) , this . childs . forEach ( function ( e , t ) { e . clearDom ( ) , e . fieldEditable = ! 1 , e . index = t } ) , ( "string" == t || "auto" == t ) && ( this . expanded = ! 0 ) ) : this . expanded = ! 1 , n && ( o ? n . insertBefore ( this . getDom ( ) , o ) : n . appendChild ( this . getDom ( ) ) ) , this . showChilds ( ) } else this . type = e ; ( "auto" == e || "string" == e ) && ( "string" == e ? this . value = String ( this . value ) : this . value = this . _stringCast ( String ( this . value ) ) , this . focus ( ) ) , this . updateDom ( { updateIndexes : ! 0 } ) } } , n . prototype . _getDomValue = function ( e ) { if ( this . dom . value && "array" != this . type && "object" != this . type && ( this . valueInnerText = s . getInnerText ( this . dom . value ) ) , void 0 != this . valueInnerText ) try { var t ; if ( "string" == this . type ) t = this . _unescapeHTML ( this . valueInnerText ) ; else { var i = this . _unescapeHTML ( this . valueInnerText ) ; t = this . _stringCast ( i ) } if ( t !== this . value ) { var n = this . value ; this . value = t , this . editor . _onAction ( "editValue" , { node : this , oldValue : n , newValue : t , oldSelection : this . editor . selection , newSelection : this . editor . getSelection ( ) } ) } } catch ( o ) { if ( this . value = void 0 , e !== ! 0 ) throw o } } , n . prototype . _updateDomValue = function ( ) { var e = this . dom . value ; if ( e ) { var t = this . value , i = "auto" == this . type ? s . type ( t ) : this . type , n = "string" == i && s . isUrl ( t ) , o = "" ; o = n && ! this . editable . value ? "" : "string" == i ? "green" : "number" == i ? "red" : "boolean" == i ? "darkorange" : this . _hasChilds ( ) ? "" : null === t ? "#004ED0" : "black" , e . style . color = o ; var r = "" == String ( this . value ) && "array" != this . type && "object" != this . type ; if ( r ? s . addClassName ( e , "empty" ) : s . removeClassName ( e , "empty" ) , n ? s . addClassName ( e , "url" ) : s . removeClassName ( e , "url" ) , "array" == i || "object" == i ) { var a = this . childs ? this . childs . length : 0 ; e . title = this . type + " containing " + a + " items" } else "string" == i && s . isUrl ( t ) ? this . editable . value && ( e . title = "Ctrl+Click or Ctrl+Enter to open url in new window" ) : e . title = "" ; this . searchValueActive ? s . addClassName ( e , "highlight-active" ) : s . removeClassName ( e , "highlight-active" ) , this . searchValue ? s . addClassName ( e , "highlight" ) : s . removeClassName ( e , "highlight" ) , s . stripFormatting ( e ) } } , n . prototype . _updateDomField = function ( ) { var e = this . dom . field ; if ( e ) { var t = "" == String ( this . field ) && "array" != this . parent . type ; t ? s . addClassName ( e , "empty" ) : s . removeClassName ( e , "empty" ) , this . searchFieldActive ? s . addClassName ( e , "highlight-active" ) : s . removeClassName ( e , "highlight-active" ) , t
"click" == t && i == n . menu ) { var s = this . editor . highlighter ; s . highlight ( this . parent ) , s . lock ( ) , o . addClassName ( n . menu , "selected" ) , this . showContextMenu ( n . menu , function ( ) { o . removeClassName ( n . menu , "selected" ) , s . unlock ( ) , s . unhighlight ( ) } ) } "keydown" == t && this . onKeyDown ( e ) } , t } var o = i ( 3 ) , r = i ( 10 ) ; e . exports = n } , function ( e , t , i ) { var n = function ( ) { var e = { trace : function ( ) { } , yy : { } , symbols _ : { error : 2 , JSONString : 3 , STRING : 4 , JSONNumber : 5 , NUMBER : 6 , JSONNullLiteral : 7 , NULL : 8 , JSONBooleanLiteral : 9 , TRUE : 10 , FALSE : 11 , JSONText : 12 , JSONValue : 13 , EOF : 14 , JSONObject : 15 , JSONArray : 16 , "{" : 17 , "}" : 18 , JSONMemberList : 19 , JSONMember : 20 , ":" : 21 , "," : 22 , "[" : 23 , "]" : 24 , JSONElementList : 25 , $accept : 0 , $end : 1 } , terminals _ : { 2 : "error" , 4 : "STRING" , 6 : "NUMBER" , 8 : "NULL" , 10 : "TRUE" , 11 : "FALSE" , 14 : "EOF" , 17 : "{" , 18 : "}" , 21 : ":" , 22 : "," , 23 : "[" , 24 : "]" } , productions _ : [ 0 , [ 3 , 1 ] , [ 5 , 1 ] , [ 7 , 1 ] , [ 9 , 1 ] , [ 9 , 1 ] , [ 12 , 2 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 13 , 1 ] , [ 15 , 2 ] , [ 15 , 3 ] , [ 20 , 3 ] , [ 19 , 1 ] , [ 19 , 3 ] , [ 16 , 2 ] , [ 16 , 3 ] , [ 25 , 1 ] , [ 25 , 3 ] ] , performAction : function ( e , t , i , n , o , r , s ) { var a = r . length - 1 ; switch ( o ) { case 1 : this . $ = e . replace ( /\\(\\|")/g , "$1" ) . replace ( /\\n/g , "\n" ) . replace ( /\\r/g , "\r" ) . replace ( /\\t/g , " " ) . replace ( /\\v/g , " " ) . replace ( /\\f/g , "\f" ) . replace ( /\\b/g , "\b" ) ; break ; case 2 : this . $ = Number ( e ) ; break ; case 3 : this . $ = null ; break ; case 4 : this . $ = ! 0 ; break ; case 5 : this . $ = ! 1 ; break ; case 6 : return this . $ = r [ a - 1 ] ; case 13 : this . $ = { } ; break ; case 14 : this . $ = r [ a - 1 ] ; break ; case 15 : this . $ = [ r [ a - 2 ] , r [ a ] ] ; break ; case 16 : this . $ = { } , this . $ [ r [ a ] [ 0 ] ] = r [ a ] [ 1 ] ; break ; case 17 : this . $ = r [ a - 2 ] , r [ a - 2 ] [ r [ a ] [ 0 ] ] = r [ a ] [ 1 ] ; break ; case 18 : this . $ = [ ] ; break ; case 19 : this . $ = r [ a - 1 ] ; break ; case 20 : this . $ = [ r [ a ] ] ; break ; case 21 : this . $ = r [ a - 2 ] , r [ a - 2 ] . push ( r [ a ] ) } } , table : [ { 3 : 5 , 4 : [ 1 , 12 ] , 5 : 6 , 6 : [ 1 , 13 ] , 7 : 3 , 8 : [ 1 , 9 ] , 9 : 4 , 10 : [ 1 , 10 ] , 11 : [ 1 , 11 ] , 12 : 1 , 13 : 2 , 15 : 7 , 16 : 8 , 17 : [ 1 , 14 ] , 23 : [ 1 , 15 ] } , { 1 : [ 3 ] } , { 14 : [ 1 , 16 ] } , { 14 : [ 2 , 7 ] , 18 : [ 2 , 7 ] , 22 : [ 2 , 7 ] , 24 : [ 2 , 7 ] } , { 14 : [ 2 , 8 ] , 18 : [ 2 , 8 ] , 22 : [ 2 , 8 ] , 24 : [ 2 , 8 ] } , { 14 : [ 2 , 9 ] , 18 : [ 2 , 9 ] , 22 : [ 2 , 9 ] , 24 : [ 2 , 9 ] } , { 14 : [ 2 , 10 ] , 18 : [ 2 , 10 ] , 22 : [ 2 , 10 ] , 24 : [ 2 , 10 ] } , { 14 : [ 2 , 11 ] , 18 : [ 2 , 11 ] , 22 : [ 2 , 11 ] , 24 : [ 2 , 11 ] } , { 14 : [ 2 , 12 ] , 18 : [ 2 , 12 ] , 22 : [ 2 , 12 ] , 24 : [ 2 , 12 ] } , { 14 : [ 2 , 3 ] , 18 : [ 2 , 3 ] , 22 : [ 2 , 3 ] , 24 : [ 2 , 3 ] } , { 14 : [ 2 , 4 ] , 18 : [ 2 , 4 ] , 22 : [ 2 , 4 ] , 24 : [ 2 , 4 ] } , { 14 : [ 2 , 5 ] , 18 : [ 2 , 5 ] , 22 : [ 2 , 5 ] , 24 : [ 2 , 5 ] } , { 14 : [ 2 , 1 ] , 18 : [ 2 , 1 ] , 21 : [ 2 , 1 ] , 22 : [ 2 , 1 ] , 24 : [ 2 , 1 ] } , { 14 : [ 2 , 2 ] , 18 : [ 2 , 2 ] , 22 : [ 2 , 2 ] , 24 : [ 2 , 2 ] } , { 3 : 20 , 4 : [ 1 , 12 ] , 18 : [ 1 , 17 ] , 19 : 18 , 20 : 19 } , { 3 : 5 , 4 : [ 1 , 12 ] , 5 : 6 , 6 : [ 1 , 13 ] , 7 : 3 , 8 : [ 1 , 9 ] , 9 : 4 , 10 : [ 1 , 10 ] , 11 : [ 1 , 11 ] , 13 : 23 , 15 : 7 , 16 : 8 , 17 : [ 1 , 14 ] , 23 : [ 1 , 15 ] , 24 : [ 1 , 21 ] , 25 : 22 } , { 1 : [ 2 , 6 ] } , { 14 : [ 2 , 13 ] , 18 : [ 2 , 13 ] , 22 : [ 2 , 13 ] , 24 : [ 2 , 13 ] } , { 18 : [ 1 , 24 ] , 22 : [ 1 , 25 ] } , { 18 : [ 2 , 16 ] , 22 : [ 2 , 16 ] } , { 21 : [ 1 , 26 ] } , { 14 : [ 2 , 18 ] , 18 : [ 2 , 18 ] , 22 : [ 2 , 18 ] , 24 : [ 2 , 18 ] } , { 22 : [ 1 , 28 ] , 24 : [ 1 , 27 ] } , { 22 : [ 2 , 20 ] , 24 : [ 2 , 20 ] } , { 14 : [ 2 , 14 ] , 18 : [ 2 , 14 ] , 22 : [ 2 , 14 ] , 24 : [ 2 , 14 ] } , { 3 : 20 , 4 : [ 1 , 12 ] , 20 : 29 } , { 3 : 5 , 4 : [ 1 , 12 ] , 5 : 6 , 6 : [ 1 , 13 ] , 7 : 3 , 8 : [ 1 , 9 ] , 9 : 4 , 10 : [ 1 , 10 ] , 11 : [ 1 , 11 ] , 13 : 30 , 15 : 7 , 16 : 8 , 17 : [ 1 , 14 ] , 23 : [ 1 , 15 ] } , { 14 : [ 2 , 19 ] , 18 : [ 2 , 19 ] , 22 : [ 2 , 19 ] , 24 : [ 2 , 19 ] } , { 3 : 5 , 4 : [ 1 , 12 ] , 5 : 6 , 6 : [ 1 , 13 ] , 7 : 3 , 8 : [ 1 , 9 ] , 9 : 4 , 10 : [ 1 , 10 ] , 11 : [ 1 , 11 ] , 13 : 31 , 15 : 7 , 16 : 8 , 17 : [ 1 , 14 ] , 23 : [ 1 , 15 ] } , { 18 : [ 2 , 17 ] , 22 : [ 2 , 17 ] } , { 18 : [ 2 , 15 ] , 22 : [ 2 , 15 ] } , { 22 : [ 2 , 21 ] , 24 : [ 2 , 21 ] } ] , defaultActions : { 16 : [ 2 , 6 ] } , parseError : function ( e , t ) { throw new Error ( e ) } , parse : function ( e ) { function t ( e ) { o . length = o . length - 2 * e , r . length = r . length - e , s . length = s . length - e } function i ( ) { var e ; return e = n . lexer . lex ( ) || 1 , "number" != typeof e && ( e = n . symbols _ [ e ] || e ) , e } var n = this , o = [ 0 ] , r = [ null ] , s = [ ] , a = this . table , l = "" , c = 0 , h = 0 , u = 0 , d = 2 , g = 1 ; this . lexer . setInput ( e ) , this . lexer . yy = this . yy , this . yy . lexer = this . lexer , "undefined" == typeof this . lexer . yylloc && ( this . lexer . yylloc = { } ) ; var f = this . lexer . yylloc ; s . push ( f ) , "function" == typeof this . yy . parseError && ( this . parseError = this . yy . parseError ) ; for ( var p , m , v , A , w , C , E , F , y , b = { } ; ; ) { if ( v = o [ o . length - 1 ] , this . defaultActions [ v ] ? A = this . defaultActions [ v ] : ( null == p && ( p = i ( ) ) , A = a [ v ] && a [ v ] [ p ] ) , "undefined" == typeof A || ! A . length || ! A [ 0 ] ) { if ( ! u ) { y = [ ] ; for ( C in a [ v ] ) this . terminals _ [ C ] && C > 2 && y . push ( "'" + this . terminals _ [ C ] + "'" ) ; var x = "" ; x = this . lexer . showPosition ? "Parse error on line " + ( c + 1 ) + ":\n" + this . lexer . showPosition ( ) + "\nExpecting " + y . join ( ", " ) + ", got '" + this . terminals _ [ p ] + "'" : "Parse error on line " + ( c + 1 ) + ": Unexpected " + ( 1 == p ? "end of input" : "'" + ( this . terminals _ [ p ] || p ) + "'" ) , this . parseError ( x , { text : this . lexer . match , token : this . terminals _ [ p ] || p , line : this . lexer . yylineno , loc : f , expected
e . wheelY = e . deltaY * t || 0 ; break ; case e . DOM _DELTA _LINE : case e . DOM _DELTA _PAGE : e . wheelX = 5 * ( e . deltaX || 0 ) , e . wheelY = 5 * ( e . deltaY || 0 ) } i ( e ) } ) : t . addListener ( e , "DOMMouseScroll" , function ( e ) { e . axis && e . axis == e . HORIZONTAL _AXIS ? ( e . wheelX = 5 * ( e . detail || 0 ) , e . wheelY = 0 ) : ( e . wheelX = 0 , e . wheelY = 5 * ( e . detail || 0 ) ) , i ( e ) } ) } , t . addMultiMouseDownListener = function ( e , i , n , o ) { var s , a , l , c = 0 , h = { 2 : "dblclick" , 3 : "tripleclick" , 4 : "quadclick" } ; t . addListener ( e , "mousedown" , function ( e ) { if ( 0 !== t . getButton ( e ) ? c = 0 : e . detail > 1 ? ( c ++ , c > 4 && ( c = 1 ) ) : c = 1 , r . isIE ) { var u = Math . abs ( e . clientX - s ) > 5 || Math . abs ( e . clientY - a ) > 5 ; ( ! l || u ) && ( c = 1 ) , l && clearTimeout ( l ) , l = setTimeout ( function ( ) { l = null } , i [ c - 1 ] || 600 ) , 1 == c && ( s = e . clientX , a = e . clientY ) } if ( e . _clicks = c , n [ o ] ( "mousedown" , e ) , c > 4 ) c = 0 ; else if ( c > 1 ) return n [ o ] ( h [ c ] , e ) } ) , r . isOldIE && t . addListener ( e , "dblclick" , function ( e ) { c = 2 , l && clearTimeout ( l ) , l = setTimeout ( function ( ) { l = null } , i [ c - 1 ] || 600 ) , n [ o ] ( "mousedown" , e ) , n [ o ] ( h [ c ] , e ) } ) } ; var s = ! r . isMac || ! r . isOpera || "KeyboardEvent" in window ? function ( e ) { return 0 | ( e . ctrlKey ? 1 : 0 ) | ( e . altKey ? 2 : 0 ) | ( e . shiftKey ? 4 : 0 ) | ( e . metaKey ? 8 : 0 ) } : function ( e ) { return 0 | ( e . metaKey ? 1 : 0 ) | ( e . altKey ? 2 : 0 ) | ( e . shiftKey ? 4 : 0 ) | ( e . ctrlKey ? 8 : 0 ) } ; t . getModifierString = function ( e ) { return o . KEY _MODS [ s ( e ) ] } ; var a = null , l = 0 ; if ( t . addCommandKeyListener = function ( e , i ) { var o = t . addListener ; if ( r . isOldGecko || r . isOpera && ! ( "KeyboardEvent" in window ) ) { var s = null ; o ( e , "keydown" , function ( e ) { s = e . keyCode } ) , o ( e , "keypress" , function ( e ) { return n ( i , e , s ) } ) } else { var l = null ; o ( e , "keydown" , function ( e ) { a [ e . keyCode ] = ! 0 ; var t = n ( i , e , e . keyCode ) ; return l = e . defaultPrevented , t } ) , o ( e , "keypress" , function ( e ) { l && ( e . ctrlKey || e . altKey || e . shiftKey || e . metaKey ) && ( t . stopEvent ( e ) , l = null ) } ) , o ( e , "keyup" , function ( e ) { a [ e . keyCode ] = null } ) , a || ( a = Object . create ( null ) , o ( window , "focus" , function ( e ) { a = Object . create ( null ) } ) ) } } , window . postMessage && ! r . isOldIE ) { var c = 1 ; t . nextTick = function ( e , i ) { i = i || window ; var n = "zero-timeout-message-" + c ; t . addListener ( i , "message" , function o ( r ) { r . data == n && ( t . stopPropagation ( r ) , t . removeListener ( i , "message" , o ) , e ( ) ) } ) , i . postMessage ( n , "*" ) } } t . nextFrame = window . requestAnimationFrame || window . mozRequestAnimationFrame || window . webkitRequestAnimationFrame || window . msRequestAnimationFrame || window . oRequestAnimationFrame , t . nextFrame ? t . nextFrame = t . nextFrame . bind ( window ) : t . nextFrame = function ( e ) { setTimeout ( e , 17 ) } } ) , ace . define ( "ace/lib/lang" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; t . last = function ( e ) { return e [ e . length - 1 ] } , t . stringReverse = function ( e ) { return e . split ( "" ) . reverse ( ) . join ( "" ) } , t . stringRepeat = function ( e , t ) { for ( var i = "" ; t > 0 ; ) 1 & t && ( i += e ) , ( t >>= 1 ) && ( e += e ) ; return i } ; var n = /^\s\s*/ , o = /\s\s*$/ ; t . stringTrimLeft = function ( e ) { return e . replace ( n , "" ) } , t . stringTrimRight = function ( e ) { return e . replace ( o , "" ) } , t . copyObject = function ( e ) { var t = { } ; for ( var i in e ) t [ i ] = e [ i ] ; return t } , t . copyArray = function ( e ) { for ( var t = [ ] , i = 0 , n = e . length ; n > i ; i ++ ) e [ i ] && "object" == typeof e [ i ] ? t [ i ] = this . copyObject ( e [ i ] ) : t [ i ] = e [ i ] ; return t } , t . deepCopy = function ( e ) { if ( "object" != typeof e || ! e ) return e ; var i = e . constructor ; if ( i === RegExp ) return e ; var n = i ( ) ; for ( var o in e ) "object" == typeof e [ o ] ? n [ o ] = t . deepCopy ( e [ o ] ) : n [ o ] = e [ o ] ; return n } , t . arrayToMap = function ( e ) { for ( var t = { } , i = 0 ; i < e . length ; i ++ ) t [ e [ i ] ] = 1 ; return t } , t . createMap = function ( e ) { var t = Object . create ( null ) ; for ( var i in e ) t [ i ] = e [ i ] ; return t } , t . arrayRemove = function ( e , t ) { for ( var i = 0 ; i <= e . length ; i ++ ) t === e [ i ] && e . splice ( i , 1 ) } , t . escapeRegExp = function ( e ) { return e . replace ( /([.*+?^${}()|[\]\/\\])/g , "\\$1" ) } , t . escapeHTML = function ( e ) { return e . replace ( /&/g , "&" ) . replace ( /"/g , """ ) . replace ( /'/g , "'" ) . replace ( /</g , "<" ) } , t . getMatchOffsets = function ( e , t ) { var i = [ ] ; return e . replace ( t , function ( e ) { i . push ( { offset : arguments [ arguments . length - 2 ] , length : e . length } ) } ) , i } , t . deferredCall = function ( e ) { var t = null , i = function ( ) { t = null , e ( ) } , n = function ( e ) { return n . cancel ( ) , t = setTimeout ( i , e || 0 ) , n } ; return n . schedule = n , n . call = function ( ) { return this . cancel ( ) , e ( ) , n } , n . cancel = function ( ) { return clearTimeout ( t ) , t = null , n } , n . isPending = function ( ) { return t } , n } , t . delayedCall = function ( e , t ) { var i = null , n = function ( ) { i = null , e ( ) } , o = function ( e ) { null == i && ( i = setTimeout ( n , e || t ) ) } ; return o . delay = function ( e ) { i && clearTimeout ( i ) , i = setTime
} ) } , t . setDefaultValue = function ( e , i , n ) { var o = g [ e ] || ( g [ e ] = { } ) ; o [ i ] && ( o . forwardTo ? t . setDefaultValue ( o . forwardTo , i , n ) : o [ i ] . value = n ) } , t . setDefaultValues = function ( e , i ) { Object . keys ( i ) . forEach ( function ( n ) { t . setDefaultValue ( e , n , i [ n ] ) } ) } } ) , ace . define ( "ace/mouse/mouse_handler" , [ "require" , "exports" , "module" , "ace/lib/event" , "ace/lib/useragent" , "ace/mouse/default_handlers" , "ace/mouse/default_gutter_handler" , "ace/mouse/mouse_event" , "ace/mouse/dragdrop_handler" , "ace/config" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/event" ) , o = e ( "../lib/useragent" ) , r = e ( "./default_handlers" ) . DefaultHandlers , s = e ( "./default_gutter_handler" ) . GutterHandler , a = e ( "./mouse_event" ) . MouseEvent , l = e ( "./dragdrop_handler" ) . DragdropHandler , c = e ( "../config" ) , h = function ( e ) { var t = this ; this . editor = e , new r ( this ) , new s ( this ) , new l ( this ) ; var i = function ( t ) { ! e . isFocused ( ) && e . textInput && e . textInput . moveToMouse ( t ) , e . focus ( ) } , a = e . renderer . getMouseEventTarget ( ) ; n . addListener ( a , "click" , this . onMouseEvent . bind ( this , "click" ) ) , n . addListener ( a , "mousemove" , this . onMouseMove . bind ( this , "mousemove" ) ) , n . addMultiMouseDownListener ( a , [ 400 , 300 , 250 ] , this , "onMouseEvent" ) , e . renderer . scrollBarV && ( n . addMultiMouseDownListener ( e . renderer . scrollBarV . inner , [ 400 , 300 , 250 ] , this , "onMouseEvent" ) , n . addMultiMouseDownListener ( e . renderer . scrollBarH . inner , [ 400 , 300 , 250 ] , this , "onMouseEvent" ) , o . isIE && ( n . addListener ( e . renderer . scrollBarV . element , "mousedown" , i ) , n . addListener ( e . renderer . scrollBarH . element , "mousemove" , i ) ) ) , n . addMouseWheelListener ( e . container , this . onMouseWheel . bind ( this , "mousewheel" ) ) ; var c = e . renderer . $gutter ; n . addListener ( c , "mousedown" , this . onMouseEvent . bind ( this , "guttermousedown" ) ) , n . addListener ( c , "click" , this . onMouseEvent . bind ( this , "gutterclick" ) ) , n . addListener ( c , "dblclick" , this . onMouseEvent . bind ( this , "gutterdblclick" ) ) , n . addListener ( c , "mousemove" , this . onMouseEvent . bind ( this , "guttermousemove" ) ) , n . addListener ( a , "mousedown" , i ) , n . addListener ( c , "mousedown" , function ( t ) { return e . focus ( ) , n . preventDefault ( t ) } ) , e . on ( "mousemove" , function ( i ) { if ( ! t . state && ! t . $dragDelay && t . $dragEnabled ) { var n = e . renderer . screenToTextCoordinates ( i . x , i . y ) , o = e . session . selection . getRange ( ) , r = e . renderer ; r . setCursorStyle ( ! o . isEmpty ( ) && o . insideStart ( n . row , n . column ) ? "default" : "" ) } } ) } ; ( function ( ) { this . onMouseEvent = function ( e , t ) { this . editor . _emit ( e , new a ( t , this . editor ) ) } , this . onMouseMove = function ( e , t ) { var i = this . editor . _eventRegistry && this . editor . _eventRegistry . mousemove ; i && i . length && this . editor . _emit ( e , new a ( t , this . editor ) ) } , this . onMouseWheel = function ( e , t ) { var i = new a ( t , this . editor ) ; i . speed = 2 * this . $scrollSpeed , i . wheelX = t . wheelX , i . wheelY = t . wheelY , this . editor . _emit ( e , i ) } , this . setState = function ( e ) { this . state = e } , this . captureMouse = function ( e , t ) { this . x = e . x , this . y = e . y , this . isMousePressed = ! 0 ; var i = this . editor . renderer ; i . $keepTextAreaAtCursor && ( i . $keepTextAreaAtCursor = null ) ; var r = this , s = function ( e ) { if ( e ) { if ( o . isWebKit && ! e . which && r . releaseMouse ) return r . releaseMouse ( ) ; r . x = e . clientX , r . y = e . clientY , t && t ( e ) , r . mouseEvent = new a ( e , r . editor ) , r . $mouseMoved = ! 0 } } , l = function ( e ) { clearInterval ( h ) , c ( ) , r [ r . state + "End" ] && r [ r . state + "End" ] ( e ) , r . state = "" , null == i . $keepTextAreaAtCursor && ( i . $keepTextAreaAtCursor = ! 0 , i . $moveTextAreaToCursor ( ) ) , r . isMousePressed = ! 1 , r . $onCaptureMouseMove = r . releaseMouse = null , e && r . onMouseEvent ( "mouseup" , e ) } , c = function ( ) { r [ r . state ] && r [ r . state ] ( ) , r . $mouseMoved = ! 1 } ; if ( o . isOldIE && "dblclick" == e . domEvent . type ) return setTimeout ( function ( ) { l ( e ) } ) ; r . $onCaptureMouseMove = s , r . releaseMouse = n . capture ( this . editor . container , s , l ) ; var h = setInterval ( c , 20 ) } , this . releaseMouse = null , this . cancelContextMenu = function ( ) { var e = function ( t ) { t && t . domEvent && "contextmenu" != t . domEvent . type || ( this . editor . off ( "nativecontextmenu" , e ) , t && t . domEvent && n . stopEvent ( t . domEvent ) ) } . bind ( this ) ; setTimeout ( e , 10 ) , this . editor . on ( "nativecontextmenu" , e ) } } ) . call ( h . prototype ) , c . defineOptions ( h . prototype , "mouseHandler" , { scrollSpeed : { initialValue : 2 } , dragDelay : { initialValue : o . isMac ? 150 : 0 } , dragEnabled : { initialValue : ! 0 } , focusTimout : { initialValue : 0 } , tooltipFollowsMouse : { initialValue : ! 0 } } ) , t . MouseHandler = h } ) , ace . define ( "ace/mouse/fold_handler" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; funct
Lu : "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A" , Lt : "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC" , Lm : "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F" , Lo : " 01 BB01C0 - 01 C3029405D0 - 05 EA05F0 - 05 F20621 - 063 F0641 - 064 A066E066F0671 - 06 D306D506EE06EF06FA - 06 FC06FF07100712 - 072 F074D - 07 A507B107CA - 07 EA0800 - 08150904 - 0939093 D09500958 - 096109720979 - 097 F0985 - 098 C098F09900993 - 09 A809AA - 09 B009B209B6 - 09 B909BD09CE09DC09DD09DF - 09E109 F009F10A05 - 0 A0A0A0F0A100A13 - 0 A280A2A - 0 A300A320A330A350A360A380A390A59 - 0 A5C0A5E0A72 - 0 A740A85 - 0 A8D0A8F - 0 A910A93 - 0 AA80AAA - 0 AB00AB20AB30AB5 - 0 AB90ABD0AD00AE00AE10B05 - 0B0 C0B0F0B100B13 - 0 B280B2A - 0 B300B320B330B35 - 0 B390B3D0B5C0B5D0B5F - 0 B610B710B830B85 - 0 B8A0B8E - 0 B900B92 - 0 B950B990B9A0B9C0B9E0B9F0BA30BA40BA8 - 0 BAA0BAE - 0 BB90BD00C05 - 0 C0C0C0E - 0 C100C12 - 0 C280C2A - 0 C330C35 - 0 C390C3D0C580C590C600C610C85 - 0 C8C0C8E - 0 C900C92 - 0 CA80CAA - 0 CB30CB5 - 0 CB90CBD0CDE0CE00CE10D05 - 0 D0C0D0E - 0 D100D12 - 0 D280D2A - 0 D390D3D0D600D610D7A - 0 D7F0D85 - 0 D960D9A - 0 DB10DB3 - 0 DBB0DBD0DC0 - 0 DC60E01 - 0E300 E320E330E40 - 0E450 E810E820E840E870E880E8A0E8D0E94 - 0E970 E99 - 0E9 F0EA1 - 0 EA30EA50EA70EAA0EAB0EAD - 0 EB00EB20EB30EBD0EC0 - 0 EC40EDC0EDD0F000F40 - 0 F470F49 - 0 F6C0F88 - 0 F8B1000 - 102 A103F1050 - 1055105 A - 105 D106110651066106E - 10701075 - 1081108E10 D0 - 10 FA1100 - 1248124 A - 124 D1250 - 12561258125 A - 125 D1260 - 1288128 A - 128 D1290 - 12 B012B2 - 12 B512B8 - 12 BE12C012C2 - 12 C512C8 - 12 D612D8 - 13101312 - 13151318 - 135 A1380 - 138 F13A0 - 13 F41401 - 166 C166F - 167 F1681 - 169 A16A0 - 16 EA1700 - 170 C170E - 17111720 - 17311740 - 1751
var i = { row : e . row + 1 , column : 0 } , n = { action : "insertText" , range : r . fromPoints ( e , i ) , text : this . getNewLineCharacter ( ) } ; return this . _signal ( "change" , { data : n } ) , i } , this . insertInLine = function ( e , t ) { if ( 0 == t . length ) return e ; var i = this . $lines [ e . row ] || "" ; this . $lines [ e . row ] = i . substring ( 0 , e . column ) + t + i . substring ( e . column ) ; var n = { row : e . row , column : e . column + t . length } , o = { action : "insertText" , range : r . fromPoints ( e , n ) , text : t } ; return this . _signal ( "change" , { data : o } ) , n } , this . remove = function ( e ) { if ( e instanceof r || ( e = r . fromPoints ( e . start , e . end ) ) , e . start = this . $clipPosition ( e . start ) , e . end = this . $clipPosition ( e . end ) , e . isEmpty ( ) ) return e . start ; var t = e . start . row , i = e . end . row ; if ( e . isMultiLine ( ) ) { var n = 0 == e . start . column ? t : t + 1 , o = i - 1 ; e . end . column > 0 && this . removeInLine ( i , 0 , e . end . column ) , o >= n && this . _removeLines ( n , o ) , n != t && ( this . removeInLine ( t , e . start . column , this . getLine ( t ) . length ) , this . removeNewLine ( e . start . row ) ) } else this . removeInLine ( t , e . start . column , e . end . column ) ; return e . start } , this . removeInLine = function ( e , t , i ) { if ( t != i ) { var n = new r ( e , t , e , i ) , o = this . getLine ( e ) , s = o . substring ( t , i ) , a = o . substring ( 0 , t ) + o . substring ( i , o . length ) ; this . $lines . splice ( e , 1 , a ) ; var l = { action : "removeText" , range : n , text : s } ; return this . _signal ( "change" , { data : l } ) , n . start } } , this . removeLines = function ( e , t ) { return 0 > e || t >= this . getLength ( ) ? this . remove ( new r ( e , 0 , t + 1 , 0 ) ) : this . _removeLines ( e , t ) } , this . _removeLines = function ( e , t ) { var i = new r ( e , 0 , t + 1 , 0 ) , n = this . $lines . splice ( e , t - e + 1 ) , o = { action : "removeLines" , range : i , nl : this . getNewLineCharacter ( ) , lines : n } ; return this . _signal ( "change" , { data : o } ) , n } , this . removeNewLine = function ( e ) { var t = this . getLine ( e ) , i = this . getLine ( e + 1 ) , n = new r ( e , t . length , e + 1 , 0 ) , o = t + i ; this . $lines . splice ( e , 2 , o ) ; var s = { action : "removeText" , range : n , text : this . getNewLineCharacter ( ) } ; this . _signal ( "change" , { data : s } ) } , this . replace = function ( e , t ) { if ( e instanceof r || ( e = r . fromPoints ( e . start , e . end ) ) , 0 == t . length && e . isEmpty ( ) ) return e . start ; if ( t == this . getTextRange ( e ) ) return e . end ; if ( this . remove ( e ) , t ) var i = this . insert ( e . start , t ) ; else i = e . start ; return i } , this . applyDeltas = function ( e ) { for ( var t = 0 ; t < e . length ; t ++ ) { var i = e [ t ] , n = r . fromPoints ( i . range . start , i . range . end ) ; "insertLines" == i . action ? this . insertLines ( n . start . row , i . lines ) : "insertText" == i . action ? this . insert ( n . start , i . text ) : "removeLines" == i . action ? this . _removeLines ( n . start . row , n . end . row - 1 ) : "removeText" == i . action && this . remove ( n ) } } , this . revertDeltas = function ( e ) { for ( var t = e . length - 1 ; t >= 0 ; t -- ) { var i = e [ t ] , n = r . fromPoints ( i . range . start , i . range . end ) ; "insertLines" == i . action ? this . _removeLines ( n . start . row , n . end . row - 1 ) : "insertText" == i . action ? this . remove ( n ) : "removeLines" == i . action ? this . _insertLines ( n . start . row , i . lines ) : "removeText" == i . action && this . insert ( n . start , i . text ) } } , this . indexToPosition = function ( e , t ) { for ( var i = this . $lines || this . getAllLines ( ) , n = this . getNewLineCharacter ( ) . length , o = t || 0 , r = i . length ; r > o ; o ++ ) if ( e -= i [ o ] . length + n , 0 > e ) return { row : o , column : e + i [ o ] . length + n } ; return { row : r - 1 , column : i [ r - 1 ] . length } } , this . positionToIndex = function ( e , t ) { for ( var i = this . $lines || this . getAllLines ( ) , n = this . getNewLineCharacter ( ) . length , o = 0 , r = Math . min ( e . row , i . length ) , s = t || 0 ; r > s ; ++ s ) o += i [ s ] . length + n ; return o + e . column } } ) . call ( a . prototype ) , t . Document = a } ) , ace . define ( "ace/background_tokenizer" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/event_emitter" ] , function ( e , t , i ) { "use strict" ; var n = e ( "./lib/oop" ) , o = e ( "./lib/event_emitter" ) . EventEmitter , r = function ( e , t ) { this . running = ! 1 , this . lines = [ ] , this . states = [ ] , this . currentLine = 0 , this . tokenizer = e ; var i = this ; this . $worker = function ( ) { if ( i . running ) { for ( var e = new Date , t = i . currentLine , n = - 1 , o = i . doc ; i . lines [ t ] ; ) t ++ ; var r = t , s = o . getLength ( ) , a = 0 ; for ( i . running = ! 1 ; s > t ; ) { i . $tokenizeRow ( t ) , n = t ; do t ++ ; while ( i . lines [ t ] ) ; if ( a ++ , a % 5 === 0 && new Date - e > 20 ) { i . running = setTimeout ( i . $worker , 20 ) ; break } } i . currentLine = t , n >= r && i . fireUpdateEvent ( r , n ) } } } ; ( function ( ) { n . implement ( this , o ) , this . setTokenizer = function ( e ) { this . tokenizer = e , this . lines = [ ] , this . states = [ ] , this . start ( 0 ) } , this . setDocument = function ( e ) { this . doc = e , this . lines = [ ] , this . states = [ ] , this . stop ( ) } , this . fireUpdateEvent = function ( e , t ) { var i = { first : e , last : t } ; this . _signal ( "update" , { data : i } ) } , this . start = function ( e ) { this . currentLine = Math . min
for ( var t = 0 ; t < e . length ; t ++ ) this . $breakpoints [ e [ t ] ] = "ace_breakpoint" ; this . _signal ( "changeBreakpoint" , { } ) } , this . clearBreakpoints = function ( ) { this . $breakpoints = [ ] , this . _signal ( "changeBreakpoint" , { } ) } , this . setBreakpoint = function ( e , t ) { void 0 === t && ( t = "ace_breakpoint" ) , t ? this . $breakpoints [ e ] = t : delete this . $breakpoints [ e ] , this . _signal ( "changeBreakpoint" , { } ) } , this . clearBreakpoint = function ( e ) { delete this . $breakpoints [ e ] , this . _signal ( "changeBreakpoint" , { } ) } , this . addMarker = function ( e , t , i , n ) { var o = this . $markerId ++ , r = { range : e , type : i || "line" , renderer : "function" == typeof i ? i : null , clazz : t , inFront : ! ! n , id : o } ; return n ? ( this . $frontMarkers [ o ] = r , this . _signal ( "changeFrontMarker" ) ) : ( this . $backMarkers [ o ] = r , this . _signal ( "changeBackMarker" ) ) , o } , this . addDynamicMarker = function ( e , t ) { if ( e . update ) { var i = this . $markerId ++ ; return e . id = i , e . inFront = ! ! t , t ? ( this . $frontMarkers [ i ] = e , this . _signal ( "changeFrontMarker" ) ) : ( this . $backMarkers [ i ] = e , this . _signal ( "changeBackMarker" ) ) , e } } , this . removeMarker = function ( e ) { var t = this . $frontMarkers [ e ] || this . $backMarkers [ e ] ; if ( t ) { var i = t . inFront ? this . $frontMarkers : this . $backMarkers ; t && ( delete i [ e ] , this . _signal ( t . inFront ? "changeFrontMarker" : "changeBackMarker" ) ) } } , this . getMarkers = function ( e ) { return e ? this . $frontMarkers : this . $backMarkers } , this . highlight = function ( e ) { if ( ! this . $searchHighlight ) { var t = new d ( null , "ace_selected-word" , "text" ) ; this . $searchHighlight = this . addDynamicMarker ( t ) } this . $searchHighlight . setRegexp ( e ) } , this . highlightLines = function ( e , t , i , n ) { "number" != typeof t && ( i = t , t = e ) , i || ( i = "ace_step" ) ; var o = new c ( e , 0 , t , 1 / 0 ) ; return o . id = this . addMarker ( o , i , "fullLine" , n ) , o } , this . setAnnotations = function ( e ) { this . $annotations = e , this . _signal ( "changeAnnotation" , { } ) } , this . getAnnotations = function ( ) { return this . $annotations || [ ] } , this . clearAnnotations = function ( ) { this . setAnnotations ( [ ] ) } , this . $detectNewLine = function ( e ) { var t = e . match ( /^.*?(\r?\n)/m ) ; t ? this . $autoNewLine = t [ 1 ] : this . $autoNewLine = "\n" } , this . getWordRange = function ( e , t ) { var i = this . getLine ( e ) , n = ! 1 ; if ( t > 0 && ( n = ! ! i . charAt ( t - 1 ) . match ( this . tokenRe ) ) , n || ( n = ! ! i . charAt ( t ) . match ( this . tokenRe ) ) , n ) var o = this . tokenRe ; else if ( /^\s+$/ . test ( i . slice ( t - 1 , t + 1 ) ) ) var o = /\s/ ; else var o = this . nonTokenRe ; var r = t ; if ( r > 0 ) { do r -- ; while ( r >= 0 && i . charAt ( r ) . match ( o ) ) ; r ++ } for ( var s = t ; s < i . length && i . charAt ( s ) . match ( o ) ; ) s ++ ; return new c ( e , r , e , s ) } , this . getAWordRange = function ( e , t ) { for ( var i = this . getWordRange ( e , t ) , n = this . getLine ( i . end . row ) ; n . charAt ( i . end . column ) . match ( /[ \t]/ ) ; ) i . end . column += 1 ; return i } , this . setNewLineMode = function ( e ) { this . doc . setNewLineMode ( e ) } , this . getNewLineMode = function ( ) { return this . doc . getNewLineMode ( ) } , this . setUseWorker = function ( e ) { this . setOption ( "useWorker" , e ) } , this . getUseWorker = function ( ) { return this . $useWorker } , this . onReloadTokenizer = function ( e ) { var t = e . data ; this . bgTokenizer . start ( t . first ) , this . _signal ( "tokenizerUpdate" , e ) } , this . $modes = { } , this . $mode = null , this . $modeId = null , this . setMode = function ( e , t ) { if ( e && "object" == typeof e ) { if ( e . getTokenizer ) return this . $onChangeMode ( e ) ; var i = e , n = i . path } else n = e || "ace/mode/text" ; return this . $modes [ "ace/mode/text" ] || ( this . $modes [ "ace/mode/text" ] = new l ) , this . $modes [ n ] && ! i ? ( this . $onChangeMode ( this . $modes [ n ] ) , void ( t && t ( ) ) ) : ( this . $modeId = n , r . loadModule ( [ "mode" , n ] , function ( e ) { return this . $modeId !== n ? t && t ( ) : this . $modes [ n ] && ! i ? this . $onChangeMode ( this . $modes [ n ] ) : void ( e && e . Mode && ( e = new e . Mode ( i ) , i || ( this . $modes [ n ] = e , e . $id = n ) , this . $onChangeMode ( e ) , t && t ( ) ) ) } . bind ( this ) ) , void ( this . $mode || this . $onChangeMode ( this . $modes [ "ace/mode/text" ] , ! 0 ) ) ) } , this . $onChangeMode = function ( e , t ) { if ( t || ( this . $modeId = e . $id ) , this . $mode !== e ) { this . $mode = e , this . $stopWorker ( ) , this . $useWorker && this . $startWorker ( ) ; var i = e . getTokenizer ( ) ; if ( void 0 !== i . addEventListener ) { var n = this . onReloadTokenizer . bind ( this ) ; i . addEventListener ( "update" , n ) } if ( this . bgTokenizer ) this . bgTokenizer . setTokenizer ( i ) ; else { this . bgTokenizer = new u ( i ) ; var o = this ; this . bgTokenizer . addEventListener ( "update" , function ( e ) { o . _signal ( "tokenizerUpdate" , e ) } ) } this . bgTokenizer . setDocument ( this . getDocument ( ) ) , this . tokenRe = e . tokenRe , this . nonTokenRe = e . nonTokenRe , t || ( e . attachToSession && e . attachToSession ( this ) , this . $options . wrapMethod . set . call ( this , this . $wra
name : "golineup" , bindKey : n ( "Up" , "Up|Ctrl-P" ) , exec : function ( e , t ) { e . navigateUp ( t . times ) } , multiSelectAction : "forEach" , readOnly : ! 0 } , { name : "selecttoend" , bindKey : n ( "Ctrl-Shift-End" , "Command-Shift-Down" ) , exec : function ( e ) { e . getSelection ( ) . selectFileEnd ( ) } , multiSelectAction : "forEach" , readOnly : ! 0 , scrollIntoView : "animate" , aceCommandGroup : "fileJump" } , { name : "gotoend" , bindKey : n ( "Ctrl-End" , "Command-End|Command-Down" ) , exec : function ( e ) { e . navigateFileEnd ( ) } , multiSelectAction : "forEach" , readOnly : ! 0 , scrollIntoView : "animate" , aceCommandGroup : "fileJump" } , { name : "selectdown" , bindKey : n ( "Shift-Down" , "Shift-Down" ) , exec : function ( e ) { e . getSelection ( ) . selectDown ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "golinedown" , bindKey : n ( "Down" , "Down|Ctrl-N" ) , exec : function ( e , t ) { e . navigateDown ( t . times ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selectwordleft" , bindKey : n ( "Ctrl-Shift-Left" , "Option-Shift-Left" ) , exec : function ( e ) { e . getSelection ( ) . selectWordLeft ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "gotowordleft" , bindKey : n ( "Ctrl-Left" , "Option-Left" ) , exec : function ( e ) { e . navigateWordLeft ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selecttolinestart" , bindKey : n ( "Alt-Shift-Left" , "Command-Shift-Left" ) , exec : function ( e ) { e . getSelection ( ) . selectLineStart ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "gotolinestart" , bindKey : n ( "Alt-Left|Home" , "Command-Left|Home|Ctrl-A" ) , exec : function ( e ) { e . navigateLineStart ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selectleft" , bindKey : n ( "Shift-Left" , "Shift-Left" ) , exec : function ( e ) { e . getSelection ( ) . selectLeft ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "gotoleft" , bindKey : n ( "Left" , "Left|Ctrl-B" ) , exec : function ( e , t ) { e . navigateLeft ( t . times ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selectwordright" , bindKey : n ( "Ctrl-Shift-Right" , "Option-Shift-Right" ) , exec : function ( e ) { e . getSelection ( ) . selectWordRight ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "gotowordright" , bindKey : n ( "Ctrl-Right" , "Option-Right" ) , exec : function ( e ) { e . navigateWordRight ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selecttolineend" , bindKey : n ( "Alt-Shift-Right" , "Command-Shift-Right" ) , exec : function ( e ) { e . getSelection ( ) . selectLineEnd ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "gotolineend" , bindKey : n ( "Alt-Right|End" , "Command-Right|End|Ctrl-E" ) , exec : function ( e ) { e . navigateLineEnd ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selectright" , bindKey : n ( "Shift-Right" , "Shift-Right" ) , exec : function ( e ) { e . getSelection ( ) . selectRight ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "gotoright" , bindKey : n ( "Right" , "Right|Ctrl-F" ) , exec : function ( e , t ) { e . navigateRight ( t . times ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selectpagedown" , bindKey : "Shift-PageDown" , exec : function ( e ) { e . selectPageDown ( ) } , readOnly : ! 0 } , { name : "pagedown" , bindKey : n ( null , "Option-PageDown" ) , exec : function ( e ) { e . scrollPageDown ( ) } , readOnly : ! 0 } , { name : "gotopagedown" , bindKey : n ( "PageDown" , "PageDown|Ctrl-V" ) , exec : function ( e ) { e . gotoPageDown ( ) } , readOnly : ! 0 } , { name : "selectpageup" , bindKey : "Shift-PageUp" , exec : function ( e ) { e . selectPageUp ( ) } , readOnly : ! 0 } , { name : "pageup" , bindKey : n ( null , "Option-PageUp" ) , exec : function ( e ) { e . scrollPageUp ( ) } , readOnly : ! 0 } , { name : "gotopageup" , bindKey : "PageUp" , exec : function ( e ) { e . gotoPageUp ( ) } , readOnly : ! 0 } , { name : "scrollup" , bindKey : n ( "Ctrl-Up" , null ) , exec : function ( e ) { e . renderer . scrollBy ( 0 , - 2 * e . renderer . layerConfig . lineHeight ) } , readOnly : ! 0 } , { name : "scrolldown" , bindKey : n ( "Ctrl-Down" , null ) , exec : function ( e ) { e . renderer . scrollBy ( 0 , 2 * e . renderer . layerConfig . lineHeight ) } , readOnly : ! 0 } , { name : "selectlinestart" , bindKey : "Shift-Home" , exec : function ( e ) { e . getSelection ( ) . selectLineStart ( ) } , multiSelectAction : "forEach" , scrollIntoView : "cursor" , readOnly : ! 0 } , { name : "selectlineend" , bindKey : "Shift-End" , exec : function ( e ) { e . getSelection ( ) . selectLineEnd ( ) } , multiSelectA
if ( this . session . getUseSoftTabs ( ) ) var c = a - l % a , h = r . stringRepeat ( " " , c ) ; else { for ( var c = l % a ; " " == o [ t . start . column ] && c ; ) t . start . column -- , c -- ; this . selection . setSelectionRange ( t ) , h = " " } return this . insert ( h ) } , this . blockIndent = function ( ) { var e = this . $getSelectedRows ( ) ; this . session . indentRows ( e . first , e . last , " " ) } , this . blockOutdent = function ( ) { var e = this . session . getSelection ( ) ; this . session . outdentRows ( e . getRange ( ) ) } , this . sortLines = function ( ) { var e = this . $getSelectedRows ( ) , t = this . session , i = [ ] ; for ( o = e . first ; o <= e . last ; o ++ ) i . push ( t . getLine ( o ) ) ; i . sort ( function ( e , t ) { return e . toLowerCase ( ) < t . toLowerCase ( ) ? - 1 : e . toLowerCase ( ) > t . toLowerCase ( ) ? 1 : 0 } ) ; for ( var n = new g ( 0 , 0 , 0 , 0 ) , o = e . first ; o <= e . last ; o ++ ) { var r = t . getLine ( o ) ; n . start . row = o , n . end . row = o , n . end . column = r . length , t . replace ( n , i [ o - e . first ] ) } } , this . toggleCommentLines = function ( ) { var e = this . session . getState ( this . getCursorPosition ( ) . row ) , t = this . $getSelectedRows ( ) ; this . session . getMode ( ) . toggleCommentLines ( e , this . session , t . first , t . last ) } , this . toggleBlockComment = function ( ) { var e = this . getCursorPosition ( ) , t = this . session . getState ( e . row ) , i = this . getSelectionRange ( ) ; this . session . getMode ( ) . toggleBlockComment ( t , this . session , i , e ) } , this . getNumberAt = function ( e , t ) { var i = /[\-]?[0-9]+(?:\.[0-9]+)?/g ; i . lastIndex = 0 ; for ( var n = this . session . getLine ( e ) ; i . lastIndex < t ; ) { var o = i . exec ( n ) ; if ( o . index <= t && o . index + o [ 0 ] . length >= t ) { var r = { value : o [ 0 ] , start : o . index , end : o . index + o [ 0 ] . length } ; return r } } return null } , this . modifyNumber = function ( e ) { var t = this . selection . getCursor ( ) . row , i = this . selection . getCursor ( ) . column , n = new g ( t , i - 1 , t , i ) , o = this . session . getTextRange ( n ) ; if ( ! isNaN ( parseFloat ( o ) ) && isFinite ( o ) ) { var r = this . getNumberAt ( t , i ) ; if ( r ) { var s = r . value . indexOf ( "." ) >= 0 ? r . start + r . value . indexOf ( "." ) + 1 : r . end , a = r . start + r . value . length - s , l = parseFloat ( r . value ) ; l *= Math . pow ( 10 , a ) , e *= s !== r . end && s > i ? Math . pow ( 10 , r . end - i - 1 ) : Math . pow ( 10 , r . end - i ) , l += e , l /= Math . pow ( 10 , a ) ; var c = l . toFixed ( a ) , h = new g ( t , r . start , t , r . end ) ; this . session . replace ( h , c ) , this . moveCursorTo ( t , Math . max ( r . start + 1 , i + c . length - r . value . length ) ) } } } , this . removeLines = function ( ) { var e , t = this . $getSelectedRows ( ) ; e = 0 === t . first || t . last + 1 < this . session . getLength ( ) ? new g ( t . first , 0 , t . last + 1 , 0 ) : new g ( t . first - 1 , this . session . getLine ( t . first - 1 ) . length , t . last , this . session . getLine ( t . last ) . length ) , this . session . remove ( e ) , this . clearSelection ( ) } , this . duplicateSelection = function ( ) { var e = this . selection , t = this . session , i = e . getRange ( ) , n = e . isBackwards ( ) ; if ( i . isEmpty ( ) ) { var o = i . start . row ; t . duplicateLines ( o , o ) } else { var r = n ? i . start : i . end , s = t . insert ( r , t . getTextRange ( i ) , ! 1 ) ; i . start = r , i . end = s , e . setSelectionRange ( i , n ) } } , this . moveLinesDown = function ( ) { this . $moveLines ( function ( e , t ) { return this . session . moveLinesDown ( e , t ) } ) } , this . moveLinesUp = function ( ) { this . $moveLines ( function ( e , t ) { return this . session . moveLinesUp ( e , t ) } ) } , this . moveText = function ( e , t , i ) { return this . session . moveText ( e , t , i ) } , this . copyLinesUp = function ( ) { this . $moveLines ( function ( e , t ) { return this . session . duplicateLines ( e , t ) , 0 } ) } , this . copyLinesDown = function ( ) { this . $moveLines ( function ( e , t ) { return this . session . duplicateLines ( e , t ) } ) } , this . $moveLines = function ( e ) { var t = this . selection ; if ( ! t . inMultiSelectMode || this . inVirtualSelectionMode ) { var i = t . toOrientedRange ( ) , n = this . $getSelectedRows ( i ) , o = e . call ( this , n . first , n . last ) ; i . moveBy ( o , 0 ) , t . fromOrientedRange ( i ) } else { var r = t . rangeList . ranges ; t . rangeList . detach ( this . session ) ; for ( var s = r . length ; s -- ; ) { for ( var a = s , n = r [ s ] . collapseRows ( ) , l = n . end . row , c = n . start . row ; s -- && ( n = r [ s ] . collapseRows ( ) , c - n . end . row <= 1 ) ; ) c = n . end . row ; s ++ ; for ( var o = e . call ( this , c , l ) ; a >= s ; ) r [ a ] . moveBy ( o , 0 ) , a -- } t . fromOrientedRange ( t . ranges [ 0 ] ) , t . rangeList . attach ( this . session ) } } , this . $getSelectedRows = function ( ) { var e = this . getSelectionRange ( ) . collapseRows ( ) ; return { first : this . session . getRowFoldStart ( e . start . row ) , last : this . session . getRowFoldEnd ( e . end . row ) } } , this . onCompositionStart = function ( e ) { this . renderer . showComposition ( this . getCursorPosition ( ) ) } , this . onCompositionUpdate = function ( e ) { this . renderer . setCompositionText ( e ) } , this . onCompositionEnd = function ( ) { this . renderer . hideComposition ( ) } , this . getFirstVisibleRow = function ( ) { return this . renderer . getFirstVisibleRow ( ) } , this . getLastVisibleR
o . push ( { type : e [ n ] . type , value : s } ) , r = t + s . length , n += 1 } for ( ; i > r && n < e . length ; ) { var s = e [ n ] . value ; o . push ( s . length + r > i ? { type : e [ n ] . type , value : s . substring ( 0 , i - r ) } : e [ n ] ) , r += s . length , n += 1 } } var n = this . session , o = [ ] , r = n . getTokens ( e ) ; return t . walk ( function ( e , t , s , a , l ) { null != e ? o . push ( { type : "fold" , value : e } ) : ( l && ( r = n . getTokens ( t ) ) , r . length && i ( r , a , s ) ) } , t . end . row , this . session . getLine ( t . end . row ) . length ) , o } , this . $useLineGroups = function ( ) { return this . session . getUseWrapMode ( ) } , this . destroy = function ( ) { clearInterval ( this . $pollSizeChangesTimer ) , this . $measureNode && this . $measureNode . parentNode . removeChild ( this . $measureNode ) , delete this . $measureNode } } ) . call ( a . prototype ) , t . Text = a } ) , ace . define ( "ace/layer/cursor" , [ "require" , "exports" , "module" , "ace/lib/dom" ] , function ( e , t , i ) { "use strict" ; var n , o = e ( "../lib/dom" ) , r = function ( e ) { this . element = o . createElement ( "div" ) , this . element . className = "ace_layer ace_cursor-layer" , e . appendChild ( this . element ) , void 0 === n && ( n = "opacity" in this . element ) , this . isVisible = ! 1 , this . isBlinking = ! 0 , this . blinkInterval = 1e3 , this . smoothBlinking = ! 1 , this . cursors = [ ] , this . cursor = this . addCursor ( ) , o . addCssClass ( this . element , "ace_hidden-cursors" ) , this . $updateCursors = this . $updateVisibility . bind ( this ) } ; ( function ( ) { this . $updateVisibility = function ( e ) { for ( var t = this . cursors , i = t . length ; i -- ; ) t [ i ] . style . visibility = e ? "" : "hidden" } , this . $updateOpacity = function ( e ) { for ( var t = this . cursors , i = t . length ; i -- ; ) t [ i ] . style . opacity = e ? "" : "0" } , this . $padding = 0 , this . setPadding = function ( e ) { this . $padding = e } , this . setSession = function ( e ) { this . session = e } , this . setBlinking = function ( e ) { e != this . isBlinking && ( this . isBlinking = e , this . restartTimer ( ) ) } , this . setBlinkInterval = function ( e ) { e != this . blinkInterval && ( this . blinkInterval = e , this . restartTimer ( ) ) } , this . setSmoothBlinking = function ( e ) { e == this . smoothBlinking || n || ( this . smoothBlinking = e , o . setCssClass ( this . element , "ace_smooth-blinking" , e ) , this . $updateCursors ( ! 0 ) , this . $updateCursors = ( e ? this . $updateOpacity : this . $updateVisibility ) . bind ( this ) , this . restartTimer ( ) ) } , this . addCursor = function ( ) { var e = o . createElement ( "div" ) ; return e . className = "ace_cursor" , this . element . appendChild ( e ) , this . cursors . push ( e ) , e } , this . removeCursor = function ( ) { if ( this . cursors . length > 1 ) { var e = this . cursors . pop ( ) ; return e . parentNode . removeChild ( e ) , e } } , this . hideCursor = function ( ) { this . isVisible = ! 1 , o . addCssClass ( this . element , "ace_hidden-cursors" ) , this . restartTimer ( ) } , this . showCursor = function ( ) { this . isVisible = ! 0 , o . removeCssClass ( this . element , "ace_hidden-cursors" ) , this . restartTimer ( ) } , this . restartTimer = function ( ) { var e = this . $updateCursors ; if ( clearInterval ( this . intervalId ) , clearTimeout ( this . timeoutId ) , this . smoothBlinking && o . removeCssClass ( this . element , "ace_smooth-blinking" ) , e ( ! 0 ) , this . isBlinking && this . blinkInterval && this . isVisible ) { this . smoothBlinking && setTimeout ( function ( ) { o . addCssClass ( this . element , "ace_smooth-blinking" ) } . bind ( this ) ) ; var t = function ( ) { this . timeoutId = setTimeout ( function ( ) { e ( ! 1 ) } , . 6 * this . blinkInterval ) } . bind ( this ) ; this . intervalId = setInterval ( function ( ) { e ( ! 0 ) , t ( ) } , this . blinkInterval ) , t ( ) } } , this . getPixelPosition = function ( e , t ) { if ( ! this . config || ! this . session ) return { left : 0 , top : 0 } ; e || ( e = this . session . selection . getCursor ( ) ) ; var i = this . session . documentToScreenPosition ( e ) , n = this . $padding + i . column * this . config . characterWidth , o = ( i . row - ( t ? this . config . firstRowScreen : 0 ) ) * this . config . lineHeight ; return { left : n , top : o } } , this . update = function ( e ) { this . config = e ; var t = this . session . $selectionMarkers , i = 0 , n = 0 ; ( void 0 === t || 0 === t . length ) && ( t = [ { cursor : null } ] ) ; for ( var i = 0 , o = t . length ; o > i ; i ++ ) { var r = this . getPixelPosition ( t [ i ] . cursor , ! 0 ) ; if ( ! ( ( r . top > e . height + e . offset || r . top < 0 ) && i > 1 ) ) { var s = ( this . cursors [ n ++ ] || this . addCursor ( ) ) . style ; s . left = r . left + "px" , s . top = r . top + "px" , s . width = e . characterWidth + "px" , s . height = e . lineHeight + "px" } } for ( ; this . cursors . length > n ; ) this . removeCursor ( ) ; var a = this . session . getOverwrite ( ) ; this . $setOverwrite ( a ) , this . $pixelPos = r , this . restartTimer ( ) } , this . $setOverwrite = function ( e ) { e != this . overwrite && ( this . overwrite = e , e ? o . addCssClass ( this . element , "ace_overwrite-cursors" ) : o . removeCssClass ( this . element , "ace_overwrite-cursors" ) ) } , this . destroy = function ( ) { clearInterval ( this . intervalId ) , clearTimeout ( th
this . updateFull ( ) } , this . getHScrollBarAlwaysVisible = function ( ) { return this . $hScrollBarAlwaysVisible } , this . setHScrollBarAlwaysVisible = function ( e ) { this . setOption ( "hScrollBarAlwaysVisible" , e ) } , this . getVScrollBarAlwaysVisible = function ( ) { return this . $hScrollBarAlwaysVisible } , this . setVScrollBarAlwaysVisible = function ( e ) { this . setOption ( "vScrollBarAlwaysVisible" , e ) } , this . $updateScrollBarV = function ( ) { var e = this . layerConfig . maxHeight , t = this . $size . scrollerHeight ; ! this . $maxLines && this . $scrollPastEnd && ( e -= ( t - this . lineHeight ) * this . $scrollPastEnd , this . scrollTop > e - t && ( e = this . scrollTop + t , this . scrollBarV . scrollTop = null ) ) , this . scrollBarV . setScrollHeight ( e + this . scrollMargin . v ) , this . scrollBarV . setScrollTop ( this . scrollTop + this . scrollMargin . top ) } , this . $updateScrollBarH = function ( ) { this . scrollBarH . setScrollWidth ( this . layerConfig . width + 2 * this . $padding + this . scrollMargin . h ) , this . scrollBarH . setScrollLeft ( this . scrollLeft + this . scrollMargin . left ) } , this . $frozen = ! 1 , this . freeze = function ( ) { this . $frozen = ! 0 } , this . unfreeze = function ( ) { this . $frozen = ! 1 } , this . $renderChanges = function ( e , t ) { if ( this . $changes && ( e |= this . $changes , this . $changes = 0 ) , ! this . session || ! this . container . offsetWidth || this . $frozen || ! e && ! t ) return void ( this . $changes |= e ) ; if ( this . $size . $dirty ) return this . $changes |= e , this . onResize ( ! 0 ) ; this . lineHeight || this . $textLayer . checkForSizeChanges ( ) , this . _signal ( "beforeRender" ) ; var i = this . layerConfig ; if ( e & this . CHANGE _FULL || e & this . CHANGE _SIZE || e & this . CHANGE _TEXT || e & this . CHANGE _LINES || e & this . CHANGE _SCROLL || e & this . CHANGE _H _SCROLL ) { if ( e |= this . $computeLayerConfig ( ) , i . firstRow != this . layerConfig . firstRow && i . firstRowScreen == this . layerConfig . firstRowScreen ) { var n = this . scrollTop + ( i . firstRow - this . layerConfig . firstRow ) * this . lineHeight ; n > 0 && ( this . scrollTop = n , e |= this . CHANGE _SCROLL , e |= this . $computeLayerConfig ( ) ) } i = this . layerConfig , this . $updateScrollBarV ( ) , e & this . CHANGE _H _SCROLL && this . $updateScrollBarH ( ) , this . $gutterLayer . element . style . marginTop = - i . offset + "px" , this . content . style . marginTop = - i . offset + "px" , this . content . style . width = i . width + 2 * this . $padding + "px" , this . content . style . height = i . minHeight + "px" } return e & this . CHANGE _H _SCROLL && ( this . content . style . marginLeft = - this . scrollLeft + "px" , this . scroller . className = this . scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left" ) , e & this . CHANGE _FULL ? ( this . $textLayer . update ( i ) , this . $showGutter && this . $gutterLayer . update ( i ) , this . $markerBack . update ( i ) , this . $markerFront . update ( i ) , this . $cursorLayer . update ( i ) , this . $moveTextAreaToCursor ( ) , this . $highlightGutterLine && this . $updateGutterLineHighlight ( ) , void this . _signal ( "afterRender" ) ) : e & this . CHANGE _SCROLL ? ( e & this . CHANGE _TEXT || e & this . CHANGE _LINES ? this . $textLayer . update ( i ) : this . $textLayer . scrollLines ( i ) , this . $showGutter && this . $gutterLayer . update ( i ) , this . $markerBack . update ( i ) , this . $markerFront . update ( i ) , this . $cursorLayer . update ( i ) , this . $highlightGutterLine && this . $updateGutterLineHighlight ( ) , this . $moveTextAreaToCursor ( ) , void this . _signal ( "afterRender" ) ) : ( e & this . CHANGE _TEXT ? ( this . $textLayer . update ( i ) , this . $showGutter && this . $gutterLayer . update ( i ) ) : e & this . CHANGE _LINES ? ( this . $updateLines ( ) || e & this . CHANGE _GUTTER && this . $showGutter ) && this . $gutterLayer . update ( i ) : ( e & this . CHANGE _TEXT || e & this . CHANGE _GUTTER ) && this . $showGutter && this . $gutterLayer . update ( i ) , e & this . CHANGE _CURSOR && ( this . $cursorLayer . update ( i ) , this . $moveTextAreaToCursor ( ) , this . $highlightGutterLine && this . $updateGutterLineHighlight ( ) ) , e & ( this . CHANGE _MARKER | this . CHANGE _MARKER _FRONT ) && this . $markerFront . update ( i ) , e & ( this . CHANGE _MARKER | this . CHANGE _MARKER _BACK ) && this . $markerBack . update ( i ) , void this . _signal ( "afterRender" ) ) } , this . $autosize = function ( ) { var e = this . session . getScreenLength ( ) * this . lineHeight , t = this . $maxLines * this . lineHeight , i = Math . max ( ( this . $minLines || 1 ) * this . lineHeight , Math . min ( t , e ) ) + this . scrollMargin . v + ( this . $extraHeight || 0 ) , n = e > t ; if ( i != this . desiredHeight || this . $size . height != this . desiredHeight || n != this . $vScroll ) { n != this . $vScroll && ( this . $vScroll = n , this . scrollBarV . setVisible ( n ) ) ; var o = this . container . clientWidth ; this . container . style . height = i + "px" , this . $updateCachedSize ( ! 0 , this . $gutterWidth , o , i ) , this . desiredHeight = i , this . _signal ( "autosize" ) } } , this . $computeLa
t && ! t . isEqual ( this . getRange ( ) ) && this . fromOrientedRange ( t ) } , this . $initRangeList = function ( ) { this . rangeList || ( this . rangeList = new a , this . ranges = [ ] , this . rangeCount = 0 ) } , this . getAllRanges = function ( ) { return this . rangeCount ? this . rangeList . ranges . concat ( ) : [ this . getRange ( ) ] } , this . splitIntoLines = function ( ) { if ( this . rangeCount > 1 ) { var e = this . rangeList . ranges , t = e [ e . length - 1 ] , i = l . fromPoints ( e [ 0 ] . start , t . end ) ; this . toSingleRange ( ) , this . setSelectionRange ( i , t . cursor == t . start ) } else { var i = this . getRange ( ) , n = this . isBackwards ( ) , o = i . start . row , r = i . end . row ; if ( o == r ) { if ( n ) var s = i . end , a = i . start ; else var s = i . start , a = i . end ; return this . addRange ( l . fromPoints ( a , a ) ) , void this . addRange ( l . fromPoints ( s , s ) ) } var c = [ ] , h = this . getLineRange ( o , ! 0 ) ; h . start . column = i . start . column , c . push ( h ) ; for ( var u = o + 1 ; r > u ; u ++ ) c . push ( this . getLineRange ( u , ! 0 ) ) ; h = this . getLineRange ( r , ! 0 ) , h . end . column = i . end . column , c . push ( h ) , c . forEach ( this . addRange , this ) } } , this . toggleBlockSelection = function ( ) { if ( this . rangeCount > 1 ) { var e = this . rangeList . ranges , t = e [ e . length - 1 ] , i = l . fromPoints ( e [ 0 ] . start , t . end ) ; this . toSingleRange ( ) , this . setSelectionRange ( i , t . cursor == t . start ) } else { var n = this . session . documentToScreenPosition ( this . selectionLead ) , o = this . session . documentToScreenPosition ( this . selectionAnchor ) , r = this . rectangularRangeBlock ( n , o ) ; r . forEach ( this . addRange , this ) } } , this . rectangularRangeBlock = function ( e , t , i ) { var n = [ ] , r = e . column < t . column ; if ( r ) var s = e . column , a = t . column ; else var s = t . column , a = e . column ; var c = e . row < t . row ; if ( c ) var h = e . row , u = t . row ; else var h = t . row , u = e . row ; 0 > s && ( s = 0 ) , 0 > h && ( h = 0 ) , h == u && ( i = ! 0 ) ; for ( var d = h ; u >= d ; d ++ ) { var g = l . fromPoints ( this . session . screenToDocumentPosition ( d , s ) , this . session . screenToDocumentPosition ( d , a ) ) ; if ( g . isEmpty ( ) ) { if ( f && o ( g . end , f ) ) break ; var f = g . end } g . cursor = r ? g . start : g . end , n . push ( g ) } if ( c && n . reverse ( ) , ! i ) { for ( var p = n . length - 1 ; n [ p ] . isEmpty ( ) && p > 0 ; ) p -- ; if ( p > 0 ) for ( var m = 0 ; n [ m ] . isEmpty ( ) ; ) m ++ ; for ( var v = p ; v >= m ; v -- ) n [ v ] . isEmpty ( ) && n . splice ( v , 1 ) } return n } } . call ( c . prototype ) ; var v = e ( "./editor" ) . Editor ; ( function ( ) { this . updateSelectionMarkers = function ( ) { this . renderer . updateCursor ( ) , this . renderer . updateBackMarkers ( ) } , this . addSelectionMarker = function ( e ) { e . cursor || ( e . cursor = e . end ) ; var t = this . getSelectionStyle ( ) ; return e . marker = this . session . addMarker ( e , "ace_selection" , t ) , this . session . $selectionMarkers . push ( e ) , this . session . selectionMarkerCount = this . session . $selectionMarkers . length , e } , this . removeSelectionMarker = function ( e ) { if ( e . marker ) { this . session . removeMarker ( e . marker ) ; var t = this . session . $selectionMarkers . indexOf ( e ) ; - 1 != t && this . session . $selectionMarkers . splice ( t , 1 ) , this . session . selectionMarkerCount = this . session . $selectionMarkers . length } } , this . removeSelectionMarkers = function ( e ) { for ( var t = this . session . $selectionMarkers , i = e . length ; i -- ; ) { var n = e [ i ] ; if ( n . marker ) { this . session . removeMarker ( n . marker ) ; var o = t . indexOf ( n ) ; - 1 != o && t . splice ( o , 1 ) } } this . session . selectionMarkerCount = t . length } , this . $onAddRange = function ( e ) { this . addSelectionMarker ( e . range ) , this . renderer . updateCursor ( ) , this . renderer . updateBackMarkers ( ) } , this . $onRemoveRange = function ( e ) { this . removeSelectionMarkers ( e . ranges ) , this . renderer . updateCursor ( ) , this . renderer . updateBackMarkers ( ) } , this . $onMultiSelect = function ( e ) { this . inMultiSelectMode || ( this . inMultiSelectMode = ! 0 , this . setStyle ( "ace_multiselect" ) , this . keyBinding . addKeyboardHandler ( g . keyboardHandler ) , this . commands . setDefaultHandler ( "exec" , this . $onMultiSelectExec ) , this . renderer . updateCursor ( ) , this . renderer . updateBackMarkers ( ) ) } , this . $onSingleSelect = function ( e ) { this . session . multiSelect . inVirtualMode || ( this . inMultiSelectMode = ! 1 , this . unsetStyle ( "ace_multiselect" ) , this . keyBinding . removeKeyboardHandler ( g . keyboardHandler ) , this . commands . removeDefaultHandler ( "exec" , this . $onMultiSelectExec ) , this . renderer . updateCursor ( ) , this . renderer . updateBackMarkers ( ) , this . _emit ( "changeSelection" ) ) } , this . $onMultiSelectExec = function ( e ) { var t = e . command , i = e . editor ; if ( i . multiSelect ) { if ( t . multiSelectAction ) "forEach" == t . multiSelectAction ? n = i . forEachSelection ( t , e . args ) : "forEachLine" == t . multiSelectAction ? n = i . forEachSelection ( t , e . args , ! 0 ) : "single" == t . multiSelectAction ? ( i . exitMultiSelectMode ( ) , n = t . exec ( i , e . args || { } ) ) : n = t . multiSelectAction
var o = new s ( t , i . row , i . column + 1 ) ; if ( ! this . $matchTokenType ( o . getCurrentToken ( ) || "text" , l ) ) return ! 1 } return n . stepForward ( ) , n . getCurrentTokenRow ( ) !== i . row || this . $matchTokenType ( n . getCurrentToken ( ) || "text" , c ) } , d . $matchTokenType = function ( e , t ) { return t . indexOf ( e . type || e ) > - 1 } , d . recordAutoInsert = function ( e , t , i ) { var o = e . getCursorPosition ( ) , r = t . doc . getLine ( o . row ) ; this . isAutoInsertedClosing ( o , r , n . autoInsertedLineEnd [ 0 ] ) || ( n . autoInsertedBrackets = 0 ) , n . autoInsertedRow = o . row , n . autoInsertedLineEnd = i + r . substr ( o . column ) , n . autoInsertedBrackets ++ } , d . recordMaybeInsert = function ( e , t , i ) { var o = e . getCursorPosition ( ) , r = t . doc . getLine ( o . row ) ; this . isMaybeInsertedClosing ( o , r ) || ( n . maybeInsertedBrackets = 0 ) , n . maybeInsertedRow = o . row , n . maybeInsertedLineStart = r . substr ( 0 , o . column ) + i , n . maybeInsertedLineEnd = r . substr ( o . column ) , n . maybeInsertedBrackets ++ } , d . isAutoInsertedClosing = function ( e , t , i ) { return n . autoInsertedBrackets > 0 && e . row === n . autoInsertedRow && i === n . autoInsertedLineEnd [ 0 ] && t . substr ( e . column ) === n . autoInsertedLineEnd } , d . isMaybeInsertedClosing = function ( e , t ) { return n . maybeInsertedBrackets > 0 && e . row === n . maybeInsertedRow && t . substr ( e . column ) === n . maybeInsertedLineEnd && t . substr ( 0 , e . column ) == n . maybeInsertedLineStart } , d . popAutoInsertedClosing = function ( ) { n . autoInsertedLineEnd = n . autoInsertedLineEnd . substr ( 1 ) , n . autoInsertedBrackets -- } , d . clearMaybeInsertedClosing = function ( ) { n && ( n . maybeInsertedBrackets = 0 , n . maybeInsertedRow = - 1 ) } , o . inherits ( d , r ) , t . CstyleBehaviour = d } ) , ace . define ( "ace/mode/folding/cstyle" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/range" , "ace/mode/folding/fold_mode" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../../lib/oop" ) , o = e ( "../../range" ) . Range , r = e ( "./fold_mode" ) . FoldMode , s = t . FoldMode = function ( e ) { e && ( this . foldingStartMarker = new RegExp ( this . foldingStartMarker . source . replace ( /\|[^|]*?$/ , "|" + e . start ) ) , this . foldingStopMarker = new RegExp ( this . foldingStopMarker . source . replace ( /\|[^|]*?$/ , "|" + e . end ) ) ) } ; n . inherits ( s , r ) , function ( ) { this . foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/ , this . foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/ , this . getFoldWidgetRange = function ( e , t , i , n ) { var o = e . getLine ( i ) , r = o . match ( this . foldingStartMarker ) ; if ( r ) { var s = r . index ; if ( r [ 1 ] ) return this . openingBracketBlock ( e , r [ 1 ] , i , s ) ; var a = e . getCommentFoldRange ( i , s + r [ 0 ] . length , 1 ) ; return a && ! a . isMultiLine ( ) && ( n ? a = this . getSectionRange ( e , i ) : "all" != t && ( a = null ) ) , a } if ( "markbegin" !== t ) { var r = o . match ( this . foldingStopMarker ) ; if ( r ) { var s = r . index + r [ 0 ] . length ; return r [ 1 ] ? this . closingBracketBlock ( e , r [ 1 ] , i , s ) : e . getCommentFoldRange ( i , s , - 1 ) } } } , this . getSectionRange = function ( e , t ) { var i = e . getLine ( t ) , n = i . search ( /\S/ ) , r = t , s = i . length ; t += 1 ; for ( var a = t , l = e . getLength ( ) ; ++ t < l ; ) { i = e . getLine ( t ) ; var c = i . search ( /\S/ ) ; if ( - 1 !== c ) { if ( n > c ) break ; var h = this . getFoldWidgetRange ( e , "all" , t ) ; if ( h ) { if ( h . start . row <= r ) break ; if ( h . isMultiLine ( ) ) t = h . end . row ; else if ( n == c ) break } a = t } } return new o ( r , s , a , e . getLine ( a ) . length ) } } . call ( s . prototype ) } ) , ace . define ( "ace/mode/json" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/text" , "ace/mode/json_highlight_rules" , "ace/mode/matching_brace_outdent" , "ace/mode/behaviour/cstyle" , "ace/mode/folding/cstyle" , "ace/worker/worker_client" ] , function ( e , t , n ) { "use strict" ; var o = e ( "../lib/oop" ) , r = e ( "./text" ) . Mode , s = e ( "./json_highlight_rules" ) . JsonHighlightRules , a = e ( "./matching_brace_outdent" ) . MatchingBraceOutdent , l = e ( "./behaviour/cstyle" ) . CstyleBehaviour , c = e ( "./folding/cstyle" ) . FoldMode , h = e ( "../worker/worker_client" ) . WorkerClient , u = function ( ) { this . HighlightRules = s , this . $outdent = new a , this . $behaviour = new l , this . foldingRules = new c } ; o . inherits ( u , r ) , function ( ) { this . getNextLineIndent = function ( e , t , i ) { var n = this . $getIndent ( t ) ; if ( "start" == e ) { var o = t . match ( /^.*[\{\(\[]\s*$/ ) ; o && ( n += i ) } return n } , this . checkOutdent = function ( e , t , i ) { return this . $outdent . checkOutdent ( t , i ) } , this . autoOutdent = function ( e , t , i ) { this . $outdent . autoOutdent ( t , i ) } , this . createWorker = function ( e ) { var t = new h ( [ "ace" ] , i ( 17 ) , "JsonWorker" ) ; return t . attachToDocument ( e . getDocument ( ) ) , t . on ( "error" , function ( t ) { e . setAnnotations ( [ t . data ] ) } ) , t . on ( "ok" , function ( ) { e . clearAnnotations ( ) } ) , t } , this . $id = "ace/mode/json" } . call ( u . prototype ) , t . Mode = u } ) } , function ( e , t , i ) { ace . de
} , function ( e , t , i ) { e . exports = function ( ) { throw new Error ( "define cannot be used indirect" ) } } , function ( e , t , i ) { ( function ( t ) { function i ( ) { if ( t . Blob ) try { return new Blob ( [ "asdf" ] , { type : "text/plain" } ) , Blob } catch ( e ) { } var i = t . WebKitBlobBuilder || t . MozBlobBuilder || t . MSBlobBuilder ; return function ( e , t ) { var n = new i , o = t . endings , r = t . type ; if ( o ) for ( var s = 0 , a = e . length ; a > s ; ++ s ) n . append ( e [ s ] , o ) ; else for ( var s = 0 , a = e . length ; a > s ; ++ s ) n . append ( e [ s ] ) ; return r ? n . getBlob ( r ) : n . getBlob ( ) } } e . exports = i ( ) } ) . call ( t , function ( ) { return this } ( ) ) } ] ) } ) ;
//# sourceMappingURL=jsoneditor.map