2017-07-04 01:23:32 +08:00
/ * !
* jsoneditor . js
*
* @ brief
* JSONEditor is a web - based tool to view , edit , format , and validate JSON .
* It has various modes such as a tree editor , a code editor , and a plain text
* editor .
*
* Supported browsers : Chrome , Firefox , Safari , Opera , Internet Explorer 8 +
*
* @ license
* Licensed under the Apache License , Version 2.0 ( the "License" ) ; you may not
* use this file except in compliance with the License . You may obtain a copy
* of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS , WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied . See the
* License for the specific language governing permissions and limitations under
* the License .
*
* Copyright ( c ) 2011 - 2017 Jos de Jong , http : //jsoneditoronline.org
*
* @ author Jos de Jong , < wjosdejong @ gmail . com >
2017-11-15 18:52:35 +08:00
* @ version 5.10 . 1
2017-11-15 18:00:02 +08:00
* @ date 2017 - 11 - 15
2017-07-04 01:23:32 +08:00
* /
2017-11-15 18:00:02 +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 ) { "use strict" ; function n ( e , t , i ) { if ( ! ( this instanceof n ) ) throw new Error ( 'JSONEditor constructor called without "new".' ) ; var r = a . getInternetExplorerVersion ( ) ; if ( - 1 != r && r < 9 ) throw new Error ( "Unsupported browser, IE9 or newer required. Please install the newest version of your browser." ) ; if ( t && ( t . error && ( console . warn ( 'Option "error" has been renamed to "onError"' ) , t . onError = t . error , delete t . error ) , t . change && ( console . warn ( 'Option "change" has been renamed to "onChange"' ) , t . onChange = t . change , delete t . change ) , t . editable && ( console . warn ( 'Option "editable" has been renamed to "onEditable"' ) , t . onEditable = t . editable , delete t . editable ) , t ) ) { var o = [ "ajv" , "schema" , "schemaRefs" , "templates" , "ace" , "theme" , "autocomplete" , "onChange" , "onEditable" , "onError" , "onModeChange" , "escapeUnicode" , "history" , "search" , "mode" , "modes" , "name" , "indentation" , "sortObjectKeys" , "navigationBar" , "statusBar" ] ; Object . keys ( t ) . forEach ( function ( e ) { - 1 === o . indexOf ( e ) && console . warn ( 'Unknown option "' + e + '". This option will be ignored' ) } ) } arguments . length && this . _create ( e , t , i ) } var r ; try { r = i ( 1 ) } catch ( e ) { } var o = i ( 51 ) , s = i ( 64 ) , a = i ( 54 ) ; 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 || this . options . modes && this . options . modes [ 0 ] || "tree" ; this . setMode ( n ) } , n . prototype . destroy = function ( ) { } , n . prototype . set = function ( e ) { this . json = e } , n . prototype . get = function ( ) { return this . json } , n . prototype . setText = function ( e ) { this . json = a . parse ( e ) } , n . prototype . getText = function ( ) { return JSON . stringify ( this . json ) } , n . prototype . setName = function ( e ) { this . options || ( this . options = { } ) , this . options . name = e } , n . prototype . getName = function ( ) { return this . options && this . options . name } , n . prototype . setMode = function ( e ) { var t , i , r = this . container , o = a . extend ( { } , this . options ) , s = o . mode ; o . mode = e ; var l = n . modes [ e ] ; if ( ! l ) throw new Error ( 'Unknown mode "' + o . mode + '"' ) ; try { var c = "text" == l . data ; if ( i = this . getName ( ) , t = this [ c ? "getText" : "get" ] ( ) , this . destroy ( ) , a . clear ( this ) , a . extend ( this , l . mixin ) , this . create ( r , o ) , this . setName ( i ) , this [ c ? "setText" : "set" ] ( t ) , "function" == typeof l . load ) try { l . load . call ( this ) } catch ( e ) { console . error ( e ) } if ( "function" == typeof o . onModeChange && e !== s ) try { o . onModeChange ( e , s ) } catch ( e ) { console . error ( e ) } } catch ( e ) { this . _onError ( e ) } } , n . prototype . getMode = function ( ) { return this . options . mode } , n . prototype . _onError = function ( e ) { if ( ! this . options || "function" != typeof this . options . onError ) throw e ; this . options . onError ( e ) } , n . prototype . setSchema = function ( e , t ) { if ( e ) { var i ; try { i = this . options . ajv || r ( { allErrors : ! 0 , verbose : ! 0 } ) } catch ( e ) { console . warn ( "Failed to create an instance of Ajv, JSON Schema validation is not available. Please use a JSONEditor bundle including Ajv, or pass an instance of Ajv as via the configuration option `ajv`." ) } if ( i ) { if ( t ) { for ( var n in t ) i . removeSchema ( n ) , t [ n ] && i . addSchema ( t [ n ] , n ) ; this . options . schemaRefs = t } this . validateSchema = i . compile ( e ) , this . options . schema = e , this . validate ( ) } this . refresh ( ) } else this . validateSchema = null , this . options . schema = null , this . options . schemaRefs = null , this . validate ( ) , this . refresh ( ) } , n . prototype . validate = function ( ) { } , n . prototype . refresh = function ( ) { } , n . registerMode = function ( e ) { var t , i ; if ( a . isArray ( e ) ) for ( t = 0 ; t < e . length ; t ++ ) n . registerMode ( e [ t ] ) ; else { if ( ! ( "mode" in e ) ) throw new Error ( 'Property "mode" missing' ) ; if ( ! ( "mixin" in e ) ) throw new Error ( 'Property "mixin" missing' ) ; if ( ! ( "data" in e ) ) throw new Error ( 'Property "data" missing' ) ; var r = e . mode ; if ( r in n . modes ) throw new Error ( 'Mode "' + r + '" already registered' ) ; if ( "function" != typeof e . mixin . create ) throw new Error ( 'Required function "create" missing on mixin' ) ; var o = [ "setMode" , "registerMode" , "modes" ] ; for ( t = 0 ; t < o . length ; t ++ ) if
n += ") && (missing" + r + " = " + e . util . toQuotedString ( e . opts . jsonPointers ? b : S ) + ") ) " } n += ")) { " ; var D = "missing" + r , k = "' + " + D + " + '" ; e . opts . _errorDataPathProperty && ( e . errorPath = e . opts . jsonPointers ? e . util . getPathExpr ( A , D , ! 0 ) : A + " + " + D ) ; var B = B || [ ] ; B . push ( n ) , n = "" , ! 1 !== e . createErrors ? ( n += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + e . errorPath + " , schemaPath: " + e . util . toQuotedString ( l ) + " , params: { property: '" + e . util . escapeQuotes ( C ) + "', missingProperty: '" + k + "', depsCount: " + y . length + ", deps: '" + e . util . escapeQuotes ( 1 == y . length ? y [ 0 ] : y . join ( ", " ) ) + "' } " , ! 1 !== e . opts . messages && ( n += " , message: 'should have " , 1 == y . length ? n += "property " + e . util . escapeQuotes ( y [ 0 ] ) : n += "properties " + e . util . escapeQuotes ( y . join ( ", " ) ) , n += " when property " + e . util . escapeQuotes ( C ) + " is present' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var _ = n ; n = B . pop ( ) , ! e . compositeRule && c ? e . async ? n += " throw new ValidationError([" + _ + "]); " : n += " validate.errors = [" + _ + "]; return false; " : n += " var err = " + _ + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " } else { n += " ) { " ; var L = y ; if ( L ) for ( var b , R = - 1 , T = L . length - 1 ; R < T ; ) { b = L [ R += 1 ] ; var S = e . util . getProperty ( b ) , k = e . util . escapeQuotes ( b ) , $ = h + S ; e . opts . _errorDataPathProperty && ( e . errorPath = e . util . getPath ( A , b , e . opts . jsonPointers ) ) , n += " if ( " + $ + " === undefined " , v && ( n += " || ! Object.prototype.hasOwnProperty.call(" + h + ", '" + e . util . escapeQuotes ( b ) + "') " ) , n += ") { var err = " , ! 1 !== e . createErrors ? ( n += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + e . errorPath + " , schemaPath: " + e . util . toQuotedString ( l ) + " , params: { property: '" + e . util . escapeQuotes ( C ) + "', missingProperty: '" + k + "', depsCount: " + y . length + ", deps: '" + e . util . escapeQuotes ( 1 == y . length ? y [ 0 ] : y . join ( ", " ) ) + "' } " , ! 1 !== e . opts . messages && ( n += " , message: 'should have " , 1 == y . length ? n += "property " + e . util . escapeQuotes ( y [ 0 ] ) : n += "properties " + e . util . escapeQuotes ( y . join ( ", " ) ) , n += " when property " + e . util . escapeQuotes ( C ) + " is present' " ) , 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++; } " } } n += " } " , c && ( f += "}" , n += " else { " ) } e . errorPath = A ; var P = d . baseId ; for ( var C in m ) { var w = m [ C ] ; e . util . schemaHasRules ( w , e . RULES . all ) && ( n += " " + p + " = true; if ( " + h + e . util . getProperty ( C ) + " !== undefined " , v && ( n += " && Object.prototype.hasOwnProperty.call(" + h + ", '" + e . util . escapeQuotes ( C ) + "') " ) , n += ") { " , d . schema = w , d . schemaPath = a + e . util . getProperty ( C ) , d . errSchemaPath = l + "/" + e . util . escapeFragment ( C ) , n += " " + e . validate ( d ) + " " , d . baseId = P , n += " } " , c && ( n += " if (" + p + ") { " , f += "}" ) ) } return c && ( n += " " + f + " if (" + u + " == errors) {" ) , n = e . util . cleanUpCode ( n ) } } , function ( e , t ) { "use strict" ; e . exports = function ( e , t , i ) { var n = " " , r = e . level , o = e . dataLevel , s = e . schema [ t ] , a = e . schemaPath + e . util . getProperty ( t ) , l = e . errSchemaPath + "/" + t , c = ! e . opts . allErrors , h = "data" + ( o || "" ) , u = "valid" + r , d = e . opts . $data && s && s . $data ; d && ( n += " var schema" + r + " = " + e . util . getData ( s . $data , o , e . dataPathArr ) + "; " ) ; var f = "i" + r , p = "schema" + r ; d || ( n += " var " + p + " = validate.schema" + a + ";" ) , n += "var " + u + ";" , d && ( n += " if (schema" + r + " === undefined) " + u + " = true; else if (!Array.isArray(schema" + r + ")) " + u + " = false; else {" ) , n += u + " = false;for (var " + f + "=0; " + f + "<" + p + ".length; " + f + "++) if (equal(" + h + ", " + p + "[" + f + "])) { " + u + " = true; break; }" , d && ( n += " } " ) , n += " if (!" + u + ") { " ; var m = m || [ ] ; m . push ( n ) , n = "" , ! 1 !== e . createErrors ? ( n += " { keyword: 'enum' , dataPath: (dataPath || '') + " + e . errorPath + " , schemaPath: " + e . util . toQuotedString ( l ) + " , params: { allowedValues: schema" + r + " } " , ! 1 !== e . opts . messages && ( n += " , message: 'should be equal to one of the allowed values' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var g = n ; return n = m . pop ( ) , ! e . compositeRule && c ? e . async ? n += " throw new ValidationError([" + g + "]); " : n += " validate.errors = [" + g + "]; return false; " : n += " var err = " + g
e . setSelected ( ! 1 ) } ) , this . multiselection . nodes = [ ] , e && ( this . multiselection . start = null , this . multiselection . end = null ) } , d . select = function ( e ) { if ( ! Array . isArray ( e ) ) return this . select ( [ e ] ) ; if ( e ) { this . deselect ( ) , this . multiselection . nodes = e . slice ( 0 ) ; var t = e [ 0 ] ; e . forEach ( function ( e ) { e . setSelected ( ! 0 , e === t ) } ) } } , d . _findTopLevelNodes = function ( e , t ) { for ( var i = e . getNodePath ( ) , n = t . getNodePath ( ) , r = 0 ; r < i . length && i [ r ] === n [ r ] ; ) r ++ ; var o = i [ r - 1 ] , s = i [ r ] , a = n [ r ] ; if ( s && a || ( o . parent ? ( s = o , a = o , o = o . parent ) : ( s = o . childs [ 0 ] , a = o . childs [ o . childs . length - 1 ] ) ) , o && s && a ) { var l = o . childs . indexOf ( s ) , c = o . childs . indexOf ( a ) , h = Math . min ( l , c ) , u = Math . max ( l , c ) ; return o . childs . slice ( h , u + 1 ) } return [ ] } , d . _onKeyDown = function ( e ) { var t = e . which || e . keyCode , i = e . altKey , n = e . ctrlKey , r = e . metaKey , o = e . shiftKey , s = ! 1 ; if ( 9 == t ) { var a = this ; setTimeout ( function ( ) { h . selectContentEditable ( a . focusTarget ) } , 0 ) } if ( this . searchBox ) if ( n && 70 == t ) this . searchBox . dom . search . focus ( ) , this . searchBox . dom . search . select ( ) , s = ! 0 ; else if ( 114 == t || n && 71 == t ) { o ? this . searchBox . previous ( ! 0 ) : this . searchBox . next ( ! 0 ) , s = ! 0 } if ( this . history && ( n && ! o && 90 == t ? ( this . _onUndo ( ) , s = ! 0 ) : n && o && 90 == t && ( this . _onRedo ( ) , s = ! 0 ) ) , this . options . autocomplete && ! s && ! ( n || i || r || 1 != e . key . length && 8 != t && 46 != t ) ) { s = ! 1 ; var c = "" ; e . target . className . indexOf ( "jsoneditor-value" ) >= 0 && ( c = "value" ) , e . target . className . indexOf ( "jsoneditor-field" ) >= 0 && ( c = "field" ) ; var u = l . getNodeFromTarget ( e . target ) ; setTimeout ( function ( e , t ) { if ( t . innerText . length > 0 ) { var i = this . options . autocomplete . getOptions ( t . innerText , e . getPath ( ) , c , e . editor ) ; "function" == typeof i . then ? i . then ( function ( e ) { e . options ? this . autocomplete . show ( t , e . startFrom , e . options ) : this . autocomplete . show ( t , 0 , e ) } . bind ( this ) ) : i . options ? this . autocomplete . show ( t , i . startFrom , i . options ) : this . autocomplete . show ( t , 0 , i ) } else this . autocomplete . hideDropDown ( ) } . bind ( this , u , e . target ) , 50 ) } s && ( e . preventDefault ( ) , e . stopPropagation ( ) ) } , d . _createTable = function ( ) { var e = document . createElement ( "div" ) ; e . className = "jsoneditor-outer" , this . options . navigationBar && h . addClassName ( e , "has-nav-bar" ) , this . contentOuter = e , this . content = document . createElement ( "div" ) , this . content . className = "jsoneditor-tree" , e . appendChild ( this . content ) , this . table = document . createElement ( "table" ) , this . table . className = "jsoneditor-tree" , this . content . appendChild ( this . table ) ; var t ; this . colgroupContent = document . createElement ( "colgroup" ) , "tree" === this . options . mode && ( t = document . createElement ( "col" ) , t . width = "24px" , this . colgroupContent . appendChild ( t ) ) , t = document . createElement ( "col" ) , t . width = "24px" , this . colgroupContent . appendChild ( t ) , t = document . createElement ( "col" ) , this . colgroupContent . appendChild ( t ) , this . table . appendChild ( this . colgroupContent ) , this . tbody = document . createElement ( "tbody" ) , this . table . appendChild ( this . tbody ) , this . frame . appendChild ( e ) } , d . showContextMenu = function ( e , t ) { var i = [ ] , n = this ; i . push ( { text : "Duplicate" , title : "Duplicate selected fields (Ctrl+D)" , className : "jsoneditor-duplicate" , click : function ( ) { l . onDuplicate ( n . multiselection . nodes ) } } ) , i . push ( { text : "Remove" , title : "Remove selected fields (Ctrl+Del)" , className : "jsoneditor-remove" , click : function ( ) { l . onRemove ( n . multiselection . nodes ) } } ) , new s ( i , { close : t } ) . show ( e , this . content ) } , e . exports = [ { mode : "tree" , mixin : d , data : "json" } , { mode : "view" , mixin : d , data : "json" } , { mode : "form" , mixin : d , data : "json" } ] } , function ( e , t ) { "use strict" ; function i ( ) { this . locked = ! 1 } i . prototype . highlight = function ( e ) { this . locked || ( this . node != e && ( this . node && this . node . setHighlight ( ! 1 ) , this . node = e , this . node . setHighlight ( ! 0 ) ) , this . _cancelUnhighlight ( ) ) } , i . prototype . unhighlight = function ( ) { if ( ! this . locked ) { var e = this ; this . node && ( this . _cancelUnhighlight ( ) , this . unhighlightTimer = setTimeout ( function ( ) { e . node . setHighlight ( ! 1 ) , e . node = void 0 , e . unhighlightTimer = void 0 } , 0 ) ) } } , i . prototype . _cancelUnhighlight = function ( ) { this . unhighlightTimer && ( clearTimeout ( this . unhighlightTimer ) , this . unhighlightTimer = void 0 ) } , i . prototype . lock = function ( ) { this . locked = ! 0 } , i . prototype . unlock = function ( ) { this . locked = ! 1 } , e . exports = i } , function ( e , t , i ) { "use strict" ; function n ( e ) { this . editor = e , this . history = [ ] , this . index = - 1 , this . clear ( ) , this . actions = { editField : { undo : function ( e ) { e . node . updateField ( e . oldValue ) } , redo : funct
2017-11-15 18:52:35 +08:00
h = this . editor . _findTopLevelNodes ( u . start , u . end ) , this . editor . select ( h ) , i . focus ( "field" ) ) , v = ! 0 ; else if ( g && m && w ) { i = C . expanded ? C . append ? C . append . _nextNode ( ) : void 0 : C . _nextNode ( ) ; var _ = i && ( i . _nextNode ( ) || i . parent . append ) ; _ && _ . parent && ( s = this . editor . getSelection ( ) , c = C . _nextSibling ( ) , y . forEach ( function ( e ) { _ . parent . moveBefore ( e , _ ) } ) , this . focus ( n . focusElement || this . _getElementName ( f ) ) , this . editor . _onAction ( "moveNodes" , { nodes : y , oldBeforeNode : c , newBeforeNode : _ , oldSelection : s , newSelection : this . editor . getSelection ( ) } ) ) , v = ! 0 } v && ( e . preventDefault ( ) , e . stopPropagation ( ) ) } , n . prototype . _onExpand = function ( e ) { if ( e ) { var t = this . dom . tr . parentNode , i = t . parentNode , n = i . scrollTop ; i . removeChild ( t ) } this . expanded ? this . collapse ( e ) : this . expand ( e ) , e && ( i . appendChild ( t ) , i . scrollTop = n ) } , n . onRemove = function ( e ) { if ( ! Array . isArray ( e ) ) return n . onRemove ( [ e ] ) ; if ( e && e . length > 0 ) { var t = e [ 0 ] , i = t . parent , r = t . editor , o = t . getIndex ( ) ; r . highlighter . unhighlight ( ) ; var s = r . getSelection ( ) ; n . blurNodes ( e ) ; var a = r . getSelection ( ) ; e . forEach ( function ( e ) { e . parent . _remove ( e ) } ) , r . _onAction ( "removeNodes" , { nodes : e . slice ( 0 ) , parent : i , index : o , oldSelection : s , newSelection : a } ) } } , n . onDuplicate = function ( e ) { if ( ! Array . isArray ( e ) ) return n . onDuplicate ( [ e ] ) ; if ( e && e . length > 0 ) { var t = e [ e . length - 1 ] , i = t . parent , r = t . editor ; r . deselect ( r . multiselection . nodes ) ; var o = r . getSelection ( ) , s = t , a = e . map ( function ( e ) { var t = e . clone ( ) ; return i . insertAfter ( t , s ) , s = t , t } ) ; 1 === e . length ? a [ 0 ] . focus ( ) : r . select ( a ) ; var l = r . getSelection ( ) ; r . _onAction ( "duplicateNodes" , { afterNode : t , nodes : a , parent : i , oldSelection : o , newSelection : l } ) } } , n . prototype . _onInsertBefore = function ( e , t , i ) { var r = this . editor . getSelection ( ) , o = new n ( this . editor , { field : void 0 != e ? e : "" , value : void 0 != t ? t : "" , type : i } ) ; o . expand ( ! 0 ) , this . parent . insertBefore ( o , this ) , this . editor . highlighter . unhighlight ( ) , o . focus ( "field" ) ; var s = this . editor . getSelection ( ) ; this . editor . _onAction ( "insertBeforeNodes" , { nodes : [ o ] , beforeNode : this , parent : this . parent , oldSelection : r , newSelection : s } ) } , n . prototype . _onInsertAfter = function ( e , t , i ) { var r = this . editor . getSelection ( ) , o = new n ( this . editor , { field : void 0 != e ? e : "" , value : void 0 != t ? t : "" , type : i } ) ; o . expand ( ! 0 ) , this . parent . insertAfter ( o , this ) , this . editor . highlighter . unhighlight ( ) , o . focus ( "field" ) ; var s = this . editor . getSelection ( ) ; this . editor . _onAction ( "insertAfterNodes" , { nodes : [ o ] , afterNode : this , parent : this . parent , oldSelection : r , newSelection : s } ) } , n . prototype . _onAppend = function ( e , t , i ) { var r = this . editor . getSelection ( ) , o = new n ( this . editor , { field : void 0 != e ? e : "" , value : void 0 != t ? t : "" , type : i } ) ; o . expand ( ! 0 ) , this . parent . appendChild ( o ) , this . editor . highlighter . unhighlight ( ) , o . focus ( "field" ) ; var s = this . editor . getSelection ( ) ; this . editor . _onAction ( "appendNodes" , { nodes : [ o ] , parent : this . parent , oldSelection : r , newSelection : s } ) } , n . prototype . _onChangeType = function ( e ) { var t = this . type ; if ( e != t ) { var i = this . editor . getSelection ( ) ; this . changeType ( e ) ; var n = this . editor . getSelection ( ) ; this . editor . _onAction ( "changeType" , { node : this , oldType : t , newType : e , oldSelection : i , newSelection : n } ) } } , n . prototype . sort = function ( e ) { if ( this . _hasChilds ( ) ) { var t = "desc" == e ? - 1 : 1 , i = "array" == this . type ? "value" : "field" ; this . hideChilds ( ) ; var n = this . childs , o = this . sortOrder ; this . childs = this . childs . concat ( ) , this . childs . sort ( function ( e , n ) { return t * r ( e [ i ] , n [ i ] ) } ) , this . sortOrder = 1 == t ? "asc" : "desc" , this . editor . _onAction ( "sort" , { node : this , oldChilds : n , oldSort : o , newChilds : this . childs , newSort : this . sortOrder } ) , this . showChilds ( ) } } , n . prototype . getAppend = function ( ) { return this . append || ( this . append = new l ( this . editor ) , this . append . setParent ( this ) ) , this . append . getDom ( ) } , n . getNodeFromTarget = function ( e ) { for ( ; e ; ) { if ( e . node ) return e . node ; e = e . parentNode } } , n . blurNodes = function ( e ) { if ( ! Array . isArray ( e ) ) return void n . blurNodes ( [ e ] ) ; var t = e [ 0 ] , i = t . parent , r = t . getIndex ( ) ; i . childs [ r + e . length ] ? i . childs [ r + e . length ] . focus ( ) : i . childs [ r - 1 ] ? i . childs [ r - 1 ] . focus ( ) : i . focus ( ) } , n . prototype . _nextSibling = function ( ) { var e = this . parent . childs . indexOf ( this ) ; return this . parent . childs [ e + 1 ] || this . parent . append } , n . prototype . _previousNode = function ( ) { var e = null , t = this . getDom ( ) ; if ( t && t . parentNode ) { var i = t ; do { i = i . previousSibling , e = n . getNodeFromTarget ( i ) } while ( i && e instanceof l && ! e .
! this . $focusTimout || this . $clickSelection || n . inMultiSelectMode ) ? ( this . captureMouse ( e ) , this . startSelect ( i , e . domEvent . _clicks > 1 ) , e . preventDefault ( ) ) : ( this . setState ( "focusWait" ) , void this . captureMouse ( e ) ) } , this . startSelect = function ( e , t ) { e = e || this . editor . renderer . screenToTextCoordinates ( this . x , this . y ) ; var i = this . editor ; i . $blockScrolling ++ , this . mousedownEvent . getShiftKey ( ) ? i . selection . selectToPosition ( e ) : t || i . selection . moveToPosition ( e ) , t || this . select ( ) , i . renderer . scroller . setCapture && i . renderer . scroller . setCapture ( ) , i . setStyle ( "ace_selecting" ) , this . setState ( "select" ) , i . $blockScrolling -- } , this . select = function ( ) { var e , t = this . editor , i = t . renderer . screenToTextCoordinates ( this . x , this . y ) ; if ( t . $blockScrolling ++ , this . $clickSelection ) { var n = this . $clickSelection . comparePoint ( i ) ; if ( - 1 == n ) e = this . $clickSelection . end ; else if ( 1 == n ) e = this . $clickSelection . start ; else { var r = o ( this . $clickSelection , i ) ; i = r . cursor , e = r . anchor } t . selection . setSelectionAnchor ( e . row , e . column ) } t . selection . selectToPosition ( i ) , t . $blockScrolling -- , t . renderer . scrollCursorIntoView ( ) } , this . extendSelectionBy = function ( e ) { var t , i = this . editor , n = i . renderer . screenToTextCoordinates ( this . x , this . y ) , r = i . selection [ e ] ( n . row , n . column ) ; if ( i . $blockScrolling ++ , this . $clickSelection ) { var s = this . $clickSelection . comparePoint ( r . start ) , a = this . $clickSelection . comparePoint ( r . end ) ; if ( - 1 == s && a <= 0 ) t = this . $clickSelection . end , r . end . row == n . row && r . end . column == n . column || ( n = r . start ) ; else if ( 1 == a && s >= 0 ) t = this . $clickSelection . start , r . start . row == n . row && r . start . column == n . column || ( n = r . end ) ; else if ( - 1 == s && 1 == a ) n = r . end , t = r . start ; else { var l = o ( this . $clickSelection , n ) ; n = l . cursor , t = l . anchor } i . selection . setSelectionAnchor ( t . row , t . column ) } i . selection . selectToPosition ( n ) , i . $blockScrolling -- , i . renderer . scrollCursorIntoView ( ) } , this . selectEnd = this . selectAllEnd = this . selectByWordsEnd = this . selectByLinesEnd = function ( ) { this . $clickSelection = null , this . editor . unsetStyle ( "ace_selecting" ) , this . editor . renderer . scroller . releaseCapture && this . editor . renderer . scroller . releaseCapture ( ) } , this . focusWait = function ( ) { var e = r ( this . mousedownEvent . x , this . mousedownEvent . y , this . x , this . y ) , t = Date . now ( ) ; ( e > 0 || t - this . mousedownEvent . time > this . $focusTimout ) && this . startSelect ( this . mousedownEvent . getDocumentPosition ( ) ) } , this . onDoubleClick = function ( e ) { var t = e . getDocumentPosition ( ) , i = this . editor , n = i . session , r = n . getBracketRange ( t ) ; r ? ( r . isEmpty ( ) && ( r . start . column -- , r . end . column ++ ) , this . setState ( "select" ) ) : ( r = i . selection . getWordRange ( t . row , t . column ) , this . setState ( "selectByWords" ) ) , this . $clickSelection = r , this . select ( ) } , this . onTripleClick = function ( e ) { var t = e . getDocumentPosition ( ) , i = this . editor ; this . setState ( "selectByLines" ) ; var n = i . getSelectionRange ( ) ; n . isMultiLine ( ) && n . contains ( t . row , t . column ) ? ( this . $clickSelection = i . selection . getLineRange ( n . start . row ) , this . $clickSelection . end = i . selection . getLineRange ( n . end . row ) . end ) : this . $clickSelection = i . selection . getLineRange ( t . row ) , this . select ( ) } , this . onQuadClick = function ( e ) { var t = this . editor ; t . selectAll ( ) , this . $clickSelection = t . getSelectionRange ( ) , this . setState ( "selectAll" ) } , this . onMouseWheel = function ( e ) { if ( ! e . getAccelKey ( ) ) { e . getShiftKey ( ) && e . wheelY && ! e . wheelX && ( e . wheelX = e . wheelY , e . wheelY = 0 ) ; var t = e . domEvent . timeStamp , i = t - ( this . $lastScrollTime || 0 ) , n = this . editor ; return n . renderer . isScrollableBy ( e . wheelX * e . speed , e . wheelY * e . speed ) || i < 200 ? ( this . $lastScrollTime = t , n . renderer . scrollBy ( e . wheelX * e . speed , e . wheelY * e . speed ) , e . stop ( ) ) : void 0 } } , this . onTouchMove = function ( e ) { var t = e . domEvent . timeStamp , i = t - ( this . $lastScrollTime || 0 ) , n = this . editor ; if ( n . renderer . isScrollableBy ( e . wheelX * e . speed , e . wheelY * e . speed ) || i < 200 ) return this . $lastScrollTime = t , n . renderer . scrollBy ( e . wheelX * e . speed , e . wheelY * e . speed ) , e . stop ( ) } } ) . call ( n . prototype ) , t . DefaultHandlers = n } ) , ace . define ( "ace/tooltip" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/dom" ] , function ( e , t , i ) { "use strict" ; function n ( e ) { this . isOpen = ! 1 , this . $element = null , this . $parentNode = e } var r = ( e ( "./lib/oop" ) , e ( "./lib/dom" ) ) ; ( function ( ) { this . $init = function ( ) { return this . $element = r . createElement ( "div" ) , this . $element . className = "ace_tooltip" , this . $element . style . display = "none" , this . $parentNode . appendChild ( th
2017-11-15 18:00:02 +08:00
Lu : "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A" , Lt : "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC" , Lm : "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F" , Lo : " 01 BB01C0 - 01 C3029405D0 - 05 EA05F0 - 05 F20621 - 063 F0641 - 064 A066E066F0671 - 06 D306D506EE06EF06FA - 06 FC06FF07100712 - 072 F074D - 07 A507B107CA - 07 EA0800 - 08150904 - 0939093 D09500958 - 096109720979 - 097 F0985 - 098 C098F09900993 - 09 A809AA - 09 B009B209B6 - 09 B909BD09CE09DC09DD09DF - 09E109 F009F10A05 - 0 A0A0A0F0A100A13 - 0 A280A2A - 0 A300A320A330A350A360A380A390A59 - 0 A5C0A5E0A72 - 0 A740A85 - 0 A8D0A8F - 0 A910A93 - 0 AA80AAA - 0 AB00AB20AB30AB5 - 0 AB90ABD0AD00AE00AE10B05 - 0B0 C0B0F0B100B13 - 0 B280B2A - 0 B300B320B330B35 - 0 B390B3D0B5C0B5D0B5F - 0 B610B710B830B85 - 0 B8A0B8E - 0 B900B92 - 0 B950B990B9A0B9C0B9E0B9F0BA30BA40BA8 - 0 BAA0BAE - 0 BB90BD00C05 - 0 C0C0C0E - 0 C100C12 - 0 C280C2A - 0 C330C35 - 0 C390C3D0C580C590C600C610C85 - 0 C8C0C8E - 0 C900C92 - 0 CA80CAA - 0 CB30CB5 - 0 CB90CBD0CDE0CE00CE10D05 - 0 D0C0D0E - 0 D100D12 - 0 D280D2A - 0 D390D3D0D600D610D7A - 0 D7F0D85 - 0 D960D9A - 0 DB10DB3 - 0 DBB0DBD0DC0 - 0 DC60E01 - 0E300 E320E330E40 - 0E450 E810E820E840E870E880E8A0E8D0E94 - 0E970 E99 - 0E9 F0EA1 - 0 EA30EA50EA70EAA0EAB0EAD - 0 EB00EB20EB30EBD0EC0 - 0 EC40EDC0EDD0F000F40 - 0 F470F49 - 0 F6C0F88 - 0 F8B1000 - 102 A103F1050 - 1055105 A - 105 D106110651066106E - 10701075 - 1081108E10 D0 - 10 FA1100 - 1248124 A - 124 D1250 - 12561258125 A - 125 D1260 - 1288128 A - 128 D1290 - 12 B012B2 - 12 B512B8 - 12 BE12C012C2 - 12 C512C8 - 12 D612D8 - 13101312 - 13151318 - 135 A1380 - 138 F13A0 - 13 F41401 - 166 C166F - 167 F1681 - 169 A16A0 - 16 EA1700 - 170 C170E - 17111720 - 17311740 - 1751
this . clearBreakpoint = function ( e ) { delete this . $breakpoints [ e ] , this . _signal ( "changeBreakpoint" , { } ) } , this . addMarker = function ( e , t , i , n ) { var r = this . $markerId ++ , o = { range : e , type : i || "line" , renderer : "function" == typeof i ? i : null , clazz : t , inFront : ! ! n , id : r } ; return n ? ( this . $frontMarkers [ r ] = o , this . _signal ( "changeFrontMarker" ) ) : ( this . $backMarkers [ r ] = o , this . _signal ( "changeBackMarker" ) ) , r } , this . addDynamicMarker = function ( e , t ) { if ( e . update ) { var i = this . $markerId ++ ; return e . id = i , e . inFront = ! ! t , t ? ( this . $frontMarkers [ i ] = e , this . _signal ( "changeFrontMarker" ) ) : ( this . $backMarkers [ i ] = e , this . _signal ( "changeBackMarker" ) ) , e } } , this . removeMarker = function ( e ) { var t = this . $frontMarkers [ e ] || this . $backMarkers [ e ] ; if ( t ) { var i = t . inFront ? this . $frontMarkers : this . $backMarkers ; t && ( delete i [ e ] , this . _signal ( t . inFront ? "changeFrontMarker" : "changeBackMarker" ) ) } } , this . getMarkers = function ( e ) { return e ? this . $frontMarkers : this . $backMarkers } , this . highlight = function ( e ) { if ( ! this . $searchHighlight ) { var t = new d ( null , "ace_selected-word" , "text" ) ; this . $searchHighlight = this . addDynamicMarker ( t ) } this . $searchHighlight . setRegexp ( e ) } , this . highlightLines = function ( e , t , i , n ) { "number" != typeof t && ( i = t , t = e ) , i || ( i = "ace_step" ) ; var r = new c ( e , 0 , t , 1 / 0 ) ; return r . id = this . addMarker ( r , i , "fullLine" , n ) , r } , this . setAnnotations = function ( e ) { this . $annotations = e , this . _signal ( "changeAnnotation" , { } ) } , this . getAnnotations = function ( ) { return this . $annotations || [ ] } , this . clearAnnotations = function ( ) { this . setAnnotations ( [ ] ) } , this . $detectNewLine = function ( e ) { var t = e . match ( /^.*?(\r?\n)/m ) ; this . $autoNewLine = t ? t [ 1 ] : "\n" } , this . getWordRange = function ( e , t ) { var i = this . getLine ( e ) , n = ! 1 ; if ( t > 0 && ( n = ! ! i . charAt ( t - 1 ) . match ( this . tokenRe ) ) , n || ( n = ! ! i . charAt ( t ) . match ( this . tokenRe ) ) , n ) var r = this . tokenRe ; else if ( /^\s+$/ . test ( i . slice ( t - 1 , t + 1 ) ) ) var r = /\s/ ; else var r = this . nonTokenRe ; var o = t ; if ( o > 0 ) { do { o -- } while ( o >= 0 && i . charAt ( o ) . match ( r ) ) ; o ++ } for ( var s = t ; s < i . length && i . charAt ( s ) . match ( r ) ; ) s ++ ; return new c ( e , o , e , s ) } , this . getAWordRange = function ( e , t ) { for ( var i = this . getWordRange ( e , t ) , n = this . getLine ( i . end . row ) ; n . charAt ( i . end . column ) . match ( /[ \t]/ ) ; ) i . end . column += 1 ; return i } , this . setNewLineMode = function ( e ) { this . doc . setNewLineMode ( e ) } , this . getNewLineMode = function ( ) { return this . doc . getNewLineMode ( ) } , this . setUseWorker = function ( e ) { this . setOption ( "useWorker" , e ) } , this . getUseWorker = function ( ) { return this . $useWorker } , this . onReloadTokenizer = function ( e ) { var t = e . data ; this . bgTokenizer . start ( t . first ) , this . _signal ( "tokenizerUpdate" , e ) } , this . $modes = { } , this . $mode = null , this . $modeId = null , this . setMode = function ( e , t ) { if ( e && "object" == typeof e ) { if ( e . getTokenizer ) return this . $onChangeMode ( e ) ; var i = e , n = i . path } else n = e || "ace/mode/text" ; if ( this . $modes [ "ace/mode/text" ] || ( this . $modes [ "ace/mode/text" ] = new l ) , this . $modes [ n ] && ! i ) return this . $onChangeMode ( this . $modes [ n ] ) , void ( t && t ( ) ) ; this . $modeId = n , o . loadModule ( [ "mode" , n ] , function ( e ) { if ( this . $modeId !== n ) return t && t ( ) ; this . $modes [ n ] && ! i ? this . $onChangeMode ( this . $modes [ n ] ) : e && e . Mode && ( e = new e . Mode ( i ) , i || ( this . $modes [ n ] = e , e . $id = n ) , this . $onChangeMode ( e ) ) , t && t ( ) } . bind ( this ) ) , this . $mode || this . $onChangeMode ( this . $modes [ "ace/mode/text" ] , ! 0 ) } , this . $onChangeMode = function ( e , t ) { if ( t || ( this . $modeId = e . $id ) , this . $mode !== e ) { this . $mode = e , this . $stopWorker ( ) , this . $useWorker && this . $startWorker ( ) ; var i = e . getTokenizer ( ) ; if ( void 0 !== i . addEventListener ) { var n = this . onReloadTokenizer . bind ( this ) ; i . addEventListener ( "update" , n ) } if ( this . bgTokenizer ) this . bgTokenizer . setTokenizer ( i ) ; else { this . bgTokenizer = new u ( i ) ; var r = this ; this . bgTokenizer . addEventListener ( "update" , function ( e ) { r . _signal ( "tokenizerUpdate" , e ) } ) } this . bgTokenizer . setDocument ( this . getDocument ( ) ) , this . tokenRe = e . tokenRe , this . nonTokenRe = e . nonTokenRe , t || ( e . attachToSession && e . attachToSession ( this ) , this . $options . wrapMethod . set . call ( this , this . $wrapMethod ) , this . $setFolding ( e . foldingRules ) , this . bgTokenizer . start ( 0 ) , this . _emit ( "changeMode" ) ) } } , this . $stopWorker = function ( ) { this . $worker && ( this . $worker . terminate ( ) , this . $worker = null ) } , this . $startWorker = function ( ) { try { this . $worker = this . $mode . createWorker ( this ) } catch ( e ) { o . warn ( "Could not load worker" , e ) , this . $worker = null } } , this . getMode = function ( ) { return this . $mode } , this . $scrollTo
this . session . remove ( this . getSelectionRange ( ) ) , this . clearSelection ( ) } , this . removeToLineEnd = function ( ) { this . selection . isEmpty ( ) && this . selection . selectLineEnd ( ) ; var e = this . getSelectionRange ( ) ; e . start . column == e . end . column && e . start . row == e . end . row && ( e . end . column = 0 , e . end . row ++ ) , this . session . remove ( e ) , this . clearSelection ( ) } , this . splitLine = function ( ) { this . selection . isEmpty ( ) || ( this . session . remove ( this . getSelectionRange ( ) ) , this . clearSelection ( ) ) ; var e = this . getCursorPosition ( ) ; this . insert ( "\n" ) , this . moveCursorToPosition ( e ) } , this . transposeLetters = function ( ) { if ( this . selection . isEmpty ( ) ) { var e = this . getCursorPosition ( ) , t = e . column ; if ( 0 !== t ) { var i , n , r = this . session . getLine ( e . row ) ; t < r . length ? ( i = r . charAt ( t ) + r . charAt ( t - 1 ) , n = new f ( e . row , t - 1 , e . row , t + 1 ) ) : ( i = r . charAt ( t - 1 ) + r . charAt ( t - 2 ) , n = new f ( e . row , t - 2 , e . row , t ) ) , this . session . replace ( n , i ) } } } , this . toLowerCase = function ( ) { var e = this . getSelectionRange ( ) ; this . selection . isEmpty ( ) && this . selection . selectWord ( ) ; var t = this . getSelectionRange ( ) , i = this . session . getTextRange ( t ) ; this . session . replace ( t , i . toLowerCase ( ) ) , this . selection . setSelectionRange ( e ) } , this . toUpperCase = function ( ) { var e = this . getSelectionRange ( ) ; this . selection . isEmpty ( ) && this . selection . selectWord ( ) ; var t = this . getSelectionRange ( ) , i = this . session . getTextRange ( t ) ; this . session . replace ( t , i . toUpperCase ( ) ) , this . selection . setSelectionRange ( e ) } , this . indent = function ( ) { var e = this . session , t = this . getSelectionRange ( ) ; if ( t . start . row < t . end . row ) { var i = this . $getSelectedRows ( ) ; return void e . indentRows ( i . first , i . last , "\t" ) } if ( t . start . column < t . end . column ) { if ( ! /^\s+$/ . test ( e . getTextRange ( t ) ) ) { var i = this . $getSelectedRows ( ) ; return void e . indentRows ( i . first , i . last , "\t" ) } } var n = e . getLine ( t . start . row ) , r = t . start , s = e . getTabSize ( ) , a = e . documentToScreenColumn ( r . row , r . column ) ; if ( this . session . getUseSoftTabs ( ) ) var l = s - a % s , c = o . stringRepeat ( " " , l ) ; else { for ( var l = a % s ; " " == n [ t . start . column - 1 ] && l ; ) t . start . column -- , l -- ; this . selection . setSelectionRange ( t ) , c = "\t" } return this . insert ( c ) } , this . blockIndent = function ( ) { var e = this . $getSelectedRows ( ) ; this . session . indentRows ( e . first , e . last , "\t" ) } , this . blockOutdent = function ( ) { var e = this . session . getSelection ( ) ; this . session . outdentRows ( e . getRange ( ) ) } , this . sortLines = function ( ) { var e = this . $getSelectedRows ( ) , t = this . session , i = [ ] ; for ( r = e . first ; r <= e . last ; r ++ ) i . push ( t . getLine ( r ) ) ; i . sort ( function ( e , t ) { return e . toLowerCase ( ) < t . toLowerCase ( ) ? - 1 : e . toLowerCase ( ) > t . toLowerCase ( ) ? 1 : 0 } ) ; for ( var n = new f ( 0 , 0 , 0 , 0 ) , r = e . first ; r <= e . last ; r ++ ) { var o = t . getLine ( r ) ; n . start . row = r , n . end . row = r , n . end . column = o . length , t . replace ( n , i [ r - e . first ] ) } } , this . toggleCommentLines = function ( ) { var e = this . session . getState ( this . getCursorPosition ( ) . row ) , t = this . $getSelectedRows ( ) ; this . session . getMode ( ) . toggleCommentLines ( e , this . session , t . first , t . last ) } , this . toggleBlockComment = function ( ) { var e = this . getCursorPosition ( ) , t = this . session . getState ( e . row ) , i = this . getSelectionRange ( ) ; this . session . getMode ( ) . toggleBlockComment ( t , this . session , i , e ) } , this . getNumberAt = function ( e , t ) { var i = /[\-]?[0-9]+(?:\.[0-9]+)?/g ; i . lastIndex = 0 ; for ( var n = this . session . getLine ( e ) ; i . lastIndex < t ; ) { var r = i . exec ( n ) ; if ( r . index <= t && r . index + r [ 0 ] . length >= t ) { return { value : r [ 0 ] , start : r . index , end : r . index + r [ 0 ] . length } } } return null } , this . modifyNumber = function ( e ) { var t = this . selection . getCursor ( ) . row , i = this . selection . getCursor ( ) . column , n = new f ( t , i - 1 , t , i ) , r = this . session . getTextRange ( n ) ; if ( ! isNaN ( parseFloat ( r ) ) && isFinite ( r ) ) { var o = this . getNumberAt ( t , i ) ; if ( o ) { var s = o . value . indexOf ( "." ) >= 0 ? o . start + o . value . indexOf ( "." ) + 1 : o . end , a = o . start + o . value . length - s , l = parseFloat ( o . value ) ; l *= Math . pow ( 10 , a ) , s !== o . end && i < s ? e *= Math . pow ( 10 , o . end - i - 1 ) : e *= Math . pow ( 10 , o . end - i ) , l += e , l /= Math . pow ( 10 , a ) ; var c = l . toFixed ( a ) , h = new f ( t , o . start , t , o . end ) ; this . session . replace ( h , c ) , this . moveCursorTo ( t , Math . max ( o . start + 1 , i + c . length - o . value . length ) ) } } } , this . removeLines = function ( ) { var e = this . $getSelectedRows ( ) ; this . session . removeFullLines ( e . first , e . last ) , this . clearSelection ( ) } , this . duplicateSelection = function ( ) { var e = this . selection , t = this . session , i = e . getRange ( ) , n = e . isBackwards ( ) ; if ( i . isEmpty ( ) ) { var r = i . start . row ; t . duplicateLines ( r , r ) } else { var o = n ? i . start : i . end , s = t . insert ( o , t . getTextRang
( this . session && this . session . getUseWrapMode ( ) && this . adjustWrapLimit ( ) || e ) && ( r |= this . CHANGE _FULL ) ) , o . $dirty = ! i || ! n , r && this . _signal ( "resize" , s ) , r } , this . onGutterResize = function ( ) { var e = this . $showGutter ? this . $gutter . offsetWidth : 0 ; e != this . gutterWidth && ( this . $changes |= this . $updateCachedSize ( ! 0 , e , this . $size . width , this . $size . height ) ) , this . session . getUseWrapMode ( ) && this . adjustWrapLimit ( ) ? this . $loop . schedule ( this . CHANGE _FULL ) : this . $size . $dirty ? this . $loop . schedule ( this . CHANGE _FULL ) : ( this . $computeLayerConfig ( ) , this . $loop . schedule ( this . CHANGE _MARKER ) ) } , this . adjustWrapLimit = function ( ) { var e = this . $size . scrollerWidth - 2 * this . $padding , t = Math . floor ( e / this . characterWidth ) ; return this . session . adjustWrapLimit ( t , this . $showPrintMargin && this . $printMarginColumn ) } , this . setAnimatedScroll = function ( e ) { this . setOption ( "animatedScroll" , e ) } , this . getAnimatedScroll = function ( ) { return this . $animatedScroll } , this . setShowInvisibles = function ( e ) { this . setOption ( "showInvisibles" , e ) } , this . getShowInvisibles = function ( ) { return this . getOption ( "showInvisibles" ) } , this . getDisplayIndentGuides = function ( ) { return this . getOption ( "displayIndentGuides" ) } , this . setDisplayIndentGuides = function ( e ) { this . setOption ( "displayIndentGuides" , e ) } , this . setShowPrintMargin = function ( e ) { this . setOption ( "showPrintMargin" , e ) } , this . getShowPrintMargin = function ( ) { return this . getOption ( "showPrintMargin" ) } , this . setPrintMarginColumn = function ( e ) { this . setOption ( "printMarginColumn" , e ) } , this . getPrintMarginColumn = function ( ) { return this . getOption ( "printMarginColumn" ) } , this . getShowGutter = function ( ) { return this . getOption ( "showGutter" ) } , this . setShowGutter = function ( e ) { return this . setOption ( "showGutter" , e ) } , this . getFadeFoldWidgets = function ( ) { return this . getOption ( "fadeFoldWidgets" ) } , this . setFadeFoldWidgets = function ( e ) { this . setOption ( "fadeFoldWidgets" , e ) } , this . setHighlightGutterLine = function ( e ) { this . setOption ( "highlightGutterLine" , e ) } , this . getHighlightGutterLine = function ( ) { return this . getOption ( "highlightGutterLine" ) } , this . $updateGutterLineHighlight = function ( ) { var e = this . $cursorLayer . $pixelPos , t = this . layerConfig . lineHeight ; if ( this . session . getUseWrapMode ( ) ) { var i = this . session . selection . getCursor ( ) ; i . column = 0 , e = this . $cursorLayer . getPixelPosition ( i , ! 0 ) , t *= this . session . getRowLength ( i . row ) } this . $gutterLineHighlight . style . top = e . top - this . layerConfig . offset + "px" , this . $gutterLineHighlight . style . height = t + "px" } , this . $updatePrintMargin = function ( ) { if ( this . $showPrintMargin || this . $printMarginEl ) { if ( ! this . $printMarginEl ) { var e = r . createElement ( "div" ) ; e . className = "ace_layer ace_print-margin-layer" , this . $printMarginEl = r . createElement ( "div" ) , this . $printMarginEl . className = "ace_print-margin" , e . appendChild ( this . $printMarginEl ) , this . content . insertBefore ( e , this . content . firstChild ) } var t = this . $printMarginEl . style ; t . left = this . characterWidth * this . $printMarginColumn + this . $padding + "px" , t . visibility = this . $showPrintMargin ? "visible" : "hidden" , this . session && - 1 == this . session . $wrap && this . adjustWrapLimit ( ) } } , this . getContainerElement = function ( ) { return this . container } , this . getMouseEventTarget = function ( ) { return this . scroller } , this . getTextAreaContainer = function ( ) { return this . container } , this . $moveTextAreaToCursor = function ( ) { if ( this . $keepTextAreaAtCursor ) { var e = this . layerConfig , t = this . $cursorLayer . $pixelPos . top , i = this . $cursorLayer . $pixelPos . left ; t -= e . offset ; var n = this . textarea . style , r = this . lineHeight ; if ( t < 0 || t > e . height - r ) return void ( n . top = n . left = "0" ) ; var o = this . characterWidth ; if ( this . $composition ) { var s = this . textarea . value . replace ( /^\x01+/ , "" ) ; o *= this . session . $getStringScreenWidth ( s ) [ 0 ] + 2 , r += 2 } i -= this . scrollLeft , i > this . $size . scrollerWidth - o && ( i = this . $size . scrollerWidth - o ) , i += this . gutterWidth , n . height = r + "px" , n . width = o + "px" , n . left = Math . min ( i , this . $size . scrollerWidth - o ) + "px" , n . top = Math . min ( t , this . $size . height - r ) + "px" } } , this . getFirstVisibleRow = function ( ) { return this . layerConfig . firstRow } , this . getFirstFullyVisibleRow = function ( ) { return this . layerConfig . firstRow + ( 0 === this . layerConfig . offset ? 0 : 1 ) } , this . getLastFullyVisibleRow = function ( ) { var e = this . layerConfig , t = e . lastRow ; return this . session . documentToScreenRow ( t , 0 ) * e . lineHeight - this . session . getScrollTop ( ) > e . height - e . lin
regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]\\s*(?=:)' } , { token : "string" , regex : '"' , next : "string" } , { token : "constant.numeric" , regex : "0[xX][0-9a-fA-F]+\\b" } , { token : "constant.numeric" , regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" } , { token : "constant.language.boolean" , regex : "(?:true|false)\\b" } , { token : "invalid.illegal" , regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" } , { token : "invalid.illegal" , regex : "\\/\\/.*$" } , { token : "paren.lparen" , regex : "[[({]" } , { token : "paren.rparen" , regex : "[\\])}]" } , { token : "text" , regex : "\\s+" } ] , string : [ { token : "constant.language.escape" , regex : /\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|["\\\/bfnrt])/ } , { token : "string" , regex : '[^"\\\\]+' } , { token : "string" , regex : '"' , next : "start" } , { token : "string" , regex : "" , next : "start" } ] } } ; n . inherits ( o , r ) , t . JsonHighlightRules = o } ) , ace . define ( "ace/mode/matching_brace_outdent" , [ "require" , "exports" , "module" , "ace/range" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../range" ) . Range , r = function ( ) { } ; ( function ( ) { this . checkOutdent = function ( e , t ) { return ! ! /^\s+$/ . test ( e ) && /^\s*\}/ . test ( t ) } , this . autoOutdent = function ( e , t ) { var i = e . getLine ( t ) , r = i . match ( /^(\s*\})/ ) ; if ( ! r ) return 0 ; var o = r [ 1 ] . length , s = e . findMatchingBracket ( { row : t , column : o } ) ; if ( ! s || s . row == t ) return 0 ; var a = this . $getIndent ( e . getLine ( s . row ) ) ; e . replace ( new n ( t , 0 , t , o - 1 ) , a ) } , this . $getIndent = function ( e ) { return e . match ( /^\s*/ ) [ 0 ] } } ) . call ( r . prototype ) , t . MatchingBraceOutdent = r } ) , ace . define ( "ace/mode/folding/cstyle" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/range" , "ace/mode/folding/fold_mode" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../../lib/oop" ) , r = e ( "../../range" ) . Range , o = e ( "./fold_mode" ) . FoldMode , s = t . FoldMode = function ( e ) { e && ( this . foldingStartMarker = new RegExp ( this . foldingStartMarker . source . replace ( /\|[^|]*?$/ , "|" + e . start ) ) , this . foldingStopMarker = new RegExp ( this . foldingStopMarker . source . replace ( /\|[^|]*?$/ , "|" + e . end ) ) ) } ; n . inherits ( s , o ) , function ( ) { this . foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/ , this . foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/ , this . singleLineBlockCommentRe = /^\s*(\/\*).*\*\/\s*$/ , this . tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/ , this . startRegionRe = /^\s*(\/\*|\/\/)#?region\b/ , this . _getFoldWidgetBase = this . getFoldWidget , this . getFoldWidget = function ( e , t , i ) { var n = e . getLine ( i ) ; if ( this . singleLineBlockCommentRe . test ( n ) && ! this . startRegionRe . test ( n ) && ! this . tripleStarBlockCommentRe . test ( n ) ) return "" ; var r = this . _getFoldWidgetBase ( e , t , i ) ; return ! r && this . startRegionRe . test ( n ) ? "start" : r } , this . getFoldWidgetRange = function ( e , t , i , n ) { var r = e . getLine ( i ) ; if ( this . startRegionRe . test ( r ) ) return this . getCommentRegionBlock ( e , r , i ) ; var o = r . match ( this . foldingStartMarker ) ; if ( o ) { var s = o . index ; if ( o [ 1 ] ) return this . openingBracketBlock ( e , o [ 1 ] , i , s ) ; var a = e . getCommentFoldRange ( i , s + o [ 0 ] . length , 1 ) ; return a && ! a . isMultiLine ( ) && ( n ? a = this . getSectionRange ( e , i ) : "all" != t && ( a = null ) ) , a } if ( "markbegin" !== t ) { var o = r . match ( this . foldingStopMarker ) ; if ( o ) { var s = o . index + o [ 0 ] . length ; return o [ 1 ] ? this . closingBracketBlock ( e , o [ 1 ] , i , s ) : e . getCommentFoldRange ( i , s , - 1 ) } } } , this . getSectionRange = function ( e , t ) { var i = e . getLine ( t ) , n = i . search ( /\S/ ) , o = t , s = i . length ; t += 1 ; for ( var a = t , l = e . getLength ( ) ; ++ t < l ; ) { i = e . getLine ( t ) ; var c = i . search ( /\S/ ) ; if ( - 1 !== c ) { if ( n > c ) break ; var h = this . getFoldWidgetRange ( e , "all" , t ) ; if ( h ) { if ( h . start . row <= o ) break ; if ( h . isMultiLine ( ) ) t = h . end . row ; else if ( n == c ) break } a = t } } return new r ( o , s , a , e . getLine ( a ) . length ) } , this . getCommentRegionBlock = function ( e , t , i ) { for ( var n = t . search ( /\s*$/ ) , o = e . getLength ( ) , s = i , a = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/ , l = 1 ; ++ i < o ; ) { t = e . getLine ( i ) ; var c = a . exec ( t ) ; if ( c && ( c [ 1 ] ? l -- : l ++ , ! l ) ) break } var h = i ; if ( h > s ) return new r ( s , n , h , t . length ) } } . call ( s . prototype ) } ) , ace . define ( "ace/mode/json" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/mode/text" , "ace/mode/json_highlight_rules" , "ace/mode/matching_brace_outdent" , "ace/mode/behaviour/cstyle" , "ace/mode/folding/cstyle" , "ace/worker/worker_client" ] , function ( e , t , n ) { "use strict" ; var r = e ( "../lib/oop" ) , o = e ( "./text" ) . Mode , s = e ( "./json_highlight_rules" ) . JsonHighlightRules , a = e ( "./matching_brace_outdent" ) . MatchingBraceOutdent , l = e ( "./behaviour/cstyle" ) . CstyleBehaviour , c = e ( "./folding/cstyle" ) . FoldMode , h = e ( "../worker/worker_client" )
2017-07-04 01:23:32 +08:00
//# sourceMappingURL=jsoneditor.map