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-10-18 03:16:01 +08:00
* @ version 5.5 . 9
* @ date 2016 - 10 - 17
2013-05-04 05:26:09 +08:00
* /
2016-04-16 18:40:29 +08:00
! function ( e , t ) { "object" == typeof exports && "object" == typeof module ? module . exports = t ( ) : "function" == typeof define && define . amd ? define ( [ ] , t ) : "object" == typeof exports ? exports . JSONEditor = t ( ) : e . JSONEditor = t ( ) } ( this , function ( ) { return function ( e ) { function t ( n ) { if ( i [ n ] ) return i [ n ] . exports ; var r = i [ n ] = { exports : { } , id : n , loaded : ! 1 } ; return e [ n ] . call ( r . exports , r , r . exports , t ) , r . loaded = ! 0 , r . exports } var i = { } ; return t . m = e , t . c = i , t . p = "" , t ( 0 ) } ( [ function ( e , t , i ) { "use strict" ; function n ( e , t , i ) { if ( ! ( this instanceof n ) ) throw new Error ( 'JSONEditor constructor called without "new".' ) ; var r = 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 ( 1 ) } catch ( o ) { } var s = i ( 51 ) , a = i ( 62 ) , l = i ( 54 ) ; n . modes = { } , n . prototype . DEBOUNCE _INTERVAL = 150 , n . prototype . _create = function ( e , t , i ) { this . container = e , this . options = t || { } , this . json = i || { } ; var n = this . options . mode || "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 ( ) ) , this . refresh ( ) } else this . validateSchema = null , this . options . schema = null , this . validate ( ) , this . refresh ( ) } , n . prototype . validate = function ( ) { } , n . prototype . refresh = function ( ) { } , n . registerMode = function ( e ) { var t , i ; if ( 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 ) { "use strict" ; function n ( e ) { return v . test ( e ) } function r ( e ) { function
2016-05-23 02:43:26 +08:00
for ( "-" === n && ( t = "-" , l ( "-" ) ) ; n >= "0" && "9" >= n ; ) t += n , l ( ) ; if ( "." === n ) for ( t += "." ; l ( ) && n >= "0" && "9" >= n ; ) t += n ; if ( "e" === n || "E" === n ) for ( t += n , l ( ) , "-" !== n && "+" !== n || ( t += n , l ( ) ) ; n >= "0" && "9" >= n ; ) t += n , l ( ) ; return e = + t , isFinite ( e ) ? e : void a ( "Bad number" ) } , h = function ( ) { var e , t , i , r = "" ; if ( '"' === n ) for ( ; l ( ) ; ) { if ( '"' === n ) return l ( ) , r ; if ( "\\" === n ) if ( l ( ) , "u" === n ) { for ( i = 0 , t = 0 ; 4 > t && ( e = parseInt ( l ( ) , 16 ) , isFinite ( e ) ) ; t += 1 ) i = 16 * i + e ; r += String . fromCharCode ( i ) } else { if ( "string" != typeof s [ n ] ) break ; r += s [ n ] } else r += n } a ( "Bad string" ) } , d = function ( ) { for ( ; n && " " >= n ; ) l ( ) } , u = function ( ) { switch ( n ) { case "t" : return l ( "t" ) , l ( "r" ) , l ( "u" ) , l ( "e" ) , ! 0 ; case "f" : return l ( "f" ) , l ( "a" ) , l ( "l" ) , l ( "s" ) , l ( "e" ) , ! 1 ; case "n" : return l ( "n" ) , l ( "u" ) , l ( "l" ) , l ( "l" ) , null } a ( "Unexpected '" + n + "'" ) } , f = function ( ) { var e = [ ] ; if ( "[" === n ) { if ( l ( "[" ) , d ( ) , "]" === n ) return l ( "]" ) , e ; for ( ; n ; ) { if ( e . push ( o ( ) ) , d ( ) , "]" === n ) return l ( "]" ) , e ; l ( "," ) , d ( ) } } a ( "Bad array" ) } , p = function ( ) { var e , t = { } ; if ( "{" === n ) { if ( l ( "{" ) , d ( ) , "}" === n ) return l ( "}" ) , t ; for ( ; n ; ) { if ( e = h ( ) , d ( ) , l ( ":" ) , Object . hasOwnProperty . call ( t , e ) && a ( 'Duplicate key "' + e + '"' ) , t [ e ] = o ( ) , d ( ) , "}" === n ) return l ( "}" ) , t ; l ( "," ) , d ( ) } } a ( "Bad object" ) } ; o = function ( ) { switch ( d ( ) , n ) { case "{" : return p ( ) ; case "[" : return f ( ) ; case '"' : return h ( ) ; case "-" : return c ( ) ; default : return n >= "0" && "9" >= n ? c ( ) : u ( ) } } , e . exports = function ( e , t ) { var s ; return r = e , i = 0 , n = " " , s = o ( ) , d ( ) , n && a ( "Syntax error" ) , "function" == typeof t ? function l ( e , i ) { var n , r , o = e [ i ] ; if ( o && "object" == typeof o ) for ( n in o ) Object . prototype . hasOwnProperty . call ( o , n ) && ( r = l ( o , n ) , void 0 !== r ? o [ n ] = r : delete o [ n ] ) ; return t . call ( e , i , o ) } ( { "" : s } , "" ) : s } } , function ( e , t ) { function i ( e ) { return a . lastIndex = 0 , a . test ( e ) ? '"' + e . replace ( a , function ( e ) { var t = l [ e ] ; return "string" == typeof t ? t : "\\u" + ( "0000" + e . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) } ) + '"' : '"' + e + '"' } function n ( e , t ) { var a , l , c , h , d , u = r , f = t [ e ] ; switch ( f && "object" == typeof f && "function" == typeof f . toJSON && ( f = f . toJSON ( e ) ) , "function" == typeof s && ( f = s . call ( t , e , f ) ) , typeof f ) { case "string" : return i ( f ) ; case "number" : return isFinite ( f ) ? String ( f ) : "null" ; case "boolean" : case "null" : return String ( f ) ; case "object" : if ( ! f ) return "null" ; if ( r += o , d = [ ] , "[object Array]" === Object . prototype . toString . apply ( f ) ) { for ( h = f . length , a = 0 ; h > a ; a += 1 ) d [ a ] = n ( a , f ) || "null" ; return c = 0 === d . length ? "[]" : r ? "[\n" + r + d . join ( ",\n" + r ) + "\n" + u + "]" : "[" + d . join ( "," ) + "]" , r = u , c } if ( s && "object" == typeof s ) for ( h = s . length , a = 0 ; h > a ; a += 1 ) l = s [ a ] , "string" == typeof l && ( c = n ( l , f ) , c && d . push ( i ( l ) + ( r ? ": " : ":" ) + c ) ) ; else for ( l in f ) Object . prototype . hasOwnProperty . call ( f , l ) && ( c = n ( l , f ) , c && d . push ( i ( l ) + ( r ? ": " : ":" ) + c ) ) ; return c = 0 === d . length ? "{}" : r ? "{\n" + r + d . join ( ",\n" + r ) + "\n" + u + "}" : "{" + d . join ( "," ) + "}" , r = u , c } } var r , o , s , a = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g , l = { "\b" : "\\b" , " " : "\\t" , "\n" : "\\n" , "\f" : "\\f" , "\r" : "\\r" , '"' : '\\"' , "\\" : "\\\\" } ; e . exports = function ( e , t , i ) { var a ; if ( r = "" , o = "" , "number" == typeof i ) for ( a = 0 ; i > a ; a += 1 ) o += " " ; else "string" == typeof i && ( o = i ) ; if ( s = t , t && "function" != typeof t && ( "object" != typeof t || "number" != typeof t . length ) ) throw new Error ( "JSON.stringify" ) ; return n ( "" , { "" : e } ) } } , function ( e , t , i ) { "use strict" ; function n ( e ) { r . copy ( e , this ) } var r = i ( 11 ) ; e . exports = n } , function ( module , exports , _ _webpack _require _ _ ) { "use strict" ; function setupAsync ( e , t ) { t !== ! 1 && ( t = ! 0 ) ; var i , n = e . async , r = e . transpile ; switch ( typeof r ) { case "string" : var o = TRANSPILE [ r ] ; if ( ! o ) throw new Error ( "bad transpiler: " + r ) ; return e . _transpileFunc = o ( e , t ) ; case "undefined" : case "boolean" : if ( "string" == typeof n ) { if ( i = ASYNC [ n ] , ! i ) throw new Error ( "bad async mode: " + n ) ; return e . transpile = i ( e , t ) } for ( var s = 0 ; s < MODES . length ; s ++ ) { var a = MODES [ s ] ; if ( setupAsync ( a , ! 1 ) ) return util . copy ( a , e ) , e . transpile } throw new Error ( "generators, nodent and regenerator are not available" ) ; case "function" : return e . _transpileFunc = e . transpile ; default : throw new Error ( "bad transpiler: " + r ) } } function checkGenerators ( opts , required ) { try { return eval ( "(function*(){})()" ) , ! 0 } catch ( e ) { if ( required ) throw new Error ( "generators not supported" ) } } function checkAsyncFunction ( opts , required ) { try { return eval ( "(async function(){})()" ) , ! 0 } catch ( e ) { if ( required ) throw new Error ( "es7 async functions not supported" ) } } funct
u && ( n += " var schema" + r + " = " + f + "; " , f = "schema" + r ) ; var p = "i" + r ; u || ( n += " var schema" + r + " = validate.schema" + a + ";" ) , n += "var " + d + ";" , u && ( n += " if (schema" + r + " === undefined) " + d + " = true; else if (!Array.isArray(schema" + r + ")) " + d + " = false; else {" ) , n += "" + d + " = false;for (var " + p + "=0; " + p + "<schema" + r + ".length; " + p + "++) if (equal(" + h + ", schema" + r + "[" + p + "])) { " + d + " = true; break; }" , u && ( n += " } " ) , n += " if (!" + d + ") { " ; var m = m || [ ] ; m . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "enum" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + '" , params: {} ' , e . opts . messages !== ! 1 && ( n += " , message: 'should be equal to one of the allowed values' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var g = n ; return n = m . pop ( ) , n += ! e . compositeRule && c ? e . async ? " throw new ValidationError([" + g + "]); " : " validate.errors = [" + g + "]; return false; " : " var err = " + g + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " }" , c && ( n += " else { " ) , n } } , function ( e , t ) { "use strict" ; e . exports = function ( e , t ) { 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 || "" ) ; if ( e . opts . format === ! 1 ) return c && ( n += " if (true) { " ) , n ; var d = e . opts . v5 && s . $data , u = d ? e . util . getData ( s . $data , o , e . dataPathArr ) : s ; if ( d && ( n += " var schema" + r + " = " + u + "; " , u = "schema" + r ) , d ) { var f = "format" + r ; n += " var " + f + " = formats[" + u + "]; var isObject" + r + " = typeof " + f + " == 'object' && !(" + f + " instanceof RegExp) && " + f + ".validate; if (isObject" + r + ") { var async" + r + " = " + f + ".async; " + f + " = " + f + ".validate; } if ( " , d && ( n += " (" + u + " !== undefined && typeof " + u + " != 'string') || " ) , n += " (" + f + " && !(typeof " + f + " == 'function' ? " , n += e . async ? " (async" + r + " ? " + e . yieldAwait + " " + f + "(" + h + ") : " + f + "(" + h + ")) " : " " + f + "(" + h + ") " , n += " : " + f + ".test(" + h + ")))) {" } else { var f = e . formats [ s ] ; if ( ! f ) return c && ( n += " if (true) { " ) , n ; var p = "object" == typeof f && ! ( f instanceof RegExp ) && f . validate ; if ( p ) { var m = f . async === ! 0 ; f = f . validate } if ( m ) { if ( ! e . async ) throw new Error ( "async format in sync schema" ) ; var g = "formats" + e . util . getProperty ( s ) + ".validate" ; n += " if (!(" + e . yieldAwait + " " + g + "(" + h + "))) { " } else { n += " if (! " ; var g = "formats" + e . util . getProperty ( s ) ; p && ( g += ".validate" ) , n += "function" == typeof f ? " " + g + "(" + h + ") " : " " + g + ".test(" + h + ") " , n += ") { " } } var v = v || [ ] ; v . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "format" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + '" , params: { format: ' , n += d ? "" + u : "" + e . util . toQuotedString ( s ) , n += " } " , e . opts . messages !== ! 1 && ( n += " , message: 'should match format \"" , n += d ? "' + " + u + " + '" : "" + e . util . escapeQuotes ( s ) , n += "\"' " ) , e . opts . verbose && ( n += " , schema: " , n += d ? "validate.schema" + a : "" + e . util . toQuotedString ( s ) , n += " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var w = n ; return n = v . pop ( ) , n += ! e . compositeRule && c ? e . async ? " throw new ValidationError([" + w + "]); " : " validate.errors = [" + w + "]; return false; " : " var err = " + w + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " } " , c && ( n += " else { " ) , n } } , function ( e , t ) { "use strict" ; e . exports = function ( e , t ) { 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 = f . dataLevel = e . dataLevel + 1 , g = "data" + m ; if ( n += "var " + u + " = errors;var " + d + ";" , Array . isArray ( s ) ) { var v = e . schema . additionalItems ; if ( v === ! 1 ) { n += " " + d + " = " + h + ".length <= " + s . length + "; " ; var w = l ; l = e . errSchemaPath + "/additionalItems" , n += " if (!" + d + ") { " ; var y = y || [ ] ; y . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "additionalItems" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + '" , params: { limit: ' + s . length + " } " , e . opts . messages !== ! 1 && ( n += " , message: 'should NOT have more than " + s . length + " items' " ) , e . opts . verbose && ( n += " , schema: false , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var A = n
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++; } " } } e . errorPath = A } else c && ( n += " if (true) {" ) ; return n } } , function ( e , t ) { "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 ) , ( s || u ) && e . opts . uniqueItems !== ! 1 ) { u && ( n += " var " + d + "; if (" + f + " === false || " + f + " === undefined) " + d + " = true; else if (typeof " + f + " != 'boolean') " + d + " = false; else { " ) , n += " var " + d + " = true; if (" + h + ".length > 1) { var i = " + h + ".length, j; outer: for (;i--;) { for (j = i; j--;) { if (equal(" + h + "[i], " + h + "[j])) { " + d + " = false; break outer; } } } } " , u && ( n += " } " ) , n += " if (!" + d + ") { " ; var p = p || [ ] ; p . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "uniqueItems" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + '" , params: { i: i, j: j } ' , e . opts . messages !== ! 1 && ( n += " , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' " ) , e . opts . verbose && ( n += " , schema: " , n += u ? "validate.schema" + a : "" + s , n += " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var m = n ; n = p . pop ( ) , n += ! e . compositeRule && c ? e . async ? " throw new ValidationError([" + m + "]); " : " validate.errors = [" + m + "]; return false; " : " var err = " + m + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " , n += " } " , c && ( n += " else { " ) } else c && ( n += " if (true) { " ) ; return n } } , function ( e , t , i ) { "use strict" ; function n ( e ) { function t ( t , i , r ) { var o = { inline : r || n [ t ] , statements : ! 0 , errors : "full" } ; i && ( o . type = i ) , e . addKeyword ( t , o ) } var n = { "switch" : i ( 44 ) , constant : i ( 45 ) , _formatLimit : i ( 46 ) , patternRequired : i ( 47 ) } ; if ( e . _opts . meta !== ! 1 ) { var s = i ( 48 ) ; e . addMetaSchema ( s , o ) } t ( "constant" ) , e . addKeyword ( "contains" , { type : "array" , macro : r } ) , t ( "formatMaximum" , "string" , n . _formatLimit ) , t ( "formatMinimum" , "string" , n . _formatLimit ) , e . addKeyword ( "exclusiveFormatMaximum" ) , e . addKeyword ( "exclusiveFormatMinimum" ) , e . addKeyword ( "patternGroups" ) , t ( "patternRequired" , "object" ) , t ( "switch" ) } function r ( e ) { return { not : { items : { not : e } } } } var o = "https://raw.githubusercontent.com/epoberezkin/ajv/master/lib/refs/json-schema-v5.json" ; e . exports = { enable : n , META _SCHEMA _ID : o } } , function ( e , t ) { "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 , g = "ifPassed" + e . level ; n += "var " + g + ";" ; var v = s ; if ( v ) for ( var w , y = - 1 , A = v . length - 1 ; A > y ; ) { if ( w = v [ y += 1 ] , y && ! m && ( n += " if (!" + g + ") { " , p += "}" ) , w [ "if" ] && e . util . schemaHasRules ( w [ "if" ] , e . RULES . all ) ) { n += " var " + u + " = errors; " ; var C = e . compositeRule ; if ( e . compositeRule = f . compositeRule = ! 0 , f . createErrors = ! 1 , f . schema = w [ "if" ] , f . schemaPath = a + "[" + y + "].if" , f . errSchemaPath = l + "/" + y + "/if" , n += " " + e . validate ( f ) + " " , f . createErrors = ! 0 , e . compositeRule = f . compositeRule = C , n += " " + g + " = valid" + f . level + "; if (" + g + ") { " , "boolean" == typeof w . then ) { if ( w . then === ! 1 ) { var E = E || [ ] ; E . push ( n ) , n = "" , e . createErrors !== ! 1 ? ( n += " { keyword: '" + ( i || "switch" ) + "' , dataPath: (dataPath || '') + " + e . errorPath + ' , schemaPath: "' + l + '" , params: { caseIndex: ' + y + " } " , e . opts . messages !== ! 1 && ( n += " , message: 'should pass \"switch\" keyword validation' " ) , e . opts . verbose && ( n += " , schema: validate.schema" + a + " , parentSchema: validate.schema" + e . schemaPath + " , data: " + h + " " ) , n += " } " ) : n += " {} " ; var b = n ; n = E . pop ( ) , n += ! e . compositeRule && c ? e . async ? " throw new ValidationError([" + b + "]); " : " validate.errors = [" + b + "]; return false; " : " var err = " + b + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; " } n += " var valid" + f . level + " = " + w . then + "; " } else f . schema = w . then , f . schemaPath = a + "[" + y + "].then" , f . errSchemaPath = l + "/" + y + "/then" , n += " " + e . validate ( f ) + " " ; n += " } e
2016-09-23 06:25:27 +08:00
} ) } , 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 . newBeforeNode ) } ) } } , sort : { undo : function ( e ) { var t = e . node ; t . hideChilds ( ) , t . sort = e . oldSort , t . childs = e . oldChilds , t . showChilds ( ) } , redo : function ( e ) { var t = e . node ; t . hideChilds ( ) , t . sort = e . newSort , t . childs = e . newChilds , t . showChilds ( ) } } } } i ( 54 ) ; n . prototype . onChange = function ( ) { } , n . prototype . add = function ( e , t ) { this . index ++ , this . history [ this . index ] = { action : e , params : t , timestamp : new Date } , this . index < this . history . length - 1 && this . history . splice ( this . index + 1 , this . history . length - this . index - 1 ) , this . onChange ( ) } , n . prototype . clear = function ( ) { this . history = [ ] , this . index = - 1 , this . onChange ( ) } , n . prototype . canUndo = function ( ) { return this . index >= 0 } , n . prototype . canRedo = function ( ) { return this . index < this . history . length - 1 } , n . prototype . undo = function ( ) { if ( this . canUndo ( ) ) { var e = this . history [ this . index ] ; if ( e ) { var t = this . actions [ e . action ] ; t && t . undo ? ( t . undo ( e . params ) , e . params . oldSelection && this . editor . setSelection ( e . params . oldSelection ) ) : console . error ( new Error ( 'unknown action "' + e . action + '"' ) ) } this . index -- , this . onChange ( ) } } , n . prototype . redo = function ( ) { if ( this . canRedo ( ) ) { this . index ++ ; var e = this . history [ this . index ] ; if ( e ) { var t = this . actions [ e . action ] ; t && t . redo ? ( t . redo ( e . params ) , e . params . newSelection && this . editor . setSelection ( e . params . newSelection ) ) : console . error ( new Error ( 'unknown action "' + e . action + '"' ) ) } this . onChange ( ) } } , n . prototype . destroy = function ( ) { this . editor = null , this . history = [ ] , this . index = - 1 } , e . exports = n } , function ( e , t , i ) { "use strict" ; var n = i ( 55 ) ; t . parse = function ( e ) { try { return JSON . parse ( e ) } catch ( i ) { throw t . validate ( e ) , i } } , t . sanitize = function ( e ) { function t ( ) { return e . charAt ( h ) } function i ( ) { return e . charAt ( h + 1 ) } function n ( ) { return e . charAt ( h - 1 ) } function r ( ) { for ( var e = c . length - 1 ; e >= 0 ; ) { var t = c [ e ] ; if ( " " !== t && "\n" !== t && "\r" !== t && " " !== t ) return t ; e -- } return "" } function o ( ) { for ( h += 2 ; h < e . length && ( "*" !== t ( ) || "/" !== i ( ) ) ; ) h ++ ; h += 2 } function s ( ) { for ( h += 2 ; h < e . length && "\n" !== t ( ) ; ) h ++ } function a ( i ) { c . push ( '"' ) , h ++ ; for ( var r = t ( ) ; h < e . length && r !== i ; ) '"' === r && "\\" !== n ( ) && c . push ( "\\" ) , "\\" === r && ( h ++ , r = t ( ) , "'" !== r && c . push ( "\\" ) ) , c . push ( r ) , h ++ , r = t ( ) ; r === i && ( c . push ( '"' ) , h ++ ) } function l ( ) { for ( var e = [ "null" , "true" , "false" ] , i = "" , n = t ( ) , r = /[a-zA-Z_$\d]/ ; r . test ( n ) ; ) i += n , h ++ , n = t ( ) ; - 1 === e . indexOf ( i ) ? c . push ( '"' + i + '"' ) : c . push ( i ) } var c = [ ] , h = 0 , d = e . match ( /^\s*(\/\*(.|[\r\n])*?\*\/)?\s*[\da-zA-Z_$]+\s*\(([\s\S]*)\)\s*;?\s*$/ ) ; for ( d && ( e = d [ 3 ] ) ; h < e . length ; ) { var u = t ( ) ; "/" === u && "*" === i ( ) ? o ( ) : "/" === u && "/" === i ( ) ? s ( ) : "'" === u || '"' === u ? a ( u ) : /[a-zA-Z_$]/ . test ( u ) && - 1 !== [ "{" , "," ] . indexOf ( r ( ) ) ? l ( ) : ( c . push ( u ) , h ++ ) } return c . join ( "" ) } , t . escapeUnicodeChars = function ( e ) { return e . replace ( /[\u007F-\uFFFF]/g , function ( e ) { return "\\u" + ( "0000" + e . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) } ) } , t . validate = function ( e ) { "undefined" != typeof n ? n . parse ( e ) : JSON . parse ( e ) } , t . extend = function ( e , t ) { for ( var i in t ) t . hasOwnProperty ( i ) && ( e [ i ] = t [ i ] ) ; return e } , t . clear = function ( e ) { for ( var t in e ) e . hasOwnProperty ( t ) && delete e [ t ] ; return e } , t . type = function ( e ) { return null === e ? "null" : void 0 === e ? "undefined" : e instanceof Number || "number" == typeof e ? "number" : e instanceof String || "string" == typeof e ? "string" : e instanceof Boolean || "boolean" == typeof e ? "boolean" : e instanceof RegExp || "regexp" == typeof e ? "regexp" : t . isArray ( e ) ? "array" : "object" } ; var r = /^https?:\/\/\S+$/ ; t . isUrl = function ( e ) { return ( "string" == typeof e || e instanceof String ) && r . test ( e ) } , t . isArray = function ( e ) { return "[object Array]" === Object . prototype . toString . call ( e ) } , t . getAbsoluteLeft = function ( e ) { var t = e . getBoundingClientRect ( ) ; return t
2016-10-18 03:16:01 +08:00
var t = e . getDom ( ) , i = this . getAppend ( ) , n = i ? i . parentNode : void 0 ; i && n && n . insertBefore ( t , i ) , e . showChilds ( ) } this . updateDom ( { updateIndexes : ! 0 } ) , e . updateDom ( { recurse : ! 0 } ) } } , n . prototype . moveBefore = function ( e , t ) { if ( this . _hasChilds ( ) ) { var i = this . dom . tr ? this . dom . tr . parentNode : void 0 ; if ( i ) { var n = document . createElement ( "tr" ) ; n . style . height = i . clientHeight + "px" , i . appendChild ( n ) } e . parent && e . parent . removeChild ( e ) , t instanceof l ? this . appendChild ( e ) : this . insertBefore ( e , t ) , i && i . removeChild ( n ) } } , n . prototype . moveTo = function ( e , t ) { if ( e . parent == this ) { var i = this . childs . indexOf ( e ) ; t > i && t ++ } var n = this . childs [ t ] || this . append ; this . moveBefore ( e , n ) } , n . prototype . insertBefore = function ( e , t ) { if ( this . _hasChilds ( ) ) { if ( t == this . append ) e . setParent ( this ) , e . fieldEditable = "object" == this . type , this . childs . push ( e ) ; else { var i = this . childs . indexOf ( t ) ; if ( - 1 == i ) throw new Error ( "Node not found" ) ; e . setParent ( this ) , e . fieldEditable = "object" == this . type , this . childs . splice ( i , 0 , e ) } if ( this . expanded ) { var n = e . getDom ( ) , r = t . getDom ( ) , o = r ? r . parentNode : void 0 ; r && o && o . insertBefore ( n , r ) , e . showChilds ( ) } this . updateDom ( { updateIndexes : ! 0 } ) , e . updateDom ( { recurse : ! 0 } ) } } , n . prototype . insertAfter = function ( e , t ) { if ( this . _hasChilds ( ) ) { var i = this . childs . indexOf ( t ) , n = this . childs [ i + 1 ] ; n ? this . insertBefore ( e , n ) : this . appendChild ( e ) } } , n . prototype . search = function ( e ) { var t , i = [ ] , n = e ? e . toLowerCase ( ) : void 0 ; if ( delete this . searchField , delete this . searchValue , void 0 != this . field ) { var r = String ( this . field ) . toLowerCase ( ) ; t = r . indexOf ( n ) , - 1 != t && ( this . searchField = ! 0 , i . push ( { node : this , elem : "field" } ) ) , this . _updateDomField ( ) } if ( this . _hasChilds ( ) ) { if ( this . childs ) { var o = [ ] ; this . childs . forEach ( function ( t ) { o = o . concat ( t . search ( e ) ) } ) , i = i . concat ( o ) } if ( void 0 != n ) { var s = ! 1 ; 0 == o . length ? this . collapse ( s ) : this . expand ( s ) } } else { if ( void 0 != this . value ) { var a = String ( this . value ) . toLowerCase ( ) ; t = a . indexOf ( n ) , - 1 != t && ( this . searchValue = ! 0 , i . push ( { node : this , elem : "value" } ) ) } this . _updateDomValue ( ) } return i } , n . prototype . scrollTo = function ( e ) { if ( ! this . dom . tr || ! this . dom . tr . parentNode ) for ( var t = this . parent , i = ! 1 ; t ; ) t . expand ( i ) , t = t . parent ; this . dom . tr && this . dom . tr . parentNode && this . editor . scrollTo ( this . dom . tr . offsetTop , e ) } , n . focusElement = void 0 , n . prototype . focus = function ( e ) { if ( n . focusElement = e , this . dom . tr && this . dom . tr . parentNode ) { var t = this . dom ; switch ( e ) { case "drag" : t . drag ? t . drag . focus ( ) : t . menu . focus ( ) ; break ; case "menu" : t . menu . focus ( ) ; break ; case "expand" : this . _hasChilds ( ) ? t . expand . focus ( ) : t . field && this . fieldEditable ? ( t . field . focus ( ) , a . selectContentEditable ( t . field ) ) : t . value && ! this . _hasChilds ( ) ? ( t . value . focus ( ) , a . selectContentEditable ( t . value ) ) : t . menu . focus ( ) ; break ; case "field" : t . field && this . fieldEditable ? ( t . field . focus ( ) , a . selectContentEditable ( t . field ) ) : t . value && ! this . _hasChilds ( ) ? ( t . value . focus ( ) , a . selectContentEditable ( t . value ) ) : this . _hasChilds ( ) ? t . expand . focus ( ) : t . menu . focus ( ) ; break ; case "value" : default : t . value && ! this . _hasChilds ( ) ? ( t . value . focus ( ) , a . selectContentEditable ( t . value ) ) : t . field && this . fieldEditable ? ( t . field . focus ( ) , a . selectContentEditable ( t . field ) ) : this . _hasChilds ( ) ? t . expand . focus ( ) : t . menu . focus ( ) } } } , n . select = function ( e ) { setTimeout ( function ( ) { a . selectContentEditable ( e ) } , 0 ) } , n . prototype . blur = function ( ) { this . _getDomValue ( ! 1 ) , this . _getDomField ( ! 1 ) } , n . prototype . containsNode = function ( e ) { if ( this == e ) return ! 0 ; var t = this . childs ; if ( t ) for ( var i = 0 , n = t . length ; n > i ; i ++ ) if ( t [ i ] . containsNode ( e ) ) return ! 0 ; return ! 1 } , n . prototype . _move = function ( e , t ) { if ( e != t ) { if ( e . containsNode ( this ) ) throw new Error ( "Cannot move a field into a child of itself" ) ; e . parent && e . parent . removeChild ( e ) ; var i = e . clone ( ) ; e . clearDom ( ) , t ? this . insertBefore ( i , t ) : this . appendChild ( i ) } } , n . prototype . removeChild = function ( e ) { if ( this . childs ) { var t = this . childs . indexOf ( e ) ; if ( - 1 != t ) { e . hide ( ) , delete e . searchField , delete e . searchValue ; var i = this . childs . splice ( t , 1 ) [ 0 ] ; return i . parent = null , this . updateDom ( { updateIndexes : ! 0 } ) , i } } } , n . prototype . _remove = function ( e ) { this . removeChild ( e ) } , n . prototype . changeType = function ( e ) { var t = this . type ; if ( t != e ) { if ( "string" != e && "auto" != e || "string" != t && "auto" != t ) { var i , n = this . dom . tr ? this . dom . tr . parentNode : void 0 ; i = this . expanded ? this . getAppend ( ) : this . getDom ( ) ; var r = i && i . parentNode ? i . nextSibling :
2016-09-23 06:25:27 +08:00
} } , { text : "Array" , className : "jsoneditor-type-array" , title : r . array , click : function ( ) { i . _onInsertBefore ( "" , [ ] ) } } , { text : "Object" , className : "jsoneditor-type-object" , title : r . object , click : function ( ) { i . _onInsertBefore ( "" , { } ) } } , { text : "String" , className : "jsoneditor-type-string" , title : r . string , click : function ( ) { i . _onInsertBefore ( "" , "" , "string" ) } } ] } ) , this . editable . field && ( s . push ( { text : "Duplicate" , title : "Duplicate this field (Ctrl+D)" , className : "jsoneditor-duplicate" , click : function ( ) { n . onDuplicate ( i ) } } ) , s . push ( { text : "Remove" , title : "Remove this field (Ctrl+Del)" , className : "jsoneditor-remove" , click : function ( ) { n . onRemove ( i ) } } ) ) } var c = new o ( s , { close : t } ) ; c . show ( e , this . editor . content ) } , n . prototype . _getType = function ( e ) { return e instanceof Array ? "array" : e instanceof Object ? "object" : "string" == typeof e && "string" != typeof this . _stringCast ( e ) ? "string" : "auto" } , n . prototype . _stringCast = function ( e ) { var t = e . toLowerCase ( ) , i = Number ( e ) , n = parseFloat ( e ) ; return "" == e ? "" : "null" == t ? null : "true" == t ? ! 0 : "false" == t ? ! 1 : isNaN ( i ) || isNaN ( n ) ? e : i } , n . prototype . _escapeHTML = function ( e ) { if ( "string" != typeof e ) return String ( e ) ; var t = String ( e ) . replace ( /&/g , "&" ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) . replace ( / /g , " " ) . replace ( /^ / , " " ) . replace ( / $/ , " " ) , i = JSON . stringify ( t ) , n = i . substring ( 1 , i . length - 1 ) ; return this . editor . options . escapeUnicode === ! 0 && ( n = a . escapeUnicodeChars ( n ) ) , n } , n . prototype . _unescapeHTML = function ( e ) { var t = '"' + this . _escapeJSON ( e ) + '"' , i = a . parse ( t ) ; return i . replace ( /</g , "<" ) . replace ( />/g , ">" ) . replace ( / |\u00A0/g , " " ) . replace ( /&/g , "&" ) } , n . prototype . _escapeJSON = function ( e ) { for ( var t = "" , i = 0 ; i < e . length ; ) { var n = e . charAt ( i ) ; "\n" == n ? t += "\\n" : "\\" == n ? ( t += n , i ++ , n = e . charAt ( i ) , "" !== n && - 1 != '"\\/bfnrtu' . indexOf ( n ) || ( t += "\\" ) , t += n ) : t += '"' == n ? '\\"' : n , i ++ } return t } ; var l = s ( n ) ; e . exports = n } , function ( e , t ) { e . exports = function i ( e , t ) { "use strict" ; var n , r , o = /(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi , s = /(^[ ]*|[ ]*$)/g , a = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/ , l = /^0x[0-9a-f]+$/i , c = /^0/ , h = function ( e ) { return i . insensitive && ( "" + e ) . toLowerCase ( ) || "" + e } , d = h ( e ) . replace ( s , "" ) || "" , u = h ( t ) . replace ( s , "" ) || "" , f = d . replace ( o , "\x00$1\x00" ) . replace ( /\0$/ , "" ) . replace ( /^\0/ , "" ) . split ( "\x00" ) , p = u . replace ( o , "\x00$1\x00" ) . replace ( /\0$/ , "" ) . replace ( /^\0/ , "" ) . split ( "\x00" ) , m = parseInt ( d . match ( l ) , 16 ) || 1 !== f . length && d . match ( a ) && Date . parse ( d ) , g = parseInt ( u . match ( l ) , 16 ) || m && u . match ( a ) && Date . parse ( u ) || null ; if ( g ) { if ( g > m ) return - 1 ; if ( m > g ) return 1 } for ( var v = 0 , w = Math . max ( f . length , p . length ) ; w > v ; v ++ ) { if ( n = ! ( f [ v ] || "" ) . match ( c ) && parseFloat ( f [ v ] ) || f [ v ] || 0 , r = ! ( p [ v ] || "" ) . match ( c ) && parseFloat ( p [ v ] ) || p [ v ] || 0 , isNaN ( n ) !== isNaN ( r ) ) return isNaN ( n ) ? 1 : - 1 ; if ( typeof n != typeof r && ( n += "" , r += "" ) , r > n ) return - 1 ; if ( n > r ) return 1 } return 0 } } , function ( e , t , i ) { "use strict" ; function n ( e ) { function t ( e ) { this . editor = e , this . dom = { } } return t . prototype = new e , t . prototype . getDom = function ( ) { var e = this . dom ; if ( e . tr ) return e . tr ; this . _updateEditability ( ) ; var t = document . createElement ( "tr" ) ; if ( t . node = this , e . tr = t , "tree" === this . editor . options . mode ) { e . tdDrag = document . createElement ( "td" ) ; var i = document . createElement ( "td" ) ; e . tdMenu = i ; var n = document . createElement ( "button" ) ; n . className = "jsoneditor-contextmenu" , n . title = "Click to open the actions menu (Ctrl+M)" , e . menu = n , i . appendChild ( e . menu ) } var r = document . createElement ( "td" ) , o = document . createElement ( "div" ) ; return o . innerHTML = "(empty)" , o . className = "jsoneditor-readonly" , r . appendChild ( o ) , e . td = r , e . text = o , this . updateDom ( ) , t } , t . prototype . updateDom = function ( ) { var e = this . dom , t = e . td ; t && ( t . style . paddingLeft = 24 * this . getLevel ( ) + 26 + "px" ) ; var i = e . text ; i && ( i . innerHTML = "(empty " + this . parent . type + ")" ) ; var n = e . tr ; this . isVisible ( ) ? e . tr . firstChild || ( e . tdDrag && n . appendChild ( e . tdDrag ) , e . tdMenu && n . appendChild ( e . tdMenu ) , n . appendChild ( t ) ) : e . tr . firstChild && ( e . tdDrag && n . removeChild ( e . tdDrag ) , e . tdMenu && n . removeChild ( e . tdMenu ) , n . removeChild ( t ) ) } , t . prototype . isVisible = function ( ) { return 0 == this . parent . childs . length } , t . prototype . showContextMenu = function ( t , i ) { var n = this , r = e . TYPE _TITLES , s = [ { text : "Append" , title : " Append
a . lastT = 0 } var o = e ( "./keys" ) , s = e ( "./useragent" ) , a = null , l = 0 ; t . addListener = function ( e , t , i ) { if ( e . addEventListener ) return e . addEventListener ( t , i , ! 1 ) ; if ( e . attachEvent ) { var n = function ( ) { i . call ( e , window . event ) } ; i . _wrapper = n , e . attachEvent ( "on" + t , n ) } } , t . removeListener = function ( e , t , i ) { return e . removeEventListener ? e . removeEventListener ( t , i , ! 1 ) : void ( e . detachEvent && e . detachEvent ( "on" + t , i . _wrapper || i ) ) } , t . stopEvent = function ( e ) { return t . stopPropagation ( e ) , t . preventDefault ( e ) , ! 1 } , t . stopPropagation = function ( e ) { e . stopPropagation ? e . stopPropagation ( ) : e . cancelBubble = ! 0 } , t . preventDefault = function ( e ) { e . preventDefault ? e . preventDefault ( ) : e . returnValue = ! 1 } , t . getButton = function ( e ) { return "dblclick" == e . type ? 0 : "contextmenu" == e . type || s . isMac && e . ctrlKey && ! e . altKey && ! e . shiftKey ? 2 : e . preventDefault ? e . button : { 1 : 0 , 2 : 2 , 4 : 1 } [ e . button ] } , t . capture = function ( e , i , n ) { function r ( e ) { i && i ( e ) , n && n ( e ) , t . removeListener ( document , "mousemove" , i , ! 0 ) , t . removeListener ( document , "mouseup" , r , ! 0 ) , t . removeListener ( document , "dragstart" , r , ! 0 ) } return t . addListener ( document , "mousemove" , i , ! 0 ) , t . addListener ( document , "mouseup" , r , ! 0 ) , t . addListener ( document , "dragstart" , r , ! 0 ) , r } , t . addTouchMoveListener = function ( e , i ) { if ( "ontouchmove" in e ) { var n , r ; t . addListener ( e , "touchstart" , function ( e ) { var t = e . changedTouches [ 0 ] ; n = t . clientX , r = t . clientY } ) , t . addListener ( e , "touchmove" , function ( e ) { var t = 1 , o = e . changedTouches [ 0 ] ; e . wheelX = - ( o . clientX - n ) / t , e . wheelY = - ( o . clientY - r ) / t , n = o . clientX , r = o . clientY , i ( e ) } ) } } , t . addMouseWheelListener = function ( e , i ) { "onmousewheel" in e ? t . addListener ( e , "mousewheel" , function ( e ) { var t = 8 ; void 0 !== e . wheelDeltaX ? ( e . wheelX = - e . wheelDeltaX / t , e . wheelY = - e . wheelDeltaY / t ) : ( e . wheelX = 0 , e . wheelY = - e . wheelDelta / t ) , i ( e ) } ) : "onwheel" in e ? t . addListener ( e , "wheel" , function ( e ) { var t = . 35 ; switch ( e . deltaMode ) { case e . DOM _DELTA _PIXEL : e . wheelX = e . deltaX * t || 0 , e . wheelY = e . deltaY * t || 0 ; break ; case e . DOM _DELTA _LINE : case e . DOM _DELTA _PAGE : e . wheelX = 5 * ( e . deltaX || 0 ) , e . wheelY = 5 * ( e . deltaY || 0 ) } i ( e ) } ) : t . addListener ( e , "DOMMouseScroll" , function ( e ) { e . axis && e . axis == e . HORIZONTAL _AXIS ? ( e . wheelX = 5 * ( e . detail || 0 ) , e . wheelY = 0 ) : ( e . wheelX = 0 , e . wheelY = 5 * ( e . detail || 0 ) ) , i ( e ) } ) } , t . addMultiMouseDownListener = function ( e , i , n , r ) { function o ( e ) { if ( 0 !== t . getButton ( e ) ? d = 0 : e . detail > 1 ? ( d ++ , d > 4 && ( d = 1 ) ) : d = 1 , s . isIE ) { var o = Math . abs ( e . clientX - l ) > 5 || Math . abs ( e . clientY - c ) > 5 ; h && ! o || ( d = 1 ) , h && clearTimeout ( h ) , h = setTimeout ( function ( ) { h = null } , i [ d - 1 ] || 600 ) , 1 == d && ( l = e . clientX , c = e . clientY ) } if ( e . _clicks = d , n [ r ] ( "mousedown" , e ) , d > 4 ) d = 0 ; else if ( d > 1 ) return n [ r ] ( u [ d ] , e ) } function a ( e ) { d = 2 , h && clearTimeout ( h ) , h = setTimeout ( function ( ) { h = null } , i [ d - 1 ] || 600 ) , n [ r ] ( "mousedown" , e ) , n [ r ] ( u [ d ] , e ) } var l , c , h , d = 0 , u = { 2 : "dblclick" , 3 : "tripleclick" , 4 : "quadclick" } ; Array . isArray ( e ) || ( e = [ e ] ) , e . forEach ( function ( e ) { t . addListener ( e , "mousedown" , o ) , s . isOldIE && t . addListener ( e , "dblclick" , a ) } ) } ; var c = ! s . isMac || ! s . isOpera || "KeyboardEvent" in window ? function ( e ) { return 0 | ( e . ctrlKey ? 1 : 0 ) | ( e . altKey ? 2 : 0 ) | ( e . shiftKey ? 4 : 0 ) | ( e . metaKey ? 8 : 0 ) } : function ( e ) { return 0 | ( e . metaKey ? 1 : 0 ) | ( e . altKey ? 2 : 0 ) | ( e . shiftKey ? 4 : 0 ) | ( e . ctrlKey ? 8 : 0 ) } ; if ( t . getModifierString = function ( e ) { return o . KEY _MODS [ c ( e ) ] } , t . addCommandKeyListener = function ( e , i ) { var o = t . addListener ; if ( s . isOldGecko || s . isOpera && ! ( "KeyboardEvent" in window ) ) { var l = null ; o ( e , "keydown" , function ( e ) { l = e . keyCode } ) , o ( e , "keypress" , function ( e ) { return n ( i , e , l ) } ) } else { var c = null ; o ( e , "keydown" , function ( e ) { var t = e . keyCode ; a [ t ] = ( a [ t ] || 0 ) + 1 , 91 == t || 92 == t ? a . OSKey = ! 0 : a . OSKey && e . timeStamp - a . lastT > 200 && 1 == a . count && r ( ) , 1 == a [ t ] && a . count ++ , a . lastT = e . timeStamp ; var o = n ( i , e , t ) ; return c = e . defaultPrevented , o } ) , o ( e , "keypress" , function ( e ) { c && ( e . ctrlKey || e . altKey || e . shiftKey || e . metaKey ) && ( t . stopEvent ( e ) , c = null ) } ) , o ( e , "keyup" , function ( e ) { var t = e . keyCode ; a [ t ] ? a . count = Math . max ( a . count - 1 , 0 ) : r ( ) , 91 != t && 92 != t || ( a . OSKey = ! 1 ) , a [ t ] = null } ) , a || ( r ( ) , o ( window , "focus" , r ) ) } } , "object" == typeof window && window . postMessage && ! s . isOldIE ) { var h = 1 ; t . nextTick = function ( e , i ) { i = i || window ; var n = "zero-timeout-message-" + h ; t . addListener ( i , "message" , function r ( o ) { o . data == n && ( t . stopPropagation ( o ) , t . removeListener ( i , "message" , r ) , e ( ) ) } ) , i . postMessage ( n , "*" ) } } t . nextFrame = "object" == typeof window && ( window . requestAnimationFrame || window . mozRequestAnimation
} , this ) , t } , setOption : function ( e , t ) { if ( this [ "$" + e ] !== t ) { var i = this . $options [ e ] ; if ( ! i ) return n ( 'misspelled option "' + e + '"' ) ; if ( i . forwardTo ) return this [ i . forwardTo ] && this [ i . forwardTo ] . setOption ( e , t ) ; i . handlesSet || ( this [ "$" + e ] = t ) , i && i . set && i . set . call ( this , t ) } } , getOption : function ( e ) { var t = this . $options [ e ] ; return t ? t . forwardTo ? this [ t . forwardTo ] && this [ t . forwardTo ] . getOption ( e ) : t && t . get ? t . get . call ( this ) : this [ "$" + e ] : n ( 'misspelled option "' + e + '"' ) } } , l = function ( ) { this . $defaultOptions = { } } ; ( function ( ) { o . implement ( this , s ) , this . defineOptions = function ( e , t , i ) { return e . $options || ( this . $defaultOptions [ t ] = e . $options = { } ) , Object . keys ( i ) . forEach ( function ( t ) { var n = i [ t ] ; "string" == typeof n && ( n = { forwardTo : n } ) , n . name || ( n . name = t ) , e . $options [ n . name ] = n , "initialValue" in n && ( e [ "$" + n . name ] = n . initialValue ) } ) , o . implement ( e , a ) , this } , this . resetOptions = function ( e ) { Object . keys ( e . $options ) . forEach ( function ( t ) { var i = e . $options [ t ] ; "value" in i && e . setOption ( t , i . value ) } ) } , this . setDefaultValue = function ( e , t , i ) { var n = this . $defaultOptions [ e ] || ( this . $defaultOptions [ e ] = { } ) ; n [ t ] && ( n . forwardTo ? this . setDefaultValue ( n . forwardTo , t , i ) : n [ t ] . value = i ) } , this . setDefaultValues = function ( e , t ) { Object . keys ( t ) . forEach ( function ( i ) { this . setDefaultValue ( e , i , t [ i ] ) } , this ) } , this . warn = n , this . reportError = r } ) . call ( l . prototype ) , t . AppConfig = l } ) , ace . define ( "ace/config" , [ "require" , "exports" , "module" , "ace/lib/lang" , "ace/lib/oop" , "ace/lib/net" , "ace/lib/app_config" ] , function ( e , t , n ) { "no use strict" ; function r ( r ) { if ( c && c . document ) { h . packaged = r || e . packaged || n . packaged || c . define && i ( 65 ) . packaged ; for ( var s = { } , a = "" , l = document . currentScript || document . _currentScript , d = l && l . ownerDocument || document , u = d . getElementsByTagName ( "script" ) , f = 0 ; f < u . length ; f ++ ) { var p = u [ f ] , m = p . src || p . getAttribute ( "src" ) ; if ( m ) { for ( var g = p . attributes , v = 0 , w = g . length ; w > v ; v ++ ) { var y = g [ v ] ; 0 === y . name . indexOf ( "data-ace-" ) && ( s [ o ( y . name . replace ( /^data-ace-/ , "" ) ) ] = y . value ) } var A = m . match ( /^(.*)\/ace(\-\w+)?\.js(\?|$)/ ) ; A && ( a = A [ 1 ] ) } } a && ( s . base = s . base || a , s . packaged = ! 0 ) , s . basePath = s . base , s . workerPath = s . workerPath || s . base , s . modePath = s . modePath || s . base , s . themePath = s . themePath || s . base , delete s . base ; for ( var C in s ) "undefined" != typeof s [ C ] && t . set ( C , s [ C ] ) } } function o ( e ) { return e . replace ( /-(.)/g , function ( e , t ) { return t . toUpperCase ( ) } ) } var s = e ( "./lib/lang" ) , a = ( e ( "./lib/oop" ) , e ( "./lib/net" ) ) , l = e ( "./lib/app_config" ) . AppConfig ; n . exports = t = new l ; var c = function ( ) { return this || "undefined" != typeof window && window } ( ) , h = { packaged : ! 1 , workerPath : null , modePath : null , themePath : null , basePath : "" , suffix : ".js" , $moduleUrls : { } } ; t . get = function ( e ) { if ( ! h . hasOwnProperty ( e ) ) throw new Error ( "Unknown config key: " + e ) ; return h [ e ] } , t . set = function ( e , t ) { if ( ! h . hasOwnProperty ( e ) ) throw new Error ( "Unknown config key: " + e ) ; h [ e ] = t } , t . all = function ( ) { return s . copyObject ( h ) } , t . moduleUrl = function ( e , t ) { if ( h . $moduleUrls [ e ] ) return h . $moduleUrls [ e ] ; var i = e . split ( "/" ) ; t = t || i [ i . length - 2 ] || "" ; var n = "snippets" == t ? "/" : "-" , r = i [ i . length - 1 ] ; if ( "worker" == t && "-" == n ) { var o = new RegExp ( "^" + t + "[\\-_]|[\\-_]" + t + "$" , "g" ) ; r = r . replace ( o , "" ) } ( ! r || r == t ) && i . length > 1 && ( r = i [ i . length - 2 ] ) ; var s = h [ t + "Path" ] ; return null == s ? s = h . basePath : "/" == n && ( t = n = "" ) , s && "/" != s . slice ( - 1 ) && ( s += "/" ) , s + t + n + r + this . get ( "suffix" ) } , t . setModuleUrl = function ( e , t ) { return h . $moduleUrls [ e ] = t } , t . $loading = { } , t . loadModule = function ( i , n ) { var r , o ; Array . isArray ( i ) && ( o = i [ 0 ] , i = i [ 1 ] ) ; try { r = e ( i ) } catch ( s ) { } if ( r && ! t . $loading [ i ] ) return n && n ( r ) ; if ( t . $loading [ i ] || ( t . $loading [ i ] = [ ] ) , t . $loading [ i ] . push ( n ) , ! ( t . $loading [ i ] . length > 1 ) ) { var l = function ( ) { e ( [ i ] , function ( e ) { t . _emit ( "load.module" , { name : i , module : e } ) ; var n = t . $loading [ i ] ; t . $loading [ i ] = null , n . forEach ( function ( t ) { t && t ( e ) } ) } ) } ; return t . get ( "packaged" ) ? void a . loadScript ( t . moduleUrl ( i , o ) , l ) : l ( ) } } , r ( ! 0 ) , t . init = r } ) , ace . define ( "ace/mouse/mouse_handler" , [ "require" , "exports" , "module" , "ace/lib/event" , "ace/lib/useragent" , "ace/mouse/default_handlers" , "ace/mouse/default_gutter_handler" , "ace/mouse/mouse_event" , "ace/mouse/dragdrop_handler" , "ace/config" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/event" ) , r = e ( "../lib/useragent" ) , o = e ( "./default_handlers" ) . DefaultHandlers , s = e ( "./default_gutter_handler" ) . GutterHandler , a = e ( "./mouse_event" ) . MouseE
this . $behaviours [ e ] = { } } this . $behaviours [ e ] [ t ] = i } , this . addBehaviours = function ( e ) { for ( var t in e ) for ( var i in e [ t ] ) this . add ( t , i , e [ t ] [ i ] ) } , this . remove = function ( e ) { this . $behaviours && this . $behaviours [ e ] && delete this . $behaviours [ e ] } , this . inherit = function ( e , t ) { if ( "function" == typeof e ) var i = ( new e ) . getBehaviours ( t ) ; else var i = e . getBehaviours ( t ) ; this . addBehaviours ( i ) } , this . getBehaviours = function ( e ) { if ( e ) { for ( var t = { } , i = 0 ; i < e . length ; i ++ ) this . $behaviours [ e [ i ] ] && ( t [ e [ i ] ] = this . $behaviours [ e [ i ] ] ) ; return t } return this . $behaviours } } ) . call ( n . prototype ) , t . Behaviour = n } ) , ace . define ( "ace/unicode" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; function n ( e ) { var i = /\w{4}/g ; for ( var n in e ) t . packages [ n ] = e [ n ] . replace ( i , "\\u$&" ) } t . packages = { } , n ( { L : "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC" , Ll : " 0061 - 007 A00AA00B500BA00DF - 00 F600F8 - 00 FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E - 0180018301850188018 C018D019201950199 - 019 B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD - 01 BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F022102230
if ( a ) return a } } } , this . getKeywords = function ( e ) { if ( ! this . completionKeywords ) { var t = this . $tokenizer . rules , i = [ ] ; for ( var n in t ) for ( var r = t [ n ] , o = 0 , s = r . length ; s > o ; o ++ ) if ( "string" == typeof r [ o ] . token ) / keyword | support | storage / . test ( r [ o ] . token ) && i . push ( r [ o ] . regex ) ; else if ( "object" == typeof r [ o ] . token ) for ( var a = 0 , l = r [ o ] . token . length ; l > a ; a ++ ) if ( /keyword|support|storage/ . test ( r [ o ] . token [ a ] ) ) { var n = r [ o ] . regex . match ( /\(.+?\)/g ) [ a ] ; i . push ( n . substr ( 1 , n . length - 2 ) ) } this . completionKeywords = i } return e ? i . concat ( this . $keywordList || [ ] ) : this . $keywordList } , this . $createKeywordList = function ( ) { return this . $highlightRules || this . getTokenizer ( ) , this . $keywordList = this . $highlightRules . $keywordList || [ ] } , this . getCompletions = function ( e , t , i , n ) { var r = this . $keywordList || this . $createKeywordList ( ) ; return r . map ( function ( e ) { return { name : e , value : e , score : 0 , meta : "keyword" } } ) } , this . $id = "ace/mode/text" } ) . call ( h . prototype ) , t . Mode = h } ) , ace . define ( "ace/apply_delta" , [ "require" , "exports" , "module" ] , function ( e , t , i ) { "use strict" ; t . applyDelta = function ( e , t , i ) { var n = t . start . row , r = t . start . column , o = e [ n ] || "" ; switch ( t . action ) { case "insert" : var s = t . lines ; if ( 1 === s . length ) e [ n ] = o . substring ( 0 , r ) + t . lines [ 0 ] + o . substring ( r ) ; else { var a = [ n , 1 ] . concat ( t . lines ) ; e . splice . apply ( e , a ) , e [ n ] = o . substring ( 0 , r ) + e [ n ] , e [ n + t . lines . length - 1 ] += o . substring ( r ) } break ; case "remove" : var l = t . end . column , c = t . end . row ; n === c ? e [ n ] = o . substring ( 0 , r ) + o . substring ( l ) : e . splice ( n , c - n + 1 , o . substring ( 0 , r ) + e [ c ] . substring ( l ) ) } } } ) , ace . define ( "ace/anchor" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/event_emitter" ] , function ( e , t , i ) { "use strict" ; var n = e ( "./lib/oop" ) , r = e ( "./lib/event_emitter" ) . EventEmitter , o = t . Anchor = function ( e , t , i ) { this . $onChange = this . onChange . bind ( this ) , this . attach ( e ) , "undefined" == typeof i ? this . setPosition ( t . row , t . column ) : this . setPosition ( t , i ) } ; ( function ( ) { function e ( e , t , i ) { var n = i ? e . column <= t . column : e . column < t . column ; return e . row < t . row || e . row == t . row && n } function t ( t , i , n ) { var r = "insert" == t . action , o = ( r ? 1 : - 1 ) * ( t . end . row - t . start . row ) , s = ( r ? 1 : - 1 ) * ( t . end . column - t . start . column ) , a = t . start , l = r ? a : t . end ; return e ( i , a , n ) ? { row : i . row , column : i . column } : e ( l , i , ! n ) ? { row : i . row + o , column : i . column + ( i . row == l . row ? s : 0 ) } : { row : a . row , column : a . column } } n . implement ( this , r ) , this . getPosition = function ( ) { return this . $clipPositionToDocument ( this . row , this . column ) } , this . getDocument = function ( ) { return this . document } , this . $insertRight = ! 1 , this . onChange = function ( e ) { if ( ! ( e . start . row == e . end . row && e . start . row != this . row || e . start . row > this . row ) ) { var i = t ( e , { row : this . row , column : this . column } , this . $insertRight ) ; this . setPosition ( i . row , i . column , ! 0 ) } } , this . setPosition = function ( e , t , i ) { var n ; if ( n = i ? { row : e , column : t } : this . $clipPositionToDocument ( e , t ) , this . row != n . row || this . column != n . column ) { var r = { row : this . row , column : this . column } ; this . row = n . row , this . column = n . column , this . _signal ( "change" , { old : r , value : n } ) } } , this . detach = function ( ) { this . document . removeEventListener ( "change" , this . $onChange ) } , this . attach = function ( e ) { this . document = e || this . document , this . document . on ( "change" , this . $onChange ) } , this . $clipPositionToDocument = function ( e , t ) { var i = { } ; return e >= this . document . getLength ( ) ? ( i . row = Math . max ( 0 , this . document . getLength ( ) - 1 ) , i . column = this . document . getLine ( i . row ) . length ) : 0 > e ? ( i . row = 0 , i . column = 0 ) : ( i . row = e , i . column = Math . min ( this . document . getLine ( i . row ) . length , Math . max ( 0 , t ) ) ) , 0 > t && ( i . column = 0 ) , i } } ) . call ( o . prototype ) } ) , ace . define ( "ace/document" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/apply_delta" , "ace/lib/event_emitter" , "ace/range" , "ace/anchor" ] , function ( e , t , i ) { "use strict" ; var n = e ( "./lib/oop" ) , r = e ( "./apply_delta" ) . applyDelta , o = e ( "./lib/event_emitter" ) . EventEmitter , s = e ( "./range" ) . Range , a = e ( "./anchor" ) . Anchor , l = function ( e ) { this . $lines = [ "" ] , 0 === e . length ? this . $lines = [ "" ] : Array . isArray ( e ) ? this . insertMergedLines ( { row : 0 , column : 0 } , e ) : this . insert ( { row : 0 , column : 0 } , e ) } ; ( function ( ) { n . implement ( this , o ) , this . setValue = function ( e ) { var t = this . getLength ( ) - 1 ; this . remove ( new s ( 0 , 0 , t , this . getLine ( t ) . length ) ) , this . insert ( { row : 0 , column : 0 } , e ) } , this . getValue = function ( ) { return this . getAllLines ( ) . join ( this . getNewLineCharacter ( ) ) } , this . createAnchor = function ( e , t ) { return new a ( this , e , t ) } , 0 === "aaa" . split ( /a/ ) . lengt
"}" : "{" } , this . $findOpeningBracket = function ( e , t , i ) { var n = this . $brackets [ e ] , o = 1 , s = new r ( this , t . row , t . column ) , a = s . getCurrentToken ( ) ; if ( a || ( a = s . stepForward ( ) ) , a ) { i || ( i = new RegExp ( "(\\.?" + a . type . replace ( "." , "\\." ) . replace ( "rparen" , ".paren" ) . replace ( /\b(?:end)\b/ , "(?:start|begin|end)" ) + ")+" ) ) ; for ( var l = t . column - s . getCurrentTokenColumn ( ) - 2 , c = a . value ; ; ) { for ( ; l >= 0 ; ) { var h = c . charAt ( l ) ; if ( h == n ) { if ( o -= 1 , 0 == o ) return { row : s . getCurrentTokenRow ( ) , column : l + s . getCurrentTokenColumn ( ) } } else h == e && ( o += 1 ) ; l -= 1 } do a = s . stepBackward ( ) ; while ( a && ! i . test ( a . type ) ) ; if ( null == a ) break ; c = a . value , l = c . length - 1 } return null } } , this . $findClosingBracket = function ( e , t , i ) { var n = this . $brackets [ e ] , o = 1 , s = new r ( this , t . row , t . column ) , a = s . getCurrentToken ( ) ; if ( a || ( a = s . stepForward ( ) ) , a ) { i || ( i = new RegExp ( "(\\.?" + a . type . replace ( "." , "\\." ) . replace ( "lparen" , ".paren" ) . replace ( /\b(?:start|begin)\b/ , "(?:start|begin|end)" ) + ")+" ) ) ; for ( var l = t . column - s . getCurrentTokenColumn ( ) ; ; ) { for ( var c = a . value , h = c . length ; h > l ; ) { var d = c . charAt ( l ) ; if ( d == n ) { if ( o -= 1 , 0 == o ) return { row : s . getCurrentTokenRow ( ) , column : l + s . getCurrentTokenColumn ( ) } } else d == e && ( o += 1 ) ; l += 1 } do a = s . stepForward ( ) ; while ( a && ! i . test ( a . type ) ) ; if ( null == a ) break ; l = 0 } return null } } } var r = e ( "../token_iterator" ) . TokenIterator , o = e ( "../range" ) . Range ; t . BracketMatch = n } ) , ace . define ( "ace/edit_session" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/lang" , "ace/config" , "ace/lib/event_emitter" , "ace/selection" , "ace/mode/text" , "ace/range" , "ace/document" , "ace/background_tokenizer" , "ace/search_highlight" , "ace/edit_session/folding" , "ace/edit_session/bracket_match" ] , function ( e , t , i ) { "use strict" ; var n = e ( "./lib/oop" ) , r = e ( "./lib/lang" ) , o = e ( "./config" ) , s = e ( "./lib/event_emitter" ) . EventEmitter , a = e ( "./selection" ) . Selection , l = e ( "./mode/text" ) . Mode , c = e ( "./range" ) . Range , h = e ( "./document" ) . Document , d = e ( "./background_tokenizer" ) . BackgroundTokenizer , u = e ( "./search_highlight" ) . SearchHighlight , f = function ( e , t ) { this . $breakpoints = [ ] , this . $decorations = [ ] , this . $frontMarkers = { } , this . $backMarkers = { } , this . $markerId = 1 , this . $undoSelect = ! 0 , this . $foldData = [ ] , this . $foldData . toString = function ( ) { return this . join ( "\n" ) } , this . on ( "changeFold" , this . onChangeFold . bind ( this ) ) , this . $onChange = this . onChange . bind ( this ) , "object" == typeof e && e . getLine || ( e = new h ( e ) ) , this . setDocument ( e ) , this . selection = new a ( this ) , o . resetOptions ( this ) , this . setMode ( t ) , o . _signal ( "session" , this ) } ; ( function ( ) { function e ( e ) { return 4352 > e ? ! 1 : e >= 4352 && 4447 >= e || e >= 4515 && 4519 >= e || e >= 4602 && 4607 >= e || e >= 9001 && 9002 >= e || e >= 11904 && 11929 >= e || e >= 11931 && 12019 >= e || e >= 12032 && 12245 >= e || e >= 12272 && 12283 >= e || e >= 12288 && 12350 >= e || e >= 12353 && 12438 >= e || e >= 12441 && 12543 >= e || e >= 12549 && 12589 >= e || e >= 12593 && 12686 >= e || e >= 12688 && 12730 >= e || e >= 12736 && 12771 >= e || e >= 12784 && 12830 >= e || e >= 12832 && 12871 >= e || e >= 12880 && 13054 >= e || e >= 13056 && 19903 >= e || e >= 19968 && 42124 >= e || e >= 42128 && 42182 >= e || e >= 43360 && 43388 >= e || e >= 44032 && 55203 >= e || e >= 55216 && 55238 >= e || e >= 55243 && 55291 >= e || e >= 63744 && 64255 >= e || e >= 65040 && 65049 >= e || e >= 65072 && 65106 >= e || e >= 65108 && 65126 >= e || e >= 65128 && 65131 >= e || e >= 65281 && 65376 >= e || e >= 65504 && 65510 >= e } n . implement ( this , s ) , this . setDocument = function ( e ) { this . doc && this . doc . removeListener ( "change" , this . $onChange ) , this . doc = e , e . on ( "change" , this . $onChange ) , this . bgTokenizer && this . bgTokenizer . setDocument ( this . getDocument ( ) ) , this . resetCaches ( ) } , this . getDocument = function ( ) { return this . doc } , this . $resetRowCache = function ( e ) { if ( ! e ) return this . $docRowCache = [ ] , void ( this . $screenRowCache = [ ] ) ; var t = this . $docRowCache . length , i = this . $getRowCacheIndex ( this . $docRowCache , e ) + 1 ; t > i && ( this . $docRowCache . splice ( i , t ) , this . $screenRowCache . splice ( i , t ) ) } , this . $getRowCacheIndex = function ( e , t ) { for ( var i = 0 , n = e . length - 1 ; n >= i ; ) { var r = i + n >> 1 , o = e [ r ] ; if ( t > o ) i = r + 1 ; else { if ( ! ( o > t ) ) return r ; n = r - 1 } } return i - 1 } , this . resetCaches = function ( ) { this . $modified = ! 0 , this . $wrapData = [ ] , this . $rowLengthCache = [ ] , this . $resetRowCache ( 0 ) , this . bgTokenizer && this . bgTokenizer . start ( 0 ) } , this . onChangeFold = function ( e ) { var t = e . data ; this . $resetRowCache ( t . start . row ) } , this . onChange = function ( e ) { this . $modified = ! 0 , this . $resetRowCache ( e . start . row ) ; var t = this . $updateInternalDataOnChange ( e ) ; this . $fromUndo || ! this . $undoManager || e . ignore || ( this . $deltas
e = this . commands [ i ] , t || delete this . commands [ i ] ; var n = this . commandKeyBinding ; for ( var r in n ) { var o = n [ r ] ; if ( o == e ) delete n [ r ] ; else if ( Array . isArray ( o ) ) { var s = o . indexOf ( e ) ; - 1 != s && ( o . splice ( s , 1 ) , 1 == o . length && ( n [ r ] = o [ 0 ] ) ) } } } , this . bindKey = function ( e , t , i ) { return "object" == typeof e && e && ( void 0 == i && ( i = e . position ) , e = e [ this . platform ] ) , e ? "function" == typeof t ? this . addCommand ( { exec : t , bindKey : e , name : t . name || e } ) : void e . split ( "|" ) . forEach ( function ( e ) { var n = "" ; if ( - 1 != e . indexOf ( " " ) ) { var r = e . split ( /\s+/ ) ; e = r . pop ( ) , r . forEach ( function ( e ) { var t = this . parseKeys ( e ) , i = a [ t . hashId ] + t . key ; n += ( n ? " " : "" ) + i , this . _addCommandToBinding ( n , "chainKeys" ) } , this ) , n += " " } var o = this . parseKeys ( e ) , s = a [ o . hashId ] + o . key ; this . _addCommandToBinding ( n + s , t , i ) } , this ) : void 0 } , this . _addCommandToBinding = function ( t , i , n ) { var r , o = this . commandKeyBinding ; if ( i ) if ( ! o [ t ] || this . $singleCommand ) o [ t ] = i ; else { Array . isArray ( o [ t ] ) ? - 1 != ( r = o [ t ] . indexOf ( i ) ) && o [ t ] . splice ( r , 1 ) : o [ t ] = [ o [ t ] ] , "number" != typeof n && ( n = n || i . isDefault ? - 100 : e ( i ) ) ; var s = o [ t ] ; for ( r = 0 ; r < s . length ; r ++ ) { var a = s [ r ] , l = e ( a ) ; if ( l > n ) break } s . splice ( r , 0 , i ) } else delete o [ t ] } , this . addCommands = function ( e ) { e && Object . keys ( e ) . forEach ( function ( t ) { var i = e [ t ] ; if ( i ) { if ( "string" == typeof i ) return this . bindKey ( i , t ) ; "function" == typeof i && ( i = { exec : i } ) , "object" == typeof i && ( i . name || ( i . name = t ) , this . addCommand ( i ) ) } } , this ) } , this . removeCommands = function ( e ) { Object . keys ( e ) . forEach ( function ( t ) { this . removeCommand ( e [ t ] ) } , this ) } , this . bindKeys = function ( e ) { Object . keys ( e ) . forEach ( function ( t ) { this . bindKey ( t , e [ t ] ) } , this ) } , this . _buildKeyHash = function ( e ) { this . bindKey ( e . bindKey , e ) } , this . parseKeys = function ( e ) { var t = e . toLowerCase ( ) . split ( /[\-\+]([\-\+])?/ ) . filter ( function ( e ) { return e } ) , i = t . pop ( ) , n = o [ i ] ; if ( o . FUNCTION _KEYS [ n ] ) i = o . FUNCTION _KEYS [ n ] . toLowerCase ( ) ; else { if ( ! t . length ) return { key : i , hashId : - 1 } ; if ( 1 == t . length && "shift" == t [ 0 ] ) return { key : i . toUpperCase ( ) , hashId : - 1 } } for ( var r = 0 , s = t . length ; s -- ; ) { var a = o . KEY _MODS [ t [ s ] ] ; if ( null == a ) return "undefined" != typeof console && console . error ( "invalid modifier " + t [ s ] + " in " + e ) , ! 1 ; r |= a } return { key : i , hashId : r } } , this . findKeyCommand = function ( e , t ) { var i = a [ e ] + t ; return this . commandKeyBinding [ i ] } , this . handleKeyboard = function ( e , t , i , n ) { if ( ! ( 0 > n ) ) { var r = a [ t ] + i , o = this . commandKeyBinding [ r ] ; return e . $keyChain && ( e . $keyChain += " " + r , o = this . commandKeyBinding [ e . $keyChain ] || o ) , ! o || "chainKeys" != o && "chainKeys" != o [ o . length - 1 ] ? ( e . $keyChain && ( t && 4 != t || 1 != i . length ? ( - 1 == t || n > 0 ) && ( e . $keyChain = "" ) : e . $keyChain = e . $keyChain . slice ( 0 , - r . length - 1 ) ) , { command : o } ) : ( e . $keyChain = e . $keyChain || r , { command : "null" } ) } } , this . getStatusText = function ( e , t ) { return t . $keyChain || "" } } . call ( n . prototype ) , t . HashHandler = n , t . MultiHashHandler = r } ) , ace . define ( "ace/commands/command_manager" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/keyboard/hash_handler" , "ace/lib/event_emitter" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/oop" ) , r = e ( "../keyboard/hash_handler" ) . MultiHashHandler , o = e ( "../lib/event_emitter" ) . EventEmitter , s = function ( e , t ) { r . call ( this , t , e ) , this . byName = this . commands , this . setDefaultHandler ( "exec" , function ( e ) { return e . command . exec ( e . editor , e . args || { } ) } ) } ; n . inherits ( s , r ) , function ( ) { n . implement ( this , o ) , this . exec = function ( e , t , i ) { if ( Array . isArray ( e ) ) { for ( var n = e . length ; n -- ; ) if ( this . exec ( e [ n ] , t , i ) ) return ! 0 ; return ! 1 } if ( "string" == typeof e && ( e = this . commands [ e ] ) , ! e ) return ! 1 ; if ( t && t . $readOnly && ! e . readOnly ) return ! 1 ; var r = { editor : t , command : e , args : i } ; return r . returnValue = this . _emit ( "exec" , r ) , this . _signal ( "afterExec" , r ) , r . returnValue !== ! 1 } , this . toggleRecording = function ( e ) { return this . $inReplay ? void 0 : ( e && e . _emit ( "changeStatus" ) , this . recording ? ( this . macro . pop ( ) , this . removeEventListener ( "exec" , this . $addCommandToMacro ) , this . macro . length || ( this . macro = this . oldMacro ) , this . recording = ! 1 ) : ( this . $addCommandToMacro || ( this . $addCommandToMacro = function ( e ) { this . macro . push ( [ e . command , e . args ] ) } . bind ( this ) ) , this . oldMacro = this . macro , this . macro = [ ] , this . on ( "exec" , this . $addCommandToMacro ) , this . recording = ! 0 ) ) } , this . replay = function ( e ) { if ( ! this . $inReplay && this . macro ) { if ( this . recording ) return this . toggleRecording ( e ) ; try { this . $inReplay = ! 0 , this . macro . forEach ( function ( t ) { "string" == typeof t ? this . exec ( t , e ) : this . exec ( t [ 0 ] , e , t [ 1 ] ) } , this )
t . $selectionMarker = null , this . selection . isEmpty ( ) ) this . $updateHighlightActiveLine ( ) ; else { var i = this . selection . getRange ( ) , n = this . getSelectionStyle ( ) ; t . $selectionMarker = t . addMarker ( i , "ace_selection" , n ) } var r = this . $highlightSelectedWord && this . $getSelectionHighLightRegexp ( ) ; this . session . highlight ( r ) , this . _signal ( "changeSelection" ) } , this . $getSelectionHighLightRegexp = function ( ) { var e = this . session , t = this . getSelectionRange ( ) ; if ( ! t . isEmpty ( ) && ! t . isMultiLine ( ) ) { var i = t . start . column - 1 , n = t . end . column + 1 , r = e . getLine ( t . start . row ) , o = r . length , s = r . substring ( Math . max ( i , 0 ) , Math . min ( n , o ) ) ; if ( ! ( i >= 0 && /^[\w\d]/ . test ( s ) || o >= n && /[\w\d]$/ . test ( s ) ) && ( s = r . substring ( t . start . column , t . end . column ) , /^[\w\d]+$/ . test ( s ) ) ) { var a = this . $search . $assembleRegExp ( { wholeWord : ! 0 , caseSensitive : ! 0 , needle : s } ) ; return a } } } , this . onChangeFrontMarker = function ( ) { this . renderer . updateFrontMarkers ( ) } , this . onChangeBackMarker = function ( ) { this . renderer . updateBackMarkers ( ) } , this . onChangeBreakpoint = function ( ) { this . renderer . updateBreakpoints ( ) } , this . onChangeAnnotation = function ( ) { this . renderer . setAnnotations ( this . session . getAnnotations ( ) ) } , this . onChangeMode = function ( e ) { this . renderer . updateText ( ) , this . _emit ( "changeMode" , e ) } , this . onChangeWrapLimit = function ( ) { this . renderer . updateFull ( ) } , this . onChangeWrapMode = function ( ) { this . renderer . onResize ( ! 0 ) } , this . onChangeFold = function ( ) { this . $updateHighlightActiveLine ( ) , this . renderer . updateFull ( ) } , this . getSelectedText = function ( ) { return this . session . getTextRange ( this . getSelectionRange ( ) ) } , this . getCopyText = function ( ) { var e = this . getSelectedText ( ) ; return this . _signal ( "copy" , e ) , e } , this . onCopy = function ( ) { this . commands . exec ( "copy" , this ) } , this . onCut = function ( ) { this . commands . exec ( "cut" , this ) } , this . onPaste = function ( e , t ) { var i = { text : e , event : t } ; this . commands . exec ( "paste" , this , i ) } , this . $handlePaste = function ( e ) { "string" == typeof e && ( e = { text : e } ) , this . _signal ( "paste" , e ) ; var t = e . text ; if ( ! this . inMultiSelectMode || this . inVirtualSelectionMode ) this . insert ( t ) ; else { var i = t . split ( /\r\n|\r|\n/ ) , n = this . selection . rangeList . ranges ; if ( i . length > n . length || i . length < 2 || ! i [ 1 ] ) return this . commands . exec ( "insertstring" , this , t ) ; for ( var r = n . length ; r -- ; ) { var o = n [ r ] ; o . isEmpty ( ) || this . session . remove ( o ) , this . session . insert ( o . start , i [ r ] ) } } } , this . execCommand = function ( e , t ) { return this . commands . exec ( e , this , t ) } , this . insert = function ( e , t ) { var i = this . session , n = i . getMode ( ) , r = this . getCursorPosition ( ) ; if ( this . getBehavioursEnabled ( ) && ! t ) { var o = n . transformAction ( i . getState ( r . row ) , "insertion" , this , i , e ) ; o && ( e !== o . text && ( this . session . mergeUndoDeltas = ! 1 , this . $mergeNextCommand = ! 1 ) , e = o . text ) } if ( " " == e && ( e = this . session . getTabString ( ) ) , this . selection . isEmpty ( ) ) { if ( this . session . getOverwrite ( ) ) { var s = new f . fromPoints ( r , r ) ; s . end . column += e . length , this . session . remove ( s ) } } else { var s = this . getSelectionRange ( ) ; r = this . session . remove ( s ) , this . clearSelection ( ) } if ( "\n" == e || "\r\n" == e ) { var a = i . getLine ( r . row ) ; if ( r . column > a . search ( /\S|$/ ) ) { var l = a . substr ( r . column ) . search ( /\S|$/ ) ; i . doc . removeInLine ( r . row , r . column , r . column + l ) } } this . clearSelection ( ) ; var c = r . column , h = i . getState ( r . row ) , a = i . getLine ( r . row ) , d = n . checkOutdent ( h , a , e ) ; i . insert ( r , e ) ; if ( o && o . selection && ( 2 == o . selection . length ? this . selection . setSelectionRange ( new f ( r . row , c + o . selection [ 0 ] , r . row , c + o . selection [ 1 ] ) ) : this . selection . setSelectionRange ( new f ( r . row + o . selection [ 0 ] , o . selection [ 1 ] , r . row + o . selection [ 2 ] , o . selection [ 3 ] ) ) ) , i . getDocument ( ) . isNewLine ( e ) ) { var u = n . getNextLineIndent ( h , a . slice ( 0 , r . column ) , i . getTabString ( ) ) ; i . insert ( { row : r . row + 1 , column : 0 } , u ) } d && n . autoOutdent ( h , i , r . row ) } , this . onTextInput = function ( e ) { this . keyBinding . onTextInput ( e ) } , this . onCommandKey = function ( e , t , i ) { this . keyBinding . onCommandKey ( e , t , i ) } , this . setOverwrite = function ( e ) { this . session . setOverwrite ( e ) } , this . getOverwrite = function ( ) { return this . session . getOverwrite ( ) } , this . toggleOverwrite = function ( ) { this . session . toggleOverwrite ( ) } , this . setScrollSpeed = function ( e ) { this . setOption ( "scrollSpeed" , e ) } , this . getScrollSpeed = function ( ) { return this . getOption ( "scrollSpeed" ) } , this . setDragDelay = function ( e ) { this . setOption ( "dragDelay" , e ) } , this . getDragDelay = function ( ) { return this . getOption ( "dragDelay" ) } , this . setSelectionStyle = functi
2016-05-23 02:43:26 +08:00
s = ( t . end . row - t . start . row - 1 ) * n . lineHeight , ! ( 0 >= s ) ) { a = this . $getTop ( t . start . row + 1 , n ) ; var h = ( t . start . column ? 1 : 0 ) | ( t . end . column ? 0 : 8 ) ; e . push ( "<div class='" , i , h ? " ace_br" + h : "" , "' style='" , "height:" , s , "px;" , "right:0;" , "top:" , a , "px;" , "left:" , o , "px;" , r , "'></div>" ) } } , this . drawSingleLineMarker = function ( e , t , i , n , r , o ) { var s = n . lineHeight , a = ( t . end . column + ( r || 0 ) - t . start . column ) * n . characterWidth , l = this . $getTop ( t . start . row , n ) , c = this . $padding + t . start . column * n . characterWidth ; e . push ( "<div class='" , i , "' style='" , "height:" , s , "px;" , "width:" , a , "px;" , "top:" , l , "px;" , "left:" , c , "px;" , o || "" , "'></div>" ) } , this . drawFullLineMarker = function ( e , t , i , n , r ) { var o = this . $getTop ( t . start . row , n ) , s = n . lineHeight ; t . start . row != t . end . row && ( s += this . $getTop ( t . end . row , n ) - o ) , e . push ( "<div class='" , i , "' style='" , "height:" , s , "px;" , "top:" , o , "px;" , "left:0;right:0;" , r || "" , "'></div>" ) } , this . drawScreenLineMarker = function ( e , t , i , n , r ) { var o = this . $getTop ( t . start . row , n ) , s = n . lineHeight ; e . push ( "<div class='" , i , "' style='" , "height:" , s , "px;" , "top:" , o , "px;" , "left:0;right:0;" , r || "" , "'></div>" ) } } ) . call ( o . prototype ) , t . Marker = o } ) , ace . define ( "ace/layer/text" , [ "require" , "exports" , "module" , "ace/lib/oop" , "ace/lib/dom" , "ace/lib/lang" , "ace/lib/useragent" , "ace/lib/event_emitter" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/oop" ) , r = e ( "../lib/dom" ) , o = e ( "../lib/lang" ) , s = ( e ( "../lib/useragent" ) , e ( "../lib/event_emitter" ) . EventEmitter ) , a = function ( e ) { this . element = r . createElement ( "div" ) , this . element . className = "ace_layer ace_text-layer" , e . appendChild ( this . element ) , this . $updateEolChar = this . $updateEolChar . bind ( this ) } ; ( function ( ) { n . implement ( this , s ) , this . EOF _CHAR = "¶" , this . EOL _CHAR _LF = "¬" , this . EOL _CHAR _CRLF = "¤" , this . EOL _CHAR = this . EOL _CHAR _LF , this . TAB _CHAR = "—" , this . SPACE _CHAR = "·" , this . $padding = 0 , this . $updateEolChar = function ( ) { var e = "\n" == this . session . doc . getNewLineCharacter ( ) ? this . EOL _CHAR _LF : this . EOL _CHAR _CRLF ; return this . EOL _CHAR != e ? ( this . EOL _CHAR = e , ! 0 ) : void 0 } , this . setPadding = function ( e ) { this . $padding = e , this . element . style . padding = "0 " + e + "px" } , this . getLineHeight = function ( ) { return this . $fontMetrics . $characterSize . height || 0 } , this . getCharacterWidth = function ( ) { return this . $fontMetrics . $characterSize . width || 0 } , this . $setFontMetrics = function ( e ) { this . $fontMetrics = e , this . $fontMetrics . on ( "changeCharacterSize" , function ( e ) { this . _signal ( "changeCharacterSize" , e ) } . bind ( this ) ) , this . $pollSizeChanges ( ) } , this . checkForSizeChanges = function ( ) { this . $fontMetrics . checkForSizeChanges ( ) } , this . $pollSizeChanges = function ( ) { return this . $pollSizeChangesTimer = this . $fontMetrics . $pollSizeChanges ( ) } , this . setSession = function ( e ) { this . session = e , e && this . $computeTabString ( ) } , this . showInvisibles = ! 1 , this . setShowInvisibles = function ( e ) { return this . showInvisibles == e ? ! 1 : ( this . showInvisibles = e , this . $computeTabString ( ) , ! 0 ) } , this . displayIndentGuides = ! 0 , this . setDisplayIndentGuides = function ( e ) { return this . displayIndentGuides == e ? ! 1 : ( this . displayIndentGuides = e , this . $computeTabString ( ) , ! 0 ) } , this . $tabStrings = [ ] , this . onChangeTabSize = this . $computeTabString = function ( ) { var e = this . session . getTabSize ( ) ; this . tabSize = e ; for ( var t = this . $tabStrings = [ 0 ] , i = 1 ; e + 1 > i ; i ++ ) this . showInvisibles ? t . push ( "<span class='ace_invisible ace_invisible_tab'>" + o . stringRepeat ( this . TAB _CHAR , i ) + "</span>" ) : t . push ( o . stringRepeat ( " " , i ) ) ; if ( this . displayIndentGuides ) { this . $indentGuideRe = /\s\S| \t|\t |\s$/ ; var n = "ace_indent-guide" , r = "" , s = "" ; if ( this . showInvisibles ) { n += " ace_invisible" , r = " ace_invisible_space" , s = " ace_invisible_tab" ; var a = o . stringRepeat ( this . SPACE _CHAR , this . tabSize ) , l = o . stringRepeat ( this . TAB _CHAR , this . tabSize ) } else var a = o . stringRepeat ( " " , this . tabSize ) , l = a ; this . $tabStrings [ " " ] = "<span class='" + n + r + "'>" + a + "</span>" , this . $tabStrings [ " " ] = "<span class='" + n + s + "'>" + l + "</span>" } } , this . updateLines = function ( e , t , i ) { this . config . lastRow == e . lastRow && this . config . firstRow == e . firstRow || this . scrollLines ( e ) , this . config = e ; for ( var n = Math . max ( t , e . firstRow ) , r = Math . min ( i , e . lastRow ) , o = this . element . childNodes , s = 0 , a = e . firstRow ; n > a ; a ++ ) { var l = this . session . getFoldLine ( a ) ; if ( l ) { if ( l . containsRow ( n ) ) { n = l . start . row ; break } a = l . end . row } s ++ } for ( var a = n , l = this . session . getNextFoldLine ( a ) , c = l ? l . start . row : 1 / 0 ; ; ) { if ( a > c && ( a = l .
2016-04-16 16:43:43 +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 ) , 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 . $loop
if ( this . $updating ) return this . updateAnchors ( e ) ; var t = e ; if ( t . start . row === t . end . row && t . start . row === this . pos . row ) { 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 , y = function ( e ) { v = e . clientX , w = e . clientY } , A = 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 = A . 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 -- ) } ;
do l [ 0 > i ? "unshift" : "push" ] ( s ) , s = r [ o += i ] ; while ( s && s . row == t ) ; return l . length && l } } } var o = e ( "../line_widgets" ) . LineWidgets , s = e ( "../lib/dom" ) , a = e ( "../range" ) . Range ; 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 )
2016-04-10 03:00:33 +08:00
} , function ( e , t ) { ace . define ( "ace/ext/searchbox" , [ "require" , "exports" , "module" , "ace/lib/dom" , "ace/lib/lang" , "ace/lib/event" , "ace/keyboard/hash_handler" , "ace/lib/keys" ] , function ( e , t , i ) { "use strict" ; var n = e ( "../lib/dom" ) , r = e ( "../lib/lang" ) , o = e ( "../lib/event" ) , s = " .ace_search { background-color: #ddd; border: 1px solid #cbcbcb; border-top: 0 none; max-width: 325px; overflow: hidden; margin: 0; padding: 4px; padding-right: 6px; padding-bottom: 0; position: absolute; top: 0px; z-index: 99; white-space: normal; } .ace_search.left { border-left: 0 none; border-radius: 0px 0px 5px 0px; left: 0; } .ace_search.right { border-radius: 0px 0px 0px 5px; border-right: 0 none; right: 0; } .ace_search_form, .ace_replace_form { border-radius: 3px; border: 1px solid #cbcbcb; float: left; margin-bottom: 4px; overflow: hidden; } .ace_search_form.ace_nomatch { outline: 1px solid red; } .ace_search_field { background-color: white; border-right: 1px solid #cbcbcb; border: 0 none; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; float: left; height: 22px; outline: 0; padding: 0 7px; width: 214px; margin: 0; } .ace_searchbtn, .ace_replacebtn { background: #fff; border: 0 none; border-left: 1px solid #dcdcdc; cursor: pointer; float: left; height: 22px; margin: 0; position: relative; } .ace_searchbtn:last-child, .ace_replacebtn:last-child { border-top-right-radius: 3px; border-bottom-right-radius: 3px; } .ace_searchbtn:disabled { background: none; cursor: default; } .ace_searchbtn { background-position: 50% 50%; background-repeat: no-repeat; width: 27px; } .ace_searchbtn.prev { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); } .ace_searchbtn.next { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); } .ace_searchbtn_close { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0; border-radius: 50%; border: 0 none; color: #656565; cursor: pointer; float: right; font: 16px/16px Arial; height: 14px; margin: 5px 1px 9px 5px; padding: 0; text-align: center; width: 14px; } .ace_searchbtn_close:hover { background-color: #656565; background-position: 50% 100%; color: white; } .ace_replacebtn.prev { width: 54px } .ace_replacebtn.next { width: 27px } .ace_button { margin-left: 2px; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; -o-user-select: none; -ms-user-select: none; user-select: none; overflow: hidden; opacity: 0.7; border: 1px solid rgba(100,100,100,0.23); padding: 1px; -moz-box-sizing: border-box; box-sizing: border-box; color: black; } .ace_button:hover { background-color: #eee; opacity:1; } .ace_button:active { background-color: #ddd; } .ace_button.checked { border-color: #3399ff; opacity:1; } .ace_search_options{ margin-bottom: 3px; text-align: right; -webkit-user-select: none; -moz-user-select: none; -o-user-select: none; -ms-user-select: none; user-select: none; }" , a = e ( "../keyboard/hash_handler" ) . HashHandler , l = e ( "../lib/keys" ) ; n . importCssString ( s , "ace_searchbox" ) ; var c = ' < div class = "ace_search right" > < button type = "button" action = "hide" class = "ace_searchbtn_close" > < / b u t t o n > < d i v c l a s s = " a c e _ s e a r c h _ f o r m " > < i n p u t c l a s s = " a c e _ s e a r c h _ f i e l d " p l a c e h o l d e r = " S e a r c h f o r " s p e l l c h e c k = " f a l s e " > < / i n p u t > < b u t t o n t y p e = " b u t t o n " a c t i o n = " f i n d N e x t " c l a s s = " a c e _ s e a r c h b t n n e x t " > < / b u t t o n > < b u t t o n t y p e = " b u t t o n " a c t i o n = " f i n d P r e v " c l a s s = " a c e _ s e a r c h b t n p r e v " > < / b u t t o n > < b u t t o n t y p e = " b u t t o n " a c t i o n = " f i n d A l l " c l a s s = " a c e _ s e a r c h b t n " t i t l e = " A l t - E n t e r " > A l l < / b u t t o n > < / d i v > < d i v c l a s s =
2014-05-30 04:13:37 +08:00
//# sourceMappingURL=jsoneditor.map