2017-07-04 01:23:32 +08:00
/ * !
* jsoneditor . js
*
* @ brief
* JSONEditor is a web - based tool to view , edit , format , and validate JSON .
* It has various modes such as a tree editor , a code editor , and a plain text
* editor .
*
* 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 - 2017 Jos de Jong , http : //jsoneditoronline.org
*
* @ author Jos de Jong , < wjosdejong @ gmail . com >
* @ version 5.8 . 1
* @ date 2017 - 07 - 03
* /
! 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 r = i [ n ] = { exports : { } , id : n , loaded : ! 1 } ; return e [ n ] . call ( r . exports , r , r . exports , t ) , r . loaded = ! 0 , r . exports } var i = { } ; return t . m = e , t . c = i , t . p = "" , t ( 0 ) } ( [ function ( e , t , i ) { "use strict" ; function n ( e , t , i ) { if ( ! ( this instanceof n ) ) throw new Error ( 'JSONEditor constructor called without "new".' ) ; var r = a . getInternetExplorerVersion ( ) ; if ( - 1 != r && r < 9 ) throw new Error ( "Unsupported browser, IE9 or newer required. Please install the newest version of your browser." ) ; if ( t && ( t . error && ( console . warn ( 'Option "error" has been renamed to "onError"' ) , t . onError = t . error , delete t . error ) , t . change && ( console . warn ( 'Option "change" has been renamed to "onChange"' ) , t . onChange = t . change , delete t . change ) , t . editable && ( console . warn ( 'Option "editable" has been renamed to "onEditable"' ) , t . onEditable = t . editable , delete t . editable ) , t ) ) { var o = [ "ajv" , "schema" , "templates" , "ace" , "theme" , "autocomplete" , "onChange" , "onEditable" , "onError" , "onModeChange" , "escapeUnicode" , "history" , "search" , "mode" , "modes" , "name" , "indentation" , "sortObjectKeys" ] ; Object . keys ( t ) . forEach ( function ( e ) { - 1 === o . indexOf ( e ) && console . warn ( 'Unknown option "' + e + '". This option will be ignored' ) } ) } arguments . length && this . _create ( e , t , i ) } var r ; try { r = i ( 1 ) } catch ( e ) { } var o = i ( 54 ) , s = i ( 66 ) , a = i ( 57 ) ; n . modes = { } , n . prototype . DEBOUNCE _INTERVAL = 150 , 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 . destroy = function ( ) { } , n . prototype . set = function ( e ) { this . json = e } , n . prototype . get = function ( ) { return this . json } , n . prototype . setText = function ( e ) { this . json = a . 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 , r = this . container , o = a . extend ( { } , this . options ) , s = o . mode ; o . mode = e ; var l = n . modes [ e ] ; if ( ! l ) throw new Error ( 'Unknown mode "' + o . mode + '"' ) ; try { var c = "text" == l . data ; if ( i = this . getName ( ) , t = this [ c ? "getText" : "get" ] ( ) , this . destroy ( ) , a . clear ( this ) , a . extend ( this , l . mixin ) , this . create ( r , o ) , this . setName ( i ) , this [ c ? "setText" : "set" ] ( t ) , "function" == typeof l . load ) try { l . load . call ( this ) } catch ( e ) { console . error ( e ) } if ( "function" == typeof o . onModeChange && e !== s ) try { o . onModeChange ( e , s ) } catch ( e ) { console . error ( e ) } } catch ( e ) { this . _onError ( e ) } } , n . prototype . getMode = function ( ) { return this . options . mode } , n . prototype . _onError = function ( e ) { if ( ! this . options || "function" != typeof this . options . onError ) throw e ; this . options . onError ( e ) } , n . prototype . setSchema = function ( e ) { if ( e ) { var t ; try { t = this . options . ajv || r ( { allErrors : ! 0 , verbose : ! 0 } ) } catch ( e ) { console . warn ( "Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`." ) } t && ( this . validateSchema = t . compile ( e ) , this . options . schema = e , this . validate ( ) ) , this . refresh ( ) } else this . validateSchema = null , this . options . schema = null , this . validate ( ) , this . refresh ( ) } , n . prototype . validate = function ( ) { } , n . prototype . refresh = function ( ) { } , n . registerMode = function ( e ) { var t , i ; if ( a . 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 r = e . mode ; if ( r in n . modes ) throw new Error ( 'Mode "' + r + '" already registered' ) ; if ( "function" != typeof e . mixin . create ) throw new Error ( 'Required function "create" missing on mixin' ) ; var o = [ "setMode" , "registerMode" , "modes" ] ; for ( t = 0 ; t < o . length ; t ++ ) if ( ( i = o [ t ] ) in e . mixin ) throw new Error ( 'Reserved property "' + i + '" not allowed in mixin' ) ; n . modes [ r ] = e } } , n . registerMode ( o ) , n . registerMode ( s ) , e . exports = n } , function ( e , t , i ) { "use strict" ; function n ( e ) { if ( ! ( this inst
var n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPath + e . util . getProperty ( t ) , l = e . errSchemaPath + "/" + t , c = ! e . opts . allErrors , h = "data" + ( o || "" ) , u = "valid" + r , d = e . opts . $data && s && s . $data ; d && ( n += " var schema" + r + " = " + e . util . getData ( s . $data , o , e . dataPathArr ) + "; " ) , d || ( n += " var schema" + r + " = validate.schema" + a + ";" ) , n += "var " + u + " = equal(" + h + ", schema" + r + "); if (!" + u + ") { " ; var f = f || [ ] ; f . push ( n ) , n = "" , ! 1 !== e . createErrors ? ( n += " { keyword: 'const' , dataPath: (dataPath || '') + " + e . errorPath + " , schemaPath: " + e . util . toQuotedString ( l ) + " , params: {} " , ! 1 !== e . opts . messages && ( n += " , message: 'should be equal to constant' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var p = n ; return n = f . pop ( ) , ! e . compositeRule && c ? e . async ? n += " throw new ValidationError([" + p + "]); " : n += " validate.errors = [" + p + "]; return false; " : n += " var err = " + p + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " }" , c && ( n += " else { " ) , n } } , function ( e , t ) { "use strict" ; e . exports = function ( e , t , i ) { var n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPath + e . util . getProperty ( t ) , l = e . errSchemaPath + "/" + t , c = ! e . opts . allErrors , h = "data" + ( o || "" ) , u = "valid" + r , d = "errs__" + r , f = e . util . copy ( e ) ; f . level ++ ; var p = "valid" + f . level , m = "i" + r , g = f . dataLevel = e . dataLevel + 1 , v = "data" + g , w = e . baseId , y = e . util . schemaHasRules ( s , e . RULES . all ) ; if ( n += "var " + d + " = errors;var " + u + ";" , y ) { var A = e . compositeRule ; e . compositeRule = f . compositeRule = ! 0 , f . schema = s , f . schemaPath = a , f . errSchemaPath = l , n += " var " + p + " = false; for (var " + m + " = 0; " + m + " < " + h + ".length; " + m + "++) { " , f . errorPath = e . util . getPathExpr ( e . errorPath , m , e . opts . jsonPointers , ! 0 ) ; var C = h + "[" + m + "]" ; f . dataPathArr [ g ] = m ; var E = e . validate ( f ) ; f . baseId = w , e . util . varOccurences ( E , v ) < 2 ? n += " " + e . util . varReplace ( E , v , C ) + " " : n += " var " + v + " = " + C + "; " + E + " " , n += " if (" + p + ") break; } " , e . compositeRule = f . compositeRule = A , n += " if (!" + p + ") {" } else n += " if (" + h + ".length == 0) {" ; var b = b || [ ] ; b . push ( n ) , n = "" , ! 1 !== e . createErrors ? ( n += " { keyword: 'contains' , dataPath: (dataPath || '') + " + e . errorPath + " , schemaPath: " + e . util . toQuotedString ( l ) + " , params: {} " , ! 1 !== e . opts . messages && ( n += " , message: 'should contain a valid item' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var F = n ; return n = b . pop ( ) , ! e . compositeRule && c ? e . async ? n += " throw new ValidationError([" + F + "]); " : n += " validate.errors = [" + F + "]; return false; " : n += " var err = " + F + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " } else { " , y && ( n += " errors = " + d + "; if (vErrors !== null) { if (" + d + ") vErrors.length = " + d + "; else vErrors = null; } " ) , e . opts . allErrors && ( n += " } " ) , n = e . util . cleanUpCode ( n ) } } , function ( e , t ) { "use strict" ; e . exports = function ( e , t , i ) { var n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPath + e . util . getProperty ( t ) , l = e . errSchemaPath + "/" + t , c = ! e . opts . allErrors , h = "data" + ( o || "" ) , u = "errs__" + r , d = e . util . copy ( e ) , f = "" ; d . level ++ ; var p = "valid" + d . level , m = { } , g = { } , v = e . opts . ownProperties ; for ( C in s ) { var w = s [ C ] , y = Array . isArray ( w ) ? g : m ; y [ C ] = w } n += "var " + u + " = errors;" ; var A = e . errorPath ; n += "var missing" + r + ";" ; for ( var C in g ) if ( y = g [ C ] , y . length ) { if ( n += " if ( " + h + e . util . getProperty ( C ) + " !== undefined " , v && ( n += " && Object.prototype.hasOwnProperty.call(" + h + ", '" + e . util . escapeQuotes ( C ) + "') " ) , c ) { n += " && ( " ; var E = y ; if ( E ) for ( var b , F = - 1 , x = E . length - 1 ; F < x ; ) { b = E [ F += 1 ] , F && ( n += " || " ) ; var S = e . util . getProperty ( b ) , $ = h + S ; n += " ( ( " + $ + " === undefined " , v && ( n += " || ! Object.prototype.hasOwnProperty.call(" + h + ", '" + e . util . escapeQuotes ( b ) + "') " ) , n += ") && (missing" + r + " = " + e . util . toQuotedString ( e . opts . jsonPointers ? b : S ) + ") ) " } n += ")) { " ; var D = "missing" + r , k = "' + " + D + " + '" ; e . opts . _errorDataPathProperty && ( e . errorPath = e . opts . jsonPointers ? e . util . getPathExpr ( A , D , ! 0 ) : A + " + " + D ) ; var B = B || [ ] ; B . push ( n ) , n = "" , ! 1 !== e . createErrors ? ( n += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + e . errorPath + " , schemaPath: " + e . util . toQuotedString ( l ) + " , params: { property: '" + e . util . escapeQuotes ( C ) + " ' , missingPrope
; var t = a . getNodeFromTarget ( e . target ) ; if ( t && t . selected ) { if ( "click" == e . type ) { if ( e . target == t . dom . menu ) return void this . showContextMenu ( e . target ) ; e . hasMoved || this . deselect ( ) } "mousedown" == e . type && a . onDragStart ( this . multiselection . nodes , e ) } else "mousedown" == e . type && ( this . deselect ( ) , t && e . target == t . dom . drag ? a . onDragStart ( t , e ) : ( ! t || e . target != t . dom . field && e . target != t . dom . value && e . target != t . dom . select ) && this . _onMultiSelectStart ( e ) ) ; t && t . onEvent ( e ) } , u . _startDragDistance = function ( e ) { this . dragDistanceEvent = { initialTarget : e . target , initialPageX : e . pageX , initialPageY : e . pageY , dragDistance : 0 , hasMoved : ! 1 } } , u . _updateDragDistance = function ( e ) { this . dragDistanceEvent || this . _startDragDistance ( e ) ; var t = e . pageX - this . dragDistanceEvent . initialPageX , i = e . pageY - this . dragDistanceEvent . initialPageY ; return this . dragDistanceEvent . dragDistance = Math . sqrt ( t * t + i * i ) , this . dragDistanceEvent . hasMoved = this . dragDistanceEvent . hasMoved || this . dragDistanceEvent . dragDistance > 10 , e . dragDistance = this . dragDistanceEvent . dragDistance , e . hasMoved = this . dragDistanceEvent . hasMoved , e . dragDistance } , u . _onMultiSelectStart = function ( e ) { var t = a . getNodeFromTarget ( e . target ) ; if ( "tree" === this . options . mode && void 0 === this . options . onEditable ) { this . multiselection = { start : t || null , end : null , nodes : [ ] } , this . _startDragDistance ( e ) ; var i = this ; this . mousemove || ( this . mousemove = c . addEventListener ( window , "mousemove" , function ( e ) { i . _onMultiSelect ( e ) } ) ) , this . mouseup || ( this . mouseup = c . addEventListener ( window , "mouseup" , function ( e ) { i . _onMultiSelectEnd ( e ) } ) ) } } , u . _onMultiSelect = function ( e ) { if ( e . preventDefault ( ) , this . _updateDragDistance ( e ) , e . hasMoved ) { var t = a . getNodeFromTarget ( e . target ) ; t && ( null == this . multiselection . start && ( this . multiselection . start = t ) , this . multiselection . end = t ) , this . deselect ( ) ; var i = this . multiselection . start , n = this . multiselection . end || this . multiselection . start ; i && n && ( this . multiselection . nodes = this . _findTopLevelNodes ( i , n ) , this . select ( this . multiselection . nodes ) ) } } , u . _onMultiSelectEnd = function ( e ) { this . multiselection . nodes [ 0 ] && this . multiselection . nodes [ 0 ] . dom . menu . focus ( ) , this . multiselection . start = null , this . multiselection . end = null , this . mousemove && ( c . removeEventListener ( window , "mousemove" , this . mousemove ) , delete this . mousemove ) , this . mouseup && ( c . removeEventListener ( window , "mouseup" , this . mouseup ) , delete this . mouseup ) } , u . deselect = function ( e ) { this . multiselection . nodes . forEach ( function ( e ) { e . setSelected ( ! 1 ) } ) , this . multiselection . nodes = [ ] , e && ( this . multiselection . start = null , this . multiselection . end = null ) } , u . select = function ( e ) { if ( ! Array . isArray ( e ) ) return this . select ( [ e ] ) ; if ( e ) { this . deselect ( ) , this . multiselection . nodes = e . slice ( 0 ) ; var t = e [ 0 ] ; e . forEach ( function ( e ) { e . setSelected ( ! 0 , e === t ) } ) } } , u . _findTopLevelNodes = function ( e , t ) { for ( var i = e . getNodePath ( ) , n = t . getNodePath ( ) , r = 0 ; r < i . length && i [ r ] === n [ r ] ; ) r ++ ; var o = i [ r - 1 ] , s = i [ r ] , a = n [ r ] ; if ( s && a || ( o . parent ? ( s = o , a = o , o = o . parent ) : ( s = o . childs [ 0 ] , a = o . childs [ o . childs . length - 1 ] ) ) , o && s && a ) { var l = o . childs . indexOf ( s ) , c = o . childs . indexOf ( a ) , h = Math . min ( l , c ) , u = Math . max ( l , c ) ; return o . childs . slice ( h , u + 1 ) } return [ ] } , u . _onKeyDown = function ( e ) { var t = e . which || e . keyCode , i = e . altKey , n = e . ctrlKey , r = e . metaKey , o = e . shiftKey , s = ! 1 ; if ( 9 == t ) { var l = this ; setTimeout ( function ( ) { c . selectContentEditable ( l . focusTarget ) } , 0 ) } if ( this . searchBox ) if ( n && 70 == t ) this . searchBox . dom . search . focus ( ) , this . searchBox . dom . search . select ( ) , s = ! 0 ; else if ( 114 == t || n && 71 == t ) { o ? this . searchBox . previous ( ! 0 ) : this . searchBox . next ( ! 0 ) , s = ! 0 } if ( this . history && ( n && ! o && 90 == t ? ( this . _onUndo ( ) , s = ! 0 ) : n && o && 90 == t && ( this . _onRedo ( ) , s = ! 0 ) ) , this . options . autocomplete && ! s && ! ( n || i || r || 1 != e . key . length && 8 != t && 46 != t ) ) { s = ! 1 ; var h = "" ; e . target . className . indexOf ( "jsoneditor-value" ) >= 0 && ( h = "value" ) , e . target . className . indexOf ( "jsoneditor-field" ) >= 0 && ( h = "field" ) ; var u = a . getNodeFromTarget ( e . target ) ; setTimeout ( function ( e , t ) { if ( t . innerText . length > 0 ) { var i = this . options . autocomplete . getOptions ( t . innerText , editor . get ( ) , h ) ; "function" == typeof i . then ? i . then ( function ( e ) { e . options ? this . autocomplete . show ( t , e . startFrom , e . options ) : this . autocomplete . show ( t , 0 , e ) } . bind ( this ) ) : i . options ? this . autocomplete . show ( t , i . startFrom , i . options ) : this . autocomplete . show ( t , 0 , i ) } else this . autocomplete . hideDropDown
n . onRemove = function ( e ) { if ( ! Array . isArray ( e ) ) return n . onRemove ( [ e ] ) ; if ( e && e . length > 0 ) { var t = e [ 0 ] , i = t . parent , r = t . editor , o = t . getIndex ( ) ; r . highlighter . unhighlight ( ) ; var s = r . getSelection ( ) ; n . blurNodes ( e ) ; var a = r . getSelection ( ) ; e . forEach ( function ( e ) { e . parent . _remove ( e ) } ) , r . _onAction ( "removeNodes" , { nodes : e . slice ( 0 ) , parent : i , index : o , oldSelection : s , newSelection : a } ) } } , n . onDuplicate = function ( e ) { if ( ! Array . isArray ( e ) ) return n . onDuplicate ( [ e ] ) ; if ( e && e . length > 0 ) { var t = e [ e . length - 1 ] , i = t . parent , r = t . editor ; r . deselect ( r . multiselection . nodes ) ; var o = r . getSelection ( ) , s = t , a = e . map ( function ( e ) { var t = e . clone ( ) ; return i . insertAfter ( t , s ) , s = t , t } ) ; 1 === e . length ? a [ 0 ] . focus ( ) : r . select ( a ) ; var l = r . getSelection ( ) ; r . _onAction ( "duplicateNodes" , { afterNode : t , nodes : a , parent : i , oldSelection : o , newSelection : l } ) } } , n . prototype . _onInsertBefore = function ( e , t , i ) { var r = this . editor . getSelection ( ) , o = new n ( this . editor , { field : void 0 != e ? e : "" , value : void 0 != t ? t : "" , type : i } ) ; o . expand ( ! 0 ) , this . parent . insertBefore ( o , this ) , this . editor . highlighter . unhighlight ( ) , o . focus ( "field" ) ; var s = this . editor . getSelection ( ) ; this . editor . _onAction ( "insertBeforeNodes" , { nodes : [ o ] , beforeNode : this , parent : this . parent , oldSelection : r , newSelection : s } ) } , n . prototype . _onInsertAfter = function ( e , t , i ) { var r = this . editor . getSelection ( ) , o = new n ( this . editor , { field : void 0 != e ? e : "" , value : void 0 != t ? t : "" , type : i } ) ; o . expand ( ! 0 ) , this . parent . insertAfter ( o , this ) , this . editor . highlighter . unhighlight ( ) , o . focus ( "field" ) ; var s = this . editor . getSelection ( ) ; this . editor . _onAction ( "insertAfterNodes" , { nodes : [ o ] , afterNode : this , parent : this . parent , oldSelection : r , newSelection : s } ) } , n . prototype . _onAppend = function ( e , t , i ) { var r = this . editor . getSelection ( ) , o = new n ( this . editor , { field : void 0 != e ? e : "" , value : void 0 != t ? t : "" , type : i } ) ; o . expand ( ! 0 ) , this . parent . appendChild ( o ) , this . editor . highlighter . unhighlight ( ) , o . focus ( "field" ) ; var s = this . editor . getSelection ( ) ; this . editor . _onAction ( "appendNodes" , { nodes : [ o ] , parent : this . parent , oldSelection : r , newSelection : s } ) } , n . prototype . _onChangeType = function ( e ) { var t = this . type ; if ( e != t ) { var i = this . editor . getSelection ( ) ; this . changeType ( e ) ; var n = this . editor . getSelection ( ) ; this . editor . _onAction ( "changeType" , { node : this , oldType : t , newType : e , oldSelection : i , newSelection : n } ) } } , n . prototype . sort = function ( e ) { if ( this . _hasChilds ( ) ) { var t = "desc" == e ? - 1 : 1 , i = "array" == this . type ? "value" : "field" ; this . hideChilds ( ) ; var n = this . childs , o = this . sortOrder ; this . childs = this . childs . concat ( ) , this . childs . sort ( function ( e , n ) { return t * r ( e [ i ] , n [ i ] ) } ) , this . sortOrder = 1 == t ? "asc" : "desc" , this . editor . _onAction ( "sort" , { node : this , oldChilds : n , oldSort : o , newChilds : this . childs , newSort : this . sortOrder } ) , this . showChilds ( ) } } , n . prototype . getAppend = function ( ) { return this . append || ( this . append = new l ( this . editor ) , this . append . setParent ( this ) ) , this . append . getDom ( ) } , n . getNodeFromTarget = function ( e ) { for ( ; e ; ) { if ( e . node ) return e . node ; e = e . parentNode } } , n . blurNodes = function ( e ) { if ( ! Array . isArray ( e ) ) return void n . blurNodes ( [ e ] ) ; var t = e [ 0 ] , i = t . parent , r = t . getIndex ( ) ; i . childs [ r + e . length ] ? i . childs [ r + e . length ] . focus ( ) : i . childs [ r - 1 ] ? i . childs [ r - 1 ] . focus ( ) : i . focus ( ) } , n . prototype . _nextSibling = function ( ) { var e = this . parent . childs . indexOf ( this ) ; return this . parent . childs [ e + 1 ] || this . parent . append } , n . prototype . _previousNode = function ( ) { var e = null , t = this . getDom ( ) ; if ( t && t . parentNode ) { var i = t ; do { i = i . previousSibling , e = n . getNodeFromTarget ( i ) } while ( i && e instanceof l && ! e . isVisible ( ) ) } return e } , n . prototype . _nextNode = function ( ) { var e = null , t = this . getDom ( ) ; if ( t && t . parentNode ) { var i = t ; do { i = i . nextSibling , e = n . getNodeFromTarget ( i ) } while ( i && e instanceof l && ! e . isVisible ( ) ) } return e } , n . prototype . _firstNode = function ( ) { var e = null , t = this . getDom ( ) ; if ( t && t . parentNode ) { var i = t . parentNode . firstChild ; e = n . getNodeFromTarget ( i ) } return e } , n . prototype . _lastNode = function ( ) { var e = null , t = this . getDom ( ) ; if ( t && t . parentNode ) { var i = t . parentNode . lastChild ; for ( e = n . getNodeFromTarget ( i ) ; i && e instanceof l && ! e . isVisible ( ) ; ) i = i . previousSibling , e = n . getNodeFromTarget ( i ) } return e } , n . prototype . _previousElement = function ( e ) { var t = this . dom ; switch ( e ) { case t . value : if ( this . fieldEditable ) return t . field ; case t . field : if ( this . _hasChilds ( ) ) return t . expand ; case t . expand :
; if ( n . renderer . isScrollableBy ( e . wheelX * e . speed , e . wheelY * e . speed ) || i < 200 ) return this . $lastScrollTime = t , n . renderer . scrollBy ( e . wheelX * e . speed , e . wheelY * e . speed ) , e . stop ( ) } } ) . call ( n . prototype ) , t . DefaultHandlers = n } ) , ace . define ( "ace/tooltip" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/dom" ] , function ( e , t , i ) { "use strict" ; function n ( e ) { this . isOpen = ! 1 , this . $element = null , this . $parentNode = e } var r = ( e ( "./lib/oop" ) , e ( "./lib/dom" ) ) ; ( function ( ) { this . $init = function ( ) { return this . $element = r . createElement ( "div" ) , this . $element . className = "ace_tooltip" , this . $element . style . display = "none" , this . $parentNode . appendChild ( this . $element ) , this . $element } , this . getElement = function ( ) { return this . $element || this . $init ( ) } , this . setText = function ( e ) { r . setInnerText ( this . getElement ( ) , e ) } , this . setHtml = function ( e ) { this . getElement ( ) . innerHTML = e } , this . setPosition = function ( e , t ) { this . getElement ( ) . style . left = e + "px" , this . getElement ( ) . style . top = t + "px" } , this . setClassName = function ( e ) { r . addCssClass ( this . getElement ( ) , e ) } , this . show = function ( e , t , i ) { null != e && this . setText ( e ) , null != t && null != i && this . setPosition ( t , i ) , this . isOpen || ( this . getElement ( ) . style . display = "block" , this . isOpen = ! 0 ) } , this . hide = function ( ) { this . isOpen && ( this . getElement ( ) . style . display = "none" , this . isOpen = ! 1 ) } , this . getHeight = function ( ) { return this . getElement ( ) . offsetHeight } , this . getWidth = function ( ) { return this . getElement ( ) . offsetWidth } } ) . call ( n . prototype ) , t . Tooltip = n } ) , ace . define ( "ace/mouse/default_gutter_handler" , [ "require" , "exports" , "module" , "ace/lib/dom" , "ace/lib/oop" , "ace/lib/event" , "ace/tooltip" ] , function ( e , t , i ) { "use strict" ; function n ( e ) { function t ( ) { var t = u . getDocumentPosition ( ) . row , r = l . $annotations [ t ] ; if ( ! r ) return i ( ) ; if ( t == s . session . getLength ( ) ) { var o = s . renderer . pixelToScreenCoordinates ( 0 , u . y ) . row , a = u . $pos ; if ( o > s . session . documentToScreenRow ( a . row , a . column ) ) return i ( ) } if ( d != r ) if ( d = r . text . join ( "<br/>" ) , c . setHtml ( d ) , c . show ( ) , s . _signal ( "showGutterTooltip" , c ) , s . on ( "mousewheel" , i ) , e . $tooltipFollowsMouse ) n ( u ) ; else { var h = u . domEvent . target , f = h . getBoundingClientRect ( ) , p = c . getElement ( ) . style ; p . left = f . right + "px" , p . top = f . bottom + "px" } } function i ( ) { h && ( h = clearTimeout ( h ) ) , d && ( c . hide ( ) , d = null , s . _signal ( "hideGutterTooltip" , c ) , s . removeEventListener ( "mousewheel" , i ) ) } function n ( e ) { c . setPosition ( e . x , e . y ) } var s = e . editor , l = s . renderer . $gutterLayer , c = new r ( s . container ) ; e . editor . setDefaultHandler ( "guttermousedown" , function ( t ) { if ( s . isFocused ( ) && 0 == t . getButton ( ) ) { if ( "foldWidgets" != l . getRegion ( t ) ) { var i = t . getDocumentPosition ( ) . row , n = s . session . selection ; if ( t . getShiftKey ( ) ) n . selectTo ( i , 0 ) ; else { if ( 2 == t . domEvent . detail ) return s . selectAll ( ) , t . preventDefault ( ) ; e . $clickSelection = s . selection . getLineRange ( i ) } return e . setState ( "selectByLines" ) , e . captureMouse ( t ) , t . preventDefault ( ) } } } ) ; var h , u , d ; e . editor . setDefaultHandler ( "guttermousemove" , function ( r ) { var s = r . domEvent . target || r . domEvent . srcElement ; if ( o . hasCssClass ( s , "ace_fold-widget" ) ) return i ( ) ; d && e . $tooltipFollowsMouse && n ( r ) , u = r , h || ( h = setTimeout ( function ( ) { h = null , u && ! e . isMousePressed ? t ( ) : i ( ) } , 50 ) ) } ) , a . addListener ( s . renderer . $gutter , "mouseout" , function ( e ) { u = null , d && ! h && ( h = setTimeout ( function ( ) { h = null , i ( ) } , 50 ) ) } ) , s . on ( "changeSession" , i ) } function r ( e ) { l . call ( this , e ) } var o = e ( "../lib/dom" ) , s = e ( "../lib/oop" ) , a = e ( "../lib/event" ) , l = e ( "../tooltip" ) . Tooltip ; s . inherits ( r , l ) , function ( ) { this . setPosition = function ( e , t ) { var i = window . innerWidth || document . documentElement . clientWidth , n = window . innerHeight || document . documentElement . clientHeight , r = this . getWidth ( ) , o = this . getHeight ( ) ; e += 15 , t += 15 , e + r > i && ( e -= e + r - i ) , t + o > n && ( t -= 20 + o ) , l . prototype . setPosition . call ( this , e , t ) } } . call ( r . prototype ) , t . GutterHandler = n } ) , ace . define ( "ace/mouse/mouse_event" , [ "require" , "exports" , "module" , "ace/lib/event" , "ace/lib/useragent" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/event" ) , r = e ( "../lib/useragent" ) , o = t . MouseEvent = function ( e , t ) { this . domEvent = e , this . editor = t , this . x = this . clientX = e . clientX , this . y = this . clientY = e . clientY , this . $pos = null , this . $inSelection = null , this . propagationStopped = ! 1 , this . defaultPrevented = ! 1 } ; ( function ( ) { this . stopPropagation = function ( ) { n . stopPropagation ( this . domEvent ) , this . propagationStopped = ! 0 } , this . preventDefault = fu
Lo : "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC" , M : "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26" , Mn : " 0300 - 036 F0483 - 04870591 - 05 BD05BF05C105C205C405C505C70610 - 061 A064B - 065E067006 D6 - 06 DC06DF - 06E406 E706E806EA - 06 ED07110730 - 074 A07A6 - 07 B007EB - 07 F30816 - 0819081 B - 08230825 - 08270829 - 082 D0900 - 0902093 C0941 - 0948094 D0951 - 095509620963098109 BC09C1 - 09 C409CD09E209E30A010A020A3C0A410A420A470A480A4B - 0 A4D0A510A700A710A750A810A820ABC0AC1 - 0 AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41 - 0 B440B4D0B560B620B630B820BC00BCD0C3E - 0 C400C46 - 0 C480C4A - 0 C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41 - 0 D440D4D0D620D630DCA0DD2 - 0 DD40DD60E310E34 - 0E3 A0E47 - 0E4 E0EB10EB4 - 0 EB90EBB0EBC0EC8 - 0 ECD0F180F190F350F370F390F71 - 0 F7E0F80 - 0 F840F860F
; this . $modes [ n ] && ! i ? this . $onChangeMode ( this . $modes [ n ] ) : e && e . Mode && ( e = new e . Mode ( i ) , i || ( this . $modes [ n ] = e , e . $id = n ) , this . $onChangeMode ( e ) ) , t && t ( ) } . bind ( this ) ) , 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 r = this ; this . bgTokenizer . addEventListener ( "update" , function ( e ) { r . _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 . $wrapMethod ) , this . $setFolding ( e . foldingRules ) , this . bgTokenizer . start ( 0 ) , this . _emit ( "changeMode" ) ) } } , this . $stopWorker = function ( ) { this . $worker && ( this . $worker . terminate ( ) , this . $worker = null ) } , this . $startWorker = function ( ) { try { this . $worker = this . $mode . createWorker ( this ) } catch ( e ) { o . warn ( "Could not load worker" , e ) , this . $worker = null } } , this . getMode = function ( ) { return this . $mode } , this . $scrollTop = 0 , this . setScrollTop = function ( e ) { this . $scrollTop === e || isNaN ( e ) || ( this . $scrollTop = e , this . _signal ( "changeScrollTop" , e ) ) } , this . getScrollTop = function ( ) { return this . $scrollTop } , this . $scrollLeft = 0 , this . setScrollLeft = function ( e ) { this . $scrollLeft === e || isNaN ( e ) || ( this . $scrollLeft = e , this . _signal ( "changeScrollLeft" , e ) ) } , this . getScrollLeft = function ( ) { return this . $scrollLeft } , this . getScreenWidth = function ( ) { return this . $computeWidth ( ) , this . lineWidgets ? Math . max ( this . getLineWidgetMaxWidth ( ) , this . screenWidth ) : this . screenWidth } , this . getLineWidgetMaxWidth = function ( ) { if ( null != this . lineWidgetsWidth ) return this . lineWidgetsWidth ; var e = 0 ; return this . lineWidgets . forEach ( function ( t ) { t && t . screenWidth > e && ( e = t . screenWidth ) } ) , this . lineWidgetWidth = e } , this . $computeWidth = function ( e ) { if ( this . $modified || e ) { if ( this . $modified = ! 1 , this . $useWrapMode ) return this . screenWidth = this . $wrapLimit ; for ( var t = this . doc . getAllLines ( ) , i = this . $rowLengthCache , n = 0 , r = 0 , o = this . $foldData [ r ] , s = o ? o . start . row : 1 / 0 , a = t . length , l = 0 ; l < a ; l ++ ) { if ( l > s ) { if ( ( l = o . end . row + 1 ) >= a ) break ; o = this . $foldData [ r ++ ] , s = o ? o . start . row : 1 / 0 } null == i [ l ] && ( i [ l ] = this . $getStringScreenWidth ( t [ l ] ) [ 0 ] ) , i [ l ] > n && ( n = i [ l ] ) } this . screenWidth = n } } , this . getLine = function ( e ) { return this . doc . getLine ( e ) } , this . getLines = function ( e , t ) { return this . doc . getLines ( e , t ) } , this . getLength = function ( ) { return this . doc . getLength ( ) } , this . getTextRange = function ( e ) { return this . doc . getTextRange ( e || this . selection . getRange ( ) ) } , this . insert = function ( e , t ) { return this . doc . insert ( e , t ) } , this . remove = function ( e ) { return this . doc . remove ( e ) } , this . removeFullLines = function ( e , t ) { return this . doc . removeFullLines ( e , t ) } , this . undoChanges = function ( e , t ) { if ( e . length ) { this . $fromUndo = ! 0 ; for ( var i = null , n = e . length - 1 ; - 1 != n ; n -- ) { var r = e [ n ] ; "doc" == r . group ? ( this . doc . revertDeltas ( r . deltas ) , i = this . $getUndoSelection ( r . deltas , ! 0 , i ) ) : r . deltas . forEach ( function ( e ) { this . addFolds ( e . folds ) } , this ) } return this . $fromUndo = ! 1 , i && this . $undoSelect && ! t && this . selection . setSelectionRange ( i ) , i } } , this . redoChanges = function ( e , t ) { if ( e . length ) { this . $fromUndo = ! 0 ; for ( var i = null , n = 0 ; n < e . length ; n ++ ) { var r = e [ n ] ; "doc" == r . group && ( this . doc . applyDeltas ( r . deltas ) , i = this . $getUndoSelection ( r . deltas , ! 1 , i ) ) } return this . $fromUndo = ! 1 , i && this . $undoSelect && ! t && this . selection . setSelectionRange ( i ) , i } } , this . setUndoSelect = function ( e ) { this . $undoSelect = e } , this . $getUndoSelection = function ( e , t , i ) { function n ( e ) { return t ? "insert" !== e . action : "insert" === e . action } var r , o , s = e [ 0 ] ; n ( s ) ? r = c . fromPoints ( s . start , s . end ) : r = c . fromPoints ( s . start , s . start ) ; for ( var a = 1 ; a < e . length ; a ++ ) s = e [ a ] , n ( s ) ? ( o = s . start , - 1 == r . compare ( o . row , o . column ) && r . setStart ( o ) , o = s . end , 1 == r . compare ( o . row , o . column ) && r . setEnd ( o ) , ! 0 ) : ( o = s . start , - 1 == r . compare ( o . row , o . column ) && ( r = c . fromPoints ( s . start , s . start ) ) , ! 1 ) ; if ( null != i ) { 0 === c . comparePoints ( i . start , r . start ) && ( i . start . column += r . end . column - r . start . column , i . end . column += r . end . column - r . start . column ) ; var l = i
; 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 r = i . exec ( n ) ; if ( r . index <= t && r . index + r [ 0 ] . length >= t ) { return { value : r [ 0 ] , start : r . index , end : r . index + r [ 0 ] . length } } } return null } , this . modifyNumber = function ( e ) { var t = this . selection . getCursor ( ) . row , i = this . selection . getCursor ( ) . column , n = new f ( t , i - 1 , t , i ) , r = this . session . getTextRange ( n ) ; if ( ! isNaN ( parseFloat ( r ) ) && isFinite ( r ) ) { var o = this . getNumberAt ( t , i ) ; if ( o ) { var s = o . value . indexOf ( "." ) >= 0 ? o . start + o . value . indexOf ( "." ) + 1 : o . end , a = o . start + o . value . length - s , l = parseFloat ( o . value ) ; l *= Math . pow ( 10 , a ) , s !== o . end && i < s ? e *= Math . pow ( 10 , o . end - i - 1 ) : e *= Math . pow ( 10 , o . end - i ) , l += e , l /= Math . pow ( 10 , a ) ; var c = l . toFixed ( a ) , h = new f ( t , o . start , t , o . end ) ; this . session . replace ( h , c ) , this . moveCursorTo ( t , Math . max ( o . start + 1 , i + c . length - o . value . length ) ) } } } , this . removeLines = function ( ) { var e = this . $getSelectedRows ( ) ; this . session . removeFullLines ( e . first , e . last ) , this . clearSelection ( ) } , this . duplicateSelection = function ( ) { var e = this . selection , t = this . session , i = e . getRange ( ) , n = e . isBackwards ( ) ; if ( i . isEmpty ( ) ) { var r = i . start . row ; t . duplicateLines ( r , r ) } else { var o = n ? i . start : i . end , s = t . insert ( o , t . getTextRange ( i ) , ! 1 ) ; i . start = o , i . end = s , e . setSelectionRange ( i , n ) } } , this . moveLinesDown = function ( ) { this . $moveLines ( 1 , ! 1 ) } , this . moveLinesUp = function ( ) { this . $moveLines ( - 1 , ! 1 ) } , this . moveText = function ( e , t , i ) { return this . session . moveText ( e , t , i ) } , this . copyLinesUp = function ( ) { this . $moveLines ( - 1 , ! 0 ) } , this . copyLinesDown = function ( ) { this . $moveLines ( 1 , ! 0 ) } , this . $moveLines = function ( e , t ) { var i , n , r = this . selection ; if ( ! r . inMultiSelectMode || this . inVirtualSelectionMode ) { var o = r . toOrientedRange ( ) ; i = this . $getSelectedRows ( o ) , n = this . session . $moveLines ( i . first , i . last , t ? 0 : e ) , t && - 1 == e && ( n = 0 ) , o . moveBy ( n , 0 ) , r . fromOrientedRange ( o ) } else { var s = r . rangeList . ranges ; r . rangeList . detach ( this . session ) , this . inVirtualSelectionMode = ! 0 ; for ( var a = 0 , l = 0 , c = s . length , h = 0 ; h < c ; h ++ ) { var u = h ; s [ h ] . moveBy ( a , 0 ) , i = this . $getSelectedRows ( s [ h ] ) ; for ( var d = i . first , f = i . last ; ++ h < c ; ) { l && s [ h ] . moveBy ( l , 0 ) ; var p = this . $getSelectedRows ( s [ h ] ) ; if ( t && p . first != f ) break ; if ( ! t && p . first > f + 1 ) break ; f = p . last } for ( h -- , a = this . session . $moveLines ( d , f , t ? 0 : e ) , t && - 1 == e && ( u = h + 1 ) ; u <= h ; ) s [ u ] . moveBy ( a , 0 ) , u ++ ; t || ( a = 0 ) , l += a } r . fromOrientedRange ( r . ranges [ 0 ] ) , r . rangeList . attach ( this . session ) , this . inVirtualSelectionMode = ! 1 } } , this . $getSelectedRows = function ( e ) { return e = ( e || this . getSelectionRange ( ) ) . collapseRows ( ) , { 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 . getLastVisibleRow = function ( ) { return this . renderer . getLastVisibleRow ( ) } , this . isRowVisible = function ( e ) { return e >= this . getFirstVisibleRow ( ) && e <= this . getLastVisibleRow ( ) } , this . isRowFullyVisible = function ( e ) { return e >= this . renderer . getFirstFullyVisibleRow ( ) && e <= this . renderer . getLastFullyVisibleRow ( ) } , this . $getVisibleRowCount = function ( ) { return this . renderer . getScrollBottomRow ( ) - this . renderer . getScrollTopRow ( ) + 1 } , this . $moveByPage = function ( e , t ) { var i = this . renderer , n = this . renderer . layerConfig , r = e * Math . floor ( n . height / n . lineHeight ) ; this . $blockScrolling ++ , ! 0 === t ? this . selection . $moveSelection ( function ( ) { this . moveCursorBy ( r , 0 ) } ) : ! 1 === t && ( this . selection . moveCursorBy ( r , 0 ) , this . selection . clearSelection ( ) ) , this . $blockScrolling -- ; var o = i . scrollTop ; i . scrollBy ( 0 , r * n . lineHeight ) , null != t && i . scrollCursorIntoView ( null , . 5 ) , i . animateScrolling ( o ) } , this . selectPageDown = function ( ) { this . $moveByPage ( 1 , ! 0 ) } , this . selectPageUp = function ( ) { this . $moveByPage ( - 1 , ! 0 ) } , this . gotoPageDown = function ( ) { this . $moveByPage ( 1 , ! 1 ) } , this . gotoPageUp = function ( ) { this . $moveByPage ( - 1 , ! 1 ) } , this . scrollPageDown = function ( ) { this . $moveByPage ( 1 ) } , this . scrollPageUp = function ( ) { this . $moveByPage ( - 1 ) } , this . scrollToRow = function ( e ) { this . renderer . scrollToRow ( e ) } , this . scrol
this . session && - 1 == this . session . $wrap && 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 ) { var e = this . layerConfig , t = this . $cursorLayer . $pixelPos . top , i = this . $cursorLayer . $pixelPos . left ; t -= e . offset ; var n = this . textarea . style , r = this . lineHeight ; if ( t < 0 || t > e . height - r ) return void ( n . top = n . left = "0" ) ; var o = this . characterWidth ; if ( this . $composition ) { var s = this . textarea . value . replace ( /^\x01+/ , "" ) ; o *= this . session . $getStringScreenWidth ( s ) [ 0 ] + 2 , r += 2 } i -= this . scrollLeft , i > this . $size . scrollerWidth - o && ( i = this . $size . scrollerWidth - o ) , i += this . gutterWidth , n . height = r + "px" , n . width = o + "px" , n . left = Math . min ( i , this . $size . scrollerWidth - o ) + "px" , n . top = Math . min ( t , this . $size . height - r ) + "px" } } , this . getFirstVisibleRow = function ( ) { return this . layerConfig . firstRow } , this . getFirstFullyVisibleRow = function ( ) { return this . layerConfig . firstRow + ( 0 === this . layerConfig . offset ? 0 : 1 ) } , this . getLastFullyVisibleRow = function ( ) { var e = this . layerConfig , t = e . lastRow ; return this . session . documentToScreenRow ( t , 0 ) * e . lineHeight - this . session . getScrollTop ( ) > e . height - e . lineHeight ? t - 1 : t } , this . getLastVisibleRow = function ( ) { return this . layerConfig . lastRow } , this . $padding = null , this . setPadding = function ( e ) { this . $padding = e , this . $textLayer . setPadding ( e ) , this . $cursorLayer . setPadding ( e ) , this . $markerFront . setPadding ( e ) , this . $markerBack . setPadding ( e ) , this . $loop . schedule ( this . CHANGE _FULL ) , this . $updatePrintMargin ( ) } , this . setScrollMargin = function ( e , t , i , n ) { var r = this . scrollMargin ; r . top = 0 | e , r . bottom = 0 | t , r . right = 0 | n , r . left = 0 | i , r . v = r . top + r . bottom , r . h = r . left + r . right , r . top && this . scrollTop <= 0 && this . session && this . session . setScrollTop ( - r . top ) , this . updateFull ( ) } , this . getHScrollBarAlwaysVisible = function ( ) { return this . $hScrollBarAlwaysVisible } , this . setHScrollBarAlwaysVisible = function ( e ) { this . setOption ( "hScrollBarAlwaysVisible" , e ) } , this . getVScrollBarAlwaysVisible = function ( ) { return this . $vScrollBarAlwaysVisible } , 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 . $showGut
; return o [ 1 ] ? this . closingBracketBlock ( e , o [ 1 ] , i , s ) : e . getCommentFoldRange ( i , s , - 1 ) } } } , this . getSectionRange = function ( e , t ) { var i = e . getLine ( t ) , n = i . search ( /\S/ ) , o = 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 <= o ) break ; if ( h . isMultiLine ( ) ) t = h . end . row ; else if ( n == c ) break } a = t } } return new r ( o , s , a , e . getLine ( a ) . length ) } , this . getCommentRegionBlock = function ( e , t , i ) { for ( var n = t . search ( /\s*$/ ) , o = e . getLength ( ) , s = i , a = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/ , l = 1 ; ++ i < o ; ) { t = e . getLine ( i ) ; var c = a . exec ( t ) ; if ( c && ( c [ 1 ] ? l -- : l ++ , ! l ) ) break } var h = i ; if ( h > s ) return new r ( s , n , h , t . 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 r = e ( "../lib/oop" ) , o = 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 } ; r . inherits ( u , o ) , function ( ) { this . getNextLineIndent = function ( e , t , i ) { var n = this . $getIndent ( t ) ; if ( "start" == e ) { t . match ( /^.*[\{\(\[]\s*$/ ) && ( 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 ( 72 ) , "JsonWorker" ) ; return t . attachToDocument ( e . getDocument ( ) ) , t . on ( "annotate" , function ( t ) { e . setAnnotations ( t . data ) } ) , t . on ( "terminate" , function ( ) { e . clearAnnotations ( ) } ) , t } , this . $id = "ace/mode/json" } . call ( u . prototype ) , t . Mode = u } ) } , function ( e , t ) { e . exports . id = "ace/mode/json_worker" , e . exports . src = ' "no use strict" ; ( function ( window ) { function resolveModuleId ( id , paths ) { for ( var testPath = id , tail = "" ; testPath ; ) { var alias = paths [ testPath ] ; if ( "string" == typeof alias ) return alias + tail ; if ( alias ) return alias . location . replace ( /\\/ * $ / , "/" ) + ( tail || alias . main || alias . name ) ; if ( alias === ! 1 ) return "" ; var i = testPath . lastIndexOf ( "/" ) ; if ( - 1 === i ) break ; tail = testPath . substr ( i ) + tail , testPath = testPath . slice ( 0 , i ) } return id } if ( ! ( void 0 !== window . window && window . document || window . acequire && window . define ) ) { window . console || ( window . console = function ( ) { var msgs = Array . prototype . slice . call ( arguments , 0 ) ; postMessage ( { type : "log" , data : msgs } ) } , window . console . error = window . console . warn = window . console . log = window . console . trace = window . console ) , window . window = window , 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 , stack : err . stack } } ) } , window . normalizeModule = function ( parentId , moduleName ) { if ( - 1 !== moduleName . indexOf ( "!" ) ) { var chunks = moduleName . split ( "!" ) ; return window . normalizeModule ( parentId , chunks [ 0 ] ) + "!" + window . normalizeModule ( parentId , chunks [ 1 ] ) } if ( "." == moduleName . charAt ( 0 ) ) { var base = parentId . split ( "/" ) . slice ( 0 , - 1 ) . join ( "/" ) ; for ( moduleName = ( base ? base + "/" : "" ) + moduleName ; - 1 !== moduleName . indexOf ( "." ) && previous != moduleName ; ) { var previous = moduleName ; moduleName = moduleName . replace ( /^\\.\\/ / , "" ) . replace ( /\\/ \ \ . \ \ //,"/").replace(/[^\\/]+\\/\\.\\.\\//,"")}}return moduleName},window.acequire=function acequire(parentId,id){if(id||(id=parentId,parentId=null),!id.charAt)throw Error("worker.js acequire() accepts only (parentId, id) as arguments");id=window.normalizeModule(parentId,id);var module=window.acequire.modules[id];if(module)return module.initialized||(module.initialized=!0,module.exports=module.factory().exports),module.exports;if(!window.acequire.tlns)return console.log("unable to load "+id);var path=resolveModuleId(id,window.acequire.tlns);return".js"!=path.slice(-3)&&(path+=".js"),window.acequire.id=id,window.acequire.modules[id]={},importScripts(path),window.acequire(parentId,id)},window.acequire.modules={},window.acequire.tlns={},win
//# sourceMappingURL=jsoneditor.map