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-04-06 15:25:05 +08:00
* @ version 5.3 . 0
* @ date 2016 - 04 - 06
2013-05-04 05:26:09 +08:00
* /
2016-04-06 15:25:05 +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" , "sortObjectKeys" ] ; Object . keys ( t ) . forEach ( function ( e ) { - 1 === o . indexOf ( e ) && console . warn ( 'Unknown option "' + e + '". This option will be ignored' ) } ) } arguments . length && this . _create ( e , t , i ) } var r ; try { r = i ( 4 ) } 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 . destroy = 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 . destroy ( ) , 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 ( 6 ) , r = i ( 7 ) , o = i ( 8 ) , s = i ( 9 ) , a = i ( 10 ) , l = i ( 5 ) , c = i ( 3 ) , h = { } ; h . create = function ( e , t ) { if ( ! e ) throw new Error ( "No container element provided." ) ; this . contai
this . RULES = d ( ) , this . validate = t , this . compile = m , this . addSchema = g , this . addMetaSchema = v , this . validateSchema = w , this . getSchema = A , this . removeSchema = C , this . addFormat = x , this . errorsText = F , this . _addSchema = E , this . _compile = b , S ( ) , this . opts . formats && $ ( ) , "property" == this . opts . errorDataPath && ( this . opts . _errorDataPathProperty = ! 0 ) , this . opts . v5 && u . enable ( this ) , this . opts . loopRequired = this . opts . loopRequired || 1 / 0 } var o = i ( 22 ) , s = i ( 13 ) , a = i ( 14 ) , l = i ( 15 ) , c = i ( 24 ) , h = i ( 16 ) , d = i ( 17 ) , u = i ( 18 ) ; e . exports = r , r . prototype . compileAsync = i ( 19 ) , r . prototype . addKeyword = i ( 20 ) ; var f = "http://json-schema.org/draft-04/schema" , p = /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i } , function ( e , t , i ) { function n ( e , t , i , n ) { for ( var o = { code : { text : "Code" , title : "Switch to code highlighter" , click : function ( ) { n ( "code" ) } } , form : { text : "Form" , title : "Switch to form editor" , click : function ( ) { n ( "form" ) } } , text : { text : "Text" , title : "Switch to plain text editor" , click : function ( ) { n ( "text" ) } } , tree : { text : "Tree" , title : "Switch to tree editor" , click : function ( ) { n ( "tree" ) } } , view : { text : "View" , title : "Switch to tree view" , click : function ( ) { n ( "view" ) } } } , s = [ ] , a = 0 ; a < t . length ; a ++ ) { var l = t [ a ] , c = o [ l ] ; if ( ! c ) throw new Error ( 'Unknown mode "' + l + '"' ) ; c . className = "jsoneditor-type-modes" + ( i == l ? " jsoneditor-selected" : "" ) , s . push ( c ) } var h = o [ i ] ; if ( ! h ) throw new Error ( 'Unknown mode "' + i + '"' ) ; var d = h . text , u = document . createElement ( "button" ) ; u . className = "jsoneditor-modes jsoneditor-separator" , u . innerHTML = d + " ▾" , u . title = "Switch editor mode" , u . onclick = function ( ) { var e = new r ( s ) ; e . show ( u ) } ; var f = document . createElement ( "div" ) ; f . className = "jsoneditor-modes" , f . style . position = "relative" , f . appendChild ( u ) , e . appendChild ( f ) , this . dom = { container : e , box : u , frame : f } } var r = i ( 9 ) ; n . prototype . focus = function ( ) { this . dom . box . focus ( ) } , n . prototype . destroy = function ( ) { this . dom && this . dom . frame && this . dom . frame . parentNode && this . dom . frame . parentNode . removeChild ( this . dom . frame ) , this . dom = null } , e . exports = n } , function ( e , t , i ) { function n ( ) { this . locked = ! 1 } n . prototype . highlight = function ( e ) { this . locked || ( this . node != e && ( this . node && this . node . setHighlight ( ! 1 ) , this . node = e , this . node . setHighlight ( ! 0 ) ) , this . _cancelUnhighlight ( ) ) } , n . 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 ) ) } } , n . prototype . _cancelUnhighlight = function ( ) { this . unhighlightTimer && ( clearTimeout ( this . unhighlightTimer ) , this . unhighlightTimer = void 0 ) } , n . prototype . lock = function ( ) { this . locked = ! 0 } , n . prototype . unlock = function ( ) { this . locked = ! 1 } , e . exports = n } , function ( e , t , i ) { 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 : function ( e ) { e . node . updateField ( e . newValue ) } } , editValue : { undo : function ( e ) { e . node . updateValue ( e . oldValue ) } , redo : function ( e ) { e . node . updateValue ( e . newValue ) } } , changeType : { undo : function ( e ) { e . node . changeType ( e . oldType ) } , redo : function ( e ) { e . node . changeType ( e . newType ) } } , appendNodes : { undo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . removeChild ( t ) } ) } , redo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . appendChild ( t ) } ) } } , insertBeforeNodes : { undo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . removeChild ( t ) } ) } , redo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . insertBefore ( t , e . beforeNode ) } ) } } , insertAfterNodes : { undo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . removeChild ( t ) } ) } , redo : function ( e ) { var t = e . afterNode ; e . nodes . forEach ( function ( i ) { e . parent . insertAfter ( e . node , t ) , t = i } ) } } , removeNodes : { undo : function ( e ) { var t = e . parent , i = t . childs [ e . index ] || t . append ; e . nodes . forEach ( function ( e ) { t . insertBefore ( e , i ) } ) } , redo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . removeChild ( t ) } ) } } , duplicateNodes : { undo : function ( e ) { e . nodes . forEach ( function ( t ) { e . parent . removeChild ( t ) } ) } , redo : function ( e ) { var t = e . afterNode ; e . nodes . forEach ( function ( i ) { e . parent . insertAfter ( i , t ) , t = i } ) } } , moveNodes : { undo : function ( e ) { e . nodes . forEach ( function ( t ) { e . oldBeforeNode . parent . moveBefore ( t , e . oldBeforeNode ) } ) } , redo : function ( e ) { e . nodes . forEach ( function ( t ) { e . newBeforeNode . parent . moveBefore ( t , e . newB
A . startAutoScroll ( y ) , t . preventDefault ( ) } } , n . onDragEnd = function ( e , t ) { if ( ! Array . isArray ( e ) ) return n . onDrag ( [ e ] , t ) ; if ( 0 !== e . length ) { var i = e [ 0 ] , r = i . editor , o = i . parent , s = o . childs . indexOf ( i ) , l = o . childs [ s + e . length ] || o . append ; e [ 0 ] && e [ 0 ] . dom . menu . focus ( ) ; var c = { nodes : e , oldSelection : r . drag . oldSelection , newSelection : r . getSelection ( ) , oldBeforeNode : r . drag . oldBeforeNode , newBeforeNode : l } ; c . oldBeforeNode != c . newBeforeNode && r . _onAction ( "moveNodes" , c ) , document . body . style . cursor = r . drag . oldCursor , r . highlighter . unlock ( ) , e . forEach ( function ( e ) { t . target !== e . dom . drag && t . target !== e . dom . menu && r . highlighter . unhighlight ( ) } ) , delete r . drag , r . mousemove && ( a . removeEventListener ( window , "mousemove" , r . mousemove ) , delete r . mousemove ) , r . mouseup && ( a . removeEventListener ( window , "mouseup" , r . mouseup ) , delete r . mouseup ) , r . stopAutoScroll ( ) , t . preventDefault ( ) } } , n . prototype . _isChildOf = function ( e ) { for ( var t = this . parent ; t ; ) { if ( t == e ) return ! 0 ; t = t . parent } return ! 1 } , n . prototype . _createDomField = function ( ) { return document . createElement ( "div" ) } , n . prototype . setHighlight = function ( e ) { this . dom . tr && ( e ? a . addClassName ( this . dom . tr , "jsoneditor-highlight" ) : a . removeClassName ( this . dom . tr , "jsoneditor-highlight" ) , this . append && this . append . setHighlight ( e ) , this . childs && this . childs . forEach ( function ( t ) { t . setHighlight ( e ) } ) ) } , n . prototype . setSelected = function ( e , t ) { this . selected = e , this . dom . tr && ( e ? a . addClassName ( this . dom . tr , "jsoneditor-selected" ) : a . removeClassName ( this . dom . tr , "jsoneditor-selected" ) , t ? a . addClassName ( this . dom . tr , "jsoneditor-first" ) : a . removeClassName ( this . dom . tr , "jsoneditor-first" ) , this . append && this . append . setSelected ( e ) , this . childs && this . childs . forEach ( function ( t ) { t . setSelected ( e ) } ) ) } , n . prototype . updateValue = function ( e ) { this . value = e , this . updateDom ( ) } , n . prototype . updateField = function ( e ) { this . field = e , this . updateDom ( ) } , n . prototype . updateDom = function ( e ) { var t = this . dom . tree ; t && ( t . style . marginLeft = 24 * this . getLevel ( ) + "px" ) ; var i = this . dom . field ; if ( i ) { this . fieldEditable ? ( i . contentEditable = this . editable . field , i . spellcheck = ! 1 , i . className = "jsoneditor-field" ) : i . className = "jsoneditor-readonly" ; var n ; n = void 0 != this . index ? this . index : void 0 != this . field ? this . field : this . _hasChilds ( ) ? this . type : "" , i . innerHTML = this . _escapeHTML ( n ) } var r = this . dom . value ; if ( r ) { var o = this . childs ? this . childs . length : 0 ; "array" == this . type ? ( r . innerHTML = "[" + o + "]" , a . addClassName ( this . dom . tr , "jsoneditor-expandable" ) ) : "object" == this . type ? ( r . innerHTML = "{" + o + "}" , a . addClassName ( this . dom . tr , "jsoneditor-expandable" ) ) : ( r . innerHTML = this . _escapeHTML ( this . value ) , a . removeClassName ( this . dom . tr , "jsoneditor-expandable" ) ) } this . _updateDomField ( ) , this . _updateDomValue ( ) , e && e . updateIndexes === ! 0 && this . _updateDomIndexes ( ) , e && e . recurse === ! 0 && this . childs && this . childs . forEach ( function ( t ) { t . updateDom ( e ) } ) , this . append && this . append . updateDom ( ) } , n . prototype . _updateDomIndexes = function ( ) { var e = this . dom . value , t = this . childs ; e && t && ( "array" == this . type ? t . forEach ( function ( e , t ) { e . index = t ; var i = e . dom . field ; i && ( i . innerHTML = t ) } ) : "object" == this . type && t . forEach ( function ( e ) { void 0 != e . index && ( delete e . index , void 0 == e . field && ( e . field = "" ) ) } ) ) } , n . prototype . _createDomValue = function ( ) { var e ; return "array" == this . type ? ( e = document . createElement ( "div" ) , e . innerHTML = "[...]" ) : "object" == this . type ? ( e = document . createElement ( "div" ) , e . innerHTML = "{...}" ) : ! this . editable . value && a . isUrl ( this . value ) ? ( e = document . createElement ( "a" ) , e . href = this . value , e . target = "_blank" , e . innerHTML = this . _escapeHTML ( this . value ) ) : ( e = document . createElement ( "div" ) , e . contentEditable = this . editable . value , e . spellcheck = ! 1 , e . innerHTML = this . _escapeHTML ( this . value ) ) , e } , n . prototype . _createDomExpandButton = function ( ) { var e = document . createElement ( "button" ) ; return this . _hasChilds ( ) ? ( e . className = this . expanded ? "jsoneditor-expanded" : "jsoneditor-collapsed" , e . title = "Click to expand/collapse this field (Ctrl+E). \nCtrl+Click to expand/collapse including all childs." ) : ( e . className = "jsoneditor-invisible" , e . title = "" ) , e } , n . prototype . _createDomTree = function ( ) { var e = this . dom , t = document . createElement ( "table" ) , i = document . createElement ( "tbody" ) ; t . style . borderCollapse = "collapse" , t . className = "jsoneditor-values" , t . appendChild ( i ) ; var n = document . createElement ( "tr"
} function o ( e , t ) { var i = e . match ( g ) ; 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 ( g ) , t = t . match ( g ) , 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 ( 31 ) , p = /^\d\d\d\d-(\d\d)-(\d\d)$/ , m = [ 0 , 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ] , g = /^(\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-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i , regex : c , uuid : A , "json-pointer" : y , "relative-json-pointer" : C } , n . full = { date : r , time : o , "date-time" : s , uri : l , email : / ^ [ a - z 0 - 9 ! # $ % & ' * + \ / = ? ^ _ ` { | } ~ - ] + ( ? : \ . [ a - z 0 - 9 ! # $ % & ' ' * + \ / = ? ^ _ `
return ! 1 } , t . importCssString = function ( e , i , n ) { if ( n = n || document , i && t . hasCssString ( i , n ) ) return null ; var r ; i && ( e += "\n/*# sourceURL=ace/css/" + i + " */" ) , n . createStyleSheet ? ( r = n . createStyleSheet ( ) , r . cssText = e , i && ( r . owningElement . id = i ) ) : ( r = t . createElement ( "style" ) , r . appendChild ( n . createTextNode ( e ) ) , i && ( r . id = i ) , t . getDocumentHead ( n ) . appendChild ( r ) ) } , t . importCssStylsheet = function ( e , i ) { if ( i . createStyleSheet ) i . createStyleSheet ( e ) ; else { var n = t . createElement ( "link" ) ; n . rel = "stylesheet" , n . href = e , t . getDocumentHead ( i ) . appendChild ( n ) } } , t . getInnerWidth = function ( e ) { return parseInt ( t . computedStyle ( e , "paddingLeft" ) , 10 ) + parseInt ( t . computedStyle ( e , "paddingRight" ) , 10 ) + e . clientWidth } , t . getInnerHeight = function ( e ) { return parseInt ( t . computedStyle ( e , "paddingTop" ) , 10 ) + parseInt ( t . computedStyle ( e , "paddingBottom" ) , 10 ) + e . clientHeight } , t . scrollbarWidth = function ( e ) { var i = t . createElement ( "ace_inner" ) ; i . style . width = "100%" , i . style . minWidth = "0px" , i . style . height = "200px" , i . style . display = "block" ; var n = t . createElement ( "ace_outer" ) , r = n . style ; r . position = "absolute" , r . left = "-10000px" , r . overflow = "hidden" , r . width = "200px" , r . minWidth = "0px" , r . height = "150px" , r . display = "block" , n . appendChild ( i ) ; var o = e . documentElement ; o . appendChild ( n ) ; var s = i . offsetWidth ; r . overflow = "scroll" ; var a = i . offsetWidth ; return s == a && ( a = n . clientWidth ) , o . removeChild ( n ) , s - a } , "undefined" == typeof document ? void ( t . importCssString = function ( ) { } ) : ( void 0 !== window . pageYOffset ? ( t . getPageScrollTop = function ( ) { return window . pageYOffset } , t . getPageScrollLeft = function ( ) { return window . pageXOffset } ) : ( t . getPageScrollTop = function ( ) { return document . body . scrollTop } , 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 . ente
S = ! 1 , this . setState ( null ) , ! g . getReadOnly ( ) ) { var t = e . dataTransfer . dropEffect ; x || "move" != t || g . session . remove ( g . getSelectionRange ( ) ) , g . renderer . $cursorLayer . setBlinking ( ! 0 ) } this . editor . unsetStyle ( "ace_dragging" ) , this . editor . renderer . setCursorStyle ( "" ) } , this . onDragEnter = function ( e ) { return ! g . getReadOnly ( ) && p ( e . dataTransfer ) ? ( y = e . clientX , C = e . clientY , A || d ( ) , _ ++ , e . dataTransfer . dropEffect = x = m ( e ) , s . preventDefault ( e ) ) : void 0 } , this . onDragOver = function ( e ) { return ! g . getReadOnly ( ) && p ( e . dataTransfer ) ? ( y = e . clientX , C = e . clientY , A || ( d ( ) , _ ++ ) , null !== L && ( L = null ) , e . dataTransfer . dropEffect = x = m ( e ) , s . preventDefault ( e ) ) : void 0 } , this . onDragLeave = function ( e ) { return _ -- , 0 >= _ && A ? ( u ( ) , x = null , s . preventDefault ( e ) ) : void 0 } , this . onDrop = function ( e ) { if ( F ) { var t = e . dataTransfer ; if ( S ) switch ( x ) { case "move" : b = b . contains ( F . row , F . column ) ? { start : F , end : F } : g . moveText ( b , F ) ; break ; case "copy" : b = g . moveText ( b , F , ! 0 ) } else { var i = t . getData ( "Text" ) ; b = { start : F , end : g . session . insert ( F , i ) } , g . focus ( ) , x = null } return u ( ) , s . preventDefault ( e ) } } , s . addListener ( B , "dragstart" , this . onDragStart . bind ( e ) ) , s . addListener ( B , "dragend" , this . onDragEnd . bind ( e ) ) , s . addListener ( B , "dragenter" , this . onDragEnter . bind ( e ) ) , s . addListener ( B , "dragover" , this . onDragOver . bind ( e ) ) , s . addListener ( B , "dragleave" , this . onDragLeave . bind ( e ) ) , s . addListener ( B , "drop" , this . onDrop . bind ( e ) ) ; var L = null } function r ( e , t , i , n ) { return Math . sqrt ( Math . pow ( i - e , 2 ) + Math . pow ( n - t , 2 ) ) } var o = e ( "../lib/dom" ) , s = e ( "../lib/event" ) , a = e ( "../lib/useragent" ) , l = 200 , c = 200 , h = 5 ; ( function ( ) { this . dragWait = function ( ) { var e = Date . now ( ) - this . mousedownEvent . time ; e > this . editor . getDragDelay ( ) && this . startDrag ( ) } , 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 . _defaultHandl
c . caseInsensitive && ( s = "gi" ) , null != c . regex ) { c . regex instanceof RegExp && ( c . regex = c . regex . toString ( ) . slice ( 1 , - 1 ) ) ; var h = c . regex , d = new RegExp ( "(?:(" + h + ")|(.))" ) . exec ( "a" ) . length - 2 ; Array . isArray ( c . token ) ? 1 == c . token . length || 1 == d ? c . token = c . token [ 0 ] : d - 1 != c . token . length ? ( this . reportError ( "number of classes and regexp groups doesn't match" , { rule : c , groupCount : d - 1 } ) , c . token = c . token [ 0 ] ) : ( c . tokenArray = c . token , c . token = null , c . onMatch = this . $arrayTokens ) : "function" != typeof c . token || c . onMatch || ( d > 1 ? c . onMatch = this . $applyToken : c . onMatch = c . token ) , d > 1 && ( /\\\d/ . test ( c . regex ) ? h = c . regex . replace ( /\\([0-9]+)/g , function ( e , t ) { return "\\" + ( parseInt ( t , 10 ) + r + 1 ) } ) : ( d = 1 , h = this . removeCapturingGroups ( c . regex ) ) , c . splitRegex || "string" == typeof c . token || a . push ( c ) ) , o [ r ] = l , r += d , n . push ( h ) , c . onMatch || ( c . onMatch = null ) } } n . length || ( o [ 0 ] = 0 , n . push ( "$" ) ) , a . forEach ( function ( e ) { e . splitRegex = this . createSplitterRegexp ( e . regex , s ) } , this ) , this . regExps [ t ] = new RegExp ( "(" + n . join ( ")|(" ) + ")|($)" , s ) } } ; ( function ( ) { this . $setMaxTokenCount = function ( e ) { r = 0 | e } , this . $applyToken = function ( e ) { var t = this . splitRegex . exec ( e ) . slice ( 1 ) , i = this . token . apply ( this , t ) ; if ( "string" == typeof i ) return [ { type : i , value : e } ] ; for ( var n = [ ] , r = 0 , o = i . length ; o > r ; r ++ ) t [ r ] && ( n [ n . length ] = { type : i [ r ] , value : t [ r ] } ) ; return n } , this . $arrayTokens = function ( e ) { if ( ! e ) return [ ] ; var t = this . splitRegex . exec ( e ) ; if ( ! t ) return "text" ; for ( var i = [ ] , n = this . tokenArray , r = 0 , o = n . length ; o > r ; r ++ ) t [ r + 1 ] && ( i [ i . length ] = { type : n [ r ] , value : t [ r + 1 ] } ) ; return i } , this . removeCapturingGroups = function ( e ) { var t = e . replace ( /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g , function ( e , t ) { return t ? "(?:" : e } ) ; 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 , m = l [ 0 ] , g = a . lastIndex ; if ( g - m . length > h ) { var v = e . substring ( h , g - m . 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 ( m , 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 = g , a = this . regExps [ n ] , a . lastIndex = g ) ; break } if ( m ) if ( "string" == typeof f ) p && p . merge === ! 1 || u . type !== f ? ( u . type && c . push ( u ) , u = { type : f , value : m } ) : u . value += m ; 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 = g , 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
2016-03-21 01:19:13 +08:00
} ) } ) , ace . define ( "ace/token_iterator" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; var n = function ( e , t , i ) { this . $session = e , this . $row = t , this . $rowTokens = e . getTokens ( t ) ; var n = e . getTokenAt ( t , i ) ; this . $tokenIndex = n ? n . index : - 1 } ; ( function ( ) { this . stepBackward = function ( ) { for ( this . $tokenIndex -= 1 ; this . $tokenIndex < 0 ; ) { if ( this . $row -= 1 , this . $row < 0 ) return this . $row = 0 , null ; this . $rowTokens = this . $session . getTokens ( this . $row ) , this . $tokenIndex = this . $rowTokens . length - 1 } return this . $rowTokens [ this . $tokenIndex ] } , this . stepForward = function ( ) { this . $tokenIndex += 1 ; for ( var e ; this . $tokenIndex >= this . $rowTokens . length ; ) { if ( this . $row += 1 , e || ( e = this . $session . getLength ( ) ) , this . $row >= e ) return this . $row = e - 1 , null ; this . $rowTokens = this . $session . getTokens ( this . $row ) , this . $tokenIndex = 0 } return this . $rowTokens [ this . $tokenIndex ] } , this . getCurrentToken = function ( ) { return this . $rowTokens [ this . $tokenIndex ] } , this . getCurrentTokenRow = function ( ) { return this . $row } , this . getCurrentTokenColumn = function ( ) { var e = this . $rowTokens , t = this . $tokenIndex , i = e [ t ] . start ; if ( void 0 !== i ) return i ; for ( i = 0 ; t > 0 ; ) t -= 1 , i += e [ t ] . value . length ; return i } , this . getCurrentTokenPosition = function ( ) { 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 ) } } , m = f + " " , g = function ( e , t ) { ( ! s || /\S/ . test ( e ) ) && ( w ( e , c , c ) ? o . insertInLine ( { row : t , column : c } , m ) : 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*$" ) , g = 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 : g ) } , 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 .
} ) } , this . toggleFold = function ( e ) { var t , i , n = this . selection , r = n . getRange ( ) ; if ( r . isEmpty ( ) ) { var o = r . start ; if ( t = this . getFoldAt ( o . row , o . column ) ) return void this . expandFold ( t ) ; ( i = this . findMatchingBracket ( o ) ) ? 1 == r . comparePoint ( i ) ? r . end = i : ( r . start = i , r . start . column ++ , r . end . column -- ) : ( i = this . findMatchingBracket ( { row : o . row , column : o . column + 1 } ) ) ? ( 1 == r . comparePoint ( i ) ? r . end = i : r . start = i , r . start . column ++ ) : r = this . getCommentFoldRange ( o . row , o . column ) || r } else { var s = this . getFoldsInRange ( r ) ; if ( e && s . length ) return void this . expandFolds ( s ) ; 1 == s . length && ( t = s [ 0 ] ) } if ( t || ( t = this . getFoldAt ( r . start . row , r . start . column ) ) , t && t . range . toString ( ) == r . toString ( ) ) return void this . expandFold ( t ) ; var a = "..." ; if ( ! r . isMultiLine ( ) ) { if ( a = this . getTextRange ( r ) , a . length < 4 ) return ; a = a . trim ( ) . substring ( 0 , 2 ) + ".." } this . addFold ( a , r ) } , this . getCommentFoldRange = function ( e , t , i ) { var n = new a ( this , e , t ) , o = n . getCurrentToken ( ) ; if ( o && /^comment|string/ . test ( o . type ) ) { var s = new r , l = new RegExp ( o . type . replace ( /\..*/ , "\\." ) ) ; if ( 1 != i ) { do o = n . stepBackward ( ) ; while ( o && l . test ( o . type ) ) ; n . stepForward ( ) } if ( s . start . row = n . getCurrentTokenRow ( ) , s . start . column = n . getCurrentTokenColumn ( ) + 2 , n = new a ( this , e , t ) , - 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 )
this . setWrapLimitRange ( t , t ) , this . setUseWrapMode ( ! 0 ) } else this . setUseWrapMode ( ! 1 ) } , get : function ( ) { return this . getUseWrapMode ( ) ? - 1 == this . $wrap ? "printMargin" : this . getWrapLimitRange ( ) . min ? this . $wrap : "free" : "off" } , handlesSet : ! 0 } , wrapMethod : { set : function ( e ) { e = "auto" == e ? "text" != this . $mode . type : "text" != e , e != this . $wrapAsCode && ( this . $wrapAsCode = e , this . $useWrapMode && ( this . $modified = ! 0 , this . $resetRowCache ( 0 ) , this . $updateWrapData ( 0 , this . getLength ( ) - 1 ) ) ) } , initialValue : "auto" } , indentedSoftWrap : { initialValue : ! 0 } , firstLineNumber : { set : function ( ) { this . _signal ( "changeBreakpoint" ) } , initialValue : 1 } , useWorker : { set : function ( e ) { this . $useWorker = e , this . $stopWorker ( ) , e && this . $startWorker ( ) } , initialValue : ! 0 } , useSoftTabs : { initialValue : ! 0 } , tabSize : { set : function ( e ) { isNaN ( e ) || this . $tabSize === e || ( this . $modified = ! 0 , this . $rowLengthCache = [ ] , this . $tabSize = e , this . _signal ( "changeTabSize" ) ) } , initialValue : 4 , handlesSet : ! 0 } , overwrite : { set : function ( e ) { this . _signal ( "changeOverwrite" ) } , initialValue : ! 1 } , newLineMode : { set : function ( e ) { this . doc . setNewLineMode ( e ) } , get : function ( ) { return this . doc . getNewLineMode ( ) } , handlesSet : ! 0 } , mode : { set : function ( e ) { this . setMode ( e ) } , 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 ] , m = f . length - f . match ( a [ 0 ] ) [ 0 ] . length , g = p . match ( a [ c - 1 ] ) [ 0 ] . length ; l && l . end . row === d && l . end . column > m || ( s . push ( l = new o ( d , m , d + c - 1 , g ) ) , 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 . $isMu
this . $onChangeBackMarker = this . onChangeBackMarker . bind ( this ) , this . session . addEventListener ( "changeBackMarker" , this . $onChangeBackMarker ) , this . $onChangeBreakpoint = this . onChangeBreakpoint . bind ( this ) , this . session . addEventListener ( "changeBreakpoint" , this . $onChangeBreakpoint ) , this . $onChangeAnnotation = this . onChangeAnnotation . bind ( this ) , this . session . addEventListener ( "changeAnnotation" , this . $onChangeAnnotation ) , this . $onCursorChange = this . onCursorChange . bind ( this ) , this . session . addEventListener ( "changeOverwrite" , this . $onCursorChange ) , this . $onScrollTopChange = this . onScrollTopChange . bind ( this ) , this . session . addEventListener ( "changeScrollTop" , this . $onScrollTopChange ) , this . $onScrollLeftChange = this . onScrollLeftChange . bind ( this ) , this . session . addEventListener ( "changeScrollLeft" , this . $onScrollLeftChange ) , this . selection = e . getSelection ( ) , this . selection . addEventListener ( "changeCursor" , this . $onCursorChange ) , this . $onSelectionChange = this . onSelectionChange . bind ( this ) , this . selection . addEventListener ( "changeSelection" , this . $onSelectionChange ) , this . onChangeMode ( ) , this . $blockScrolling += 1 , this . onCursorChange ( ) , 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 ( )
this . session && this . session . removeEventListener ( "change" , this . $updateAnnotations ) , this . session = e , e && e . on ( "change" , this . $updateAnnotations ) } , this . addGutterDecoration = function ( e , t ) { window . console && console . warn && console . warn ( "deprecated use session.addGutterDecoration" ) , this . session . addGutterDecoration ( e , t ) } , this . removeGutterDecoration = function ( e , t ) { window . console && console . warn && console . warn ( "deprecated use session.removeGutterDecoration" ) , this . session . removeGutterDecoration ( e , t ) } , this . setAnnotations = function ( e ) { this . $annotations = [ ] ; for ( var t = 0 ; t < e . length ; t ++ ) { var i = e [ t ] , n = i . row , r = this . $annotations [ n ] ; r || ( r = this . $annotations [ n ] = { text : [ ] } ) ; var s = i . text ; s = s ? o . escapeHTML ( s ) : i . html || "" , - 1 === r . text . indexOf ( s ) && r . text . push ( s ) ; var a = i . type ; "error" == a ? r . className = " ace_error" : "warning" == a && " ace_error" != r . className ? r . className = " ace_warning" : "info" != a || r . className || ( r . className = " ace_info" ) } } , this . $updateAnnotations = function ( e ) { if ( this . $annotations . length ) { var t = e . start . row , i = e . end . row - t ; if ( 0 === i ) ; else if ( "remove" == e . action ) this . $annotations . splice ( t , i + 1 , null ) ; else { 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 , m = i ; ; ) { if ( m > s && ( m = o . end . row + 1 , o = t . getNextFoldLine ( m , o ) , s = o ? o . start . row : 1 / 0 ) , m > 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 g = "ace_gutter-cell " ; l [ m ] && ( g += l [ m ] ) , c [ m ] && ( g += c [ m ] ) , this . $annotations [ m ] && ( g += this . $annotations [ m ] . className ) , f . element . className != g && ( f . element . className = g ) ; var v = t . getRowLength ( m ) * e . lineHeight + "px" ; if ( v != f . element . style . height && ( f . element . style . height = v ) , a ) { var w = a [ m ] ; null == w && ( w = a [ m ] = t . getFoldWidget ( m ) ) } if ( w ) { f . foldWidget || ( f . foldWidget = n . createElement ( "span" ) , f . element . appendChild ( f . foldWidget ) ) ; var g = "ace_fold-widget ace_" + w ; g += "start" == w && m == s && m < o . end . row ? " ace_closed" : " ace_open" , f . foldWidget . className != g && ( f . foldWidget . className = g ) ; 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 , m ) : m + h ; A != f . textNode . data && ( f . textNode . data = A ) , m ++ } 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" , " m
2016-04-06 15:25:05 +08:00
r . importCssString ( g , "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 , m ) , 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 . $
2016-03-21 01:19:13 +08:00
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 ( ) , m = u . getCursor ( ) , g = e . inSelection ( ) || u . isEmpty ( ) && n ( p , m ) , 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 && g ) 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-04-06 15:25:05 +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 m = e . renderer . $cursorLayer . getPixelPosition ( n ) . left ; p . style . left = m + 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 g = 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 ( g ) , 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 ( g ) , 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
return '""' == e ? t : ( e + " + " + t ) . replace ( /' \+ '/g , "" ) } function y ( e ) { return b ( decodeURIComponent ( e ) ) } function C ( e ) { return encodeURIComponent ( E ( e ) ) } function E ( e ) { return e . replace ( /~/g , "~0" ) . replace ( /\//g , "~1" ) } function b ( e ) { return e . replace ( /~1/g , "/" ) . replace ( /~0/g , "~" ) } e . exports = { copy : n , checkDataType : r , checkDataTypes : o , toHash : s , getProperty : a , escapeQuotes : l , ucs2length : c , varOccurences : h , varReplace : d , cleanUpCode : u , cleanUpVarErrors : f , schemaHasRules : p , stableStringify : i ( 24 ) , toQuotedString : m , getPathExpr : g , getPath : v , getData : w , unescapeFragment : y , escapeFragment : C , escapeJsonPointer : E } ; var F = /^[a-z$_][a-z$_0-9]*$/i , x = /'|\\/g , S = /else\s*{\s*}/g , $ = /if\s*\([^)]+\)\s*\{\s*\}(?!\s*else)/g , D = /if\s*\(([^)]+)\)\s*\{\s*\}\s*else(?!\s*if)/g , k = /[^v\.]errors/g , B = /var errors = 0;|var vErrors = null;|validate.errors = vErrors;/g , _ = "return errors === 0;" , L = "validate.errors = null; return true;" , R = /^([0-9]+)((?:[^0-9]|~0|~1)*)$/ } , 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 : " st
} , function ( e , t , i ) { t . parse = i ( 62 ) , t . stringify = i ( 63 ) } , 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 m = e . validate ( p ) . replace ( /validate\.schema/g , c . code ) ; n += " " + m + " " , 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 m = s . every ( function ( t ) { return e . util . schemaHasRules ( t , e . RULES . all ) } ) ; if ( m ) { n += " var " + u + " = errors; var " + d + " = false; " ; var g = 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 = g , 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 =
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 = [ ] , m = s ; if ( m ) for ( var g , v = - 1 , w = m . length - 1 ; w > v ; ) { g = m [ v += 1 ] ; var A = e . schema . properties [ g ] ; A && e . util . schemaHasRules ( A , e . RULES . all ) || ( p [ p . length ] = g ) } } 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