2013-05-04 04:55:15 +08:00
/ * !
* jsoneditor . js
*
* @ brief
2016-01-15 04:26:39 +08:00
* 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 .
2013-05-04 04:55:15 +08:00
*
* 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 .
*
2016-01-15 04:26:39 +08:00
* Copyright ( c ) 2011 - 2016 Jos de Jong , http : //jsoneditoronline.org
2013-05-04 04:55:15 +08:00
*
* @ author Jos de Jong , < wjosdejong @ gmail . com >
2016-02-03 15:14:46 +08:00
* @ version 5.1 . 3
* @ date 2016 - 02 - 03
2013-05-04 05:26:09 +08:00
* /
2016-02-03 15:14:46 +08:00
! 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 ) { function n ( e , t , i ) { if ( ! ( this instanceof n ) ) throw new Error ( 'JSONEditor constructor called without "new".' ) ; var r = l . getInternetExplorerVersion ( ) ; if ( - 1 != r && 9 > r ) 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 = [ "ace" , "theme" , "ajv" , "schema" , "onChange" , "onEditable" , "onError" , "onModeChange" , "escapeUnicode" , "history" , "search" , "mode" , "modes" , "name" , "indentation" ] ; 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 ( 10 ) } catch ( o ) { } var s = i ( 1 ) , a = i ( 2 ) , l = i ( 3 ) ; 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 . _delete = function ( ) { } , n . prototype . set = function ( e ) { this . json = e } , n . prototype . get = function ( ) { return this . json } , n . prototype . setText = function ( e ) { this . json = l . 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 = l . extend ( { } , this . options ) , s = o . mode ; o . mode = e ; var a = n . modes [ e ] ; if ( ! a ) throw new Error ( 'Unknown mode "' + o . mode + '"' ) ; try { var c = "text" == a . data ; if ( i = this . getName ( ) , t = this [ c ? "getText" : "get" ] ( ) , this . _delete ( ) , l . clear ( this ) , l . extend ( this , a . mixin ) , this . create ( r , o ) , this . setName ( i ) , this [ c ? "setText" : "set" ] ( t ) , "function" == typeof a . load ) try { a . load . call ( this ) } catch ( h ) { console . error ( h ) } if ( "function" == typeof o . onModeChange && e !== s ) try { o . onModeChange ( e , s ) } catch ( h ) { console . error ( h ) } } catch ( h ) { this . _onError ( h ) } } , 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 ( i ) { 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 ( ) ) } else this . validateSchema = null , this . options . schema = null , this . validate ( ) } , n . prototype . validate = function ( ) { } , n . registerMode = function ( e ) { var t , i ; if ( l . 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 ] , i in e . mixin ) throw new Error ( 'Reserved property "' + i + '" not allowed in mixin' ) ; n . modes [ r ] = e } } , n . registerMode ( s ) , n . registerMode ( a ) , e . exports = n } , function ( e , t , i ) { var n = i ( 5 ) , r = i ( 6 ) , o = i ( 7 ) , s = i ( 8 ) , a = i ( 9 ) , l = i ( 4 ) , c = i ( 3 ) , h = { } ; h . create = function ( e , t ) { if ( ! e ) throw new Error ( "No container element provided." ) ; this . container = e , this . dom = { }
this . history = [ ] , this . index = - 1 , this . onChange ( ) } , n . prototype . canUndo = function ( ) { return this . index >= 0 } , n . prototype . canRedo = function ( ) { return this . index < this . history . length - 1 } , n . prototype . undo = function ( ) { if ( this . canUndo ( ) ) { var e = this . history [ this . index ] ; if ( e ) { var t = this . actions [ e . action ] ; t && t . undo ? ( t . undo ( e . params ) , e . params . oldSelection && this . editor . setSelection ( e . params . oldSelection ) ) : console . error ( new Error ( 'unknown action "' + e . action + '"' ) ) } this . index -- , this . onChange ( ) } } , n . prototype . redo = function ( ) { if ( this . canRedo ( ) ) { this . index ++ ; var e = this . history [ this . index ] ; if ( e ) { var t = this . actions [ e . action ] ; t && t . redo ? ( t . redo ( e . params ) , e . params . newSelection && this . editor . setSelection ( e . params . newSelection ) ) : console . error ( new Error ( 'unknown action "' + e . action + '"' ) ) } this . onChange ( ) } } , e . exports = n } , function ( e , t , i ) { function n ( e , t ) { var i = this ; this . editor = e , this . timeout = void 0 , this . delay = 200 , this . lastText = void 0 , this . dom = { } , this . dom . container = t ; var n = document . createElement ( "table" ) ; this . dom . table = n , n . className = "jsoneditor-search" , t . appendChild ( n ) ; var r = document . createElement ( "tbody" ) ; this . dom . tbody = r , n . appendChild ( r ) ; var o = document . createElement ( "tr" ) ; r . appendChild ( o ) ; var s = document . createElement ( "td" ) ; o . appendChild ( s ) ; var a = document . createElement ( "div" ) ; this . dom . results = a , a . className = "jsoneditor-results" , s . appendChild ( a ) , s = document . createElement ( "td" ) , o . appendChild ( s ) ; var l = document . createElement ( "div" ) ; this . dom . input = l , l . className = "jsoneditor-frame" , l . title = "Search fields and values" , s . appendChild ( l ) ; var c = document . createElement ( "table" ) ; l . appendChild ( c ) ; var h = document . createElement ( "tbody" ) ; c . appendChild ( h ) , o = document . createElement ( "tr" ) , h . appendChild ( o ) ; var d = document . createElement ( "button" ) ; d . className = "jsoneditor-refresh" , s = document . createElement ( "td" ) , s . appendChild ( d ) , o . appendChild ( s ) ; var u = document . createElement ( "input" ) ; this . dom . search = u , u . oninput = function ( e ) { i . _onDelayedSearch ( e ) } , u . onchange = function ( e ) { i . _onSearch ( ) } , u . onkeydown = function ( e ) { i . _onKeyDown ( e ) } , u . onkeyup = function ( e ) { i . _onKeyUp ( e ) } , d . onclick = function ( e ) { u . select ( ) } , s = document . createElement ( "td" ) , s . appendChild ( u ) , o . appendChild ( s ) ; var f = document . createElement ( "button" ) ; f . title = "Next result (Enter)" , f . className = "jsoneditor-next" , f . onclick = function ( ) { i . next ( ) } , s = document . createElement ( "td" ) , s . appendChild ( f ) , o . appendChild ( s ) ; var p = document . createElement ( "button" ) ; p . title = "Previous result (Shift+Enter)" , p . className = "jsoneditor-previous" , p . onclick = function ( ) { i . previous ( ) } , s = document . createElement ( "td" ) , s . appendChild ( p ) , o . appendChild ( s ) } n . prototype . next = function ( e ) { if ( void 0 != this . results ) { var t = void 0 != this . resultIndex ? this . resultIndex + 1 : 0 ; t > this . results . length - 1 && ( t = 0 ) , this . _setActiveResult ( t , e ) } } , n . prototype . previous = function ( e ) { if ( void 0 != this . results ) { var t = this . results . length - 1 , i = void 0 != this . resultIndex ? this . resultIndex - 1 : t ; 0 > i && ( i = t ) , this . _setActiveResult ( i , e ) } } , n . prototype . _setActiveResult = function ( e , t ) { if ( this . activeResult ) { var i = this . activeResult . node , n = this . activeResult . elem ; "field" == n ? delete i . searchFieldActive : delete i . searchValueActive , i . updateDom ( ) } if ( ! this . results || ! this . results [ e ] ) return this . resultIndex = void 0 , void ( this . activeResult = void 0 ) ; this . resultIndex = e ; var r = this . results [ this . resultIndex ] . node , o = this . results [ this . resultIndex ] . elem ; "field" == o ? r . searchFieldActive = ! 0 : r . searchValueActive = ! 0 , this . activeResult = this . results [ this . resultIndex ] , r . updateDom ( ) , r . scrollTo ( function ( ) { t && r . focus ( o ) } ) } , n . prototype . _clearDelay = function ( ) { void 0 != this . timeout && ( clearTimeout ( this . timeout ) , delete this . timeout ) } , n . prototype . _onDelayedSearch = function ( e ) { this . _clearDelay ( ) ; var t = this ; this . timeout = setTimeout ( function ( e ) { t . _onSearch ( ) } , this . delay ) } , n . prototype . _onSearch = function ( e ) { this . _clearDelay ( ) ; var t = this . dom . search . value , i = t . length > 0 ? t : void 0 ; if ( i != this . lastText || e ) if ( this . lastText = i , this . results = this . editor . search ( i ) , this . _setActiveResult ( void 0 ) , void 0 != i ) { var n = this . results . length ; switch ( n ) { case 0 : this . dom . results . innerHTML = "no results" ; break ; case 1 : this . dom . results . innerHTML = "1 result" ; break ; default : this . dom . results . innerHTML = n + " results" } } else this . do
"click" == i && n == r . menu ) { var l = o . editor . highlighter ; l . highlight ( o ) , l . lock ( ) , s . addClassName ( r . menu , "jsoneditor-selected" ) , this . showContextMenu ( r . menu , function ( ) { s . removeClassName ( r . menu , "jsoneditor-selected" ) , l . unlock ( ) , l . unhighlight ( ) } ) } if ( "click" == i && ( n == r . expand || ( "view" === o . editor . options . mode || "form" === o . editor . options . mode ) && "DIV" === n . nodeName ) && a ) { var c = e . ctrlKey ; this . _onExpand ( c ) } "change" == i && n == r . checkbox && ( this . dom . value . innerHTML = ! this . value , this . _getDomValue ( ) ) ; var h = r . value ; if ( n == h ) switch ( i ) { case "focus" : t = this ; break ; case "blur" : case "change" : this . _getDomValue ( ! 0 ) , this . _updateDomValue ( ) , this . value && ( h . innerHTML = this . _escapeHTML ( this . value ) ) ; break ; case "input" : this . _getDomValue ( ! 0 ) , this . _updateDomValue ( ) ; break ; case "keydown" : case "mousedown" : this . editor . selection = this . editor . getSelection ( ) ; break ; case "click" : ( e . ctrlKey || ! this . editable . value ) && s . isUrl ( this . value ) && window . open ( this . value , "_blank" ) ; break ; case "keyup" : this . _getDomValue ( ! 0 ) , this . _updateDomValue ( ) ; break ; case "cut" : case "paste" : setTimeout ( function ( ) { o . _getDomValue ( ! 0 ) , o . _updateDomValue ( ) } , 1 ) } var d = r . field ; if ( n == d ) switch ( i ) { case "focus" : t = this ; break ; case "blur" : case "change" : this . _getDomField ( ! 0 ) , this . _updateDomField ( ) , this . field && ( d . innerHTML = this . _escapeHTML ( this . field ) ) ; break ; case "input" : this . _getDomField ( ! 0 ) , this . _updateDomField ( ) ; break ; case "keydown" : case "mousedown" : this . editor . selection = this . editor . getSelection ( ) ; break ; case "keyup" : this . _getDomField ( ! 0 ) , this . _updateDomField ( ) ; break ; case "cut" : case "paste" : setTimeout ( function ( ) { o . _getDomField ( ! 0 ) , o . _updateDomField ( ) } , 1 ) } var u = r . tree ; if ( n == u . parentNode && "click" == i && ! e . hasMoved ) { var f = void 0 != e . offsetX ? e . offsetX < 24 * ( this . getLevel ( ) + 1 ) : e . pageX < s . getAbsoluteLeft ( r . tdSeparator ) ; f || a ? d && ( s . setEndOfContentEditable ( d ) , d . focus ( ) ) : h && ( s . setEndOfContentEditable ( h ) , h . focus ( ) ) } ( n != r . tdExpand || a ) && n != r . tdField && n != r . tdSeparator || "click" != i || e . hasMoved || d && ( s . setEndOfContentEditable ( d ) , d . focus ( ) ) , "keydown" == i && this . onKeyDown ( e ) } , n . prototype . onKeyDown = function ( e ) { var t , i , r , o , l , c , h , d , u = e . which || e . keyCode , f = e . target || e . srcElement , p = e . ctrlKey , g = e . shiftKey , m = e . altKey , v = ! 1 , w = "tree" === this . editor . options . mode , A = this . editor . multiselection . nodes . length > 0 ? this . editor . multiselection . nodes : [ this ] , y = A [ 0 ] , C = A [ A . length - 1 ] ; if ( 13 == u ) { if ( f == this . dom . value ) ( ! this . editable . value || e . ctrlKey ) && s . isUrl ( this . value ) && ( window . open ( this . value , "_blank" ) , v = ! 0 ) ; else if ( f == this . dom . expand ) { var E = this . _hasChilds ( ) ; if ( E ) { var b = e . ctrlKey ; this . _onExpand ( b ) , f . focus ( ) , v = ! 0 } } } else if ( 68 == u ) p && w && ( n . onDuplicate ( A ) , v = ! 0 ) ; else if ( 69 == u ) p && ( this . _onExpand ( g ) , f . focus ( ) , v = ! 0 ) ; else if ( 77 == u && w ) p && ( this . showContextMenu ( f ) , v = ! 0 ) ; else if ( 46 == u && w ) p && ( n . onRemove ( A ) , v = ! 0 ) ; else if ( 45 == u && w ) p && ! g ? ( this . _onInsertBefore ( ) , v = ! 0 ) : p && g && ( this . _onInsertAfter ( ) , v = ! 0 ) ; else if ( 35 == u ) { if ( m ) { var F = this . _lastNode ( ) ; F && F . focus ( n . focusElement || this . _getElementName ( f ) ) , v = ! 0 } } else if ( 36 == u ) { if ( m ) { var x = this . _firstNode ( ) ; x && x . focus ( n . focusElement || this . _getElementName ( f ) ) , v = ! 0 } } else if ( 37 == u ) { if ( m && ! g ) { var S = this . _previousElement ( f ) ; S && this . focus ( this . _getElementName ( S ) ) , v = ! 0 } else if ( m && g && w ) { if ( C . expanded ) { var $ = C . getAppend ( ) ; r = $ ? $ . nextSibling : void 0 } else { var D = C . getDom ( ) ; r = D . nextSibling } r && ( i = n . getNodeFromTarget ( r ) , o = r . nextSibling , _ = n . getNodeFromTarget ( o ) , i && i instanceof a && 1 != C . parent . childs . length && _ && _ . parent && ( l = this . editor . getSelection ( ) , c = C . _nextSibling ( ) , A . forEach ( function ( e ) { _ . parent . moveBefore ( e , _ ) } ) , this . focus ( n . focusElement || this . _getElementName ( f ) ) , this . editor . _onAction ( "moveNodes" , { nodes : A , oldBeforeNode : c , newBeforeNode : _ , oldSelection : l , newSelection : this . editor . getSelection ( ) } ) ) ) } } else if ( 38 == u ) m && ! g ? ( t = this . _previousNode ( ) , t && ( this . editor . deselect ( ! 0 ) , t . focus ( n . focusElement || this . _getElementName ( f ) ) ) , v = ! 0 ) : ! m && p && g && w ? ( t = this . _previousNode ( ) , t && ( d = this . editor . multiselection , d . start = d . start || this , d . end = t , h = this . editor . _findTopLevelNodes ( d . start , d . end ) , this . editor . select ( h ) , t . focus ( "field" ) ) , v = ! 0 ) : m && g && w && ( t = y . _previousNode ( ) , t && t . parent && ( l = this . editor . getSelection ( ) , c = C . _nextSibling ( ) , A . forEach ( function ( e ) { t . parent . moveBefore ( e , t ) } ) , this . focus ( n . focusElement || this . _getElementName (
n . fullPath = h , n . url = f , n . ids = p , n . inlineRef = a ; var A = v . toHash ( [ "properties" , "patternProperties" , "enum" , "dependencies" , "definitions" ] ) , y = v . toHash ( [ "type" , "format" , "pattern" , "maxLength" , "minLength" , "maxProperties" , "minProperties" , "maxItems" , "minItems" , "maximum" , "minimum" , "uniqueItems" , "multipleOf" , "required" , "enum" ] ) , C = /#\/?$/ } , function ( e , t , i ) { "use strict" ; var n = e . exports = function ( ) { this . _cache = { } } ; n . prototype . put = function ( e , t ) { this . _cache [ e ] = t } , n . prototype . get = function ( e ) { return this . _cache [ e ] } , n . prototype . del = function ( e ) { delete this . _cache [ e ] } } , function ( e , t , i ) { "use strict" ; function n ( e ) { r . copy ( e , this ) } var r = i ( 30 ) ; e . exports = n } , function ( e , t , i ) { "use strict" ; function n ( e ) { e = "full" == e ? "full" : "fast" ; var t = f . copy ( n [ e ] ) ; for ( var i in n . compare ) t [ i ] = { validate : t [ i ] , compare : n . compare [ i ] } ; return t } function r ( e ) { var t = e . match ( p ) ; if ( ! t ) return ! 1 ; var i = + t [ 1 ] , n = + t [ 2 ] ; return i >= 1 && 12 >= i && n >= 1 && n <= g [ i ] } function o ( e , t ) { var i = e . match ( m ) ; if ( ! i ) return ! 1 ; var n = i [ 1 ] , r = i [ 2 ] , o = i [ 3 ] , s = i [ 5 ] ; return 23 >= n && 59 >= r && 59 >= o && ( ! t || s ) } function s ( e ) { var t = e . split ( E ) ; return r ( t [ 0 ] ) && o ( t [ 1 ] , ! 0 ) } function a ( e ) { return e . length <= 255 && v . test ( e ) } function l ( e ) { return b . test ( e ) && w . test ( e ) } function c ( e ) { try { return new RegExp ( e ) , ! 0 } catch ( t ) { return ! 1 } } function h ( e , t ) { return e && t ? e > t ? 1 : t > e ? - 1 : e === t ? 0 : void 0 : void 0 } function d ( e , t ) { return e && t && ( e = e . match ( m ) , t = t . match ( m ) , e && t ) ? ( e = e [ 1 ] + e [ 2 ] + e [ 3 ] + ( e [ 4 ] || "" ) , t = t [ 1 ] + t [ 2 ] + t [ 3 ] + ( t [ 4 ] || "" ) , e > t ? 1 : t > e ? - 1 : e === t ? 0 : void 0 ) : void 0 } function u ( e , t ) { if ( e && t ) { e = e . split ( E ) , t = t . split ( E ) ; var i = h ( e [ 0 ] , t [ 0 ] ) ; if ( void 0 !== i ) return i || d ( e [ 1 ] , t [ 1 ] ) } } var f = i ( 30 ) , p = /^\d\d\d\d-(\d\d)-(\d\d)$/ , g = [ 0 , 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] , m = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i , v = /^[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?(\.[a-z](?:(?:[-0-9a-z]{0,61})?[0-9a-z])?)*$/i , w = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?(?:\#(?:[a-z0-9\-._~!$&'()*+,;=:@\/?]|%[0-9a-f]{2})*)?$/i , A = /^(?:urn\:uuid\:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i , y = /^(?:\/(?:[^~\/]|~0|~1)+)*(?:\/)?$|^\#(?:\/(?:[a-z0-9_\-\.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)+)*(?:\/)?$/i , C = /^(?:0|[1-9][0-9]*)(?:\#|(?:\/(?:[^~\/]|~0|~1)+)*(?:\/)?)$/ ; e . exports = n , n . fast = { date : /^\d\d\d\d-[0-1]\d-[0-3]\d$/ , time : /^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i , "date-time" : /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)$/i , uri : /^(?:[a-z][a-z0-9+-.]*)?(?:\:|\/)\/?[^\s]*$/i , email : /^[a-z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i , hostname : v , ipv4 : /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/ , ipv6 : / ^ \ s * ( ? : ( ? : ( ? : [ 0 - 9 a - f ] { 1 , 4 } : ) { 7 } ( ? : [ 0 - 9 a - f ] { 1 , 4 } | : ) ) | ( ? : ( ? : [ 0 - 9 a - f ] { 1 , 4 } : ) { 6 } ( ? : : [ 0 - 9 a - f ] { 1 , 4 } | ( ? : ( ? : 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \ d | 1 \ d \ d | [ 1 - 9 ] ? \ d ) ( ? : \ . ( ? : 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \ d | 1 \ d \ d | [ 1 - 9 ] ? \ d ) ) { 3 } ) | : ) ) | ( ? : ( ? : [ 0 - 9 a - f ] { 1 , 4 } : ) { 5 } ( ? : ( ? : ( ? : : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 2 } ) | : ( ? : ( ? : 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \ d | 1 \ d \ d | [ 1 - 9 ] ? \ d ) ( ? : \ . ( ? : 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \ d | 1 \ d \ d | [ 1 - 9 ] ? \ d ) ) { 3 } ) | : ) ) | ( ? : ( ? : [ 0 - 9 a - f ] { 1 , 4 } : ) { 4 } ( ? : ( ? : ( ? : : [ 0 - 9 a - f ] { 1 , 4 } ) { 1 , 3 } ) | ( ? : ( ? : : [ 0 - 9 a - f ] { 1 , 4 } ) ? : ( ? : ( ? : 2 5 [ 0 - 5 ] | 2 [ 0 - 4 ] \ d | 1 \ d \ d | [ 1 - 9 ] ? \ d ) ( ? : \ .
} , t . getPageScrollLeft = function ( ) { return document . body . scrollLeft } ) , window . getComputedStyle ? t . computedStyle = function ( e , t ) { return t ? ( window . getComputedStyle ( e , "" ) || { } ) [ t ] || "" : window . getComputedStyle ( e , "" ) || { } } : t . computedStyle = function ( e , t ) { return t ? e . currentStyle [ t ] : e . currentStyle } , t . setInnerHtml = function ( e , t ) { var i = e . cloneNode ( ! 1 ) ; return i . innerHTML = t , e . parentNode . replaceChild ( i , e ) , i } , "textContent" in document . documentElement ? ( t . setInnerText = function ( e , t ) { e . textContent = t } , t . getInnerText = function ( e ) { return e . textContent } ) : ( t . setInnerText = function ( e , t ) { e . innerText = t } , t . getInnerText = function ( e ) { return e . innerText } ) , void ( t . getParentWindow = function ( e ) { return e . defaultView || e . parentWindow } ) ) } ) , ace . define ( "ace/lib/oop" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; t . inherits = function ( e , t ) { e . super _ = t , e . prototype = Object . create ( t . prototype , { constructor : { value : e , enumerable : ! 1 , writable : ! 0 , configurable : ! 0 } } ) } , t . mixin = function ( e , t ) { for ( var i in t ) e [ i ] = t [ i ] ; return e } , t . implement = function ( e , i ) { t . mixin ( e , i ) } } ) , ace . define ( "ace/lib/keys" , [ "require" , "exports" , "module" , "ace/lib/fixoldbrowsers" , "ace/lib/oop" ] , function ( e , t , i ) { "use strict" ; e ( "./fixoldbrowsers" ) ; var n = e ( "./oop" ) , r = function ( ) { var e , t , i = { MODIFIER _KEYS : { 16 : "Shift" , 17 : "Ctrl" , 18 : "Alt" , 224 : "Meta" } , KEY _MODS : { ctrl : 1 , alt : 2 , option : 2 , shift : 4 , "super" : 8 , meta : 8 , command : 8 , cmd : 8 } , FUNCTION _KEYS : { 8 : "Backspace" , 9 : "Tab" , 13 : "Return" , 19 : "Pause" , 27 : "Esc" , 32 : "Space" , 33 : "PageUp" , 34 : "PageDown" , 35 : "End" , 36 : "Home" , 37 : "Left" , 38 : "Up" , 39 : "Right" , 40 : "Down" , 44 : "Print" , 45 : "Insert" , 46 : "Delete" , 96 : "Numpad0" , 97 : "Numpad1" , 98 : "Numpad2" , 99 : "Numpad3" , 100 : "Numpad4" , 101 : "Numpad5" , 102 : "Numpad6" , 103 : "Numpad7" , 104 : "Numpad8" , 105 : "Numpad9" , "-13" : "NumpadEnter" , 112 : "F1" , 113 : "F2" , 114 : "F3" , 115 : "F4" , 116 : "F5" , 117 : "F6" , 118 : "F7" , 119 : "F8" , 120 : "F9" , 121 : "F10" , 122 : "F11" , 123 : "F12" , 144 : "Numlock" , 145 : "Scrolllock" } , PRINTABLE _KEYS : { 32 : " " , 48 : "0" , 49 : "1" , 50 : "2" , 51 : "3" , 52 : "4" , 53 : "5" , 54 : "6" , 55 : "7" , 56 : "8" , 57 : "9" , 59 : ";" , 61 : "=" , 65 : "a" , 66 : "b" , 67 : "c" , 68 : "d" , 69 : "e" , 70 : "f" , 71 : "g" , 72 : "h" , 73 : "i" , 74 : "j" , 75 : "k" , 76 : "l" , 77 : "m" , 78 : "n" , 79 : "o" , 80 : "p" , 81 : "q" , 82 : "r" , 83 : "s" , 84 : "t" , 85 : "u" , 86 : "v" , 87 : "w" , 88 : "x" , 89 : "y" , 90 : "z" , 107 : "+" , 109 : "-" , 110 : "." , 186 : ";" , 187 : "=" , 188 : "," , 189 : "-" , 190 : "." , 191 : "/" , 192 : "`" , 219 : "[" , 220 : "\\" , 221 : "]" , 222 : "'" , 111 : "/" , 106 : "*" } } ; for ( t in i . FUNCTION _KEYS ) e = i . FUNCTION _KEYS [ t ] . toLowerCase ( ) , i [ e ] = parseInt ( t , 10 ) ; for ( t in i . PRINTABLE _KEYS ) e = i . PRINTABLE _KEYS [ t ] . toLowerCase ( ) , i [ e ] = parseInt ( t , 10 ) ; return n . mixin ( i , i . MODIFIER _KEYS ) , n . mixin ( i , i . PRINTABLE _KEYS ) , n . mixin ( i , i . FUNCTION _KEYS ) , i . enter = i [ "return" ] , i . escape = i . esc , i . del = i [ "delete" ] , i [ 173 ] = "-" , function ( ) { for ( var e = [ "cmd" , "ctrl" , "alt" , "shift" ] , t = Math . pow ( 2 , e . length ) ; t -- ; ) i . KEY _MODS [ t ] = e . filter ( function ( e ) { return t & i . KEY _MODS [ e ] } ) . join ( "-" ) + "-" } ( ) , i . KEY _MODS [ 0 ] = "" , i . KEY _MODS [ - 1 ] = "input-" , i } ( ) ; n . mixin ( t , r ) , t . keyCodeToString = function ( e ) { var t = r [ e ] ; return "string" != typeof t && ( t = String . fromCharCode ( e ) ) , t . toLowerCase ( ) } } ) , ace . define ( "ace/lib/useragent" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; if ( t . OS = { LINUX : "LINUX" , MAC : "MAC" , WINDOWS : "WINDOWS" } , t . getOS = function ( ) { return t . isMac ? t . OS . MAC : t . isLinux ? t . OS . LINUX : t . OS . WINDOWS } , "object" == typeof navigator ) { var n = ( navigator . platform . match ( /mac|win|linux/i ) || [ "other" ] ) [ 0 ] . toLowerCase ( ) , r = navigator . userAgent ; t . isWin = "win" == n , t . isMac = "mac" == n , t . isLinux = "linux" == n , t . isIE = parseFloat ( "Microsoft Internet Explorer" == navigator . appName || navigator . appName . indexOf ( "MSAppHost" ) >= 0 ? ( r . match ( /(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/ ) || [ ] ) [ 1 ] : ( r . match ( /(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/ ) || [ ] ) [ 1 ] ) , t . isOldIE = t . isIE && t . isIE < 9 , t . isGecko = t . isMozilla = ( window . Controllers || window . controllers ) && "Gecko" === window . navigator . product , t . isOldGecko = t . isGecko && parseInt ( ( r . match ( /rv\:(\d+)/ ) || [ ] ) [ 1 ] , 10 ) < 4 , t . isOpera = window . opera && "[object Opera]" == Object . prototype . toString . call ( window . opera ) , t . isWebKit = parseFloat ( r . split ( "WebKit/" ) [ 1 ] ) || void 0 , t . isChrome = parseFloat ( r . split ( " Chrome/" ) [ 1 ] ) || void 0 , t . isAIR = r . indexOf ( "AdobeAIR" ) >= 0 , t . isIPad = r . indexOf ( "iPad" ) >= 0 , t . isTouchPad = r . indexOf ( "TouchPad" ) >= 0 , t . isChromeOS = r . indexOf ( " CrOS " ) >= 0 } } ) , ace .
} , this . dragWaitEnd = function ( ) { var e = this . editor . container ; e . draggable = ! 1 , this . startSelect ( this . mousedownEvent . getDocumentPosition ( ) ) , this . selectEnd ( ) } , this . dragReadyEnd = function ( e ) { this . editor . renderer . $cursorLayer . setBlinking ( ! this . editor . getReadOnly ( ) ) , this . editor . unsetStyle ( "ace_dragging" ) , this . editor . renderer . setCursorStyle ( "" ) , this . dragWaitEnd ( ) } , this . startDrag = function ( ) { this . cancelDrag = ! 1 ; var e = this . editor , t = e . container ; t . draggable = ! 0 , e . renderer . $cursorLayer . setBlinking ( ! 1 ) , e . setStyle ( "ace_dragging" ) ; var i = a . isWin ? "default" : "move" ; e . renderer . setCursorStyle ( i ) , this . setState ( "dragReady" ) } , this . onMouseDrag = function ( e ) { var t = this . editor . container ; if ( a . isIE && "dragReady" == this . state ) { var i = r ( this . mousedownEvent . x , this . mousedownEvent . y , this . x , this . y ) ; i > 3 && t . dragDrop ( ) } if ( "dragWait" === this . state ) { var i = r ( this . mousedownEvent . x , this . mousedownEvent . y , this . x , this . y ) ; i > 0 && ( t . draggable = ! 1 , this . startSelect ( this . mousedownEvent . getDocumentPosition ( ) ) ) } } , this . onMouseDown = function ( e ) { if ( this . $dragEnabled ) { this . mousedownEvent = e ; var t = this . editor , i = e . inSelection ( ) , n = e . getButton ( ) , r = e . domEvent . detail || 1 ; if ( 1 === r && 0 === n && i ) { if ( e . editor . inMultiSelectMode && ( e . getAccelKey ( ) || e . getShiftKey ( ) ) ) return ; this . mousedownEvent . time = Date . now ( ) ; var o = e . domEvent . target || e . domEvent . srcElement ; if ( "unselectable" in o && ( o . unselectable = "on" ) , t . getDragDelay ( ) ) { if ( a . isWebKit ) { this . cancelDrag = ! 0 ; var s = t . container ; s . draggable = ! 0 } this . setState ( "dragWait" ) } else this . startDrag ( ) ; this . captureMouse ( e , this . onMouseDrag . bind ( this ) ) , e . defaultPrevented = ! 0 } } } } ) . call ( n . prototype ) , t . DragdropHandler = n } ) , ace . define ( "ace/lib/net" , [ "require" , "exports" , "module" , "ace/lib/dom" ] , function ( e , t , i ) { "use strict" ; var n = e ( "./dom" ) ; t . get = function ( e , t ) { var i = new XMLHttpRequest ; i . open ( "GET" , e , ! 0 ) , i . onreadystatechange = function ( ) { 4 === i . readyState && t ( i . responseText ) } , i . send ( null ) } , t . loadScript = function ( e , t ) { var i = n . getDocumentHead ( ) , r = document . createElement ( "script" ) ; r . src = e , i . appendChild ( r ) , r . onload = r . onreadystatechange = function ( e , i ) { ( i || ! r . readyState || "loaded" == r . readyState || "complete" == r . readyState ) && ( r = r . onload = r . onreadystatechange = null , i || t ( ) ) } } , t . qualifyURL = function ( e ) { var t = document . createElement ( "a" ) ; return t . href = e , t . href } } ) , ace . define ( "ace/lib/event_emitter" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; var n = { } , r = function ( ) { this . propagationStopped = ! 0 } , o = function ( ) { this . defaultPrevented = ! 0 } ; n . _emit = n . _dispatchEvent = function ( e , t ) { this . _eventRegistry || ( this . _eventRegistry = { } ) , this . _defaultHandlers || ( this . _defaultHandlers = { } ) ; var i = this . _eventRegistry [ e ] || [ ] , n = this . _defaultHandlers [ e ] ; if ( i . length || n ) { "object" == typeof t && t || ( t = { } ) , t . type || ( t . type = e ) , t . stopPropagation || ( t . stopPropagation = r ) , t . preventDefault || ( t . preventDefault = o ) , i = i . slice ( ) ; for ( var s = 0 ; s < i . length && ( i [ s ] ( t , this ) , ! t . propagationStopped ) ; s ++ ) ; return n && ! t . defaultPrevented ? n ( t , this ) : void 0 } } , n . _signal = function ( e , t ) { var i = ( this . _eventRegistry || { } ) [ e ] ; if ( i ) { i = i . slice ( ) ; for ( var n = 0 ; n < i . length ; n ++ ) i [ n ] ( t , this ) } } , n . once = function ( e , t ) { var i = this ; t && this . addEventListener ( e , function n ( ) { i . removeEventListener ( e , n ) , t . apply ( null , arguments ) } ) } , n . setDefaultHandler = function ( e , t ) { var i = this . _defaultHandlers ; if ( i || ( i = this . _defaultHandlers = { _disabled _ : { } } ) , i [ e ] ) { var n = i [ e ] , r = i . _disabled _ [ e ] ; r || ( i . _disabled _ [ e ] = r = [ ] ) , r . push ( n ) ; var o = r . indexOf ( t ) ; - 1 != o && r . splice ( o , 1 ) } i [ e ] = t } , n . removeDefaultHandler = function ( e , t ) { var i = this . _defaultHandlers ; if ( i ) { var n = i . _disabled _ [ e ] ; if ( i [ e ] == t ) { i [ e ] ; n && this . setDefaultHandler ( e , n . pop ( ) ) } else if ( n ) { var r = n . indexOf ( t ) ; - 1 != r && n . splice ( r , 1 ) } } } , n . on = n . addEventListener = function ( e , t , i ) { this . _eventRegistry = this . _eventRegistry || { } ; var n = this . _eventRegistry [ e ] ; return n || ( n = this . _eventRegistry [ e ] = [ ] ) , - 1 == n . indexOf ( t ) && n [ i ? "unshift" : "push" ] ( t ) , t } , n . off = n . removeListener = n . removeEventListener = function ( e , t ) { this . _eventRegistry = this . _eventRegistry || { } ; var i = this . _eventRegistry [ e ] ; if ( i ) { var n = i . indexOf ( t ) ; - 1 !== n && i . splice ( n , 1 ) } } , n . removeAllListeners = function ( e ) { this . _eventRegistry && ( this . _eventRegistry [ e ] = [ ] ) } , t . EventEmitter = n } ) , ace . define ( "ace/lib/app_config" , [ "require" , "exports" , "module" , "ace/lib/oop" , " ace / lib / eve
} ) ; return t } , this . createSplitterRegexp = function ( e , t ) { if ( - 1 != e . indexOf ( "(?=" ) ) { var i = 0 , n = ! 1 , r = { } ; e . replace ( /(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g , function ( e , t , o , s , a , l ) { return n ? n = "]" != a : a ? n = ! 0 : s ? ( i == r . stack && ( r . end = l + 1 , r . stack = - 1 ) , i -- ) : o && ( i ++ , 1 != o . length && ( r . stack = i , r . start = l ) ) , e } ) , null != r . end && /^\)*$/ . test ( e . substr ( r . end ) ) && ( e = e . substring ( 0 , r . start ) + e . substr ( r . end ) ) } return "^" != e . charAt ( 0 ) && ( e = "^" + e ) , "$" != e . charAt ( e . length - 1 ) && ( e += "$" ) , new RegExp ( e , ( t || "" ) . replace ( "g" , "" ) ) } , this . getLineTokens = function ( e , t ) { if ( t && "string" != typeof t ) { var i = t . slice ( 0 ) ; t = i [ 0 ] , "#tmp" === t && ( i . shift ( ) , t = i . shift ( ) ) } else var i = [ ] ; var n = t || "start" , o = this . states [ n ] ; o || ( n = "start" , o = this . states [ n ] ) ; var s = this . matchMappings [ n ] , a = this . regExps [ n ] ; a . lastIndex = 0 ; for ( var l , c = [ ] , h = 0 , d = 0 , u = { type : null , value : "" } ; l = a . exec ( e ) ; ) { var f = s . defaultToken , p = null , g = l [ 0 ] , m = a . lastIndex ; if ( m - g . length > h ) { var v = e . substring ( h , m - g . length ) ; u . type == f ? u . value += v : ( u . type && c . push ( u ) , u = { type : f , value : v } ) } for ( var w = 0 ; w < l . length - 2 ; w ++ ) if ( void 0 !== l [ w + 1 ] ) { p = o [ s [ w ] ] , f = p . onMatch ? p . onMatch ( g , n , i ) : p . token , p . next && ( n = "string" == typeof p . next ? p . next : p . next ( n , i ) , o = this . states [ n ] , o || ( this . reportError ( "state doesn't exist" , n ) , n = "start" , o = this . states [ n ] ) , s = this . matchMappings [ n ] , h = m , a = this . regExps [ n ] , a . lastIndex = m ) ; break } if ( g ) if ( "string" == typeof f ) p && p . merge === ! 1 || u . type !== f ? ( u . type && c . push ( u ) , u = { type : f , value : g } ) : u . value += g ; else if ( f ) { u . type && c . push ( u ) , u = { type : null , value : "" } ; for ( var w = 0 ; w < f . length ; w ++ ) c . push ( f [ w ] ) } if ( h == e . length ) break ; if ( h = m , d ++ > r ) { for ( d > 2 * e . length && this . reportError ( "infinite loop with in ace tokenizer" , { startState : t , line : e } ) ; h < e . length ; ) u . type && c . push ( u ) , u = { value : e . substring ( h , h += 2e3 ) , type : "overflow" } ; n = "start" , i = [ ] ; break } } return u . type && c . push ( u ) , i . length > 1 && i [ 0 ] !== n && i . unshift ( "#tmp" , n ) , { tokens : c , state : i . length ? i : n } } , this . reportError = n . reportError } ) . call ( o . prototype ) , t . Tokenizer = o } ) , ace . define ( "ace/mode/text_highlight_rules" , [ "require" , "exports" , "module" , "ace/lib/lang" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/lang" ) , r = function ( ) { this . $rules = { start : [ { token : "empty_line" , regex : "^$" } , { defaultToken : "text" } ] } } ; ( function ( ) { this . addRules = function ( e , t ) { if ( t ) for ( var i in e ) { for ( var n = e [ i ] , r = 0 ; r < n . length ; r ++ ) { var o = n [ r ] ; ( o . next || o . onMatch ) && ( "string" == typeof o . next && 0 !== o . next . indexOf ( t ) && ( o . next = t + o . next ) , o . nextState && 0 !== o . nextState . indexOf ( t ) && ( o . nextState = t + o . nextState ) ) } this . $rules [ t + i ] = n } else for ( var i in e ) this . $rules [ i ] = e [ i ] } , this . getRules = function ( ) { return this . $rules } , this . embedRules = function ( e , t , i , r , o ) { var s = "function" == typeof e ? ( new e ) . getRules ( ) : e ; if ( r ) for ( var a = 0 ; a < r . length ; a ++ ) r [ a ] = t + r [ a ] ; else { r = [ ] ; for ( var l in s ) r . push ( t + l ) } if ( this . addRules ( s , t ) , i ) for ( var c = Array . prototype [ o ? "push" : "unshift" ] , a = 0 ; a < r . length ; a ++ ) c . apply ( this . $rules [ r [ a ] ] , n . deepCopy ( i ) ) ; this . $embeds || ( this . $embeds = [ ] ) , this . $embeds . push ( t ) } , this . getEmbeds = function ( ) { return this . $embeds } ; var e = function ( e , t ) { return ( "start" != e || t . length ) && t . unshift ( this . nextState , e ) , this . nextState } , t = function ( e , t ) { return t . shift ( ) , t . shift ( ) || "start" } ; this . normalizeRules = function ( ) { function i ( o ) { var s = r [ o ] ; s . processed = ! 0 ; for ( var a = 0 ; a < s . length ; a ++ ) { var l = s [ a ] ; ! l . regex && l . start && ( l . regex = l . start , l . next || ( l . next = [ ] ) , l . next . push ( { defaultToken : l . token } , { token : l . token + ".end" , regex : l . end || l . start , next : "pop" } ) , l . token = l . token + ".start" , l . push = ! 0 ) ; var c = l . next || l . push ; if ( c && Array . isArray ( c ) ) { var h = l . stateName ; h || ( h = l . token , "string" != typeof h && ( h = h [ 0 ] || "" ) , r [ h ] && ( h += n ++ ) ) , r [ h ] = c , l . next = h , i ( h ) } else "pop" == c && ( l . next = t ) ; if ( l . push && ( l . nextState = l . next || l . push , l . next = e , delete l . push ) , l . rules ) for ( var d in l . rules ) r [ d ] ? r [ d ] . push && r [ d ] . push . apply ( r [ d ] , l . rules [ d ] ) : r [ d ] = l . rules [ d ] ; if ( l . include || "string" == typeof l ) var u = l . include || l , f = r [ u ] ; else Array . isArray ( l ) && ( f = l ) ; if ( f ) { var p = [ a , 1 ] . concat ( f ) ; l . noEscape && ( p = p . filter ( function ( e ) { return ! e . next } ) ) , s . splice . apply ( s , p ) , a -- , f = null } l . keywordMap && ( l . token = this . createKeywordMapper ( l . keywordMap , l . defaultToken || "text" , l . caseInsensitive ) , delete l . defaultToken ) } } var n = 0 , r = this . $rules ; Object . keys ( r ) . forEach ( i , this ) } , this . createKeywordMapper = function ( e , t , i , n ) { var r = Object . create ( null ) ; return Object . keys ( e ) .
return { row : this . $row , column : this . getCurrentTokenColumn ( ) } } } ) . call ( n . prototype ) , t . TokenIterator = n } ) , ace . define ( "ace/mode/text" , [ "require" , "exports" , "module" , "ace/tokenizer" , "ace/mode/text_highlight_rules" , "ace/mode/behaviour" , "ace/unicode" , "ace/lib/lang" , "ace/token_iterator" , "ace/range" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../tokenizer" ) . Tokenizer , r = e ( "./text_highlight_rules" ) . TextHighlightRules , o = e ( "./behaviour" ) . Behaviour , s = e ( "../unicode" ) , a = e ( "../lib/lang" ) , l = e ( "../token_iterator" ) . TokenIterator , c = e ( "../range" ) . Range , h = function ( ) { this . HighlightRules = r , this . $behaviour = new o } ; ( function ( ) { this . tokenRe = new RegExp ( "^[" + s . packages . L + s . packages . Mn + s . packages . Mc + s . packages . Nd + s . packages . Pc + "\\$_]+" , "g" ) , this . nonTokenRe = new RegExp ( "^(?:[^" + s . packages . L + s . packages . Mn + s . packages . Mc + s . packages . Nd + s . packages . Pc + "\\$_]|\\s])+" , "g" ) , this . getTokenizer = function ( ) { return this . $tokenizer || ( this . $highlightRules = this . $highlightRules || new this . HighlightRules , this . $tokenizer = new n ( this . $highlightRules . getRules ( ) ) ) , this . $tokenizer } , this . lineCommentStart = "" , this . blockComment = "" , this . toggleCommentLines = function ( e , t , i , n ) { function r ( e ) { for ( var t = i ; n >= t ; t ++ ) e ( o . getLine ( t ) , t ) } var o = t . doc , s = ! 0 , l = ! 0 , c = 1 / 0 , h = t . getTabSize ( ) , d = ! 1 ; if ( this . lineCommentStart ) { if ( Array . isArray ( this . lineCommentStart ) ) var u = this . lineCommentStart . map ( a . escapeRegExp ) . join ( "|" ) , f = this . lineCommentStart [ 0 ] ; else var u = a . escapeRegExp ( this . lineCommentStart ) , f = this . lineCommentStart ; u = new RegExp ( "^(\\s*)(?:" + u + ") ?" ) , d = t . getUseSoftTabs ( ) ; var p = function ( e , t ) { var i = e . match ( u ) ; if ( i ) { var n = i [ 1 ] . length , r = i [ 0 ] . length ; w ( e , n , r ) || " " != i [ 0 ] [ r - 1 ] || r -- , o . removeInLine ( t , n , r ) } } , g = f + " " , m = function ( e , t ) { ( ! s || /\S/ . test ( e ) ) && ( w ( e , c , c ) ? o . insertInLine ( { row : t , column : c } , g ) : o . insertInLine ( { row : t , column : c } , f ) ) } , v = function ( e , t ) { return u . test ( e ) } , w = function ( e , t , i ) { for ( var n = 0 ; t -- && " " == e . charAt ( t ) ; ) n ++ ; if ( n % h != 0 ) return ! 1 ; for ( var n = 0 ; " " == e . charAt ( i ++ ) ; ) n ++ ; return h > 2 ? n % h != h - 1 : n % h == 0 } } else { if ( ! this . blockComment ) return ! 1 ; var f = this . blockComment . start , A = this . blockComment . end , u = new RegExp ( "^(\\s*)(?:" + a . escapeRegExp ( f ) + ")" ) , y = new RegExp ( "(?:" + a . escapeRegExp ( A ) + ")\\s*$" ) , m = function ( e , t ) { v ( e , t ) || ( ! s || /\S/ . test ( e ) ) && ( o . insertInLine ( { row : t , column : e . length } , A ) , o . insertInLine ( { row : t , column : c } , f ) ) } , p = function ( e , t ) { var i ; ( i = e . match ( y ) ) && o . removeInLine ( t , e . length - i [ 0 ] . length , e . length ) , ( i = e . match ( u ) ) && o . removeInLine ( t , i [ 1 ] . length , i [ 0 ] . length ) } , v = function ( e , i ) { if ( u . test ( e ) ) return ! 0 ; for ( var n = t . getTokens ( i ) , r = 0 ; r < n . length ; r ++ ) if ( "comment" === n [ r ] . type ) return ! 0 } } var C = 1 / 0 ; r ( function ( e , t ) { var i = e . search ( /\S/ ) ; - 1 !== i ? ( c > i && ( c = i ) , l && ! v ( e , t ) && ( l = ! 1 ) ) : C > e . length && ( C = e . length ) } ) , c == 1 / 0 && ( c = C , s = ! 1 , l = ! 1 ) , d && c % h != 0 && ( c = Math . floor ( c / h ) * h ) , r ( l ? p : m ) } , this . toggleBlockComment = function ( e , t , i , n ) { var r = this . blockComment ; if ( r ) { ! r . start && r [ 0 ] && ( r = r [ 0 ] ) ; var o , s , a = new l ( t , n . row , n . column ) , h = a . getCurrentToken ( ) , d = ( t . selection , t . selection . toOrientedRange ( ) ) ; if ( h && /comment/ . test ( h . type ) ) { for ( var u , f ; h && /comment/ . test ( h . type ) ; ) { var p = h . value . indexOf ( r . start ) ; if ( - 1 != p ) { var g = a . getCurrentTokenRow ( ) , m = a . getCurrentTokenColumn ( ) + p ; u = new c ( g , m , g , m + r . start . length ) ; break } h = a . stepBackward ( ) } for ( var a = new l ( t , n . row , n . column ) , h = a . getCurrentToken ( ) ; h && /comment/ . test ( h . type ) ; ) { var p = h . value . indexOf ( r . end ) ; if ( - 1 != p ) { var g = a . getCurrentTokenRow ( ) , m = a . getCurrentTokenColumn ( ) + p ; f = new c ( g , m , g , m + r . end . length ) ; break } h = a . stepForward ( ) } f && t . remove ( f ) , u && ( t . remove ( u ) , o = u . start . row , s = - r . start . length ) } else s = r . start . length , o = i . start . row , t . insert ( i . end , r . end ) , t . insert ( i . start , r . start ) ; d . start . row == o && ( d . start . column += s ) , d . end . row == o && ( d . end . column += s ) , t . selection . fromOrientedRange ( d ) } } , this . getNextLineIndent = function ( e , t , i ) { return this . $getIndent ( t ) } , this . checkOutdent = function ( e , t , i ) { return ! 1 } , this . autoOutdent = function ( e , t , i ) { } , this . $getIndent = function ( e ) { return e . match ( /^\s*/ ) [ 0 ] } , this . createWorker = function ( e ) { return null } , this . createModeDelegates = function ( e ) { this . $embeds = [ ] , this . $modes = { } ; for ( var t in e ) e [ t ] && ( this . $embeds . push ( t ) , this . $modes [ t ] = new e [ t ] ) ; for ( var i = [ "toggleBlockComment" , "toggleCommentLines" , "getNextLineIndent" , "checkOutdent" , "autoOutdent" , "transformAction" , " ge
- 1 != i ) { do o = n . stepForward ( ) ; while ( o && l . test ( o . type ) ) ; o = n . stepBackward ( ) } else o = n . getCurrentToken ( ) ; return s . end . row = n . getCurrentTokenRow ( ) , s . end . column = n . getCurrentTokenColumn ( ) + o . value . length - 2 , s } } , this . foldAll = function ( e , t , i ) { void 0 == i && ( i = 1e5 ) ; var n = this . foldWidgets ; if ( n ) { t = t || this . getLength ( ) , e = e || 0 ; for ( var r = e ; t > r ; r ++ ) if ( null == n [ r ] && ( n [ r ] = this . getFoldWidget ( r ) ) , "start" == n [ r ] ) { var o = this . getFoldWidgetRange ( r ) ; if ( o && o . isMultiLine ( ) && o . end . row <= t && o . start . row >= e ) { r = o . end . row ; try { var s = this . addFold ( "..." , o ) ; s && ( s . collapseChildren = i ) } catch ( a ) { } } } } } , this . $foldStyles = { manual : 1 , markbegin : 1 , markbeginend : 1 } , this . $foldStyle = "markbegin" , this . setFoldStyle = function ( e ) { if ( ! this . $foldStyles [ e ] ) throw new Error ( "invalid fold style: " + e + "[" + Object . keys ( this . $foldStyles ) . join ( ", " ) + "]" ) ; if ( this . $foldStyle != e ) { this . $foldStyle = e , "manual" == e && this . unfold ( ) ; var t = this . $foldMode ; this . $setFolding ( null ) , this . $setFolding ( t ) } } , this . $setFolding = function ( e ) { if ( this . $foldMode != e ) { if ( this . $foldMode = e , this . off ( "change" , this . $updateFoldWidgets ) , this . off ( "tokenizerUpdate" , this . $tokenizerUpdateFoldWidgets ) , this . _signal ( "changeAnnotation" ) , ! e || "manual" == this . $foldStyle ) return void ( this . foldWidgets = null ) ; this . foldWidgets = [ ] , this . getFoldWidget = e . getFoldWidget . bind ( e , this , this . $foldStyle ) , this . getFoldWidgetRange = e . getFoldWidgetRange . bind ( e , this , this . $foldStyle ) , this . $updateFoldWidgets = this . updateFoldWidgets . bind ( this ) , this . $tokenizerUpdateFoldWidgets = this . tokenizerUpdateFoldWidgets . bind ( this ) , this . on ( "change" , this . $updateFoldWidgets ) , this . on ( "tokenizerUpdate" , this . $tokenizerUpdateFoldWidgets ) } } , this . getParentFoldRangeData = function ( e , t ) { var i = this . foldWidgets ; if ( ! i || t && i [ e ] ) return { } ; for ( var n , r = e - 1 ; r >= 0 ; ) { var o = i [ r ] ; if ( null == o && ( o = i [ r ] = this . getFoldWidget ( r ) ) , "start" == o ) { var s = this . getFoldWidgetRange ( r ) ; if ( n || ( n = s ) , s && s . end . row >= e ) break } r -- } return { range : - 1 !== r && s , firstRange : n } } , this . onFoldWidgetClick = function ( e , t ) { t = t . domEvent ; var i = { children : t . shiftKey , all : t . ctrlKey || t . metaKey , siblings : t . altKey } , n = this . $toggleFoldWidget ( e , i ) ; if ( ! n ) { var r = t . target || t . srcElement ; r && /ace_fold-widget/ . test ( r . className ) && ( r . className += " ace_invalid" ) } } , this . $toggleFoldWidget = function ( e , t ) { if ( this . getFoldWidget ) { var i = this . getFoldWidget ( e ) , n = this . getLine ( e ) , r = "end" === i ? - 1 : 1 , o = this . getFoldAt ( e , - 1 === r ? 0 : n . length , r ) ; if ( o ) return void ( t . children || t . all ? this . removeFold ( o ) : this . expandFold ( o ) ) ; var s = this . getFoldWidgetRange ( e , ! 0 ) ; if ( s && ! s . isMultiLine ( ) && ( o = this . getFoldAt ( s . start . row , s . start . column , 1 ) , o && s . isEqual ( o . range ) ) ) return void this . removeFold ( o ) ; if ( t . siblings ) { var a = this . getParentFoldRangeData ( e ) ; if ( a . range ) var l = a . range . start . row + 1 , c = a . range . end . row ; this . foldAll ( l , c , t . all ? 1e4 : 0 ) } else t . children ? ( c = s ? s . end . row : this . getLength ( ) , this . foldAll ( e + 1 , c , t . all ? 1e4 : 0 ) ) : s && ( t . all && ( s . collapseChildren = 1e4 ) , this . addFold ( "..." , s ) ) ; return s } } , this . toggleFoldWidget = function ( e ) { var t = this . selection . getCursor ( ) . row ; t = this . getRowFoldStart ( t ) ; var i = this . $toggleFoldWidget ( t , { } ) ; if ( ! i ) { var n = this . getParentFoldRangeData ( t , ! 0 ) ; if ( i = n . range || n . firstRange ) { t = i . start . row ; var r = this . getFoldAt ( t , this . getLine ( t ) . length , 1 ) ; r ? this . removeFold ( r ) : this . addFold ( "..." , i ) } } } , this . updateFoldWidgets = function ( e ) { var t = e . start . row , i = e . end . row - t ; if ( 0 === i ) this . foldWidgets [ t ] = null ; else if ( "remove" == e . action ) this . foldWidgets . splice ( t , i + 1 , null ) ; else { var n = Array ( i + 1 ) ; n . unshift ( t , 1 ) , this . foldWidgets . splice . apply ( this . foldWidgets , n ) } } , this . tokenizerUpdateFoldWidgets = function ( e ) { var t = e . data ; t . first != t . last && this . foldWidgets . length > t . first && this . foldWidgets . splice ( t . first , this . foldWidgets . length ) } } var r = e ( "../range" ) . Range , o = e ( "./fold_line" ) . FoldLine , s = e ( "./fold" ) . Fold , a = e ( "../token_iterator" ) . TokenIterator ; t . Folding = n } ) , ace . define ( "ace/edit_session/bracket_match" , [ "require" , "exports" , "module" , "ace/token_iterator" , "ace/range" ] , function ( e , t , i ) { "use strict" ; function n ( ) { this . findMatchingBracket = function ( e , t ) { if ( 0 == e . column ) return null ; var i = t || this . getLine ( e . row ) . charAt ( e . column - 1 ) ; if ( "" == i ) return null ; var n = i . match ( /([\(\[\{])|([\)\]\}])/ ) ; return n ? n [ 1 ] ? this . $findClosingBracket ( n [ 1 ] , e ) : this . $findOpeningBracket ( n [ 2 ] , e ) : null } , this . g
} , get : function ( ) { return this . $modeId } } } ) , t . EditSession = f } ) , ace . define ( "ace/search" , [ "require" , "exports" , "module" , "ace/lib/lang" , "ace/lib/oop" , "ace/range" ] , function ( e , t , i ) { "use strict" ; var n = e ( "./lib/lang" ) , r = e ( "./lib/oop" ) , o = e ( "./range" ) . Range , s = function ( ) { this . $options = { } } ; ( function ( ) { this . set = function ( e ) { return r . mixin ( this . $options , e ) , this } , this . getOptions = function ( ) { return n . copyObject ( this . $options ) } , this . setOptions = function ( e ) { this . $options = e } , this . find = function ( e ) { var t = this . $options , i = this . $matchIterator ( e , t ) ; if ( ! i ) return ! 1 ; var n = null ; return i . forEach ( function ( e , i , r ) { if ( e . start ) n = e ; else { var s = e . offset + ( r || 0 ) ; if ( n = new o ( i , s , i , s + e . length ) , ! e . length && t . start && t . start . start && 0 != t . skipCurrent && n . isEqual ( t . start ) ) return n = null , ! 1 } return ! 0 } ) , n } , this . findAll = function ( e ) { var t = this . $options ; if ( ! t . needle ) return [ ] ; this . $assembleRegExp ( t ) ; var i = t . range , r = i ? e . getLines ( i . start . row , i . end . row ) : e . doc . getAllLines ( ) , s = [ ] , a = t . re ; if ( t . $isMultiLine ) { var l , c = a . length , h = r . length - c ; e : for ( var d = a . offset || 0 ; h >= d ; d ++ ) { for ( var u = 0 ; c > u ; u ++ ) if ( - 1 == r [ d + u ] . search ( a [ u ] ) ) continue e ; var f = r [ d ] , p = r [ d + c - 1 ] , g = f . length - f . match ( a [ 0 ] ) [ 0 ] . length , m = p . match ( a [ c - 1 ] ) [ 0 ] . length ; l && l . end . row === d && l . end . column > g || ( s . push ( l = new o ( d , g , d + c - 1 , m ) ) , c > 2 && ( d = d + c - 2 ) ) } } else for ( var v = 0 ; v < r . length ; v ++ ) for ( var w = n . getMatchOffsets ( r [ v ] , a ) , u = 0 ; u < w . length ; u ++ ) { var A = w [ u ] ; s . push ( new o ( v , A . offset , v , A . offset + A . length ) ) } if ( i ) { for ( var y = i . start . column , C = i . start . column , v = 0 , u = s . length - 1 ; u > v && s [ v ] . start . column < y && s [ v ] . start . row == i . start . row ; ) v ++ ; for ( ; u > v && s [ u ] . end . column > C && s [ u ] . end . row == i . end . row ; ) u -- ; for ( s = s . slice ( v , u + 1 ) , v = 0 , u = s . length ; u > v ; v ++ ) s [ v ] . start . row += i . start . row , s [ v ] . end . row += i . start . row } return s } , this . replace = function ( e , t ) { var i = this . $options , n = this . $assembleRegExp ( i ) ; if ( i . $isMultiLine ) return t ; if ( n ) { var r = n . exec ( e ) ; if ( ! r || r [ 0 ] . length != e . length ) return null ; if ( t = e . replace ( n , t ) , i . preserveCase ) { t = t . split ( "" ) ; for ( var o = Math . min ( e . length , e . length ) ; o -- ; ) { var s = e [ o ] ; s && s . toLowerCase ( ) != s ? t [ o ] = t [ o ] . toUpperCase ( ) : t [ o ] = t [ o ] . toLowerCase ( ) } t = t . join ( "" ) } return t } } , this . $matchIterator = function ( e , t ) { var i = this . $assembleRegExp ( t ) ; if ( ! i ) return ! 1 ; var r ; if ( t . $isMultiLine ) var s = i . length , a = function ( t , n , a ) { var l = t . search ( i [ 0 ] ) ; if ( - 1 != l ) { for ( var c = 1 ; s > c ; c ++ ) if ( t = e . getLine ( n + c ) , - 1 == t . search ( i [ c ] ) ) return ; var h = t . match ( i [ s - 1 ] ) [ 0 ] . length , d = new o ( n , l , n + s - 1 , h ) ; return 1 == i . offset ? ( d . start . row -- , d . start . column = Number . MAX _VALUE ) : a && ( d . start . column += a ) , r ( d ) ? ! 0 : void 0 } } ; else if ( t . backwards ) var a = function ( e , t , o ) { for ( var s = n . getMatchOffsets ( e , i ) , a = s . length - 1 ; a >= 0 ; a -- ) if ( r ( s [ a ] , t , o ) ) return ! 0 } ; else var a = function ( e , t , o ) { for ( var s = n . getMatchOffsets ( e , i ) , a = 0 ; a < s . length ; a ++ ) if ( r ( s [ a ] , t , o ) ) return ! 0 } ; var l = this . $lineIterator ( e , t ) ; return { forEach : function ( e ) { r = e , l . forEach ( a ) } } } , this . $assembleRegExp = function ( e , t ) { if ( e . needle instanceof RegExp ) return e . re = e . needle ; var i = e . needle ; if ( ! e . needle ) return e . re = ! 1 ; e . regExp || ( i = n . escapeRegExp ( i ) ) , e . wholeWord && ( i = "\\b" + i + "\\b" ) ; var r = e . caseSensitive ? "gm" : "gmi" ; if ( e . $isMultiLine = ! t && /[\n\r]/ . test ( i ) , e . $isMultiLine ) return e . re = this . $assembleMultilineRegExp ( i , r ) ; try { var o = new RegExp ( i , r ) } catch ( s ) { o = ! 1 } return e . re = o } , this . $assembleMultilineRegExp = function ( e , t ) { for ( var i = e . replace ( /\r\n|\r|\n/g , "$\n^" ) . split ( "\n" ) , n = [ ] , r = 0 ; r < i . length ; r ++ ) try { n . push ( new RegExp ( i [ r ] , t ) ) } catch ( o ) { return ! 1 } return "" == i [ 0 ] ? ( n . shift ( ) , n . offset = 1 ) : n . offset = 0 , n } , this . $lineIterator = function ( e , t ) { var i = 1 == t . backwards , n = 0 != t . skipCurrent , r = t . range , o = t . start ; o || ( o = r ? r [ i ? "end" : "start" ] : e . selection . getRange ( ) ) , o . start && ( o = o [ n != i ? "end" : "start" ] ) ; var s = r ? r . start . row : 0 , a = r ? r . end . row : e . getLength ( ) - 1 , l = i ? function ( i ) { var n = o . row , r = e . getLine ( n ) . substring ( 0 , o . column ) ; if ( ! i ( r , n ) ) { for ( n -- ; n >= s ; n -- ) if ( i ( e . getLine ( n ) , n ) ) return ; if ( 0 != t . wrap ) for ( n = a , s = o . row ; n >= s ; n -- ) if ( i ( e . getLine ( n ) , n ) ) return } } : function ( i ) { var n = o . row , r = e . getLine ( n ) . substr ( o . column ) ; if ( ! i ( r , n , o . column ) ) { for ( n += 1 ; a >= n ; n ++ ) if ( i ( e . getLine ( n ) , n ) ) return ; if ( 0 != t . wrap ) for ( n = s , a = o . row ; a >= n ; n ++ ) if ( i ( e . getLine ( n ) , n ) ) return } } ; return { forEach : l } } } ) . call ( s . prototype ) , t . Search = s } ) , ace . define ( "ace/keyboard/hash_handler" , [ "require" , "exports" , "module" , "ace/lib/keys" , " ace / lib / use
this . $blockScrolling -= 1 , this . onScrollTopChange ( ) , this . onScrollLeftChange ( ) , this . onSelectionChange ( ) , this . onChangeFrontMarker ( ) , this . onChangeBackMarker ( ) , this . onChangeBreakpoint ( ) , this . onChangeAnnotation ( ) , this . session . getUseWrapMode ( ) && this . renderer . adjustWrapLimit ( ) , this . renderer . updateFull ( ) ) : ( this . selection = null , this . renderer . setSession ( e ) ) , this . _signal ( "changeSession" , { session : e , oldSession : t } ) , this . curOp = null , t && t . _signal ( "changeEditor" , { oldEditor : this } ) , e && e . _signal ( "changeEditor" , { editor : this } ) } } , this . getSession = function ( ) { return this . session } , this . setValue = function ( e , t ) { return this . session . doc . setValue ( e ) , t ? 1 == t ? this . navigateFileEnd ( ) : - 1 == t && this . navigateFileStart ( ) : this . selectAll ( ) , e } , this . getValue = function ( ) { return this . session . getValue ( ) } , this . getSelection = function ( ) { return this . selection } , this . resize = function ( e ) { this . renderer . onResize ( e ) } , this . setTheme = function ( e , t ) { this . renderer . setTheme ( e , t ) } , this . getTheme = function ( ) { return this . renderer . getTheme ( ) } , this . setStyle = function ( e ) { this . renderer . setStyle ( e ) } , this . unsetStyle = function ( e ) { this . renderer . unsetStyle ( e ) } , this . getFontSize = function ( ) { return this . getOption ( "fontSize" ) || r . computedStyle ( this . container , "fontSize" ) } , this . setFontSize = function ( e ) { this . setOption ( "fontSize" , e ) } , this . $highlightBrackets = function ( ) { if ( this . session . $bracketHighlight && ( this . session . removeMarker ( this . session . $bracketHighlight ) , this . session . $bracketHighlight = null ) , ! this . $highlightPending ) { var e = this ; this . $highlightPending = ! 0 , setTimeout ( function ( ) { e . $highlightPending = ! 1 ; var t = e . session ; if ( t && t . bgTokenizer ) { var i = t . findMatchingBracket ( e . getCursorPosition ( ) ) ; if ( i ) var n = new f ( i . row , i . column , i . row , i . column + 1 ) ; else if ( t . $mode . getMatching ) var n = t . $mode . getMatching ( e . session ) ; n && ( t . $bracketHighlight = t . addMarker ( n , "ace_bracket" , "text" ) ) } } , 50 ) } } , this . $highlightTags = function ( ) { if ( ! this . $highlightTagPending ) { var e = this ; this . $highlightTagPending = ! 0 , setTimeout ( function ( ) { e . $highlightTagPending = ! 1 ; var t = e . session ; if ( t && t . bgTokenizer ) { var i = e . getCursorPosition ( ) , n = new w ( e . session , i . row , i . column ) , r = n . getCurrentToken ( ) ; if ( ! r || ! /\b(?:tag-open|tag-name)/ . test ( r . type ) ) return t . removeMarker ( t . $tagHighlight ) , void ( t . $tagHighlight = null ) ; if ( - 1 == r . type . indexOf ( "tag-open" ) || ( r = n . stepForward ( ) ) ) { var o = r . value , s = 0 , a = n . stepBackward ( ) ; if ( "<" == a . value ) { do a = r , r = n . stepForward ( ) , r && r . value === o && - 1 !== r . type . indexOf ( "tag-name" ) && ( "<" === a . value ? s ++ : "</" === a . value && s -- ) ; while ( r && s >= 0 ) } else { do r = a , a = n . stepBackward ( ) , r && r . value === o && - 1 !== r . type . indexOf ( "tag-name" ) && ( "<" === a . value ? s ++ : "</" === a . value && s -- ) ; while ( a && 0 >= s ) ; n . stepForward ( ) } if ( ! r ) return t . removeMarker ( t . $tagHighlight ) , void ( t . $tagHighlight = null ) ; var l = n . getCurrentTokenRow ( ) , c = n . getCurrentTokenColumn ( ) , h = new f ( l , c , l , c + r . value . length ) ; t . $tagHighlight && 0 !== h . compareRange ( t . $backMarkers [ t . $tagHighlight ] . range ) && ( t . removeMarker ( t . $tagHighlight ) , t . $tagHighlight = null ) , h && ! t . $tagHighlight && ( t . $tagHighlight = t . addMarker ( h , "ace_bracket" , "text" ) ) } } } , 50 ) } } , this . focus = function ( ) { var e = this ; setTimeout ( function ( ) { e . textInput . focus ( ) } ) , this . textInput . focus ( ) } , this . isFocused = function ( ) { return this . textInput . isFocused ( ) } , this . blur = function ( ) { this . textInput . blur ( ) } , this . onFocus = function ( e ) { this . $isFocused || ( this . $isFocused = ! 0 , this . renderer . showCursor ( ) , this . renderer . visualizeFocus ( ) , this . _emit ( "focus" , e ) ) } , this . onBlur = function ( e ) { this . $isFocused && ( this . $isFocused = ! 1 , this . renderer . hideCursor ( ) , this . renderer . visualizeBlur ( ) , this . _emit ( "blur" , e ) ) } , this . $cursorChange = function ( ) { this . renderer . updateCursor ( ) } , this . onDocumentChange = function ( e ) { var t = this . session . $useWrapMode , i = e . start . row == e . end . row ? e . end . row : 1 / 0 ; this . renderer . updateLines ( e . start . row , i , t ) , this . _signal ( "change" , e ) , this . $cursorChange ( ) , this . $updateHighlightActiveLine ( ) } , this . onTokenizerUpdate = function ( e ) { var t = e . data ; this . renderer . updateLines ( t . first , t . last ) } , this . onScrollTopChange = function ( ) { this . renderer . scrollToY ( this . session . getScrollTop ( ) ) } , this . onScrollLeftChange = function ( ) { this . renderer . scrollToX ( this . session . getScrollLeft ( ) ) } , this . onCursorChange = function ( ) { this . $cursorChange ( ) , this . $blockScrolling || ( v . warn ( " Automatically s
var n = new Array ( i + 1 ) ; n . unshift ( t , 1 ) , this . $annotations . splice . apply ( this . $annotations , n ) } } } , this . update = function ( e ) { for ( var t = this . session , i = e . firstRow , r = Math . min ( e . lastRow + e . gutterOffset , t . getLength ( ) - 1 ) , o = t . getNextFoldLine ( i ) , s = o ? o . start . row : 1 / 0 , a = this . $showFoldWidgets && t . foldWidgets , l = t . $breakpoints , c = t . $decorations , h = t . $firstLineNumber , d = 0 , u = t . gutterRenderer || this . $renderer , f = null , p = - 1 , g = i ; ; ) { if ( g > s && ( g = o . end . row + 1 , o = t . getNextFoldLine ( g , o ) , s = o ? o . start . row : 1 / 0 ) , g > r ) { for ( ; this . $cells . length > p + 1 ; ) f = this . $cells . pop ( ) , this . element . removeChild ( f . element ) ; break } f = this . $cells [ ++ p ] , f || ( f = { element : null , textNode : null , foldWidget : null } , f . element = n . createElement ( "div" ) , f . textNode = document . createTextNode ( "" ) , f . element . appendChild ( f . textNode ) , this . element . appendChild ( f . element ) , this . $cells [ p ] = f ) ; var m = "ace_gutter-cell " ; l [ g ] && ( m += l [ g ] ) , c [ g ] && ( m += c [ g ] ) , this . $annotations [ g ] && ( m += this . $annotations [ g ] . className ) , f . element . className != m && ( f . element . className = m ) ; var v = t . getRowLength ( g ) * e . lineHeight + "px" ; if ( v != f . element . style . height && ( f . element . style . height = v ) , a ) { var w = a [ g ] ; null == w && ( w = a [ g ] = t . getFoldWidget ( g ) ) } if ( w ) { f . foldWidget || ( f . foldWidget = n . createElement ( "span" ) , f . element . appendChild ( f . foldWidget ) ) ; var m = "ace_fold-widget ace_" + w ; m += "start" == w && g == s && g < o . end . row ? " ace_closed" : " ace_open" , f . foldWidget . className != m && ( f . foldWidget . className = m ) ; var v = e . lineHeight + "px" ; f . foldWidget . style . height != v && ( f . foldWidget . style . height = v ) } else f . foldWidget && ( f . element . removeChild ( f . foldWidget ) , f . foldWidget = null ) ; var A = d = u ? u . getText ( t , g ) : g + h ; A != f . textNode . data && ( f . textNode . data = A ) , g ++ } this . element . style . height = e . minHeight + "px" , ( this . $fixedWidth || t . $useWrapMode ) && ( d = t . getLength ( ) + h ) ; var y = u ? u . getWidth ( t , d , e ) : d . toString ( ) . length * e . characterWidth , C = this . $padding || this . $computePadding ( ) ; y += C . left + C . right , y === this . gutterWidth || isNaN ( y ) || ( this . gutterWidth = y , this . element . style . width = Math . ceil ( this . gutterWidth ) + "px" , this . _emit ( "changeGutterWidth" , y ) ) } , this . $fixedWidth = ! 1 , this . $showLineNumbers = ! 0 , this . $renderer = "" , this . setShowLineNumbers = function ( e ) { this . $renderer = ! e && { getWidth : function ( ) { return "" } , getText : function ( ) { return "" } } } , this . getShowLineNumbers = function ( ) { return this . $showLineNumbers } , this . $showFoldWidgets = ! 0 , this . setShowFoldWidgets = function ( e ) { e ? n . addCssClass ( this . element , "ace_folding-enabled" ) : n . removeCssClass ( this . element , "ace_folding-enabled" ) , this . $showFoldWidgets = e , this . $padding = null } , this . getShowFoldWidgets = function ( ) { return this . $showFoldWidgets } , this . $computePadding = function ( ) { if ( ! this . element . firstChild ) return { left : 0 , right : 0 } ; var e = n . computedStyle ( this . element . firstChild ) ; return this . $padding = { } , this . $padding . left = parseInt ( e . paddingLeft ) + 1 || 0 , this . $padding . right = parseInt ( e . paddingRight ) || 0 , this . $padding } , this . getRegion = function ( e ) { var t = this . $padding || this . $computePadding ( ) , i = this . element . getBoundingClientRect ( ) ; return e . x < t . left + i . left ? "markers" : this . $showFoldWidgets && e . x > i . right - t . right ? "foldWidgets" : void 0 } } ) . call ( a . prototype ) , t . Gutter = a } ) , ace . define ( "ace/layer/marker" , [ "require" , "exports" , "module" , "ace/range" , "ace/lib/dom" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../range" ) . Range , r = e ( "../lib/dom" ) , o = function ( e ) { this . element = r . createElement ( "div" ) , this . element . className = "ace_layer ace_marker-layer" , e . appendChild ( this . element ) } ; ( function ( ) { function e ( e , t , i , n ) { return ( e ? 1 : 0 ) | ( t ? 2 : 0 ) | ( i ? 4 : 0 ) | ( n ? 8 : 0 ) } this . $padding = 0 , this . setPadding = function ( e ) { this . $padding = e } , this . setSession = function ( e ) { this . session = e } , this . setMarkers = function ( e ) { this . markers = e } , this . update = function ( e ) { var e = e || this . config ; if ( e ) { this . config = e ; var t = [ ] ; for ( var i in this . markers ) { var n = this . markers [ i ] ; if ( n . range ) { var r = n . range . clipRows ( e . firstRow , e . lastRow ) ; if ( ! r . isEmpty ( ) ) if ( r = r . toScreenRange ( this . session ) , n . renderer ) { var o = this . $getTop ( r . start . row , e ) , s = this . $padding + r . start . column * e . characterWidth ; n . renderer ( t , r , s , o , e ) } else "fullLine" == n . type ? this . drawFullLineMarker ( t , r , n . clazz , e ) : "screenLine" == n . type ? this . drawScreenLineMarker ( t , r , n . clazz , e ) : r . isMultiLine ( ) ? "text" == n . type ? this . drawTextMarker ( t , r , n . clazz , e ) : this . drawMultiLineMarker ( t , r , n . clazz , e ) : this . drawSingleLineMarker ( t , r , n . claz
2016-01-22 03:01:49 +08:00
r . importCssString ( m , "ace_editor.css" ) ; var v = function ( e , t ) { var i = this ; this . container = e || r . createElement ( "div" ) , this . $keepTextAreaAtCursor = ! s . isOldIE , r . addCssClass ( this . container , "ace_editor" ) , this . setTheme ( t ) , this . $gutter = r . createElement ( "div" ) , this . $gutter . className = "ace_gutter" , this . container . appendChild ( this . $gutter ) , this . scroller = r . createElement ( "div" ) , this . scroller . className = "ace_scroller" , this . container . appendChild ( this . scroller ) , this . content = r . createElement ( "div" ) , this . content . className = "ace_content" , this . scroller . appendChild ( this . content ) , this . $gutterLayer = new a ( this . $gutter ) , this . $gutterLayer . on ( "changeGutterWidth" , this . onGutterResize . bind ( this ) ) , this . $markerBack = new l ( this . content ) ; var n = this . $textLayer = new c ( this . content ) ; this . canvas = n . element , this . $markerFront = new l ( this . content ) , this . $cursorLayer = new h ( this . content ) , this . $horizScroll = ! 1 , this . $vScroll = ! 1 , this . scrollBar = this . scrollBarV = new u ( this . container , this ) , this . scrollBarH = new d ( this . container , this ) , this . scrollBarV . addEventListener ( "scroll" , function ( e ) { i . $scrollAnimation || i . session . setScrollTop ( e . data - i . scrollMargin . top ) } ) , this . scrollBarH . addEventListener ( "scroll" , function ( e ) { i . $scrollAnimation || i . session . setScrollLeft ( e . data - i . scrollMargin . left ) } ) , this . scrollTop = 0 , this . scrollLeft = 0 , this . cursorPos = { row : 0 , column : 0 } , this . $fontMetrics = new p ( this . container , 500 ) , this . $textLayer . $setFontMetrics ( this . $fontMetrics ) , this . $textLayer . addEventListener ( "changeCharacterSize" , function ( e ) { i . updateCharacterSize ( ) , i . onResize ( ! 0 , i . gutterWidth , i . $size . width , i . $size . height ) , i . _signal ( "changeCharacterSize" , e ) } ) , this . $size = { width : 0 , height : 0 , scrollerHeight : 0 , scrollerWidth : 0 , $dirty : ! 0 } , this . layerConfig = { width : 1 , padding : 0 , firstRow : 0 , firstRowScreen : 0 , lastRow : 0 , lineHeight : 0 , characterWidth : 0 , minHeight : 1 , maxHeight : 1 , offset : 0 , height : 1 , gutterOffset : 1 } , this . scrollMargin = { left : 0 , right : 0 , top : 0 , bottom : 0 , v : 0 , h : 0 } , this . $loop = new f ( this . $renderChanges . bind ( this ) , this . container . ownerDocument . defaultView ) , this . $loop . schedule ( this . CHANGE _FULL ) , this . updateCharacterSize ( ) , this . setPadding ( 4 ) , o . resetOptions ( this ) , o . _emit ( "renderer" , this ) } ; ( function ( ) { this . CHANGE _CURSOR = 1 , this . CHANGE _MARKER = 2 , this . CHANGE _GUTTER = 4 , this . CHANGE _SCROLL = 8 , this . CHANGE _LINES = 16 , this . CHANGE _TEXT = 32 , this . CHANGE _SIZE = 64 , this . CHANGE _MARKER _BACK = 128 , this . CHANGE _MARKER _FRONT = 256 , this . CHANGE _FULL = 512 , this . CHANGE _H _SCROLL = 1024 , n . implement ( this , g ) , this . updateCharacterSize = function ( ) { this . $textLayer . allowBoldFonts != this . $allowBoldFonts && ( this . $allowBoldFonts = this . $textLayer . allowBoldFonts , this . setStyle ( "ace_nobold" , ! this . $allowBoldFonts ) ) , this . layerConfig . characterWidth = this . characterWidth = this . $textLayer . getCharacterWidth ( ) , this . layerConfig . lineHeight = this . lineHeight = this . $textLayer . getLineHeight ( ) , this . $updatePrintMargin ( ) } , this . setSession = function ( e ) { this . session && this . session . doc . off ( "changeNewLineMode" , this . onChangeNewLineMode ) , this . session = e , e && this . scrollMargin . top && e . getScrollTop ( ) <= 0 && e . setScrollTop ( - this . scrollMargin . top ) , this . $cursorLayer . setSession ( e ) , this . $markerBack . setSession ( e ) , this . $markerFront . setSession ( e ) , this . $gutterLayer . setSession ( e ) , this . $textLayer . setSession ( e ) , e && ( this . $loop . schedule ( this . CHANGE _FULL ) , this . session . $setFontMetrics ( this . $fontMetrics ) , this . onChangeNewLineMode = this . onChangeNewLineMode . bind ( this ) , this . onChangeNewLineMode ( ) , this . session . doc . on ( "changeNewLineMode" , this . onChangeNewLineMode ) ) } , this . updateLines = function ( e , t , i ) { if ( void 0 === t && ( t = 1 / 0 ) , this . $changedLines ? ( this . $changedLines . firstRow > e && ( this . $changedLines . firstRow = e ) , this . $changedLines . lastRow < t && ( this . $changedLines . lastRow = t ) ) : this . $changedLines = { firstRow : e , lastRow : t } , this . $changedLines . lastRow < this . layerConfig . firstRow ) { if ( ! i ) return ; this . $changedLines . lastRow = this . layerConfig . lastRow } this . $changedLines . firstRow > this . layerConfig . lastRow || this . $loop . schedule ( this . CHANGE _LINES ) } , this . onChangeNewLineMode = function ( ) { this . $loop . schedule ( this . CHANGE _TEXT ) , this . $textLayer . $updateEolChar ( ) } , this . onChangeTabSize = function ( ) { this . $loop . schedule ( this . CHANGE _TEXT | this . CHANGE _MARKER ) , this . $textLayer . onChangeTabSize ( ) } , this . updateText = function ( ) { this . $
this . $updating = ! 0 ; var i = "insert" === e . action ? t . end . column - t . start . column : t . start . column - t . end . column , r = t . start . column >= this . pos . column && t . start . column <= this . pos . column + this . length + 1 , o = t . start . column - this . pos . column ; if ( this . updateAnchors ( e ) , r && ( this . length += i ) , r && ! this . session . $fromUndo ) if ( "insert" === e . action ) for ( var s = this . others . length - 1 ; s >= 0 ; s -- ) { var a = this . others [ s ] , l = { row : a . row , column : a . column + o } ; this . doc . insertMergedLines ( l , e . lines ) } else if ( "remove" === e . action ) for ( var s = this . others . length - 1 ; s >= 0 ; s -- ) { var a = this . others [ s ] , l = { row : a . row , column : a . column + o } ; this . doc . remove ( new n ( l . row , l . column , l . row , l . column - i ) ) } this . $updating = ! 1 , this . updateMarkers ( ) } } , this . updateAnchors = function ( e ) { this . pos . onChange ( e ) ; for ( var t = this . others . length ; t -- ; ) this . others [ t ] . onChange ( e ) ; this . updateMarkers ( ) } , this . updateMarkers = function ( ) { if ( ! this . $updating ) { var e = this , t = this . session , i = function ( i , r ) { t . removeMarker ( i . markerId ) , i . markerId = t . addMarker ( new n ( i . row , i . column , i . row , i . column + e . length ) , r , null , ! 1 ) } ; i ( this . pos , this . mainClass ) ; for ( var r = this . others . length ; r -- ; ) i ( this . others [ r ] , this . othersClass ) } } , this . onCursorChange = function ( e ) { if ( ! this . $updating && this . session ) { var t = this . session . selection . getCursor ( ) ; t . row === this . pos . row && t . column >= this . pos . column && t . column <= this . pos . column + this . length ? ( this . showOtherMarkers ( ) , this . _emit ( "cursorEnter" , e ) ) : ( this . hideOtherMarkers ( ) , this . _emit ( "cursorLeave" , e ) ) } } , this . detach = function ( ) { this . session . removeMarker ( this . pos && this . pos . markerId ) , this . hideOtherMarkers ( ) , this . doc . removeEventListener ( "change" , this . $onUpdate ) , this . session . selection . removeEventListener ( "changeCursor" , this . $onCursorChange ) , this . session . setUndoSelect ( ! 0 ) , this . session = null } , this . cancel = function ( ) { if ( - 1 !== this . $undoStackDepth ) { for ( var e = this . session . getUndoManager ( ) , t = ( e . $undoStack || e . $undostack ) . length - this . $undoStackDepth , i = 0 ; t > i ; i ++ ) e . undo ( ! 0 ) ; this . selectionBefore && this . session . selection . fromJSON ( this . selectionBefore ) } } } ) . call ( s . prototype ) , t . PlaceHolder = s } ) , ace . define ( "ace/mouse/multi_select_handler" , [ "require" , "exports" , "module" , "ace/lib/event" , "ace/lib/useragent" ] , function ( e , t , i ) { function n ( e , t ) { return e . row == t . row && e . column == t . column } function r ( e ) { var t = e . domEvent , i = t . altKey , r = t . shiftKey , a = t . ctrlKey , l = e . getAccelKey ( ) , c = e . getButton ( ) ; if ( a && s . isMac && ( c = t . button ) , e . editor . inMultiSelectMode && 2 == c ) return void e . editor . textInput . onContextMenu ( e . domEvent ) ; if ( ! a && ! i && ! l ) return void ( 0 === c && e . editor . inMultiSelectMode && e . editor . exitMultiSelectMode ( ) ) ; if ( 0 === c ) { var h , d = e . editor , u = d . selection , f = d . inMultiSelectMode , p = e . getDocumentPosition ( ) , g = u . getCursor ( ) , m = e . inSelection ( ) || u . isEmpty ( ) && n ( p , g ) , v = e . x , w = e . y , A = function ( e ) { v = e . clientX , w = e . clientY } , y = d . session , C = d . renderer . pixelToScreenCoordinates ( v , w ) , E = C ; if ( d . $mouseHandler . $enableJumpToDef ) a && i || l && i ? h = r ? "block" : "add" : i && d . $blockSelectEnabled && ( h = "block" ) ; else if ( l && ! i ) { if ( h = "add" , ! f && r ) return } else i && d . $blockSelectEnabled && ( h = "block" ) ; if ( h && s . isMac && t . ctrlKey && d . $mouseHandler . cancelContextMenu ( ) , "add" == h ) { if ( ! f && m ) return ; if ( ! f ) { var b = u . toOrientedRange ( ) ; d . addSelectionMarker ( b ) } var F = u . rangeList . rangeAtPoint ( p ) ; d . $blockScrolling ++ , d . inVirtualSelectionMode = ! 0 , r && ( F = null , b = u . ranges [ 0 ] || b , d . removeSelectionMarker ( b ) ) , d . once ( "mouseup" , function ( ) { var e = u . toOrientedRange ( ) ; F && e . isEmpty ( ) && n ( F . cursor , e . cursor ) ? u . substractPoint ( e . cursor ) : ( r ? u . substractPoint ( b . cursor ) : b && ( d . removeSelectionMarker ( b ) , u . addRange ( b ) ) , u . addRange ( e ) ) , d . $blockScrolling -- , d . inVirtualSelectionMode = ! 1 } ) } else if ( "block" == h ) { e . stop ( ) , d . inVirtualSelectionMode = ! 0 ; var x , S = [ ] , $ = function ( ) { var e = d . renderer . pixelToScreenCoordinates ( v , w ) , t = y . screenToDocumentPosition ( e . row , e . column ) ; n ( E , e ) && n ( t , u . lead ) || ( E = e , d . $blockScrolling ++ , d . selection . moveToPosition ( t ) , d . renderer . scrollCursorIntoView ( ) , d . removeSelectionMarkers ( S ) , S = u . rectangularRangeBlock ( E , C ) , d . $mouseHandler . $clickSelection && 1 == S . length && S [ 0 ] . isEmpty ( ) && ( S [ 0 ] = d . $mouseHandler . $clickSelection . clone ( ) ) , S . forEach ( d . addSelectionMarker , d ) , d . updateSelectionMarkers ( ) , d . $blockScrolling -- ) } ; d . $blockScrolling ++ , f && ! l ? u . toSingleRange ( ) : ! f && l && ( x = u . toOrientedRange ( ) , d . addSelectionMarker ( x ) ) , r ? C = y . docume
2016-02-03 15:14:46 +08:00
t . showErrorMarker = function ( e , t ) { var i = e . session ; i . widgetManager || ( i . widgetManager = new o ( i ) , i . widgetManager . attach ( e ) ) ; var n = e . getCursorPosition ( ) , a = n . row , l = i . widgetManager . getWidgetsAtRow ( a ) . filter ( function ( e ) { return "errorMarker" == e . type } ) [ 0 ] ; l ? l . destroy ( ) : a -= t ; var c , h = r ( i , a , t ) ; if ( h ) { var d = h [ 0 ] ; n . column = ( d . pos && "number" != typeof d . column ? d . pos . sc : d . column ) || 0 , n . row = d . row , c = e . renderer . $gutterLayer . $annotations [ n . row ] } else { if ( l ) return ; c = { text : [ "Looks good!" ] , className : "ace_ok" } } e . session . unfold ( n . row ) , e . selection . moveToPosition ( n ) ; var u = { row : n . row , fixedWidth : ! 0 , coverGutter : ! 0 , el : s . createElement ( "div" ) , type : "errorMarker" } , f = u . el . appendChild ( s . createElement ( "div" ) ) , p = u . el . appendChild ( s . createElement ( "div" ) ) ; p . className = "error_widget_arrow " + c . className ; var g = e . renderer . $cursorLayer . getPixelPosition ( n ) . left ; p . style . left = g + e . renderer . gutterWidth - 5 + "px" , u . el . className = "error_widget_wrapper" , f . className = "error_widget " + c . className , f . innerHTML = c . text . join ( "<br>" ) , f . appendChild ( s . createElement ( "div" ) ) ; var m = function ( e , t , i ) { return 0 !== t || "esc" !== i && "return" !== i ? void 0 : ( u . destroy ( ) , { command : "null" } ) } ; u . destroy = function ( ) { e . $mouseHandler . isMousePressed || ( e . keyBinding . removeKeyboardHandler ( m ) , i . widgetManager . removeLineWidget ( u ) , e . off ( "changeSelection" , u . destroy ) , e . off ( "changeSession" , u . destroy ) , e . off ( "mouseup" , u . destroy ) , e . off ( "change" , u . destroy ) ) } , e . keyBinding . addKeyboardHandler ( m ) , e . on ( "changeSelection" , u . destroy ) , e . on ( "changeSession" , u . destroy ) , e . on ( "mouseup" , u . destroy ) , e . on ( "change" , u . destroy ) , e . session . widgetManager . addLineWidget ( u ) , u . el . onmousedown = e . focus . bind ( e ) , e . renderer . scrollCursorIntoView ( null , . 5 , { bottom : u . el . offsetHeight } ) } , s . importCssString ( " .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; } " , "" ) } ) , ace . define ( "ace/ace" , [ "require" , "exports" , "module" , "ace/lib/fixoldbrowsers" , "ace/lib/dom" , "ace/lib/event" , "ace/editor" , "ace/edit_session" , "ace/undomanager" , "ace/virtual_renderer" , "ace/worker/worker_client" , "ace/keyboard/hash_handler" , "ace/placeholder" , "ace/multi_select" , "ace/mode/folding/fold_mode" , "ace/theme/textmate" , "ace/ext/error_marker" , "ace/config" ] , function ( e , t , i ) { "use strict" ; e ( "./lib/fixoldbrowsers" ) ; var n = e ( "./lib/dom" ) , r = e ( "./lib/event" ) , o = e ( "./editor" ) . Editor , s = e ( "./edit_session" ) . EditSession , a = e ( "./undomanager" ) . UndoManager , l = e ( "./virtual_renderer" ) . VirtualRenderer ; e ( "./worker/worker_client" ) , e ( "./keyboard/hash_handler" ) , e ( "./placeholder" ) , e ( "./multi_select" ) , e ( "./mode/folding/fold_mode" ) , e ( "./theme/textmate" ) , e ( "./ext/error_marker" ) , t . config = e ( "./config" ) , t . acequire = e , t . edit = function ( e ) { if ( "string" == typeof e ) { var i = e ; if ( e = document . getElementById ( i ) , ! e ) throw new Error ( "ace.edit can't find div #" + i ) } if ( e && e . env && e . env . editor instanceof o ) return e . env . editor ; var s = "" ; if ( e && /input|textarea/i . test ( e . tagName ) ) { var a = e ; s = a . value , e = n . createElement ( "pre" ) , a . parentNode . replaceChild ( e , a ) } else e && ( s = n . getInnerText ( e ) , e . innerHTML = "" ) ; var c = t . createEditSession ( s ) , h = new o ( new l ( e ) ) ; h . setSession ( c ) ; var d = { document : c , editor : h , onResize : h . resize . bind ( h , null ) } ; return a && ( d . textarea = a ) , r . addListener ( window , "resize" , d . onResize ) , h . on ( "destroy" , function ( ) { r . removeListener ( window , "resize" , d . onResize ) , d . editor . container . env = null } ) , h . container . env = h . env = d , h } , t . createEditSession = function ( e
"enum" : i ( 43 ) , format : i ( 44 ) , items : i ( 45 ) , maximum : i ( 46 ) , minimum : i ( 46 ) , maxItems : i ( 47 ) , minItems : i ( 47 ) , maxLength : i ( 48 ) , minLength : i ( 48 ) , maxProperties : i ( 49 ) , minProperties : i ( 49 ) , multipleOf : i ( 50 ) , not : i ( 51 ) , oneOf : i ( 52 ) , pattern : i ( 53 ) , properties : i ( 54 ) , required : i ( 55 ) , uniqueItems : i ( 56 ) , validate : i ( 36 ) } } , function ( e , t , i ) { e . exports = { id : "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json#" , $schema : "http://json-schema.org/draft-04/schema#" , description : "Core schema meta-schema (v5 proposals)" , definitions : { schemaArray : { type : "array" , minItems : 1 , items : { $ref : "#" } } , positiveInteger : { type : "integer" , minimum : 0 } , positiveIntegerDefault0 : { allOf : [ { $ref : "#/definitions/positiveInteger" } , { "default" : 0 } ] } , simpleTypes : { "enum" : [ "array" , "boolean" , "integer" , "null" , "number" , "object" , "string" ] } , stringArray : { type : "array" , items : { type : "string" } , minItems : 1 , uniqueItems : ! 0 } , $data : { type : "object" , required : [ "$data" ] , properties : { $data : { type : "string" , format : "relative-json-pointer" } } , additionalProperties : ! 1 } } , type : "object" , properties : { id : { type : "string" , format : "uri" } , $schema : { type : "string" , format : "uri" } , title : { type : "string" } , description : { type : "string" } , "default" : { } , multipleOf : { anyOf : [ { type : "number" , minimum : 0 , exclusiveMinimum : ! 0 } , { $ref : "#/definitions/$data" } ] } , maximum : { anyOf : [ { type : "number" } , { $ref : "#/definitions/$data" } ] } , exclusiveMaximum : { anyOf : [ { type : "boolean" , "default" : ! 1 } , { $ref : "#/definitions/$data" } ] } , minimum : { anyOf : [ { type : "number" } , { $ref : "#/definitions/$data" } ] } , exclusiveMinimum : { anyOf : [ { type : "boolean" , "default" : ! 1 } , { $ref : "#/definitions/$data" } ] } , maxLength : { anyOf : [ { $ref : "#/definitions/positiveInteger" } , { $ref : "#/definitions/$data" } ] } , minLength : { anyOf : [ { $ref : "#/definitions/positiveIntegerDefault0" } , { $ref : "#/definitions/$data" } ] } , pattern : { anyOf : [ { type : "string" , format : "regex" } , { $ref : "#/definitions/$data" } ] } , additionalItems : { anyOf : [ { type : "boolean" } , { $ref : "#" } , { $ref : "#/definitions/$data" } ] , "default" : { } } , items : { anyOf : [ { $ref : "#" } , { $ref : "#/definitions/schemaArray" } ] , "default" : { } } , maxItems : { anyOf : [ { $ref : "#/definitions/positiveInteger" } , { $ref : "#/definitions/$data" } ] } , minItems : { anyOf : [ { $ref : "#/definitions/positiveIntegerDefault0" } , { $ref : "#/definitions/$data" } ] } , uniqueItems : { anyOf : [ { type : "boolean" , "default" : ! 1 } , { $ref : "#/definitions/$data" } ] } , maxProperties : { anyOf : [ { $ref : "#/definitions/positiveInteger" } , { $ref : "#/definitions/$data" } ] } , minProperties : { anyOf : [ { $ref : "#/definitions/positiveIntegerDefault0" } , { $ref : "#/definitions/$data" } ] } , required : { anyOf : [ { $ref : "#/definitions/stringArray" } , { $ref : "#/definitions/$data" } ] } , additionalProperties : { anyOf : [ { type : "boolean" } , { $ref : "#" } , { $ref : "#/definitions/$data" } ] , "default" : { } } , definitions : { type : "object" , additionalProperties : { $ref : "#" } , "default" : { } } , properties : { type : "object" , additionalProperties : { $ref : "#" } , "default" : { } } , patternProperties : { type : "object" , additionalProperties : { $ref : "#" } , "default" : { } } , dependencies : { type : "object" , additionalProperties : { anyOf : [ { $ref : "#" } , { $ref : "#/definitions/stringArray" } ] } } , "enum" : { anyOf : [ { type : "array" , minItems : 1 , uniqueItems : ! 0 } , { $ref : "#/definitions/$data" } ] } , type : { anyOf : [ { $ref : "#/definitions/simpleTypes" } , { type : "array" , items : { $ref : "#/definitions/simpleTypes" } , minItems : 1 , uniqueItems : ! 0 } ] } , allOf : { $ref : "#/definitions/schemaArray" } , anyOf : { $ref : "#/definitions/schemaArray" } , oneOf : { $ref : "#/definitions/schemaArray" } , not : { $ref : "#" } , format : { anyOf : [ { type : "string" } , { $ref : "#/definitions/$data" } ] } , formatMaximum : { anyOf : [ { type : "string" } , { $ref : "#/definitions/$data" } ] } , formatMinimum : { anyOf : [ { type : "string" } , { $ref : "#/definitions/$data" } ] } , exclusiveFormatMaximum : { anyOf : [ { type : "boolean" , "default" : ! 1 } , { $ref : "#/definitions/$data" } ] } , exclusiveFormatMinimum : { anyOf : [ { type : "boolean" , "default" : ! 1 } , { $ref : "#/definitions/$data" } ] } , constant : { anyOf : [ { } , { $ref : "#/definitions/$data" } ] } , contains : { $ref : "#" } , patternGroups : { type : "object" , additionalProperties : { type : "object" , required : [ "schema" ] , properties : { maximum : { anyOf : [ { $ref : "#/definitions/positiveInteger" } , { $ref : "#/definitions/$data" } ] } , minimum : { anyOf : [ { $ref : "#/definitions/positiveIntegerDefault0" } , { $ref : "#/definitions/$data" } ] } , schema : { $ref : "#" } } , additionalProperties : ! 1 } , " default
} , function ( e , t , i ) { "use strict" ; e . exports = function ( e , t ) { var i , n = " " , r = e . dataLevel , o = e . schema [ t ] , s = e . errSchemaPath + "/" + t , a = ! e . opts . allErrors , l = "data" + ( r || "" ) ; if ( "#" == o || "#/" == o ) e . isRoot ? ( n += " if (! validate(" + l + ", (dataPath || '')" , '""' != e . errorPath && ( n += " + " + e . errorPath ) , n += ") ) { if (vErrors === null) vErrors = validate.errors; else vErrors = vErrors.concat(validate.errors); errors = vErrors.length; } " , a && ( n += " else { " ) ) : ( n += " if (! root.refVal[0](" + l + ", (dataPath || '')" , '""' != e . errorPath && ( n += " + " + e . errorPath ) , n += ") ) { if (vErrors === null) vErrors = root.refVal[0].errors; else vErrors = vErrors.concat(root.refVal[0].errors); errors = vErrors.length; } " , a && ( n += " else { " ) ) ; else { var c = e . resolveRef ( e . baseId , o , e . isRoot ) ; if ( void 0 === c ) { var h = "can't resolve reference " + o + " from id " + e . baseId ; if ( "fail" == e . opts . missingRefs ) { console . log ( h ) ; var d = d || [ ] ; d . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "$ref" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + s + "\" , params: { ref: '" + e . util . escapeQuotes ( o ) + "' } " , e . opts . messages !== ! 1 && ( n += " , message: 'can\\'t resolve reference " + e . util . escapeQuotes ( o ) + "' " ) , e . opts . verbose && ( n += " , schema: " + e . util . toQuotedString ( o ) + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + l + " " ) , n += " } " ) : n += " {} " ; var u = n ; n = d . pop ( ) , n += ! e . compositeRule && a ? " validate.errors = [" + u + "]; return false; " : " var err = " + u + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , a && ( n += " if (false) { " ) } else { if ( "ignore" != e . opts . missingRefs ) { var f = new Error ( h ) ; throw f . missingRef = e . resolve . url ( e . baseId , o ) , f . missingSchema = e . resolve . normalizeId ( e . resolve . fullPath ( f . missingRef ) ) , f } console . log ( h ) , a && ( n += " if (true) { " ) } } else if ( "string" == typeof c ) n += " if (! " + c + "(" + l + ", (dataPath || '')" , '""' != e . errorPath && ( n += " + " + e . errorPath ) , n += ") ) { if (vErrors === null) vErrors = " + c + ".errors; else vErrors = vErrors.concat(" + c + ".errors); errors = vErrors.length; } " , a && ( n += " else { " ) ; else { var p = e . util . copy ( e ) ; p . level ++ , p . schema = c . schema , p . schemaPath = "" , p . errSchemaPath = o ; var g = e . validate ( p ) . replace ( /validate\.schema/g , c . code ) ; n += " " + g + " " , a && ( n += " if (valid" + p . level + ") { " ) } } return n } } , function ( e , t , i ) { "use strict" ; e . exports = function ( e , t ) { var i = " " , n = e . schema [ t ] , r = e . schemaPath + "." + t , o = e . errSchemaPath + "/" + t , s = ! e . opts . allErrors , a = e . util . copy ( e ) , l = "" ; a . level ++ ; var c = n ; if ( c ) for ( var h , d = - 1 , u = c . length - 1 ; u > d ; ) h = c [ d += 1 ] , e . util . schemaHasRules ( h , e . RULES . all ) && ( a . schema = h , a . schemaPath = r + "[" + d + "]" , a . errSchemaPath = o + "/" + d , i += " " + e . validate ( a ) + " " , s && ( i += " if (valid" + a . level + ") { " , l += "}" ) ) ; return s && ( i += " " + l . slice ( 0 , - 1 ) ) , i = e . util . cleanUpCode ( i ) } } , function ( e , t , i ) { "use strict" ; e . exports = function ( e , t ) { var i , n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPath + "." + t , l = e . errSchemaPath + "/" + t , c = ! e . opts . allErrors , h = "data" + ( o || "" ) , d = "valid" + r , u = "errs__" + r , f = e . util . copy ( e ) , p = "" ; f . level ++ ; var g = s . every ( function ( t ) { return e . util . schemaHasRules ( t , e . RULES . all ) } ) ; if ( g ) { n += " var " + u + " = errors; var " + d + " = false; " ; var m = e . compositeRule ; e . compositeRule = f . compositeRule = ! 0 ; var v = s ; if ( v ) for ( var w , A = - 1 , y = v . length - 1 ; y > A ; ) w = v [ A += 1 ] , f . schema = w , f . schemaPath = a + "[" + A + "]" , f . errSchemaPath = l + "/" + A , n += " " + e . validate ( f ) + " " + d + " = " + d + " || valid" + f . level + "; if (!" + d + ") { " , p += "}" ; e . compositeRule = f . compositeRule = m , n += " " + p + " if (!" + d + ") { var err = " , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "anyOf" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + '" , params: {} ' , e . opts . messages !== ! 1 && ( n += " , message: 'should match some schema in anyOf' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " , n += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else { errors = " + u + "; if (vErrors !== null) { if (" + u + ") vErrors.length = " + u + "; else vErrors = null; } " , e . opts . allErrors && ( n += " } " ) , n = e . util . cleanUpCode ( n ) } else c && ( n += " if (true) { " ) ; return n } } , function ( e , t , i ) { "use strict" ; e . exports = function ( e , t ) { var i , n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPat
n += " } " } l = V , c && ( n += " if (" + d + ") { " , p += "}" ) } } } } return c && ( n += " " + p + " if (" + u + " == errors) {" ) , n = e . util . cleanUpCode ( n ) } } , function ( e , t , i ) { "use strict" ; e . exports = function ( e , t ) { var i , n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPath + "." + t , l = e . errSchemaPath + "/" + t , c = ! e . opts . allErrors , h = "data" + ( o || "" ) , d = "valid" + r , u = e . opts . v5 && s . $data , f = u ? e . util . getData ( s . $data , o , e . dataPathArr ) : s ; if ( u && ( n += " var schema" + r + " = " + f + "; " , f = "schema" + r ) , ! u ) if ( s . length < e . opts . loopRequired && e . schema . properties && Object . keys ( e . schema . properties ) . length ) { var p = [ ] , g = s ; if ( g ) for ( var m , v = - 1 , w = g . length - 1 ; w > v ; ) { m = g [ v += 1 ] ; var A = e . schema . properties [ m ] ; A && e . util . schemaHasRules ( A , e . RULES . all ) || ( p [ p . length ] = m ) } } else var p = s ; if ( u || p . length ) { var y = e . errorPath , C = u || p . length >= e . opts . loopRequired ; if ( c ) if ( n += " var missing" + r + "; " , C ) { u || ( n += " var schema" + r + " = validate.schema" + a + "; " ) ; var E = "i" + r , b = "schema" + r + "[" + E + "]" , F = "' + " + b + " + '" ; e . opts . _errorDataPathProperty && ( e . errorPath = e . util . getPathExpr ( y , b , e . opts . jsonPointers ) ) , n += " var " + d + " = true; " , u && ( n += " if (schema" + r + " === undefined) " + d + " = true; else if (!Array.isArray(schema" + r + ")) " + d + " = false; else {" ) , n += " for (var " + E + " = 0; " + E + " < schema" + r + ".length; " + E + "++) { " + d + " = " + h + "[schema" + r + "[" + E + "]] !== undefined; if (!" + d + ") break; } " , u && ( n += " } " ) , n += " if (!" + d + ") { " ; var x = x || [ ] ; x . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "required" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + "\" , params: { missingProperty: '" + F + "' } " , e . opts . messages !== ! 1 && ( n += " , message: '" , n += e . opts . _errorDataPathProperty ? "is a required property" : "should have required property \\'" + F + "\\'" , n += "' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var S = n ; n = x . pop ( ) , n += ! e . compositeRule && c ? " validate.errors = [" + S + "]; return false; " : " var err = " + S + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " } else { " } else { n += " if ( " ; var $ = p ; if ( $ ) for ( var D , E = - 1 , k = $ . length - 1 ; k > E ; ) { D = $ [ E += 1 ] , E && ( n += " || " ) ; var B = e . util . getProperty ( D ) ; n += " ( " + h + B + " === undefined && (missing" + r + " = " + e . util . toQuotedString ( e . opts . jsonPointers ? D : B ) + ") ) " } n += ") { " ; var b = "missing" + r , F = "' + " + b + " + '" ; e . opts . _errorDataPathProperty && ( e . errorPath = e . opts . jsonPointers ? e . util . getPathExpr ( y , b , ! 0 ) : y + " + " + b ) ; var x = x || [ ] ; x . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "required" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + "\" , params: { missingProperty: '" + F + "' } " , e . opts . messages !== ! 1 && ( n += " , message: '" , n += e . opts . _errorDataPathProperty ? "is a required property" : "should have required property \\'" + F + "\\'" , n += "' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var S = n ; n = x . pop ( ) , n += ! e . compositeRule && c ? " validate.errors = [" + S + "]; return false; " : " var err = " + S + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " } else { " } else if ( C ) { u || ( n += " var schema" + r + " = validate.schema" + a + "; " ) ; var E = "i" + r , b = "schema" + r + "[" + E + "]" , F = "' + " + b + " + '" ; e . opts . _errorDataPathProperty && ( e . errorPath = e . util . getPathExpr ( y , b , e . opts . jsonPointers ) ) , u && ( n += " if (schema" + r + " && !Array.isArray(schema" + r + ")) { var err = " , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "required" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + "\" , params: { missingProperty: '" + F + "' } " , e . opts . messages !== ! 1 && ( n += " , message: '" , n += e . opts . _errorDataPathProperty ? "is a required property" : "should have required property \\'" + F + "\\'" , n += "' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " , n += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (schema" + r + " !== undefined) { " ) , n += " for (var " + E + " = 0; " + E + " < schema" + r + ".length; " + E + "++) { if (" + h + "[schema" + r + "[" + E + "]] === undefined) { var err = " , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || " require
2014-05-30 04:13:37 +08:00
//# sourceMappingURL=jsoneditor.map