2012-06-20 13:25:41 -07:00
// Underscore.js 1.3.1
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
// Underscore is freely distributable under the MIT license.
// Portions of Underscore are inspired or borrowed from Prototype,
// Oliver Steele's Functional, and John Resig's Micro-Templating.
// For all details and documentation:
// http://documentcloud.github.com/underscore
( function ( ) { function q ( a , c , d ) { if ( a === c ) return a !== 0 || 1 / a == 1 / c ; if ( a == null || c == null ) return a === c ; if ( a . _chain ) a = a . _wrapped ; if ( c . _chain ) c = c . _wrapped ; if ( a . isEqual && b . isFunction ( a . isEqual ) ) return a . isEqual ( c ) ; if ( c . isEqual && b . isFunction ( c . isEqual ) ) return c . isEqual ( a ) ; var e = l . call ( a ) ; if ( e != l . call ( c ) ) return false ; switch ( e ) { case "[object String]" : return a == String ( c ) ; case "[object Number]" : return a != + a ? c != + c : a == 0 ? 1 / a == 1 / c : a == + c ; case "[object Date]" : case "[object Boolean]" : return + a == + c ; case "[object RegExp]" : return a . source ==
c . source && a . global == c . global && a . multiline == c . multiline && a . ignoreCase == c . ignoreCase } if ( typeof a != "object" || typeof c != "object" ) return false ; for ( var f = d . length ; f -- ; ) if ( d [ f ] == a ) return true ; d . push ( a ) ; var f = 0 , g = true ; if ( e == "[object Array]" ) { if ( f = a . length , g = f == c . length ) for ( ; f -- ; ) if ( ! ( g = f in a == f in c && q ( a [ f ] , c [ f ] , d ) ) ) break } else { if ( "constructor" in a != "constructor" in c || a . constructor != c . constructor ) return false ; for ( var h in a ) if ( b . has ( a , h ) && ( f ++ , ! ( g = b . has ( c , h ) && q ( a [ h ] , c [ h ] , d ) ) ) ) break ; if ( g ) { for ( h in c ) if ( b . has ( c ,
h ) && ! f -- ) break ; g = ! f } } d . pop ( ) ; return g } var r = this , G = r . _ , n = { } , k = Array . prototype , o = Object . prototype , i = k . slice , H = k . unshift , l = o . toString , I = o . hasOwnProperty , w = k . forEach , x = k . map , y = k . reduce , z = k . reduceRight , A = k . filter , B = k . every , C = k . some , p = k . indexOf , D = k . lastIndexOf , o = Array . isArray , J = Object . keys , s = Function . prototype . bind , b = function ( a ) { return new m ( a ) } ; if ( typeof exports !== "undefined" ) { if ( typeof module !== "undefined" && module . exports ) exports = module . exports = b ; exports . _ = b } else r . _ = b ; b . VERSION = "1.3.1" ; var j = b . each =
b . forEach = function ( a , c , d ) { if ( a != null ) if ( w && a . forEach === w ) a . forEach ( c , d ) ; else if ( a . length === + a . length ) for ( var e = 0 , f = a . length ; e < f ; e ++ ) { if ( e in a && c . call ( d , a [ e ] , e , a ) === n ) break } else for ( e in a ) if ( b . has ( a , e ) && c . call ( d , a [ e ] , e , a ) === n ) break } ; b . map = b . collect = function ( a , c , b ) { var e = [ ] ; if ( a == null ) return e ; if ( x && a . map === x ) return a . map ( c , b ) ; j ( a , function ( a , g , h ) { e [ e . length ] = c . call ( b , a , g , h ) } ) ; if ( a . length === + a . length ) e . length = a . length ; return e } ; b . reduce = b . foldl = b . inject = function ( a , c , d , e ) { var f = arguments . length > 2 ; a ==
null && ( a = [ ] ) ; if ( y && a . reduce === y ) return e && ( c = b . bind ( c , e ) ) , f ? a . reduce ( c , d ) : a . reduce ( c ) ; j ( a , function ( a , b , i ) { f ? d = c . call ( e , d , a , b , i ) : ( d = a , f = true ) } ) ; if ( ! f ) throw new TypeError ( "Reduce of empty array with no initial value" ) ; return d } ; b . reduceRight = b . foldr = function ( a , c , d , e ) { var f = arguments . length > 2 ; a == null && ( a = [ ] ) ; if ( z && a . reduceRight === z ) return e && ( c = b . bind ( c , e ) ) , f ? a . reduceRight ( c , d ) : a . reduceRight ( c ) ; var g = b . toArray ( a ) . reverse ( ) ; e && ! f && ( c = b . bind ( c , e ) ) ; return f ? b . reduce ( g , c , d , e ) : b . reduce ( g , c ) } ; b . find = b . detect =
function ( a , c , b ) { var e ; E ( a , function ( a , g , h ) { if ( c . call ( b , a , g , h ) ) return e = a , true } ) ; return e } ; b . filter = b . select = function ( a , c , b ) { var e = [ ] ; if ( a == null ) return e ; if ( A && a . filter === A ) return a . filter ( c , b ) ; j ( a , function ( a , g , h ) { c . call ( b , a , g , h ) && ( e [ e . length ] = a ) } ) ; return e } ; b . reject = function ( a , c , b ) { var e = [ ] ; if ( a == null ) return e ; j ( a , function ( a , g , h ) { c . call ( b , a , g , h ) || ( e [ e . length ] = a ) } ) ; return e } ; b . every = b . all = function ( a , c , b ) { var e = true ; if ( a == null ) return e ; if ( B && a . every === B ) return a . every ( c , b ) ; j ( a , function ( a , g , h ) { if ( ! ( e =
e && c . call ( b , a , g , h ) ) ) return n } ) ; return e } ; var E = b . some = b . any = function ( a , c , d ) { c || ( c = b . identity ) ; var e = false ; if ( a == null ) return e ; if ( C && a . some === C ) return a . some ( c , d ) ; j ( a , function ( a , b , h ) { if ( e || ( e = c . call ( d , a , b , h ) ) ) return n } ) ; return ! ! e } ; b . include = b . contains = function ( a , c ) { var b = false ; if ( a == null ) return b ; return p && a . indexOf === p ? a . indexOf ( c ) != - 1 : b = E ( a , function ( a ) { return a === c } ) } ; b . invoke = function ( a , c ) { var d = i . call ( arguments , 2 ) ; return b . map ( a , function ( a ) { return ( b . isFunction ( c ) ? c || a : a [ c ] ) . apply ( a , d ) } ) } ; b . pluck =
function ( a , c ) { return b . map ( a , function ( a ) { return a [ c ] } ) } ; b . max = function ( a , c , d ) { if ( ! c && b . isArray ( a ) ) return Math . max . apply ( Math , a ) ; if ( ! c && b . isEmpty ( a ) ) return - Infinity ; var e = { computed : - Infinity } ; j ( a , function ( a , b , h ) { b = c ? c . call ( d , a , b , h ) : a ; b >= e . computed && ( e = { value : a , computed : b } ) } ) ; return e . value } ; b . min = function ( a , c , d ) { if ( ! c && b . isArray ( a ) ) return Math . min . apply ( Math , a ) ; if ( ! c && b . isEmpty ( a ) ) return Infinity ; var e = { computed : Infinity } ; j ( a , function ( a , b , h ) { b = c ? c . call ( d , a , b , h ) : a ; b < e . computed && ( e = { value : a , computed : b } ) } ) ;
return e . value } ; b . shuffle = function ( a ) { var b = [ ] , d ; j ( a , function ( a , f ) { f == 0 ? b [ 0 ] = a : ( d = Math . floor ( Math . random ( ) * ( f + 1 ) ) , b [ f ] = b [ d ] , b [ d ] = a ) } ) ; return b } ; b . sortBy = function ( a , c , d ) { return b . pluck ( b . map ( a , function ( a , b , g ) { return { value : a , criteria : c . call ( d , a , b , g ) } } ) . sort ( function ( a , b ) { var c = a . criteria , d = b . criteria ; return c < d ? - 1 : c > d ? 1 : 0 } ) , "value" ) } ; b . groupBy = function ( a , c ) { var d = { } , e = b . isFunction ( c ) ? c : function ( a ) { return a [ c ] } ; j ( a , function ( a , b ) { var c = e ( a , b ) ; ( d [ c ] || ( d [ c ] = [ ] ) ) . push ( a ) } ) ; return d } ; b . sortedIndex = function ( a ,
c , d ) { d || ( d = b . identity ) ; for ( var e = 0 , f = a . length ; e < f ; ) { var g = e + f >> 1 ; d ( a [ g ] ) < d ( c ) ? e = g + 1 : f = g } return e } ; b . toArray = function ( a ) { return ! a ? [ ] : a . toArray ? a . toArray ( ) : b . isArray ( a ) ? i . call ( a ) : b . isArguments ( a ) ? i . call ( a ) : b . values ( a ) } ; b . size = function ( a ) { return b . toArray ( a ) . length } ; b . first = b . head = function ( a , b , d ) { return b != null && ! d ? i . call ( a , 0 , b ) : a [ 0 ] } ; b . initial = function ( a , b , d ) { return i . call ( a , 0 , a . length - ( b == null || d ? 1 : b ) ) } ; b . last = function ( a , b , d ) { return b != null && ! d ? i . call ( a , Math . max ( a . length - b , 0 ) ) : a [ a . length - 1 ] } ; b . rest =
b . tail = function ( a , b , d ) { return i . call ( a , b == null || d ? 1 : b ) } ; b . compact = function ( a ) { return b . filter ( a , function ( a ) { return ! ! a } ) } ; b . flatten = function ( a , c ) { return b . reduce ( a , function ( a , e ) { if ( b . isArray ( e ) ) return a . concat ( c ? e : b . flatten ( e ) ) ; a [ a . length ] = e ; return a } , [ ] ) } ; b . without = function ( a ) { return b . difference ( a , i . call ( arguments , 1 ) ) } ; b . uniq = b . unique = function ( a , c , d ) { var d = d ? b . map ( a , d ) : a , e = [ ] ; b . reduce ( d , function ( d , g , h ) { if ( 0 == h || ( c === true ? b . last ( d ) != g : ! b . include ( d , g ) ) ) d [ d . length ] = g , e [ e . length ] = a [ h ] ; return d } , [ ] ) ;
return e } ; b . union = function ( ) { return b . uniq ( b . flatten ( arguments , true ) ) } ; b . intersection = b . intersect = function ( a ) { var c = i . call ( arguments , 1 ) ; return b . filter ( b . uniq ( a ) , function ( a ) { return b . every ( c , function ( c ) { return b . indexOf ( c , a ) >= 0 } ) } ) } ; b . difference = function ( a ) { var c = b . flatten ( i . call ( arguments , 1 ) ) ; return b . filter ( a , function ( a ) { return ! b . include ( c , a ) } ) } ; b . zip = function ( ) { for ( var a = i . call ( arguments ) , c = b . max ( b . pluck ( a , "length" ) ) , d = Array ( c ) , e = 0 ; e < c ; e ++ ) d [ e ] = b . pluck ( a , "" + e ) ; return d } ; b . indexOf = function ( a , c ,
d ) { if ( a == null ) return - 1 ; var e ; if ( d ) return d = b . sortedIndex ( a , c ) , a [ d ] === c ? d : - 1 ; if ( p && a . indexOf === p ) return a . indexOf ( c ) ; for ( d = 0 , e = a . length ; d < e ; d ++ ) if ( d in a && a [ d ] === c ) return d ; return - 1 } ; b . lastIndexOf = function ( a , b ) { if ( a == null ) return - 1 ; if ( D && a . lastIndexOf === D ) return a . lastIndexOf ( b ) ; for ( var d = a . length ; d -- ; ) if ( d in a && a [ d ] === b ) return d ; return - 1 } ; b . range = function ( a , b , d ) { arguments . length <= 1 && ( b = a || 0 , a = 0 ) ; for ( var d = arguments [ 2 ] || 1 , e = Math . max ( Math . ceil ( ( b - a ) / d ) , 0 ) , f = 0 , g = Array ( e ) ; f < e ; ) g [ f ++ ] = a , a += d ; return g } ;
var F = function ( ) { } ; b . bind = function ( a , c ) { var d , e ; if ( a . bind === s && s ) return s . apply ( a , i . call ( arguments , 1 ) ) ; if ( ! b . isFunction ( a ) ) throw new TypeError ; e = i . call ( arguments , 2 ) ; return d = function ( ) { if ( ! ( this instanceof d ) ) return a . apply ( c , e . concat ( i . call ( arguments ) ) ) ; F . prototype = a . prototype ; var b = new F , g = a . apply ( b , e . concat ( i . call ( arguments ) ) ) ; return Object ( g ) === g ? g : b } } ; b . bindAll = function ( a ) { var c = i . call ( arguments , 1 ) ; c . length == 0 && ( c = b . functions ( a ) ) ; j ( c , function ( c ) { a [ c ] = b . bind ( a [ c ] , a ) } ) ; return a } ; b . memoize = function ( a ,
c ) { var d = { } ; c || ( c = b . identity ) ; return function ( ) { var e = c . apply ( this , arguments ) ; return b . has ( d , e ) ? d [ e ] : d [ e ] = a . apply ( this , arguments ) } } ; b . delay = function ( a , b ) { var d = i . call ( arguments , 2 ) ; return setTimeout ( function ( ) { return a . apply ( a , d ) } , b ) } ; b . defer = function ( a ) { return b . delay . apply ( b , [ a , 1 ] . concat ( i . call ( arguments , 1 ) ) ) } ; b . throttle = function ( a , c ) { var d , e , f , g , h , i = b . debounce ( function ( ) { h = g = false } , c ) ; return function ( ) { d = this ; e = arguments ; var b ; f || ( f = setTimeout ( function ( ) { f = null ; h && a . apply ( d , e ) ; i ( ) } , c ) ) ; g ? h = true :
a . apply ( d , e ) ; i ( ) ; g = true } } ; b . debounce = function ( a , b ) { var d ; return function ( ) { var e = this , f = arguments ; clearTimeout ( d ) ; d = setTimeout ( function ( ) { d = null ; a . apply ( e , f ) } , b ) } } ; b . once = function ( a ) { var b = false , d ; return function ( ) { if ( b ) return d ; b = true ; return d = a . apply ( this , arguments ) } } ; b . wrap = function ( a , b ) { return function ( ) { var d = [ a ] . concat ( i . call ( arguments , 0 ) ) ; return b . apply ( this , d ) } } ; b . compose = function ( ) { var a = arguments ; return function ( ) { for ( var b = arguments , d = a . length - 1 ; d >= 0 ; d -- ) b = [ a [ d ] . apply ( this , b ) ] ; return b [ 0 ] } } ;
b . after = function ( a , b ) { return a <= 0 ? b ( ) : function ( ) { if ( -- a < 1 ) return b . apply ( this , arguments ) } } ; b . keys = J || function ( a ) { if ( a !== Object ( a ) ) throw new TypeError ( "Invalid object" ) ; var c = [ ] , d ; for ( d in a ) b . has ( a , d ) && ( c [ c . length ] = d ) ; return c } ; b . values = function ( a ) { return b . map ( a , b . identity ) } ; b . functions = b . methods = function ( a ) { var c = [ ] , d ; for ( d in a ) b . isFunction ( a [ d ] ) && c . push ( d ) ; return c . sort ( ) } ; b . extend = function ( a ) { j ( i . call ( arguments , 1 ) , function ( b ) { for ( var d in b ) a [ d ] = b [ d ] } ) ; return a } ; b . defaults = function ( a ) { j ( i . call ( arguments ,
1 ) , function ( b ) { for ( var d in b ) a [ d ] == null && ( a [ d ] = b [ d ] ) } ) ; return a } ; b . clone = function ( a ) { return ! b . isObject ( a ) ? a : b . isArray ( a ) ? a . slice ( ) : b . extend ( { } , a ) } ; b . tap = function ( a , b ) { b ( a ) ; return a } ; b . isEqual = function ( a , b ) { return q ( a , b , [ ] ) } ; b . isEmpty = function ( a ) { if ( b . isArray ( a ) || b . isString ( a ) ) return a . length === 0 ; for ( var c in a ) if ( b . has ( a , c ) ) return false ; return true } ; b . isElement = function ( a ) { return ! ! ( a && a . nodeType == 1 ) } ; b . isArray = o || function ( a ) { return l . call ( a ) == "[object Array]" } ; b . isObject = function ( a ) { return a === Object ( a ) } ;
b . isArguments = function ( a ) { return l . call ( a ) == "[object Arguments]" } ; if ( ! b . isArguments ( arguments ) ) b . isArguments = function ( a ) { return ! ( ! a || ! b . has ( a , "callee" ) ) } ; b . isFunction = function ( a ) { return l . call ( a ) == "[object Function]" } ; b . isString = function ( a ) { return l . call ( a ) == "[object String]" } ; b . isNumber = function ( a ) { return l . call ( a ) == "[object Number]" } ; b . isNaN = function ( a ) { return a !== a } ; b . isBoolean = function ( a ) { return a === true || a === false || l . call ( a ) == "[object Boolean]" } ; b . isDate = function ( a ) { return l . call ( a ) == "[object Date]" } ;
b . isRegExp = function ( a ) { return l . call ( a ) == "[object RegExp]" } ; b . isNull = function ( a ) { return a === null } ; b . isUndefined = function ( a ) { return a === void 0 } ; b . has = function ( a , b ) { return I . call ( a , b ) } ; b . noConflict = function ( ) { r . _ = G ; return this } ; b . identity = function ( a ) { return a } ; b . times = function ( a , b , d ) { for ( var e = 0 ; e < a ; e ++ ) b . call ( d , e ) } ; b . escape = function ( a ) { return ( "" + a ) . replace ( /&/g , "&" ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) . replace ( /"/g , """ ) . replace ( /'/g , "'" ) . replace ( /\//g , "/" ) } ; b . mixin = function ( a ) { j ( b . functions ( a ) ,
function ( c ) { K ( c , b [ c ] = a [ c ] ) } ) } ; var L = 0 ; b . uniqueId = function ( a ) { var b = L ++ ; return a ? a + b : b } ; b . templateSettings = { evaluate : /<%([\s\S]+?)%>/g , interpolate : /<%=([\s\S]+?)%>/g , escape : /<%-([\s\S]+?)%>/g } ; var t = /.^/ , u = function ( a ) { return a . replace ( /\\\\/g , "\\" ) . replace ( /\\'/g , "'" ) } ; b . template = function ( a , c ) { var d = b . templateSettings , d = "var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('" + a . replace ( /\\/g , "\\\\" ) . replace ( /'/g , "\\'" ) . replace ( d . escape || t , function ( a , b ) { return "',_.escape(" +
u ( b ) + "),'" } ) . replace ( d . interpolate || t , function ( a , b ) { return "'," + u ( b ) + ",'" } ) . replace ( d . evaluate || t , function ( a , b ) { return "');" + u ( b ) . replace ( /[\r\n\t]/g , " " ) + ";__p.push('" } ) . replace ( /\r/g , "\\r" ) . replace ( /\n/g , "\\n" ) . replace ( /\t/g , "\\t" ) + "');}return __p.join('');" , e = new Function ( "obj" , "_" , d ) ; return c ? e ( c , b ) : function ( a ) { return e . call ( this , a , b ) } } ; b . chain = function ( a ) { return b ( a ) . chain ( ) } ; var m = function ( a ) { this . _wrapped = a } ; b . prototype = m . prototype ; var v = function ( a , c ) { return c ? b ( a ) . chain ( ) : a } , K = function ( a , c ) { m . prototype [ a ] =
function ( ) { var a = i . call ( arguments ) ; H . call ( a , this . _wrapped ) ; return v ( c . apply ( b , a ) , this . _chain ) } } ; b . mixin ( b ) ; j ( "pop,push,reverse,shift,sort,splice,unshift" . split ( "," ) , function ( a ) { var b = k [ a ] ; m . prototype [ a ] = function ( ) { var d = this . _wrapped ; b . apply ( d , arguments ) ; var e = d . length ; ( a == "shift" || a == "splice" ) && e === 0 && delete d [ 0 ] ; return v ( d , this . _chain ) } } ) ; j ( [ "concat" , "join" , "slice" ] , function ( a ) { var b = k [ a ] ; m . prototype [ a ] = function ( ) { return v ( b . apply ( this . _wrapped , arguments ) , this . _chain ) } } ) ; m . prototype . chain = function ( ) { this . _chain =
true ; return this } ; m . prototype . value = function ( ) { return this . _wrapped } } ) . call ( this ) ;
var JSON ; if ( ! JSON ) { JSON = { } ; }
( function ( ) { "use strict" ; function f ( n ) { return n < 10 ? '0' + n : n ; }
if ( typeof Date . prototype . toJSON !== 'function' ) { Date . prototype . toJSON = function ( key ) { return isFinite ( this . valueOf ( ) ) ? this . getUTCFullYear ( ) + '-' +
f ( this . getUTCMonth ( ) + 1 ) + '-' +
f ( this . getUTCDate ( ) ) + 'T' +
f ( this . getUTCHours ( ) ) + ':' +
f ( this . getUTCMinutes ( ) ) + ':' +
f ( this . getUTCSeconds ( ) ) + 'Z' : null ; } ; String . prototype . toJSON = Number . prototype . toJSON = Boolean . prototype . toJSON = function ( key ) { return this . valueOf ( ) ; } ; }
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g , escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g , gap , indent , meta = { '\b' : '\\b' , '\t' : '\\t' , '\n' : '\\n' , '\f' : '\\f' , '\r' : '\\r' , '"' : '\\"' , '\\' : '\\\\' } , rep ; function quote ( string ) { escapable . lastIndex = 0 ; return escapable . test ( string ) ? '"' + string . replace ( escapable , function ( a ) { var c = meta [ a ] ; return typeof c === 'string' ? c : '\\u' + ( '0000' + a . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) ; } ) + '"' : '"' + string + '"' ; }
function str ( key , holder ) { var i , k , v , length , mind = gap , partial , value = holder [ key ] ; if ( value && typeof value === 'object' && typeof value . toJSON === 'function' ) { value = value . toJSON ( key ) ; }
if ( typeof rep === 'function' ) { value = rep . call ( holder , key , value ) ; }
switch ( typeof value ) { case 'string' : return quote ( value ) ; case 'number' : return isFinite ( value ) ? String ( value ) : 'null' ; case 'boolean' : case 'null' : return String ( value ) ; case 'object' : if ( ! value ) { return 'null' ; }
gap += indent ; partial = [ ] ; if ( Object . prototype . toString . apply ( value ) === '[object Array]' ) { length = value . length ; for ( i = 0 ; i < length ; i += 1 ) { partial [ i ] = str ( i , value ) || 'null' ; }
v = partial . length === 0 ? '[]' : gap ? '[\n' + gap + partial . join ( ',\n' + gap ) + '\n' + mind + ']' : '[' + partial . join ( ',' ) + ']' ; gap = mind ; return v ; }
if ( rep && typeof rep === 'object' ) { length = rep . length ; for ( i = 0 ; i < length ; i += 1 ) { if ( typeof rep [ i ] === 'string' ) { k = rep [ i ] ; v = str ( k , value ) ; if ( v ) { partial . push ( quote ( k ) + ( gap ? ': ' : ':' ) + v ) ; } } } } else { for ( k in value ) { if ( Object . prototype . hasOwnProperty . call ( value , k ) ) { v = str ( k , value ) ; if ( v ) { partial . push ( quote ( k ) + ( gap ? ': ' : ':' ) + v ) ; } } } }
v = partial . length === 0 ? '{}' : gap ? '{\n' + gap + partial . join ( ',\n' + gap ) + '\n' + mind + '}' : '{' + partial . join ( ',' ) + '}' ; gap = mind ; return v ; } }
if ( typeof JSON . stringify !== 'function' ) { JSON . stringify = function ( value , replacer , space ) { var i ; gap = '' ; indent = '' ; if ( typeof space === 'number' ) { for ( i = 0 ; i < space ; i += 1 ) { indent += ' ' ; } } else if ( typeof space === 'string' ) { indent = space ; }
rep = replacer ; if ( replacer && typeof replacer !== 'function' && ( typeof replacer !== 'object' || typeof replacer . length !== 'number' ) ) { throw new Error ( 'JSON.stringify' ) ; }
return str ( '' , { '' : value } ) ; } ; }
if ( typeof JSON . parse !== 'function' ) { JSON . parse = function ( text , reviver ) { var j ; function walk ( holder , key ) { var k , v , value = holder [ key ] ; if ( value && typeof value === 'object' ) { for ( k in value ) { if ( Object . prototype . hasOwnProperty . call ( value , k ) ) { v = walk ( value , k ) ; if ( v !== undefined ) { value [ k ] = v ; } else { delete value [ k ] ; } } } }
return reviver . call ( holder , key , value ) ; }
text = String ( text ) ; cx . lastIndex = 0 ; if ( cx . test ( text ) ) { text = text . replace ( cx , function ( a ) { return '\\u' +
( '0000' + a . charCodeAt ( 0 ) . toString ( 16 ) ) . slice ( - 4 ) ; } ) ; }
if ( /^[\],:{}\s]*$/ . test ( text . replace ( /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g , '@' ) . replace ( /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g , ']' ) . replace ( /(?:^|:|,)(?:\s*\[)+/g , '' ) ) ) { j = eval ( '(' + text + ')' ) ; return typeof reviver === 'function' ? walk ( { '' : j } , '' ) : j ; }
throw new SyntaxError ( 'JSON.parse' ) ; } ; } } ( ) ) ;
2012-07-18 08:35:52 -07:00
// Backbone.js 0.9.2
2012-06-20 13:25:41 -07:00
// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
// Backbone may be freely distributed under the MIT license.
// For all details and documentation:
// http://backbonejs.org
2012-07-18 08:35:52 -07:00
( function ( ) { var l = this , y = l . Backbone , z = Array . prototype . slice , A = Array . prototype . splice , g ; g = "undefined" !== typeof exports ? exports : l . Backbone = { } ; g . VERSION = "0.9.2" ; var f = l . _ ; ! f && "undefined" !== typeof require && ( f = require ( "underscore" ) ) ; var i = l . jQuery || l . Zepto || l . ender ; g . setDomLibrary = function ( a ) { i = a } ; g . noConflict = function ( ) { l . Backbone = y ; return this } ; g . emulateHTTP = ! 1 ; g . emulateJSON = ! 1 ; var p = /\s+/ , k = g . Events = { on : function ( a , b , c ) { var d , e , f , g , j ; if ( ! b ) return this ; a = a . split ( p ) ; for ( d = this . _callbacks || ( this . _callbacks =
{ } ) ; e = a . shift ( ) ; ) f = ( j = d [ e ] ) ? j . tail : { } , f . next = g = { } , f . context = c , f . callback = b , d [ e ] = { tail : g , next : j ? j . next : f } ; return this } , off : function ( a , b , c ) { var d , e , h , g , j , q ; if ( e = this . _callbacks ) { if ( ! a && ! b && ! c ) return delete this . _callbacks , this ; for ( a = a ? a . split ( p ) : f . keys ( e ) ; d = a . shift ( ) ; ) if ( h = e [ d ] , delete e [ d ] , h && ( b || c ) ) for ( g = h . tail ; ( h = h . next ) !== g ; ) if ( j = h . callback , q = h . context , b && j !== b || c && q !== c ) this . on ( d , j , q ) ; return this } } , trigger : function ( a ) { var b , c , d , e , f , g ; if ( ! ( d = this . _callbacks ) ) return this ; f = d . all ; a = a . split ( p ) ; for ( g =
z . call ( arguments , 1 ) ; b = a . shift ( ) ; ) { if ( c = d [ b ] ) for ( e = c . tail ; ( c = c . next ) !== e ; ) c . callback . apply ( c . context || this , g ) ; if ( c = f ) { e = c . tail ; for ( b = [ b ] . concat ( g ) ; ( c = c . next ) !== e ; ) c . callback . apply ( c . context || this , b ) } } return this } } ; k . bind = k . on ; k . unbind = k . off ; var o = g . Model = function ( a , b ) { var c ; a || ( a = { } ) ; b && b . parse && ( a = this . parse ( a ) ) ; if ( c = n ( this , "defaults" ) ) a = f . extend ( { } , c , a ) ; b && b . collection && ( this . collection = b . collection ) ; this . attributes = { } ; this . _escapedAttributes = { } ; this . cid = f . uniqueId ( "c" ) ; this . changed = { } ; this . _silent =
{ } ; this . _pending = { } ; this . set ( a , { silent : ! 0 } ) ; this . changed = { } ; this . _silent = { } ; this . _pending = { } ; this . _previousAttributes = f . clone ( this . attributes ) ; this . initialize . apply ( this , arguments ) } ; f . extend ( o . prototype , k , { changed : null , _silent : null , _pending : null , idAttribute : "id" , initialize : function ( ) { } , toJSON : function ( ) { return f . clone ( this . attributes ) } , get : function ( a ) { return this . attributes [ a ] } , escape : function ( a ) { var b ; if ( b = this . _escapedAttributes [ a ] ) return b ; b = this . get ( a ) ; return this . _escapedAttributes [ a ] = f . escape ( null ==
b ? "" : "" + b ) } , has : function ( a ) { return null != this . get ( a ) } , set : function ( a , b , c ) { var d , e ; f . isObject ( a ) || null == a ? ( d = a , c = b ) : ( d = { } , d [ a ] = b ) ; c || ( c = { } ) ; if ( ! d ) return this ; d instanceof o && ( d = d . attributes ) ; if ( c . unset ) for ( e in d ) d [ e ] = void 0 ; if ( ! this . _validate ( d , c ) ) return ! 1 ; this . idAttribute in d && ( this . id = d [ this . idAttribute ] ) ; var b = c . changes = { } , h = this . attributes , g = this . _escapedAttributes , j = this . _previousAttributes || { } ; for ( e in d ) { a = d [ e ] ; if ( ! f . isEqual ( h [ e ] , a ) || c . unset && f . has ( h , e ) ) delete g [ e ] , ( c . silent ? this . _silent :
b ) [ e ] = ! 0 ; c . unset ? delete h [ e ] : h [ e ] = a ; ! f . isEqual ( j [ e ] , a ) || f . has ( h , e ) != f . has ( j , e ) ? ( this . changed [ e ] = a , c . silent || ( this . _pending [ e ] = ! 0 ) ) : ( delete this . changed [ e ] , delete this . _pending [ e ] ) } c . silent || this . change ( c ) ; return this } , unset : function ( a , b ) { ( b || ( b = { } ) ) . unset = ! 0 ; return this . set ( a , null , b ) } , clear : function ( a ) { ( a || ( a = { } ) ) . unset = ! 0 ; return this . set ( f . clone ( this . attributes ) , a ) } , fetch : function ( a ) { var a = a ? f . clone ( a ) : { } , b = this , c = a . success ; a . success = function ( d , e , f ) { if ( ! b . set ( b . parse ( d , f ) , a ) ) return ! 1 ; c && c ( b , d ) } ;
a . error = g . wrapError ( a . error , b , a ) ; return ( this . sync || g . sync ) . call ( this , "read" , this , a ) } , save : function ( a , b , c ) { var d , e ; f . isObject ( a ) || null == a ? ( d = a , c = b ) : ( d = { } , d [ a ] = b ) ; c = c ? f . clone ( c ) : { } ; if ( c . wait ) { if ( ! this . _validate ( d , c ) ) return ! 1 ; e = f . clone ( this . attributes ) } a = f . extend ( { } , c , { silent : ! 0 } ) ; if ( d && ! this . set ( d , c . wait ? a : c ) ) return ! 1 ; var h = this , i = c . success ; c . success = function ( a , b , e ) { b = h . parse ( a , e ) ; if ( c . wait ) { delete c . wait ; b = f . extend ( d || { } , b ) } if ( ! h . set ( b , c ) ) return false ; i ? i ( h , a ) : h . trigger ( "sync" , h , a , c ) } ; c . error = g . wrapError ( c . error ,
h , c ) ; b = this . isNew ( ) ? "create" : "update" ; b = ( this . sync || g . sync ) . call ( this , b , this , c ) ; c . wait && this . set ( e , a ) ; return b } , destroy : function ( a ) { var a = a ? f . clone ( a ) : { } , b = this , c = a . success , d = function ( ) { b . trigger ( "destroy" , b , b . collection , a ) } ; if ( this . isNew ( ) ) return d ( ) , ! 1 ; a . success = function ( e ) { a . wait && d ( ) ; c ? c ( b , e ) : b . trigger ( "sync" , b , e , a ) } ; a . error = g . wrapError ( a . error , b , a ) ; var e = ( this . sync || g . sync ) . call ( this , "delete" , this , a ) ; a . wait || d ( ) ; return e } , url : function ( ) { var a = n ( this , "urlRoot" ) || n ( this . collection , "url" ) || t ( ) ;
return this . isNew ( ) ? a : a + ( "/" == a . charAt ( a . length - 1 ) ? "" : "/" ) + encodeURIComponent ( this . id ) } , parse : function ( a ) { return a } , clone : function ( ) { return new this . constructor ( this . attributes ) } , isNew : function ( ) { return null == this . id } , change : function ( a ) { a || ( a = { } ) ; var b = this . _changing ; this . _changing = ! 0 ; for ( var c in this . _silent ) this . _pending [ c ] = ! 0 ; var d = f . extend ( { } , a . changes , this . _silent ) ; this . _silent = { } ; for ( c in d ) this . trigger ( "change:" + c , this , this . get ( c ) , a ) ; if ( b ) return this ; for ( ; ! f . isEmpty ( this . _pending ) ; ) { this . _pending =
{ } ; this . trigger ( "change" , this , a ) ; for ( c in this . changed ) ! this . _pending [ c ] && ! this . _silent [ c ] && delete this . changed [ c ] ; this . _previousAttributes = f . clone ( this . attributes ) } this . _changing = ! 1 ; return this } , hasChanged : function ( a ) { return ! arguments . length ? ! f . isEmpty ( this . changed ) : f . has ( this . changed , a ) } , changedAttributes : function ( a ) { if ( ! a ) return this . hasChanged ( ) ? f . clone ( this . changed ) : ! 1 ; var b , c = ! 1 , d = this . _previousAttributes , e ; for ( e in a ) if ( ! f . isEqual ( d [ e ] , b = a [ e ] ) ) ( c || ( c = { } ) ) [ e ] = b ; return c } , previous : function ( a ) { return ! arguments . length ||
! this . _previousAttributes ? null : this . _previousAttributes [ a ] } , previousAttributes : function ( ) { return f . clone ( this . _previousAttributes ) } , isValid : function ( ) { return ! this . validate ( this . attributes ) } , _validate : function ( a , b ) { if ( b . silent || ! this . validate ) return ! 0 ; var a = f . extend ( { } , this . attributes , a ) , c = this . validate ( a , b ) ; if ( ! c ) return ! 0 ; b && b . error ? b . error ( this , c , b ) : this . trigger ( "error" , this , c , b ) ; return ! 1 } } ) ; var r = g . Collection = function ( a , b ) { b || ( b = { } ) ; b . model && ( this . model = b . model ) ; b . comparator && ( this . comparator = b . comparator ) ;
this . _reset ( ) ; this . initialize . apply ( this , arguments ) ; a && this . reset ( a , { silent : ! 0 , parse : b . parse } ) } ; f . extend ( r . prototype , k , { model : o , initialize : function ( ) { } , toJSON : function ( a ) { return this . map ( function ( b ) { return b . toJSON ( a ) } ) } , add : function ( a , b ) { var c , d , e , g , i , j = { } , k = { } , l = [ ] ; b || ( b = { } ) ; a = f . isArray ( a ) ? a . slice ( ) : [ a ] ; c = 0 ; for ( d = a . length ; c < d ; c ++ ) { if ( ! ( e = a [ c ] = this . _prepareModel ( a [ c ] , b ) ) ) throw Error ( "Can't add an invalid model to a collection" ) ; g = e . cid ; i = e . id ; j [ g ] || this . _byCid [ g ] || null != i && ( k [ i ] || this . _byId [ i ] ) ?
l . push ( c ) : j [ g ] = k [ i ] = e } for ( c = l . length ; c -- ; ) a . splice ( l [ c ] , 1 ) ; c = 0 ; for ( d = a . length ; c < d ; c ++ ) ( e = a [ c ] ) . on ( "all" , this . _onModelEvent , this ) , this . _byCid [ e . cid ] = e , null != e . id && ( this . _byId [ e . id ] = e ) ; this . length += d ; A . apply ( this . models , [ null != b . at ? b . at : this . models . length , 0 ] . concat ( a ) ) ; this . comparator && this . sort ( { silent : ! 0 } ) ; if ( b . silent ) return this ; c = 0 ; for ( d = this . models . length ; c < d ; c ++ ) if ( j [ ( e = this . models [ c ] ) . cid ] ) b . index = c , e . trigger ( "add" , e , this , b ) ; return this } , remove : function ( a , b ) { var c , d , e , g ; b || ( b = { } ) ; a = f . isArray ( a ) ?
a . slice ( ) : [ a ] ; c = 0 ; for ( d = a . length ; c < d ; c ++ ) if ( g = this . getByCid ( a [ c ] ) || this . get ( a [ c ] ) ) delete this . _byId [ g . id ] , delete this . _byCid [ g . cid ] , e = this . indexOf ( g ) , this . models . splice ( e , 1 ) , this . length -- , b . silent || ( b . index = e , g . trigger ( "remove" , g , this , b ) ) , this . _removeReference ( g ) ; return this } , push : function ( a , b ) { a = this . _prepareModel ( a , b ) ; this . add ( a , b ) ; return a } , pop : function ( a ) { var b = this . at ( this . length - 1 ) ; this . remove ( b , a ) ; return b } , unshift : function ( a , b ) { a = this . _prepareModel ( a , b ) ; this . add ( a , f . extend ( { at : 0 } , b ) ) ; return a } ,
shift : function ( a ) { var b = this . at ( 0 ) ; this . remove ( b , a ) ; return b } , get : function ( a ) { return null == a ? void 0 : this . _byId [ null != a . id ? a . id : a ] } , getByCid : function ( a ) { return a && this . _byCid [ a . cid || a ] } , at : function ( a ) { return this . models [ a ] } , where : function ( a ) { return f . isEmpty ( a ) ? [ ] : this . filter ( function ( b ) { for ( var c in a ) if ( a [ c ] !== b . get ( c ) ) return ! 1 ; return ! 0 } ) } , sort : function ( a ) { a || ( a = { } ) ; if ( ! this . comparator ) throw Error ( "Cannot sort a set without a comparator" ) ; var b = f . bind ( this . comparator , this ) ; 1 == this . comparator . length ?
this . models = this . sortBy ( b ) : this . models . sort ( b ) ; a . silent || this . trigger ( "reset" , this , a ) ; return this } , pluck : function ( a ) { return f . map ( this . models , function ( b ) { return b . get ( a ) } ) } , reset : function ( a , b ) { a || ( a = [ ] ) ; b || ( b = { } ) ; for ( var c = 0 , d = this . models . length ; c < d ; c ++ ) this . _removeReference ( this . models [ c ] ) ; this . _reset ( ) ; this . add ( a , f . extend ( { silent : ! 0 } , b ) ) ; b . silent || this . trigger ( "reset" , this , b ) ; return this } , fetch : function ( a ) { a = a ? f . clone ( a ) : { } ; void 0 === a . parse && ( a . parse = ! 0 ) ; var b = this , c = a . success ; a . success = function ( d ,
e , f ) { b [ a . add ? "add" : "reset" ] ( b . parse ( d , f ) , a ) ; c && c ( b , d ) } ; a . error = g . wrapError ( a . error , b , a ) ; return ( this . sync || g . sync ) . call ( this , "read" , this , a ) } , create : function ( a , b ) { var c = this , b = b ? f . clone ( b ) : { } , a = this . _prepareModel ( a , b ) ; if ( ! a ) return ! 1 ; b . wait || c . add ( a , b ) ; var d = b . success ; b . success = function ( e , f ) { b . wait && c . add ( e , b ) ; d ? d ( e , f ) : e . trigger ( "sync" , a , f , b ) } ; a . save ( null , b ) ; return a } , parse : function ( a ) { return a } , chain : function ( ) { return f ( this . models ) . chain ( ) } , _reset : function ( ) { this . length = 0 ; this . models = [ ] ; this . _byId =
{ } ; this . _byCid = { } } , _prepareModel : function ( a , b ) { b || ( b = { } ) ; a instanceof o ? a . collection || ( a . collection = this ) : ( b . collection = this , a = new this . model ( a , b ) , a . _validate ( a . attributes , b ) || ( a = ! 1 ) ) ; return a } , _removeReference : function ( a ) { this == a . collection && delete a . collection ; a . off ( "all" , this . _onModelEvent , this ) } , _onModelEvent : function ( a , b , c , d ) { ( "add" == a || "remove" == a ) && c != this || ( "destroy" == a && this . remove ( b , d ) , b && a === "change:" + b . idAttribute && ( delete this . _byId [ b . previous ( b . idAttribute ) ] , this . _byId [ b . id ] = b ) , this . trigger . apply ( this ,
arguments ) ) } } ) ; f . each ( "forEach,each,map,reduce,reduceRight,find,detect,filter,select,reject,every,all,some,any,include,contains,invoke,max,min,sortBy,sortedIndex,toArray,size,first,initial,rest,last,without,indexOf,shuffle,lastIndexOf,isEmpty,groupBy" . split ( "," ) , function ( a ) { r . prototype [ a ] = function ( ) { return f [ a ] . apply ( f , [ this . models ] . concat ( f . toArray ( arguments ) ) ) } } ) ; var u = g . Router = function ( a ) { a || ( a = { } ) ; a . routes && ( this . routes = a . routes ) ; this . _bindRoutes ( ) ; this . initialize . apply ( this , arguments ) } , B = /:\w+/g ,
C = /\*\w+/g , D = /[-[\]{}()+?.,\\^$|#\s]/g ; f . extend ( u . prototype , k , { initialize : function ( ) { } , route : function ( a , b , c ) { g . history || ( g . history = new m ) ; f . isRegExp ( a ) || ( a = this . _routeToRegExp ( a ) ) ; c || ( c = this [ b ] ) ; g . history . route ( a , f . bind ( function ( d ) { d = this . _extractParameters ( a , d ) ; c && c . apply ( this , d ) ; this . trigger . apply ( this , [ "route:" + b ] . concat ( d ) ) ; g . history . trigger ( "route" , this , b , d ) } , this ) ) ; return this } , navigate : function ( a , b ) { g . history . navigate ( a , b ) } , _bindRoutes : function ( ) { if ( this . routes ) { var a = [ ] , b ; for ( b in this . routes ) a . unshift ( [ b ,
this . routes [ b ] ] ) ; b = 0 ; for ( var c = a . length ; b < c ; b ++ ) this . route ( a [ b ] [ 0 ] , a [ b ] [ 1 ] , this [ a [ b ] [ 1 ] ] ) } } , _routeToRegExp : function ( a ) { a = a . replace ( D , "\\$&" ) . replace ( B , "([^/]+)" ) . replace ( C , "(.*?)" ) ; return RegExp ( "^" + a + "$" ) } , _extractParameters : function ( a , b ) { return a . exec ( b ) . slice ( 1 ) } } ) ; var m = g . History = function ( ) { this . handlers = [ ] ; f . bindAll ( this , "checkUrl" ) } , s = /^[#\/]/ , E = /msie [\w.]+/ ; m . started = ! 1 ; f . extend ( m . prototype , k , { interval : 50 , getHash : function ( a ) { return ( a = ( a ? a . location : window . location ) . href . match ( /#(.*)$/ ) ) ? a [ 1 ] :
"" } , getFragment : function ( a , b ) { if ( null == a ) if ( this . _hasPushState || b ) { var a = window . location . pathname , c = window . location . search ; c && ( a += c ) } else a = this . getHash ( ) ; a . indexOf ( this . options . root ) || ( a = a . substr ( this . options . root . length ) ) ; return a . replace ( s , "" ) } , start : function ( a ) { if ( m . started ) throw Error ( "Backbone.history has already been started" ) ; m . started = ! 0 ; this . options = f . extend ( { } , { root : "/" } , this . options , a ) ; this . _wantsHashChange = ! 1 !== this . options . hashChange ; this . _wantsPushState = ! ! this . options . pushState ; this . _hasPushState =
! ( ! this . options . pushState || ! window . history || ! window . history . pushState ) ; var a = this . getFragment ( ) , b = document . documentMode ; if ( b = E . exec ( navigator . userAgent . toLowerCase ( ) ) && ( ! b || 7 >= b ) ) this . iframe = i ( '<iframe src="javascript:0" tabindex="-1" />' ) . hide ( ) . appendTo ( "body" ) [ 0 ] . contentWindow , this . navigate ( a ) ; this . _hasPushState ? i ( window ) . bind ( "popstate" , this . checkUrl ) : this . _wantsHashChange && "onhashchange" in window && ! b ? i ( window ) . bind ( "hashchange" , this . checkUrl ) : this . _wantsHashChange && ( this . _checkUrlInterval = setInterval ( this . checkUrl ,
this . interval ) ) ; this . fragment = a ; a = window . location ; b = a . pathname == this . options . root ; if ( this . _wantsHashChange && this . _wantsPushState && ! this . _hasPushState && ! b ) return this . fragment = this . getFragment ( null , ! 0 ) , window . location . replace ( this . options . root + "#" + this . fragment ) , ! 0 ; this . _wantsPushState && this . _hasPushState && b && a . hash && ( this . fragment = this . getHash ( ) . replace ( s , "" ) , window . history . replaceState ( { } , document . title , a . protocol + "//" + a . host + this . options . root + this . fragment ) ) ; if ( ! this . options . silent ) return this . loadUrl ( ) } ,
stop : function ( ) { i ( window ) . unbind ( "popstate" , this . checkUrl ) . unbind ( "hashchange" , this . checkUrl ) ; clearInterval ( this . _checkUrlInterval ) ; m . started = ! 1 } , route : function ( a , b ) { this . handlers . unshift ( { route : a , callback : b } ) } , checkUrl : function ( ) { var a = this . getFragment ( ) ; a == this . fragment && this . iframe && ( a = this . getFragment ( this . getHash ( this . iframe ) ) ) ; if ( a == this . fragment ) return ! 1 ; this . iframe && this . navigate ( a ) ; this . loadUrl ( ) || this . loadUrl ( this . getHash ( ) ) } , loadUrl : function ( a ) { var b = this . fragment = this . getFragment ( a ) ; return f . any ( this . handlers ,
function ( a ) { if ( a . route . test ( b ) ) return a . callback ( b ) , ! 0 } ) } , navigate : function ( a , b ) { if ( ! m . started ) return ! 1 ; if ( ! b || ! 0 === b ) b = { trigger : b } ; var c = ( a || "" ) . replace ( s , "" ) ; this . fragment != c && ( this . _hasPushState ? ( 0 != c . indexOf ( this . options . root ) && ( c = this . options . root + c ) , this . fragment = c , window . history [ b . replace ? "replaceState" : "pushState" ] ( { } , document . title , c ) ) : this . _wantsHashChange ? ( this . fragment = c , this . _updateHash ( window . location , c , b . replace ) , this . iframe && c != this . getFragment ( this . getHash ( this . iframe ) ) && ( b . replace ||
this . iframe . document . open ( ) . close ( ) , this . _updateHash ( this . iframe . location , c , b . replace ) ) ) : window . location . assign ( this . options . root + a ) , b . trigger && this . loadUrl ( a ) ) } , _updateHash : function ( a , b , c ) { c ? a . replace ( a . toString ( ) . replace ( /(javascript:|#).*$/ , "" ) + "#" + b ) : a . hash = b } } ) ; var v = g . View = function ( a ) { this . cid = f . uniqueId ( "view" ) ; this . _configure ( a || { } ) ; this . _ensureElement ( ) ; this . initialize . apply ( this , arguments ) ; this . delegateEvents ( ) } , F = /^(\S+)\s*(.*)$/ , w = "model,collection,el,id,attributes,className,tagName" . split ( "," ) ;
f . extend ( v . prototype , k , { tagName : "div" , $ : function ( a ) { return this . $el . find ( a ) } , initialize : function ( ) { } , render : function ( ) { return this } , remove : function ( ) { this . $el . remove ( ) ; return this } , make : function ( a , b , c ) { a = document . createElement ( a ) ; b && i ( a ) . attr ( b ) ; c && i ( a ) . html ( c ) ; return a } , setElement : function ( a , b ) { this . $el && this . undelegateEvents ( ) ; this . $el = a instanceof i ? a : i ( a ) ; this . el = this . $el [ 0 ] ; ! 1 !== b && this . delegateEvents ( ) ; return this } , delegateEvents : function ( a ) { if ( a || ( a = n ( this , "events" ) ) ) { this . undelegateEvents ( ) ;
for ( var b in a ) { var c = a [ b ] ; f . isFunction ( c ) || ( c = this [ a [ b ] ] ) ; if ( ! c ) throw Error ( 'Method "' + a [ b ] + '" does not exist' ) ; var d = b . match ( F ) , e = d [ 1 ] , d = d [ 2 ] , c = f . bind ( c , this ) , e = e + ( ".delegateEvents" + this . cid ) ; "" === d ? this . $el . bind ( e , c ) : this . $el . delegate ( d , e , c ) } } } , undelegateEvents : function ( ) { this . $el . unbind ( ".delegateEvents" + this . cid ) } , _configure : function ( a ) { this . options && ( a = f . extend ( { } , this . options , a ) ) ; for ( var b = 0 , c = w . length ; b < c ; b ++ ) { var d = w [ b ] ; a [ d ] && ( this [ d ] = a [ d ] ) } this . options = a } , _ensureElement : function ( ) { if ( this . el ) this . setElement ( this . el ,
! 1 ) ; else { var a = n ( this , "attributes" ) || { } ; this . id && ( a . id = this . id ) ; this . className && ( a [ "class" ] = this . className ) ; this . setElement ( this . make ( this . tagName , a ) , ! 1 ) } } } ) ; o . extend = r . extend = u . extend = v . extend = function ( a , b ) { var c = G ( this , a , b ) ; c . extend = this . extend ; return c } ; var H = { create : "POST" , update : "PUT" , "delete" : "DELETE" , read : "GET" } ; g . sync = function ( a , b , c ) { var d = H [ a ] ; c || ( c = { } ) ; var e = { type : d , dataType : "json" } ; c . url || ( e . url = n ( b , "url" ) || t ( ) ) ; if ( ! c . data && b && ( "create" == a || "update" == a ) ) e . contentType = "application/json" ,
e . data = JSON . stringify ( b . toJSON ( ) ) ; g . emulateJSON && ( e . contentType = "application/x-www-form-urlencoded" , e . data = e . data ? { model : e . data } : { } ) ; if ( g . emulateHTTP && ( "PUT" === d || "DELETE" === d ) ) g . emulateJSON && ( e . data . _method = d ) , e . type = "POST" , e . beforeSend = function ( a ) { a . setRequestHeader ( "X-HTTP-Method-Override" , d ) } ; "GET" !== e . type && ! g . emulateJSON && ( e . processData = ! 1 ) ; return i . ajax ( f . extend ( e , c ) ) } ; g . wrapError = function ( a , b , c ) { return function ( d , e ) { e = d === b ? e : d ; a ? a ( b , e , c ) : b . trigger ( "error" , b , e , c ) } } ; var x = function ( ) { } , G = function ( a ,
b , c ) { var d ; d = b && b . hasOwnProperty ( "constructor" ) ? b . constructor : function ( ) { a . apply ( this , arguments ) } ; f . extend ( d , a ) ; x . prototype = a . prototype ; d . prototype = new x ; b && f . extend ( d . prototype , b ) ; c && f . extend ( d , c ) ; d . prototype . constructor = d ; d . _ _super _ _ = a . prototype ; return d } , n = function ( a , b ) { return ! a || ! a [ b ] ? null : f . isFunction ( a [ b ] ) ? a [ b ] ( ) : a [ b ] } , t = function ( ) { throw Error ( 'A "url" property or function must be specified' ) ; } } ) . call ( this ) ;
2012-06-20 13:25:41 -07:00
/ * !
* Bootstrap . js by @ fat & @ mdo
* Copyright 2012 Twitter , Inc .
* http : //www.apache.org/licenses/LICENSE-2.0.txt
* /
2012-09-17 19:37:32 -07:00
! function ( e ) { e ( function ( ) { "use strict" ; e . support . transition = function ( ) { var e = function ( ) { var e = document . createElement ( "bootstrap" ) , t = { WebkitTransition : "webkitTransitionEnd" , MozTransition : "transitionend" , OTransition : "oTransitionEnd otransitionend" , transition : "transitionend" } , n ; for ( n in t ) if ( e . style [ n ] !== undefined ) return t [ n ] } ( ) ; return e && { end : e } } ( ) } ) } ( window . jQuery ) , ! function ( e ) { "use strict" ; var t = '[data-dismiss="alert"]' , n = function ( n ) { e ( n ) . on ( "click" , t , this . close ) } ; n . prototype . close = function ( t ) { function s ( ) { i . trigger ( "closed" ) . remove ( ) } var n = e ( this ) , r = n . attr ( "data-target" ) , i ; r || ( r = n . attr ( "href" ) , r = r && r . replace ( /.*(?=#[^\s]*$)/ , "" ) ) , i = e ( r ) , t && t . preventDefault ( ) , i . length || ( i = n . hasClass ( "alert" ) ? n : n . parent ( ) ) , i . trigger ( t = e . Event ( "close" ) ) ; if ( t . isDefaultPrevented ( ) ) return ; i . removeClass ( "in" ) , e . support . transition && i . hasClass ( "fade" ) ? i . on ( e . support . transition . end , s ) : s ( ) } , e . fn . alert = function ( t ) { return this . each ( function ( ) { var r = e ( this ) , i = r . data ( "alert" ) ; i || r . data ( "alert" , i = new n ( this ) ) , typeof t == "string" && i [ t ] . call ( r ) } ) } , e . fn . alert . Constructor = n , e ( function ( ) { e ( "body" ) . on ( "click.alert.data-api" , t , n . prototype . close ) } ) } ( window . jQuery ) , ! function ( e ) { "use strict" ; var t = function ( t , n ) { this . $element = e ( t ) , this . options = e . extend ( { } , e . fn . button . defaults , n ) } ; t . prototype . setState = function ( e ) { var t = "disabled" , n = this . $element , r = n . data ( ) , i = n . is ( "input" ) ? "val" : "html" ; e += "Text" , r . resetText || n . data ( "resetText" , n [ i ] ( ) ) , n [ i ] ( r [ e ] || this . options [ e ] ) , setTimeout ( function ( ) { e == "loadingText" ? n . addClass ( t ) . attr ( t , t ) : n . removeClass ( t ) . removeAttr ( t ) } , 0 ) } , t . prototype . toggle = function ( ) { var e = this . $element . closest ( '[data-toggle="buttons-radio"]' ) ; e && e . find ( ".active" ) . removeClass ( "active" ) , this . $element . toggleClass ( "active" ) } , e . fn . button = function ( n ) { return this . each ( function ( ) { var r = e ( this ) , i = r . data ( "button" ) , s = typeof n == "object" && n ; i || r . data ( "button" , i = new t ( this , s ) ) , n == "toggle" ? i . toggle ( ) : n && i . setState ( n ) } ) } , e . fn . button . defaults = { loadingText : "loading..." } , e . fn . button . Constructor = t , e ( function ( ) { e ( "body" ) . on ( "click.button.data-api" , "[data-toggle^=button]" , function ( t ) { var n = e ( t . target ) ; n . hasClass ( "btn" ) || ( n = n . closest ( ".btn" ) ) , n . button ( "toggle" ) } ) } ) } ( window . jQuery ) , ! function ( e ) { "use strict" ; var t = function ( t , n ) { this . $element = e ( t ) , this . options = n , this . options . slide && this . slide ( this . options . slide ) , this . options . pause == "hover" && this . $element . on ( "mouseenter" , e . proxy ( this . pause , this ) ) . on ( "mouseleave" , e . proxy ( this . cycle , this ) ) } ; t . prototype = { cycle : function ( t ) { return t || ( this . paused = ! 1 ) , this . options . interval && ! this . paused && ( this . interval = setInterval ( e . proxy ( this . next , this ) , this . options . interval ) ) , this } , to : function ( t ) { var n = this . $element . find ( ".item.active" ) , r = n . parent ( ) . children ( ) , i = r . index ( n ) , s = this ; if ( t > r . length - 1 || t < 0 ) return ; return this . sliding ? this . $element . one ( "slid" , function ( ) { s . to ( t ) } ) : i == t ? this . pause ( ) . cycle ( ) : this . slide ( t > i ? "next" : "prev" , e ( r [ t ] ) ) } , pause : function ( t ) { return t || ( this . paused = ! 0 ) , this . $element . find ( ".next, .prev" ) . length && e . support . transition . end && ( this . $element . trigger ( e . support . transition . end ) , this . cycle ( ) ) , clearInterval ( this . interval ) , this . interval = null , this } , next : function ( ) { if ( this . sliding ) return ; return this . slide ( "next" ) } , prev : function ( ) { if ( this . sliding ) return ; return this . slide ( "prev" ) } , slide : function ( t , n ) { var r = this . $element . find ( ".item.active" ) , i = n || r [ t ] ( ) , s = this . interval , o = t == "next" ? "left" : "right" , u = t == "next" ? "first" : "last" , a = this , f = e . Event ( "slide" , { relatedTarget : i [ 0 ] } ) ; this . sliding = ! 0 , s && this . pause ( ) , i = i . length ? i : this . $element . find ( ".item" ) [ u ] ( ) ; if ( i . hasClass ( "active" ) ) return ; if ( e . support . transition && this . $element . hasClass ( "slide" ) ) { this . $element . trigger ( f ) ; if ( f . isDefaultPrevented ( ) ) return ; i . addClass ( t ) , i [ 0 ] . offsetWidth , r . addClass ( o ) , i . addClass ( o ) , this . $element . one ( e . support . transition . end , function ( ) { i . removeClass ( [ t , o ] . join ( " " ) ) . addClass ( "active" ) , r . removeClass ( [ "active" , o ] . join ( " " ) ) , a . sliding = ! 1 , setTimeout ( function ( ) { a . $element . trigger ( "slid" ) } , 0 ) } ) } else { this . $element . trigger ( f ) ; if ( f . isDefaultPrevented ( ) ) return ; r . removeClass ( "active" ) , i . addClass ( "active" ) , this . sliding = ! 1 , this . $element . trigger ( "slid" ) } return s && this . cycle ( ) , this } } , e . fn . carousel
2012-06-20 13:25:41 -07:00
( function ( jQuery ) { jQuery . hotkeys = { version : "0.8" , specialKeys : { 8 : "backspace" , 9 : "tab" , 13 : "return" , 16 : "shift" , 17 : "ctrl" , 18 : "alt" , 19 : "pause" , 20 : "capslock" , 27 : "esc" , 32 : "space" , 33 : "pageup" , 34 : "pagedown" , 35 : "end" , 36 : "home" , 37 : "left" , 38 : "up" , 39 : "right" , 40 : "down" , 45 : "insert" , 46 : "del" , 96 : "0" , 97 : "1" , 98 : "2" , 99 : "3" , 100 : "4" , 101 : "5" , 102 : "6" , 103 : "7" , 104 : "8" , 105 : "9" , 106 : "*" , 107 : "+" , 109 : "-" , 110 : "." , 111 : "/" , 112 : "f1" , 113 : "f2" , 114 : "f3" , 115 : "f4" , 116 : "f5" , 117 : "f6" , 118 : "f7" , 119 : "f8" , 120 : "f9" , 121 : "f10" , 122 : "f11" , 123 : "f12" , 144 : "numlock" , 145 : "scroll" , 191 : "/" , 224 : "meta" } , shiftNums : { "`" : "~" , "1" : "!" , "2" : "@" , "3" : "#" , "4" : "$" , "5" : "%" , "6" : "^" , "7" : "&" , "8" : "*" , "9" : "(" , "0" : ")" , "-" : "_" , "=" : "+" , ";" : ": " , "'" : "\"" , "," : "<" , "." : ">" , "/" : "?" , "\\" : "|" } } ; function keyHandler ( handleObj ) { if ( typeof handleObj . data !== "string" ) { return ; }
var origHandler = handleObj . handler , keys = handleObj . data . toLowerCase ( ) . split ( " " ) ; handleObj . handler = function ( event ) { if ( this !== event . target && ( /textarea|select/i . test ( event . target . nodeName ) || event . target . type === "text" || event . target . type === "password" ) ) { return ; }
var special = event . type !== "keypress" && jQuery . hotkeys . specialKeys [ event . which ] , character = String . fromCharCode ( event . which ) . toLowerCase ( ) , key , modif = "" , possible = { } ; if ( event . altKey && special !== "alt" ) { modif += "alt+" ; }
if ( event . ctrlKey && special !== "ctrl" ) { modif += "ctrl+" ; }
if ( event . metaKey && ! event . ctrlKey && special !== "meta" ) { modif += "meta+" ; }
if ( event . shiftKey && special !== "shift" ) { modif += "shift+" ; }
if ( special ) { possible [ modif + special ] = true ; } else { possible [ modif + character ] = true ; possible [ modif + jQuery . hotkeys . shiftNums [ character ] ] = true ; if ( modif === "shift+" ) { possible [ jQuery . hotkeys . shiftNums [ character ] ] = true ; } }
for ( var i = 0 , l = keys . length ; i < l ; i ++ ) { if ( possible [ keys [ i ] ] ) { return origHandler . apply ( this , arguments ) ; } } } ; }
jQuery . each ( [ "keydown" , "keyup" , "keypress" ] , function ( ) { jQuery . event . special [ this ] = { add : keyHandler } ; } ) ; } ) ( jQuery ) ;
( function ( $ ) { $ . InFieldLabels = function ( label , field , options ) { var base = this ; base . $label = $ ( label ) ; base . label = label ; base . $field = $ ( field ) ; base . field = field ; base . $label . data ( "InFieldLabels" , base ) ; base . showing = true ; base . init = function ( ) { base . options = $ . extend ( { } , $ . InFieldLabels . defaultOptions , options ) ; if ( base . $field . val ( ) !== "" ) { base . $label . hide ( ) ; base . showing = false ; }
base . $field . focus ( function ( ) { base . fadeOnFocus ( ) ; } ) . blur ( function ( ) { base . checkForEmpty ( true ) ; } ) . bind ( 'keydown.infieldlabel' , function ( e ) { base . hideOnChange ( e ) ; } ) . bind ( 'paste' , function ( e ) { base . setOpacity ( 0.0 ) ; } ) . change ( function ( e ) { base . checkForEmpty ( ) ; } ) . bind ( 'onPropertyChange' , function ( ) { base . checkForEmpty ( ) ; } ) ; } ; base . fadeOnFocus = function ( ) { if ( base . showing ) { base . setOpacity ( base . options . fadeOpacity ) ; } } ; base . setOpacity = function ( opacity ) { base . $label . stop ( ) . animate ( { opacity : opacity } , base . options . fadeDuration ) ; base . showing = ( opacity > 0.0 ) ; } ; base . checkForEmpty = function ( blur ) { if ( base . $field . val ( ) === "" ) { base . prepForShow ( ) ; base . setOpacity ( blur ? 1.0 : base . options . fadeOpacity ) ; } else { base . setOpacity ( 0.0 ) ; } } ; base . prepForShow = function ( e ) { if ( ! base . showing ) { base . $label . css ( { opacity : 0.0 } ) . show ( ) ; base . $field . bind ( 'keydown.infieldlabel' , function ( e ) { base . hideOnChange ( e ) ; } ) ; } } ; base . hideOnChange = function ( e ) { if ( ( e . keyCode === 16 ) || ( e . keyCode === 9 ) || ( e . keyCode === 27 ) ) { return ; }
if ( base . showing ) { base . $label . hide ( ) ; base . showing = false ; }
base . $field . unbind ( 'keydown.infieldlabel' ) ; } ; base . init ( ) ; } ; $ . InFieldLabels . defaultOptions = { fadeOpacity : 0.5 , fadeDuration : 300 } ; $ . fn . inFieldLabels = function ( options ) { return this . each ( function ( ) { var for _attr = $ ( this ) . attr ( 'for' ) , $field ; if ( ! for _attr ) { return ; }
$field = $ ( "input#" + for _attr + "[type='text']," + "input#" + for _attr + "[type='search']," + "input#" + for _attr + "[type='tel']," + "input#" + for _attr + "[type='url']," + "input#" + for _attr + "[type='email']," + "input#" + for _attr + "[type='password']," + "textarea#" + for _attr ) ; if ( $field . length === 0 ) { return ; }
( new $ . InFieldLabels ( this , $field [ 0 ] , options ) ) ; } ) ; } ; } ( jQuery ) ) ;
// Chosen, a Select Box Enhancer for jQuery and Protoype
// by Patrick Filler for Harvest, http://getharvest.com
//
// Version 0.9.8
// Full source at https://github.com/harvesthq/chosen
// Copyright (c) 2011 Harvest http://getharvest.com
// MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
// This file is generated by `cake build`, do not edit it by hand.
( ( function ( ) { var a ; a = function ( ) { function a ( ) { this . options _index = 0 , this . parsed = [ ] } return a . prototype . add _node = function ( a ) { return a . nodeName === "OPTGROUP" ? this . add _group ( a ) : this . add _option ( a ) } , a . prototype . add _group = function ( a ) { var b , c , d , e , f , g ; b = this . parsed . length , this . parsed . push ( { array _index : b , group : ! 0 , label : a . label , children : 0 , disabled : a . disabled } ) , f = a . childNodes , g = [ ] ; for ( d = 0 , e = f . length ; d < e ; d ++ ) c = f [ d ] , g . push ( this . add _option ( c , b , a . disabled ) ) ; return g } , a . prototype . add _option = function ( a , b , c ) { if ( a . nodeName === "OPTION" ) return a . text !== "" ? ( b != null && ( this . parsed [ b ] . children += 1 ) , this . parsed . push ( { array _index : this . parsed . length , options _index : this . options _index , value : a . value , text : a . text , html : a . innerHTML , selected : a . selected , disabled : c === ! 0 ? c : a . disabled , group _array _index : b , classes : a . className , style : a . style . cssText } ) ) : this . parsed . push ( { array _index : this . parsed . length , options _index : this . options _index , empty : ! 0 } ) , this . options _index += 1 } , a } ( ) , a . select _to _array = function ( b ) { var c , d , e , f , g ; d = new a , g = b . childNodes ; for ( e = 0 , f = g . length ; e < f ; e ++ ) c = g [ e ] , d . add _node ( c ) ; return d . parsed } , this . SelectParser = a } ) ) . call ( this ) , function ( ) { var a , b ; b = this , a = function ( ) { function a ( a , b ) { this . form _field = a , this . options = b != null ? b : { } , this . set _default _values ( ) , this . is _multiple = this . form _field . multiple , this . default _text _default = this . is _multiple ? "Select Some Options" : "Select an Option" , this . setup ( ) , this . set _up _html ( ) , this . register _observers ( ) , this . finish _setup ( ) } return a . prototype . set _default _values = function ( ) { var a = this ; return this . click _test _action = function ( b ) { return a . test _active _click ( b ) } , this . activate _action = function ( b ) { return a . activate _field ( b ) } , this . active _field = ! 1 , this . mouse _on _container = ! 1 , this . results _showing = ! 1 , this . result _highlighted = null , this . result _single _selected = null , this . allow _single _deselect = this . options . allow _single _deselect != null && this . form _field . options [ 0 ] != null && this . form _field . options [ 0 ] . text === "" ? this . options . allow _single _deselect : ! 1 , this . disable _search _threshold = this . options . disable _search _threshold || 0 , this . search _contains = this . options . search _contains || ! 1 , this . choices = 0 , this . results _none _found = this . options . no _results _text || "No results match" } , a . prototype . mouse _enter = function ( ) { return this . mouse _on _container = ! 0 } , a . prototype . mouse _leave = function ( ) { return this . mouse _on _container = ! 1 } , a . prototype . input _focus = function ( a ) { var b = this ; if ( ! this . active _field ) return setTimeout ( function ( ) { return b . container _mousedown ( ) } , 50 ) } , a . prototype . input _blur = function ( a ) { var b = this ; if ( ! this . mouse _on _container ) return this . active _field = ! 1 , setTimeout ( function ( ) { return b . blur _test ( ) } , 100 ) } , a . prototype . result _add _option = function ( a ) { var b , c ; return a . disabled ? "" : ( a . dom _id = this . container _id + "_o_" + a . array _index , b = a . selected && this . is _multiple ? [ ] : [ "active-result" ] , a . selected && b . push ( "result-selected" ) , a . group _array _index != null && b . push ( "group-option" ) , a . classes !== "" && b . push ( a . classes ) , c = a . style . cssText !== "" ? ' style="' + a . style + '"' : "" , '<li id="' + a . dom _id + '" class="' + b . join ( " " ) + '"' + c + ">" + a . html + "</li>" ) } , a . prototype . results _update _field = function ( ) { return this . result _clear _highlight ( ) , this . result _single _selected = null , this . results _build ( ) } , a . prototype . results _toggle = function ( ) { return this . results _showing ? this . results _hide ( ) : this . results _show ( ) } , a . prototype . results _search = function ( a ) { return this . results _showing ? this . winnow _results ( ) : this . results _show ( ) } , a . prototype . keyup _checker = function ( a ) { var b , c ; b = ( c = a . which ) != null ? c : a . keyCode , this . search _field _scale ( ) ; switch ( b ) { case 8 : if ( this . is _multiple && this . backstroke _length < 1 && this . choices > 0 ) return this . keydown _backstroke ( ) ; if ( ! this . pending _backstroke ) return this . result _clear _highlight ( ) , this . results _search ( ) ; break ; case 13 : a . preventDefault ( ) ; if ( this . results _showing ) return this . result _select ( a ) ; break ; case 27 : return this . results _showing && this . results _hide ( ) , ! 0 ; case 9 : case 38 : case 40 : case 16 : case 91 : case 17 : break ; default : return this . results _search ( ) } } , a . prototype . generate _field _id = function ( ) { var a ; return a = this . generate _random _id ( ) , this . form _field . id = a , a } , a . prototype . generate _random _char = function ( ) { var a , b , c ; return a = " 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXT
var snipt = { module : function ( ) { var modules = { } ; return function ( name ) { if ( modules [ name ] ) { return modules [ name ] ; }
2012-09-17 19:37:32 -07:00
return modules [ name ] = { } ; } ; } ( ) } ; jQuery ( function ( $ ) { var SiteView = snipt . module ( 'site' ) . SiteView ; window . site = new SiteView ( ) ; } ) ;
2012-07-08 09:25:15 -07:00
( function ( Site ) { var Snipt = snipt . module ( 'snipt' ) ; Backbone . oldSync = Backbone . sync ; Backbone . Model . prototype . idAttribute = 'resource_uri' ; var addSlash = function ( str ) { return str + ( ( str . length > 0 && str . charAt ( str . length - 1 ) === '/' ) ? '' : '/' ) ; } ; Backbone . sync = function ( method , model , options ) { options . headers = _ . extend ( { 'Authorization' : 'ApiKey ' + window . user + ':' + window . api _key } , options . headers ) ; return Backbone . oldSync ( method , model , options ) ; } ; Backbone . Model . prototype . url = function ( ) { var url = this . id ; if ( ! url ) { url = this . urlRoot ; url = url || this . collection && ( _ . isFunction ( this . collection . url ) ? this . collection . url ( ) : this . collection . url ) ; if ( url && this . has ( 'id' ) ) { url = addSlash ( url ) + this . get ( 'id' ) ; } }
2012-06-20 13:25:41 -07:00
url = url && addSlash ( url ) ; if ( typeof url === 'undefined' ) { url = '/api/private/snipt/' ; this . unset ( 'id' , { 'silent' : true } ) ; this . unset ( 'user' , { 'silent' : true } ) ; }
2013-01-20 09:21:07 -08:00
return url || null ; } ; Site . SiteView = Backbone . View . extend ( { el : 'body' , initialize : function ( opts ) { this . $body = $ ( this . el ) ; this . $html = $ ( 'html' ) ; this . $html _body = this . $body . add ( this . $html ) ; this . $aside _main = $ ( 'aside.main' , this . $body ) ; this . $aside _nav = $ ( 'aside.nav' , this . $body ) ; this . $aside _nav _ul = $ ( 'ul' , this . $aside _nav ) ; this . $search _form = $ ( 'form.search' , this . $body ) ; this . $search _query = $ ( 'input#search-query' , this . $body ) ; this . $search _page _query = $ ( 'input.search-query' , this . $body ) ; this . $search _queries = this . $search _query . add ( this . $search _page _query ) ; this . $snipts = $ ( 'section#snipts article.snipt' , this . $body ) ; this . $modals = $ ( 'div.modal' , this . $snipts ) ; this . $main _edit = $ ( 'section#main-edit' ) ; this . $main = $ ( 'section#main' ) ; this . $keyboard _shortcuts = $ ( '#keyboard-shortcuts' , this . $body ) ; this . keyboardShortcuts ( ) ; this . inFieldLabels ( ) ; var SniptListView = Snipt . SniptListView ; this . snipt _list = new SniptListView ( { 'snipts' : this . $snipts } ) ; var that = this ; this . $body . click ( function ( ) { if ( ! window . ui _halted && ! window . from _modal && window . $selected ) { window . $selected . trigger ( 'deselect' ) ; }
2012-06-20 13:25:41 -07:00
if ( window . from _modal ) { window . from _modal = false ; }
2012-07-18 21:39:43 -07:00
that . $aside _nav . removeClass ( 'open' ) ; } ) ; this . $aside _nav _ul . click ( function ( e ) { e . stopPropagation ( ) ; } ) ; $search _queries = this . $search _queries ; $search _queries . focus ( function ( ) { if ( window . $selected ) { $selected . trigger ( 'deselect' ) ; } } ) ; this . $body . on ( 'click' , 'a.close' , function ( ) { $ ( this ) . parent ( ) . parent ( ) . modal ( 'hide' ) ; window . ui _halted = false ; return false ; } ) ; this . $keyboard _shortcuts . on ( 'hidden' , function ( ) { window . ui _halted = false ; } ) ; if ( this . $body . hasClass ( 'pro-signup' ) ) { var $form = $ ( 'form#pro-signup' ) ; var $submit = $ ( 'button[type="submit"]' , $form ) ; var $name = $ ( 'input#name' ) ; var $cardNumber = $ ( 'input#number' ) ; var $expMonth = $ ( 'select#exp-month' ) ; var $expYear = $ ( 'select#exp-year' ) ; var $cvc = $ ( 'input#cvc' ) ; $form . submit ( function ( ) { $submit . attr ( 'disabled' , 'disabled' ) ; var errors = false ; if ( ! Stripe . validateCardNumber ( $cardNumber . val ( ) ) ) { $cardNumber . parents ( 'div.control-group' ) . addClass ( 'error' ) ; errors = true ; } else { $cardNumber . parents ( 'div.control-group' ) . removeClass ( 'error' ) ; }
2012-07-17 22:15:16 -07:00
if ( ! Stripe . validateExpiry ( $expMonth . val ( ) , $expYear . val ( ) ) ) { $expMonth . parents ( 'div.control-group' ) . addClass ( 'error' ) ; errors = true ; } else { $expMonth . parents ( 'div.control-group' ) . removeClass ( 'error' ) ; }
if ( ! Stripe . validateCVC ( $cvc . val ( ) ) ) { $cvc . parents ( 'div.control-group' ) . addClass ( 'error' ) ; errors = true ; } else { $cvc . parents ( 'div.control-group' ) . removeClass ( 'error' ) ; }
2012-07-18 21:39:43 -07:00
if ( ! errors ) { $ ( '.payment-errors' ) . hide ( ) ; $ ( '.payment-loading' ) . show ( ) ; Stripe . createToken ( { name : $name . val ( ) , number : $cardNumber . val ( ) , cvc : $cvc . val ( ) , exp _month : $expMonth . val ( ) , exp _year : $expYear . val ( ) } , that . stripeResponseHandler ) ; } else { $submit . removeAttr ( 'disabled' ) ; }
2012-07-17 22:15:16 -07:00
return false ; } ) ; }
2012-08-13 10:34:22 -07:00
if ( this . $body . hasClass ( 'login' ) ) { $ ( 'input#id_username' ) . focus ( ) ; }
2013-01-20 09:21:07 -08:00
if ( window . gittip _username ) { this . $aside _main . html ( this . $aside _main . html ( ) . replace ( /\[\[.*gittip.*\]\]/ , '<iframe style="border: 0; margin: 0; padding: 0;" src="https://www.gittip.com/' + window . gittip _username + '/widget.html" width="48pt" height="22pt"></iframe>' ) ) ; $ ( 'iframe' , this . $aside _main ) . parent ( 'p' ) . prev ( 'p' ) . css ( 'margin-bottom' , '10px' ) ; }
2013-02-18 14:37:41 -08:00
$ ( 'div.markdown pre code' ) . each ( function ( i , e ) { hljs . highlightBlock ( e ) ; } ) ; if ( this . $body . hasClass ( 'homepage' ) ) { setTimeout ( function ( ) { var $facesInner = $ ( 'div.faces div.inner' ) ; var $faces = $ ( 'a' , $facesInner ) ; for ( var i = 0 ; i < $faces . length ; i ++ ) { var $face = $faces . eq ( i ) ; var imageWidth = $ ( 'img' , $face ) . width ( ) ; if ( imageWidth != 50 ) { $face . remove ( ) ; } }
$facesInner . hide ( ) ; $facesInner . css ( 'text-indent' , '0' ) ; $facesInner . fadeIn ( 400 ) ; } , 700 ) ; }
2013-02-18 13:57:29 -08:00
window . ui _halted = false ; } , events : { 'showKeyboardShortcuts' : 'showKeyboardShortcuts' , 'click a.mini-profile' : 'toggleMiniProfile' } , keyboardShortcuts : function ( ) { var $body = this . $body ; var that = this ; $search _queries = this . $search _queries ; $search _page _query = this . $search _page _query ; $search _query = this . $search _query ; $document = $ ( document ) ; $document . bind ( 'keydown' , '/' , function ( e ) { if ( ! window . ui _halted ) { e . preventDefault ( ) ; if ( $body . hasClass ( 'search' ) ) { $search _page _query . focus ( ) ; } else { $search _query . focus ( ) ; } } } ) ; $document . bind ( 'keydown' , 'h' , function ( e ) { if ( ! window . ui _halted ) { window . ui _halted = true ; $body . trigger ( 'showKeyboardShortcuts' ) ; } else { if ( that . $keyboard _shortcuts . is ( ':visible' ) ) { that . $keyboard _shortcuts . modal ( 'hide' ) ; } } } ) ; $document . bind ( 'keydown' , 't' , function ( e ) { if ( ! window . ui _halted ) { window . open ( '' , '_blank' ) ; } } ) ; $document . bind ( 'keydown' , 'r' , function ( e ) { if ( ! window . ui _halted ) { location . reload ( true ) ; } } ) ; $document . bind ( 'keydown' , 'Ctrl+h' , function ( e ) { if ( ! window . ui _halted ) { history . go ( - 1 ) ; } } ) ; $document . bind ( 'keydown' , 'Ctrl+l' , function ( e ) { if ( ! window . ui _halted ) { history . go ( 1 ) ; } } ) ; this . $search _queries . bind ( 'keydown' , 'esc' , function ( e ) { if ( ! window . ui _halted ) { e . preventDefault ( ) ; this . blur ( ) ; } } ) ; } , showKeyboardShortcuts : function ( ) { this . $keyboard _shortcuts . modal ( 'toggle' ) ; } , toggleMiniProfile : function ( e ) { this . $aside _nav . toggleClass ( 'open' ) ; return false ; } , inFieldLabels : function ( ) { $ ( 'div.infield label' , this . $body ) . inFieldLabels ( { fadeDuration : 200 } ) ; } , stripeResponseHandler : function ( status , response ) { var $form = $ ( 'form#pro-signup' ) ; if ( response . error ) { $ ( 'button[type="submit"]' , $form ) . removeAttr ( 'disabled' ) ; $ ( '.payment-loading' ) . hide ( ) ; $ ( '.payment-errors' ) . text ( response . error . message ) . show ( ) ; } else { var token = response . id ; $ ( 'input#name' ) . val ( '' ) ; $ ( 'input#number' ) . val ( '' ) ; $ ( 'select#exp-month' ) . val ( '' ) ; $ ( 'select#exp-year' ) . val ( '' ) ; $ ( 'input#cvc' ) . val ( '' ) ; $form . append ( "<input type='hidden' name='token' value='" + token + "'/>" ) ; $form . get ( 0 ) . submit ( ) ; } } } ) ; } ) ( snipt . module ( 'site' ) ) ;
2012-07-08 09:25:15 -07:00
( function ( Snipt ) { Snipt . SniptModel = Backbone . Model . extend ( { toSafe : function ( ) { var snipt = this . toJSON ( ) ; snipt . code = this . escape ( 'code' ) ; snipt . title = this . escape ( 'title' ) ; snipt . tags _list = this . escape ( 'tags_list' ) ; if ( typeof snipt . tags === 'object' ) { for ( var i ; i < snipt . tags . length ; i ++ ) { snipt . tags [ i ] . name = _ . escape ( snipt . tags [ i ] . name ) ; } }
2012-07-30 18:46:52 -07:00
return snipt ; } } ) ; Snipt . SniptView = Backbone . View . extend ( { tagName : 'article' , initialize : function ( ) { this . model . view = this ; this . model . bind ( 'change' , this . render , this ) ; this . template = _ . template ( $ ( '#snipt' ) . html ( ) ) ; this . editTemplate = _ . template ( $ ( '#edit' ) . html ( ) ) ; this . initLocalVars ( ) ; this . initLineNumbers ( ) ; } , events : { 'click a.copy' : 'copyFromClick' , 'click a.edit' : 'edit' , 'click a.favorite' : 'favoriteToggle' , 'click a.embed' : 'embedFromClick' , 'click a.expand' : 'expand' , 'click .container' : 'selectFromClick' , 'copyClose' : 'copyClose' , 'copyRaw' : 'copy' , 'detail' : 'detail' , 'deselect' : 'deselect' , 'destroy' : 'destroy' , 'edit' : 'edit' , 'embed' : 'embed' , 'embedClose' : 'embedClose' , 'expand' : 'expand' , 'fadeAndRemove' : 'fadeAndRemove' , 'goToAuthor' : 'goToAuthor' , 'next' : 'next' , 'prev' : 'prev' , 'selectSnipt' : 'select' } , copy : function ( ) { $ ( 'textarea' , this . $copyModal ) . remove ( ) ; window . ui _halted = true ; this . $copyModalBody . append ( '<textarea class="raw"></textarea>' ) ; $textarea = $ ( 'textarea.raw' , this . $copyModalBody ) . val ( this . model . get ( 'code' ) ) ; this . $copyModal . modal ( 'show' ) ; $textarea . select ( ) ; } , copyClose : function ( ) { $ ( 'textarea' , this . $copyModal ) . remove ( ) ; } , copyFromClick : function ( ) { this . copy ( ) ; return false ; } , deselect : function ( ) { this . $el . removeClass ( 'selected' ) ; window . $selected = false ; } , detail : function ( ) { window . location = this . model . get ( 'absolute_url' ) ; } , destroy : function ( ) { this . model . destroy ( ) ; } , edit : function ( ) { window . editing = true ; window . ui _halted = true ; this . select ( ) ; that = this ; var editPane = this . editTemplate ( { snipt : this . model . toSafe ( ) } ) ; window . site . $main . hide ( ) ; window . site . $body . addClass ( 'detail editing' ) ; window . site . $main _edit . html ( editPane ) ; $ ( 'option[value="' + this . model . get ( 'lexer' ) + '"]' , window . site . $main _edit ) . attr ( 'selected' , 'selected' ) ; var $selectLexer = $ ( 'select#id_lexer' , window . site . $main _edit ) ; $selectLexer . chosen ( ) ; $ ( 'label.blog-post input' , window . site . $main _edit ) . on ( 'change' , function ( ) { var $checkbox = $ ( this ) ; var $label = $checkbox . parent ( ) ; var $publish _date = $label . siblings ( 'label.publish-date' ) ; if ( $checkbox . attr ( 'checked' ) ) { $label . removeClass ( 'is-not-blog-post' ) . addClass ( 'is-blog-post' ) ; $publish _date . show ( ) ; } else { $label . addClass ( 'is-not-blog-post' ) . removeClass ( 'is-blog-post' ) ; $publish _date . hide ( ) ; }
2012-06-20 13:25:41 -07:00
return false ; } ) . trigger ( 'change' ) ; $ ( 'label.public input' , window . site . $main _edit ) . on ( 'change' , function ( ) { var $checkbox = $ ( this ) ; var $label = $checkbox . parent ( ) ; if ( $checkbox . attr ( 'checked' ) ) { $label . removeClass ( 'is-private' ) . addClass ( 'is-public' ) ; } else { $label . addClass ( 'is-private' ) . removeClass ( 'is-public' ) ; }
2013-02-05 13:31:02 -08:00
return false ; } ) . trigger ( 'change' ) ; window . site . $main _edit . show ( ) ; this . $editorCodeMirror = $ ( 'div.editor' , window . site . $main _edit ) ; this . $editorTextarea = $ ( 'textarea.editor' , window . site . $main _edit ) ; window . editor = CodeMirror ( this . $editorCodeMirror . get ( 0 ) , { autofocus : true , fixedGutter : true , gutter : true , indentUnit : 4 , lineNumbers : true , javascriptHint : true , matchBrackets : true , mode : that . guessCodeMirrorLexer ( $selectLexer . val ( ) ) , value : that . model . get ( 'code' ) } ) ; $selectLexer . change ( function ( ) { var $selectedLexer = $ ( 'option:selected' , $selectLexer ) ; var lexer = $selectLexer . val ( ) ; window . editor . setOption ( 'mode' , that . guessCodeMirrorLexer ( $selectedLexer . val ( ) ) ) ; if ( lexer === 'markdown' || lexer === 'text' ) { window . editor . setOption ( 'lineWrapping' , true ) ; } else { window . editor . setOption ( 'lineWrapping' , false ) ; } } ) ; $selectLexer . trigger ( 'change' ) ; window . editorHeight = $ ( window ) . height ( ) - 147 ; window . editor . setSize ( '100%' , window . editorHeight ) ; this . $editorTextarea . height ( window . editorHeight - 8 ) ; $ ( 'textarea, input' , window . site . $main _edit ) . bind ( 'keydown' , 'esc' , function ( e ) { $ ( this ) . blur ( ) ; return false ; } ) ; if ( window . user _is _pro ) { var $selectEditor = $ ( 'select#id_editor' , window . site . $main _edit ) ; var $selectTheme = $ ( 'select#id_theme' , window . site . $main _edit ) ; $selectEditor . chosen ( ) ; $selectEditor . change ( function ( ) { var newEditor = $selectEditor . val ( ) ; if ( newEditor === 'textarea' ) { that . $editorCodeMirror . hide ( ) ; that . $editorTextarea . show ( ) ; that . $editorTextarea . val ( window . editor . getValue ( ) ) ; }
2013-02-05 12:24:51 -08:00
if ( newEditor === 'codemirror' ) { that . $editorTextarea . hide ( ) ; that . $editorCodeMirror . show ( ) ; window . editor . setValue ( that . $editorTextarea . val ( ) ) ; } } ) ; $selectTheme . chosen ( ) ; $selectTheme . change ( function ( ) { window . editor . setOption ( 'theme' , $selectTheme . val ( ) ) ; } ) ; if ( window . editor _theme != 'default' ) { $selectTheme . val ( window . editor _theme ) ; $selectTheme . trigger ( 'liszt:updated' ) ; $selectTheme . trigger ( 'change' ) ; }
2013-02-05 13:15:09 -08:00
if ( window . default _editor != 'codemirror' ) { $selectEditor . val ( window . default _editor ) ; $selectEditor . trigger ( 'liszt:updated' ) ; $selectEditor . trigger ( 'change' ) ; }
this . setupCodeMirrorFullScreen ( ) ; }
2013-02-04 11:40:45 -08:00
$ ( 'button.delete' , window . site . $main _edit ) . on ( 'click' , function ( ) { if ( confirm ( 'Are you sure you want to delete this snipt?' ) ) { that . model . destroy ( ) ; window . site . snipt _list . escapeUI ( true ) ; }
2012-07-20 18:54:54 -07:00
return false ; } ) ; $ ( 'button.cancel' , window . site . $main _edit ) . on ( 'click' , function ( ) { window . site . snipt _list . escapeUI ( ) ; return false ; } ) ; $ ( 'button.save' , window . site . $main _edit ) . on ( 'click' , function ( ) { $ ( 'button.cancel' ) . text ( 'Close' ) ; that . save ( ) ; return false ; } ) ; $ ( 'button.save-and-close' , window . site . $main _edit ) . on ( 'click' , function ( ) { that . save ( ) ; window . site . snipt _list . escapeUI ( ) ; return false ; } ) ; window . scrollTo ( 0 , 0 ) ; return false ; } , embed : function ( ) { $ ( 'textarea' , this . $embedModal ) . remove ( ) ; window . ui _halted = true ; this . $embedModalBody . append ( '<textarea class="raw"></textarea>' ) ; $textarea = $ ( 'textarea.raw' , this . $embedModalBody ) . val ( '<script type="text/javascript" src="' + this . model . get ( 'embed_url' ) + '"></script>' ) ; this . $embedModal . modal ( 'show' ) ; $textarea . select ( ) ; } , embedFromClick : function ( ) { this . embed ( ) ; return false ; } , embedClose : function ( ) { $ ( 'textarea' , this . $embedModal ) . remove ( ) ; } , expand : function ( ) { this . $container . toggleClass ( 'expanded' , 100 ) ; this . $tags . toggleClass ( 'expanded' ) ; this . select ( ) ; return false ; } , fadeAndRemove : function ( ) { var $toRemove = $ ( this . el ) ; var $nextSnipt = $toRemove . next ( 'article.snipt' ) ; window . $selected = false ; $toRemove . fadeOut ( 'fast' , function ( ) { $ ( this ) . remove ( ) ; $nextSnipt . trigger ( 'selectSnipt' ) ; } ) ; return false ; } , goToAuthor : function ( ) { window . location = this . model . get ( 'user' ) . absolute _url ; } , guessCodeMirrorLexer : function ( val ) { if ( val === 'html' ) { return 'htmlmixed' ; }
if ( val === 'js' ) return 'javascript' ; if ( val === 'rb' ) return 'ruby' ; return val ; } , favoriteToggle : function ( ) { var that = this ; if ( this . $el . hasClass ( 'favorited' ) ) { $ . ajax ( '/api/private/favorite/' + this . model . get ( 'favorite_id' ) + '/' , { type : 'delete' , success : function ( ) { that . $el . removeClass ( 'favorited' ) ; that . $favorite . text ( 'Favorite' ) ; } , headers : { 'Authorization' : 'ApiKey ' + window . user + ':' + window . api _key } } ) ; } else { $ . ajax ( '/api/private/favorite/' , { data : '{"snipt": ' + this . model . get ( 'id' ) + '}' , contentType : 'application/json' , type : 'post' , success : function ( resp ) { that . $el . addClass ( 'favorited' ) ; that . model . set ( { 'favorite_id' : resp . id } , { 'silent' : true } ) ; that . $favorite . text ( 'Favorited' ) ; } , headers : { 'Authorization' : 'ApiKey ' + window . user + ':' + window . api _key } } ) ; }
2012-07-30 18:46:52 -07:00
return false ; } , initLineNumbers : function ( ) { var lines = $ ( 'span.special' , this . $el ) ; var that = this ; $ . each ( lines , function ( ) { var l = $ ( this ) ; var num = l . text ( ) . trim ( ) ; var url = that . model . get ( 'absolute_url' ) ; l . replaceWith ( '<a href="' + url + '#line-' + num + '">' + num + '</a>' ) ; } ) ; } , initLocalVars : function ( ) { this . $aside = $ ( 'aside' , this . $el ) ; this . $container = $ ( 'div.container' , this . $el ) ; this . $copyModal = $ ( 'div.copy-modal' , this . $el ) ; this . $copyModalBody = $ ( 'div.modal-body' , this . $copyModal ) ; this . $embedModal = $ ( 'div.embed-modal' , this . $el ) ; this . $embedModalBody = $ ( 'div.modal-body' , this . $embedModal ) ; this . $favorite = $ ( 'a.favorite' , this . $el ) ; this . $h1 = $ ( 'header h1 a' , this . $el ) ; this . $tags = $ ( 'section.tags ul' , this . $aside ) ; this . $copyModal . on ( 'hidden' , function ( e ) { $ ( this ) . parent ( ) . trigger ( 'copyClose' ) ; window . ui _halted = false ; window . from _modal = true ; } ) ; this . $embedModal . on ( 'hidden' , function ( e ) { $ ( this ) . parent ( ) . trigger ( 'embedClose' ) ; window . ui _halted = false ; window . from _modal = true ; } ) ; } , next : function ( ) { if ( ! window . ui _halted ) { nextSnipt = this . $el . next ( 'article.snipt' ) ; if ( nextSnipt . length ) { return nextSnipt . trigger ( 'selectSnipt' ) ; } } } , prev : function ( ) { if ( ! window . ui _halted ) { prevSnipt = this . $el . prev ( 'article.snipt' ) ; if ( prevSnipt . length ) { return prevSnipt . trigger ( 'selectSnipt' ) ; } } } , remove : function ( ) { return false ; } , render : function ( ) { this . $el . html ( this . template ( { snipt : this . model . toSafe ( ) } ) ) ; this . initLocalVars ( ) ; this . initLineNumbers ( ) ; if ( this . model . get ( 'blog_post' ) === true ) { this . $el . addClass ( 'blog-post' ) ; } else { this . $el . removeClass ( 'blog-post' ) ; }
2012-06-20 13:25:41 -07:00
if ( this . model . get ( 'public' ) === true ) { this . $el . removeClass ( 'private-snipt' ) ; } else { this . $el . addClass ( 'private-snipt' ) ; }
if ( this . model . get ( 'user' ) . username === window . user ) { this . $el . addClass ( 'editable' ) ; } else { this . $el . removeClass ( 'editable' ) ; }
if ( this . model . get ( 'line_count' ) > 8 && ! window . detail ) { this . $el . addClass ( 'expandable' ) ; } else { this . $el . removeClass ( 'expandable' ) ; }
$ ( 'script#disqus' ) . remove ( ) ; window . site . $body . append ( '<script id="disqus" type="text/javascript">' + $ ( 'script#disqus-template' ) . text ( ) + '</script>' ) ; if ( this . $el . attr ( 'id' ) === 'new-snipt' ) { this . $el . fadeIn ( 'fast' ) ; this . $el . attr ( 'id' , 'snipt-' + this . model . get ( 'id' ) ) ; }
2013-02-04 11:40:45 -08:00
return this ; } , save : function ( ) { $ ( 'button.save, button.save-and-close, button.delete, button.cancel' , window . site . $main _edit ) . attr ( 'disabled' , 'disabled' ) ; var code ; if ( this . $editorTextarea . is ( ':visible' ) ) { code = this . $editorTextarea . val ( ) ; } else { code = window . editor . getValue ( ) ; }
2013-02-08 10:11:14 -08:00
that . model . save ( { 'title' : $ ( 'input#snipt_title' ) . val ( ) , 'tags' : $ ( 'label.tags textarea' ) . val ( ) , 'tags_list' : $ ( 'label.tags textarea' ) . val ( ) , 'lexer' : $ ( 'select[name="lexer"]' ) . val ( ) , 'lexer_name' : $ ( 'select[name="lexer"] option:selected' ) . text ( ) , 'code' : code , 'description' : $ ( 'textarea[name="description"]' ) . val ( ) , 'blog_post' : $ ( 'label.blog-post input' ) . is ( ':checked' ) , 'publish_date' : $ ( 'label.publish-date input' ) . val ( ) , 'public' : $ ( 'label.public input' ) . is ( ':checked' ) } , { success : function ( model , response ) { $ ( 'button.save, button.save-and-close, button.delete, button.cancel' , window . site . $main _edit ) . removeAttr ( 'disabled' ) ; } , error : function ( model , response ) { alert ( 'There was a problem saving your snipt. We\'ve been notified. Sorry about that!' ) ; } } ) ; } , select : function ( fromClick ) { $ ( 'article.selected' , window . site . snipt _list . $el ) . removeClass ( 'selected' ) ; this . $el . addClass ( 'selected' ) ; if ( fromClick !== true ) { if ( window . site . $snipts . index ( this . $el ) === 0 ) { window . scrollTo ( 0 , 0 ) ; } else { window . site . $html _body . animate ( { scrollTop : this . $el . offset ( ) . top - 50 } , 0 ) ; } }
2013-02-05 13:15:09 -08:00
window . $selected = this . $el ; } , selectFromClick : function ( e ) { this . select ( true ) ; e . stopPropagation ( ) ; window . site . $aside _nav . removeClass ( 'open' ) ; } , setupCodeMirrorFullScreen : function ( ) { function isFullScreen ( cm ) { return ( /\bCodeMirror-fullscreen\b/ ) . test ( cm . getWrapperElement ( ) . className ) ; }
function winHeight ( ) { return window . innerHeight || ( document . documentElement || document . body ) . clientHeight ; }
function setFullScreen ( cm , full ) { var wrap = cm . getWrapperElement ( ) ; if ( full ) { wrap . className += ' CodeMirror-fullscreen' ; wrap . style . height = winHeight ( ) + 'px' ; document . documentElement . style . overflow = 'hidden' ; $ ( 'header.fixed-save' ) . hide ( ) ; $ ( 'div.container' ) . addClass ( 'full-screened' ) ; } else { wrap . className = wrap . className . replace ( ' CodeMirror-fullscreen' , '' ) ; window . editor . setSize ( '100%' , window . editorHeight ) ; document . documentElement . style . overflow = '' ; $ ( 'header.fixed-save' ) . show ( ) ; $ ( 'div.container' ) . removeClass ( 'full-screened' ) ; }
cm . refresh ( ) ; }
window . editor . on ( window , 'resize' , function ( ) { var showing = document . body . getElementsByClassName ( 'CodeMirror-fullscreen' ) [ 0 ] ; if ( ! showing ) return ; showing . CodeMirror . getWrapperElement ( ) . style . height = winHeight ( ) + 'px' ; } ) ; window . editor . setOption ( 'extraKeys' , { 'Cmd-Enter' : function ( cm ) { setFullScreen ( cm , ! isFullScreen ( cm ) ) ; } , 'F11' : function ( cm ) { setFullScreen ( cm , ! isFullScreen ( cm ) ) ; } , 'Esc' : function ( cm ) { if ( isFullScreen ( cm ) ) setFullScreen ( cm , false ) ; } } ) ; } } ) ; Snipt . SniptListView = Backbone . View . extend ( { el : 'section#snipts' , initialize : function ( opts ) { var that = this ; opts . snipts . each ( this . addExistingSnipt ) ; this . keyboardShortcuts ( ) ; var cmd ; if ( navigator . platform == 'MacPPC' || navigator . platform == 'MacIntel' ) { cmd = 'Cmd' ; }
2012-06-20 13:25:41 -07:00
else { cmd = 'Ctrl' ; }
2013-01-14 19:30:19 -08:00
$ ( 'span.cmd-ctrl' ) . text ( cmd ) ; $ ( 'button#add-snipt' ) . click ( function ( ) { that . addNewSnipt ( ) ; } ) ; } , addExistingSnipt : function ( ) { var $el = $ ( this ) ; var $created = $ ( 'li.created' , $el ) ; var $h1 = $ ( 'header h1 a' , $el ) ; var $public = $ ( 'div.public' , $el ) ; var $blog _post = $ ( 'div.blog-post' , $el ) ; var $publish _date = $ ( 'div.publish-date' , $el ) ; var $user = $ ( 'li.author a' , $el ) ; var is _public = $public . text ( ) === 'True' ? true : false ; var is _blog _post = $blog _post . text ( ) === 'True' ? true : false ; var tag _lis = $ ( 'section.tags li' , $el ) ; var tags = [ ] ; for ( var i = 0 ; i < tag _lis . length ; i ++ ) { var $tag = $ ( 'a' , tag _lis . eq ( i ) ) ; tags [ i ] = { name : $tag . text ( ) , absolute _url : $tag . attr ( 'href' ) } ; }
2013-02-08 10:11:14 -08:00
var is _pro = $user . siblings ( 'span.pro' ) . length ? true : false ; var data = { code : $ ( 'textarea.raw' , $el ) . text ( ) , description : $ ( 'textarea.description' , $el ) . text ( ) , created : $created . attr ( 'title' ) , created _formatted : $created . text ( ) , embed _url : $ ( 'div.embed-url' , $el ) . text ( ) , absolute _url : $h1 . attr ( 'href' ) , favorite _id : $el . data ( 'favorite-id' ) , id : parseInt ( $el . attr ( 'id' ) . replace ( 'snipt-' , '' ) , 0 ) , key : $ ( 'div.key' , $el ) . text ( ) , lexer : $ ( 'div.lexer' , $el ) . text ( ) , lexer _name : $ ( 'div.lexer-name' , $el ) . text ( ) , line _count : parseInt ( $ ( 'div.line-count' , $el ) . text ( ) , 0 ) , modified : $ ( 'div.modified' , $el ) . text ( ) , resource _uri : $ ( 'div.resource-uri' , $el ) . text ( ) , slug : $ ( 'div.slug' , $el ) . text ( ) , stylized : $ ( 'div.stylized' , $el ) . text ( ) , tags : tags , publish _date : $publish _date . text ( ) , tags _list : $ ( 'div.tags-list' , $el ) . text ( ) , title : $h1 . text ( ) , user : { absolute _url : $user . attr ( 'href' ) , username : $user . text ( ) , profile : { is _pro : is _pro } } } ; data [ 'public' ] = is _public ; data . blog _post = is _blog _post ; var view = new Snipt . SniptView ( { el : this , model : new Snipt . SniptModel ( data ) } ) ; } , addNewSnipt : function ( ) { var $articleNewSnipt = $ ( 'article#new-snipt' ) ; if ( $articleNewSnipt . length === 0 ) { window . site . snipt _list . $el . prepend ( '<article id="new-snipt" class="hidden snipt"></article>' ) ; var data = { id : '' , code : '' , description : '' , tags : [ ] , tags _list : '' , title : '' , lexer : 'text' , lexer _name : 'Text only' , new _from _js : true , user : { username : '' , profile : { is _pro : window . user _is _pro } } } ; data [ 'public' ] = false ; data . blog _post = false ; var newSniptView = new Snipt . SniptView ( { el : $ ( 'article#new-snipt' ) , model : new Snipt . SniptModel ( data ) } ) ; newSniptView . edit ( ) ; } else { $articleNewSnipt . trigger ( 'edit' ) ; }
2012-06-20 13:25:41 -07:00
return false ; } , escapeUI : function ( destroyed ) { if ( window . editing || destroyed ) { if ( ! window . site . $html . hasClass ( 'detail' ) ) { window . site . $body . removeClass ( 'detail' ) ; }
window . site . $main _edit . hide ( ) ; window . site . $body . removeClass ( 'editing' ) ; window . site . $main . show ( ) ; window . editing = true ; window . ui _halted = false ; if ( window . site . $snipts . index ( window . $selected ) === 0 ) { window . scrollTo ( 0 , 0 ) ; } else { window . site . $html _body . animate ( { scrollTop : window . $selected . offset ( ) . top - 50 } , 0 ) ; }
if ( destroyed ) { window . $selected . trigger ( 'fadeAndRemove' ) ; } } else { if ( ! window . ui _halted ) { if ( $selected ) { $selected . trigger ( 'deselect' ) ; }
2013-01-14 19:30:19 -08:00
window . site . $aside _nav . removeClass ( 'open' ) ; } } } , keyboardShortcuts : function ( ) { var that = this ; $selected = window . selected ; $document = $ ( document ) ; $document . bind ( 'keydown' , 'j' , function ( ) { if ( ! window . ui _halted ) { if ( ! $selected ) { window . site . $snipts . eq ( 0 ) . trigger ( 'selectSnipt' ) ; } else { $selected . trigger ( 'next' ) ; } } } ) ; $document . bind ( 'keydown' , 'k' , function ( ) { if ( ! window . ui _halted ) { if ( ! $selected ) { window . site . $snipts . eq ( 0 ) . trigger ( 'selectSnipt' ) ; } else { $selected . trigger ( 'prev' ) ; } } } ) ; $document . bind ( 'keydown' , 'c' , function ( e ) { if ( ! window . ui _halted && ! window . blog _post ) { if ( $selected ) { e . preventDefault ( ) ; $selected . trigger ( 'copyRaw' ) ; } } } ) ; $document . bind ( 'keydown' , 'Ctrl+e' , function ( ) { if ( ! window . ui _halted ) { if ( $selected ) { if ( $selected . hasClass ( 'editable' ) ) { $selected . trigger ( 'edit' ) ; } } } } ) ; $document . bind ( 'keydown' , 'Ctrl+backspace' , function ( ) { if ( ! window . ui _halted || window . editing ) { if ( $selected ) { if ( $selected . hasClass ( 'editable' ) ) { if ( confirm ( 'Are you sure you want to delete this snipt?' ) ) { $selected . trigger ( 'destroy' ) ; window . site . snipt _list . escapeUI ( true ) ; } } } } } ) ; $document . bind ( 'keydown' , 'Ctrl+del' , function ( ) { if ( ! window . ui _halted || window . editing ) { if ( $selected ) { if ( $selected . hasClass ( 'editable' ) ) { if ( confirm ( 'Are you sure you want to delete this snipt?' ) ) { $selected . trigger ( 'destroy' ) ; window . site . snipt _list . escapeUI ( true ) ; } } } } } ) ; $document . bind ( 'keydown' , 'Alt+n' , function ( ) { if ( ! window . ui _halted ) { that . addNewSnipt ( ) ; } } ) ; $document . bind ( 'keydown' , 'Ctrl+n' , function ( ) { if ( ! window . ui _halted ) { that . addNewSnipt ( ) ; } } ) ; $document . bind ( 'keydown' , 'Ctrl+s' , function ( ) { if ( window . editing ) { if ( $selected ) { if ( $selected . hasClass ( 'editable' ) ) { $ ( 'button.save' ) . click ( ) ; } } } } ) ; $document . bind ( 'keydown' , 'Ctrl+c' , function ( ) { if ( window . editing ) { if ( $selected ) { if ( $selected . hasClass ( 'editable' ) ) { $ ( 'button.save-and-close' ) . click ( ) ; } } } } ) ; $document . bind ( 'keydown' , 'esc' , function ( ) { that . escapeUI ( ) ; } ) ; $document . bind ( 'keydown' , 'g' , function ( ) { if ( ! window . ui _halted ) { if ( window . $selected ) { window . $selected . trigger ( 'deselect' ) ; }
2012-06-20 13:25:41 -07:00
window . scrollTo ( 0 , 0 ) ; } } ) ; $document . bind ( 'keydown' , 'Shift+g' , function ( ) { if ( ! window . ui _halted ) { if ( window . $selected ) { window . $selected . trigger ( 'deselect' ) ; }
2013-02-10 19:16:15 -08:00
window . scrollTo ( 0 , document . body . scrollHeight ) ; } } ) ; $document . bind ( 'keydown' , 'n' , function ( ) { if ( ! window . ui _halted ) { var $anc = $ ( 'li.next a' ) ; if ( $anc . length ) { if ( $anc . attr ( 'href' ) !== '#' ) { window . location = $anc . attr ( 'href' ) ; } } } } ) ; $document . bind ( 'keydown' , 'e' , function ( ) { if ( ! window . ui _halted ) { if ( $selected ) { if ( $selected . hasClass ( 'expandable' ) ) { $selected . trigger ( 'expand' ) ; } } } } ) ; $document . bind ( 'keydown' , 'u' , function ( ) { if ( ! window . ui _halted ) { if ( $selected ) { $selected . trigger ( 'goToAuthor' ) ; } } } ) ; $document . bind ( 'keydown' , 'p' , function ( ) { if ( ! window . ui _halted ) { var $anc = $ ( 'li.prev a' ) ; if ( $anc . length ) { if ( $anc . attr ( 'href' ) !== '#' ) { window . location = $anc . attr ( 'href' ) ; } } } } ) ; $document . bind ( 'keydown' , 'v' , function ( e ) { if ( ! window . ui _halted && ! window . blog _post ) { if ( $selected ) { e . preventDefault ( ) ; $selected . trigger ( 'embed' ) ; } } } ) ; $document . bind ( 'keydown' , 'o' , function ( ) { if ( ! window . ui _halted ) { if ( $selected ) { $selected . trigger ( 'detail' ) ; } } } ) ; $document . bind ( 'keydown' , 'return' , function ( ) { if ( ! window . ui _halted ) { if ( $selected ) { $selected . trigger ( 'detail' ) ; } } } ) ; } } ) ; } ) ( snipt . module ( 'snipt' ) ) ;
2013-02-11 22:04:14 -08:00
( function ( ) { if ( typeof angular !== 'undefined' ) { var root = this ; var $ = root . jQuery ; var controllers = { } ; var app = angular . module ( 'Account' , [ ] , function ( $routeProvider , $locationProvider ) { $locationProvider . html5Mode ( true ) ; $routeProvider . when ( '/account/' , { templateUrl : '/static/js/src/modules/partials/profile.html' , controller : controllers . ProfileController } ) ; $routeProvider . when ( '/account/billing/' , { templateUrl : '/static/js/src/modules/partials/billing.html' , controller : controllers . BillingController } ) ; $routeProvider . when ( '/account/blogging/' , { templateUrl : '/static/js/src/modules/partials/blogging.html' , controller : controllers . BloggingController } ) ; $routeProvider . when ( '/account/editor/' , { templateUrl : '/static/js/src/modules/partials/editor.html' , controller : controllers . EditorController } ) ; $routeProvider . otherwise ( { 'redirectTo' : function ( routeParams , locationPath ) { window . location = locationPath ; } } ) ; } ) ; app . config ( function ( $interpolateProvider ) { $interpolateProvider . startSymbol ( '[[' ) ; $interpolateProvider . endSymbol ( ']]' ) ; } ) ; app . factory ( 'AccountStorage' , function ( $http ) { return { getAccount : function ( ) { var promise = $http ( { method : 'GET' , url : '/api/private/profile/' + window . user _profile _id + '/' , headers : { 'Authorization' : 'ApiKey ' + window . user + ':' + window . api _key } } ) ; return promise ; } , saveAccount : function ( user , fields ) { var promise = $http ( { method : 'PUT' , url : '/api/private/profile/' + window . user _profile _id + '/' , headers : { 'Authorization' : 'ApiKey ' + window . user + ':' + window . api _key } , data : function ( ) { var userData = { } ; for ( var i = 0 ; i < fields . length ; i ++ ) { userData [ fields [ i ] ] = user [ fields [ i ] ] ; }
2013-02-11 22:01:55 -08:00
return userData ; } ( ) } ) ; return promise ; } } ; } ) ; controllers . BillingController = function ( $scope ) { $scope . section = 'Billing' ; } ; controllers . BloggingController = function ( $scope ) { $scope . fields = [ 'blog_title' , 'blog_theme' , 'blog_domain' , 'gittip_username' , 'disqus_shortname' , 'google_analytics_tracking_id' , 'gauges_site_id' , 'google_ad_client' , 'google_ad_slot' , 'google_ad_width' , 'google_ad_height' ] ; $scope . section = 'Blogging' ; $scope . blogThemeOptions = [ { id : 'D' , label : 'Default' } , { id : 'A' , label : 'Pro Adams' } ] ; } ; controllers . EditorController = function ( $scope ) { $scope . fields = [ 'default_editor' , 'editor_theme' ] ; $scope . section = 'Editor' ; $scope . editorOptions = [ { id : 'C' , label : 'CodeMirror' } , { id : 'T' , label : 'Textarea' } ] ; $scope . editorThemeOptions = [ { id : 'default' , label : 'Default' } , { id : 'ambiance' , label : 'Ambiance' } , { id : 'blackboard' , label : 'Blackboard' } , { id : 'cobalt' , label : 'Cobalt' } , { id : 'eclipse' , label : 'Eclipse' } , { id : 'elegant' , label : 'Elegant' } , { id : 'erlang-dark' , label : 'Erlang Dark' } , { id : 'lesser-dark' , label : 'Lesser Dark' } , { id : 'monokai' , label : 'Monokai' } , { id : 'neat' , label : 'Neat' } , { id : 'night' , label : 'Night' } , { id : 'rubyblue' , label : 'Ruby Blue' } , { id : 'solarized dark' , label : 'Solarized Dark' } , { id : 'solarized light' , label : 'Solarized Light' } , { id : 'twilight' , label : 'Twilight' } , { id : 'vibrant-ink' , label : 'Vibrant Ink' } , { id : 'xq-dark' , label : 'XQ Dark' } ] ; } ; controllers . MainController = function ( $scope , $route , AccountStorage ) { $scope . errors = [ ] ; $scope . saveButtonText = 'Save' ; $scope . route = $route ; AccountStorage . getAccount ( ) . then ( function ( response ) { $scope . user = response . data ; } ) ; $scope . saveFields = function ( fields ) { $scope . saveButtonText = 'Saving…' ; AccountStorage . saveAccount ( $scope . user , fields ) . then ( function onSuccess ( response ) { $scope . user = response . data ; $scope . success = true ; $scope . message = $scope . route . current . scope . section + ' settings saved.' ; $scope . saveButtonText = 'Save' ; $scope . errors = [ ] ; setTimeout ( function ( ) { $scope . success = null ; $scope . message = '' ; $scope . $apply ( ) ; } , 3000 ) ; } , function onError ( response ) { $scope . success = false ; $scope . saveButtonText = 'Save' ; if ( response ) { $scope . errors = response . data . profile ; $scope . message = 'Only spaces, letters, numbers, underscores, dashes, periods, forward slashes, and "at sign" are valid.' ; } else { $scope . message = 'There was an error saving your settings.' ; } } ) ; } ; } ; controllers . ProfileController = function ( $scope ) { $scope . section = 'Profile' ; } ; app . controller ( controllers ) ; } } ) . call ( this ) ; window . CodeMirror = function ( ) { "use strict" ; function s ( a , c ) { if ( ! ( this instanceof s ) ) return new s ( a , c ) ; this . options = c = c || { } ; for ( var d in vc ) ! c . hasOwnProperty ( d ) && vc . hasOwnProperty ( d ) && ( c [ d ] = vc [ d ] ) ; D ( c ) ; var e = this . display = t ( a ) ; e . wrapper . CodeMirror = this , A ( this ) , c . autofocus && ! o && sb ( this ) , this . view = u ( new qd ( [ new pd ( [ cd ( "" , null , ib ( e ) ) ] ) ] ) ) , this . nextOpId = 0 , v ( this ) , y ( this ) , c . lineWrapping && ( this . display . wrapper . className += " CodeMirror-wrap" ) , this . setValue ( c . value || "" ) , b && setTimeout ( Wd ( rb , this , ! 0 ) , 20 ) , this . view . history = xd ( ) , ub ( this ) ; var f ; try { f = document . activeElement == e . input } catch ( g ) { } f || c . autofocus && ! o ? setTimeout ( Wd ( Ub , this ) , 20 ) : Vb ( this ) , mb ( this , function ( ) { for ( var a in uc ) uc . propertyIsEnumerable ( a ) && uc [ a ] ( this , c [ a ] , xc ) ; for ( var b = 0 ; Bc . length > b ; ++ b ) Bc [ b ] ( this ) } ) ( ) } function t ( a ) { var b = { } , d = b . input = _d ( "textarea" , null , null , "position: absolute; padding: 0; width: 1px; height: 1em; outline: none;" ) ; d . setAttribute ( "wrap" , "off" ) , d . setAttribute ( "autocorrect" , "off" ) , d . setAttribute ( "autocapitalize" , "off" ) , b . inputDiv = _d ( "div" , [ d ] , null , "overflow: hidden; position: relative; width: 3px; height: 0px;" ) , b . scrollbarH = _d ( "div" , [ _d ( "div" , null , null , "height: 1px" ) ] , "CodeMirror-hscrollbar" ) , b . scrollbarV = _d ( "div" , [ _d ( "div" , null , null , "width: 1px" ) ] , "CodeMirror-vscrollbar" ) , b . scrollbarFiller = _d ( "div" , null , "CodeMirror-scrollbar-filler" ) , b . lineDiv = _d ( "div" ) , b . selectionDiv = _d ( "div" , null , null , "position: relative; z-index: 1" ) , b . cursor = _d ( "pre" , "\u00a0" , "CodeMirror-cursor" ) , b . otherCursor = _d ( "pre" , "\u00a0" , "CodeMirror-cursor CodeMirror-secondarycursor" ) , b . measure = _d ( "div" , null , "CodeMirror-measure" ) , b . lineSpace = _d ( "div" , [ b . measure , b . selectionDiv , b . lineDiv , b . cursor , b . otherCursor ] , null , "position: relative; outline: none" ) , b . mover = _d ( "div" , [ _d ( "div" , [ b . lineSpace ] , " CodeMirro
2013-01-13 19:30:54 -08:00
var a = e . input . value = " " + ( bc ( f . from , f . to ) ? "" : e . input . value ) , c = 0 ; e . prevInput = " " , e . input . selectionStart = 1 , e . input . selectionEnd = a . length , Wb = setTimeout ( function g ( ) { " " == e . prevInput && 0 == e . input . selectionStart ? mb ( b , Ec . selectAll ) ( b ) : 10 > c ++ ? Wb = setTimeout ( g , 500 ) : rb ( b ) } , 200 ) } } var e = b . display , f = b . view . sel , g = wb ( b , c ) , i = e . scroller . scrollTop ; if ( g && ! h ) { ( bc ( f . from , f . to ) || cc ( g , f . from ) || ! cc ( g , f . to ) ) && mb ( b , ic ) ( b , g , g ) ; var j = e . input . style . cssText ; e . inputDiv . style . position = "absolute" , e . input . style . cssText = "position: fixed; width: 30px; height: 30px; top: " + ( c . clientY - 5 ) + "px; left: " + ( c . clientX - 5 ) + "px; z-index: 1000; background: white; outline: none;" + "border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);" , sb ( b ) , rb ( b , ! 0 ) , bc ( f . from , f . to ) && ( e . input . value = e . prevInput = " " ) , a ? ( Dd ( c ) , Hd ( window , "mouseup" , function l ( ) { Id ( window , "mouseup" , l ) , setTimeout ( k , 20 ) } ) ) : setTimeout ( k , 50 ) } } function Yb ( a , b , c , d , e , f ) { var g = q && Sc ( a . view . doc , b , c ) ; if ( ! g ) return Zb ( a , b , c , d , e , f ) ; for ( var h = g . length - 1 ; h >= 1 ; -- h ) Zb ( a , g [ h ] . from , g [ h ] . to , [ "" ] , f ) ; return g . length ? Zb ( a , g [ 0 ] . from , g [ 0 ] . to , d , e , f ) : void 0 } function Zb ( a , b , c , d , e , f ) { if ( ! a . view . suppressEdits ) { var g = a . view , h = g . doc , i = [ ] ; h . iter ( b . line , c . line + 1 , function ( a ) { i . push ( _c ( a . text , a . markedSpans ) ) } ) ; var j = g . sel . from , k = g . sel . to , l = Rc ( $c ( i [ 0 ] ) , $c ( Sd ( i ) ) , b . ch , c . ch , d ) , m = _b ( a , b , c , l , e , f ) ; return g . history && yd ( a , b . line , d . length , i , f , j , k , g . sel . from , g . sel . to ) , m } } function $b ( a , b ) { var c = a . view . doc , d = a . view . history , e = ( "undo" == b ? d . done : d . undone ) . pop ( ) ; if ( e ) { for ( var f = { events : [ ] , fromBefore : e . fromAfter , toBefore : e . toAfter , fromAfter : e . fromBefore , toAfter : e . toBefore } , g = e . events . length - 1 ; g >= 0 ; g -= 1 ) { d . dirtyCounter += "undo" == b ? - 1 : 1 ; var h = e . events [ g ] , i = [ ] , j = h . start + h . added ; c . iter ( h . start , j , function ( a ) { i . push ( _c ( a . text , a . markedSpans ) ) } ) , f . events . push ( { start : h . start , added : h . old . length , old : i } ) ; var k = g ? null : { from : e . fromBefore , to : e . toBefore } ; _b ( a , { line : h . start , ch : 0 } , { line : j - 1 , ch : rd ( c , j - 1 ) . text . length } , h . old , k , b ) } ( "undo" == b ? d . undone : d . done ) . push ( f ) } } function _b ( a , b , c , d , e , f ) { var g = a . view , h = g . doc , i = a . display ; if ( ! g . suppressEdits ) { var j = c . line - b . line , k = rd ( h , b . line ) , l = rd ( h , c . line ) , m = ! 1 , n = b . line ; a . options . lineWrapping || ( n = td ( Wc ( h , k ) ) , h . iter ( n , c . line + 1 , function ( a ) { return B ( h , a ) == g . maxLineLength ? ( m = ! 0 , ! 0 ) : void 0 } ) ) ; var o = Sd ( d ) , p = ib ( i ) ; if ( 0 == b . ch && 0 == c . ch && "" == Zc ( o ) ) { for ( var q = [ ] , r = 0 , s = d . length - 1 ; s > r ; ++ r ) q . push ( cd ( Zc ( d [ r ] ) , $c ( d [ r ] ) , p ) ) ; dd ( a , l , l . text , $c ( o ) ) , j && h . remove ( b . line , j , a ) , q . length && h . insert ( b . line , q ) } else if ( k == l ) if ( 1 == d . length ) dd ( a , k , k . text . slice ( 0 , b . ch ) + Zc ( d [ 0 ] ) + k . text . slice ( c . ch ) , $c ( d [ 0 ] ) ) ; else { for ( var q = [ ] , r = 1 , s = d . length - 1 ; s > r ; ++ r ) q . push ( cd ( Zc ( d [ r ] ) , $c ( d [ r ] ) , p ) ) ; q . push ( cd ( Zc ( o ) + k . text . slice ( c . ch ) , $c ( o ) , p ) ) , dd ( a , k , k . text . slice ( 0 , b . ch ) + Zc ( d [ 0 ] ) , $c ( d [ 0 ] ) ) , h . insert ( b . line + 1 , q ) } else if ( 1 == d . length ) dd ( a , k , k . text . slice ( 0 , b . ch ) + Zc ( d [ 0 ] ) + l . text . slice ( c . ch ) , $c ( d [ 0 ] ) ) , h . remove ( b . line + 1 , j , a ) ; else { var q = [ ] ; dd ( a , k , k . text . slice ( 0 , b . ch ) + Zc ( d [ 0 ] ) , $c ( d [ 0 ] ) ) , dd ( a , l , Zc ( o ) + l . text . slice ( c . ch ) , $c ( o ) ) ; for ( var r = 1 , s = d . length - 1 ; s > r ; ++ r ) q . push ( cd ( Zc ( d [ r ] ) , $c ( d [ r ] ) , p ) ) ; j > 1 && h . remove ( b . line + 1 , j - 1 , a ) , h . insert ( b . line + 1 , q ) } if ( a . options . lineWrapping ) { var t = Math . max ( 5 , i . scroller . clientWidth / jb ( i ) - 3 ) ; h . iter ( b . line , b . line + d . length , function ( a ) { if ( 0 != a . height ) { var b = ( Math . ceil ( a . text . length / t ) || 1 ) * p ; b != a . height && sd ( a , b ) } } ) } else h . iter ( n , b . line + d . length , function ( a ) { var b = B ( h , a ) ; b > g . maxLineLength && ( g . maxLine = a , g . maxLineLength = b , g . maxLineChanged = ! 0 , m = ! 1 ) } ) , m && ( a . curOp . updateMaxLine = ! 0 ) ; g . frontier = Math . min ( g . frontier , b . line ) , U ( a , 400 ) ; var u = d . length - j - 1 ; if ( nb ( a , b . line , c . line + 1 , u ) , Ld ( a , "change" ) ) { for ( var r = 0 ; d . length > r ; ++ r ) "string" != typeof d [ r ] && ( d [ r ] = d [ r ] . text ) ; var v = { from : b , to : c , text : d , origin : f } ; if ( a . curOp . textChanged ) { for ( var w = a . curOp . textChanged ; w . next ; w = w . next ) ; w . next = v } else a . curOp . textChanged = v } var x , y , z = { line : b . line + d . length - 1 , ch : Zc ( o ) . length + ( 1 == d . length ? b . ch : 0 ) } ; if ( e && "string" != typeof e ) e . from ? ( x = e . from , y = e . to ) : x = y = e ; else if ( "end" == e ) x = y = z ; else if ( "start" == e ) x = y = b ; else if ( "around" == e ) x = b , y = z ; else { var A = function ( a ) { if ( cc ( a , b ) ) return a ; if ( ! cc ( c , a ) ) return z ; var d = a . line + u , e = a . ch ; return a . line == c . line && ( e += Zc ( o ) . length - ( c . ch - ( c . line == b . line ? b . ch : 0 ) ) ) , { line : d , ch : e } } ;
} ) , g . push ( rd ( d , f ) . text . slice ( 0 , b . ch ) ) , g . join ( c || "\n" ) } , triggerOnKeyDown : mb ( null , Sb ) , execCommand : function ( a ) { return Ec [ a ] ( this ) } , moveH : mb ( null , function ( a , b ) { var c = this . view . sel , d = 0 > a ? c . from : c . to ; ( c . shift || c . extend || bc ( c . from , c . to ) ) && ( d = rc ( this , a , b , ! 0 ) ) , hc ( this , d , d , a ) } ) , deleteH : mb ( null , function ( a , b ) { var c = this . view . sel ; bc ( c . from , c . to ) ? ac ( this , "" , c . from , rc ( this , a , b , ! 1 ) , "delete" ) : ac ( this , "" , c . from , c . to , "delete" ) , this . curOp . userSelChange = ! 0 } ) , moveV : mb ( null , function ( a , b ) { var i , c = this . view , d = c . doc , e = this . display , f = c . sel . head , g = eb ( this , f , "div" ) , h = g . left ; if ( null != c . goalColumn && ( h = c . goalColumn ) , "page" == b ) { var j = Math . min ( e . wrapper . clientHeight , window . innerHeight || document . documentElement . clientHeight ) ; i = g . top + a * j } else "line" == b && ( i = a > 0 ? g . bottom + 3 : g . top - 3 ) ; do { var k = fb ( this , h , i ) ; i += 5 * a } while ( k . outside && ( 0 > a ? i > 0 : d . height > i ) ) ; "page" == b && ( e . scrollbarV . scrollTop += db ( this , k , "div" ) . top - g . top ) , hc ( this , k , k , a ) , c . goalColumn = h } ) , toggleOverwrite : function ( ) { ( this . view . overwrite = ! this . view . overwrite ) ? this . display . cursor . className += " CodeMirror-overwrite" : this . display . cursor . className = this . display . cursor . className . replace ( " CodeMirror-overwrite" , "" ) } , posFromIndex : function ( a ) { var c , b = 0 , d = this . view . doc ; return d . iter ( 0 , d . size , function ( d ) { var e = d . text . length + 1 ; return e > a ? ( c = a , ! 0 ) : ( a -= e , ++ b , void 0 ) } ) , fc ( d , { line : b , ch : c } ) } , indexFromPos : function ( a ) { if ( 0 > a . line || 0 > a . ch ) return 0 ; var b = a . ch ; return this . view . doc . iter ( 0 , a . line , function ( a ) { b += a . text . length + 1 } ) , b } , scrollTo : function ( a , b ) { null != a && ( this . display . scrollbarH . scrollLeft = this . display . scroller . scrollLeft = a ) , null != b && ( this . display . scrollbarV . scrollTop = this . display . scroller . scrollTop = b ) , K ( this , [ ] ) } , getScrollInfo : function ( ) { var a = this . display . scroller , b = Md ; return { left : a . scrollLeft , top : a . scrollTop , height : a . scrollHeight - b , width : a . scrollWidth - b , clientHeight : a . clientHeight - b , clientWidth : a . clientWidth - b } } , scrollIntoView : function ( a ) { "number" == typeof a && ( a = { line : a , ch : 0 } ) , a = a ? fc ( this . view . doc , a ) : this . view . sel . head , mc ( this , a ) } , setSize : function ( a , b ) { function c ( a ) { return "number" == typeof a || /^\d+$/ . test ( a + "" ) ? a + "px" : a } null != a && ( this . display . wrapper . style . width = c ( a ) ) , null != b && ( this . display . wrapper . style . height = c ( b ) ) , this . refresh ( ) } , on : function ( a , b ) { Hd ( this , a , b ) } , off : function ( a , b ) { Id ( this , a , b ) } , operation : function ( a ) { return mb ( this , a ) ( ) } , refresh : function ( ) { bb ( this ) , this . display . scroller . scrollHeight > this . view . scrollTop && ( this . display . scrollbarV . scrollTop = this . display . scroller . scrollTop = this . view . scrollTop ) , K ( this , ! 0 ) } , getInputField : function ( ) { return this . display . input } , getWrapperElement : function ( ) { return this . display . wrapper } , getScrollerElement : function ( ) { return this . display . scroller } , getGutterElement : function ( ) { return this . display . gutters } } ; var uc = s . optionHandlers = { } , vc = s . defaults = { } , xc = s . Init = { toString : function ( ) { return "CodeMirror.Init" } } ; wc ( "value" , "" , function ( a , b ) { a . setValue ( b ) } , ! 0 ) , wc ( "mode" , null , v , ! 0 ) , wc ( "indentUnit" , 2 , v , ! 0 ) , wc ( "indentWithTabs" , ! 1 ) , wc ( "smartIndent" , ! 0 ) , wc ( "tabSize" , 4 , function ( a ) { v ( a ) , bb ( a ) , K ( a , ! 0 ) } , ! 0 ) , wc ( "electricChars" , ! 0 ) , wc ( "theme" , "default" , function ( a ) { y ( a ) , z ( a ) } , ! 0 ) , wc ( "keyMap" , "default" , x ) , wc ( "extraKeys" , null ) , wc ( "onKeyEvent" , null ) , wc ( "onDragEvent" , null ) , wc ( "lineWrapping" , ! 1 , w , ! 0 ) , wc ( "gutters" , [ ] , function ( a ) { D ( a . options ) , z ( a ) } , ! 0 ) , wc ( "lineNumbers" , ! 1 , function ( a ) { D ( a . options ) , z ( a ) } , ! 0 ) , wc ( "firstLineNumber" , 1 , z , ! 0 ) , wc ( "lineNumberFormatter" , function ( a ) { return a } , z , ! 0 ) , wc ( "showCursorWhenSelecting" , ! 1 , Q , ! 0 ) , wc ( "readOnly" , ! 1 , function ( a , b ) { "nocursor" == b ? ( Vb ( a ) , a . display . input . blur ( ) ) : b || rb ( a , ! 0 ) } ) , wc ( "dragDrop" , ! 0 ) , wc ( "cursorBlinkRate" , 530 ) , wc ( "cursorHeight" , 1 ) , wc ( "workTime" , 100 ) , wc ( "workDelay" , 100 ) , wc ( "flattenSpans" , ! 0 ) , wc ( "pollInterval" , 100 ) , wc ( "undoDepth" , 40 ) , wc ( "viewportMargin" , 10 , function ( a ) { a . refresh ( ) } , ! 0 ) , wc ( "tabindex" , null , function ( a , b ) { a . display . input . tabIndex = b || "" } ) , wc ( "autofocus" , null ) ; var yc = s . modes = { } , zc = s . mimeModes = { } ; s . defineMode = function ( a , b ) { if ( s . defaults . mode || "null" == a || ( s . defaults . mode = a ) , arguments . length > 2 ) { b . dependencies = [ ] ; for ( var c = 2 ; arguments . length > c ; ++ c ) b . dependencies . push ( arguments [ c ] ) } yc [ a ] = b } , s . defineMIME = function ( a , b ) { zc [ a ] = b } , s . resolveMode = function ( a ) { if ( "string" == t
} s = c ; break ; default : var v = i . next ( ) ; if ( '"' == v ) o . mode = "string" , s = c ; else if ( "'" != v || n . digit _or _colon . test ( i . peek ( ) ) ) if ( ";" == v ) i . skipToEnd ( ) , s = b ; else if ( r ( v , i ) ) s = e ; else if ( "(" == v || "[" == v ) { var y , w = "" , x = i . column ( ) ; if ( "(" == v ) for ( ; null != ( y = i . eat ( n . keyword _char ) ) ; ) w += y ; w . length > 0 && ( m . propertyIsEnumerable ( w ) || /^(?:def|with)/ . test ( w ) ) ? p ( o , x + h , v ) : ( i . eatSpace ( ) , i . eol ( ) || ";" == i . peek ( ) ? p ( o , x + 1 , v ) : p ( o , x + i . current ( ) . length , v ) ) , i . backUp ( i . current ( ) . length - 1 ) , s = f } else if ( ")" == v || "]" == v ) s = f , null != o . indentStack && o . indentStack . type == ( ")" == v ? "(" : "[" ) && q ( o ) ; else { if ( ":" == v ) return i . eatWhile ( n . lang _keyword ) , d ; i . eatWhile ( n . basic ) , s = k && k . propertyIsEnumerable ( i . current ( ) ) ? g : l && l . propertyIsEnumerable ( i . current ( ) ) ? a : j && j . propertyIsEnumerable ( i . current ( ) ) ? d : null } else s = d } return s } , indent : function ( a ) { return null == a . indentStack ? a . indentation : a . indentStack . indent } } } ) , CodeMirror . defineMIME ( "text/x-clojure" , "clojure" ) , CodeMirror . defineMode ( "coffeescript" , function ( a ) { function c ( a ) { return RegExp ( "^((" + a . join ( ")|(" ) + "))\\b" ) } function s ( a , c ) { if ( a . sol ( ) ) { var l = c . scopes [ 0 ] . offset ; if ( a . eatSpace ( ) ) { var m = a . indentation ( ) ; return m > l ? "indent" : l > m ? "dedent" : null } l > 0 && w ( a , c ) } if ( a . eatSpace ( ) ) return null ; var q = a . peek ( ) ; if ( a . match ( "####" ) ) return a . skipToEnd ( ) , "comment" ; if ( a . match ( "###" ) ) return c . tokenize = u , c . tokenize ( a , c ) ; if ( "#" === q ) return a . skipToEnd ( ) , "comment" ; if ( a . match ( /^-?[0-9\.]/ , ! 1 ) ) { var s = ! 1 ; if ( a . match ( /^-?\d*\.\d+(e[\+\-]?\d+)?/i ) && ( s = ! 0 ) , a . match ( /^-?\d+\.\d*/ ) && ( s = ! 0 ) , a . match ( /^-?\.\d+/ ) && ( s = ! 0 ) , s ) return "." == a . peek ( ) && a . backUp ( 1 ) , "number" ; var v = ! 1 ; if ( a . match ( /^-?0x[0-9a-f]+/i ) && ( v = ! 0 ) , a . match ( /^-?[1-9]\d*(e[\+\-]?\d+)?/ ) && ( v = ! 0 ) , a . match ( /^-?0(?![\dx])/i ) && ( v = ! 0 ) , v ) return "number" } if ( a . match ( o ) ) return c . tokenize = t ( a . current ( ) , "string" ) , c . tokenize ( a , c ) ; if ( a . match ( p ) ) { if ( "/" != a . current ( ) || a . match ( /^.*\// , ! 1 ) ) return c . tokenize = t ( a . current ( ) , "string-2" ) , c . tokenize ( a , c ) ; a . backUp ( 1 ) } return a . match ( h ) || a . match ( g ) ? "punctuation" : a . match ( f ) || a . match ( d ) || a . match ( k ) ? "operator" : a . match ( e ) ? "punctuation" : a . match ( r ) ? "atom" : a . match ( n ) ? "keyword" : a . match ( i ) ? "variable" : a . match ( j ) ? "property" : ( a . next ( ) , b ) } function t ( c , d ) { var e = 1 == c . length ; return function ( f , g ) { for ( ; ! f . eol ( ) ; ) if ( f . eatWhile ( /[^'"\/\\]/ ) , f . eat ( "\\" ) ) { if ( f . next ( ) , e && f . eol ( ) ) return d } else { if ( f . match ( c ) ) return g . tokenize = s , d ; f . eat ( /['"\/]/ ) } return e && ( a . mode . singleLineStringErrors ? d = b : g . tokenize = s ) , d } } function u ( a , b ) { for ( ; ! a . eol ( ) ; ) { if ( a . eatWhile ( /[^#]/ ) , a . match ( "###" ) ) { b . tokenize = s ; break } a . eatWhile ( "#" ) } return "comment" } function v ( b , c , d ) { d = d || "coffee" ; var e = 0 ; if ( "coffee" === d ) { for ( var f = 0 ; c . scopes . length > f ; f ++ ) if ( "coffee" === c . scopes [ f ] . type ) { e = c . scopes [ f ] . offset + a . indentUnit ; break } } else e = b . column ( ) + b . current ( ) . length ; c . scopes . unshift ( { offset : e , type : d } ) } function w ( a , b ) { if ( 1 != b . scopes . length ) { if ( "coffee" === b . scopes [ 0 ] . type ) { for ( var c = a . indentation ( ) , d = - 1 , e = 0 ; b . scopes . length > e ; ++ e ) if ( c === b . scopes [ e ] . offset ) { d = e ; break } if ( - 1 === d ) return ! 0 ; for ( ; b . scopes [ 0 ] . offset !== c ; ) b . scopes . shift ( ) ; return ! 1 } return b . scopes . shift ( ) , ! 1 } } function x ( a , c ) { var d = c . tokenize ( a , c ) , e = a . current ( ) ; if ( "." === e ) return d = c . tokenize ( a , c ) , e = a . current ( ) , "variable" === d ? "variable" : b ; "return" === e && ( c . dedent += 1 ) , ( "->" !== e && "=>" !== e || c . lambda || "coffee" != c . scopes [ 0 ] . type || "" !== a . peek ( ) ) && "indent" !== d || v ( a , c ) ; var f = "[({" . indexOf ( e ) ; return - 1 !== f && v ( a , c , "])}" . slice ( f , f + 1 ) ) , l . exec ( e ) && v ( a , c ) , "then" == e && w ( a , c ) , "dedent" === d && w ( a , c ) ? b : ( f = "])}" . indexOf ( e ) , - 1 !== f && w ( a , c ) ? b : ( c . dedent > 0 && a . eol ( ) && "coffee" == c . scopes [ 0 ] . type && ( c . scopes . length > 1 && c . scopes . shift ( ) , c . dedent -= 1 ) , d ) ) } var b = "error" , d = RegExp ( "^[\\+\\-\\*/%&|\\^~<>!?]" ) , e = RegExp ( "^[\\(\\)\\[\\]\\{\\},:`=;\\.]" ) , f = RegExp ( "^((->)|(=>)|(\\+\\+)|(\\+\\=)|(\\-\\-)|(\\-\\=)|(\\*\\*)|(\\*\\=)|(\\/\\/)|(\\/\\=)|(==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//))" ) , g = RegExp ( "^((\\.\\.)|(\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))" ) , h = RegExp ( "^((\\.\\.\\.)|(//=)|(>>=)|(<<=)|(\\*\\*=))" ) , i = RegExp ( "^[_A-Za-z$][_A-Za-z$0-9]*" ) , j = RegExp ( "^(@|this.)[_A-Za-z$][_A-Za-z$0-9]*" ) , k = c ( [ "and" , "or" , "not" , "is" , "isnt" , "in" , "instanceof" , "typeof" ] ) , l = [ "for" , "while" , "loop" , "if" , "unless" , "else" , "switch" , "try" , "catch" , "finally" , "class" ] , m = [ "break" , "by" , " contin
return { startState : function ( ) { return { tokenStack : [ ] , context : ! 1 , lastToken : null } } , token : function ( a , b ) { return x ( a , b ) } , indent : function ( a , b ) { return E ( a , b ) } } } ) , CodeMirror . defineMode ( "gfm" , function ( a ) { function c ( a ) { return a . code = ! 1 , null } var b = 0 , d = { startState : function ( ) { return { code : ! 1 , codeBlock : ! 1 , ateSpace : ! 1 } } , copyState : function ( a ) { return { code : a . code , codeBlock : a . codeBlock , ateSpace : a . ateSpace } } , token : function ( a , c ) { if ( c . codeBlock ) return a . match ( /^```/ ) ? ( c . codeBlock = ! 1 , null ) : ( a . skipToEnd ( ) , null ) ; if ( a . sol ( ) && ( c . code = ! 1 ) , a . sol ( ) && a . match ( /^```/ ) ) return a . skipToEnd ( ) , c . codeBlock = ! 0 , null ; if ( "`" === a . peek ( ) ) { a . next ( ) ; var d = a . pos ; a . eatWhile ( "`" ) ; var e = 1 + a . pos - d ; return c . code ? e === b && ( c . code = ! 1 ) : ( b = e , c . code = ! 0 ) , null } if ( c . code ) return a . next ( ) , null ; if ( a . eatSpace ( ) ) return c . ateSpace = ! 0 , null ; if ( a . sol ( ) || c . ateSpace ) { if ( c . ateSpace = ! 1 , a . match ( /^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/ ) ) return "link" ; if ( a . match ( /^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/ ) ) return "link" } return a . match ( /^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?\u00ab\u00bb\u201c\u201d\u2018\u2019]))/i ) ? "link" : ( a . next ( ) , null ) } , blankLine : c } ; return CodeMirror . defineMIME ( "gfmBase" , { name : "markdown" , underscoresBreakWords : ! 1 , fencedCodeBlocks : ! 0 } ) , CodeMirror . overlayMode ( CodeMirror . getMode ( a , "gfmBase" ) , d ) } , "markdown" ) , CodeMirror . defineMode ( "go" , function ( a ) { function g ( a , b ) { var g = a . next ( ) ; if ( '"' == g || "'" == g || "`" == g ) return b . tokenize = h ( g ) , b . tokenize ( a , b ) ; if ( /[\d\.]/ . test ( g ) ) return "." == g ? a . match ( /^[0-9]+([eE][\-+]?[0-9]+)?/ ) : "0" == g ? a . match ( /^[xX][0-9a-fA-F]+/ ) || a . match ( /^0[0-7]+/ ) : a . match ( /^[0-9]*\.?[0-9]*([eE][\-+]?[0-9]+)?/ ) , "number" ; if ( /[\[\]{}\(\),;\:\.]/ . test ( g ) ) return f = g , null ; if ( "/" == g ) { if ( a . eat ( "*" ) ) return b . tokenize = i , i ( a , b ) ; if ( a . eat ( "/" ) ) return a . skipToEnd ( ) , "comment" } if ( e . test ( g ) ) return a . eatWhile ( e ) , "operator" ; a . eatWhile ( /[\w\$_]/ ) ; var j = a . current ( ) ; return c . propertyIsEnumerable ( j ) ? ( ( "case" == j || "default" == j ) && ( f = "case" ) , "keyword" ) : d . propertyIsEnumerable ( j ) ? "atom" : "variable" } function h ( a ) { return function ( b , c ) { for ( var e , d = ! 1 , f = ! 1 ; null != ( e = b . next ( ) ) ; ) { if ( e == a && ! d ) { f = ! 0 ; break } d = ! d && "\\" == e } return ( f || ! d && "`" != a ) && ( c . tokenize = g ) , "string" } } function i ( a , b ) { for ( var d , c = ! 1 ; d = a . next ( ) ; ) { if ( "/" == d && c ) { b . tokenize = g ; break } c = "*" == d } return "comment" } function j ( a , b , c , d , e ) { this . indented = a , this . column = b , this . type = c , this . align = d , this . prev = e } function k ( a , b , c ) { return a . context = new j ( a . indented , b , c , null , a . context ) } function l ( a ) { var b = a . context . type ; return ( ")" == b || "]" == b || "}" == b ) && ( a . indented = a . context . indented ) , a . context = a . context . prev } var f , b = a . indentUnit , c = { "break" : ! 0 , "case" : ! 0 , chan : ! 0 , "const" : ! 0 , "continue" : ! 0 , "default" : ! 0 , defer : ! 0 , "else" : ! 0 , fallthrough : ! 0 , "for" : ! 0 , func : ! 0 , go : ! 0 , "goto" : ! 0 , "if" : ! 0 , "import" : ! 0 , "interface" : ! 0 , map : ! 0 , "package" : ! 0 , range : ! 0 , "return" : ! 0 , select : ! 0 , struct : ! 0 , "switch" : ! 0 , type : ! 0 , "var" : ! 0 , bool : ! 0 , "byte" : ! 0 , complex64 : ! 0 , complex128 : ! 0 , float32 : ! 0 , float64 : ! 0 , int8 : ! 0 , int16 : ! 0 , int32 : ! 0 , int64 : ! 0 , string : ! 0 , uint8 : ! 0 , uint16 : ! 0 , uint32 : ! 0 , uint64 : ! 0 , "int" : ! 0 , uint : ! 0 , uintptr : ! 0 } , d = { "true" : ! 0 , "false" : ! 0 , iota : ! 0 , nil : ! 0 , append : ! 0 , cap : ! 0 , close : ! 0 , complex : ! 0 , copy : ! 0 , imag : ! 0 , len : ! 0 , make : ! 0 , "new" : ! 0 , panic : ! 0 , print : ! 0 , println : ! 0 , real : ! 0 , recover : ! 0 } , e = /[+\-*&^%:=<>!|\/]/ ; return { startState : function ( a ) { return { tokenize : null , context : new j ( ( a || 0 ) - b , 0 , "top" , ! 1 ) , indented : 0 , startOfLine : ! 0 } } , token : function ( a , b ) { var c = b . context ; if ( a . sol ( ) && ( null == c . align && ( c . align = ! 1 ) , b . indented = a . indentation ( ) , b . startOfLine = ! 0 , "case" == c . type && ( c . type = "}" ) ) , a . eatSpace ( ) ) return null ; f = null ; var d = ( b . tokenize || g ) ( a , b ) ; return "comment" == d ? d : ( null == c . align && ( c . align = ! 0 ) , "{" == f ? k ( b , a . column ( ) , "}" ) : "[" == f ? k ( b , a . column ( ) , "]" ) : "(" == f ? k ( b , a . column ( ) , ")" ) : "case" == f ? c . type = "case" : "}" == f && "}" == c . type ? c = l ( b ) : f == c . type && l ( b ) , b . startOfLine = ! 1 , d ) } , indent : function ( a , c ) { if ( a . tokenize != g && null != a . tokenize ) return 0 ; var d = a . context , e = c && c . charAt ( 0 ) ; if ( "case" == d . type && /^(?:case|default)\b/ . test ( c ) ) return a . context . type = "}" , d . indented ; var f = e == d . type ; return d . align ? d . column + ( f ?
if ( "&" == e ) return a . eatWhile ( /[\w\-]/ ) , d ( null , e ) ; if ( a . eatWhile ( /[\w\\\-_%.{]/ ) , "string" == c ) return d ( "string" , "string" ) ; if ( null != a . current ( ) . match ( /(^http$|^https$)/ ) ) return a . eatWhile ( /[\w\\\-_%.{:\/]/ ) , d ( "string" , "string" ) ; if ( "<" == a . peek ( ) || ">" == a . peek ( ) ) return d ( "tag" , "tag" ) ; if ( /\(/ . test ( a . peek ( ) ) ) return d ( null , e ) ; if ( "/" == a . peek ( ) && void 0 != b . stack [ b . stack . length - 1 ] ) return d ( "string" , "string" ) ; if ( a . current ( ) . match ( /\-\d|\-.\d/ ) ) return d ( "number" , "unit" ) ; if ( f ( a . current ( ) . toLowerCase ( ) ) ) return d ( "tag" , "tag" ) ; if ( /\/|[\s\)]/ . test ( a . peek ( ) || a . eol ( ) || a . eatSpace ( ) && "/" == a . peek ( ) ) && - 1 !== a . current ( ) . indexOf ( "." ) ) return "{" == a . current ( ) . substring ( a . current ( ) . length - 1 , a . current ( ) . length ) ? ( a . backUp ( 1 ) , d ( "tag" , "tag" ) ) : ( a . eatSpace ( ) , /[{<>.a-zA-Z\/]/ . test ( a . peek ( ) ) || a . eol ( ) ? d ( "tag" , "tag" ) : d ( "string" , "string" ) ) ; if ( a . eol ( ) || "[" == a . peek ( ) || "#" == a . peek ( ) || "tag" == c ) return "{" == a . current ( ) . substring ( a . current ( ) . length - 1 , a . current ( ) . length ) && a . backUp ( 1 ) , d ( "tag" , "tag" ) ; if ( "compare" == c || "a" == c || "(" == c ) return d ( "string" , "string" ) ; if ( "|" == c || "-" == a . current ( ) || "[" == c ) return d ( null , e ) ; if ( ":" == a . peek ( ) ) { a . next ( ) ; var h = ":" == a . peek ( ) ? ! 0 : ! 1 ; if ( h ) a . backUp ( 1 ) ; else { var m = a . pos , n = a . current ( ) . length ; a . eatWhile ( /[a-z\\\-]/ ) ; var o = a . pos ; if ( null != a . current ( ) . substring ( n - 1 ) . match ( g ) ) return a . backUp ( o - ( m - 1 ) ) , d ( "tag" , "tag" ) ; a . backUp ( o - ( m - 1 ) ) } return h ? d ( "tag" , "tag" ) : d ( "variable" , "variable" ) } return d ( "variable" , "variable" ) } if ( ":" == e ) return a . eatWhile ( /[a-z\\\-]/ ) , g . test ( a . current ( ) ) ? d ( "tag" , "tag" ) : ":" == a . peek ( ) ? ( a . next ( ) , a . eatWhile ( /[a-z\\\-]/ ) , a . current ( ) . match ( /\:\:\-(o|ms|moz|webkit)\-/ ) ? d ( "string" , "string" ) : g . test ( a . current ( ) . substring ( 1 ) ) ? d ( "tag" , "tag" ) : d ( null , e ) ) : d ( null , e ) ; if ( "~" != e ) return d ( null , e ) ; if ( "r" == c ) return d ( "string" , "string" ) } } } function i ( a , b ) { return a . skipToEnd ( ) , b . tokenize = h , d ( "comment" , "comment" ) } function j ( a , b ) { for ( var e , c = ! 1 ; null != ( e = a . next ( ) ) ; ) { if ( c && "/" == e ) { b . tokenize = h ; break } c = "*" == e } return d ( "comment" , "comment" ) } function k ( a , b ) { for ( var e , c = 0 ; null != ( e = a . next ( ) ) ; ) { if ( c >= 2 && ">" == e ) { b . tokenize = h ; break } c = "-" == e ? c + 1 : 0 } return d ( "comment" , "comment" ) } function l ( a ) { return function ( b , c ) { for ( var f , e = ! 1 ; null != ( f = b . next ( ) ) && ( f != a || e ) ; ) e = ! e && "\\" == f ; return e || ( c . tokenize = h ) , d ( "string" , "string" ) } } var c , b = a . indentUnit , e = "a abbr acronym address applet area article aside audio b base basefont bdi bdo big blockquote body br button canvas caption cite code col colgroup command datalist dd del details dfn dir div dl dt em embed fieldset figcaption figure font footer form frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html i iframe img input ins keygen kbd label legend li link map mark menu meta meter nav noframes noscript object ol optgroup option output p param pre progress q rp rt ruby s samp script section select small source span strike strong style sub summary sup table tbody td textarea tfoot th thead time title tr track tt u ul var video wbr" . split ( " " ) , g = /(^\:root$|^\:nth\-child$|^\:nth\-last\-child$|^\:nth\-of\-type$|^\:nth\-last\-of\-type$|^\:first\-child$|^\:last\-child$|^\:first\-of\-type$|^\:last\-of\-type$|^\:only\-child$|^\:only\-of\-type$|^\:empty$|^\:link|^\:visited$|^\:active$|^\:hover$|^\:focus$|^\:target$|^\:lang$|^\:enabled^\:disabled$|^\:checked$|^\:first\-line$|^\:first\-letter$|^\:before$|^\:after$|^\:not$|^\:required$|^\:invalid$)/ ; return { startState : function ( a ) { return { tokenize : h , baseIndent : a || 0 , stack : [ ] } } , token : function ( a , b ) { if ( a . eatSpace ( ) ) return null ; var d = b . tokenize ( a , b ) , e = b . stack [ b . stack . length - 1 ] ; return "hash" == c && "rule" == e ? d = "atom" : "variable" == d && ( "rule" == e ? d = null : e && "@media{" != e || ( d = "when" == a . current ( ) ? "variable" : /[\s,|\s\)|\s]/ . test ( a . peek ( ) ) ? "tag" : c ) ) , "rule" == e && /^[\{\};]$/ . test ( c ) && b . stack . pop ( ) , "{" == c ? "@media" == e ? b . stack [ b . stack . length - 1 ] = "@media{" : b . stack . push ( "{" ) : "}" == c ? b . stack . pop ( ) : "@media" == c ? b . stack . push ( "@media" ) : "{" == e && "comment" != c && b . stack . push ( "rule" ) , d } , indent : function ( a , c ) { var d = a . stack . length ; return /^\}/ . test ( c ) && ( d -= "rule" == a . stack [ a . stack . length - 1 ] ? 2 : 1 ) , a . baseIndent + d * b } , electricChars : "}" } } ) , CodeMirror . defineMIME ( "text/x-less" , "less" ) , CodeMirror . mimeModes . hasOwnProperty ( "text/css" ) || CodeMirror . defineMIM
return { startState : function ( ) { return { tokenize : f , chain : null , style : null , tail : null } } , token : function ( a , b ) { return ( b . tokenize || f ) ( a , b ) } , electricChars : "{}" } } ) , CodeMirror . defineMIME ( "text/x-perl" , "perl" ) , CodeMirror . StringStream . prototype . look = function ( a ) { return this . string . charAt ( this . pos + ( a || 0 ) ) } , CodeMirror . StringStream . prototype . prefix = function ( a ) { if ( a ) { var b = this . pos - a ; return this . string . substr ( b >= 0 ? b : 0 , a ) } return this . string . substr ( 0 , this . pos - 1 ) } , CodeMirror . StringStream . prototype . suffix = function ( a ) { var b = this . string . length , c = b - this . pos + 1 ; return this . string . substr ( this . pos , a && b > a ? a : c ) } , CodeMirror . StringStream . prototype . nsuffix = function ( a ) { var b = this . pos , c = a || this . string . length - this . pos + 1 ; return this . pos += c , this . string . substr ( b , c ) } , CodeMirror . StringStream . prototype . eatSuffix = function ( a ) { var c , b = this . pos + a ; this . pos = 0 >= b ? 0 : b >= ( c = this . string . length - 1 ) ? c : b } , function ( ) { function a ( a ) { for ( var b = { } , c = a . split ( " " ) , d = 0 ; c . length > d ; ++ d ) b [ c [ d ] ] = ! 0 ; return b } function b ( a ) { return function ( b , c ) { return b . match ( a ) ? c . tokenize = null : b . skipToEnd ( ) , "string" } } var c = { name : "clike" , keywords : a ( "abstract and array as break case catch class clone const continue declare default do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements interface instanceof namespace new or private protected public static switch throw trait try use var while xor die echo empty exit eval include include_once isset list require require_once return print unset __halt_compiler self static parent" ) , blockKeywords : a ( "catch do else elseif for foreach if switch try while" ) , atoms : a ( "true false null TRUE FALSE NULL __CLASS__ __DIR__ __FILE__ __LINE__ __METHOD__ __FUNCTION__ __NAMESPACE__" ) , builtin : a ( " func _num _args func _get _arg func _get _args strlen strcmp strncmp strcasecmp strncasecmp each error _reporting define defined trigger _error user _error set _error _handler restore _error _handler get _declared _classes get _loaded _extensions extension _loaded get _extension _funcs debug _backtrace constant bin2hex sleep usleep time mktime gmmktime strftime gmstrftime strtotime date gmdate getdate localtime checkdate flush wordwrap htmlspecialchars htmlentities html _entity _decode md5 md5 _file crc32 getimagesize image _type _to _mime _type phpinfo phpversion phpcredits strnatcmp strnatcasecmp substr _count strspn strcspn strtok strtoupper strtolower strpos strrpos strrev hebrev hebrevc nl2br basename dirname pathinfo stripslashes stripcslashes strstr stristr strrchr str _shuffle str _word _count strcoll substr substr _replace quotemeta ucfirst ucwords strtr addslashes addcslashes rtrim str _replace str _repeat count _chars chunk _split trim ltrim strip _tags similar _text explode implode setlocale localeconv parse _str str _pad chop strchr sprintf printf vprintf vsprintf sscanf fscanf parse _url urlencode urldecode rawurlencode rawurldecode readlink linkinfo link unlink exec system escapeshellcmd escapeshellarg passthru shell _exec proc _open proc _close rand srand getrandmax mt _rand mt _srand mt _getrandmax base64 _decode base64 _encode abs ceil floor round is _finite is _nan is _infinite bindec hexdec octdec decbin decoct dechex base _convert number _format fmod ip2long long2ip getenv putenv getopt microtime gettimeofday getrusage uniqid quoted _printable _decode set _time _limit get _cfg _var magic _quotes _runtime set _magic _quotes _runtime get _magic _quotes _gpc get _magic _quotes _runtime import _request _variables error _log serialize unserialize memory _get _usage var _dump var _export debug _zval _dump print _r highlight _file show _source highlight _string ini _get ini _get _all ini _set ini _alter ini _restore get _include _path set _include _path restore _include _path setcookie header headers _sent connection _aborted connection _status ignore _user _abort parse _ini _file is _uploaded _file move _uploaded _file intval floatval doubleval strval gettype settype is _null is _resource is _bool is _long is _float is _int is _integer is _double is _real is _numeric is _string is _array is _object is _scalar ereg ereg _replace eregi eregi _replace split spliti join sql _regcase dl pclose popen readfile rewind rmdir umask fclose
} return ":" == c ? a . eat ( "'" ) ? h ( k ( "'" , "atom" , ! 1 ) , a , b ) : a . eat ( '"' ) ? h ( k ( '"' , "atom" , ! 0 ) , a , b ) : ( a . eatWhile ( /[\w\?]/ ) , "atom" ) : "@" == c ? ( a . eat ( "@" ) , a . eatWhile ( /[\w\?]/ ) , "variable-2" ) : "$" == c ? ( a . next ( ) , a . eatWhile ( /[\w\?]/ ) , "variable-3" ) : /\w/ . test ( c ) ? ( a . eatWhile ( /[\w\?]/ ) , a . eat ( ":" ) ? "atom" : "ident" ) : "|" != c || ! b . varList && "{" != b . lastTok && "do" != b . lastTok ? /[\(\)\[\]{}\\;]/ . test ( c ) ? ( g = c , null ) : "-" == c && a . eat ( ">" ) ? "arrow" : /[=+\-\/*:\.^%<>~|]/ . test ( c ) ? ( a . eatWhile ( /[=+\-\/*:\.^%<>~|]/ ) , "operator" ) : null : ( g = "|" , null ) } function j ( ) { var a = 1 ; return function ( b , c ) { if ( "}" == b . peek ( ) ) { if ( a -- , 0 == a ) return c . tokenize . pop ( ) , c . tokenize [ c . tokenize . length - 1 ] ( b , c ) } else "{" == b . peek ( ) && a ++ ; return i ( b , c ) } } function k ( a , b , c , d ) { return function ( e , f ) { for ( var h , g = ! 1 ; null != ( h = e . next ( ) ) ; ) { if ( h == a && ( d || ! g ) ) { f . tokenize . pop ( ) ; break } if ( c && "#" == h && ! g && e . eat ( "{" ) ) { f . tokenize . push ( j ( arguments . callee ) ) ; break } g = ! g && "\\" == h } return b } } function l ( a ) { return function ( b , c ) { return b . match ( a ) ? c . tokenize . pop ( ) : b . skipToEnd ( ) , "string" } } function m ( a , b ) { return a . sol ( ) && a . match ( "=end" ) && a . eol ( ) && b . tokenize . pop ( ) , a . skipToEnd ( ) , "comment" } var g , c = b ( [ "alias" , "and" , "BEGIN" , "begin" , "break" , "case" , "class" , "def" , "defined?" , "do" , "else" , "elsif" , "END" , "end" , "ensure" , "false" , "for" , "if" , "in" , "module" , "next" , "not" , "or" , "redo" , "rescue" , "retry" , "return" , "self" , "super" , "then" , "true" , "undef" , "unless" , "until" , "when" , "while" , "yield" , "nil" , "raise" , "throw" , "catch" , "fail" , "loop" , "callcc" , "caller" , "lambda" , "proc" , "public" , "protected" , "private" , "require" , "load" , "require_relative" , "extend" , "autoload" ] ) , d = b ( [ "def" , "class" , "case" , "for" , "while" , "do" , "module" , "then" , "catch" , "loop" , "proc" , "begin" ] ) , e = b ( [ "end" , "until" ] ) , f = { "[" : "]" , "{" : "}" , "(" : ")" } ; return { startState : function ( ) { return { tokenize : [ i ] , indented : 0 , context : { type : "top" , indented : - a . indentUnit } , continuedLine : ! 1 , lastTok : null , varList : ! 1 } } , token : function ( a , b ) { a . sol ( ) && ( b . indented = a . indentation ( ) ) ; var h , f = b . tokenize [ b . tokenize . length - 1 ] ( a , b ) ; if ( "ident" == f ) { var i = a . current ( ) ; f = c . propertyIsEnumerable ( a . current ( ) ) ? "keyword" : /^[A-Z]/ . test ( i ) ? "tag" : "def" == b . lastTok || "class" == b . lastTok || b . varList ? "def" : "variable" , d . propertyIsEnumerable ( i ) ? h = "indent" : e . propertyIsEnumerable ( i ) ? h = "dedent" : "if" != i && "unless" != i || a . column ( ) != a . indentation ( ) || ( h = "indent" ) } return ( g || f && "comment" != f ) && ( b . lastTok = i || g || f ) , "|" == g && ( b . varList = ! b . varList ) , "indent" == h || /[\(\[\{]/ . test ( g ) ? b . context = { prev : b . context , type : g || f , indented : b . indented } : ( "dedent" == h || /[\)\]\}]/ . test ( g ) ) && b . context . prev && ( b . context = b . context . prev ) , a . eol ( ) && ( b . continuedLine = "\\" == g || "operator" == f ) , f } , indent : function ( b , c ) { if ( b . tokenize [ b . tokenize . length - 1 ] != i ) return 0 ; var d = c && c . charAt ( 0 ) , e = b . context , g = e . type == f [ d ] || "keyword" == e . type && /^(?:end|until|else|elsif|when|rescue)\b/ . test ( c ) ; return e . indented + ( g ? 0 : a . indentUnit ) + ( b . continuedLine ? a . indentUnit : 0 ) } , electricChars : "}de" } } ) , CodeMirror . defineMIME ( "text/x-ruby" , "ruby" ) , CodeMirror . defineMode ( "rust" , function ( ) { function h ( a , b ) { return f = a , b } function i ( a , b ) { var c = a . next ( ) ; if ( '"' == c ) return b . tokenize = j , b . tokenize ( a , b ) ; if ( "'" == c ) return f = "atom" , a . eat ( "\\" ) ? a . skipTo ( "'" ) ? ( a . next ( ) , "string" ) : "error" : ( a . next ( ) , a . eat ( "'" ) ? "string" : "error" ) ; if ( "/" == c ) { if ( a . eat ( "/" ) ) return a . skipToEnd ( ) , "comment" ; if ( a . eat ( "*" ) ) return b . tokenize = k ( 1 ) , b . tokenize ( a , b ) } if ( "#" == c ) return a . eat ( "[" ) ? ( f = "open-attr" , null ) : ( a . eatWhile ( /\w/ ) , h ( "macro" , "meta" ) ) ; if ( ":" == c && a . match ( ":<" ) ) return h ( "op" , null ) ; if ( c . match ( /\d/ ) || "." == c && a . eat ( /\d/ ) ) { var d = ! 1 ; return a . match ( /^x[\da-f]+/i ) || a . match ( /^b[01]+/ ) || ( a . eatWhile ( /\d/ ) , a . eat ( "." ) && ( d = ! 0 , a . eatWhile ( /\d/ ) ) , a . match ( /^e[+\-]?\d+/i ) && ( d = ! 0 ) ) , d ? a . match ( /^f(?:32|64)/ ) : a . match ( /^[ui](?:8|16|32|64)/ ) , h ( "atom" , "number" ) } return c . match ( /[()\[\]{}:;,]/ ) ? h ( c , null ) : "-" == c && a . eat ( ">" ) ? h ( "->" , null ) : c . match ( e ) ? ( a . eatWhile ( e ) , h ( "op" , null ) ) : ( a . eatWhile ( /\w/ ) , g = a . current ( ) , a . match ( /^::\w/ ) ? ( a . backUp ( 1 ) , h ( "prefix" , "variable-2" ) ) : b . keywords . propertyIsEnumerable ( g ) ? h ( b . keywords [ g ] , g . match ( /true|false/ ) ? "atom" : "keyword" ) : h ( "name" , "variable" ) ) } function j ( a , b ) { for ( var c , d = ! 1 ; c = a . next ( ) ; ) { if ( '"' == c && ! d ) return b . tokenize = i , h ( "atom" , "string" ) ; d = ! d && "\\" == c } return h ( "op" , "string" ) } function k ( a ) { return function ( b , c ) { fo
} function i ( a ) { return function ( b , c ) { for ( ; ! b . eol ( ) ; ) if ( b . next ( ) == a ) { c . tokenize = h ; break } return "string" } } function j ( ) { return function ( a , b ) { for ( ; ! a . eol ( ) ; ) { var c = a . next ( ) , d = a . peek ( ) ; if ( " " == c || "," == c || /[ )}]/ . test ( d ) ) { b . tokenize = h ; break } } return "string" } } function m ( ) { for ( var a = arguments . length - 1 ; a >= 0 ; a -- ) k . cc . push ( arguments [ a ] ) } function n ( ) { return m . apply ( null , arguments ) , ! 0 } function o ( a , b ) { var c = k . context && k . context . noIndent ; k . context = { prev : k . context , pluginName : a , indent : k . indented , startOfLine : b , noIndent : c } } function p ( ) { k . context && ( k . context = k . context . prev ) } function q ( a ) { if ( "openPlugin" == a ) return k . pluginName = f , n ( t , r ( k . startOfLine ) ) ; if ( "closePlugin" == a ) { var b = ! 1 ; return k . context ? ( b = k . context . pluginName != f , p ( ) ) : b = ! 0 , b && ( l = "error" ) , n ( s ( b ) ) } return "string" == a ? ( k . context && "!cdata" == k . context . name || o ( "!cdata" ) , k . tokenize == d && p ( ) , n ( ) ) : n ( ) } function r ( a ) { return function ( b ) { return "selfclosePlugin" == b || "endPlugin" == b ? n ( ) : "endPlugin" == b ? ( o ( k . pluginName , a ) , n ( ) ) : n ( ) } } function s ( a ) { return function ( b ) { return a && ( l = "error" ) , "endPlugin" == b ? n ( ) : m ( ) } } function t ( a ) { return "keyword" == a ? ( l = "attribute" , n ( t ) ) : "equals" == a ? n ( u , t ) : m ( ) } function u ( a ) { return "keyword" == a ? ( l = "string" , n ( ) ) : "string" == a ? n ( v ) : m ( ) } function v ( a ) { return "string" == a ? n ( v ) : m ( ) } var f , g , k , l , e = a . indentUnit ; return { startState : function ( ) { return { tokenize : d , cc : [ ] , indented : 0 , startOfLine : ! 0 , pluginName : null , context : null } } , token : function ( a , b ) { if ( a . sol ( ) && ( b . startOfLine = ! 0 , b . indented = a . indentation ( ) ) , a . eatSpace ( ) ) return null ; l = g = f = null ; var c = b . tokenize ( a , b ) ; if ( ( c || g ) && "comment" != c ) for ( k = b ; ; ) { var d = b . cc . pop ( ) || q ; if ( d ( g || c ) ) break } return b . startOfLine = ! 1 , l || c } , indent : function ( a , b ) { var c = a . context ; if ( c && c . noIndent ) return 0 ; for ( c && /^{\// . test ( b ) && ( c = c . prev ) ; c && ! c . startOfLine ; ) c = c . prev ; return c ? c . indent + e : 0 } , electricChars : "/" } } ) , CodeMirror . defineMIME ( "text/tiki" , "tiki" ) , CodeMirror . defineMode ( "vb" , function ( a , b ) { function d ( a ) { return RegExp ( "^((" + a . join ( ")|(" ) + "))\\b" , "i" ) } function z ( a , b ) { b . currentIndent ++ } function A ( a , b ) { b . currentIndent -- } function B ( a , b ) { if ( a . eatSpace ( ) ) return null ; var d = a . peek ( ) ; if ( "'" === d ) return a . skipToEnd ( ) , "comment" ; if ( a . match ( /^((&H)|(&O))?[0-9\.a-f]/i , ! 1 ) ) { var k = ! 1 ; if ( a . match ( /^\d*\.\d+F?/i ) ? k = ! 0 : a . match ( /^\d+\.\d*F?/ ) ? k = ! 0 : a . match ( /^\.\d+F?/ ) && ( k = ! 0 ) , k ) return a . eat ( /J/i ) , "number" ; var l = ! 1 ; if ( a . match ( /^&H[0-9a-f]+/i ) ? l = ! 0 : a . match ( /^&O[0-7]+/i ) ? l = ! 0 : a . match ( /^[1-9]\d*F?/ ) ? ( a . eat ( /J/i ) , l = ! 0 ) : a . match ( /^0(?![\dx])/i ) && ( l = ! 0 ) , l ) return a . eat ( /L/i ) , "number" } return a . match ( s ) ? ( b . tokenize = C ( a . current ( ) ) , b . tokenize ( a , b ) ) : a . match ( i ) || a . match ( h ) ? null : a . match ( g ) || a . match ( e ) || a . match ( n ) ? "operator" : a . match ( f ) ? null : a . match ( x ) ? ( z ( a , b ) , b . doInCurrentLine = ! 0 , "keyword" ) : a . match ( t ) ? ( b . doInCurrentLine ? b . doInCurrentLine = ! 1 : z ( a , b ) , "keyword" ) : a . match ( u ) ? "keyword" : a . match ( w ) ? ( A ( a , b ) , A ( a , b ) , "keyword" ) : a . match ( v ) ? ( A ( a , b ) , "keyword" ) : a . match ( r ) ? "keyword" : a . match ( q ) ? "keyword" : a . match ( j ) ? "variable" : ( a . next ( ) , c ) } function C ( a ) { var d = 1 == a . length , e = "string" ; return function ( f , g ) { for ( ; ! f . eol ( ) ; ) { if ( f . eatWhile ( /[^'"]/ ) , f . match ( a ) ) return g . tokenize = B , e ; f . eat ( /['"]/ ) } if ( d ) { if ( b . singleLineStringErrors ) return c ; g . tokenize = B } return e } } function D ( a , b ) { var d = b . tokenize ( a , b ) , e = a . current ( ) ; if ( "." === e ) return d = b . tokenize ( a , b ) , e = a . current ( ) , "variable" === d ? "variable" : c ; var f = "[({" . indexOf ( e ) ; return - 1 !== f && z ( a , b ) , "dedent" === y && A ( a , b ) ? c : ( f = "])}" . indexOf ( e ) , - 1 !== f && A ( a , b ) ? c : d ) } var c = "error" , e = RegExp ( "^[\\+\\-\\*/%&\\\\|\\^~<>!]" ) , f = RegExp ( "^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]" ) , g = RegExp ( "^((==)|(<>)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))" ) , h = RegExp ( "^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))" ) , i = RegExp ( "^((//=)|(>>=)|(<<=)|(\\*\\*=))" ) , j = RegExp ( "^[_A-Za-z][_A-Za-z0-9]*" ) , k = [ "class" , "module" , "sub" , "enum" , "select" , "while" , "if" , "function" , "get" , "set" , "property" , "try" ] , l = [ "else" , "elseif" , "case" , "catch" ] , m = [ "next" , "loop" ] , n = d ( [ "and" , "or" , "not" , "xor" , "in" ] ) , o = [ "as" , "dim" , "break" , "continue" , "optional" , "then" , "until" , "goto" , "byval" , "byref" , "new" , "handles" , "property" , "return" , "const" , "private" , "protected" , "friend" , "public" , "shared" , "static" , "true" , "false" ] , p = [ "integer" , "string" , "double" , "decimal" , "boolean" , "short" , "char" , "float" , "single" ] , q =
2013-02-09 19:08:30 -08:00
} function F ( ) { this . reset ( ) } function G ( a , b ) { this . clear ( ) , a && this . set ( a , b ) } function H ( a ) { this . registers = a , this . unamedRegister = a [ '"' ] = new G } function N ( a , b , c ) { var d = Math . min ( Math . max ( 0 , b . line ) , a . lineCount ( ) - 1 ) , e = Y ( a , d ) - 1 ; e = c ? e + 1 : e ; var f = Math . min ( Math . max ( 0 , b . ch ) , e ) ; return { line : d , ch : f } } function P ( a ) { var b = { } ; for ( var c in a ) a . hasOwnProperty ( c ) && ( b [ c ] = a [ c ] ) ; return b } function Q ( a , b , c ) { return { line : a . line + b , ch : a . ch + c } } function S ( a , b ) { for ( var c = 0 ; a . length > c ; c ++ ) if ( a [ c ] != b [ c ] && "character" != b [ c ] ) return ! 1 ; return ! 0 } function U ( a , b , c ) { return function ( ) { for ( var d = 0 ; c > d ; d ++ ) b ( a ) } } function V ( a ) { return { line : a . line , ch : a . ch } } function W ( a , b ) { return a . ch == b . ch && a . line == b . line } function X ( a , b ) { return a . line < b . line ? ! 0 : a . line == b . line && a . ch < b . ch ? ! 0 : ! 1 } function Y ( a , b ) { return a . getLine ( b ) . length } function Z ( a ) { return a . split ( "" ) . reverse ( ) . join ( "" ) } function $ ( a ) { return a . trim ? a . trim ( ) : a . replace ( /^\s+|\s+$/g , "" ) } function _ ( a ) { return a . replace ( /([.?*+$\[\]\/\\(){}|\-])/g , "\\$1" ) } function ab ( a , b ) { b . visualMode = ! 1 , b . visualLine = ! 1 ; var c = a . getCursor ( "anchor" ) , d = a . getCursor ( "head" ) ; W ( c , d ) || a . setCursor ( N ( a , d ) ) } function bb ( a , b , c ) { var d = a . getRange ( b , c ) , e = d . split ( "\n" ) ; e . length > 1 && y ( e . pop ( ) ) && ( c . line -- , c . ch = Y ( a , c . line ) ) } function cb ( a , b , c ) { b . ch = 0 , c . ch = 0 , c . line ++ } function db ( a ) { if ( ! a ) return 0 ; var b = a . search ( /\S/ ) ; return - 1 == b ? a . length : b } function eb ( a , b , c , d , e ) { var j , f = a . getCursor ( ) , g = a . getLine ( f . line ) , h = f . ch , i = g . substring ( h ) ; if ( j = e ? i . search ( /\w/ ) : i . search ( /\S/ ) , - 1 == j ) return null ; h += j , i = g . substring ( h ) ; var l , k = g . substring ( 0 , h ) ; l = d ? /^\S+/ : /\w/ . test ( g . charAt ( h ) ) ? /^\w+/ : /^[^\w\s]+/ ; var m = l . exec ( i ) , n = h , o = h + m [ 0 ] . length - 1 , p = l . exec ( Z ( k ) ) ; return p && ( n -= p [ 0 ] . length ) , b && o ++ , { start : { line : f . line , ch : n } , end : { line : f . line , ch : o } } } function fb ( a , b , c , d ) { for ( var e = b . line , h = b . ch , i = a . getLine ( e ) , j = c ? 1 : - 1 , k = d ? g : f ; ; ) { for ( var l = j > 0 ? i . length : - 1 , m = l , n = l ; h != l ; ) { for ( var o = ! 1 , p = 0 ; k . length > p && ! o ; ++ p ) if ( k [ p ] . test ( i . charAt ( h ) ) ) { for ( m = h ; h != l && k [ p ] . test ( i . charAt ( h ) ) ; ) h += j ; if ( n = h , o = m != n , m == b . ch && e == b . line && n == m + j ) continue ; return { from : Math . min ( m , n + 1 ) , to : Math . max ( m , n ) , line : e } } o || ( h += j ) } if ( e += j , ! r ( a , e ) ) return null ; i = a . getLine ( e ) , h = j > 0 ? 0 : i . length } throw "The impossible happened." } function gb ( a , b , c , d , e ) { for ( var f = a . getCursor ( ) , g = 0 ; b > g ; g ++ ) for ( var j , i = ( f . ch , f . line ) , k = ! 1 ; ! k ; ) { if ( j = fb ( a , f , c , e ) , k = ! 0 , ! j ) return c ? { line : f . line , ch : Y ( a , f . line ) } : { line : f . line , ch : 0 } ; f . line = j . line , c && d ? f . ch = j . to - 1 : c && ! d ? z ( f . ch , j . from , j . to ) && j . line == i ? ( k = ! 1 , f . ch = j . to - 1 ) : f . ch = j . from : ! c && d ? z ( f . ch , j . from , j . to ) && j . line == i ? ( k = ! 1 , f . ch = j . from ) : f . ch = j . to : c || d || ( f . ch = j . from ) } return f } function hb ( a , b , c , d ) { for ( var g , e = a . getCursor ( ) , f = e . ch , h = 0 ; b > h ; h ++ ) { var i = a . getLine ( e . line ) ; if ( g = jb ( f , i , d , c , ! 0 ) , - 1 == g ) return e ; f = g } return { line : a . getCursor ( ) . line , ch : g } } function ib ( a , b ) { var c = a . getCursor ( ) . line ; return N ( a , { line : c , ch : b - 1 } ) } function jb ( a , b , c , d , e ) { var f ; return d ? ( f = b . indexOf ( c , a + 1 ) , - 1 == f || e || ( f -= 1 ) ) : ( f = b . lastIndexOf ( c , a - 1 ) , - 1 == f || e || ( f += 1 ) ) , f } function kb ( a , b , c ) { var d = b . line ; c = c ? c : a . getLine ( d ) . charAt ( b . ch ) , A ( c , [ "(" , "[" , "{" ] ) ; var f = { "(" : ")" , ")" : "(" , "[" : "]" , "]" : "[" , "{" : "}" , "}" : "{" } [ c ] ; if ( ! f ) return b ; for ( var g = { "(" : 1 , "{" : 1 , "[" : 1 } [ c ] || - 1 , h = 1 , i = c , j = b . ch , k = a . getLine ( d ) ; i && h > 0 ; ) j += g , i = k . charAt ( j ) , i || ( d += g , j = 0 , k = a . getLine ( d ) || "" , i = k . charAt ( j ) ) , i === c ? h ++ : i === f && h -- ; return i ? { line : d , ch : j } : b } function lb ( a , b , c ) { var d = a . getCursor ( ) , e = kb ( a , d , b ) , f = kb ( a , e ) ; return f . ch += c ? 1 : 0 , e . ch += c ? 0 : 1 , { start : f , end : e } } function nb ( a , b , c ) { var g , h , i , j , d = a . getCursor ( ) , e = a . getLine ( d . line ) , f = e . split ( "" ) , k = f . indexOf ( b ) ; if ( k > d . ch ? d . ch = k : d . ch > k && f [ d . ch ] == b && ( h = d . ch , -- d . ch ) , f [ d . ch ] != b || h ) for ( i = d . ch ; i > - 1 && ! g ; i -- ) f [ i ] == b && ( g = i + 1 ) ; else g = d . ch + 1 ; if ( g && ! h ) for ( i = g , j = f . length ; j > i && ! h ; i ++ ) f [ i ] == b && ( h = i ) ; return g && h ? ( c && ( -- g , ++ h ) , { start : { line : d . line , ch : g } , end : { line : d . line , ch : h } } ) : { start : d , end : d } } function ob ( ) { this . marked = null } function pb ( a ) { var b = D ( a ) ; return b . searchState _ || ( b . searchState _ = new ob ) } function qb ( a , b , c , d ) { a . openDialog ? a . openDialog ( b , d , { bottom : ! 0 } ) : d ( prompt ( c , "" ) ) } function rb ( a ) { for ( var b = ! 1 , c = [ ] , d = 0 ; a . length > d ; d ++ ) { var e = a . charAt ( d ) ; b || "/" != e || c . push ( d ) , b = "\\" == e } return c } function sb ( a , b , c , d ) { var f , g , e = rb ( b ) ; if ( e . length ) { f = b . substring ( 0 , e [ 0 ] ) ; var h = b . substring ( e [ 0 ] ) ; g = - 1 != h . indexOf ( "i" ) } else f = b ; if ( ! f