2013-07-11 16:17:21 +02:00
/ *
2015-06-10 19:05:58 +03:00
This is a generated file . DO NOT EDIT .
2013-07-11 16:17:21 +02:00
2015-06-10 19:05:58 +03:00
Copyright ( C ) 2010 - 2015 KO GmbH < copyright @ kogmbh . com >
2013-12-03 20:34:48 +01:00
2013-08-06 10:46:47 +02:00
@ licstart
2015-06-10 19:05:58 +03:00
This file is the compiled version of the WebODF library .
2014-03-04 14:37:28 +01:00
WebODF is free software : you can redistribute it and / or modify it
under the terms of the GNU Affero General Public License ( GNU AGPL )
as published by the Free Software Foundation , either version 3 of
the License , or ( at your option ) any later version .
WebODF is distributed in the hope that it will be useful , but
WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU Affero General Public License for more details .
You should have received a copy of the GNU Affero General Public License
along with WebODF . If not , see < http : //www.gnu.org/licenses/>.
@ licend
@ source : http : //www.webodf.org/
@ source : https : //github.com/kogmbh/WebODF/
* /
2015-06-10 19:05:58 +03:00
var webodf _version = "0.5.7-66-g25bf592" ; function Runtime ( ) { } Runtime . prototype . getVariable = function ( h ) { } ; Runtime . prototype . toJson = function ( h ) { } ; Runtime . prototype . fromJson = function ( h ) { } ; Runtime . prototype . byteArrayFromString = function ( h , k ) { } ; Runtime . prototype . byteArrayToString = function ( h , k ) { } ; Runtime . prototype . read = function ( h , k , c , b ) { } ; Runtime . prototype . readFile = function ( h , k , c ) { } ; Runtime . prototype . readFileSync = function ( h , k ) { } ; Runtime . prototype . loadXML = function ( h , k ) { } ; Runtime . prototype . writeFile = function ( h , k , c ) { } ;
Runtime . prototype . deleteFile = function ( h , k ) { } ; Runtime . prototype . log = function ( h , k ) { } ; Runtime . prototype . setTimeout = function ( h , k ) { } ; Runtime . prototype . clearTimeout = function ( h ) { } ; Runtime . prototype . libraryPaths = function ( ) { } ; Runtime . prototype . currentDirectory = function ( ) { } ; Runtime . prototype . setCurrentDirectory = function ( h ) { } ; Runtime . prototype . type = function ( ) { } ; Runtime . prototype . getDOMImplementation = function ( ) { } ; Runtime . prototype . parseXML = function ( h ) { } ; Runtime . prototype . exit = function ( h ) { } ;
Runtime . prototype . getWindow = function ( ) { } ; Runtime . prototype . requestAnimationFrame = function ( h ) { } ; Runtime . prototype . cancelAnimationFrame = function ( h ) { } ; Runtime . prototype . assert = function ( h , k ) { } ; var IS _COMPILED _CODE = ! 0 ;
Runtime . byteArrayToString = function ( h , k ) { function c ( b ) { var c = "" , m , q = b . length ; for ( m = 0 ; m < q ; m += 1 ) c += String . fromCharCode ( b [ m ] & 255 ) ; return c } function b ( b ) { var c = "" , m , q = b . length , f = [ ] , e , a , d , r ; for ( m = 3 <= q && 239 === b [ 0 ] && 187 === b [ 1 ] && 191 === b [ 2 ] ? 3 : 0 ; m < q ; m += 1 ) e = b [ m ] , 128 > e ? f . push ( e ) : ( m += 1 , a = b [ m ] , 194 <= e && 224 > e ? f . push ( ( e & 31 ) << 6 | a & 63 ) : ( m += 1 , d = b [ m ] , 224 <= e && 240 > e ? f . push ( ( e & 15 ) << 12 | ( a & 63 ) << 6 | d & 63 ) : ( m += 1 , r = b [ m ] , 240 <= e && 245 > e && ( e = ( e & 7 ) << 18 | ( a & 63 ) << 12 | ( d & 63 ) << 6 | r & 63 , e -= 65536 , f . push ( ( e >> 10 ) + 55296 , ( e & 1023 ) + 56320 ) ) ) ) ) , 1E3 <= f . length &&
( c += String . fromCharCode . apply ( null , f ) , f . length = 0 ) ; return c + String . fromCharCode . apply ( null , f ) } var g ; "utf8" === k ? g = b ( h ) : ( "binary" !== k && this . log ( "Unsupported encoding: " + k ) , g = c ( h ) ) ; return g } ; Runtime . getVariable = function ( h ) { try { return eval ( h ) } catch ( k ) { } } ; Runtime . toJson = function ( h ) { return JSON . stringify ( h ) } ; Runtime . fromJson = function ( h ) { return JSON . parse ( h ) } ; Runtime . getFunctionName = function ( h ) { return void 0 === h . name ? ( h = /function\s+(\w+)/ . exec ( h ) ) && h [ 1 ] : h . name } ;
Runtime . assert = function ( h , k ) { if ( ! h ) throw this . log ( "alert" , "ASSERTION FAILED:\n" + k ) , Error ( k ) ; } ;
function BrowserRuntime ( ) { function h ( b ) { var f = b . length , e , a , d = 0 ; for ( e = 0 ; e < f ; e += 1 ) a = b . charCodeAt ( e ) , d += 1 + ( 128 < a ) + ( 2048 < a ) , 55040 < a && 57344 > a && ( d += 1 , e += 1 ) ; return d } function k ( b , f , e ) { var a = b . length , d , r ; f = new Uint8Array ( new ArrayBuffer ( f ) ) ; e ? ( f [ 0 ] = 239 , f [ 1 ] = 187 , f [ 2 ] = 191 , r = 3 ) : r = 0 ; for ( e = 0 ; e < a ; e += 1 ) d = b . charCodeAt ( e ) , 128 > d ? ( f [ r ] = d , r += 1 ) : 2048 > d ? ( f [ r ] = 192 | d >>> 6 , f [ r + 1 ] = 128 | d & 63 , r += 2 ) : 55040 >= d || 57344 <= d ? ( f [ r ] = 224 | d >>> 12 & 15 , f [ r + 1 ] = 128 | d >>> 6 & 63 , f [ r + 2 ] = 128 | d & 63 , r += 3 ) : ( e += 1 , d = ( d - 55296 << 10 | b . charCodeAt ( e ) - 56320 ) + 65536 ,
f [ r ] = 240 | d >>> 18 & 7 , f [ r + 1 ] = 128 | d >>> 12 & 63 , f [ r + 2 ] = 128 | d >>> 6 & 63 , f [ r + 3 ] = 128 | d & 63 , r += 4 ) ; return f } function c ( b ) { var f = b . length , e = new Uint8Array ( new ArrayBuffer ( f ) ) , a ; for ( a = 0 ; a < f ; a += 1 ) e [ a ] = b . charCodeAt ( a ) & 255 ; return e } function b ( b , f ) { var e ; void 0 !== f ? e = b : f = b ; console . log ( f ) ; m . enableAlerts && "alert" === e && alert ( f ) } function g ( b , f , e ) { if ( 0 !== e . status || e . responseText ) if ( 200 === e . status || 0 === e . status ) { if ( e . response && "string" !== typeof e . response ) "binary" === f ? ( e = e . response , e = new Uint8Array ( e ) ) : e = String ( e . response ) ; else if ( "binary" ===
f ) if ( null !== e . responseBody && "undefined" !== String ( typeof VBArray ) ) { e = ( new VBArray ( e . responseBody ) ) . toArray ( ) ; var a = e . length ; f = new Uint8Array ( new ArrayBuffer ( a ) ) ; for ( b = 0 ; b < a ; b += 1 ) f [ b ] = e [ b ] ; e = f } else { ( b = e . getResponseHeader ( "Content-Length" ) ) && ( b = parseInt ( b , 10 ) ) ; if ( b && b !== e . responseText . length ) a : { a = e . responseText ; f = ! 1 ; var d = h ( a ) ; if ( "number" === typeof b ) { if ( b !== d && b !== d + 3 ) { a = void 0 ; break a } f = d + 3 === b ; d = b } a = k ( a , d , f ) } void 0 === a && ( a = c ( e . responseText ) ) ; e = a } else e = e . responseText ; e = { err : null , data : e } } else e = { err : e . responseText ||
e . statusText , data : null } ; else e = { err : "File " + b + " is empty." , data : null } ; return e } function n ( b , f , e ) { var a = new XMLHttpRequest ; a . open ( "GET" , b , e ) ; a . overrideMimeType && ( "binary" !== f ? a . overrideMimeType ( "text/plain; charset=" + f ) : a . overrideMimeType ( "text/plain; charset=x-user-defined" ) ) ; return a } function p ( b , f , e ) { var a = n ( b , f , ! 0 ) ; a . onreadystatechange = function ( ) { var d ; 4 === a . readyState && ( d = g ( b , f , a ) , e ( d . err , d . data ) ) } ; try { a . send ( null ) } catch ( d ) { e ( d . message , null ) } } var m = this ; this . byteArrayFromString = function ( b , f ) { var e ;
"utf8" === f ? e = k ( b , h ( b ) , ! 1 ) : ( "binary" !== f && m . log ( "unknown encoding: " + f ) , e = c ( b ) ) ; return e } ; this . byteArrayToString = Runtime . byteArrayToString ; this . getVariable = Runtime . getVariable ; this . fromJson = Runtime . fromJson ; this . toJson = Runtime . toJson ; this . readFile = p ; this . read = function ( b , f , e , a ) { p ( b , "binary" , function ( d , r ) { var l = null ; if ( r ) { if ( "string" === typeof r ) throw "This should not happen." ; l = r . subarray ( f , f + e ) } a ( d , l ) } ) } ; this . readFileSync = function ( b , f ) { var e = n ( b , f , ! 1 ) , a ; try { e . send ( null ) ; a = g ( b , f , e ) ; if ( a . err ) throw a . err ;
if ( null === a . data ) throw "No data read from " + b + "." ; } catch ( d ) { throw d ; } return a . data } ; this . writeFile = function ( b , f , e ) { var a = new XMLHttpRequest , d ; a . open ( "PUT" , b , ! 0 ) ; a . onreadystatechange = function ( ) { 4 === a . readyState && ( 0 !== a . status || a . responseText ? 200 <= a . status && 300 > a . status || 0 === a . status ? e ( null ) : e ( "Status " + String ( a . status ) + ": " + a . responseText || a . statusText ) : e ( "File " + b + " is empty." ) ) } ; d = f . buffer && ! a . sendAsBinary ? f . buffer : m . byteArrayToString ( f , "binary" ) ; try { a . sendAsBinary ? a . sendAsBinary ( d ) : a . send ( d ) } catch ( r ) { m . log ( "HUH? " +
r + " " + f ) , e ( r . message ) } } ; this . deleteFile = function ( b , f ) { var e = new XMLHttpRequest ; e . open ( "DELETE" , b , ! 0 ) ; e . onreadystatechange = function ( ) { 4 === e . readyState && ( 200 > e . status && 300 <= e . status ? f ( e . responseText ) : f ( null ) ) } ; e . send ( null ) } ; this . loadXML = function ( b , f ) { var e = new XMLHttpRequest ; e . open ( "GET" , b , ! 0 ) ; e . overrideMimeType && e . overrideMimeType ( "text/xml" ) ; e . onreadystatechange = function ( ) { 4 === e . readyState && ( 0 !== e . status || e . responseText ? 200 === e . status || 0 === e . status ? f ( null , e . responseXML ) : f ( e . responseText , null ) : f ( "File " +
b + " is empty." , null ) ) } ; try { e . send ( null ) } catch ( a ) { f ( a . message , null ) } } ; this . log = b ; this . enableAlerts = ! 0 ; this . assert = Runtime . assert ; this . setTimeout = function ( b , f ) { return setTimeout ( function ( ) { b ( ) } , f ) } ; this . clearTimeout = function ( b ) { clearTimeout ( b ) } ; this . libraryPaths = function ( ) { return [ "lib" ] } ; this . setCurrentDirectory = function ( ) { } ; this . currentDirectory = function ( ) { return "" } ; this . type = function ( ) { return "BrowserRuntime" } ; this . getDOMImplementation = function ( ) { return window . document . implementation } ; this . parseXML =
function ( b ) { return ( new DOMParser ) . parseFromString ( b , "text/xml" ) } ; this . exit = function ( c ) { b ( "Calling exit with code " + String ( c ) + ", but exit() is not implemented." ) } ; this . getWindow = function ( ) { return window } ; this . requestAnimationFrame = function ( b ) { var f = window . requestAnimationFrame || window . webkitRequestAnimationFrame || window . mozRequestAnimationFrame || window . msRequestAnimationFrame , e = 0 ; if ( f ) f . bind ( window ) , e = f ( b ) ; else return setTimeout ( b , 15 ) ; return e } ; this . cancelAnimationFrame = function ( b ) { var f = window . cancelAnimationFrame ||
window . webkitCancelAnimationFrame || window . mozCancelAnimationFrame || window . msCancelAnimationFrame ; f ? ( f . bind ( window ) , f ( b ) ) : clearTimeout ( b ) } }
function NodeJSRuntime ( ) { function h ( b ) { var f = b . length , e , a = new Uint8Array ( new ArrayBuffer ( f ) ) ; for ( e = 0 ; e < f ; e += 1 ) a [ e ] = b [ e ] ; return a } function k ( c , f , e ) { function a ( a , r ) { if ( a ) return e ( a , null ) ; if ( ! r ) return e ( "No data for " + c + "." , null ) ; if ( "string" === typeof r ) return e ( a , r ) ; e ( a , h ( r ) ) } c = g . resolve ( n , c ) ; "binary" !== f ? b . readFile ( c , f , a ) : b . readFile ( c , null , a ) } var c = this , b = require ( "fs" ) , g = require ( "path" ) , n = "" , p , m ; this . byteArrayFromString = function ( b , f ) { var e = new Buffer ( b , f ) , a , d = e . length , r = new Uint8Array ( new ArrayBuffer ( d ) ) ;
for ( a = 0 ; a < d ; a += 1 ) r [ a ] = e [ a ] ; return r } ; this . byteArrayToString = Runtime . byteArrayToString ; this . getVariable = Runtime . getVariable ; this . fromJson = Runtime . fromJson ; this . toJson = Runtime . toJson ; this . readFile = k ; this . loadXML = function ( b , f ) { k ( b , "utf-8" , function ( e , a ) { if ( e ) return f ( e , null ) ; if ( ! a ) return f ( "No data for " + b + "." , null ) ; f ( null , c . parseXML ( a ) ) } ) } ; this . writeFile = function ( c , f , e ) { f = new Buffer ( f ) ; c = g . resolve ( n , c ) ; b . writeFile ( c , f , "binary" , function ( a ) { e ( a || null ) } ) } ; this . deleteFile = function ( c , f ) { c = g . resolve ( n , c ) ;
b . unlink ( c , f ) } ; this . read = function ( c , f , e , a ) { c = g . resolve ( n , c ) ; b . open ( c , "r+" , 666 , function ( d , r ) { if ( d ) a ( d , null ) ; else { var l = new Buffer ( e ) ; b . read ( r , l , 0 , e , f , function ( d ) { b . close ( r ) ; a ( d , h ( l ) ) } ) } } ) } ; this . readFileSync = function ( c , f ) { var e ; e = b . readFileSync ( c , "binary" === f ? null : f ) ; if ( null === e ) throw "File " + c + " could not be read." ; "binary" === f && ( e = h ( e ) ) ; return e } ; this . log = function ( b , c ) { var e ; void 0 !== c ? e = b : c = b ; "alert" === e && process . stderr . write ( "\n!!!!! ALERT !!!!!\n" ) ; process . stderr . write ( c + "\n" ) ; "alert" === e && process . stderr . write ( "!!!!! ALERT !!!!!\n" ) } ;
this . assert = Runtime . assert ; this . setTimeout = function ( b , c ) { return setTimeout ( function ( ) { b ( ) } , c ) } ; this . clearTimeout = function ( b ) { clearTimeout ( b ) } ; this . libraryPaths = function ( ) { return [ _ _dirname ] } ; this . setCurrentDirectory = function ( b ) { n = b } ; this . currentDirectory = function ( ) { return n } ; this . type = function ( ) { return "NodeJSRuntime" } ; this . getDOMImplementation = function ( ) { return m } ; this . parseXML = function ( b ) { return p . parseFromString ( b , "text/xml" ) } ; this . exit = process . exit ; this . getWindow = function ( ) { return null } ; this . requestAnimationFrame =
function ( b ) { return setTimeout ( b , 15 ) } ; this . cancelAnimationFrame = function ( b ) { clearTimeout ( b ) } ; p = new ( require ( "xmldom" ) . DOMParser ) ; m = c . parseXML ( "<a/>" ) . implementation }
function RhinoRuntime ( ) { var h = this , k = { } , c = k . javax . xml . parsers . DocumentBuilderFactory . newInstance ( ) , b , g , n = "" ; c . setValidating ( ! 1 ) ; c . setNamespaceAware ( ! 0 ) ; c . setExpandEntityReferences ( ! 1 ) ; c . setSchema ( null ) ; g = k . org . xml . sax . EntityResolver ( { resolveEntity : function ( b , c ) { var g = new k . java . io . FileReader ( c ) ; return new k . org . xml . sax . InputSource ( g ) } } ) ; b = c . newDocumentBuilder ( ) ; b . setEntityResolver ( g ) ; this . byteArrayFromString = function ( b , c ) { var g , f = b . length , e = new Uint8Array ( new ArrayBuffer ( f ) ) ; for ( g = 0 ; g < f ; g += 1 ) e [ g ] =
b . charCodeAt ( g ) & 255 ; return e } ; this . byteArrayToString = Runtime . byteArrayToString ; this . getVariable = Runtime . getVariable ; this . fromJson = Runtime . fromJson ; this . toJson = Runtime . toJson ; this . loadXML = function ( c , m ) { var g = new k . java . io . File ( c ) , f = null ; try { f = b . parse ( g ) } catch ( e ) { return print ( e ) , m ( e , null ) } m ( null , f ) } ; this . readFile = function ( b , c , g ) { n && ( b = n + "/" + b ) ; var f = new k . java . io . File ( b ) , e = "binary" === c ? "latin1" : c ; f . isFile ( ) ? ( ( b = readFile ( b , e ) ) && "binary" === c && ( b = h . byteArrayFromString ( b , "binary" ) ) , g ( null , b ) ) : g ( b + " is not a file." ,
null ) } ; this . writeFile = function ( b , c , g ) { n && ( b = n + "/" + b ) ; b = new k . java . io . FileOutputStream ( b ) ; var f , e = c . length ; for ( f = 0 ; f < e ; f += 1 ) b . write ( c [ f ] ) ; b . close ( ) ; g ( null ) } ; this . deleteFile = function ( b , c ) { n && ( b = n + "/" + b ) ; var g = new k . java . io . File ( b ) , f = b + Math . random ( ) , f = new k . java . io . File ( f ) ; g . rename ( f ) ? ( f . deleteOnExit ( ) , c ( null ) ) : c ( "Could not delete " + b ) } ; this . read = function ( b , c , g , f ) { n && ( b = n + "/" + b ) ; var e ; e = b ; var a = "binary" ; ( new k . java . io . File ( e ) ) . isFile ( ) ? ( "binary" === a && ( a = "latin1" ) , e = readFile ( e , a ) ) : e = null ; e ? f ( null , this . byteArrayFromString ( e . substring ( c ,
c + g ) , "binary" ) ) : f ( "Cannot read " + b , null ) } ; this . readFileSync = function ( b , c ) { if ( ! c ) return "" ; var g = readFile ( b , c ) ; if ( null === g ) throw "File could not be read." ; return g } ; this . log = function ( b , c ) { var g ; void 0 !== c ? g = b : c = b ; "alert" === g && print ( "\n!!!!! ALERT !!!!!" ) ; print ( c ) ; "alert" === g && print ( "!!!!! ALERT !!!!!" ) } ; this . assert = Runtime . assert ; this . setTimeout = function ( b ) { b ( ) ; return 0 } ; this . clearTimeout = function ( ) { } ; this . libraryPaths = function ( ) { return [ "lib" ] } ; this . setCurrentDirectory = function ( b ) { n = b } ; this . currentDirectory =
function ( ) { return n } ; this . type = function ( ) { return "RhinoRuntime" } ; this . getDOMImplementation = function ( ) { return b . getDOMImplementation ( ) } ; this . parseXML = function ( c ) { c = new k . java . io . StringReader ( c ) ; c = new k . org . xml . sax . InputSource ( c ) ; return b . parse ( c ) } ; this . exit = quit ; this . getWindow = function ( ) { return null } ; this . requestAnimationFrame = function ( b ) { b ( ) ; return 0 } ; this . cancelAnimationFrame = function ( ) { } }
Runtime . create = function ( ) { return "undefined" !== String ( typeof window ) ? new BrowserRuntime : "undefined" !== String ( typeof require ) ? new NodeJSRuntime : new RhinoRuntime } ; var runtime = Runtime . create ( ) , core = { } , gui = { } , xmldom = { } , odf = { } , ops = { } , webodf = { } ; ( function ( ) { webodf . Version = "undefined" !== String ( typeof webodf _version ) ? webodf _version : "From Source" } ) ( ) ;
( function ( ) { function h ( b , c , f ) { var e = b + "/manifest.json" , a , d ; runtime . log ( "Loading manifest: " + e ) ; try { a = runtime . readFileSync ( e , "utf-8" ) } catch ( r ) { if ( f ) runtime . log ( "No loadable manifest found." ) ; else throw console . log ( String ( r ) ) , r ; return } f = JSON . parse ( a ) ; for ( d in f ) f . hasOwnProperty ( d ) && ( c [ d ] = { dir : b , deps : f [ d ] } ) } function k ( b , c , f ) { function e ( l ) { if ( ! r [ l ] && ! f ( l ) ) { if ( d [ l ] ) throw "Circular dependency detected for " + l + "." ; d [ l ] = ! 0 ; if ( ! c [ l ] ) throw "Missing dependency information for class " + l + "." ; var b = c [ l ] , g = b . deps ,
m , n = g . length ; for ( m = 0 ; m < n ; m += 1 ) e ( g [ m ] ) ; d [ l ] = ! 1 ; r [ l ] = ! 0 ; a . push ( b . dir + "/" + l . replace ( "." , "/" ) + ".js" ) } } var a = [ ] , d = { } , r = { } ; b . forEach ( e ) ; return a } function c ( b , c ) { return c + ( "\n//# sourceURL=" + b ) } function b ( b ) { var g , f ; for ( g = 0 ; g < b . length ; g += 1 ) f = runtime . readFileSync ( b [ g ] , "utf-8" ) , f = c ( b [ g ] , f ) , eval ( f ) } function g ( b ) { b = b . split ( "." ) ; var c , f = p , e = b . length ; for ( c = 0 ; c < e ; c += 1 ) { if ( ! f . hasOwnProperty ( b [ c ] ) ) return ! 1 ; f = f [ b [ c ] ] } return ! 0 } var n , p = { core : core , gui : gui , xmldom : xmldom , odf : odf , ops : ops } ; runtime . loadClasses = function ( c ,
p ) { if ( IS _COMPILED _CODE || 0 === c . length ) return p && p ( ) ; var f ; if ( ! ( f = n ) ) { f = [ ] ; var e = runtime . libraryPaths ( ) , a ; runtime . currentDirectory ( ) && - 1 === e . indexOf ( runtime . currentDirectory ( ) ) && h ( runtime . currentDirectory ( ) , f , ! 0 ) ; for ( a = 0 ; a < e . length ; a += 1 ) h ( e [ a ] , f ) } n = f ; c = k ( c , n , g ) ; if ( 0 === c . length ) return p && p ( ) ; if ( "BrowserRuntime" === runtime . type ( ) && p ) { f = c ; e = document . currentScript || document . documentElement . lastChild ; a = document . createDocumentFragment ( ) ; var d , r ; for ( r = 0 ; r < f . length ; r += 1 ) d = document . createElement ( "script" ) , d . type =
"text/javascript" , d . charset = "utf-8" , d . async = ! 1 , d . setAttribute ( "src" , f [ r ] ) , a . appendChild ( d ) ; p && ( d . onload = p ) ; e . parentNode . insertBefore ( a , e ) } else b ( c ) , p && p ( ) } ; runtime . loadClass = function ( b , c ) { runtime . loadClasses ( [ b ] , c ) } } ) ( ) ; ( function ( ) { var h = function ( h ) { return h } ; runtime . getTranslator = function ( ) { return h } ; runtime . setTranslator = function ( k ) { h = k } ; runtime . tr = function ( k ) { var c = h ( k ) ; return c && "string" === String ( typeof c ) ? c : k } } ) ( ) ;
( function ( h ) { function k ( c ) { if ( c . length ) { var b = c [ 0 ] ; runtime . readFile ( b , "utf8" , function ( g , n ) { function p ( ) { var b ; ( b = eval ( h ) ) && runtime . exit ( b ) } var m = "" , m = b . lastIndexOf ( "/" ) , h = n , m = - 1 !== m ? b . substring ( 0 , m ) : "." ; runtime . setCurrentDirectory ( m ) ; g ? ( runtime . log ( g ) , runtime . exit ( 1 ) ) : null === h ? ( runtime . log ( "No code found for " + b ) , runtime . exit ( 1 ) ) : p . apply ( null , c ) } ) } } h = h ? Array . prototype . slice . call ( h ) : [ ] ; "NodeJSRuntime" === runtime . type ( ) ? k ( process . argv . slice ( 2 ) ) : "RhinoRuntime" === runtime . type ( ) ? k ( h ) : k ( h . slice ( 1 ) ) } ) ( "undefined" !==
String ( typeof arguments ) && arguments ) ; ( function ( ) { core . Async = function ( ) { return { forEach : function ( h , k , c ) { function b ( b ) { p !== n && ( b ? ( p = n , c ( b ) ) : ( p += 1 , p === n && c ( null ) ) ) } var g , n = h . length , p = 0 ; for ( g = 0 ; g < n ; g += 1 ) k ( h [ g ] , b ) } , destroyAll : function ( h , k ) { function c ( b , g ) { if ( g ) k ( g ) ; else if ( b < h . length ) h [ b ] ( function ( g ) { c ( b + 1 , g ) } ) ; else k ( ) } c ( 0 , void 0 ) } } } ( ) } ) ( ) ; function makeBase64 ( ) { function h ( a ) { var d , l = a . length , r = new Uint8Array ( new ArrayBuffer ( l ) ) ; for ( d = 0 ; d < l ; d += 1 ) r [ d ] = a . charCodeAt ( d ) & 255 ; return r } function k ( a ) { var d , l = "" , r , b = a . length - 2 ; for ( r = 0 ; r < b ; r += 3 ) d = a [ r ] << 16 | a [ r + 1 ] << 8 | a [ r + 2 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d >>> 18 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d >>> 12 & 63 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d >>> 6 & 63 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d &
63 ] ; r === b + 1 ? ( d = a [ r ] << 4 , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d >>> 6 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d & 63 ] , l += "==" ) : r === b && ( d = a [ r ] << 10 | a [ r + 1 ] << 2 , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d >>> 12 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d >>> 6 & 63 ] , l += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" [ d & 63 ] , l += "=" ) ; return l } function c ( a ) { a = a . replace ( /[^A-Za-z0-9+\/]+/g ,
"" ) ; var d = a . length , r = new Uint8Array ( new ArrayBuffer ( 3 * d ) ) , b = a . length % 4 , c = 0 , e , f ; for ( e = 0 ; e < d ; e += 4 ) f = ( l [ a . charAt ( e ) ] || 0 ) << 18 | ( l [ a . charAt ( e + 1 ) ] || 0 ) << 12 | ( l [ a . charAt ( e + 2 ) ] || 0 ) << 6 | ( l [ a . charAt ( e + 3 ) ] || 0 ) , r [ c ] = f >> 16 , r [ c + 1 ] = f >> 8 & 255 , r [ c + 2 ] = f & 255 , c += 3 ; d = 3 * d - [ 0 , 0 , 2 , 1 ] [ b ] ; return r . subarray ( 0 , d ) } function b ( a ) { var d , l , r = a . length , b = 0 , c = new Uint8Array ( new ArrayBuffer ( 3 * r ) ) ; for ( d = 0 ; d < r ; d += 1 ) l = a [ d ] , 128 > l ? c [ b ++ ] = l : ( 2048 > l ? c [ b ++ ] = 192 | l >>> 6 : ( c [ b ++ ] = 224 | l >>> 12 & 15 , c [ b ++ ] = 128 | l >>> 6 & 63 ) , c [ b ++ ] = 128 | l & 63 ) ; return c . subarray ( 0 ,
b ) } function g ( a ) { var d , l , r , b , c = a . length , e = new Uint8Array ( new ArrayBuffer ( c ) ) , f = 0 ; for ( d = 0 ; d < c ; d += 1 ) l = a [ d ] , 128 > l ? e [ f ++ ] = l : ( d += 1 , r = a [ d ] , 224 > l ? e [ f ++ ] = ( l & 31 ) << 6 | r & 63 : ( d += 1 , b = a [ d ] , e [ f ++ ] = ( l & 15 ) << 12 | ( r & 63 ) << 6 | b & 63 ) ) ; return e . subarray ( 0 , f ) } function n ( a ) { return k ( h ( a ) ) } function p ( a ) { return String . fromCharCode . apply ( String , c ( a ) ) } function m ( a ) { return g ( h ( a ) ) } function q ( a ) { a = g ( a ) ; for ( var d = "" , l = 0 ; l < a . length ; ) d += String . fromCharCode . apply ( String , a . subarray ( l , l + 45E3 ) ) , l += 45E3 ; return d } function f ( a , d , l ) { var r , b ,
c , e = "" ; for ( c = d ; c < l ; c += 1 ) d = a . charCodeAt ( c ) & 255 , 128 > d ? e += String . fromCharCode ( d ) : ( c += 1 , r = a . charCodeAt ( c ) & 255 , 224 > d ? e += String . fromCharCode ( ( d & 31 ) << 6 | r & 63 ) : ( c += 1 , b = a . charCodeAt ( c ) & 255 , e += String . fromCharCode ( ( d & 15 ) << 12 | ( r & 63 ) << 6 | b & 63 ) ) ) ; return e } function e ( a , d ) { function l ( ) { var c = b + 1E5 ; c > a . length && ( c = a . length ) ; r += f ( a , b , c ) ; b = c ; c = b === a . length ; d ( r , c ) && ! c && runtime . setTimeout ( l , 0 ) } var r = "" , b = 0 ; 1E5 > a . length ? d ( f ( a , 0 , a . length ) , ! 0 ) : ( "string" !== typeof a && ( a = a . slice ( ) ) , l ( ) ) } function a ( a ) { return b ( h ( a ) ) } function d ( a ) { return String . fromCharCode . apply ( String ,
b ( a ) ) } function r ( a ) { return String . fromCharCode . apply ( String , b ( h ( a ) ) ) } var l = function ( a ) { var d = { } , l , r ; l = 0 ; for ( r = a . length ; l < r ; l += 1 ) d [ a . charAt ( l ) ] = l ; return d } ( "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ) , B , y , D = runtime . getWindow ( ) , z , t ; D && D . btoa ? ( z = D . btoa , B = function ( a ) { return z ( r ( a ) ) } ) : ( z = n , B = function ( d ) { return k ( a ( d ) ) } ) ; D && D . atob ? ( t = D . atob , y = function ( a ) { a = t ( a ) ; return f ( a , 0 , a . length ) } ) : ( t = p , y = function ( a ) { return q ( c ( a ) ) } ) ; core . Base64 = function ( ) { this . convertByteArrayToBase64 = this . convertUTF8ArrayToBase64 =
k ; this . convertBase64ToByteArray = this . convertBase64ToUTF8Array = c ; this . convertUTF16ArrayToByteArray = this . convertUTF16ArrayToUTF8Array = b ; this . convertByteArrayToUTF16Array = this . convertUTF8ArrayToUTF16Array = g ; this . convertUTF8StringToBase64 = n ; this . convertBase64ToUTF8String = p ; this . convertUTF8StringToUTF16Array = m ; this . convertByteArrayToUTF16String = this . convertUTF8ArrayToUTF16String = q ; this . convertUTF8StringToUTF16String = e ; this . convertUTF16StringToByteArray = this . convertUTF16StringToUTF8Array = a ; this . convertUTF16ArrayToUTF8String =
d ; this . convertUTF16StringToUTF8String = r ; this . convertUTF16StringToBase64 = B ; this . convertBase64ToUTF16String = y ; this . fromBase64 = p ; this . toBase64 = n ; this . atob = t ; this . btoa = z ; this . utob = r ; this . btou = e ; this . encode = B ; this . encodeURI = function ( a ) { return B ( a ) . replace ( /[+\/]/g , function ( a ) { return "+" === a ? "-" : "_" } ) . replace ( /\\=+$/ , "" ) } ; this . decode = function ( a ) { return y ( a . replace ( /[\-_]/g , function ( a ) { return "-" === a ? "+" : "/" } ) ) } ; return this } ; return core . Base64 } core . Base64 = makeBase64 ( ) ; core . ByteArray = function ( h ) { this . pos = 0 ; this . data = h ; this . readUInt32LE = function ( ) { this . pos += 4 ; var h = this . data , c = this . pos ; return h [ -- c ] << 24 | h [ -- c ] << 16 | h [ -- c ] << 8 | h [ -- c ] } ; this . readUInt16LE = function ( ) { this . pos += 2 ; var h = this . data , c = this . pos ; return h [ -- c ] << 8 | h [ -- c ] } } ; core . ByteArrayWriter = function ( h ) { function k ( c ) { c > g - b && ( g = Math . max ( 2 * g , b + c ) , c = new Uint8Array ( new ArrayBuffer ( g ) ) , c . set ( n ) , n = c ) } var c = this , b = 0 , g = 1024 , n = new Uint8Array ( new ArrayBuffer ( g ) ) ; this . appendByteArrayWriter = function ( b ) { c . appendByteArray ( b . getByteArray ( ) ) } ; this . appendByteArray = function ( c ) { var g = c . length ; k ( g ) ; n . set ( c , b ) ; b += g } ; this . appendArray = function ( c ) { var g = c . length ; k ( g ) ; n . set ( c , b ) ; b += g } ; this . appendUInt16LE = function ( b ) { c . appendArray ( [ b & 255 , b >> 8 & 255 ] ) } ; this . appendUInt32LE = function ( b ) { c . appendArray ( [ b &
255 , b >> 8 & 255 , b >> 16 & 255 , b >> 24 & 255 ] ) } ; this . appendString = function ( b ) { c . appendByteArray ( runtime . byteArrayFromString ( b , h ) ) } ; this . getLength = function ( ) { return b } ; this . getByteArray = function ( ) { var c = new Uint8Array ( new ArrayBuffer ( b ) ) ; c . set ( n . subarray ( 0 , b ) ) ; return c } } ; core . CSSUnits = function ( ) { var h = this , k = { "in" : 1 , cm : 2.54 , mm : 25.4 , pt : 72 , pc : 12 , px : 96 } ; this . convert = function ( c , b , g ) { return c * k [ g ] / k [ b ] } ; this . convertMeasure = function ( c , b ) { var g , n ; c && b && ( g = parseFloat ( c ) , n = c . replace ( g . toString ( ) , "" ) , g = h . convert ( g , n , b ) ) ; return g } ; this . getUnits = function ( c ) { return c . substr ( c . length - 2 , c . length ) } } ; ( function ( ) { function h ( ) { var b , g , n , h , m , k , f , e , a ; void 0 === c && ( g = ( b = runtime . getWindow ( ) ) && b . document , k = g . documentElement , f = g . body , c = { rangeBCRIgnoresElementBCR : ! 1 , unscaledRangeClientRects : ! 1 , elementBCRIgnoresBodyScroll : ! 1 } , g && ( h = g . createElement ( "div" ) , h . style . position = "absolute" , h . style . left = "-99999px" , h . style . transform = "scale(2)" , h . style [ "-webkit-transform" ] = "scale(2)" , m = g . createElement ( "div" ) , h . appendChild ( m ) , f . appendChild ( h ) , b = g . createRange ( ) , b . selectNode ( m ) , c . rangeBCRIgnoresElementBCR = 0 === b . getClientRects ( ) . length ,
m . appendChild ( g . createTextNode ( "Rect transform test" ) ) , g = m . getBoundingClientRect ( ) , n = b . getBoundingClientRect ( ) , c . unscaledRangeClientRects = 2 < Math . abs ( g . height - n . height ) , h . style . transform = "" , h . style [ "-webkit-transform" ] = "" , g = k . style . overflow , n = f . style . overflow , e = f . style . height , a = f . scrollTop , k . style . overflow = "visible" , f . style . overflow = "visible" , f . style . height = "200%" , f . scrollTop = f . scrollHeight , c . elementBCRIgnoresBodyScroll = b . getBoundingClientRect ( ) . top !== m . getBoundingClientRect ( ) . top , f . scrollTop = a , f . style . height =
e , f . style . overflow = n , k . style . overflow = g , b . detach ( ) , f . removeChild ( h ) , b = Object . keys ( c ) . map ( function ( a ) { return a + ":" + String ( c [ a ] ) } ) . join ( ", " ) , runtime . log ( "Detected browser quirks - " + b ) ) ) ; return c } function k ( b , c , n ) { for ( b = b ? b . firstElementChild : null ; b ; ) { if ( b . localName === n && b . namespaceURI === c ) return b ; b = b . nextElementSibling } return null } var c ; core . DomUtilsImpl = function ( ) { function b ( a , d ) { for ( var b = 0 , c ; a . parentNode !== d ; ) runtime . assert ( null !== a . parentNode , "parent is null" ) , a = a . parentNode ; for ( c = d . firstChild ; c !==
a ; ) b += 1 , c = c . nextSibling ; return b } function c ( a , d ) { return 0 >= a . compareBoundaryPoints ( Range . START _TO _START , d ) && 0 <= a . compareBoundaryPoints ( Range . END _TO _END , d ) } function n ( a , d ) { return 0 >= a . compareBoundaryPoints ( Range . END _TO _START , d ) && 0 <= a . compareBoundaryPoints ( Range . START _TO _END , d ) } function p ( a , d ) { var b = null ; a . nodeType === Node . TEXT _NODE && ( 0 === a . length ? ( a . parentNode . removeChild ( a ) , d . nodeType === Node . TEXT _NODE && ( b = d ) ) : ( d . nodeType === Node . TEXT _NODE && ( a . appendData ( d . data ) , d . parentNode . removeChild ( d ) ) , b = a ) ) ; return b }
function m ( a ) { for ( var d = a . parentNode ; a . firstChild ; ) d . insertBefore ( a . firstChild , a ) ; d . removeChild ( a ) ; return d } function q ( a , d ) { var b = a . parentNode , c = a . firstChild , e = d ( a ) , f ; if ( e === NodeFilter . FILTER _SKIP ) return b ; for ( ; c ; ) f = c . nextSibling , q ( c , d ) , c = f ; b && e === NodeFilter . FILTER _REJECT && m ( a ) ; return b } function f ( a , d ) { return a === d || Boolean ( a . compareDocumentPosition ( d ) & Node . DOCUMENT _POSITION _CONTAINED _BY ) } function e ( a , d ) { return h ( ) . unscaledRangeClientRects ? a : a / d } function a ( d , l , b ) { Object . keys ( l ) . forEach ( function ( c ) { var e =
c . split ( ":" ) , f = e [ 1 ] , g = b ( e [ 0 ] ) , e = l [ c ] , n = typeof e ; "object" === n ? Object . keys ( e ) . length && ( c = g ? d . getElementsByTagNameNS ( g , f ) [ 0 ] || d . ownerDocument . createElementNS ( g , c ) : d . getElementsByTagName ( f ) [ 0 ] || d . ownerDocument . createElement ( c ) , d . appendChild ( c ) , a ( c , e , b ) ) : g && ( runtime . assert ( "number" === n || "string" === n , "attempting to map unsupported type '" + n + "' (key: " + c + ")" ) , d . setAttributeNS ( g , c , String ( e ) ) ) } ) } var d = null ; this . splitBoundaries = function ( a ) { var d , c = [ ] , e , f , g ; if ( a . startContainer . nodeType === Node . TEXT _NODE || a . endContainer . nodeType ===
Node . TEXT _NODE ) { e = a . endContainer ; f = a . endContainer . nodeType !== Node . TEXT _NODE ? a . endOffset === a . endContainer . childNodes . length : ! 1 ; g = a . endOffset ; d = a . endContainer ; if ( g < d . childNodes . length ) for ( d = d . childNodes . item ( g ) , g = 0 ; d . firstChild ; ) d = d . firstChild ; else for ( ; d . lastChild ; ) d = d . lastChild , g = d . nodeType === Node . TEXT _NODE ? d . textContent . length : d . childNodes . length ; d === e && ( e = null ) ; a . setEnd ( d , g ) ; g = a . endContainer ; 0 !== a . endOffset && g . nodeType === Node . TEXT _NODE && ( d = g , a . endOffset !== d . length && ( c . push ( d . splitText ( a . endOffset ) ) ,
c . push ( d ) ) ) ; g = a . startContainer ; 0 !== a . startOffset && g . nodeType === Node . TEXT _NODE && ( d = g , a . startOffset !== d . length && ( g = d . splitText ( a . startOffset ) , c . push ( d ) , c . push ( g ) , a . setStart ( g , 0 ) ) ) ; if ( null !== e ) { for ( g = a . endContainer ; g . parentNode && g . parentNode !== e ; ) g = g . parentNode ; f = f ? e . childNodes . length : b ( g , e ) ; a . setEnd ( e , f ) } } return c } ; this . containsRange = c ; this . rangesIntersect = n ; this . rangeIntersection = function ( a , d ) { var b ; n ( a , d ) && ( b = a . cloneRange ( ) , - 1 === a . compareBoundaryPoints ( Range . START _TO _START , d ) && b . setStart ( d . startContainer ,
d . startOffset ) , 1 === a . compareBoundaryPoints ( Range . END _TO _END , d ) && b . setEnd ( d . endContainer , d . endOffset ) ) ; return b } ; this . getNodesInRange = function ( a , d , b ) { var c = [ ] , e = a . commonAncestorContainer , e = e . nodeType === Node . TEXT _NODE ? e . parentNode : e ; b = a . startContainer . ownerDocument . createTreeWalker ( e , b , d , ! 1 ) ; var f , g ; a . endContainer . childNodes [ a . endOffset - 1 ] ? ( f = a . endContainer . childNodes [ a . endOffset - 1 ] , g = Node . DOCUMENT _POSITION _PRECEDING | Node . DOCUMENT _POSITION _CONTAINED _BY ) : ( f = a . endContainer , g = Node . DOCUMENT _POSITION _PRECEDING ) ;
if ( a . startContainer . childNodes [ a . startOffset ] ) a = a . startContainer . childNodes [ a . startOffset ] , b . currentNode = a ; else { var n = a . startContainer ; a . startOffset === ( n . nodeType === Node . TEXT _NODE ? n . length : n . childNodes . length ) ? ( a = a . startContainer , b . currentNode = a , b . lastChild ( ) , a = b . nextNode ( ) ) : ( a = a . startContainer , b . currentNode = a ) } if ( a ) { a = b . currentNode ; if ( a !== e ) for ( a = a . parentNode ; a && a !== e ; ) d ( a ) === NodeFilter . FILTER _REJECT && ( b . currentNode = a ) , a = a . parentNode ; a = b . currentNode ; switch ( d ( a ) ) { case NodeFilter . FILTER _REJECT : for ( a =
b . nextSibling ( ) ; ! a && b . parentNode ( ) ; ) a = b . nextSibling ( ) ; break ; case NodeFilter . FILTER _SKIP : a = b . nextNode ( ) } for ( ; a ; ) { d = f . compareDocumentPosition ( a ) ; if ( 0 !== d && 0 === ( d & g ) ) break ; c . push ( a ) ; a = b . nextNode ( ) } } return c } ; this . normalizeTextNodes = function ( a ) { a && a . nextSibling && ( a = p ( a , a . nextSibling ) ) ; a && a . previousSibling && p ( a . previousSibling , a ) } ; this . rangeContainsNode = function ( a , d ) { var b = d . ownerDocument . createRange ( ) , e = d . ownerDocument . createRange ( ) , f ; b . setStart ( a . startContainer , a . startOffset ) ; b . setEnd ( a . endContainer ,
a . endOffset ) ; e . selectNodeContents ( d ) ; f = c ( b , e ) ; b . detach ( ) ; e . detach ( ) ; return f } ; this . mergeIntoParent = m ; this . removeUnwantedNodes = q ; this . removeAllChildNodes = function ( a ) { for ( ; a . firstChild ; ) a . removeChild ( a . firstChild ) } ; this . getElementsByTagNameNS = function ( a , d , b ) { var c = [ ] ; a = a . getElementsByTagNameNS ( d , b ) ; c . length = b = a . length ; for ( d = 0 ; d < b ; d += 1 ) c [ d ] = a . item ( d ) ; return c } ; this . getElementsByTagName = function ( a , d ) { var b = [ ] , c , e , f ; c = a . getElementsByTagName ( d ) ; b . length = f = c . length ; for ( e = 0 ; e < f ; e += 1 ) b [ e ] = c . item ( e ) ; return b } ;
this . containsNode = function ( a , d ) { return a === d || a . contains ( d ) } ; this . comparePoints = function ( a , d , c , e ) { if ( a === c ) return e - d ; var f = a . compareDocumentPosition ( c ) ; 2 === f ? f = - 1 : 4 === f ? f = 1 : 10 === f ? ( d = b ( a , c ) , f = d < e ? 1 : - 1 ) : ( e = b ( c , a ) , f = e < d ? - 1 : 1 ) ; return f } ; this . adaptRangeDifferenceToZoomLevel = e ; this . translateRect = function ( a , d , b ) { return { top : e ( a . top - d . top , b ) , left : e ( a . left - d . left , b ) , bottom : e ( a . bottom - d . top , b ) , right : e ( a . right - d . left , b ) , width : e ( a . width , b ) , height : e ( a . height , b ) } } ; this . getBoundingClientRect = function ( a ) { var b =
a . ownerDocument , c = h ( ) , e = b . body ; if ( ( ! 1 === c . unscaledRangeClientRects || c . rangeBCRIgnoresElementBCR ) && a . nodeType === Node . ELEMENT _NODE ) return a = a . getBoundingClientRect ( ) , c . elementBCRIgnoresBodyScroll ? { left : a . left + e . scrollLeft , right : a . right + e . scrollLeft , top : a . top + e . scrollTop , bottom : a . bottom + e . scrollTop , width : a . width , height : a . height } : a ; var f ; d ? f = d : d = f = b . createRange ( ) ; c = f ; c . selectNode ( a ) ; return c . getBoundingClientRect ( ) } ; this . mapKeyValObjOntoNode = function ( a , d , b ) { Object . keys ( d ) . forEach ( function ( c ) { var e = c . split ( ":" ) ,
f = e [ 1 ] , e = b ( e [ 0 ] ) , g = d [ c ] ; e ? ( f = a . getElementsByTagNameNS ( e , f ) [ 0 ] , f || ( f = a . ownerDocument . createElementNS ( e , c ) , a . appendChild ( f ) ) , f . textContent = g ) : runtime . log ( "Key ignored: " + c ) } ) } ; this . removeKeyElementsFromNode = function ( a , d , b ) { d . forEach ( function ( d ) { var l = d . split ( ":" ) , c = l [ 1 ] ; ( l = b ( l [ 0 ] ) ) ? ( c = a . getElementsByTagNameNS ( l , c ) [ 0 ] ) ? c . parentNode . removeChild ( c ) : runtime . log ( "Element for " + d + " not found." ) : runtime . log ( "Property Name ignored: " + d ) } ) } ; this . getKeyValRepresentationOfNode = function ( a , d ) { for ( var b = { } , c = a . firstElementChild ,
e ; c ; ) { if ( e = d ( c . namespaceURI ) ) b [ e + ":" + c . localName ] = c . textContent ; c = c . nextElementSibling } return b } ; this . mapObjOntoNode = a ; this . cloneEvent = function ( a ) { var d = Object . create ( null ) ; Object . keys ( a ) . forEach ( function ( b ) { d [ b ] = a [ b ] } ) ; d . prototype = a . constructor . prototype ; return d } ; this . getDirectChild = k ; ( function ( a ) { var d , b ; b = runtime . getWindow ( ) ; null !== b && ( d = b . navigator . appVersion . toLowerCase ( ) , b = - 1 === d . indexOf ( "chrome" ) && ( - 1 !== d . indexOf ( "applewebkit" ) || - 1 !== d . indexOf ( "safari" ) ) , d = - 1 !== d . indexOf ( "msie" ) || - 1 !== d . indexOf ( "trident" ) ,
b || d ) && ( a . containsNode = f ) } ) ( this ) } ; core . DomUtils = new core . DomUtilsImpl } ) ( ) ; core . Cursor = function ( h , k ) { function c ( a ) { a . parentNode && ( m . push ( a . previousSibling ) , m . push ( a . nextSibling ) , a . parentNode . removeChild ( a ) ) } function b ( a , d , b ) { if ( d . nodeType === Node . TEXT _NODE ) { runtime . assert ( Boolean ( d ) , "putCursorIntoTextNode: invalid container" ) ; var l = d . parentNode ; runtime . assert ( Boolean ( l ) , "putCursorIntoTextNode: container without parent" ) ; runtime . assert ( 0 <= b && b <= d . length , "putCursorIntoTextNode: offset is out of bounds" ) ; 0 === b ? l . insertBefore ( a , d ) : ( b !== d . length && d . splitText ( b ) , l . insertBefore ( a ,
d . nextSibling ) ) } else d . nodeType === Node . ELEMENT _NODE && d . insertBefore ( a , d . childNodes . item ( b ) ) ; m . push ( a . previousSibling ) ; m . push ( a . nextSibling ) } var g = h . createElementNS ( "urn:webodf:names:cursor" , "cursor" ) , n = h . createElementNS ( "urn:webodf:names:cursor" , "anchor" ) , p , m = [ ] , q = h . createRange ( ) , f , e = core . DomUtils ; this . getNode = function ( ) { return g } ; this . getAnchorNode = function ( ) { return n . parentNode ? n : g } ; this . getSelectedRange = function ( ) { f ? ( q . setStartBefore ( g ) , q . collapse ( ! 0 ) ) : ( q . setStartAfter ( p ? n : g ) , q . setEndBefore ( p ?
g : n ) ) ; return q } ; this . setSelectedRange = function ( a , d ) { q && q !== a && q . detach ( ) ; q = a ; p = ! 1 !== d ; ( f = a . collapsed ) ? ( c ( n ) , c ( g ) , b ( g , a . startContainer , a . startOffset ) ) : ( c ( n ) , c ( g ) , b ( p ? g : n , a . endContainer , a . endOffset ) , b ( p ? n : g , a . startContainer , a . startOffset ) ) ; m . forEach ( e . normalizeTextNodes ) ; m . length = 0 } ; this . hasForwardSelection = function ( ) { return p } ; this . remove = function ( ) { c ( g ) ; m . forEach ( e . normalizeTextNodes ) ; m . length = 0 } ; g . setAttributeNS ( "urn:webodf:names:cursor" , "memberId" , k ) ; n . setAttributeNS ( "urn:webodf:names:cursor" , "memberId" ,
k ) } ; core . Destroyable = function ( ) { } ; core . Destroyable . prototype . destroy = function ( h ) { } ; core . EventSource = function ( ) { } ; core . EventSource . prototype . subscribe = function ( h , k ) { } ; core . EventSource . prototype . unsubscribe = function ( h , k ) { } ; core . EventNotifier = function ( h ) { function k ( b ) { runtime . assert ( ! c . hasOwnProperty ( b ) , 'Duplicated event ids: "' + b + '" registered more than once.' ) ; c [ b ] = [ ] } var c = { } ; this . emit = function ( b , g ) { var n , h ; runtime . assert ( c . hasOwnProperty ( b ) , 'unknown event fired "' + b + '"' ) ; h = c [ b ] ; for ( n = 0 ; n < h . length ; n += 1 ) h [ n ] ( g ) } ; this . subscribe = function ( b , g ) { runtime . assert ( c . hasOwnProperty ( b ) , 'tried to subscribe to unknown event "' + b + '"' ) ; c [ b ] . push ( g ) } ; this . unsubscribe = function ( b , g ) { var n ; runtime . assert ( c . hasOwnProperty ( b ) , 'tried to unsubscribe from unknown event "' +
b + '"' ) ; n = c [ b ] . indexOf ( g ) ; runtime . assert ( - 1 !== n , 'tried to unsubscribe unknown callback from event "' + b + '"' ) ; - 1 !== n && c [ b ] . splice ( n , 1 ) } ; this . register = k ; h && h . forEach ( k ) } ; core . ScheduledTask = function ( h , k , c ) { function b ( ) { p && ( c ( n ) , p = ! 1 ) } function g ( ) { b ( ) ; h . apply ( void 0 , m ) ; m = null } var n , p = ! 1 , m = [ ] , q = ! 1 ; this . trigger = function ( ) { runtime . assert ( ! 1 === q , "Can't trigger destroyed ScheduledTask instance" ) ; m = Array . prototype . slice . call ( arguments ) ; p || ( p = ! 0 , n = k ( g ) ) } ; this . triggerImmediate = function ( ) { runtime . assert ( ! 1 === q , "Can't trigger destroyed ScheduledTask instance" ) ; m = Array . prototype . slice . call ( arguments ) ; g ( ) } ; this . processRequests = function ( ) { p && g ( ) } ; this . cancel = b ; this . restart = function ( ) { runtime . assert ( ! 1 ===
q , "Can't trigger destroyed ScheduledTask instance" ) ; b ( ) ; p = ! 0 ; n = k ( g ) } ; this . destroy = function ( c ) { b ( ) ; q = ! 0 ; c ( ) } } ; ( function ( ) { var h ; core . Task = { } ; core . Task . SUPPRESS _MANUAL _PROCESSING = ! 1 ; core . Task . processTasks = function ( ) { core . Task . SUPPRESS _MANUAL _PROCESSING || h . performRedraw ( ) } ; core . Task . createRedrawTask = function ( k ) { return new core . ScheduledTask ( k , h . requestRedrawTask , h . cancelRedrawTask ) } ; core . Task . createTimeoutTask = function ( h , c ) { return new core . ScheduledTask ( h , function ( b ) { return runtime . setTimeout ( b , c ) } , runtime . clearTimeout ) } ; h = new function ( ) { var h = { } ; this . requestRedrawTask = function ( c ) { var b = runtime . requestAnimationFrame ( function ( ) { c ( ) ;
delete h [ b ] } ) ; h [ b ] = c ; return b } ; this . performRedraw = function ( ) { Object . keys ( h ) . forEach ( function ( c ) { h [ c ] ( ) ; runtime . cancelAnimationFrame ( parseInt ( c , 10 ) ) } ) ; h = { } } ; this . cancelRedrawTask = function ( c ) { runtime . cancelAnimationFrame ( c ) ; delete h [ c ] } } } ) ( ) ; core . EventSubscriptions = function ( ) { function h ( b , g , n ) { b . subscribe ( g , n ) ; c . push ( { eventSource : b , eventid : g , callback : n } ) } function k ( ) { var n = [ ] ; c . forEach ( function ( b ) { b . eventSource . unsubscribe ( b . eventid , b . callback ) } ) ; c . length = 0 ; Object . keys ( g ) . forEach ( function ( b ) { g [ b ] . forEach ( function ( b ) { n . push ( b . task . destroy ) } ) ; delete g [ b ] } ) ; core . Async . destroyAll ( n , function ( ) { } ) ; b = new core . EventNotifier } var c = [ ] , b = new core . EventNotifier , g = { } , n = 0 ; this . addSubscription = h ; this . addFrameSubscription = function ( c , m , k ) { var f , e , a , d ;
g . hasOwnProperty ( m ) || ( g [ m ] = [ ] ) ; a = g [ m ] ; for ( d = 0 ; d < a . length ; d += 1 ) if ( a [ d ] . eventSource === c ) { f = a [ d ] ; break } f || ( e = "s" + n , n += 1 , b . register ( e ) , f = { frameEventId : e , eventSource : c , task : core . Task . createRedrawTask ( function ( ) { b . emit ( e , void 0 ) } ) } , a . push ( f ) , h ( c , m , f . task . trigger ) ) ; b . subscribe ( f . frameEventId , k ) } ; this . unsubscribeAll = k ; this . destroy = function ( b ) { k ( ) ; b ( ) } } ; core . LazyProperty = function ( h ) { var k , c = ! 1 ; this . value = function ( ) { c || ( k = h ( ) , c = ! 0 ) ; return k } ; this . reset = function ( ) { c = ! 1 } } ; core . LoopWatchDog = function ( h , k ) { var c = Date . now ( ) , b = 0 ; this . check = function ( ) { var g ; if ( h && ( g = Date . now ( ) , g - c > h ) ) throw runtime . log ( "alert" , "watchdog timeout" ) , "timeout!" ; if ( 0 < k && ( b += 1 , b > k ) ) throw runtime . log ( "alert" , "watchdog loop overflow" ) , "loop overflow" ; } } ; core . NodeFilterChain = function ( h ) { var k = NodeFilter . FILTER _REJECT , c = NodeFilter . FILTER _ACCEPT ; this . acceptNode = function ( b ) { var g ; for ( g = 0 ; g < h . length ; g += 1 ) if ( h [ g ] . acceptNode ( b ) === k ) return k ; return c } } ; core . PositionIterator = function ( h , k , c , b ) { function g ( ) { this . acceptNode = function ( a ) { return ! a || a . nodeType === r && 0 === a . length ? y : B } } function n ( a ) { this . acceptNode = function ( d ) { return ! d || d . nodeType === r && 0 === d . length ? y : a . acceptNode ( d ) } } function p ( ) { var d = e . currentNode , b = d . nodeType ; a = b === r ? d . length - 1 : b === l ? 1 : 0 } function m ( ) { if ( null === e . previousSibling ( ) ) { if ( ! e . parentNode ( ) || e . currentNode === h ) return e . firstChild ( ) , ! 1 ; a = 0 } else p ( ) ; return ! 0 } function q ( ) { var b = e . currentNode , l ; l = d ( b ) ; if ( b !== h ) for ( b = b . parentNode ; b &&
b !== h ; ) d ( b ) === y && ( e . currentNode = b , l = y ) , b = b . parentNode ; l === y ? ( a = e . currentNode . nodeType === r ? b . length : 1 , b = f . nextPosition ( ) ) : b = l === B ? ! 0 : f . nextPosition ( ) ; b && runtime . assert ( d ( e . currentNode ) === B , "moveToAcceptedNode did not result in walker being on an accepted node" ) ; return b } var f = this , e , a , d , r = Node . TEXT _NODE , l = Node . ELEMENT _NODE , B = NodeFilter . FILTER _ACCEPT , y = NodeFilter . FILTER _REJECT ; this . nextPosition = function ( ) { var d = e . currentNode , b = d . nodeType ; if ( d === h ) return ! 1 ; if ( 0 === a && b === l ) null === e . firstChild ( ) && ( a = 1 ) ;
else if ( b === r && a + 1 < d . length ) a += 1 ; else if ( null !== e . nextSibling ( ) ) a = 0 ; else if ( e . parentNode ( ) ) a = 1 ; else return ! 1 ; return ! 0 } ; this . previousPosition = function ( ) { var d = ! 0 , b = e . currentNode ; 0 === a ? d = m ( ) : b . nodeType === r ? -- a : null !== e . lastChild ( ) ? p ( ) : b === h ? d = ! 1 : a = 0 ; return d } ; this . previousNode = m ; this . container = function ( ) { var d = e . currentNode , b = d . nodeType ; 0 === a && b !== r && ( d = d . parentNode ) ; return d } ; this . rightNode = function ( ) { var b = e . currentNode , c = b . nodeType ; if ( c === r && a === b . length ) for ( b = b . nextSibling ; b && d ( b ) !== B ; ) b = b . nextSibling ;
else c === l && 1 === a && ( b = null ) ; return b } ; this . leftNode = function ( ) { var b = e . currentNode ; if ( 0 === a ) for ( b = b . previousSibling ; b && d ( b ) !== B ; ) b = b . previousSibling ; else if ( b . nodeType === l ) for ( b = b . lastChild ; b && d ( b ) !== B ; ) b = b . previousSibling ; return b } ; this . getCurrentNode = function ( ) { return e . currentNode } ; this . unfilteredDomOffset = function ( ) { if ( e . currentNode . nodeType === r ) return a ; for ( var d = 0 , b = e . currentNode , b = 1 === a ? b . lastChild : b . previousSibling ; b ; ) d += 1 , b = b . previousSibling ; return d } ; this . getPreviousSibling = function ( ) { var a =
e . currentNode , d = e . previousSibling ( ) ; e . currentNode = a ; return d } ; this . getNextSibling = function ( ) { var a = e . currentNode , d = e . nextSibling ( ) ; e . currentNode = a ; return d } ; this . setPositionBeforeElement = function ( d ) { runtime . assert ( Boolean ( d ) , "setPositionBeforeElement called without element" ) ; e . currentNode = d ; a = 0 ; return q ( ) } ; this . setUnfilteredPosition = function ( d , b ) { runtime . assert ( Boolean ( d ) , "PositionIterator.setUnfilteredPosition called without container" ) ; e . currentNode = d ; d . nodeType === r ? ( a = b , runtime . assert ( b <= d . length ,
"Error in setPosition: " + b + " > " + d . length ) , runtime . assert ( 0 <= b , "Error in setPosition: " + b + " < 0" ) , b === d . length && ( e . nextSibling ( ) ? a = 0 : e . parentNode ( ) ? a = 1 : runtime . assert ( ! 1 , "Error in setUnfilteredPosition: position not valid." ) ) ) : b < d . childNodes . length ? ( e . currentNode = d . childNodes . item ( b ) , a = 0 ) : a = 1 ; return q ( ) } ; this . moveToEnd = function ( ) { e . currentNode = h ; a = 1 } ; this . moveToEndOfNode = function ( d ) { d . nodeType === r ? f . setUnfilteredPosition ( d , d . length ) : ( e . currentNode = d , a = 1 ) } ; this . isBeforeNode = function ( ) { return 0 === a } ;
this . getNodeFilter = function ( ) { return d } ; d = ( c ? new n ( c ) : new g ) . acceptNode ; d . acceptNode = d ; k = k || NodeFilter . SHOW _ALL ; runtime . assert ( h . nodeType !== Node . TEXT _NODE , "Internet Explorer doesn't allow tree walker roots to be text nodes" ) ; e = h . ownerDocument . createTreeWalker ( h , k , d , b ) ; a = 0 ; null === e . firstChild ( ) && ( a = 1 ) } ; core . PositionFilter = function ( ) { } ; core . PositionFilter . FilterResult = { FILTER _ACCEPT : 1 , FILTER _REJECT : 2 , FILTER _SKIP : 3 } ; core . PositionFilter . prototype . acceptPosition = function ( h ) { } ; core . PositionFilterChain = function ( ) { var h = [ ] , k = core . PositionFilter . FilterResult . FILTER _ACCEPT , c = core . PositionFilter . FilterResult . FILTER _REJECT ; this . acceptPosition = function ( b ) { var g ; for ( g = 0 ; g < h . length ; g += 1 ) if ( h [ g ] . acceptPosition ( b ) === c ) return c ; return k } ; this . addFilter = function ( b ) { h . push ( b ) } } ; ( function ( ) { core . RawInflate = function ( ) { var h ; ( function ( k ) { h = k ( ) } ) ( function ( ) { return function c ( b , g , n ) { function h ( m , f ) { if ( ! g [ m ] ) { if ( ! b [ m ] ) throw Error ( "Cannot find module '" + m + "'" ) ; var e = g [ m ] = { exports : { } } ; b [ m ] [ 0 ] . call ( e . exports , function ( a ) { var d = b [ m ] [ 1 ] [ a ] ; return h ( d ? d : a ) } , e , e . exports , c , b , g , n ) } return g [ m ] . exports } for ( var m = 0 ; m < n . length ; m ++ ) h ( n [ m ] ) ; return h } ( { 1 : [ function ( c , b , g ) { function n ( a , d ) { var b = new r ( d ) ; b . push ( a , ! 0 ) ; if ( b . err ) throw b . msg ; return b . result } var h = c ( "./zlib/inflate.js" ) , m = c ( "./utils/common" ) ,
q = c ( "./utils/strings" ) , f = c ( "./zlib/constants" ) , e = c ( "./zlib/messages" ) , a = c ( "./zlib/zstream" ) , d = c ( "./zlib/gzheader" ) , r = function ( b ) { var c = this . options = m . assign ( { chunkSize : 16384 , windowBits : 0 , to : "" } , b || { } ) ; c . raw && 0 <= c . windowBits && 16 > c . windowBits && ( c . windowBits = - c . windowBits , 0 === c . windowBits && ( c . windowBits = - 15 ) ) ; ! ( 0 <= c . windowBits && 16 > c . windowBits ) || b && b . windowBits || ( c . windowBits += 32 ) ; 15 < c . windowBits && 48 > c . windowBits && 0 === ( c . windowBits & 15 ) && ( c . windowBits |= 15 ) ; this . err = 0 ; this . msg = "" ; this . ended = ! 1 ; this . chunks =
[ ] ; this . strm = new a ; this . strm . avail _out = 0 ; b = h . inflateInit2 ( this . strm , c . windowBits ) ; if ( b !== f . Z _OK ) throw Error ( e [ b ] ) ; this . header = new d ; h . inflateGetHeader ( this . strm , this . header ) } ; r . prototype . push = function ( a , d ) { var b = this . strm , c = this . options . chunkSize , e , r , g , w , n ; if ( this . ended ) return ! 1 ; r = d === ~ ~ d ? d : ! 0 === d ? f . Z _FINISH : f . Z _NO _FLUSH ; b . input = "string" === typeof a ? q . binstring2buf ( a ) : a ; b . next _in = 0 ; b . avail _in = b . input . length ; do { 0 === b . avail _out && ( b . output = new m . Buf8 ( c ) , b . next _out = 0 , b . avail _out = c ) ; e = h . inflate ( b , f . Z _NO _FLUSH ) ;
if ( e !== f . Z _STREAM _END && e !== f . Z _OK ) return this . onEnd ( e ) , this . ended = ! 0 , ! 1 ; if ( b . next _out && ( 0 === b . avail _out || e === f . Z _STREAM _END || 0 === b . avail _in && r === f . Z _FINISH ) ) if ( "string" === this . options . to ) g = q . utf8border ( b . output , b . next _out ) , w = b . next _out - g , n = q . buf2string ( b . output , g ) , b . next _out = w , b . avail _out = c - w , w && m . arraySet ( b . output , b . output , g , w , 0 ) , this . onData ( n ) ; else this . onData ( m . shrinkBuf ( b . output , b . next _out ) ) } while ( ( 0 < b . avail _in || 0 === b . avail _out ) && e !== f . Z _STREAM _END ) ; e === f . Z _STREAM _END && ( r = f . Z _FINISH ) ; return r ===
f . Z _FINISH ? ( e = h . inflateEnd ( this . strm ) , this . onEnd ( e ) , this . ended = ! 0 , e === f . Z _OK ) : ! 0 } ; r . prototype . onData = function ( a ) { this . chunks . push ( a ) } ; r . prototype . onEnd = function ( a ) { a === f . Z _OK && ( this . result = "string" === this . options . to ? this . chunks . join ( "" ) : m . flattenChunks ( this . chunks ) ) ; this . chunks = [ ] ; this . err = a ; this . msg = this . strm . msg } ; g . Inflate = r ; g . inflate = n ; g . inflateRaw = function ( a , d ) { d = d || { } ; d . raw = ! 0 ; return n ( a , d ) } ; g . ungzip = n } , { "./utils/common" : 2 , "./utils/strings" : 3 , "./zlib/constants" : 5 , "./zlib/gzheader" : 7 , "./zlib/inflate.js" : 9 ,
"./zlib/messages" : 11 , "./zlib/zstream" : 12 } ] , 2 : [ function ( c , b , g ) { c = "undefined" !== typeof Uint8Array && "undefined" !== typeof Uint16Array && "undefined" !== typeof Int32Array ; g . assign = function ( b ) { for ( var c = Array . prototype . slice . call ( arguments , 1 ) ; c . length ; ) { var f = c . shift ( ) ; if ( f ) { if ( "object" !== typeof f ) throw new TypeError ( f + "must be non-object" ) ; for ( var e in f ) f . hasOwnProperty ( e ) && ( b [ e ] = f [ e ] ) } } return b } ; g . shrinkBuf = function ( b , c ) { if ( b . length === c ) return b ; if ( b . subarray ) return b . subarray ( 0 , c ) ; b . length = c ; return b } ;
var n = { arraySet : function ( b , c , f , e , a ) { if ( c . subarray && b . subarray ) b . set ( c . subarray ( f , f + e ) , a ) ; else for ( var d = 0 ; d < e ; d ++ ) b [ a + d ] = c [ f + d ] } , flattenChunks : function ( b ) { var c , f , e , a , d ; c = e = 0 ; for ( f = b . length ; c < f ; c ++ ) e += b [ c ] . length ; d = new Uint8Array ( e ) ; c = e = 0 ; for ( f = b . length ; c < f ; c ++ ) a = b [ c ] , d . set ( a , e ) , e += a . length ; return d } } , h = { arraySet : function ( b , c , f , e , a ) { for ( var d = 0 ; d < e ; d ++ ) b [ a + d ] = c [ f + d ] } , flattenChunks : function ( b ) { return [ ] . concat . apply ( [ ] , b ) } } ; g . setTyped = function ( b ) { b ? ( g . Buf8 = Uint8Array , g . Buf16 = Uint16Array , g . Buf32 = Int32Array ,
g . assign ( g , n ) ) : ( g . Buf8 = Array , g . Buf16 = Array , g . Buf32 = Array , g . assign ( g , h ) ) } ; g . setTyped ( c ) } , { } ] , 3 : [ function ( c , b , g ) { function n ( a , b ) { if ( 65537 > b && ( a . subarray && q || ! a . subarray && m ) ) return String . fromCharCode . apply ( null , h . shrinkBuf ( a , b ) ) ; for ( var c = "" , e = 0 ; e < b ; e ++ ) c += String . fromCharCode ( a [ e ] ) ; return c } var h = c ( "./common" ) , m = ! 0 , q = ! 0 ; try { String . fromCharCode . apply ( null , [ 0 ] ) } catch ( f ) { m = ! 1 } try { String . fromCharCode . apply ( null , new Uint8Array ( 1 ) ) } catch ( e ) { q = ! 1 } var a = new h . Buf8 ( 256 ) ; for ( c = 0 ; 256 > c ; c ++ ) a [ c ] = 252 <= c ? 6 : 248 <=
c ? 5 : 240 <= c ? 4 : 224 <= c ? 3 : 192 <= c ? 2 : 1 ; a [ 254 ] = a [ 254 ] = 1 ; g . string2buf = function ( a ) { var b , c , e , f , g , n = a . length , m = 0 ; for ( f = 0 ; f < n ; f ++ ) c = a . charCodeAt ( f ) , 55296 === ( c & 64512 ) && f + 1 < n && ( e = a . charCodeAt ( f + 1 ) , 56320 === ( e & 64512 ) && ( c = 65536 + ( c - 55296 << 10 ) + ( e - 56320 ) , f ++ ) ) , m += 128 > c ? 1 : 2048 > c ? 2 : 65536 > c ? 3 : 4 ; b = new h . Buf8 ( m ) ; for ( f = g = 0 ; g < m ; f ++ ) c = a . charCodeAt ( f ) , 55296 === ( c & 64512 ) && f + 1 < n && ( e = a . charCodeAt ( f + 1 ) , 56320 === ( e & 64512 ) && ( c = 65536 + ( c - 55296 << 10 ) + ( e - 56320 ) , f ++ ) ) , 128 > c ? b [ g ++ ] = c : ( 2048 > c ? b [ g ++ ] = 192 | c >>> 6 : ( 65536 > c ? b [ g ++ ] = 224 | c >>> 12 : ( b [ g ++ ] =
240 | c >>> 18 , b [ g ++ ] = 128 | c >>> 12 & 63 ) , b [ g ++ ] = 128 | c >>> 6 & 63 ) , b [ g ++ ] = 128 | c & 63 ) ; return b } ; g . buf2binstring = function ( a ) { return n ( a , a . length ) } ; g . binstring2buf = function ( a ) { for ( var b = new h . Buf8 ( a . length ) , c = 0 , e = b . length ; c < e ; c ++ ) b [ c ] = a . charCodeAt ( c ) ; return b } ; g . buf2string = function ( d , b ) { var c , e , f , g , h = b || d . length , m = Array ( 2 * h ) ; for ( c = e = 0 ; c < h ; ) if ( f = d [ c ++ ] , 128 > f ) m [ e ++ ] = f ; else if ( g = a [ f ] , 4 < g ) m [ e ++ ] = 65533 , c += g - 1 ; else { for ( f &= 2 === g ? 31 : 3 === g ? 15 : 7 ; 1 < g && c < h ; ) f = f << 6 | d [ c ++ ] & 63 , g -- ; 1 < g ? m [ e ++ ] = 65533 : 65536 > f ? m [ e ++ ] = f : ( f -= 65536 , m [ e ++ ] =
55296 | f >> 10 & 1023 , m [ e ++ ] = 56320 | f & 1023 ) } return n ( m , e ) } ; g . utf8border = function ( d , b ) { var c ; b = b || d . length ; b > d . length && ( b = d . length ) ; for ( c = b - 1 ; 0 <= c && 128 === ( d [ c ] & 192 ) ; ) c -- ; return 0 > c || 0 === c ? b : c + a [ d [ c ] ] > b ? c : b } } , { "./common" : 2 } ] , 4 : [ function ( c , b , g ) { b . exports = function ( b , c , g , h ) { var f = b & 65535 | 0 ; b = b >>> 16 & 65535 | 0 ; for ( var e = 0 ; 0 !== g ; ) { e = 2E3 < g ? 2E3 : g ; g -= e ; do f = f + c [ h ++ ] | 0 , b = b + f | 0 ; while ( -- e ) ; f %= 65521 ; b %= 65521 } return f | b << 16 | 0 } } , { } ] , 5 : [ function ( c , b , g ) { b . exports = { Z _NO _FLUSH : 0 , Z _PARTIAL _FLUSH : 1 , Z _SYNC _FLUSH : 2 , Z _FULL _FLUSH : 3 ,
Z _FINISH : 4 , Z _BLOCK : 5 , Z _TREES : 6 , Z _OK : 0 , Z _STREAM _END : 1 , Z _NEED _DICT : 2 , Z _ERRNO : - 1 , Z _STREAM _ERROR : - 2 , Z _DATA _ERROR : - 3 , Z _BUF _ERROR : - 5 , Z _NO _COMPRESSION : 0 , Z _BEST _SPEED : 1 , Z _BEST _COMPRESSION : 9 , Z _DEFAULT _COMPRESSION : - 1 , Z _FILTERED : 1 , Z _HUFFMAN _ONLY : 2 , Z _RLE : 3 , Z _FIXED : 4 , Z _DEFAULT _STRATEGY : 0 , Z _BINARY : 0 , Z _TEXT : 1 , Z _UNKNOWN : 2 , Z _DEFLATED : 8 } } , { } ] , 6 : [ function ( c , b , g ) { var n = function ( ) { for ( var b , c = [ ] , g = 0 ; 256 > g ; g ++ ) { b = g ; for ( var f = 0 ; 8 > f ; f ++ ) b = b & 1 ? 3988292384 ^ b >>> 1 : b >>> 1 ; c [ g ] = b } return c } ( ) ; b . exports = function ( b , c , g , f ) { g = f + g ; for ( b ^=
- 1 ; f < g ; f ++ ) b = b >>> 8 ^ n [ ( b ^ c [ f ] ) & 255 ] ; return b ^ - 1 } } , { } ] , 7 : [ function ( c , b , g ) { b . exports = function ( ) { this . os = this . xflags = this . time = this . text = 0 ; this . extra = null ; this . extra _len = 0 ; this . comment = this . name = "" ; this . hcrc = 0 ; this . done = ! 1 } } , { } ] , 8 : [ function ( c , b , g ) { b . exports = function ( b , c ) { var g , h , f , e , a , d , r , l , B , y , D , z , t , x , w , F , L , H , G , A , K , v , u , Q ; g = b . state ; h = b . next _in ; u = b . input ; f = h + ( b . avail _in - 5 ) ; e = b . next _out ; Q = b . output ; a = e - ( c - b . avail _out ) ; d = e + ( b . avail _out - 257 ) ; r = g . dmax ; l = g . wsize ; B = g . whave ; y = g . wnext ; D = g . window ; z = g . hold ; t = g . bits ;
x = g . lencode ; w = g . distcode ; F = ( 1 << g . lenbits ) - 1 ; L = ( 1 << g . distbits ) - 1 ; a : do b : for ( 15 > t && ( z += u [ h ++ ] << t , t += 8 , z += u [ h ++ ] << t , t += 8 ) , H = x [ z & F ] ; ; ) { G = H >>> 24 ; z >>>= G ; t -= G ; G = H >>> 16 & 255 ; if ( 0 === G ) Q [ e ++ ] = H & 65535 ; else if ( G & 16 ) { A = H & 65535 ; if ( G &= 15 ) t < G && ( z += u [ h ++ ] << t , t += 8 ) , A += z & ( 1 << G ) - 1 , z >>>= G , t -= G ; 15 > t && ( z += u [ h ++ ] << t , t += 8 , z += u [ h ++ ] << t , t += 8 ) ; H = w [ z & L ] ; c : for ( ; ; ) { G = H >>> 24 ; z >>>= G ; t -= G ; G = H >>> 16 & 255 ; if ( G & 16 ) { H &= 65535 ; G &= 15 ; t < G && ( z += u [ h ++ ] << t , t += 8 , t < G && ( z += u [ h ++ ] << t , t += 8 ) ) ; H += z & ( 1 << G ) - 1 ; if ( H > r ) { b . msg = "invalid distance too far back" ;
g . mode = 30 ; break a } z >>>= G ; t -= G ; G = e - a ; if ( H > G ) { G = H - G ; if ( G > B && g . sane ) { b . msg = "invalid distance too far back" ; g . mode = 30 ; break a } K = 0 ; v = D ; if ( 0 === y ) { if ( K += l - G , G < A ) { A -= G ; do Q [ e ++ ] = D [ K ++ ] ; while ( -- G ) ; K = e - H ; v = Q } } else if ( y < G ) { if ( K += l + y - G , G -= y , G < A ) { A -= G ; do Q [ e ++ ] = D [ K ++ ] ; while ( -- G ) ; K = 0 ; if ( y < A ) { G = y ; A -= G ; do Q [ e ++ ] = D [ K ++ ] ; while ( -- G ) ; K = e - H ; v = Q } } } else if ( K += y - G , G < A ) { A -= G ; do Q [ e ++ ] = D [ K ++ ] ; while ( -- G ) ; K = e - H ; v = Q } for ( ; 2 < A ; ) Q [ e ++ ] = v [ K ++ ] , Q [ e ++ ] = v [ K ++ ] , Q [ e ++ ] = v [ K ++ ] , A -= 3 ; A && ( Q [ e ++ ] = v [ K ++ ] , 1 < A && ( Q [ e ++ ] = v [ K ++ ] ) ) } else { K = e - H ; do Q [ e ++ ] =
Q [ K ++ ] , Q [ e ++ ] = Q [ K ++ ] , Q [ e ++ ] = Q [ K ++ ] , A -= 3 ; while ( 2 < A ) ; A && ( Q [ e ++ ] = Q [ K ++ ] , 1 < A && ( Q [ e ++ ] = Q [ K ++ ] ) ) } } else if ( 0 === ( G & 64 ) ) { H = w [ ( H & 65535 ) + ( z & ( 1 << G ) - 1 ) ] ; continue c } else { b . msg = "invalid distance code" ; g . mode = 30 ; break a } break } } else if ( 0 === ( G & 64 ) ) { H = x [ ( H & 65535 ) + ( z & ( 1 << G ) - 1 ) ] ; continue b } else { G & 32 ? g . mode = 12 : ( b . msg = "invalid literal/length code" , g . mode = 30 ) ; break a } break } while ( h < f && e < d ) ; A = t >> 3 ; h -= A ; t -= A << 3 ; b . next _in = h ; b . next _out = e ; b . avail _in = h < f ? 5 + ( f - h ) : 5 - ( h - f ) ; b . avail _out = e < d ? 257 + ( d - e ) : 257 - ( e - d ) ; g . hold = z & ( 1 << t ) - 1 ; g . bits =
t } } , { } ] , 9 : [ function ( c , b , g ) { function h ( a ) { return ( a >>> 24 & 255 ) + ( a >>> 8 & 65280 ) + ( ( a & 65280 ) << 8 ) + ( ( a & 255 ) << 24 ) } function p ( ) { this . mode = 0 ; this . last = ! 1 ; this . wrap = 0 ; this . havedict = ! 1 ; this . total = this . check = this . dmax = this . flags = 0 ; this . head = null ; this . wnext = this . whave = this . wsize = this . wbits = 0 ; this . window = null ; this . extra = this . offset = this . length = this . bits = this . hold = 0 ; this . distcode = this . lencode = null ; this . have = this . ndist = this . nlen = this . ncode = this . distbits = this . lenbits = 0 ; this . next = null ; this . lens = new a . Buf16 ( 320 ) ; this . work =
new a . Buf16 ( 288 ) ; this . distdyn = this . lendyn = null ; this . was = this . back = this . sane = 0 } function m ( d ) { var b ; if ( ! d || ! d . state ) return - 2 ; b = d . state ; d . total _in = d . total _out = b . total = 0 ; d . msg = "" ; b . wrap && ( d . adler = b . wrap & 1 ) ; b . mode = 1 ; b . last = 0 ; b . havedict = 0 ; b . dmax = 32768 ; b . head = null ; b . hold = 0 ; b . bits = 0 ; b . lencode = b . lendyn = new a . Buf32 ( 852 ) ; b . distcode = b . distdyn = new a . Buf32 ( 592 ) ; b . sane = 1 ; b . back = - 1 ; return 0 } function q ( a ) { var d ; if ( ! a || ! a . state ) return - 2 ; d = a . state ; d . wsize = 0 ; d . whave = 0 ; d . wnext = 0 ; return m ( a ) } function f ( a , d ) { var b , c ; if ( ! a ||
! a . state ) return - 2 ; c = a . state ; 0 > d ? ( b = 0 , d = - d ) : ( b = ( d >> 4 ) + 1 , 48 > d && ( d &= 15 ) ) ; if ( d && ( 8 > d || 15 < d ) ) return - 2 ; null !== c . window && c . wbits !== d && ( c . window = null ) ; c . wrap = b ; c . wbits = d ; return q ( a ) } function e ( a , d ) { var b ; if ( ! a ) return - 2 ; b = new p ; a . state = b ; b . window = null ; b = f ( a , d ) ; 0 !== b && ( a . state = null ) ; return b } var a = c ( "../utils/common" ) , d = c ( "./adler32" ) , r = c ( "./crc32" ) , l = c ( "./inffast" ) , B = c ( "./inftrees" ) , y = ! 0 , D , z ; g . inflateReset = q ; g . inflateReset2 = f ; g . inflateResetKeep = m ; g . inflateInit = function ( a ) { return e ( a , 15 ) } ; g . inflateInit2 = e ;
g . inflate = function ( b , c ) { var e , f , g , m , p , A , q , v , u , Q , R , C , I , P , U = 0 , T , ca , Y , E = new a . Buf8 ( 4 ) , Z = [ 16 , 17 , 18 , 0 , 8 , 7 , 9 , 6 , 10 , 5 , 11 , 4 , 12 , 3 , 13 , 2 , 14 , 1 , 15 ] ; if ( ! b || ! b . state || ! b . output || ! b . input && 0 !== b . avail _in ) return - 2 ; e = b . state ; 12 === e . mode && ( e . mode = 13 ) ; p = b . next _out ; g = b . output ; q = b . avail _out ; m = b . next _in ; f = b . input ; A = b . avail _in ; v = e . hold ; u = e . bits ; Q = A ; R = q ; Y = 0 ; a : for ( ; ; ) switch ( e . mode ) { case 1 : if ( 0 === e . wrap ) { e . mode = 13 ; break } for ( ; 16 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } if ( e . wrap & 2 && 35615 === v ) { e . check = 0 ; E [ 0 ] = v & 255 ; E [ 1 ] = v >>>
8 & 255 ; e . check = r ( e . check , E , 2 , 0 ) ; u = v = 0 ; e . mode = 2 ; break } e . flags = 0 ; e . head && ( e . head . done = ! 1 ) ; if ( ! ( e . wrap & 1 ) || ( ( ( v & 255 ) << 8 ) + ( v >> 8 ) ) % 31 ) { b . msg = "incorrect header check" ; e . mode = 30 ; break } if ( 8 !== ( v & 15 ) ) { b . msg = "unknown compression method" ; e . mode = 30 ; break } v >>>= 4 ; u -= 4 ; I = ( v & 15 ) + 8 ; if ( 0 === e . wbits ) e . wbits = I ; else if ( I > e . wbits ) { b . msg = "invalid window size" ; e . mode = 30 ; break } e . dmax = 1 << I ; b . adler = e . check = 1 ; e . mode = v & 512 ? 10 : 12 ; u = v = 0 ; break ; case 2 : for ( ; 16 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . flags = v ; if ( 8 !== ( e . flags & 255 ) ) { b . msg =
"unknown compression method" ; e . mode = 30 ; break } if ( e . flags & 57344 ) { b . msg = "unknown header flags set" ; e . mode = 30 ; break } e . head && ( e . head . text = v >> 8 & 1 ) ; e . flags & 512 && ( E [ 0 ] = v & 255 , E [ 1 ] = v >>> 8 & 255 , e . check = r ( e . check , E , 2 , 0 ) ) ; u = v = 0 ; e . mode = 3 ; case 3 : for ( ; 32 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . head && ( e . head . time = v ) ; e . flags & 512 && ( E [ 0 ] = v & 255 , E [ 1 ] = v >>> 8 & 255 , E [ 2 ] = v >>> 16 & 255 , E [ 3 ] = v >>> 24 & 255 , e . check = r ( e . check , E , 4 , 0 ) ) ; u = v = 0 ; e . mode = 4 ; case 4 : for ( ; 16 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . head && ( e . head . xflags = v & 255 ,
e . head . os = v >> 8 ) ; e . flags & 512 && ( E [ 0 ] = v & 255 , E [ 1 ] = v >>> 8 & 255 , e . check = r ( e . check , E , 2 , 0 ) ) ; u = v = 0 ; e . mode = 5 ; case 5 : if ( e . flags & 1024 ) { for ( ; 16 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . length = v ; e . head && ( e . head . extra _len = v ) ; e . flags & 512 && ( E [ 0 ] = v & 255 , E [ 1 ] = v >>> 8 & 255 , e . check = r ( e . check , E , 2 , 0 ) ) ; u = v = 0 } else e . head && ( e . head . extra = null ) ; e . mode = 6 ; case 6 : if ( e . flags & 1024 && ( C = e . length , C > A && ( C = A ) , C && ( e . head && ( I = e . head . extra _len - e . length , e . head . extra || ( e . head . extra = Array ( e . head . extra _len ) ) , a . arraySet ( e . head . extra , f , m , C , I ) ) ,
e . flags & 512 && ( e . check = r ( e . check , f , C , m ) ) , A -= C , m += C , e . length -= C ) , e . length ) ) break a ; e . length = 0 ; e . mode = 7 ; case 7 : if ( e . flags & 2048 ) { if ( 0 === A ) break a ; C = 0 ; do I = f [ m + C ++ ] , e . head && I && 65536 > e . length && ( e . head . name += String . fromCharCode ( I ) ) ; while ( I && C < A ) ; e . flags & 512 && ( e . check = r ( e . check , f , C , m ) ) ; A -= C ; m += C ; if ( I ) break a } else e . head && ( e . head . name = null ) ; e . length = 0 ; e . mode = 8 ; case 8 : if ( e . flags & 4096 ) { if ( 0 === A ) break a ; C = 0 ; do I = f [ m + C ++ ] , e . head && I && 65536 > e . length && ( e . head . comment += String . fromCharCode ( I ) ) ; while ( I && C < A ) ; e . flags &
512 && ( e . check = r ( e . check , f , C , m ) ) ; A -= C ; m += C ; if ( I ) break a } else e . head && ( e . head . comment = null ) ; e . mode = 9 ; case 9 : if ( e . flags & 512 ) { for ( ; 16 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } if ( v !== ( e . check & 65535 ) ) { b . msg = "header crc mismatch" ; e . mode = 30 ; break } u = v = 0 } e . head && ( e . head . hcrc = e . flags >> 9 & 1 , e . head . done = ! 0 ) ; b . adler = e . check = 0 ; e . mode = 12 ; break ; case 10 : for ( ; 32 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } b . adler = e . check = h ( v ) ; u = v = 0 ; e . mode = 11 ; case 11 : if ( 0 === e . havedict ) return b . next _out = p , b . avail _out = q , b . next _in = m , b . avail _in =
A , e . hold = v , e . bits = u , 2 ; b . adler = e . check = 1 ; e . mode = 12 ; case 12 : if ( 5 === c || 6 === c ) break a ; case 13 : if ( e . last ) { v >>>= u & 7 ; u -= u & 7 ; e . mode = 27 ; break } for ( ; 3 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . last = v & 1 ; v >>>= 1 ; -- u ; switch ( v & 3 ) { case 0 : e . mode = 14 ; break ; case 1 : C = e ; if ( y ) { I = void 0 ; D = new a . Buf32 ( 512 ) ; z = new a . Buf32 ( 32 ) ; for ( I = 0 ; 144 > I ; ) C . lens [ I ++ ] = 8 ; for ( ; 256 > I ; ) C . lens [ I ++ ] = 9 ; for ( ; 280 > I ; ) C . lens [ I ++ ] = 7 ; for ( ; 288 > I ; ) C . lens [ I ++ ] = 8 ; B ( 1 , C . lens , 0 , 288 , D , 0 , C . work , { bits : 9 } ) ; for ( I = 0 ; 32 > I ; ) C . lens [ I ++ ] = 5 ; B ( 2 , C . lens , 0 , 32 , z , 0 , C . work ,
{ bits : 5 } ) ; y = ! 1 } C . lencode = D ; C . lenbits = 9 ; C . distcode = z ; C . distbits = 5 ; e . mode = 20 ; if ( 6 === c ) { v >>>= 2 ; u -= 2 ; break a } break ; case 2 : e . mode = 17 ; break ; case 3 : b . msg = "invalid block type" , e . mode = 30 } v >>>= 2 ; u -= 2 ; break ; case 14 : v >>>= u & 7 ; for ( u -= u & 7 ; 32 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } if ( ( v & 65535 ) !== ( v >>> 16 ^ 65535 ) ) { b . msg = "invalid stored block lengths" ; e . mode = 30 ; break } e . length = v & 65535 ; u = v = 0 ; e . mode = 15 ; if ( 6 === c ) break a ; case 15 : e . mode = 16 ; case 16 : if ( C = e . length ) { C > A && ( C = A ) ; C > q && ( C = q ) ; if ( 0 === C ) break a ; a . arraySet ( g , f , m ,
C , p ) ; A -= C ; m += C ; q -= C ; p += C ; e . length -= C ; break } e . mode = 12 ; break ; case 17 : for ( ; 14 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . nlen = ( v & 31 ) + 257 ; v >>>= 5 ; u -= 5 ; e . ndist = ( v & 31 ) + 1 ; v >>>= 5 ; u -= 5 ; e . ncode = ( v & 15 ) + 4 ; v >>>= 4 ; u -= 4 ; if ( 286 < e . nlen || 30 < e . ndist ) { b . msg = "too many length or distance symbols" ; e . mode = 30 ; break } e . have = 0 ; e . mode = 18 ; case 18 : for ( ; e . have < e . ncode ; ) { for ( ; 3 > u ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . lens [ Z [ e . have ++ ] ] = v & 7 ; v >>>= 3 ; u -= 3 } for ( ; 19 > e . have ; ) e . lens [ Z [ e . have ++ ] ] = 0 ; e . lencode = e . lendyn ; e . lenbits = 7 ; C = { bits : e . lenbits } ;
Y = B ( 0 , e . lens , 0 , 19 , e . lencode , 0 , e . work , C ) ; e . lenbits = C . bits ; if ( Y ) { b . msg = "invalid code lengths set" ; e . mode = 30 ; break } e . have = 0 ; e . mode = 19 ; case 19 : for ( ; e . have < e . nlen + e . ndist ; ) { for ( ; ; ) { U = e . lencode [ v & ( 1 << e . lenbits ) - 1 ] ; C = U >>> 24 ; U &= 65535 ; if ( C <= u ) break ; if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } if ( 16 > U ) v >>>= C , u -= C , e . lens [ e . have ++ ] = U ; else { if ( 16 === U ) { for ( I = C + 2 ; u < I ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } v >>>= C ; u -= C ; if ( 0 === e . have ) { b . msg = "invalid bit length repeat" ; e . mode = 30 ; break } I = e . lens [ e . have - 1 ] ; C = 3 + ( v & 3 ) ; v >>>= 2 ;
u -= 2 } else if ( 17 === U ) { for ( I = C + 3 ; u < I ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } v >>>= C ; u -= C ; I = 0 ; C = 3 + ( v & 7 ) ; v >>>= 3 ; u -= 3 } else { for ( I = C + 7 ; u < I ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } v >>>= C ; u -= C ; I = 0 ; C = 11 + ( v & 127 ) ; v >>>= 7 ; u -= 7 } if ( e . have + C > e . nlen + e . ndist ) { b . msg = "invalid bit length repeat" ; e . mode = 30 ; break } for ( ; C -- ; ) e . lens [ e . have ++ ] = I } } if ( 30 === e . mode ) break ; if ( 0 === e . lens [ 256 ] ) { b . msg = "invalid code -- missing end-of-block" ; e . mode = 30 ; break } e . lenbits = 9 ; C = { bits : e . lenbits } ; Y = B ( 1 , e . lens , 0 , e . nlen , e . lencode , 0 , e . work , C ) ; e . lenbits =
C . bits ; if ( Y ) { b . msg = "invalid literal/lengths set" ; e . mode = 30 ; break } e . distbits = 6 ; e . distcode = e . distdyn ; C = { bits : e . distbits } ; Y = B ( 2 , e . lens , e . nlen , e . ndist , e . distcode , 0 , e . work , C ) ; e . distbits = C . bits ; if ( Y ) { b . msg = "invalid distances set" ; e . mode = 30 ; break } e . mode = 20 ; if ( 6 === c ) break a ; case 20 : e . mode = 21 ; case 21 : if ( 6 <= A && 258 <= q ) { b . next _out = p ; b . avail _out = q ; b . next _in = m ; b . avail _in = A ; e . hold = v ; e . bits = u ; l ( b , R ) ; p = b . next _out ; g = b . output ; q = b . avail _out ; m = b . next _in ; f = b . input ; A = b . avail _in ; v = e . hold ; u = e . bits ; 12 === e . mode && ( e . back = - 1 ) ;
break } for ( e . back = 0 ; ; ) { U = e . lencode [ v & ( 1 << e . lenbits ) - 1 ] ; C = U >>> 24 ; I = U >>> 16 & 255 ; U &= 65535 ; if ( C <= u ) break ; if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } if ( I && 0 === ( I & 240 ) ) { P = C ; T = I ; for ( ca = U ; ; ) { U = e . lencode [ ca + ( ( v & ( 1 << P + T ) - 1 ) >> P ) ] ; C = U >>> 24 ; I = U >>> 16 & 255 ; U &= 65535 ; if ( P + C <= u ) break ; if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } v >>>= P ; u -= P ; e . back += P } v >>>= C ; u -= C ; e . back += C ; e . length = U ; if ( 0 === I ) { e . mode = 26 ; break } if ( I & 32 ) { e . back = - 1 ; e . mode = 12 ; break } if ( I & 64 ) { b . msg = "invalid literal/length code" ; e . mode = 30 ; break } e . extra = I & 15 ; e . mode = 22 ; case 22 : if ( e . extra ) { for ( I =
e . extra ; u < I ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . length += v & ( 1 << e . extra ) - 1 ; v >>>= e . extra ; u -= e . extra ; e . back += e . extra } e . was = e . length ; e . mode = 23 ; case 23 : for ( ; ; ) { U = e . distcode [ v & ( 1 << e . distbits ) - 1 ] ; C = U >>> 24 ; I = U >>> 16 & 255 ; U &= 65535 ; if ( C <= u ) break ; if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } if ( 0 === ( I & 240 ) ) { P = C ; T = I ; for ( ca = U ; ; ) { U = e . distcode [ ca + ( ( v & ( 1 << P + T ) - 1 ) >> P ) ] ; C = U >>> 24 ; I = U >>> 16 & 255 ; U &= 65535 ; if ( P + C <= u ) break ; if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } v >>>= P ; u -= P ; e . back += P } v >>>= C ; u -= C ; e . back += C ; if ( I & 64 ) { b . msg = "invalid distance code" ;
e . mode = 30 ; break } e . offset = U ; e . extra = I & 15 ; e . mode = 24 ; case 24 : if ( e . extra ) { for ( I = e . extra ; u < I ; ) { if ( 0 === A ) break a ; A -- ; v += f [ m ++ ] << u ; u += 8 } e . offset += v & ( 1 << e . extra ) - 1 ; v >>>= e . extra ; u -= e . extra ; e . back += e . extra } if ( e . offset > e . dmax ) { b . msg = "invalid distance too far back" ; e . mode = 30 ; break } e . mode = 25 ; case 25 : if ( 0 === q ) break a ; C = R - q ; if ( e . offset > C ) { C = e . offset - C ; if ( C > e . whave && e . sane ) { b . msg = "invalid distance too far back" ; e . mode = 30 ; break } C > e . wnext ? ( C -= e . wnext , I = e . wsize - C ) : I = e . wnext - C ; C > e . length && ( C = e . length ) ; P = e . window } else P =
g , I = p - e . offset , C = e . length ; C > q && ( C = q ) ; q -= C ; e . length -= C ; do g [ p ++ ] = P [ I ++ ] ; while ( -- C ) ; 0 === e . length && ( e . mode = 21 ) ; break ; case 26 : if ( 0 === q ) break a ; g [ p ++ ] = e . length ; q -- ; e . mode = 21 ; break ; case 27 : if ( e . wrap ) { for ( ; 32 > u ; ) { if ( 0 === A ) break a ; A -- ; v |= f [ m ++ ] << u ; u += 8 } R -= q ; b . total _out += R ; e . total += R ; R && ( b . adler = e . check = e . flags ? r ( e . check , g , R , p - R ) : d ( e . check , g , R , p - R ) ) ; R = q ; if ( ( e . flags ? v : h ( v ) ) !== e . check ) { b . msg = "incorrect data check" ; e . mode = 30 ; break } u = v = 0 } e . mode = 28 ; case 28 : if ( e . wrap && e . flags ) { for ( ; 32 > u ; ) { if ( 0 === A ) break a ; A -- ; v +=
f [ m ++ ] << u ; u += 8 } if ( v !== ( e . total & 4294967295 ) ) { b . msg = "incorrect length check" ; e . mode = 30 ; break } u = v = 0 } e . mode = 29 ; case 29 : Y = 1 ; break a ; case 30 : Y = - 3 ; break a ; case 31 : return - 4 ; default : return - 2 } b . next _out = p ; b . avail _out = q ; b . next _in = m ; b . avail _in = A ; e . hold = v ; e . bits = u ; if ( e . wsize || R !== b . avail _out && 30 > e . mode && ( 27 > e . mode || 4 !== c ) ) f = b . output , m = b . next _out , p = R - b . avail _out , q = b . state , null === q . window && ( q . wsize = 1 << q . wbits , q . wnext = 0 , q . whave = 0 , q . window = new a . Buf8 ( q . wsize ) ) , p >= q . wsize ? ( a . arraySet ( q . window , f , m - q . wsize , q . wsize , 0 ) ,
q . wnext = 0 , q . whave = q . wsize ) : ( A = q . wsize - q . wnext , A > p && ( A = p ) , a . arraySet ( q . window , f , m - p , A , q . wnext ) , ( p -= A ) ? ( a . arraySet ( q . window , f , m - p , p , 0 ) , q . wnext = p , q . whave = q . wsize ) : ( q . wnext += A , q . wnext === q . wsize && ( q . wnext = 0 ) , q . whave < q . wsize && ( q . whave += A ) ) ) ; Q -= b . avail _in ; R -= b . avail _out ; b . total _in += Q ; b . total _out += R ; e . total += R ; e . wrap && R && ( b . adler = e . check = e . flags ? r ( e . check , g , R , b . next _out - R ) : d ( e . check , g , R , b . next _out - R ) ) ; b . data _type = e . bits + ( e . last ? 64 : 0 ) + ( 12 === e . mode ? 128 : 0 ) + ( 20 === e . mode || 15 === e . mode ? 256 : 0 ) ; ( 0 === Q && 0 === R || 4 ===
c ) && 0 === Y && ( Y = - 5 ) ; return Y } ; g . inflateEnd = function ( a ) { if ( ! a || ! a . state ) return - 2 ; var d = a . state ; d . window && ( d . window = null ) ; a . state = null ; return 0 } ; g . inflateGetHeader = function ( a , d ) { var b ; if ( ! a || ! a . state ) return - 2 ; b = a . state ; if ( 0 === ( b . wrap & 2 ) ) return - 2 ; b . head = d ; d . done = ! 1 ; return 0 } ; g . inflateInfo = "pako inflate (from Nodeca project)" } , { "../utils/common" : 2 , "./adler32" : 4 , "./crc32" : 6 , "./inffast" : 8 , "./inftrees" : 10 } ] , 10 : [ function ( c , b , g ) { var h = c ( "../utils/common" ) , p = [ 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 13 , 15 , 17 , 19 , 23 , 27 , 31 , 35 , 43 , 51 ,
59 , 67 , 83 , 99 , 115 , 131 , 163 , 195 , 227 , 258 , 0 , 0 ] , m = [ 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 17 , 17 , 17 , 17 , 18 , 18 , 18 , 18 , 19 , 19 , 19 , 19 , 20 , 20 , 20 , 20 , 21 , 21 , 21 , 21 , 16 , 72 , 78 ] , q = [ 1 , 2 , 3 , 4 , 5 , 7 , 9 , 13 , 17 , 25 , 33 , 49 , 65 , 97 , 129 , 193 , 257 , 385 , 513 , 769 , 1025 , 1537 , 2049 , 3073 , 4097 , 6145 , 8193 , 12289 , 16385 , 24577 , 0 , 0 ] , f = [ 16 , 16 , 16 , 16 , 17 , 17 , 18 , 18 , 19 , 19 , 20 , 20 , 21 , 21 , 22 , 22 , 23 , 23 , 24 , 24 , 25 , 25 , 26 , 26 , 27 , 27 , 28 , 28 , 29 , 29 , 64 , 64 ] ; b . exports = function ( b , a , d , c , l , g , y , D ) { for ( var z = D . bits , t = 0 , x = 0 , w = 0 , F = 0 , L = 0 , H = 0 , G = 0 , A = 0 , K = 0 , v = 0 , u , Q , R = null , C = 0 , I , P = new h . Buf16 ( 16 ) , H = new h . Buf16 ( 16 ) ,
U = null , T = 0 , ca , Y , E , t = 0 ; 15 >= t ; t ++ ) P [ t ] = 0 ; for ( x = 0 ; x < c ; x ++ ) P [ a [ d + x ] ] ++ ; L = z ; for ( F = 15 ; 1 <= F && 0 === P [ F ] ; F -- ) ; L > F && ( L = F ) ; if ( 0 === F ) return l [ g ++ ] = 20971520 , l [ g ++ ] = 20971520 , D . bits = 1 , 0 ; for ( w = 1 ; w < F && 0 === P [ w ] ; w ++ ) ; L < w && ( L = w ) ; for ( t = A = 1 ; 15 >= t ; t ++ ) if ( A <<= 1 , A -= P [ t ] , 0 > A ) return - 1 ; if ( 0 < A && ( 0 === b || 1 !== F ) ) return - 1 ; H [ 1 ] = 0 ; for ( t = 1 ; 15 > t ; t ++ ) H [ t + 1 ] = H [ t ] + P [ t ] ; for ( x = 0 ; x < c ; x ++ ) 0 !== a [ d + x ] && ( y [ H [ a [ d + x ] ] ++ ] = x ) ; switch ( b ) { case 0 : R = U = y ; I = 19 ; break ; case 1 : R = p ; C -= 257 ; U = m ; T -= 257 ; I = 256 ; break ; default : R = q , U = f , I = - 1 } x = v = 0 ; t = w ; z = g ; H = L ; G = 0 ; Q = - 1 ;
K = 1 << L ; c = K - 1 ; if ( 1 === b && 852 < K || 2 === b && 592 < K ) return 1 ; for ( var Z = 0 ; ; ) { Z ++ ; ca = t - G ; y [ x ] < I ? ( Y = 0 , E = y [ x ] ) : y [ x ] > I ? ( Y = U [ T + y [ x ] ] , E = R [ C + y [ x ] ] ) : ( Y = 96 , E = 0 ) ; A = 1 << t - G ; w = u = 1 << H ; do u -= A , l [ z + ( v >> G ) + u ] = ca << 24 | Y << 16 | E | 0 ; while ( 0 !== u ) ; for ( A = 1 << t - 1 ; v & A ; ) A >>= 1 ; 0 !== A ? ( v &= A - 1 , v += A ) : v = 0 ; x ++ ; if ( 0 === -- P [ t ] ) { if ( t === F ) break ; t = a [ d + y [ x ] ] } if ( t > L && ( v & c ) !== Q ) { 0 === G && ( G = L ) ; z += w ; H = t - G ; for ( A = 1 << H ; H + G < F ; ) { A -= P [ H + G ] ; if ( 0 >= A ) break ; H ++ ; A <<= 1 } K += 1 << H ; if ( 1 === b && 852 < K || 2 === b && 592 < K ) return 1 ; Q = v & c ; l [ Q ] = L << 24 | H << 16 | z - g | 0 } } 0 !== v && ( l [ z + v ] = t - G << 24 |
4194304 ) ; D . bits = L ; return 0 } } , { "../utils/common" : 2 } ] , 11 : [ function ( c , b , g ) { b . exports = { 2 : "need dictionary" , 1 : "stream end" , 0 : "" , "-1" : "file error" , "-2" : "stream error" , "-3" : "data error" , "-4" : "insufficient memory" , "-5" : "buffer error" , "-6" : "incompatible version" } } , { } ] , 12 : [ function ( c , b , g ) { b . exports = function ( ) { this . input = null ; this . total _in = this . avail _in = this . next _in = 0 ; this . output = null ; this . total _out = this . avail _out = this . next _out = 0 ; this . msg = "" ; this . state = null ; this . data _type = 2 ; this . adler = 0 } } , { } ] } , { } , [ 1 ] ) ( 1 ) } ) ;
return { inflate : function ( k , c ) { return h . inflateRaw ( k ) } } } ( ) } ) ( ) ; core . StepDirection = { PREVIOUS : 1 , NEXT : 2 } ; core . StepIterator = function ( h , k ) { function c ( ) { a = null ; r = d = void 0 } function b ( ) { void 0 === r && ( r = h . acceptPosition ( k ) === f ) ; return r } function g ( a , d ) { c ( ) ; return k . setUnfilteredPosition ( a , d ) } function n ( ) { a || ( a = k . container ( ) ) ; return a } function p ( ) { void 0 === d && ( d = k . unfilteredDomOffset ( ) ) ; return d } function m ( ) { for ( c ( ) ; k . nextPosition ( ) ; ) if ( c ( ) , b ( ) ) return ! 0 ; return ! 1 } function q ( ) { for ( c ( ) ; k . previousPosition ( ) ; ) if ( c ( ) , b ( ) ) return ! 0 ; return ! 1 } var f = core . PositionFilter . FilterResult . FILTER _ACCEPT , e = core . StepDirection . NEXT ,
a , d , r ; this . isStep = b ; this . setPosition = g ; this . container = n ; this . offset = p ; this . nextStep = m ; this . previousStep = q ; this . advanceStep = function ( a ) { return a === e ? m ( ) : q ( ) } ; this . roundToClosestStep = function ( ) { var a , d , e = b ( ) ; e || ( a = n ( ) , d = p ( ) , e = q ( ) , e || ( g ( a , d ) , e = m ( ) ) ) ; return e } ; this . roundToPreviousStep = function ( ) { var a = b ( ) ; a || ( a = q ( ) ) ; return a } ; this . roundToNextStep = function ( ) { var a = b ( ) ; a || ( a = m ( ) ) ; return a } ; this . leftNode = function ( ) { return k . leftNode ( ) } ; this . snapshot = function ( ) { return new core . StepIterator . StepSnapshot ( n ( ) ,
p ( ) ) } ; this . restore = function ( a ) { g ( a . container , a . offset ) } } ; core . StepIterator . StepSnapshot = function ( h , k ) { this . container = h ; this . offset = k } ; core . Utils = function ( ) { function h ( k , c ) { if ( c && Array . isArray ( c ) ) { k = k || [ ] ; if ( ! Array . isArray ( k ) ) throw "Destination is not an array." ; k = k . concat ( c . map ( function ( b ) { return h ( null , b ) } ) ) } else if ( c && "object" === typeof c ) { k = k || { } ; if ( "object" !== typeof k ) throw "Destination is not an object." ; Object . keys ( c ) . forEach ( function ( b ) { k [ b ] = h ( k [ b ] , c [ b ] ) } ) } else k = c ; return k } this . hashString = function ( h ) { var c = 0 , b , g ; b = 0 ; for ( g = h . length ; b < g ; b += 1 ) c = ( c << 5 ) - c + h . charCodeAt ( b ) , c |= 0 ; return c } ; this . mergeObjects = function ( k , c ) { Object . keys ( c ) . forEach ( function ( b ) { k [ b ] =
h ( k [ b ] , c [ b ] ) } ) ; return k } } ; core . Zip = function ( h , k ) { function c ( a , d , b ) { B ? b ( null , B . subarray ( a , a + d ) ) : b ( "File data not loaded" , null ) } function b ( a ) { var d = [ 0 , 1996959894 , 3993919788 , 2567524794 , 124634137 , 1886057615 , 3915621685 , 2657392035 , 249268274 , 2044508324 , 3772115230 , 2547177864 , 162941995 , 2125561021 , 3887607047 , 2428444049 , 498536548 , 1789927666 , 4089016648 , 2227061214 , 450548861 , 1843258603 , 4107580753 , 2211677639 , 325883990 , 1684777152 , 4251122042 , 2321926636 , 335633487 , 1661365465 , 4195302755 , 2366115317 , 997073096 , 1281953886 , 3579855332 , 2724688242 , 1006888145 ,
1258607687 , 3524101629 , 2768942443 , 901097722 , 1119000684 , 3686517206 , 2898065728 , 853044451 , 1172266101 , 3705015759 , 2882616665 , 651767980 , 1373503546 , 3369554304 , 3218104598 , 565507253 , 1454621731 , 3485111705 , 3099436303 , 671266974 , 1594198024 , 3322730930 , 2970347812 , 795835527 , 1483230225 , 3244367275 , 3060149565 , 1994146192 , 31158534 , 2563907772 , 4023717930 , 1907459465 , 112637215 , 2680153253 , 3904427059 , 2013776290 , 251722036 , 2517215374 , 3775830040 , 2137656763 , 141376813 , 2439277719 , 3865271297 , 1802195444 , 476864866 , 2238001368 , 4066508878 ,
1812370925 , 453092731 , 2181625025 , 4111451223 , 1706088902 , 314042704 , 2344532202 , 4240017532 , 1658658271 , 366619977 , 2362670323 , 4224994405 , 1303535960 , 984961486 , 2747007092 , 3569037538 , 1256170817 , 1037604311 , 2765210733 , 3554079995 , 1131014506 , 879679996 , 2909243462 , 3663771856 , 1141124467 , 855842277 , 2852801631 , 3708648649 , 1342533948 , 654459306 , 3188396048 , 3373015174 , 1466479909 , 544179635 , 3110523913 , 3462522015 , 1591671054 , 702138776 , 2966460450 , 3352799412 , 1504918807 , 783551873 , 3082640443 , 3233442989 , 3988292384 , 2596254646 , 62317068 ,
1957810842 , 3939845945 , 2647816111 , 81470997 , 1943803523 , 3814918930 , 2489596804 , 225274430 , 2053790376 , 3826175755 , 2466906013 , 167816743 , 2097651377 , 4027552580 , 2265490386 , 503444072 , 1762050814 , 4150417245 , 2154129355 , 426522225 , 1852507879 , 4275313526 , 2312317920 , 282753626 , 1742555852 , 4189708143 , 2394877945 , 397917763 , 1622183637 , 3604390888 , 2714866558 , 953729732 , 1340076626 , 3518719985 , 2797360999 , 1068828381 , 1219638859 , 3624741850 , 2936675148 , 906185462 , 1090812512 , 3747672003 , 2825379669 , 829329135 , 1181335161 , 3412177804 , 3160834842 ,
628085408 , 1382605366 , 3423369109 , 3138078467 , 570562233 , 1426400815 , 3317316542 , 2998733608 , 733239954 , 1555261956 , 3268935591 , 3050360625 , 752459403 , 1541320221 , 2607071920 , 3965973030 , 1969922972 , 40735498 , 2617837225 , 3943577151 , 1913087877 , 83908371 , 2512341634 , 3803740692 , 2075208622 , 213261112 , 2463272603 , 3855990285 , 2094854071 , 198958881 , 2262029012 , 4057260610 , 1759359992 , 534414190 , 2176718541 , 4139329115 , 1873836001 , 414664567 , 2282248934 , 4279200368 , 1711684554 , 285281116 , 2405801727 , 4167216745 , 1634467795 , 376229701 , 2685067896 ,
3608007406 , 1308918612 , 956543938 , 2808555105 , 3495958263 , 1231636301 , 1047427035 , 2932959818 , 3654703836 , 1088359270 , 936918E3 , 2847714899 , 3736837829 , 1202900863 , 817233897 , 3183342108 , 3401237130 , 1404277552 , 615818150 , 3134207493 , 3453421203 , 1423857449 , 601450431 , 3009837614 , 3294710456 , 1567103746 , 711928724 , 3020668471 , 3272380065 , 1510334235 , 755167117 ] , b , e , c = a . length , l = 0 , l = 0 ; b = - 1 ; for ( e = 0 ; e < c ; e += 1 ) l = ( b ^ a [ e ] ) & 255 , l = d [ l ] , b = b >>> 8 ^ l ; return b ^ - 1 } function g ( a ) { return new Date ( ( a >> 25 & 127 ) + 1980 , ( a >> 21 & 15 ) - 1 , a >> 16 & 31 , a >> 11 & 15 ,
a >> 5 & 63 , ( a & 31 ) << 1 ) } function n ( a ) { var d = a . getFullYear ( ) ; return 1980 > d ? 0 : d - 1980 << 25 | a . getMonth ( ) + 1 << 21 | a . getDate ( ) << 16 | a . getHours ( ) << 11 | a . getMinutes ( ) << 5 | a . getSeconds ( ) >> 1 } function p ( a , d ) { var b , e , l , f , r , v , u , h = this ; this . load = function ( d ) { if ( null !== h . data ) d ( null , h . data ) ; else { var b = r + 34 + e + l + 256 ; b + u > y && ( b = y - u ) ; c ( u , b , function ( b , e ) { if ( b || null === e ) d ( b , e ) ; else a : { var c = e , l = new core . ByteArray ( c ) , g = l . readUInt32LE ( ) , u ; if ( 67324752 !== g ) d ( "File entry signature is wrong." + g . toString ( ) + " " + c . length . toString ( ) , null ) ;
else { l . pos += 22 ; g = l . readUInt16LE ( ) ; u = l . readUInt16LE ( ) ; l . pos += g + u ; if ( f ) { c = c . subarray ( l . pos , l . pos + r ) ; if ( r !== c . length ) { d ( "The amount of compressed bytes read was " + c . length . toString ( ) + " instead of " + r . toString ( ) + " for " + h . filename + " in " + a + "." , null ) ; break a } c = z ( c , v ) } else c = c . subarray ( l . pos , l . pos + v ) ; v !== c . length ? d ( "The amount of bytes read was " + c . length . toString ( ) + " instead of " + v . toString ( ) + " for " + h . filename + " in " + a + "." , null ) : ( h . data = c , d ( null , c ) ) } } } ) } } ; this . set = function ( a , d , b , e ) { h . filename = a ; h . data =
d ; h . compressed = b ; h . date = e } ; this . error = null ; d && ( b = d . readUInt32LE ( ) , 33639248 !== b ? this . error = "Central directory entry has wrong signature at position " + ( d . pos - 4 ) . toString ( ) + ' for file "' + a + '": ' + d . data . length . toString ( ) : ( d . pos += 6 , f = d . readUInt16LE ( ) , this . date = g ( d . readUInt32LE ( ) ) , d . readUInt32LE ( ) , r = d . readUInt32LE ( ) , v = d . readUInt32LE ( ) , e = d . readUInt16LE ( ) , l = d . readUInt16LE ( ) , b = d . readUInt16LE ( ) , d . pos += 8 , u = d . readUInt32LE ( ) , this . filename = runtime . byteArrayToString ( d . data . subarray ( d . pos , d . pos + e ) , "utf8" ) , this . data =
null , d . pos += e + l + b ) ) } function m ( a , d ) { if ( 22 !== a . length ) d ( "Central directory length should be 22." , t ) ; else { var b = new core . ByteArray ( a ) , e ; e = b . readUInt32LE ( ) ; 101010256 !== e ? d ( "Central directory signature is wrong: " + e . toString ( ) , t ) : ( e = b . readUInt16LE ( ) , 0 !== e ? d ( "Zip files with non-zero disk numbers are not supported." , t ) : ( e = b . readUInt16LE ( ) , 0 !== e ? d ( "Zip files with non-zero disk numbers are not supported." , t ) : ( e = b . readUInt16LE ( ) , D = b . readUInt16LE ( ) , e !== D ? d ( "Number of entries is inconsistent." , t ) : ( e = b . readUInt32LE ( ) ,
b = b . readUInt16LE ( ) , b = y - 22 - e , c ( b , y - b , function ( a , b ) { if ( a || null === b ) d ( a , t ) ; else a : { var e = new core . ByteArray ( b ) , c , f ; l = [ ] ; for ( c = 0 ; c < D ; c += 1 ) { f = new p ( h , e ) ; if ( f . error ) { d ( f . error , t ) ; break a } l [ l . length ] = f } d ( null , t ) } } ) ) ) ) ) } } function q ( a , d ) { var b = null , e , c ; for ( c = 0 ; c < l . length ; c += 1 ) if ( e = l [ c ] , e . filename === a ) { b = e ; break } b ? b . data ? d ( null , b . data ) : b . load ( d ) : d ( a + " not found." , null ) } function f ( a ) { var d = new core . ByteArrayWriter ( "utf8" ) , e = 0 ; d . appendArray ( [ 80 , 75 , 3 , 4 , 20 , 0 , 0 , 0 , 0 , 0 ] ) ; a . data && ( e = a . data . length ) ; d . appendUInt32LE ( n ( a . date ) ) ;
d . appendUInt32LE ( a . data ? b ( a . data ) : 0 ) ; d . appendUInt32LE ( e ) ; d . appendUInt32LE ( e ) ; d . appendUInt16LE ( a . filename . length ) ; d . appendUInt16LE ( 0 ) ; d . appendString ( a . filename ) ; a . data && d . appendByteArray ( a . data ) ; return d } function e ( a , d ) { var e = new core . ByteArrayWriter ( "utf8" ) , c = 0 ; e . appendArray ( [ 80 , 75 , 1 , 2 , 20 , 0 , 20 , 0 , 0 , 0 , 0 , 0 ] ) ; a . data && ( c = a . data . length ) ; e . appendUInt32LE ( n ( a . date ) ) ; e . appendUInt32LE ( a . data ? b ( a . data ) : 0 ) ; e . appendUInt32LE ( c ) ; e . appendUInt32LE ( c ) ; e . appendUInt16LE ( a . filename . length ) ; e . appendArray ( [ 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 ] ) ; e . appendUInt32LE ( d ) ; e . appendString ( a . filename ) ; return e } function a ( d , b ) { if ( d === l . length ) b ( null ) ; else { var e = l [ d ] ; null !== e . data ? a ( d + 1 , b ) : e . load ( function ( e ) { e ? b ( e ) : a ( d + 1 , b ) } ) } } function d ( d , b ) { a ( 0 , function ( a ) { if ( a ) b ( a ) ; else { var c , g , r = new core . ByteArrayWriter ( "utf8" ) , h = [ 0 ] ; for ( c = 0 ; c < l . length ; c += 1 ) r . appendByteArrayWriter ( f ( l [ c ] ) ) , h . push ( r . getLength ( ) ) ; a = r . getLength ( ) ; for ( c = 0 ; c < l . length ; c += 1 ) g = l [ c ] , r . appendByteArrayWriter ( e ( g , h [ c ] ) ) ; c = r . getLength ( ) - a ; r . appendArray ( [ 80 , 75 , 5 , 6 , 0 , 0 , 0 , 0 ] ) ; r . appendUInt16LE ( l . length ) ;
r . appendUInt16LE ( l . length ) ; r . appendUInt32LE ( c ) ; r . appendUInt32LE ( a ) ; r . appendArray ( [ 0 , 0 ] ) ; d ( r . getByteArray ( ) ) } } ) } function r ( a , b ) { d ( function ( d ) { runtime . writeFile ( a , d , function ( a ) { a || ( B = d , y = B . length ) ; b ( a ) } ) } , b ) } var l , B , y , D , z = core . RawInflate . inflate , t = this , x = new core . Base64 ; this . load = q ; this . save = function ( a , d , b , e ) { var c , f ; for ( c = 0 ; c < l . length ; c += 1 ) if ( f = l [ c ] , f . filename === a ) { f . set ( a , d , b , e ) ; return } f = new p ( h ) ; f . set ( a , d , b , e ) ; l . push ( f ) } ; this . remove = function ( a ) { var d , b ; for ( d = 0 ; d < l . length ; d += 1 ) if ( b = l [ d ] , b . filename ===
a ) return l . splice ( d , 1 ) , ! 0 ; return ! 1 } ; this . write = function ( a ) { r ( h , a ) } ; this . writeAs = r ; this . createByteArray = d ; this . loadContentXmlAsFragments = function ( a , d ) { t . loadAsString ( a , function ( a , b ) { if ( a ) return d . rootElementReady ( a ) ; d . rootElementReady ( null , b , ! 0 ) } ) } ; this . loadAsString = function ( a , d ) { q ( a , function ( a , b ) { if ( a || null === b ) return d ( a , null ) ; var e = runtime . byteArrayToString ( b , "utf8" ) ; d ( null , e ) } ) } ; this . loadAsDOM = function ( a , d ) { t . loadAsString ( a , function ( a , b ) { if ( a || null === b ) d ( a , null ) ; else { var e = ( new DOMParser ) . parseFromString ( b ,
"text/xml" ) ; d ( null , e ) } } ) } ; this . loadAsDataURL = function ( a , d , b ) { q ( a , function ( a , e ) { if ( a || ! e ) return b ( a , null ) ; var c = 0 , l ; d || ( d = 80 === e [ 1 ] && 78 === e [ 2 ] && 71 === e [ 3 ] ? "image/png" : 255 === e [ 0 ] && 216 === e [ 1 ] && 255 === e [ 2 ] ? "image/jpeg" : 71 === e [ 0 ] && 73 === e [ 1 ] && 70 === e [ 2 ] ? "image/gif" : "" ) ; for ( l = "data:" + d + ";base64," ; c < e . length ; ) l += x . convertUTF8ArrayToBase64 ( e . subarray ( c , Math . min ( c + 45E3 , e . length ) ) ) , c += 45E3 ; b ( null , l ) } ) } ; this . getEntries = function ( ) { return l . slice ( ) } ; y = - 1 ; null === k ? l = [ ] : runtime . readFile ( h , "binary" , function ( a , d ) { "string" ===
typeof d && ( a = "file was read as a string. Should be Uint8Array." ) ; a || ! d || 0 === d . length ? k ( "File '" + h + "' cannot be read. Err: " + ( a || "[none]" ) , t ) : ( B = d , y = B . length , c ( y - 22 , 22 , function ( a , d ) { a || null === d ? k ( a , t ) : m ( d , k ) } ) ) } ) } ; core . SimpleClientRect = null ; gui . CommonConstraints = { EDIT : { ANNOTATIONS : { ONLY _DELETE _OWN : "onlyDeleteOwn" } , REVIEW _MODE : "reviewMode" } } ; gui . SessionConstraints = function ( ) { function h ( b ) { k . hasOwnProperty ( b ) || ( k [ b ] = ! 1 , c . register ( b ) ) } var k = { } , c = new core . EventNotifier ; this . registerConstraint = h ; this . subscribe = function ( b , g ) { h ( b ) ; c . subscribe ( b , g ) } ; this . unsubscribe = function ( b , g ) { c . unsubscribe ( b , g ) } ; this . setState = function ( b , g ) { runtime . assert ( ! 0 === k . hasOwnProperty ( b ) , "No such constraint" ) ; k [ b ] !== g && ( k [ b ] = g , c . emit ( b , g ) ) } ; this . getState = function ( b ) { runtime . assert ( ! 0 === k . hasOwnProperty ( b ) , "No such constraint" ) ; return k [ b ] } } ; gui . BlacklistNamespaceNodeFilter = function ( h ) { var k = { } , c = NodeFilter . FILTER _REJECT , b = NodeFilter . FILTER _ACCEPT ; this . acceptNode = function ( g ) { return ! g || k . hasOwnProperty ( g . namespaceURI ) ? c : b } ; ( function ( ) { h . forEach ( function ( b ) { k [ b ] = ! 0 } ) } ) ( ) } ; odf . Namespaces = { namespaceMap : { config : "urn:oasis:names:tc:opendocument:xmlns:config:1.0" , db : "urn:oasis:names:tc:opendocument:xmlns:database:1.0" , dc : "http://purl.org/dc/elements/1.1/" , dr3d : "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" , draw : "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" , chart : "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" , fo : "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" , form : "urn:oasis:names:tc:opendocument:xmlns:form:1.0" , math : "http://www.w3.org/1998/Math/MathML" ,
meta : "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" , number : "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" , office : "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , presentation : "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" , style : "urn:oasis:names:tc:opendocument:xmlns:style:1.0" , svg : "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" , table : "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , text : "urn:oasis:names:tc:opendocument:xmlns:text:1.0" , xforms : "http://www.w3.org/2002/xforms" ,
xlink : "http://www.w3.org/1999/xlink" , xml : "http://www.w3.org/XML/1998/namespace" } , prefixMap : { } , configns : "urn:oasis:names:tc:opendocument:xmlns:config:1.0" , dbns : "urn:oasis:names:tc:opendocument:xmlns:database:1.0" , dcns : "http://purl.org/dc/elements/1.1/" , dr3dns : "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" , drawns : "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" , chartns : "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" , fons : "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" , formns : "urn:oasis:names:tc:opendocument:xmlns:form:1.0" ,
mathns : "http://www.w3.org/1998/Math/MathML" , metans : "urn:oasis:names:tc:opendocument:xmlns:meta:1.0" , numberns : "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" , officens : "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , presentationns : "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" , stylens : "urn:oasis:names:tc:opendocument:xmlns:style:1.0" , svgns : "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" , tablens : "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , textns : "urn:oasis:names:tc:opendocument:xmlns:text:1.0" ,
xformsns : "http://www.w3.org/2002/xforms" , xlinkns : "http://www.w3.org/1999/xlink" , xmlns : "http://www.w3.org/XML/1998/namespace" } ; ( function ( ) { var h = odf . Namespaces . namespaceMap , k = odf . Namespaces . prefixMap , c ; for ( c in h ) h . hasOwnProperty ( c ) && ( k [ h [ c ] ] = c ) } ) ( ) ; odf . Namespaces . forEachPrefix = function ( h ) { var k = odf . Namespaces . namespaceMap , c ; for ( c in k ) k . hasOwnProperty ( c ) && h ( c , k [ c ] ) } ;
odf . Namespaces . lookupNamespaceURI = function ( h ) { var k = null ; odf . Namespaces . namespaceMap . hasOwnProperty ( h ) && ( k = odf . Namespaces . namespaceMap [ h ] ) ; return k } ; odf . Namespaces . lookupPrefix = function ( h ) { var k = odf . Namespaces . prefixMap ; return k . hasOwnProperty ( h ) ? k [ h ] : null } ; odf . Namespaces . lookupNamespaceURI . lookupNamespaceURI = odf . Namespaces . lookupNamespaceURI ; ( function ( ) { odf . OdfSchemaImpl = function ( ) { var h = [ [ "config:config-item" , "uncategorized" ] , [ "form:item" , "object" ] , [ "form:option" , "uncategorized" ] , [ "math:math" , "field" ] , [ "meta:user-defined" , "uncategorized" ] , [ "number:currency-symbol" , "uncategorized" ] , [ "number:embedded-text" , "uncategorized" ] , [ "number:text" , "uncategorized" ] , [ "presentation:date-time-decl" , "uncategorized" ] , [ "presentation:footer-decl" , "uncategorized" ] , [ "presentation:header-decl" , "uncategorized" ] , [ "svg:desc" , "text" ] , [ "svg:title" , "text" ] , [ "table:desc" ,
"uncategorized" ] , [ "table:title" , "uncategorized" ] , [ "text:a" , "text" ] , [ "text:author-initials" , "field" ] , [ "text:author-name" , "field" ] , [ "text:bibliography-mark" , "field" ] , [ "text:bookmark-ref" , "field" ] , [ "text:chapter" , "field" ] , [ "text:character-count" , "field" ] , [ "text:conditional-text" , "field" ] , [ "text:creation-date" , "field" ] , [ "text:creation-time" , "field" ] , [ "text:creator" , "field" ] , [ "text:database-display" , "field" ] , [ "text:database-name" , "field" ] , [ "text:database-row-number" , "field" ] , [ "text:date" , "field" ] , [ "text:dde-connection" ,
"field" ] , [ "text:description" , "field" ] , [ "text:editing-cycles" , "field" ] , [ "text:editing-duration" , "field" ] , [ "text:execute-macro" , "uncategorized" ] , [ "text:expression" , "uncategorized" ] , [ "text:file-name" , "field" ] , [ "text:h" , "text" ] , [ "text:hidden-paragraph" , "text" ] , [ "text:hidden-text" , "text" ] , [ "text:image-count" , "field" ] , [ "text:index-entry-span" , "uncategorized" ] , [ "text:index-title-template" , "uncategorized" ] , [ "text:initial-creator" , "field" ] , [ "text:keywords" , "field" ] , [ "text:linenumbering-separator" , "style" ] ,
[ "text:measure" , "uncategorized" ] , [ "text:meta" , "uncategorized" ] , [ "text:meta-field" , "uncategorized" ] , [ "text:modification-date" , "field" ] , [ "text:modification-time" , "field" ] , [ "text:note-citation" , "field" ] , [ "text:note-continuation-notice-backward" , "style" ] , [ "text:note-continuation-notice-forward" , "style" ] , [ "text:note-ref" , "field" ] , [ "text:object-count" , "field" ] , [ "text:p" , "text" ] , [ "text:page-continuation" , "uncategorized" ] , [ "text:page-count" , "field" ] , [ "text:page-number" , "field" ] , [ "text:page-variable-get" ,
"field" ] , [ "text:page-variable-set" , "field" ] , [ "text:paragraph-count" , "field" ] , [ "text:placeholder" , "field" ] , [ "text:print-date" , "field" ] , [ "text:print-time" , "field" ] , [ "text:printed-by" , "field" ] , [ "text:reference-ref" , "field" ] , [ "text:ruby-base" , "text" ] , [ "text:ruby-text" , "text" ] , [ "text:script" , "text" ] , [ "text:sender-city" , "field" ] , [ "text:sender-company" , "field" ] , [ "text:sender-country" , "field" ] , [ "text:sender-email" , "field" ] , [ "text:sender-fax" , "field" ] , [ "text:sender-firstname" , "field" ] , [ "text:sender-initials" ,
"field" ] , [ "text:sender-lastname" , "field" ] , [ "text:sender-phone-private" , "field" ] , [ "text:sender-phone-work" , "field" ] , [ "text:sender-position" , "field" ] , [ "text:sender-postal-code" , "field" ] , [ "text:sender-state-or-province" , "field" ] , [ "text:sender-street" , "field" ] , [ "text:sender-title" , "field" ] , [ "text:sequence" , "uncategorized" ] , [ "text:sequence-ref" , "uncategorized" ] , [ "text:sheet-name" , "uncategorized" ] , [ "text:span" , "text" ] , [ "text:subject" , "field" ] , [ "text:table-count" , "field" ] , [ "text:table-formula" , "deprecated" ] ,
[ "text:template-name" , "uncategorized" ] , [ "text:text-input" , "field" ] , [ "text:time" , "field" ] , [ "text:title" , "field" ] , [ "text:user-defined" , "field" ] , [ "text:user-field-get" , "field" ] , [ "text:user-field-input" , "field" ] , [ "text:variable-get" , "field" ] , [ "text:variable-input" , "field" ] , [ "text:variable-set" , "field" ] , [ "text:word-count" , "field" ] , [ "xforms:model" , "uncategorized" ] ] , k = { } ; this . isTextContainer = function ( c , b ) { return "text" === k [ c + ":" + b ] } ; this . isField = function ( c , b ) { return "field" === k [ c + ":" + b ] } ; this . getFields = function ( ) { return h . filter ( function ( c ) { return "field" ===
c [ 1 ] } ) . map ( function ( c ) { return c [ 0 ] } ) } ; ( function ( ) { h . forEach ( function ( c ) { var b = c [ 1 ] , g = c [ 0 ] . split ( ":" ) ; c = g [ 0 ] ; var g = g [ 1 ] , h = odf . Namespaces . lookupNamespaceURI ( c ) ; h ? k [ h + ":" + g ] = b : runtime . log ( "DEBUG: OdfSchema - unknown prefix '" + c + "'" ) } ) } ) ( ) } ; odf . OdfSchema = new odf . OdfSchemaImpl } ) ( ) ; odf . OdfUtilsImpl = function ( ) { function h ( a ) { return "image" === ( a && a . localName ) && a . namespaceURI === I } function k ( a ) { return null !== a && a . nodeType === Node . ELEMENT _NODE && "frame" === a . localName && a . namespaceURI === I && "as-char" === a . getAttributeNS ( C , "anchor-type" ) } function c ( a ) { var d ; ( d = "annotation" === ( a && a . localName ) && a . namespaceURI === odf . Namespaces . officens ) || ( d = "div" === ( a && a . localName ) && "annotationWrapper" === a . className ) ; return d } function b ( a ) { return "a" === ( a && a . localName ) && a . namespaceURI === C } function g ( a ) { var d =
a && a . localName ; return ( "p" === d || "h" === d ) && a . namespaceURI === C } function n ( a , d ) { for ( a && void 0 !== d && ! g ( a ) && a . childNodes . item ( d ) && ( a = a . childNodes . item ( d ) ) ; a && ! g ( a ) ; ) a = a . parentNode ; return a } function p ( a , d ) { for ( ; a && a !== d ; ) { if ( a . namespaceURI === odf . Namespaces . officens && "annotation" === a . localName ) return a ; a = a . parentNode } return null } function m ( a ) { return /^[ \t\r\n]+$/ . test ( a ) } function q ( a ) { if ( null === a || a . nodeType !== Node . ELEMENT _NODE ) return ! 1 ; var d = a . localName ; return ca . isTextContainer ( a . namespaceURI , d ) || "span" ===
d && "webodf-annotationHighlight" === a . className } function f ( a ) { return null === a || a . nodeType !== Node . ELEMENT _NODE ? ! 1 : ca . isField ( a . namespaceURI , a . localName ) } function e ( a ) { var d = a && a . localName , b = ! 1 ; d && ( a = a . namespaceURI , a === C && ( b = "s" === d || "tab" === d || "line-break" === d ) ) ; return b } function a ( a ) { return e ( a ) || f ( a ) || k ( a ) || c ( a ) } function d ( a ) { var d = a && a . localName , b = ! 1 ; d && ( a = a . namespaceURI , a === C && ( b = "s" === d ) ) ; return b } function r ( a ) { return - 1 !== T . indexOf ( a . namespaceURI ) } function l ( a ) { if ( e ( a ) || f ( a ) ) return ! 1 ; if ( q ( a . parentNode ) &&
a . nodeType === Node . TEXT _NODE ) return 0 === a . textContent . length ; for ( a = a . firstChild ; a ; ) { if ( r ( a ) || ! l ( a ) ) return ! 1 ; a = a . nextSibling } return ! 0 } function B ( a ) { for ( ; null !== a . firstChild && q ( a ) ; ) a = a . firstChild ; return a } function y ( a ) { for ( ; null !== a . lastChild && q ( a ) ; ) a = a . lastChild ; return a } function D ( a ) { for ( ; ! g ( a ) && null === a . previousSibling ; ) a = a . parentNode ; return g ( a ) ? null : y ( a . previousSibling ) } function z ( a ) { for ( ; ! g ( a ) && null === a . nextSibling ; ) a = a . parentNode ; return g ( a ) ? null : B ( a . nextSibling ) } function t ( b ) { for ( var e = ! 1 ; b ; ) if ( b . nodeType ===
Node . TEXT _NODE ) if ( 0 === b . length ) b = D ( b ) ; else return ! m ( b . data . substr ( b . length - 1 , 1 ) ) ; else a ( b ) ? ( e = ! 1 === d ( b ) , b = null ) : b = D ( b ) ; return e } function x ( d ) { var b = ! 1 , e ; for ( d = d && B ( d ) ; d ; ) { e = d . nodeType === Node . TEXT _NODE ? d . length : 0 ; if ( 0 < e && ! m ( d . data ) ) { b = ! 0 ; break } if ( a ( d ) ) { b = ! 0 ; break } d = z ( d ) } return b } function w ( a , d ) { return m ( a . data . substr ( d ) ) ? ! x ( z ( a ) ) : ! 1 } function F ( d , b ) { var e = d . data , c ; if ( ! m ( e [ b ] ) || a ( d . parentNode ) ) return ! 1 ; 0 < b ? m ( e [ b - 1 ] ) || ( c = ! 0 ) : t ( D ( d ) ) && ( c = ! 0 ) ; return ! 0 === c ? w ( d , b ) ? ! 1 : ! 0 : ! 1 } function L ( a ) { return ( a = /(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px)|(%))/ . exec ( a ) ) ?
{ value : parseFloat ( a [ 1 ] ) , unit : a [ 3 ] } : null } function H ( a ) { return ( a = L ( a ) ) && ( 0 > a . value || "%" === a . unit ) ? null : a } function G ( a ) { return ( a = L ( a ) ) && "%" !== a . unit ? null : a } function A ( a ) { switch ( a . namespaceURI ) { case odf . Namespaces . drawns : case odf . Namespaces . svgns : case odf . Namespaces . dr3dns : return ! 1 ; case odf . Namespaces . textns : switch ( a . localName ) { case "note-body" : case "ruby-text" : return ! 1 } break ; case odf . Namespaces . officens : switch ( a . localName ) { case "annotation" : case "binary-data" : case "event-listeners" : return ! 1 } break ; default : switch ( a . localName ) { case "cursor" : case "editinfo" : return ! 1 } } return ! 0 }
function K ( a ) { return Boolean ( n ( a ) && ( ! m ( a . textContent ) || F ( a , 0 ) ) ) } function v ( a , d ) { for ( ; 0 < d . length && ! U . rangeContainsNode ( a , d [ 0 ] ) ; ) d . shift ( ) ; for ( ; 0 < d . length && ! U . rangeContainsNode ( a , d [ d . length - 1 ] ) ; ) d . pop ( ) } function u ( d , b , l ) { var g ; g = U . getNodesInRange ( d , function ( d ) { var b = NodeFilter . FILTER _REJECT ; if ( e ( d . parentNode ) || f ( d . parentNode ) || c ( d ) ) b = NodeFilter . FILTER _REJECT ; else if ( d . nodeType === Node . TEXT _NODE ) { if ( l || K ( d ) ) b = NodeFilter . FILTER _ACCEPT } else if ( a ( d ) ) b = NodeFilter . FILTER _ACCEPT ; else if ( A ( d ) || q ( d ) ) b = NodeFilter . FILTER _SKIP ;
return b } , NodeFilter . SHOW _ELEMENT | NodeFilter . SHOW _TEXT ) ; b || v ( d , g ) ; return g } function Q ( a , d , b ) { for ( ; a ; ) { if ( b ( a ) ) { d [ 0 ] !== a && d . unshift ( a ) ; break } if ( c ( a ) ) break ; a = a . parentNode } } function R ( a , d ) { var b = a ; if ( d < b . childNodes . length - 1 ) b = b . childNodes [ d + 1 ] ; else { for ( ; ! b . nextSibling ; ) b = b . parentNode ; b = b . nextSibling } for ( ; b . firstChild ; ) b = b . firstChild ; return b } var C = odf . Namespaces . textns , I = odf . Namespaces . drawns , P = odf . Namespaces . xlinkns , U = core . DomUtils , T = [ odf . Namespaces . dbns , odf . Namespaces . dcns , odf . Namespaces . dr3dns , odf . Namespaces . drawns ,
odf . Namespaces . chartns , odf . Namespaces . formns , odf . Namespaces . numberns , odf . Namespaces . officens , odf . Namespaces . presentationns , odf . Namespaces . stylens , odf . Namespaces . svgns , odf . Namespaces . tablens , odf . Namespaces . textns ] , ca = odf . OdfSchema ; this . isImage = h ; this . isCharacterFrame = k ; this . isInlineRoot = c ; this . isTextSpan = function ( a ) { return "span" === ( a && a . localName ) && a . namespaceURI === C } ; this . isHyperlink = b ; this . getHyperlinkTarget = function ( a ) { return a . getAttributeNS ( P , "href" ) || "" } ; this . isParagraph = g ; this . getParagraphElement =
n ; this . getParentAnnotation = p ; this . isWithinAnnotation = function ( a , d ) { return Boolean ( p ( a , d ) ) } ; this . getAnnotationCreator = function ( a ) { return a . getElementsByTagNameNS ( odf . Namespaces . dcns , "creator" ) [ 0 ] . textContent } ; this . isListItem = function ( a ) { return "list-item" === ( a && a . localName ) && a . namespaceURI === C } ; this . isLineBreak = function ( a ) { return "line-break" === ( a && a . localName ) && a . namespaceURI === C } ; this . isODFWhitespace = m ; this . isGroupingElement = q ; this . isFieldElement = f ; this . isCharacterElement = e ; this . isAnchoredAsCharacterElement =
a ; this . isSpaceElement = d ; this . isODFNode = r ; this . hasNoODFContent = l ; this . firstChild = B ; this . lastChild = y ; this . previousNode = D ; this . nextNode = z ; this . scanLeftForNonSpace = t ; this . lookLeftForCharacter = function ( d ) { var b , e = b = 0 ; d . nodeType === Node . TEXT _NODE && ( e = d . length ) ; 0 < e ? ( b = d . data , b = m ( b . substr ( e - 1 , 1 ) ) ? 1 === e ? t ( D ( d ) ) ? 2 : 0 : m ( b . substr ( e - 2 , 1 ) ) ? 0 : 2 : 1 ) : a ( d ) && ( b = 1 ) ; return b } ; this . lookRightForCharacter = function ( d ) { var b = ! 1 , e = 0 ; d && d . nodeType === Node . TEXT _NODE && ( e = d . length ) ; 0 < e ? b = ! m ( d . data . substr ( 0 , 1 ) ) : a ( d ) && ( b = ! 0 ) ; return b } ;
this . scanLeftForAnyCharacter = function ( d ) { var b = ! 1 , e ; for ( d = d && y ( d ) ; d ; ) { e = d . nodeType === Node . TEXT _NODE ? d . length : 0 ; if ( 0 < e && ! m ( d . data ) ) { b = ! 0 ; break } if ( a ( d ) ) { b = ! 0 ; break } d = D ( d ) } return b } ; this . scanRightForAnyCharacter = x ; this . isTrailingWhitespace = w ; this . isSignificantWhitespace = F ; this . isDowngradableSpaceElement = function ( a ) { return d ( a ) ? t ( D ( a ) ) && x ( z ( a ) ) : ! 1 } ; this . parseLength = L ; this . parseNonNegativeLength = H ; this . parseFoFontSize = function ( a ) { var d ; d = ( d = L ( a ) ) && ( 0 >= d . value || "%" === d . unit ) ? null : d ; return d || G ( a ) } ; this . parseFoLineHeight =
function ( a ) { return H ( a ) || G ( a ) } ; this . isTextContentContainingNode = A ; this . getTextNodes = function ( a , d ) { var b ; b = U . getNodesInRange ( a , function ( a ) { var d = NodeFilter . FILTER _REJECT ; a . nodeType === Node . TEXT _NODE ? K ( a ) && ( d = NodeFilter . FILTER _ACCEPT ) : A ( a ) && ( d = NodeFilter . FILTER _SKIP ) ; return d } , NodeFilter . SHOW _ELEMENT | NodeFilter . SHOW _TEXT ) ; d || v ( a , b ) ; return b } ; this . getTextElements = u ; this . getParagraphElements = function ( a ) { var d ; d = U . getNodesInRange ( a , function ( a ) { var d = NodeFilter . FILTER _REJECT ; if ( g ( a ) ) d = NodeFilter . FILTER _ACCEPT ;
else if ( A ( a ) || q ( a ) ) d = NodeFilter . FILTER _SKIP ; return d } , NodeFilter . SHOW _ELEMENT ) ; Q ( a . startContainer , d , g ) ; return d } ; this . getImageElements = function ( a ) { var d ; d = U . getNodesInRange ( a , function ( a ) { var d = NodeFilter . FILTER _SKIP ; h ( a ) && ( d = NodeFilter . FILTER _ACCEPT ) ; return d } , NodeFilter . SHOW _ELEMENT ) ; Q ( a . startContainer , d , h ) ; return d } ; this . getHyperlinkElements = function ( a ) { var d = [ ] , e = a . cloneRange ( ) ; a . collapsed && a . endContainer . nodeType === Node . ELEMENT _NODE && ( a = R ( a . endContainer , a . endOffset ) , a . nodeType === Node . TEXT _NODE &&
e . setEnd ( a , 1 ) ) ; u ( e , ! 0 , ! 1 ) . forEach ( function ( a ) { for ( a = a . parentNode ; ! g ( a ) ; ) { if ( b ( a ) && - 1 === d . indexOf ( a ) ) { d . push ( a ) ; break } a = a . parentNode } } ) ; e . detach ( ) ; return d } ; this . getNormalizedFontFamilyName = function ( a ) { /^(["'])(?:.|[\n\r])*?\1$/ . test ( a ) || ( a = a . replace ( /^[ \t\r\n\f]*((?:.|[\n\r])*?)[ \t\r\n\f]*$/ , "$1" ) , /[ \t\r\n\f]/ . test ( a ) && ( a = "'" + a . replace ( /[ \t\r\n\f]+/g , " " ) + "'" ) ) ; return a } } ; odf . OdfUtils = new odf . OdfUtilsImpl ; gui . OdfTextBodyNodeFilter = function ( ) { var h = odf . OdfUtils , k = Node . TEXT _NODE , c = NodeFilter . FILTER _REJECT , b = NodeFilter . FILTER _ACCEPT , g = odf . Namespaces . textns ; this . acceptNode = function ( n ) { if ( n . nodeType === k ) { if ( ! h . isGroupingElement ( n . parentNode ) ) return c } else if ( n . namespaceURI === g && "tracked-changes" === n . localName ) return c ; return b } } ; xmldom . LSSerializerFilter = function ( ) { } ; xmldom . LSSerializerFilter . prototype . acceptNode = function ( h ) { } ; odf . OdfNodeFilter = function ( ) { this . acceptNode = function ( h ) { return "http://www.w3.org/1999/xhtml" === h . namespaceURI ? NodeFilter . FILTER _SKIP : h . namespaceURI && h . namespaceURI . match ( /^urn:webodf:/ ) ? NodeFilter . FILTER _REJECT : NodeFilter . FILTER _ACCEPT } } ; xmldom . XPathIterator = function ( ) { } ; xmldom . XPathIterator . prototype . next = function ( ) { } ; xmldom . XPathIterator . prototype . reset = function ( ) { } ;
function createXPathSingleton ( ) { function h ( b , a , d ) { return - 1 !== b && ( b < a || - 1 === a ) && ( b < d || - 1 === d ) } function k ( b ) { for ( var a = [ ] , d = 0 , c = b . length , l ; d < c ; ) { var g = b , n = c , m = a , k = "" , p = [ ] , q = g . indexOf ( "[" , d ) , w = g . indexOf ( "/" , d ) , F = g . indexOf ( "=" , d ) ; h ( w , q , F ) ? ( k = g . substring ( d , w ) , d = w + 1 ) : h ( q , w , F ) ? ( k = g . substring ( d , q ) , d = f ( g , q , p ) ) : h ( F , w , q ) ? ( k = g . substring ( d , F ) , d = F ) : ( k = g . substring ( d , n ) , d = n ) ; m . push ( { location : k , predicates : p } ) ; if ( d < c && "=" === b [ d ] ) { l = b . substring ( d + 1 , c ) ; if ( 2 < l . length && ( "'" === l [ 0 ] || '"' === l [ 0 ] ) ) l = l . slice ( 1 , l . length - 1 ) ;
else try { l = parseInt ( l , 10 ) } catch ( L ) { } d = c } } return { steps : a , value : l } } function c ( ) { var b = null , a = ! 1 ; this . setNode = function ( a ) { b = a } ; this . reset = function ( ) { a = ! 1 } ; this . next = function ( ) { var d = a ? null : b ; a = ! 0 ; return d } } function b ( b , a , d ) { this . reset = function ( ) { b . reset ( ) } ; this . next = function ( ) { for ( var c = b . next ( ) ; c ; ) { c . nodeType === Node . ELEMENT _NODE && ( c = c . getAttributeNodeNS ( a , d ) ) ; if ( c ) break ; c = b . next ( ) } return c } } function g ( b , a ) { var d = b . next ( ) , c = null ; this . reset = function ( ) { b . reset ( ) ; d = b . next ( ) ; c = null } ; this . next = function ( ) { for ( ; d ; ) { if ( c ) if ( a &&
c . firstChild ) c = c . firstChild ; else { for ( ; ! c . nextSibling && c !== d ; ) c = c . parentNode ; c === d ? d = b . next ( ) : c = c . nextSibling } else { do ( c = d . firstChild ) || ( d = b . next ( ) ) ; while ( d && ! c ) } if ( c && c . nodeType === Node . ELEMENT _NODE ) return c } return null } } function n ( b , a ) { this . reset = function ( ) { b . reset ( ) } ; this . next = function ( ) { for ( var d = b . next ( ) ; d && ! a ( d ) ; ) d = b . next ( ) ; return d } } function p ( b , a , d ) { a = a . split ( ":" , 2 ) ; var c = d ( a [ 0 ] ) , l = a [ 1 ] ; return new n ( b , function ( a ) { return a . localName === l && a . namespaceURI === c } ) } function m ( b , a , d ) { var f = new c , l = q ( f ,
a , d ) , g = a . value ; return void 0 === g ? new n ( b , function ( a ) { f . setNode ( a ) ; l . reset ( ) ; return null !== l . next ( ) } ) : new n ( b , function ( a ) { f . setNode ( a ) ; l . reset ( ) ; return ( a = l . next ( ) ) ? a . nodeValue === g : ! 1 } ) } var q , f ; f = function ( b , a , d ) { for ( var c = a , l = b . length , f = 0 ; c < l ; ) "]" === b [ c ] ? ( -- f , 0 >= f && d . push ( k ( b . substring ( a , c ) ) ) ) : "[" === b [ c ] && ( 0 >= f && ( a = c + 1 ) , f += 1 ) , c += 1 ; return c } ; q = function ( e , a , d ) { var c , l , f , h ; for ( c = 0 ; c < a . steps . length ; c += 1 ) { f = a . steps [ c ] ; l = f . location ; if ( "" === l ) e = new g ( e , ! 1 ) ; else if ( "@" === l [ 0 ] ) { l = l . substr ( 1 ) . split ( ":" , 2 ) ; h =
d ( l [ 0 ] ) ; if ( ! h ) throw "No namespace associated with the prefix " + l [ 0 ] ; e = new b ( e , h , l [ 1 ] ) } else "." !== l && ( e = new g ( e , ! 1 ) , - 1 !== l . indexOf ( ":" ) && ( e = p ( e , l , d ) ) ) ; for ( l = 0 ; l < f . predicates . length ; l += 1 ) h = f . predicates [ l ] , e = m ( e , h , d ) } return e } ; return { getODFElementsWithXPath : function ( b , a , d ) { var f = b . ownerDocument , l = [ ] , g = null ; if ( f && "function" === typeof f . evaluate ) for ( d = f . evaluate ( a , b , d , XPathResult . UNORDERED _NODE _ITERATOR _TYPE , null ) , g = d . iterateNext ( ) ; null !== g ; ) g . nodeType === Node . ELEMENT _NODE && l . push ( g ) , g = d . iterateNext ( ) ; else { l =
new c ; l . setNode ( b ) ; b = k ( a ) ; l = q ( l , b , d ) ; b = [ ] ; for ( d = l . next ( ) ; d ; ) b . push ( d ) , d = l . next ( ) ; l = b } return l } } } xmldom . XPath = createXPathSingleton ( ) ; odf . StyleInfo = function ( ) { function h ( a , d ) { var b , e , c , l , f , g = 0 ; if ( b = H [ a . localName ] ) if ( c = b [ a . namespaceURI ] ) g = c . length ; for ( b = 0 ; b < g ; b += 1 ) e = c [ b ] , l = e . ns , f = e . localname , ( e = a . getAttributeNS ( l , f ) ) && a . setAttributeNS ( l , F [ l ] + f , d + e ) ; for ( c = a . firstElementChild ; c ; ) h ( c , d ) , c = c . nextElementSibling } function k ( a , d ) { var b , e , c , l , f , g = 0 ; if ( b = H [ a . localName ] ) if ( c = b [ a . namespaceURI ] ) g = c . length ; for ( b = 0 ; b < g ; b += 1 ) if ( e = c [ b ] , l = e . ns , f = e . localname , e = a . getAttributeNS ( l , f ) ) e = e . replace ( d , "" ) , a . setAttributeNS ( l , F [ l ] + f , e ) ; for ( c = a . firstElementChild ; c ; ) k ( c ,
d ) , c = c . nextElementSibling } function c ( a , d ) { var b , e , c , l , f , g = 0 ; if ( b = H [ a . localName ] ) if ( c = b [ a . namespaceURI ] ) g = c . length ; for ( b = 0 ; b < g ; b += 1 ) if ( l = c [ b ] , e = l . ns , f = l . localname , e = a . getAttributeNS ( e , f ) ) d = d || { } , l = l . keyname , d . hasOwnProperty ( l ) ? d [ l ] [ e ] = 1 : ( f = { } , f [ e ] = 1 , d [ l ] = f ) ; return d } function b ( a , d ) { var e , l ; c ( a , d ) ; for ( e = a . firstChild ; e ; ) e . nodeType === Node . ELEMENT _NODE && ( l = e , b ( l , d ) ) , e = e . nextSibling } function g ( a , d , b ) { this . key = a ; this . name = d ; this . family = b ; this . requires = { } } function n ( a , d , b ) { var e = a + '"' + d , c = b [ e ] ; c || ( c = b [ e ] =
new g ( e , a , d ) ) ; return c } function p ( a , d , b ) { var e , c , l , f , g , r = 0 ; e = a . getAttributeNS ( t , "name" ) ; f = a . getAttributeNS ( t , "family" ) ; e && f && ( d = n ( e , f , b ) ) ; if ( d ) { if ( e = H [ a . localName ] ) if ( l = e [ a . namespaceURI ] ) r = l . length ; for ( e = 0 ; e < r ; e += 1 ) if ( f = l [ e ] , c = f . ns , g = f . localname , c = a . getAttributeNS ( c , g ) ) f = f . keyname , f = n ( c , f , b ) , d . requires [ f . key ] = f } for ( a = a . firstElementChild ; a ; ) p ( a , d , b ) , a = a . nextElementSibling ; return b } function m ( a , d ) { var b = d [ a . family ] ; b || ( b = d [ a . family ] = { } ) ; b [ a . name ] = 1 ; Object . keys ( a . requires ) . forEach ( function ( b ) { m ( a . requires [ b ] ,
d ) } ) } function q ( a , d ) { var b = p ( a , null , { } ) ; Object . keys ( b ) . forEach ( function ( a ) { a = b [ a ] ; var e = d [ a . family ] ; e && e . hasOwnProperty ( a . name ) && m ( a , d ) } ) } function f ( a , d ) { function b ( d ) { ( d = l . getAttributeNS ( t , d ) ) && ( a [ d ] = ! 0 ) } var e = [ "font-name" , "font-name-asian" , "font-name-complex" ] , c , l ; for ( c = d && d . firstElementChild ; c ; ) l = c , e . forEach ( b ) , f ( a , l ) , c = c . nextElementSibling } function e ( a , d ) { function b ( a ) { var e = f . getAttributeNS ( t , a ) ; e && d . hasOwnProperty ( e ) && f . setAttributeNS ( t , "style:" + a , d [ e ] ) } var c = [ "font-name" , "font-name-asian" ,
"font-name-complex" ] , l , f ; for ( l = a && a . firstElementChild ; l ; ) f = l , c . forEach ( b ) , e ( f , d ) , l = l . nextElementSibling } var a = odf . Namespaces . chartns , d = odf . Namespaces . dbns , r = odf . Namespaces . dr3dns , l = odf . Namespaces . drawns , B = odf . Namespaces . formns , y = odf . Namespaces . numberns , D = odf . Namespaces . officens , z = odf . Namespaces . presentationns , t = odf . Namespaces . stylens , x = odf . Namespaces . tablens , w = odf . Namespaces . textns , F = { "urn:oasis:names:tc:opendocument:xmlns:chart:1.0" : "chart:" , "urn:oasis:names:tc:opendocument:xmlns:database:1.0" : "db:" ,
"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" : "dr3d:" , "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" : "draw:" , "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" : "fo:" , "urn:oasis:names:tc:opendocument:xmlns:form:1.0" : "form:" , "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" : "number:" , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" : "office:" , "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0" : "presentation:" , "urn:oasis:names:tc:opendocument:xmlns:style:1.0" : "style:" , "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" : "svg:" ,
"urn:oasis:names:tc:opendocument:xmlns:table:1.0" : "table:" , "urn:oasis:names:tc:opendocument:xmlns:text:1.0" : "chart:" , "http://www.w3.org/XML/1998/namespace" : "xml:" } , L = { text : [ { ens : t , en : "tab-stop" , ans : t , a : "leader-text-style" } , { ens : t , en : "drop-cap" , ans : t , a : "style-name" } , { ens : w , en : "notes-configuration" , ans : w , a : "citation-body-style-name" } , { ens : w , en : "notes-configuration" , ans : w , a : "citation-style-name" } , { ens : w , en : "a" , ans : w , a : "style-name" } , { ens : w , en : "alphabetical-index" , ans : w , a : "style-name" } , { ens : w , en : "linenumbering-configuration" ,
ans : w , a : "style-name" } , { ens : w , en : "list-level-style-number" , ans : w , a : "style-name" } , { ens : w , en : "ruby-text" , ans : w , a : "style-name" } , { ens : w , en : "span" , ans : w , a : "style-name" } , { ens : w , en : "a" , ans : w , a : "visited-style-name" } , { ens : t , en : "text-properties" , ans : t , a : "text-line-through-text-style" } , { ens : w , en : "alphabetical-index-source" , ans : w , a : "main-entry-style-name" } , { ens : w , en : "index-entry-bibliography" , ans : w , a : "style-name" } , { ens : w , en : "index-entry-chapter" , ans : w , a : "style-name" } , { ens : w , en : "index-entry-link-end" , ans : w , a : "style-name" } ,
{ ens : w , en : "index-entry-link-start" , ans : w , a : "style-name" } , { ens : w , en : "index-entry-page-number" , ans : w , a : "style-name" } , { ens : w , en : "index-entry-span" , ans : w , a : "style-name" } , { ens : w , en : "index-entry-tab-stop" , ans : w , a : "style-name" } , { ens : w , en : "index-entry-text" , ans : w , a : "style-name" } , { ens : w , en : "index-title-template" , ans : w , a : "style-name" } , { ens : w , en : "list-level-style-bullet" , ans : w , a : "style-name" } , { ens : w , en : "outline-level-style" , ans : w , a : "style-name" } ] , paragraph : [ { ens : l , en : "caption" , ans : l , a : "text-style-name" } , { ens : l ,
en : "circle" , ans : l , a : "text-style-name" } , { ens : l , en : "connector" , ans : l , a : "text-style-name" } , { ens : l , en : "control" , ans : l , a : "text-style-name" } , { ens : l , en : "custom-shape" , ans : l , a : "text-style-name" } , { ens : l , en : "ellipse" , ans : l , a : "text-style-name" } , { ens : l , en : "frame" , ans : l , a : "text-style-name" } , { ens : l , en : "line" , ans : l , a : "text-style-name" } , { ens : l , en : "measure" , ans : l , a : "text-style-name" } , { ens : l , en : "path" , ans : l , a : "text-style-name" } , { ens : l , en : "polygon" , ans : l , a : "text-style-name" } , { ens : l , en : "polyline" , ans : l , a : "text-style-name" } ,
{ ens : l , en : "rect" , ans : l , a : "text-style-name" } , { ens : l , en : "regular-polygon" , ans : l , a : "text-style-name" } , { ens : D , en : "annotation" , ans : l , a : "text-style-name" } , { ens : B , en : "column" , ans : B , a : "text-style-name" } , { ens : t , en : "style" , ans : t , a : "next-style-name" } , { ens : x , en : "body" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "even-columns" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "even-rows" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "first-column" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "first-row" , ans : x , a : "paragraph-style-name" } ,
{ ens : x , en : "last-column" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "last-row" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "odd-columns" , ans : x , a : "paragraph-style-name" } , { ens : x , en : "odd-rows" , ans : x , a : "paragraph-style-name" } , { ens : w , en : "notes-configuration" , ans : w , a : "default-style-name" } , { ens : w , en : "alphabetical-index-entry-template" , ans : w , a : "style-name" } , { ens : w , en : "bibliography-entry-template" , ans : w , a : "style-name" } , { ens : w , en : "h" , ans : w , a : "style-name" } , { ens : w , en : "illustration-index-entry-template" , ans : w , a : "style-name" } ,
{ ens : w , en : "index-source-style" , ans : w , a : "style-name" } , { ens : w , en : "object-index-entry-template" , ans : w , a : "style-name" } , { ens : w , en : "p" , ans : w , a : "style-name" } , { ens : w , en : "table-index-entry-template" , ans : w , a : "style-name" } , { ens : w , en : "table-of-content-entry-template" , ans : w , a : "style-name" } , { ens : w , en : "table-index-entry-template" , ans : w , a : "style-name" } , { ens : w , en : "user-index-entry-template" , ans : w , a : "style-name" } , { ens : t , en : "page-layout-properties" , ans : t , a : "register-truth-ref-style-name" } ] , chart : [ { ens : a , en : "axis" , ans : a ,
a : "style-name" } , { ens : a , en : "chart" , ans : a , a : "style-name" } , { ens : a , en : "data-label" , ans : a , a : "style-name" } , { ens : a , en : "data-point" , ans : a , a : "style-name" } , { ens : a , en : "equation" , ans : a , a : "style-name" } , { ens : a , en : "error-indicator" , ans : a , a : "style-name" } , { ens : a , en : "floor" , ans : a , a : "style-name" } , { ens : a , en : "footer" , ans : a , a : "style-name" } , { ens : a , en : "grid" , ans : a , a : "style-name" } , { ens : a , en : "legend" , ans : a , a : "style-name" } , { ens : a , en : "mean-value" , ans : a , a : "style-name" } , { ens : a , en : "plot-area" , ans : a , a : "style-name" } , { ens : a , en : "regression-curve" ,
ans : a , a : "style-name" } , { ens : a , en : "series" , ans : a , a : "style-name" } , { ens : a , en : "stock-gain-marker" , ans : a , a : "style-name" } , { ens : a , en : "stock-loss-marker" , ans : a , a : "style-name" } , { ens : a , en : "stock-range-line" , ans : a , a : "style-name" } , { ens : a , en : "subtitle" , ans : a , a : "style-name" } , { ens : a , en : "title" , ans : a , a : "style-name" } , { ens : a , en : "wall" , ans : a , a : "style-name" } ] , section : [ { ens : w , en : "alphabetical-index" , ans : w , a : "style-name" } , { ens : w , en : "bibliography" , ans : w , a : "style-name" } , { ens : w , en : "illustration-index" , ans : w , a : "style-name" } ,
{ ens : w , en : "index-title" , ans : w , a : "style-name" } , { ens : w , en : "object-index" , ans : w , a : "style-name" } , { ens : w , en : "section" , ans : w , a : "style-name" } , { ens : w , en : "table-of-content" , ans : w , a : "style-name" } , { ens : w , en : "table-index" , ans : w , a : "style-name" } , { ens : w , en : "user-index" , ans : w , a : "style-name" } ] , ruby : [ { ens : w , en : "ruby" , ans : w , a : "style-name" } ] , table : [ { ens : d , en : "query" , ans : d , a : "style-name" } , { ens : d , en : "table-representation" , ans : d , a : "style-name" } , { ens : x , en : "background" , ans : x , a : "style-name" } , { ens : x , en : "table" , ans : x , a : "style-name" } ] ,
"table-column" : [ { ens : d , en : "column" , ans : d , a : "style-name" } , { ens : x , en : "table-column" , ans : x , a : "style-name" } ] , "table-row" : [ { ens : d , en : "query" , ans : d , a : "default-row-style-name" } , { ens : d , en : "table-representation" , ans : d , a : "default-row-style-name" } , { ens : x , en : "table-row" , ans : x , a : "style-name" } ] , "table-cell" : [ { ens : d , en : "column" , ans : d , a : "default-cell-style-name" } , { ens : x , en : "table-column" , ans : x , a : "default-cell-style-name" } , { ens : x , en : "table-row" , ans : x , a : "default-cell-style-name" } , { ens : x , en : "body" , ans : x , a : "style-name" } ,
{ ens : x , en : "covered-table-cell" , ans : x , a : "style-name" } , { ens : x , en : "even-columns" , ans : x , a : "style-name" } , { ens : x , en : "covered-table-cell" , ans : x , a : "style-name" } , { ens : x , en : "even-columns" , ans : x , a : "style-name" } , { ens : x , en : "even-rows" , ans : x , a : "style-name" } , { ens : x , en : "first-column" , ans : x , a : "style-name" } , { ens : x , en : "first-row" , ans : x , a : "style-name" } , { ens : x , en : "last-column" , ans : x , a : "style-name" } , { ens : x , en : "last-row" , ans : x , a : "style-name" } , { ens : x , en : "odd-columns" , ans : x , a : "style-name" } , { ens : x , en : "odd-rows" , ans : x , a : "style-name" } ,
{ ens : x , en : "table-cell" , ans : x , a : "style-name" } ] , graphic : [ { ens : r , en : "cube" , ans : l , a : "style-name" } , { ens : r , en : "extrude" , ans : l , a : "style-name" } , { ens : r , en : "rotate" , ans : l , a : "style-name" } , { ens : r , en : "scene" , ans : l , a : "style-name" } , { ens : r , en : "sphere" , ans : l , a : "style-name" } , { ens : l , en : "caption" , ans : l , a : "style-name" } , { ens : l , en : "circle" , ans : l , a : "style-name" } , { ens : l , en : "connector" , ans : l , a : "style-name" } , { ens : l , en : "control" , ans : l , a : "style-name" } , { ens : l , en : "custom-shape" , ans : l , a : "style-name" } , { ens : l , en : "ellipse" , ans : l , a : "style-name" } ,
{ ens : l , en : "frame" , ans : l , a : "style-name" } , { ens : l , en : "g" , ans : l , a : "style-name" } , { ens : l , en : "line" , ans : l , a : "style-name" } , { ens : l , en : "measure" , ans : l , a : "style-name" } , { ens : l , en : "page-thumbnail" , ans : l , a : "style-name" } , { ens : l , en : "path" , ans : l , a : "style-name" } , { ens : l , en : "polygon" , ans : l , a : "style-name" } , { ens : l , en : "polyline" , ans : l , a : "style-name" } , { ens : l , en : "rect" , ans : l , a : "style-name" } , { ens : l , en : "regular-polygon" , ans : l , a : "style-name" } , { ens : D , en : "annotation" , ans : l , a : "style-name" } ] , presentation : [ { ens : r , en : "cube" , ans : z ,
a : "style-name" } , { ens : r , en : "extrude" , ans : z , a : "style-name" } , { ens : r , en : "rotate" , ans : z , a : "style-name" } , { ens : r , en : "scene" , ans : z , a : "style-name" } , { ens : r , en : "sphere" , ans : z , a : "style-name" } , { ens : l , en : "caption" , ans : z , a : "style-name" } , { ens : l , en : "circle" , ans : z , a : "style-name" } , { ens : l , en : "connector" , ans : z , a : "style-name" } , { ens : l , en : "control" , ans : z , a : "style-name" } , { ens : l , en : "custom-shape" , ans : z , a : "style-name" } , { ens : l , en : "ellipse" , ans : z , a : "style-name" } , { ens : l , en : "frame" , ans : z , a : "style-name" } , { ens : l , en : "g" , ans : z , a : "style-name" } ,
{ ens : l , en : "line" , ans : z , a : "style-name" } , { ens : l , en : "measure" , ans : z , a : "style-name" } , { ens : l , en : "page-thumbnail" , ans : z , a : "style-name" } , { ens : l , en : "path" , ans : z , a : "style-name" } , { ens : l , en : "polygon" , ans : z , a : "style-name" } , { ens : l , en : "polyline" , ans : z , a : "style-name" } , { ens : l , en : "rect" , ans : z , a : "style-name" } , { ens : l , en : "regular-polygon" , ans : z , a : "style-name" } , { ens : D , en : "annotation" , ans : z , a : "style-name" } ] , "drawing-page" : [ { ens : l , en : "page" , ans : l , a : "style-name" } , { ens : z , en : "notes" , ans : l , a : "style-name" } , { ens : t , en : "handout-master" ,
ans : l , a : "style-name" } , { ens : t , en : "master-page" , ans : l , a : "style-name" } ] , "list-style" : [ { ens : w , en : "list" , ans : w , a : "style-name" } , { ens : w , en : "numbered-paragraph" , ans : w , a : "style-name" } , { ens : w , en : "list-item" , ans : w , a : "style-override" } , { ens : t , en : "style" , ans : t , a : "list-style-name" } ] , data : [ { ens : t , en : "style" , ans : t , a : "data-style-name" } , { ens : t , en : "style" , ans : t , a : "percentage-data-style-name" } , { ens : z , en : "date-time-decl" , ans : t , a : "data-style-name" } , { ens : w , en : "creation-date" , ans : t , a : "data-style-name" } , { ens : w , en : "creation-time" ,
ans : t , a : "data-style-name" } , { ens : w , en : "database-display" , ans : t , a : "data-style-name" } , { ens : w , en : "date" , ans : t , a : "data-style-name" } , { ens : w , en : "editing-duration" , ans : t , a : "data-style-name" } , { ens : w , en : "expression" , ans : t , a : "data-style-name" } , { ens : w , en : "meta-field" , ans : t , a : "data-style-name" } , { ens : w , en : "modification-date" , ans : t , a : "data-style-name" } , { ens : w , en : "modification-time" , ans : t , a : "data-style-name" } , { ens : w , en : "print-date" , ans : t , a : "data-style-name" } , { ens : w , en : "print-time" , ans : t , a : "data-style-name" } , { ens : w ,
en : "table-formula" , ans : t , a : "data-style-name" } , { ens : w , en : "time" , ans : t , a : "data-style-name" } , { ens : w , en : "user-defined" , ans : t , a : "data-style-name" } , { ens : w , en : "user-field-get" , ans : t , a : "data-style-name" } , { ens : w , en : "user-field-input" , ans : t , a : "data-style-name" } , { ens : w , en : "variable-get" , ans : t , a : "data-style-name" } , { ens : w , en : "variable-input" , ans : t , a : "data-style-name" } , { ens : w , en : "variable-set" , ans : t , a : "data-style-name" } ] , "page-layout" : [ { ens : z , en : "notes" , ans : t , a : "page-layout-name" } , { ens : t , en : "handout-master" , ans : t ,
a : "page-layout-name" } , { ens : t , en : "master-page" , ans : t , a : "page-layout-name" } ] } , H , G = xmldom . XPath ; this . collectUsedFontFaces = f ; this . changeFontFaceNames = e ; this . UsedStyleList = function ( a , d ) { var e = { } ; this . uses = function ( a ) { var d = a . localName , b = a . getAttributeNS ( l , "name" ) || a . getAttributeNS ( t , "name" ) ; a = "style" === d ? a . getAttributeNS ( t , "family" ) : a . namespaceURI === y ? "data" : d ; return ( a = e [ a ] ) ? 0 < a [ b ] : ! 1 } ; b ( a , e ) ; d && q ( d , e ) } ; this . getStyleName = function ( a , d ) { var b , e , c = H [ d . localName ] ; if ( c && ( c = c [ d . namespaceURI ] ) ) for ( e = 0 ; e < c . length ; e +=
1 ) if ( c [ e ] . keyname === a && ( c = c [ e ] , d . hasAttributeNS ( c . ns , c . localname ) ) ) { b = d . getAttributeNS ( c . ns , c . localname ) ; break } return b } ; this . hasDerivedStyles = function ( a , d , b ) { var e = b . getAttributeNS ( t , "name" ) ; b = b . getAttributeNS ( t , "family" ) ; return G . getODFElementsWithXPath ( a , '//style:*[@style:parent-style-name="' + e + '"][@style:family="' + b + '"]' , d ) . length ? ! 0 : ! 1 } ; this . prefixStyleNames = function ( a , d , b ) { var e ; if ( a ) { for ( e = a . firstChild ; e ; ) { if ( e . nodeType === Node . ELEMENT _NODE ) { var c = e , f = d , g = c . getAttributeNS ( l , "name" ) , r = void 0 ;
g ? r = l : ( g = c . getAttributeNS ( t , "name" ) ) && ( r = t ) ; r && c . setAttributeNS ( r , F [ r ] + "name" , f + g ) } e = e . nextSibling } h ( a , d ) ; b && h ( b , d ) } } ; this . removePrefixFromStyleNames = function ( a , d , b ) { var e = new RegExp ( "^" + d ) ; if ( a ) { for ( d = a . firstChild ; d ; ) { if ( d . nodeType === Node . ELEMENT _NODE ) { var c = d , f = e , g = c . getAttributeNS ( l , "name" ) , r = void 0 ; g ? r = l : ( g = c . getAttributeNS ( t , "name" ) ) && ( r = t ) ; r && ( g = g . replace ( f , "" ) , c . setAttributeNS ( r , F [ r ] + "name" , g ) ) } d = d . nextSibling } k ( a , e ) ; b && k ( b , e ) } } ; this . determineStylesForNode = c ; H = function ( ) { var a , d , b , e , c , l = { } ,
f , g , r , h ; for ( b in L ) if ( L . hasOwnProperty ( b ) ) for ( e = L [ b ] , d = e . length , a = 0 ; a < d ; a += 1 ) c = e [ a ] , r = c . en , h = c . ens , l . hasOwnProperty ( r ) ? f = l [ r ] : l [ r ] = f = { } , f . hasOwnProperty ( h ) ? g = f [ h ] : f [ h ] = g = [ ] , g . push ( { ns : c . ans , localname : c . a , keyname : b } ) ; return l } ( ) } ; "function" !== typeof Object . create && ( Object . create = function ( h ) { var k = function ( ) { } ; k . prototype = h ; return new k } ) ;
xmldom . LSSerializer = function ( ) { function h ( b ) { var c = b || { } , h = function ( b ) { var a = { } , d ; for ( d in b ) b . hasOwnProperty ( d ) && ( a [ b [ d ] ] = d ) ; return a } ( b ) , m = [ c ] , k = [ h ] , f = 0 ; this . push = function ( ) { f += 1 ; c = m [ f ] = Object . create ( c ) ; h = k [ f ] = Object . create ( h ) } ; this . pop = function ( ) { m . pop ( ) ; k . pop ( ) ; -- f ; c = m [ f ] ; h = k [ f ] } ; this . getLocalNamespaceDefinitions = function ( ) { return h } ; this . getQName = function ( b ) { var a = b . namespaceURI , d = 0 , f ; if ( ! a ) return b . localName ; if ( f = h [ a ] ) return f + ":" + b . localName ; do { f || ! b . prefix ? ( f = "ns" + d , d += 1 ) : f = b . prefix ; if ( c [ f ] ===
a ) break ; if ( ! c [ f ] ) { c [ f ] = a ; h [ a ] = f ; break } f = null } while ( null === f ) ; return f + ":" + b . localName } } function k ( b ) { return b . replace ( /&/g , "&" ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) . replace ( /'/g , "'" ) . replace ( /"/g , """ ) } function c ( g , h ) { var p = "" , m = b . filter ? b . filter . acceptNode ( h ) : NodeFilter . FILTER _ACCEPT , q ; if ( m === NodeFilter . FILTER _ACCEPT && h . nodeType === Node . ELEMENT _NODE ) { g . push ( ) ; q = g . getQName ( h ) ; var f , e = h . attributes , a , d , r , l = "" , B ; f = "<" + q ; a = e . length ; for ( d = 0 ; d < a ; d += 1 ) r = e . item ( d ) , "http://www.w3.org/2000/xmlns/" !==
r . namespaceURI && ( B = b . filter ? b . filter . acceptNode ( r ) : NodeFilter . FILTER _ACCEPT , B === NodeFilter . FILTER _ACCEPT && ( B = g . getQName ( r ) , r = "string" === typeof r . value ? k ( r . value ) : r . value , l += " " + ( B + '="' + r + '"' ) ) ) ; a = g . getLocalNamespaceDefinitions ( ) ; for ( d in a ) a . hasOwnProperty ( d ) && ( ( e = a [ d ] ) ? "xmlns" !== e && ( f += " xmlns:" + a [ d ] + '="' + d + '"' ) : f += ' xmlns="' + d + '"' ) ; p += f + ( l + ">" ) } if ( m === NodeFilter . FILTER _ACCEPT || m === NodeFilter . FILTER _SKIP ) { for ( m = h . firstChild ; m ; ) p += c ( g , m ) , m = m . nextSibling ; h . nodeValue && ( p += k ( h . nodeValue ) ) } q && ( p += "</" +
q + ">" , g . pop ( ) ) ; return p } var b = this ; this . filter = null ; this . writeToString = function ( b , n ) { if ( ! b ) return "" ; var k = new h ( n ) ; return c ( k , b ) } } ; ( function ( ) { function h ( b ) { var a , d = m . length ; for ( a = 0 ; a < d ; a += 1 ) if ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === b . namespaceURI && b . localName === m [ a ] ) return a ; return - 1 } function k ( b , a ) { var d = new g . UsedStyleList ( b , a ) , c = new odf . OdfNodeFilter ; this . acceptNode = function ( b ) { var e = c . acceptNode ( b ) ; e === NodeFilter . FILTER _ACCEPT && b . parentNode === a && b . nodeType === Node . ELEMENT _NODE && ( e = d . uses ( b ) ? NodeFilter . FILTER _ACCEPT : NodeFilter . FILTER _REJECT ) ; return e } } function c ( b , a ) { var d = new k ( b , a ) ; this . acceptNode = function ( a ) { var b =
d . acceptNode ( a ) ; b !== NodeFilter . FILTER _ACCEPT || ! a . parentNode || a . parentNode . namespaceURI !== odf . Namespaces . textns || "s" !== a . parentNode . localName && "tab" !== a . parentNode . localName || ( b = NodeFilter . FILTER _REJECT ) ; return b } } function b ( b , a ) { if ( a ) { var d = h ( a ) , c , f = b . firstChild ; if ( - 1 !== d ) { for ( ; f ; ) { c = h ( f ) ; if ( - 1 !== c && c > d ) break ; f = f . nextSibling } b . insertBefore ( a , f ) } } } var g = new odf . StyleInfo , n = core . DomUtils , p = odf . Namespaces . stylens , m = "meta settings scripts font-face-decls styles automatic-styles master-styles body" . split ( " " ) ,
q = Date . now ( ) + "_webodf_" , f = new core . Base64 ; odf . ODFElement = function ( ) { } ; odf . ODFDocumentElement = function ( ) { } ; odf . ODFDocumentElement . prototype = new odf . ODFElement ; odf . ODFDocumentElement . prototype . constructor = odf . ODFDocumentElement ; odf . ODFDocumentElement . prototype . fontFaceDecls = null ; odf . ODFDocumentElement . prototype . manifest = null ; odf . ODFDocumentElement . prototype . settings = null ; odf . ODFDocumentElement . namespaceURI = "urn:oasis:names:tc:opendocument:xmlns:office:1.0" ; odf . ODFDocumentElement . localName = "document" ;
odf . AnnotationElement = function ( ) { } ; odf . OdfPart = function ( b , a , d , c ) { var f = this ; this . size = 0 ; this . type = null ; this . name = b ; this . container = d ; this . url = null ; this . mimetype = a ; this . onstatereadychange = this . document = null ; this . EMPTY = 0 ; this . LOADING = 1 ; this . DONE = 2 ; this . state = this . EMPTY ; this . data = "" ; this . load = function ( ) { null !== c && ( this . mimetype = a , c . loadAsDataURL ( b , a , function ( a , d ) { a && runtime . log ( a ) ; f . url = d ; if ( f . onchange ) f . onchange ( f ) ; if ( f . onstatereadychange ) f . onstatereadychange ( f ) } ) ) } } ; odf . OdfPart . prototype . load = function ( ) { } ;
odf . OdfPart . prototype . getUrl = function ( ) { return this . data ? "data:;base64," + f . toBase64 ( this . data ) : null } ; odf . OdfContainer = function a ( d , r ) { function l ( a ) { for ( var d = a . firstChild , b ; d ; ) b = d . nextSibling , d . nodeType === Node . ELEMENT _NODE ? l ( d ) : d . nodeType === Node . PROCESSING _INSTRUCTION _NODE && a . removeChild ( d ) , d = b } function h ( a ) { var d = { } , b , c , f = a . ownerDocument . createNodeIterator ( a , NodeFilter . SHOW _ELEMENT , null , ! 1 ) ; for ( a = f . nextNode ( ) ; a ; ) "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === a . namespaceURI && ( "annotation" ===
a . localName ? ( b = a . getAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "name" ) ) && ( d . hasOwnProperty ( b ) ? runtime . log ( "Warning: annotation name used more than once with <office:annotation/>: '" + b + "'" ) : d [ b ] = a ) : "annotation-end" === a . localName && ( ( b = a . getAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "name" ) ) ? d . hasOwnProperty ( b ) ? ( c = d [ b ] , c . annotationEndElement ? runtime . log ( "Warning: annotation name used more than once with <office:annotation-end/>: '" + b + "'" ) : c . annotationEndElement =
a ) : runtime . log ( "Warning: annotation end without an annotation start, name: '" + b + "'" ) : runtime . log ( "Warning: annotation end without a name found" ) ) ) , a = f . nextNode ( ) } function m ( a , d ) { for ( var b = a && a . firstChild ; b ; ) b . nodeType === Node . ELEMENT _NODE && b . setAttributeNS ( "urn:webodf:names:scope" , "scope" , d ) , b = b . nextSibling } function D ( a , d ) { for ( var b = J . rootElement . meta , b = b && b . firstChild ; b && ( b . namespaceURI !== a || b . localName !== d ) ; ) b = b . nextSibling ; for ( b = b && b . firstChild ; b && b . nodeType !== Node . TEXT _NODE ; ) b = b . nextSibling ; return b ?
b . data : null } function z ( a ) { var d = { } , b ; for ( a = a . firstChild ; a ; ) a . nodeType === Node . ELEMENT _NODE && a . namespaceURI === p && "font-face" === a . localName && ( b = a . getAttributeNS ( p , "name" ) , d [ b ] = a ) , a = a . nextSibling ; return d } function t ( a , d ) { var b = null , c , f , l ; if ( a ) for ( b = a . cloneNode ( ! 0 ) , c = b . firstElementChild ; c ; ) f = c . nextElementSibling , ( l = c . getAttributeNS ( "urn:webodf:names:scope" , "scope" ) ) && l !== d && b . removeChild ( c ) , c = f ; return b } function x ( a , d ) { var b , c , f , l = null , r = { } ; if ( a ) for ( d . forEach ( function ( a ) { g . collectUsedFontFaces ( r , a ) } ) ,
l = a . cloneNode ( ! 0 ) , b = l . firstElementChild ; b ; ) c = b . nextElementSibling , f = b . getAttributeNS ( p , "name" ) , r [ f ] || l . removeChild ( b ) , b = c ; return l } function w ( a ) { var d = J . rootElement . ownerDocument , b ; if ( a ) { l ( a . documentElement ) ; try { b = d . importNode ( a . documentElement , ! 0 ) } catch ( c ) { } } return b } function F ( a ) { J . state = a ; if ( J . onchange ) J . onchange ( J ) ; if ( J . onstatereadychange ) J . onstatereadychange ( J ) } function L ( a ) { V = null ; J . rootElement = a ; a . fontFaceDecls = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "font-face-decls" ) ;
a . styles = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "styles" ) ; a . automaticStyles = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "automatic-styles" ) ; a . masterStyles = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "master-styles" ) ; a . body = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "body" ) ; a . meta = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "meta" ) ; a . settings = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" ,
"settings" ) ; a . scripts = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "scripts" ) ; h ( a ) } function H ( d ) { var c = w ( d ) , f = J . rootElement , l ; c && "document-styles" === c . localName && "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === c . namespaceURI ? ( f . fontFaceDecls = n . getDirectChild ( c , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "font-face-decls" ) , b ( f , f . fontFaceDecls ) , l = n . getDirectChild ( c , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "styles" ) , f . styles = l || d . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" ,
"styles" ) , b ( f , f . styles ) , l = n . getDirectChild ( c , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "automatic-styles" ) , f . automaticStyles = l || d . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "automatic-styles" ) , m ( f . automaticStyles , "document-styles" ) , b ( f , f . automaticStyles ) , c = n . getDirectChild ( c , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "master-styles" ) , f . masterStyles = c || d . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "master-styles" ) , b ( f , f . masterStyles ) ,
g . prefixStyleNames ( f . automaticStyles , q , f . masterStyles ) ) : F ( a . INVALID ) } function G ( d ) { d = w ( d ) ; var c , f , l , r ; if ( d && "document-content" === d . localName && "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === d . namespaceURI ) { c = J . rootElement ; l = n . getDirectChild ( d , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "font-face-decls" ) ; if ( c . fontFaceDecls && l ) { r = c . fontFaceDecls ; var h , v , u , k , q = { } ; f = z ( r ) ; k = z ( l ) ; for ( l = l . firstElementChild ; l ; ) { h = l . nextElementSibling ; if ( l . namespaceURI === p && "font-face" === l . localName ) if ( v = l . getAttributeNS ( p ,
"name" ) , f . hasOwnProperty ( v ) ) { if ( ! l . isEqualNode ( f [ v ] ) ) { u = v ; for ( var A = f , B = k , C = 0 , R = void 0 , R = u = u . replace ( /\d+$/ , "" ) ; A . hasOwnProperty ( R ) || B . hasOwnProperty ( R ) ; ) C += 1 , R = u + C ; u = R ; l . setAttributeNS ( p , "style:name" , u ) ; r . appendChild ( l ) ; f [ u ] = l ; delete k [ v ] ; q [ v ] = u } } else r . appendChild ( l ) , f [ v ] = l , delete k [ v ] ; l = h } r = q } else l && ( c . fontFaceDecls = l , b ( c , l ) ) ; f = n . getDirectChild ( d , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "automatic-styles" ) ; m ( f , "document-content" ) ; r && g . changeFontFaceNames ( f , r ) ; if ( c . automaticStyles && f ) for ( r =
f . firstChild ; r ; ) c . automaticStyles . appendChild ( r ) , r = f . firstChild ; else f && ( c . automaticStyles = f , b ( c , f ) ) ; d = n . getDirectChild ( d , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "body" ) ; if ( null === d ) throw "<office:body/> tag is mising." ; c . body = d ; b ( c , c . body ) } else F ( a . INVALID ) } function A ( a ) { a = w ( a ) ; var d ; a && "document-meta" === a . localName && "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === a . namespaceURI && ( d = J . rootElement , d . meta = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "meta" ) ,
b ( d , d . meta ) ) } function K ( a ) { a = w ( a ) ; var d ; a && "document-settings" === a . localName && "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === a . namespaceURI && ( d = J . rootElement , d . settings = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "settings" ) , b ( d , d . settings ) ) } function v ( a ) { a = w ( a ) ; var d ; if ( a && "manifest" === a . localName && "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" === a . namespaceURI ) for ( d = J . rootElement , d . manifest = a , a = d . manifest . firstElementChild ; a ; ) "file-entry" === a . localName && "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" ===
a . namespaceURI && ( S [ a . getAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" , "full-path" ) ] = a . getAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" , "media-type" ) ) , a = a . nextElementSibling } function u ( a , d , b ) { a = n . getElementsByTagName ( a , d ) ; var c ; for ( c = 0 ; c < a . length ; c += 1 ) d = a [ c ] , b . hasOwnProperty ( d . namespaceURI ) || d . parentNode . removeChild ( d ) } function Q ( a ) { u ( a , "script" , { "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" : ! 0 , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" : ! 0 , "urn:oasis:names:tc:opendocument:xmlns:table:1.0" : ! 0 ,
"urn:oasis:names:tc:opendocument:xmlns:text:1.0" : ! 0 , "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" : ! 0 } ) ; u ( a , "style" , { "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" : ! 0 , "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" : ! 0 , "urn:oasis:names:tc:opendocument:xmlns:style:1.0" : ! 0 } ) } function R ( a ) { var d = a . firstElementChild , b = [ ] , c , f , l , g = a . attributes , r = g . length ; for ( c = 0 ; c < r ; c += 1 ) l = g . item ( c ) , f = l . localName . substr ( 0 , 2 ) . toLowerCase ( ) , null === l . namespaceURI && "on" === f && b . push ( l ) ; r = b . length ; for ( c =
0 ; c < r ; c += 1 ) a . removeAttributeNode ( b [ c ] ) ; for ( ; d ; ) R ( d ) , d = d . nextElementSibling } function C ( d ) { var b = d . shift ( ) ; b ? ba . loadAsDOM ( b . path , function ( c , f ) { f && ( Q ( f ) , R ( f . documentElement ) ) ; b . handler ( f ) ; J . state === a . INVALID ? c ? runtime . log ( "ERROR: Unable to load " + b . path + " - " + c ) : runtime . log ( "ERROR: Unable to load " + b . path ) : ( c && runtime . log ( "DEBUG: Unable to load " + b . path + " - " + c ) , C ( d ) ) } ) : ( h ( J . rootElement ) , F ( a . DONE ) ) } function I ( a ) { var d = "" ; odf . Namespaces . forEachPrefix ( function ( a , b ) { d += " xmlns:" + a + '="' + b + '"' } ) ; return '<?xml version="1.0" encoding="UTF-8"?><office:' +
a + " " + d + ' office:version="1.2">' } function P ( ) { var a = new xmldom . LSSerializer , d = I ( "document-meta" ) ; a . filter = new odf . OdfNodeFilter ; d += a . writeToString ( J . rootElement . meta , odf . Namespaces . namespaceMap ) ; return d + "</office:document-meta>" } function U ( a , d ) { var b = document . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" , "manifest:file-entry" ) ; b . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" , "manifest:full-path" , a ) ; b . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" ,
"manifest:media-type" , d ) ; return b } function T ( ) { var a = runtime . parseXML ( '<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0" manifest:version="1.2"></manifest:manifest>' ) , d = a . documentElement , b = new xmldom . LSSerializer , c ; for ( c in S ) S . hasOwnProperty ( c ) && d . appendChild ( U ( c , S [ c ] ) ) ; b . filter = new odf . OdfNodeFilter ; return '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n' + b . writeToString ( a , odf . Namespaces . namespaceMap ) } function ca ( ) { var a , d , b , c = odf . Namespaces . namespaceMap ,
f = new xmldom . LSSerializer , l = I ( "document-styles" ) ; d = t ( J . rootElement . automaticStyles , "document-styles" ) ; b = J . rootElement . masterStyles . cloneNode ( ! 0 ) ; a = x ( J . rootElement . fontFaceDecls , [ b , J . rootElement . styles , d ] ) ; g . removePrefixFromStyleNames ( d , q , b ) ; f . filter = new k ( b , d ) ; l += f . writeToString ( a , c ) ; l += f . writeToString ( J . rootElement . styles , c ) ; l += f . writeToString ( d , c ) ; l += f . writeToString ( b , c ) ; return l + "</office:document-styles>" } function Y ( ) { var a , d , b = odf . Namespaces . namespaceMap , f = new xmldom . LSSerializer , l = I ( "document-content" ) ;
d = t ( J . rootElement . automaticStyles , "document-content" ) ; a = x ( J . rootElement . fontFaceDecls , [ d ] ) ; f . filter = new c ( J . rootElement . body , d ) ; l += f . writeToString ( a , b ) ; l += f . writeToString ( d , b ) ; l += f . writeToString ( J . rootElement . body , b ) ; return l + "</office:document-content>" } function E ( d , b ) { runtime . loadXML ( d , function ( d , c ) { if ( d ) b ( d ) ; else if ( c ) { Q ( c ) ; R ( c . documentElement ) ; var f = w ( c ) ; f && "document" === f . localName && "urn:oasis:names:tc:opendocument:xmlns:office:1.0" === f . namespaceURI ? ( L ( f ) , F ( a . DONE ) ) : F ( a . INVALID ) } else b ( "No DOM was loaded." ) } ) }
function Z ( a , d ) { var c ; c = J . rootElement ; var f = c . meta ; f || ( c . meta = f = document . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "meta" ) , b ( c , f ) ) ; c = f ; a && n . mapKeyValObjOntoNode ( c , a , odf . Namespaces . lookupNamespaceURI ) ; d && n . removeKeyElementsFromNode ( c , d , odf . Namespaces . lookupNamespaceURI ) } function da ( d , b ) { function c ( a , d ) { var b ; d || ( d = a ) ; b = document . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , d ) ; r [ a ] = b ; r . appendChild ( b ) } var f = new core . Zip ( "" , null ) , l = "application/vnd.oasis.opendocument." +
d + ( ! 0 === b ? "-template" : "" ) , g = runtime . byteArrayFromString ( l , "utf8" ) , r = J . rootElement , h = document . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , d ) ; f . save ( "mimetype" , g , ! 1 , new Date ) ; c ( "meta" ) ; c ( "settings" ) ; c ( "scripts" ) ; c ( "fontFaceDecls" , "font-face-decls" ) ; c ( "styles" ) ; c ( "automaticStyles" , "automatic-styles" ) ; c ( "masterStyles" , "master-styles" ) ; c ( "body" ) ; r . body . appendChild ( h ) ; S [ "/" ] = l ; S [ "settings.xml" ] = "text/xml" ; S [ "meta.xml" ] = "text/xml" ; S [ "styles.xml" ] = "text/xml" ; S [ "content.xml" ] = "text/xml" ;
F ( a . DONE ) ; return f } function X ( ) { var a , d = new Date , b = "" ; J . rootElement . settings && J . rootElement . settings . firstElementChild && ( a = new xmldom . LSSerializer , b = I ( "document-settings" ) , a . filter = new odf . OdfNodeFilter , b += a . writeToString ( J . rootElement . settings , odf . Namespaces . namespaceMap ) , b += "</office:document-settings>" ) ; ( a = b ) ? ( a = runtime . byteArrayFromString ( a , "utf8" ) , ba . save ( "settings.xml" , a , ! 0 , d ) ) : ba . remove ( "settings.xml" ) ; b = runtime . getWindow ( ) ; a = "WebODF/" + webodf . Version ; b && ( a = a + " " + b . navigator . userAgent ) ; Z ( { "meta:generator" : a } ,
null ) ; a = runtime . byteArrayFromString ( P ( ) , "utf8" ) ; ba . save ( "meta.xml" , a , ! 0 , d ) ; a = runtime . byteArrayFromString ( ca ( ) , "utf8" ) ; ba . save ( "styles.xml" , a , ! 0 , d ) ; a = runtime . byteArrayFromString ( Y ( ) , "utf8" ) ; ba . save ( "content.xml" , a , ! 0 , d ) ; a = runtime . byteArrayFromString ( T ( ) , "utf8" ) ; ba . save ( "META-INF/manifest.xml" , a , ! 0 , d ) } function ha ( a , d ) { X ( ) ; ba . writeAs ( a , function ( a ) { d ( a ) } ) } var J = this , ba , S = { } , V , M = "" ; this . onstatereadychange = r ; this . state = this . onchange = null ; this . getMetadata = D ; this . setRootElement = L ; this . getContentElement = function ( ) { var a ;
V || ( a = J . rootElement . body , V = n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "text" ) || n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "presentation" ) || n . getDirectChild ( a , "urn:oasis:names:tc:opendocument:xmlns:office:1.0" , "spreadsheet" ) ) ; if ( ! V ) throw "Could not find content element in <office:body/>." ; return V } ; this . getDocumentType = function ( ) { var a = J . getContentElement ( ) ; return a && a . localName } ; this . isTemplate = function ( ) { return "-template" === S [ "/" ] . substr ( - 9 ) } ;
this . setIsTemplate = function ( a ) { var d = S [ "/" ] , b = "-template" === d . substr ( - 9 ) ; a !== b && ( d = a ? d + "-template" : d . substr ( 0 , d . length - 9 ) , S [ "/" ] = d , a = runtime . byteArrayFromString ( d , "utf8" ) , ba . save ( "mimetype" , a , ! 1 , new Date ) ) } ; this . getPart = function ( a ) { return new odf . OdfPart ( a , S [ a ] , J , ba ) } ; this . getPartData = function ( a , d ) { ba . load ( a , d ) } ; this . setMetadata = Z ; this . incrementEditingCycles = function ( ) { var a = D ( odf . Namespaces . metans , "editing-cycles" ) , a = a ? parseInt ( a , 10 ) : 0 ; isNaN ( a ) && ( a = 0 ) ; Z ( { "meta:editing-cycles" : a + 1 } , null ) ; return a +
1 } ; this . createByteArray = function ( a , d ) { X ( ) ; ba . createByteArray ( a , d ) } ; this . saveAs = ha ; this . save = function ( a ) { ha ( M , a ) } ; this . getUrl = function ( ) { return M } ; this . setBlob = function ( a , d , b ) { b = f . convertBase64ToByteArray ( b ) ; ba . save ( a , b , ! 1 , new Date ) ; S . hasOwnProperty ( a ) && runtime . log ( a + " has been overwritten." ) ; S [ a ] = d } ; this . removeBlob = function ( a ) { var d = ba . remove ( a ) ; runtime . assert ( d , "file is not found: " + a ) ; delete S [ a ] } ; this . state = a . LOADING ; this . rootElement = function ( a ) { var d = document . createElementNS ( a . namespaceURI , a . localName ) ,
b ; a = new a . Type ; for ( b in a ) a . hasOwnProperty ( b ) && ( d [ b ] = a [ b ] ) ; return d } ( { Type : odf . ODFDocumentElement , namespaceURI : odf . ODFDocumentElement . namespaceURI , localName : odf . ODFDocumentElement . localName } ) ; d === odf . OdfContainer . DocumentType . TEXT ? ba = da ( "text" ) : d === odf . OdfContainer . DocumentType . TEXT _TEMPLATE ? ba = da ( "text" , ! 0 ) : d === odf . OdfContainer . DocumentType . PRESENTATION ? ba = da ( "presentation" ) : d === odf . OdfContainer . DocumentType . PRESENTATION _TEMPLATE ? ba = da ( "presentation" , ! 0 ) : d === odf . OdfContainer . DocumentType . SPREADSHEET ?
ba = da ( "spreadsheet" ) : d === odf . OdfContainer . DocumentType . SPREADSHEET _TEMPLATE ? ba = da ( "spreadsheet" , ! 0 ) : ( M = d , ba = new core . Zip ( M , function ( d , b ) { ba = b ; d ? E ( M , function ( b ) { d && ( ba . error = d + "\n" + b , F ( a . INVALID ) ) } ) : C ( [ { path : "styles.xml" , handler : H } , { path : "content.xml" , handler : G } , { path : "meta.xml" , handler : A } , { path : "settings.xml" , handler : K } , { path : "META-INF/manifest.xml" , handler : v } ] ) } ) ) } ; odf . OdfContainer . EMPTY = 0 ; odf . OdfContainer . LOADING = 1 ; odf . OdfContainer . DONE = 2 ; odf . OdfContainer . INVALID = 3 ; odf . OdfContainer . SAVING = 4 ; odf . OdfContainer . MODIFIED =
5 ; odf . OdfContainer . getContainer = function ( a ) { return new odf . OdfContainer ( a , null ) } } ) ( ) ; odf . OdfContainer . DocumentType = { TEXT : 1 , TEXT _TEMPLATE : 2 , PRESENTATION : 3 , PRESENTATION _TEMPLATE : 4 , SPREADSHEET : 5 , SPREADSHEET _TEMPLATE : 6 } ; gui . AnnotatableCanvas = function ( ) { } ; gui . AnnotatableCanvas . prototype . refreshSize = function ( ) { } ; gui . AnnotatableCanvas . prototype . getZoomLevel = function ( ) { } ; gui . AnnotatableCanvas . prototype . getSizer = function ( ) { } ;
gui . AnnotationViewManager = function ( h , k , c , b ) { function g ( d ) { var b = d . annotationEndElement , c = e . createRange ( ) , f = d . getAttributeNS ( odf . Namespaces . officens , "name" ) ; b && ( c . setStart ( d , d . childNodes . length ) , c . setEnd ( b , 0 ) , d = a . getTextNodes ( c , ! 1 ) , d . forEach ( function ( a ) { var d ; a : { for ( d = a . parentNode ; d . namespaceURI !== odf . Namespaces . officens || "body" !== d . localName ; ) { if ( "http://www.w3.org/1999/xhtml" === d . namespaceURI && "webodf-annotationHighlight" === d . className && d . getAttribute ( "annotation" ) === f ) { d = ! 0 ; break a } d = d . parentNode } d =
! 1 } d || ( d = e . createElement ( "span" ) , d . className = "webodf-annotationHighlight" , d . setAttribute ( "annotation" , f ) , a . parentNode . replaceChild ( d , a ) , d . appendChild ( a ) ) } ) ) ; c . detach ( ) } function n ( a ) { var b = h . getSizer ( ) ; a ? ( c . style . display = "inline-block" , b . style . paddingRight = d . getComputedStyle ( c ) . width ) : ( c . style . display = "none" , b . style . paddingRight = 0 ) ; h . refreshSize ( ) } function p ( ) { f . sort ( function ( a , d ) { return 0 !== ( a . compareDocumentPosition ( d ) & Node . DOCUMENT _POSITION _FOLLOWING ) ? - 1 : 1 } ) } function m ( ) { var a ; for ( a = 0 ; a < f . length ; a +=
1 ) { var d = f [ a ] , b = d . parentNode , e = b . nextElementSibling , g = e . nextElementSibling , m = b . parentNode , n = 0 , n = f [ f . indexOf ( d ) - 1 ] , k = void 0 , d = h . getZoomLevel ( ) ; b . style . left = ( c . getBoundingClientRect ( ) . left - m . getBoundingClientRect ( ) . left ) / d + "px" ; b . style . width = c . getBoundingClientRect ( ) . width / d + "px" ; e . style . width = parseFloat ( b . style . left ) - 30 + "px" ; n ? ( k = n . parentNode . getBoundingClientRect ( ) , 20 >= ( m . getBoundingClientRect ( ) . top - k . bottom ) / d ? b . style . top = Math . abs ( m . getBoundingClientRect ( ) . top - k . bottom ) / d + 20 + "px" : b . style . top = "0px" ) :
b . style . top = "0px" ; g . style . left = e . getBoundingClientRect ( ) . width / d + "px" ; var e = g . style , m = g . getBoundingClientRect ( ) . left / d , n = g . getBoundingClientRect ( ) . top / d , k = b . getBoundingClientRect ( ) . left / d , p = b . getBoundingClientRect ( ) . top / d , q = 0 , L = 0 , q = k - m , q = q * q , L = p - n , L = L * L , m = Math . sqrt ( q + L ) ; e . width = m + "px" ; n = Math . asin ( ( b . getBoundingClientRect ( ) . top - g . getBoundingClientRect ( ) . top ) / ( d * parseFloat ( g . style . width ) ) ) ; g . style . transform = "rotate(" + n + "rad)" ; g . style . MozTransform = "rotate(" + n + "rad)" ; g . style . WebkitTransform = "rotate(" +
n + "rad)" ; g . style . msTransform = "rotate(" + n + "rad)" } } function q ( a ) { var d = f . indexOf ( a ) , b = a . parentNode . parentNode ; "div" === b . localName && ( b . parentNode . insertBefore ( a , b ) , b . parentNode . removeChild ( b ) ) ; a = a . getAttributeNS ( odf . Namespaces . officens , "name" ) ; a = e . querySelectorAll ( 'span.webodf-annotationHighlight[annotation="' + a + '"]' ) ; for ( var c , b = 0 ; b < a . length ; b += 1 ) { for ( c = a . item ( b ) ; c . firstChild ; ) c . parentNode . insertBefore ( c . firstChild , c ) ; c . parentNode . removeChild ( c ) } - 1 !== d && f . splice ( d , 1 ) ; 0 === f . length && n ( ! 1 ) } var f = [ ] , e =
k . ownerDocument , a = odf . OdfUtils , d = runtime . getWindow ( ) ; runtime . assert ( Boolean ( d ) , "Expected to be run in an environment which has a global window, like a browser." ) ; this . rerenderAnnotations = m ; this . rehighlightAnnotations = function ( ) { f . forEach ( function ( a ) { g ( a ) } ) } ; this . getMinimumHeightForAnnotationPane = function ( ) { return "none" !== c . style . display && 0 < f . length ? ( f [ f . length - 1 ] . parentNode . getBoundingClientRect ( ) . bottom - c . getBoundingClientRect ( ) . top ) / h . getZoomLevel ( ) + "px" : null } ; this . addAnnotations = function ( d ) { 0 !==
d . length && ( n ( ! 0 ) , d . forEach ( function ( d ) { f . push ( d ) ; var c = e . createElement ( "div" ) , r = e . createElement ( "div" ) , h = e . createElement ( "div" ) , m = e . createElement ( "div" ) , n ; c . className = "annotationWrapper" ; c . setAttribute ( "creator" , a . getAnnotationCreator ( d ) ) ; d . parentNode . insertBefore ( c , d ) ; r . className = "annotationNote" ; r . appendChild ( d ) ; b && ( n = e . createElement ( "div" ) , n . className = "annotationRemoveButton" , r . appendChild ( n ) ) ; h . className = "annotationConnector horizontal" ; m . className = "annotationConnector angular" ; c . appendChild ( r ) ;
c . appendChild ( h ) ; c . appendChild ( m ) ; d . annotationEndElement && g ( d ) } ) , p ( ) , m ( ) ) } ; this . forgetAnnotation = q ; this . forgetAnnotations = function ( ) { for ( ; f . length ; ) q ( f [ 0 ] ) } } ; gui . Viewport = function ( ) { } ; gui . Viewport . prototype . scrollIntoView = function ( h , k ) { } ; gui . SingleScrollViewport = function ( h ) { this . scrollIntoView = function ( k , c ) { var b , g , n , p ; p = h . offsetHeight - h . clientHeight ; n = h . offsetWidth - h . clientWidth ; var m = h . getBoundingClientRect ( ) ; if ( k && m ) { b = m . left + 5 ; g = m . top + 5 ; n = m . right - ( n + 5 ) ; p = m . bottom - ( p + 5 ) ; if ( c || k . top < g ) h . scrollTop -= g - k . top ; else if ( k . top > p || k . bottom > p ) h . scrollTop = k . bottom - k . top <= p - g ? h . scrollTop + ( k . bottom - p ) : h . scrollTop + ( k . top - g ) ; k . left < b ? h . scrollLeft -= b - k . left : k . right > n && ( h . scrollLeft = k . right - k . left <= n - b ? h . scrollLeft + ( k . right - n ) : h . scrollLeft - ( b - k . left ) ) } } } ; ( function ( ) { function h ( c , n , k , m , q ) { var f , e = 0 , a ; for ( a in c ) if ( c . hasOwnProperty ( a ) ) { if ( e === k ) { f = a ; break } e += 1 } f ? n . getPartData ( c [ f ] . href , function ( a , e ) { if ( a ) runtime . log ( a ) ; else if ( e ) { var l = "@font-face { font-family: " + ( c [ f ] . family || f ) + "; src: url(data:application/x-font-ttf;charset=binary;base64," + b . convertUTF8ArrayToBase64 ( e ) + ') format("truetype"); }' ; try { m . insertRule ( l , m . cssRules . length ) } catch ( B ) { runtime . log ( "Problem inserting rule in CSS: " + runtime . toJson ( B ) + "\nRule: " + l ) } } else runtime . log ( "missing font data for " +
c [ f ] . href ) ; h ( c , n , k + 1 , m , q ) } ) : q && q ( ) } var k = xmldom . XPath , c = odf . OdfUtils , b = new core . Base64 ; odf . FontLoader = function ( ) { this . loadFonts = function ( b , n ) { for ( var p = b . rootElement . fontFaceDecls ; n . cssRules . length ; ) n . deleteRule ( n . cssRules . length - 1 ) ; if ( p ) { var m = { } , q , f , e , a ; if ( p ) for ( p = k . getODFElementsWithXPath ( p , "style:font-face[svg:font-face-src]" , odf . Namespaces . lookupNamespaceURI ) , q = 0 ; q < p . length ; q += 1 ) f = p [ q ] , e = f . getAttributeNS ( odf . Namespaces . stylens , "name" ) , a = c . getNormalizedFontFamilyName ( f . getAttributeNS ( odf . Namespaces . svgns ,
"font-family" ) ) , f = k . getODFElementsWithXPath ( f , "svg:font-face-src/svg:font-face-uri" , odf . Namespaces . lookupNamespaceURI ) , 0 < f . length && ( f = f [ 0 ] . getAttributeNS ( odf . Namespaces . xlinkns , "href" ) , m [ e ] = { href : f , family : a } ) ; h ( m , b , 0 , n ) } } } } ) ( ) ; odf . Formatting = function ( ) { function h ( a ) { return ( a = F [ a ] ) ? x . mergeObjects ( { } , a ) : { } } function k ( ) { for ( var d = a . rootElement . fontFaceDecls , b = { } , c , e , d = d && d . firstElementChild ; d ; ) { if ( c = d . getAttributeNS ( l , "name" ) ) if ( ( e = d . getAttributeNS ( r , "font-family" ) ) || 0 < d . getElementsByTagNameNS ( r , "font-face-uri" ) . length ) b [ c ] = e ; d = d . nextElementSibling } return b } function c ( d ) { for ( var b = a . rootElement . styles . firstElementChild ; b ; ) { if ( b . namespaceURI === l && "default-style" === b . localName && b . getAttributeNS ( l , "family" ) === d ) return b ; b = b . nextElementSibling } return null }
function b ( d , b , c ) { var e , f , g ; c = c || [ a . rootElement . automaticStyles , a . rootElement . styles ] ; for ( g = 0 ; g < c . length ; g += 1 ) for ( e = c [ g ] , e = e . firstElementChild ; e ; ) { f = e . getAttributeNS ( l , "name" ) ; if ( e . namespaceURI === l && "style" === e . localName && e . getAttributeNS ( l , "family" ) === b && f === d || "list-style" === b && e . namespaceURI === B && "list-style" === e . localName && f === d || "data" === b && e . namespaceURI === y && f === d ) return e ; e = e . nextElementSibling } return null } function g ( a ) { for ( var d , b , c , e , f = { } , g = a . firstElementChild ; g ; ) { if ( g . namespaceURI === l ) for ( c =
f [ g . nodeName ] = { } , b = g . attributes , d = 0 ; d < b . length ; d += 1 ) e = b . item ( d ) , c [ e . name ] = e . value ; g = g . nextElementSibling } b = a . attributes ; for ( d = 0 ; d < b . length ; d += 1 ) e = b . item ( d ) , f [ e . name ] = e . value ; return f } function n ( d , e ) { for ( var f = a . rootElement . styles , r , m = { } , n = d . getAttributeNS ( l , "family" ) , u = d ; u ; ) r = g ( u ) , m = x . mergeObjects ( r , m ) , u = ( r = u . getAttributeNS ( l , "parent-style-name" ) ) ? b ( r , n , [ f ] ) : null ; if ( u = c ( n ) ) r = g ( u ) , m = x . mergeObjects ( r , m ) ; ! 1 !== e && ( r = h ( n ) , m = x . mergeObjects ( r , m ) ) ; return m } function p ( b , c ) { function e ( a ) { Object . keys ( a ) . forEach ( function ( d ) { Object . keys ( a [ d ] ) . forEach ( function ( a ) { r +=
"|" + d + ":" + a + "|" } ) } ) } for ( var f = b . nodeType === Node . TEXT _NODE ? b . parentNode : b , l , g = [ ] , r = "" , h = ! 1 ; f && ! z . isInlineRoot ( f ) && f . parentNode !== a . rootElement ; ) ! h && z . isGroupingElement ( f ) && ( h = ! 0 ) , ( l = d . determineStylesForNode ( f ) ) && g . push ( l ) , f = f . parentNode ; h && ( g . forEach ( e ) , c && ( c [ r ] = g ) ) ; return h ? g : void 0 } function m ( d ) { var c = { orderedStyles : [ ] , styleProperties : { } } ; d . forEach ( function ( d ) { Object . keys ( d ) . forEach ( function ( e ) { var f = Object . keys ( d [ e ] ) [ 0 ] , g = { name : f , family : e , displayName : void 0 , isCommonStyle : ! 1 } , r ; ( r = b ( f , e ) ) ? ( e = n ( r ) ,
c . styleProperties = x . mergeObjects ( e , c . styleProperties ) , g . displayName = r . getAttributeNS ( l , "display-name" ) || void 0 , g . isCommonStyle = r . parentNode === a . rootElement . styles ) : runtime . log ( "No style element found for '" + f + "' of family '" + e + "'" ) ; c . orderedStyles . push ( g ) } ) } ) ; return c } function q ( a , d ) { var b = { } , c = [ ] ; d || ( d = { } ) ; a . forEach ( function ( a ) { p ( a , b ) } ) ; Object . keys ( b ) . forEach ( function ( a ) { d [ a ] || ( d [ a ] = m ( b [ a ] ) ) ; c . push ( d [ a ] ) } ) ; return c } function f ( d ) { for ( var b = a . rootElement . masterStyles . firstElementChild ; b && ( b . namespaceURI !==
l || "master-page" !== b . localName || b . getAttributeNS ( l , "name" ) !== d ) ; ) b = b . nextElementSibling ; return b } function e ( a , d ) { var b ; a && ( b = w . convertMeasure ( a , "px" ) ) ; void 0 === b && d && ( b = w . convertMeasure ( d , "px" ) ) ; return b } var a , d = new odf . StyleInfo , r = odf . Namespaces . svgns , l = odf . Namespaces . stylens , B = odf . Namespaces . textns , y = odf . Namespaces . numberns , D = odf . Namespaces . fons , z = odf . OdfUtils , t = core . DomUtils , x = new core . Utils , w = new core . CSSUnits , F = { paragraph : { "style:paragraph-properties" : { "fo:text-align" : "left" } } } ; this . getSystemDefaultStyleAttributes =
h ; this . setOdfContainer = function ( d ) { a = d } ; this . getFontMap = k ; this . getAvailableParagraphStyles = function ( ) { for ( var d = a . rootElement . styles , b , c , e = [ ] , d = d && d . firstElementChild ; d ; ) "style" === d . localName && d . namespaceURI === l && ( b = d . getAttributeNS ( l , "family" ) , "paragraph" === b && ( b = d . getAttributeNS ( l , "name" ) , c = d . getAttributeNS ( l , "display-name" ) || b , b && c && e . push ( { name : b , displayName : c } ) ) ) , d = d . nextElementSibling ; return e } ; this . isStyleUsed = function ( b ) { var c , e = a . rootElement ; c = d . hasDerivedStyles ( e , odf . Namespaces . lookupNamespaceURI ,
b ) ; b = ( new d . UsedStyleList ( e . styles ) ) . uses ( b ) || ( new d . UsedStyleList ( e . automaticStyles ) ) . uses ( b ) || ( new d . UsedStyleList ( e . body ) ) . uses ( b ) ; return c || b } ; this . getDefaultStyleElement = c ; this . getStyleElement = b ; this . getStyleAttributes = g ; this . getInheritedStyleAttributes = n ; this . getFirstCommonParentStyleNameOrSelf = function ( d ) { var c = a . rootElement . styles , e ; if ( e = b ( d , "paragraph" , [ a . rootElement . automaticStyles ] ) ) if ( d = e . getAttributeNS ( l , "parent-style-name" ) , ! d ) return null ; return ( e = b ( d , "paragraph" , [ c ] ) ) ? d : null } ; this . hasParagraphStyle =
function ( a ) { return Boolean ( b ( a , "paragraph" ) ) } ; this . getAppliedStyles = q ; this . getAppliedStylesForElement = function ( a , d ) { return q ( [ a ] , d ) [ 0 ] } ; this . updateStyle = function ( d , b ) { var c , e ; t . mapObjOntoNode ( d , b , odf . Namespaces . lookupNamespaceURI ) ; ( c = ( c = b [ "style:text-properties" ] ) && c [ "style:font-name" ] ) && ! k ( ) . hasOwnProperty ( c ) && ( e = d . ownerDocument . createElementNS ( l , "style:font-face" ) , e . setAttributeNS ( l , "style:name" , c ) , e . setAttributeNS ( r , "svg:font-family" , c ) , a . rootElement . fontFaceDecls . appendChild ( e ) ) } ; this . createDerivedStyleObject =
function ( d , c , e ) { var f = b ( d , c ) ; runtime . assert ( Boolean ( f ) , "No style element found for '" + d + "' of family '" + c + "'" ) ; d = f . parentNode === a . rootElement . styles ? { "style:parent-style-name" : d } : g ( f ) ; d [ "style:family" ] = c ; x . mergeObjects ( d , e ) ; return d } ; this . getDefaultTabStopDistance = function ( ) { for ( var a = c ( "paragraph" ) , a = a && a . firstElementChild , d ; a ; ) a . namespaceURI === l && "paragraph-properties" === a . localName && ( d = a . getAttributeNS ( l , "tab-stop-distance" ) ) , a = a . nextElementSibling ; d || ( d = "1.25cm" ) ; return z . parseNonNegativeLength ( d ) } ;
this . getMasterPageElement = f ; this . getContentSize = function ( d , c ) { var g , r , h , m , n , k , p , q , B , x ; a : { r = b ( d , c ) ; runtime . assert ( "paragraph" === c || "table" === c , "styleFamily must be either paragraph or table" ) ; if ( r ) { if ( r = r . getAttributeNS ( l , "master-page-name" ) ) ( g = f ( r ) ) || runtime . log ( "WARN: No master page definition found for " + r ) ; g || ( g = f ( "Standard" ) ) ; g || ( g = a . rootElement . masterStyles . getElementsByTagNameNS ( l , "master-page" ) [ 0 ] ) || runtime . log ( "WARN: Document has no master pages defined" ) ; if ( g ) for ( r = g . getAttributeNS ( l , "page-layout-name" ) ,
h = a . rootElement . automaticStyles . getElementsByTagNameNS ( l , "page-layout" ) , m = 0 ; m < h . length ; m += 1 ) if ( g = h . item ( m ) , g . getAttributeNS ( l , "name" ) === r ) break a } g = null } g || ( g = t . getDirectChild ( a . rootElement . styles , l , "default-page-layout" ) ) ; ( g = t . getDirectChild ( g , l , "page-layout-properties" ) ) ? ( "landscape" === g . getAttributeNS ( l , "print-orientation" ) ? ( r = "29.7cm" , h = "21.001cm" ) : ( r = "21.001cm" , h = "29.7cm" ) , r = e ( g . getAttributeNS ( D , "page-width" ) , r ) , h = e ( g . getAttributeNS ( D , "page-height" ) , h ) , m = e ( g . getAttributeNS ( D , "margin" ) ) , void 0 ===
m ? ( m = e ( g . getAttributeNS ( D , "margin-left" ) , "2cm" ) , n = e ( g . getAttributeNS ( D , "margin-right" ) , "2cm" ) , k = e ( g . getAttributeNS ( D , "margin-top" ) , "2cm" ) , p = e ( g . getAttributeNS ( D , "margin-bottom" ) , "2cm" ) ) : m = n = k = p = m , q = e ( g . getAttributeNS ( D , "padding" ) ) , void 0 === q ? ( q = e ( g . getAttributeNS ( D , "padding-left" ) , "0cm" ) , B = e ( g . getAttributeNS ( D , "padding-right" ) , "0cm" ) , x = e ( g . getAttributeNS ( D , "padding-top" ) , "0cm" ) , g = e ( g . getAttributeNS ( D , "padding-bottom" ) , "0cm" ) ) : q = B = x = g = q ) : ( r = e ( "21.001cm" ) , h = e ( "29.7cm" ) , m = n = k = p = m = e ( "2cm" ) , q = B = x = g = q =
e ( "0cm" ) ) ; return { width : r - m - n - q - B , height : h - k - p - x - g } } } ; ( function ( ) { var h = odf . Namespaces . stylens , k = odf . Namespaces . textns , c = { graphic : "draw" , "drawing-page" : "draw" , paragraph : "text" , presentation : "presentation" , ruby : "text" , section : "text" , table : "table" , "table-cell" : "table" , "table-column" : "table" , "table-row" : "table" , text : "text" , list : "text" , page : "office" } ; odf . StyleTreeNode = function ( b ) { this . derivedStyles = { } ; this . element = b } ; odf . StyleTree = function ( b , g ) { function n ( b ) { var a , d , c , f = { } ; if ( ! b ) return f ; for ( b = b . firstElementChild ; b ; ) { if ( d = b . namespaceURI !== h || "style" !== b . localName &&
"default-style" !== b . localName ? b . namespaceURI === k && "list-style" === b . localName ? "list" : b . namespaceURI !== h || "page-layout" !== b . localName && "default-page-layout" !== b . localName ? void 0 : "page" : b . getAttributeNS ( h , "family" ) ) ( a = b . getAttributeNS ( h , "name" ) ) || ( a = "" ) , f . hasOwnProperty ( d ) ? c = f [ d ] : f [ d ] = c = { } , c [ a ] = b ; b = b . nextElementSibling } return f } function p ( b , a ) { if ( b . hasOwnProperty ( a ) ) return b [ a ] ; var d = null , c = Object . keys ( b ) , f ; for ( f = 0 ; f < c . length && ! ( d = p ( b [ c [ f ] ] . derivedStyles , a ) ) ; f += 1 ) ; return d } function m ( b , a , d ) { var c , f ,
g ; if ( ! a . hasOwnProperty ( b ) ) return null ; c = new odf . StyleTreeNode ( a [ b ] ) ; f = c . element . getAttributeNS ( h , "parent-style-name" ) ; g = null ; f && ( g = p ( d , f ) || m ( f , a , d ) ) ; g ? g . derivedStyles [ b ] = c : d [ b ] = c ; delete a [ b ] ; return c } function q ( b , a ) { b && Object . keys ( b ) . forEach ( function ( d ) { m ( d , b , a ) } ) } var f = { } ; this . getStyleTree = function ( ) { return f } ; ( function ( ) { var e , a , d ; a = n ( b ) ; d = n ( g ) ; Object . keys ( c ) . forEach ( function ( b ) { e = f [ b ] = { } ; q ( a [ b ] , e ) ; q ( d [ b ] , e ) } ) } ) ( ) } } ) ( ) ; ( function ( ) { function h ( b , c ) { try { b . insertRule ( c , b . cssRules . length ) } catch ( e ) { runtime . log ( "cannot load rule: " + c + " - " + e ) } } function k ( b , c ) { this . listCounterCount = 0 ; this . contentRules = b ; this . counterIdStack = [ ] ; this . continuedCounterIdStack = c } function c ( b ) { function c ( d , e , g , m ) { var k = e . namespaceURI === n && "list" === e . localName , p = e . namespaceURI === n && "list-item" === e . localName ; if ( k || p ) { if ( k ) { var k = g += 1 , t , x , w ; m . listCounterCount += 1 ; p = d + "-level" + k + "-" + m . listCounterCount ; e . setAttributeNS ( "urn:webodf:names:helper" , "counter-id" ,
p ) ; t = m . continuedCounterIdStack . shift ( ) ; t || ( t = p , a += p + " 1 " , x = 'text|list[webodfhelper|counter-id="' + p + '"] > text|list-item:first-child > :not(text|list):first-child:before' , x += "{" , x += "counter-increment: " + t + " 0;" , x += "}" , h ( b , x ) ) ; for ( ; m . counterIdStack . length >= k ; ) m . counterIdStack . pop ( ) ; m . counterIdStack . push ( t ) ; w = m . contentRules [ k . toString ( ) ] || "" ; for ( x = 1 ; x <= k ; x += 1 ) w = w . replace ( x + "webodf-listLevel" , m . counterIdStack [ x - 1 ] ) ; x = 'text|list[webodfhelper|counter-id="' + p + '"] > text|list-item > :not(text|list):first-child:before' ;
x += "{" ; x += w ; x += "counter-increment: " + t + ";" ; x += "}" ; h ( b , x ) } for ( e = e . firstElementChild ; e ; ) c ( d , e , g , m ) , e = e . nextElementSibling } else m . continuedCounterIdStack = [ ] } var e = 0 , a = "" , d = { } ; this . createCounterRules = function ( a , b , g ) { var h = b . getAttributeNS ( p , "id" ) , m = [ ] ; g && ( g = g . getAttributeNS ( "urn:webodf:names:helper" , "counter-id" ) , m = d [ g ] . slice ( 0 ) ) ; a = new k ( a , m ) ; h ? h = "Y" + h : ( e += 1 , h = "X" + e ) ; c ( h , b , 0 , a ) ; d [ h + "-level1-1" ] = a . counterIdStack } ; this . initialiseCreatedCounters = function ( ) { var d ; d = "office|document{" + ( "counter-reset: " + a +
";" ) ; d += "}" ; h ( b , d ) } } var b = odf . Namespaces . fons , g = odf . Namespaces . stylens , n = odf . Namespaces . textns , p = odf . Namespaces . xmlns , m = { 1 : "decimal" , a : "lower-latin" , A : "upper-latin" , i : "lower-roman" , I : "upper-roman" } ; odf . ListStyleToCss = function ( ) { function k ( a ) { var b = r . parseLength ( a ) ; return b ? d . convert ( b . value , b . unit , "px" ) : ( runtime . log ( "Could not parse value '" + a + "'." ) , 0 ) } function f ( a ) { return a . replace ( /\\/g , "\\\\" ) . replace ( /"/g , '\\"' ) } function e ( a , d ) { var b ; a && ( b = a . getAttributeNS ( n , "style-name" ) ) ; return b === d } function a ( a ,
d , b ) { d = d . getElementsByTagNameNS ( n , "list" ) ; a = new c ( a ) ; var h , r , k , q , w , F , L = { } , H ; for ( H = 0 ; H < d . length ; H += 1 ) if ( h = d . item ( H ) , F = h . getAttributeNS ( n , "style-name" ) ) { k = h . getAttributeNS ( n , "continue-numbering" ) ; q = h . getAttributeNS ( n , "continue-list" ) ; ( w = h . getAttributeNS ( p , "id" ) ) && ( L [ w ] = h ) ; w = b [ F ] . element . firstElementChild ; for ( var G = void 0 , A = { } ; w ; ) { var G = ( G = w . getAttributeNS ( n , "level" ) ) && parseInt ( G , 10 ) , K = w , v = "" , u = void 0 , Q = void 0 , R = u = void 0 ; if ( "list-level-style-number" === K . localName ) { var C = K , v = C . getAttributeNS ( g , "num-format" ) ,
u = C . getAttributeNS ( g , "num-suffix" ) || "" , Q = C . getAttributeNS ( g , "num-prefix" ) || "" , I = "" , P = C . getAttributeNS ( n , "level" ) , C = C . getAttributeNS ( n , "display-levels" ) ; Q && ( I += '"' + f ( Q ) + '"\n' ) ; if ( m . hasOwnProperty ( v ) ) for ( P = P ? parseInt ( P , 10 ) : 1 , C = C ? parseInt ( C , 10 ) : 1 ; 0 < C ; ) I += " counter(" + ( P - C + 1 ) + "webodf-listLevel," + m [ v ] + ")" , 1 < C && ( I += '"."' ) , -- C ; else I = v ? I + ( ' "' + v + '"' ) : I + ' ""' ; v = "content:" + I + ' "' + f ( u ) + '"' } else "list-level-style-image" === K . localName ? v = "content: none" : "list-level-style-bullet" === K . localName && ( v = K . getAttributeNS ( n ,
"bullet-char" ) , v = 'content: "' + f ( v ) + '"' ) ; if ( u = K . getElementsByTagNameNS ( g , "list-level-properties" ) [ 0 ] ) Q = u . getAttributeNS ( n , "list-level-position-and-space-mode" ) , "label-alignment" === Q && ( ( u = u . getElementsByTagNameNS ( g , "list-level-label-alignment" ) [ 0 ] ) && ( R = u . getAttributeNS ( n , "label-followed-by" ) ) , "space" === R && ( v += ' "\\a0"' ) ) ; A [ G ] = "\n" + v + ";\n" ; w = w . nextElementSibling } w = A ; k && ! q && e ( r , F ) ? a . createCounterRules ( w , h , r ) : q && e ( L [ q ] , F ) ? a . createCounterRules ( w , h , L [ q ] ) : a . createCounterRules ( w , h ) ; r = h } a . initialiseCreatedCounters ( ) }
var d = new core . CSSUnits , r = odf . OdfUtils ; this . applyListStyles = function ( d , c , e ) { var f , r ; ( f = c . list ) && Object . keys ( f ) . forEach ( function ( a ) { r = f [ a ] ; for ( var c = r . element . firstElementChild ; c ; ) { if ( c . namespaceURI === n ) { for ( var e = d , m = c , p = 'text|list[text|style-name="' + a + '"]' , B = m . getAttributeNS ( n , "level" ) , y = void 0 , A = void 0 , K = A = void 0 , v = void 0 , u = void 0 , Q = y = void 0 , R = void 0 , C = void 0 , I = void 0 , v = void 0 , K = ( A = m . getElementsByTagNameNS ( g , "list-level-properties" ) [ 0 ] ) && A . getAttributeNS ( n , "list-level-position-and-space-mode" ) ,
v = A && A . getElementsByTagNameNS ( g , "list-level-label-alignment" ) [ 0 ] , y = B = B && parseInt ( B , 10 ) ; 1 < y ; ) p += " > text|list-item > text|list" , -- y ; y = A && A . getAttributeNS ( b , "text-align" ) || "left" ; switch ( y ) { case "end" : y = "right" ; break ; case "start" : y = "left" } "label-alignment" === K ? ( u = v && v . getAttributeNS ( b , "margin-left" ) || "0px" , C = v && v . getAttributeNS ( b , "text-indent" ) || "0px" , I = v && v . getAttributeNS ( n , "label-followed-by" ) , v = k ( u ) ) : ( u = A && A . getAttributeNS ( n , "space-before" ) || "0px" , Q = A && A . getAttributeNS ( n , "min-label-width" ) || "0px" ,
R = A && A . getAttributeNS ( n , "min-label-distance" ) || "0px" , v = k ( u ) + k ( Q ) ) ; A = p + " > text|list-item" ; A += "{" ; A += "margin-left: " + v + "px;" ; A += "}" ; h ( e , A ) ; A = p + " > text|list-item > text|list" ; A += "{" ; A += "margin-left: " + - v + "px;" ; A += "}" ; h ( e , A ) ; A = p + " > text|list-item > :not(text|list):first-child:before" ; A += "{" ; A += "text-align: " + y + ";" ; A += "display: inline-block;" ; "label-alignment" === K ? ( A += "margin-left: " + C + ";" , "listtab" === I && ( A += "padding-right: 0.2cm;" ) ) : ( A += "min-width: " + Q + ";" , A += "margin-left: " + ( 0 === parseFloat ( Q ) ? "" :
"-" ) + Q + ";" , A += "padding-right: " + R + ";" ) ; A += "}" ; h ( e , A ) } c = c . nextElementSibling } } ) ; a ( d , e , f ) } } } ) ( ) ; odf . LazyStyleProperties = function ( h , k ) { var c = { } ; this . value = function ( b ) { var g ; c . hasOwnProperty ( b ) ? g = c [ b ] : ( g = k [ b ] ( ) , void 0 === g && h && ( g = h . value ( b ) ) , c [ b ] = g ) ; return g } ; this . reset = function ( b ) { h = b ; c = { } } } ;
odf . StyleParseUtils = function ( ) { function h ( c ) { var b , g ; c = ( c = /(-?[0-9]*[0-9][0-9]*(\.[0-9]*)?|0+\.[0-9]*[1-9][0-9]*|\.[0-9]*[1-9][0-9]*)((cm)|(mm)|(in)|(pt)|(pc)|(px))/ . exec ( c ) ) ? { value : parseFloat ( c [ 1 ] ) , unit : c [ 3 ] } : null ; g = c && c . unit ; "px" === g ? b = c . value : "cm" === g ? b = c . value / 2.54 * 96 : "mm" === g ? b = c . value / 25.4 * 96 : "in" === g ? b = 96 * c . value : "pt" === g ? b = c . value / . 75 : "pc" === g && ( b = 16 * c . value ) ; return b } var k = odf . Namespaces . stylens ; this . parseLength = h ; this . parsePositiveLengthOrPercent = function ( c , b , g ) { var n ; c && ( n = parseFloat ( c . substr ( 0 ,
c . indexOf ( "%" ) ) ) , isNaN ( n ) && ( n = void 0 ) ) ; var k ; void 0 !== n ? ( g && ( k = g . value ( b ) ) , n = void 0 === k ? void 0 : k / 100 * n ) : n = h ( c ) ; return n } ; this . getPropertiesElement = function ( c , b , g ) { for ( b = g ? g . nextElementSibling : b . firstElementChild ; null !== b && ( b . localName !== c || b . namespaceURI !== k ) ; ) b = b . nextElementSibling ; return b } ; this . parseAttributeList = function ( c ) { c && ( c = c . replace ( /^\s*(.*?)\s*$/g , "$1" ) ) ; return c && 0 < c . length ? c . split ( /\s+/ ) : [ ] } } ; odf . Style2CSS = function ( ) { function h ( a , d , b ) { var c = [ ] ; b = b . derivedStyles ; var e ; var f = D [ a ] , g ; void 0 === f ? d = null : ( g = d ? "[" + f + '|style-name="' + d + '"]' : "" , "presentation" === f && ( f = "draw" , g = d ? '[presentation|style-name="' + d + '"]' : "" ) , d = f + "|" + z [ a ] . join ( g + "," + f + "|" ) + g ) ; null !== d && c . push ( d ) ; for ( e in b ) b . hasOwnProperty ( e ) && ( d = h ( a , e , b [ e ] ) , c = c . concat ( d ) ) ; return c } function k ( a ) { var d = "" , b = "" , d = null ; if ( "default-style" === a . localName ) return null ; d = a . getAttributeNS ( e , "parent-style-name" ) ; b = a . getAttributeNS ( e , "family" ) ; return d =
T . getODFElementsWithXPath ( P , d ? "//style:*[@style:name='" + d + "'][@style:family='" + b + "']" : "//style:default-style[@style:family='" + b + "']" , odf . Namespaces . lookupNamespaceURI ) [ 0 ] } function c ( a , d ) { var b = "" , c , f , g ; for ( c = 0 ; c < d . length ; c += 1 ) if ( f = d [ c ] , g = a . getAttributeNS ( f [ 0 ] , f [ 1 ] ) ) { g = g . trim ( ) ; if ( u . hasOwnProperty ( f [ 1 ] ) ) { var l = g , h = l . indexOf ( " " ) , r = void 0 ; g = void 0 ; - 1 !== h ? ( r = l . substring ( 0 , h ) , g = l . substring ( h ) ) : ( r = l , g = "" ) ; ( r = C . parseLength ( r ) ) && "pt" === r . unit && . 75 > r . value && ( l = "0.75pt" + g ) ; g = l } else if ( Q . hasOwnProperty ( f [ 1 ] ) ) { var l =
a , h = f [ 0 ] , r = f [ 1 ] , m = C . parseLength ( g ) , n = void 0 , v = void 0 , p = void 0 , q = void 0 , p = void 0 ; if ( m && "%" === m . unit ) { n = m . value / 100 ; v = k ( l . parentNode ) ; for ( q = "0" ; v ; ) { if ( p = B . getDirectChild ( v , e , "paragraph-properties" ) ) if ( p = C . parseLength ( p . getAttributeNS ( h , r ) ) ) { if ( "%" !== p . unit ) { q = p . value * n + p . unit ; break } n *= p . value / 100 } v = k ( v ) } g = q } } f [ 2 ] && ( b += f [ 2 ] + ":" + g + ";" ) } return b } function b ( a , d , b , c ) { return d + d + b + b + c + c } function g ( a , d ) { var b = [ a ] , c = d . derivedStyles ; Object . keys ( c ) . forEach ( function ( a ) { a = g ( a , c [ a ] ) ; b = b . concat ( a ) } ) ; return b } function n ( a ,
d , b , c ) { function e ( d , b ) { var c = [ ] , g ; d . forEach ( function ( a ) { f . forEach ( function ( d ) { c . push ( 'draw|page[webodfhelper|page-style-name="' + d + '"] draw|frame[presentation|class="' + a + '"]' ) } ) } ) ; 0 < c . length && ( g = c . join ( "," ) + "{visibility:" + b + ";}" , a . insertRule ( g , a . cssRules . length ) ) } var f = g ( d , c ) , h = [ ] , r = [ ] ; [ "page-number" , "date-time" , "header" , "footer" ] . forEach ( function ( a ) { var d ; d = b . getAttributeNS ( l , "display-" + a ) ; "true" === d ? h . push ( a ) : "false" === d && r . push ( a ) } ) ; e ( h , "visible" ) ; e ( r , "hidden" ) } function p ( a , g , u , Q ) { var z , D ; if ( "page" ===
g ) { var J = Q . element , P = "" , S , V ; V = S = "" ; u = B . getDirectChild ( J , e , "page-layout-properties" ) ; var M ; if ( u ) if ( M = J . getAttributeNS ( e , "name" ) , P += c ( u , K ) , ( S = B . getDirectChild ( u , e , "background-image" ) ) && ( V = S . getAttributeNS ( r , "href" ) ) && ( P = P + ( "background-image: url('odfkit:" + V + "');" ) + c ( S , x ) ) , "presentation" === I ) for ( J = ( J = B . getDirectChild ( J . parentNode . parentNode , f , "master-styles" ) ) && J . firstElementChild ; J ; ) J . namespaceURI === e && "master-page" === J . localName && J . getAttributeNS ( e , "page-layout-name" ) === M && ( V = J . getAttributeNS ( e , "name" ) ,
S = 'draw|page[draw|master-page-name="' + V + '"] {' + P + "}" , V = 'office|body, draw|page[draw|master-page-name="' + V + '"] {' + c ( u , v ) + " }" , a . insertRule ( S , a . cssRules . length ) , a . insertRule ( V , a . cssRules . length ) ) , J = J . nextElementSibling ; else "text" === I && ( S = "office|text {" + P + "}" , V = "office|body {width: " + u . getAttributeNS ( q , "page-width" ) + ";}" , a . insertRule ( S , a . cssRules . length ) , a . insertRule ( V , a . cssRules . length ) ) } else { P = h ( g , u , Q ) . join ( "," ) ; M = "" ; if ( J = B . getDirectChild ( Q . element , e , "text-properties" ) ) { var T = J , ea = D = "" ; S = "" ; V = 1 ; J =
"" + c ( T , t ) ; z = T . getAttributeNS ( e , "text-underline-style" ) ; "solid" === z && ( D += " underline" ) ; z = T . getAttributeNS ( e , "text-line-through-style" ) ; "solid" === z && ( D += " line-through" ) ; D . length && ( J = J + ( "text-decoration:" + D + ";\n" ) + ( "text-decoration-line:" + D + ";\n" ) , J += "-moz-text-decoration-line:" + D + ";\n" ) ; z = T . getAttributeNS ( e , "text-line-through-type" ) ; switch ( z ) { case "double" : ea += " double" ; break ; case "single" : ea += " single" } ea && ( J += "text-decoration-style:" + ea + ";\n" , J += "-moz-text-decoration-style:" + ea + ";\n" ) ; if ( D = T . getAttributeNS ( e ,
"font-name" ) || T . getAttributeNS ( q , "font-family" ) ) z = R [ D ] , J += "font-family: " + ( z || D ) + ";" ; if ( z = T . getAttributeNS ( e , "text-position" ) ) D = y . parseAttributeList ( z ) , z = D [ 0 ] , D = D [ 1 ] , J += "vertical-align: " + z + "\n; " , D && ( V = parseFloat ( D ) / 100 ) ; if ( T . hasAttributeNS ( q , "font-size" ) || 1 !== V ) { for ( T = T . parentNode ; T ; ) { if ( z = ( z = B . getDirectChild ( T , e , "text-properties" ) ) ? C . parseFoFontSize ( z . getAttributeNS ( q , "font-size" ) ) : null ) { if ( "%" !== z . unit ) { S = "font-size: " + z . value * V + z . unit + ";" ; break } V *= z . value / 100 } T = k ( T ) } S || ( S = "font-size: " + parseFloat ( U ) *
V + ca . getUnits ( U ) + ";" ) } J += S ; M += J } if ( J = B . getDirectChild ( Q . element , e , "paragraph-properties" ) ) S = J , J = "" + c ( S , w ) , ( V = B . getDirectChild ( S , e , "background-image" ) ) && ( T = V . getAttributeNS ( r , "href" ) ) && ( J = J + ( "background-image: url('odfkit:" + T + "');" ) + c ( V , x ) ) , ( S = S . getAttributeNS ( q , "line-height" ) ) && "normal" !== S && ( S = C . parseFoLineHeight ( S ) , J = "%" !== S . unit ? J + ( "line-height: " + S . value + S . unit + ";" ) : J + ( "line-height: " + S . value / 100 + ";" ) ) , M += J ; if ( J = B . getDirectChild ( Q . element , e , "graphic-properties" ) ) T = J , J = "" + c ( T , F ) , S = T . getAttributeNS ( m ,
"opacity" ) , V = T . getAttributeNS ( m , "fill" ) , T = T . getAttributeNS ( m , "fill-color" ) , "solid" === V || "hatch" === V ? T && "none" !== T ? ( S = isNaN ( parseFloat ( S ) ) ? 1 : parseFloat ( S ) / 100 , V = T . replace ( /^#?([a-f\d])([a-f\d])([a-f\d])$/i , b ) , ( T = ( V = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i . exec ( V ) ) ? { r : parseInt ( V [ 1 ] , 16 ) , g : parseInt ( V [ 2 ] , 16 ) , b : parseInt ( V [ 3 ] , 16 ) } : null ) && ( J += "background-color: rgba(" + T . r + "," + T . g + "," + T . b + "," + S + ");" ) ) : J += "background: none;" : "none" === V && ( J += "background: none;" ) , M += J ; if ( J = B . getDirectChild ( Q . element , e , "drawing-page-properties" ) ) S =
J , V = "" + c ( S , F ) , "true" === S . getAttributeNS ( l , "background-visible" ) && ( V += "background: none;" ) , M += V , n ( a , u , J , Q ) ; if ( J = B . getDirectChild ( Q . element , e , "table-cell-properties" ) ) u = M , M = "" + c ( J , L ) , M = u + M ; if ( J = B . getDirectChild ( Q . element , e , "table-row-properties" ) ) u = M , M = "" + c ( J , G ) , M = u + M ; if ( J = B . getDirectChild ( Q . element , e , "table-column-properties" ) ) u = M , M = "" + c ( J , H ) , M = u + M ; if ( J = B . getDirectChild ( Q . element , e , "table-properties" ) ) u = M , M = "" + c ( J , A ) , J = J . getAttributeNS ( d , "border-model" ) , "collapsing" === J ? M += "border-collapse:collapse;" :
"separating" === J && ( M += "border-collapse:separate;" ) , M = u + M ; 0 !== M . length && a . insertRule ( P + "{" + M + "}" , a . cssRules . length ) } for ( var aa in Q . derivedStyles ) Q . derivedStyles . hasOwnProperty ( aa ) && p ( a , g , aa , Q . derivedStyles [ aa ] ) } var m = odf . Namespaces . drawns , q = odf . Namespaces . fons , f = odf . Namespaces . officens , e = odf . Namespaces . stylens , a = odf . Namespaces . svgns , d = odf . Namespaces . tablens , r = odf . Namespaces . xlinkns , l = odf . Namespaces . presentationns , B = core . DomUtils , y = new odf . StyleParseUtils , D = { graphic : "draw" , "drawing-page" : "draw" , paragraph : "text" ,
presentation : "presentation" , ruby : "text" , section : "text" , table : "table" , "table-cell" : "table" , "table-column" : "table" , "table-row" : "table" , text : "text" , list : "text" , page : "office" } , z = { graphic : "circle connected control custom-shape ellipse frame g line measure page page-thumbnail path polygon polyline rect regular-polygon" . split ( " " ) , paragraph : "alphabetical-index-entry-template h illustration-index-entry-template index-source-style object-index-entry-template p table-index-entry-template table-of-content-entry-template user-index-entry-template" . split ( " " ) ,
presentation : "caption circle connector control custom-shape ellipse frame g line measure page-thumbnail path polygon polyline rect regular-polygon" . split ( " " ) , "drawing-page" : "caption circle connector control page custom-shape ellipse frame g line measure page-thumbnail path polygon polyline rect regular-polygon" . split ( " " ) , ruby : [ "ruby" , "ruby-text" ] , section : "alphabetical-index bibliography illustration-index index-title object-index section table-of-content table-index user-index" . split ( " " ) , table : [ "background" ,
"table" ] , "table-cell" : "body covered-table-cell even-columns even-rows first-column first-row last-column last-row odd-columns odd-rows table-cell" . split ( " " ) , "table-column" : [ "table-column" ] , "table-row" : [ "table-row" ] , text : "a index-entry-chapter index-entry-link-end index-entry-link-start index-entry-page-number index-entry-span index-entry-tab-stop index-entry-text index-title-template linenumbering-configuration list-level-style-number list-level-style-bullet outline-level-style span" . split ( " " ) ,
list : [ "list-item" ] } , t = [ [ q , "color" , "color" ] , [ q , "background-color" , "background-color" ] , [ q , "font-weight" , "font-weight" ] , [ q , "font-style" , "font-style" ] ] , x = [ [ e , "repeat" , "background-repeat" ] ] , w = [ [ q , "background-color" , "background-color" ] , [ q , "text-align" , "text-align" ] , [ q , "text-indent" , "text-indent" ] , [ q , "padding" , "padding" ] , [ q , "padding-left" , "padding-left" ] , [ q , "padding-right" , "padding-right" ] , [ q , "padding-top" , "padding-top" ] , [ q , "padding-bottom" , "padding-bottom" ] , [ q , "border-left" , "border-left" ] , [ q , "border-right" ,
"border-right" ] , [ q , "border-top" , "border-top" ] , [ q , "border-bottom" , "border-bottom" ] , [ q , "margin" , "margin" ] , [ q , "margin-left" , "margin-left" ] , [ q , "margin-right" , "margin-right" ] , [ q , "margin-top" , "margin-top" ] , [ q , "margin-bottom" , "margin-bottom" ] , [ q , "border" , "border" ] ] , F = [ [ q , "background-color" , "background-color" ] , [ q , "min-height" , "min-height" ] , [ m , "stroke" , "border" ] , [ a , "stroke-color" , "border-color" ] , [ a , "stroke-width" , "border-width" ] , [ q , "border" , "border" ] , [ q , "border-left" , "border-left" ] , [ q , "border-right" , "border-right" ] ,
[ q , "border-top" , "border-top" ] , [ q , "border-bottom" , "border-bottom" ] ] , L = [ [ q , "background-color" , "background-color" ] , [ q , "border-left" , "border-left" ] , [ q , "border-right" , "border-right" ] , [ q , "border-top" , "border-top" ] , [ q , "border-bottom" , "border-bottom" ] , [ q , "border" , "border" ] ] , H = [ [ e , "column-width" , "width" ] ] , G = [ [ e , "row-height" , "height" ] , [ q , "keep-together" , null ] ] , A = [ [ e , "width" , "width" ] , [ q , "margin-left" , "margin-left" ] , [ q , "margin-right" , "margin-right" ] , [ q , "margin-top" , "margin-top" ] , [ q , "margin-bottom" , "margin-bottom" ] ] ,
K = [ [ q , "background-color" , "background-color" ] , [ q , "padding" , "padding" ] , [ q , "padding-left" , "padding-left" ] , [ q , "padding-right" , "padding-right" ] , [ q , "padding-top" , "padding-top" ] , [ q , "padding-bottom" , "padding-bottom" ] , [ q , "border" , "border" ] , [ q , "border-left" , "border-left" ] , [ q , "border-right" , "border-right" ] , [ q , "border-top" , "border-top" ] , [ q , "border-bottom" , "border-bottom" ] , [ q , "margin" , "margin" ] , [ q , "margin-left" , "margin-left" ] , [ q , "margin-right" , "margin-right" ] , [ q , "margin-top" , "margin-top" ] , [ q , "margin-bottom" , "margin-bottom" ] ] ,
v = [ [ q , "page-width" , "width" ] , [ q , "page-height" , "height" ] ] , u = { border : ! 0 , "border-left" : ! 0 , "border-right" : ! 0 , "border-top" : ! 0 , "border-bottom" : ! 0 , "stroke-width" : ! 0 } , Q = { margin : ! 0 , "margin-left" : ! 0 , "margin-right" : ! 0 , "margin-top" : ! 0 , "margin-bottom" : ! 0 } , R = { } , C = odf . OdfUtils , I , P , U , T = xmldom . XPath , ca = new core . CSSUnits ; this . style2css = function ( a , d , b , c , e ) { function f ( a , d ) { g = "@namespace " + a + " url(" + d + ");" ; try { b . insertRule ( g , b . cssRules . length ) } catch ( c ) { } } var g , l , h ; for ( P = d ; b . cssRules . length ; ) b . deleteRule ( b . cssRules . length -
1 ) ; odf . Namespaces . forEachPrefix ( f ) ; f ( "webodfhelper" , "urn:webodf:names:helper" ) ; R = c ; I = a ; U = runtime . getWindow ( ) . getComputedStyle ( document . body , null ) . getPropertyValue ( "font-size" ) || "12pt" ; for ( h in D ) if ( D . hasOwnProperty ( h ) ) for ( l in a = e [ h ] , a ) a . hasOwnProperty ( l ) && p ( b , h , l , a [ l ] ) } } ; ( function ( ) { function h ( k , c ) { var b = this ; this . getDistance = function ( c ) { var h = b . x - c . x ; c = b . y - c . y ; return Math . sqrt ( h * h + c * c ) } ; this . getCenter = function ( c ) { return new h ( ( b . x + c . x ) / 2 , ( b . y + c . y ) / 2 ) } ; b . x = k ; b . y = c } gui . ZoomHelper = function ( ) { function k ( a , b , c , e ) { a = e ? "translate3d(" + a + "px, " + b + "px, 0) scale3d(" + c + ", " + c + ", 1)" : "translate(" + a + "px, " + b + "px) scale(" + c + ")" ; d . style . WebkitTransform = a ; d . style . MozTransform = a ; d . style . msTransform = a ; d . style . OTransform = a ; d . style . transform = a } function c ( a ) { a ? k ( - r . x , - r . y , y , ! 0 ) : ( k ( 0 ,
0 , y , ! 0 ) , k ( 0 , 0 , y , ! 1 ) ) } function b ( a ) { if ( z && L ) { var d = z . style . overflow , b = z . classList . contains ( "webodf-customScrollbars" ) ; a && b || ! a && ! b || ( a ? ( z . classList . add ( "webodf-customScrollbars" ) , z . style . overflow = "hidden" , runtime . requestAnimationFrame ( function ( ) { z . style . overflow = d } ) ) : z . classList . remove ( "webodf-customScrollbars" ) ) } } function g ( ) { k ( - r . x , - r . y , y , ! 0 ) ; z . scrollLeft = 0 ; z . scrollTop = 0 ; H = t . style . overflow ; t . style . overflow = "visible" ; b ( ! 1 ) } function n ( ) { k ( 0 , 0 , y , ! 0 ) ; z . scrollLeft = r . x ; z . scrollTop = r . y ; t . style . overflow =
H || "" ; b ( ! 0 ) } function p ( a ) { return new h ( a . pageX - d . offsetLeft , a . pageY - d . offsetTop ) } function m ( a ) { if ( l ) { r . x -= a . x - l . x ; r . y -= a . y - l . y ; var b = r ; r = new h ( Math . min ( Math . max ( b . x , d . offsetLeft ) , ( d . offsetLeft + d . offsetWidth ) * y - z . clientWidth ) , Math . min ( Math . max ( b . y , d . offsetTop ) , ( d . offsetTop + d . offsetHeight ) * y - z . clientHeight ) ) } l = a } function q ( a ) { var d = a . touches . length , b = 0 < d ? p ( a . touches [ 0 ] ) : null ; a = 1 < d ? p ( a . touches [ 1 ] ) : null ; b && a ? ( B = b . getDistance ( a ) , D = y , l = b . getCenter ( a ) , g ( ) , F = w . PINCH ) : b && ( l = b , F = w . SCROLL ) } function f ( a ) { var b =
a . touches . length , e = 0 < b ? p ( a . touches [ 0 ] ) : null , b = 1 < b ? p ( a . touches [ 1 ] ) : null ; if ( e && b ) if ( a . preventDefault ( ) , F === w . SCROLL ) F = w . PINCH , g ( ) , B = e . getDistance ( b ) ; else { a = e . getCenter ( b ) ; e = e . getDistance ( b ) / B ; m ( a ) ; var b = y , f = Math . min ( 4 , d . offsetParent . clientWidth / d . offsetWidth ) ; y = D * e ; y = Math . min ( Math . max ( y , f ) , 4 ) ; e = y / b ; r . x += ( e - 1 ) * ( a . x + r . x ) ; r . y += ( e - 1 ) * ( a . y + r . y ) ; c ( ! 0 ) } else e && ( F === w . PINCH ? ( F = w . SCROLL , n ( ) ) : m ( e ) ) } function e ( ) { F === w . PINCH && ( x . emit ( gui . ZoomHelper . signalZoomChanged , y ) , n ( ) , c ( ! 1 ) ) ; F = w . NONE } function a ( ) { z && ( z . removeEventListener ( "touchstart" ,
q , ! 1 ) , z . removeEventListener ( "touchmove" , f , ! 1 ) , z . removeEventListener ( "touchend" , e , ! 1 ) ) } var d , r , l , B , y , D , z , t , x = new core . EventNotifier ( [ gui . ZoomHelper . signalZoomChanged ] ) , w = { NONE : 0 , SCROLL : 1 , PINCH : 2 } , F = w . NONE , L = runtime . getWindow ( ) . hasOwnProperty ( "ontouchstart" ) , H = "" ; this . subscribe = function ( a , d ) { x . subscribe ( a , d ) } ; this . unsubscribe = function ( a , d ) { x . unsubscribe ( a , d ) } ; this . getZoomLevel = function ( ) { return y } ; this . setZoomLevel = function ( a ) { d && ( y = a , c ( ! 1 ) , x . emit ( gui . ZoomHelper . signalZoomChanged , y ) ) } ; this . destroy =
function ( d ) { a ( ) ; b ( ! 1 ) ; d ( ) } ; this . setZoomableElement = function ( g ) { a ( ) ; d = g ; z = d . offsetParent ; t = d . parentNode ; c ( ! 1 ) ; z && ( z . addEventListener ( "touchstart" , q , ! 1 ) , z . addEventListener ( "touchmove" , f , ! 1 ) , z . addEventListener ( "touchend" , e , ! 1 ) ) ; b ( ! 0 ) } ; D = y = 1 ; r = new h ( 0 , 0 ) } ; gui . ZoomHelper . signalZoomChanged = "zoomChanged" } ) ( ) ; ops . Canvas = function ( ) { } ; ops . Canvas . prototype . getZoomLevel = function ( ) { } ; ops . Canvas . prototype . getElement = function ( ) { } ; ops . Canvas . prototype . getSizer = function ( ) { } ; ops . Canvas . prototype . getZoomHelper = function ( ) { } ; ( function ( ) { function h ( ) { function a ( c ) { b = ! 0 ; runtime . setTimeout ( function ( ) { try { c ( ) } catch ( e ) { runtime . log ( String ( e ) + "\n" + e . stack ) } b = ! 1 ; 0 < d . length && a ( d . pop ( ) ) } , 10 ) } var d = [ ] , b = ! 1 ; this . clearQueue = function ( ) { d . length = 0 } ; this . addToQueue = function ( c ) { if ( 0 === d . length && ! b ) return a ( c ) ; d . push ( c ) } } function k ( a ) { function d ( ) { for ( ; 0 < b . cssRules . length ; ) b . deleteRule ( 0 ) ; b . insertRule ( "#shadowContent draw|page {display:none;}" , 0 ) ; b . insertRule ( "office|presentation draw|page {display:none;}" , 1 ) ; b . insertRule ( "#shadowContent draw|page:nth-of-type(" +
c + ") {display:block;}" , 2 ) ; b . insertRule ( "office|presentation draw|page:nth-of-type(" + c + ") {display:block;}" , 3 ) } var b = a . sheet , c = 1 ; this . showFirstPage = function ( ) { c = 1 ; d ( ) } ; this . showNextPage = function ( ) { c += 1 ; d ( ) } ; this . showPreviousPage = function ( ) { 1 < c && ( -- c , d ( ) ) } ; this . showPage = function ( a ) { 0 < a && ( c = a , d ( ) ) } ; this . css = a ; this . destroy = function ( d ) { a . parentNode . removeChild ( a ) ; d ( ) } } function c ( a ) { a = a . sheet ; for ( var d = a . cssRules ; d . length ; ) a . deleteRule ( d . length - 1 ) } function b ( a , d , b ) { var c = new odf . Style2CSS , e = new odf . ListStyleToCss ;
b = b . sheet ; var f = ( new odf . StyleTree ( a . rootElement . styles , a . rootElement . automaticStyles ) ) . getStyleTree ( ) ; c . style2css ( a . getDocumentType ( ) , a . rootElement , b , d . getFontMap ( ) , f ) ; e . applyListStyles ( b , f , a . rootElement . body ) } function g ( a , d ) { ( new odf . FontLoader ) . loadFonts ( a , d . sheet ) } function n ( a , d , b ) { var c = null ; a = a . rootElement . body . getElementsByTagNameNS ( G , b + "-decl" ) ; b = d . getAttributeNS ( G , "use-" + b + "-name" ) ; var e ; if ( b && 0 < a . length ) for ( d = 0 ; d < a . length ; d += 1 ) if ( e = a [ d ] , e . getAttributeNS ( G , "name" ) === b ) { c = e . textContent ; break } return c }
function p ( a , d , b , c ) { var e = a . ownerDocument ; d = K . getElementsByTagNameNS ( a , d , b ) ; for ( a = 0 ; a < d . length ; a += 1 ) K . removeAllChildNodes ( d [ a ] ) , c && ( b = d [ a ] , b . appendChild ( e . createTextNode ( c ) ) ) } function m ( a , d , b ) { d . setAttributeNS ( "urn:webodf:names:helper" , "styleid" , a ) ; var c , e = d . getAttributeNS ( L , "anchor-type" ) , f = d . getAttributeNS ( w , "x" ) , g = d . getAttributeNS ( w , "y" ) , l = d . getAttributeNS ( w , "width" ) , h = d . getAttributeNS ( w , "height" ) , r = d . getAttributeNS ( z , "min-height" ) , m = d . getAttributeNS ( z , "min-width" ) ; if ( "as-char" === e ) c = "display: inline-block;" ;
else if ( e || f || g ) c = "position: absolute;" ; else if ( l || h || r || m ) c = "display: block;" ; f && ( c += "left: " + f + ";" ) ; g && ( c += "top: " + g + ";" ) ; l && ( c += "width: " + l + ";" ) ; h && ( c += "height: " + h + ";" ) ; r && ( c += "min-height: " + r + ";" ) ; m && ( c += "min-width: " + m + ";" ) ; c && ( c = "draw|" + d . localName + '[webodfhelper|styleid="' + a + '"] {' + c + "}" , b . insertRule ( c , b . cssRules . length ) ) } function q ( a ) { for ( a = a . firstChild ; a ; ) { if ( a . namespaceURI === t && "binary-data" === a . localName ) return "data:image/png;base64," + a . textContent . replace ( /[\r\n\s]/g , "" ) ; a = a . nextSibling } return "" }
function f ( a , d , b , c ) { function e ( d ) { d && ( d = 'draw|image[webodfhelper|styleid="' + a + '"] {' + ( "background-image: url(" + d + ");" ) + "}" , c . insertRule ( d , c . cssRules . length ) ) } function f ( a ) { e ( a . url ) } b . setAttributeNS ( "urn:webodf:names:helper" , "styleid" , a ) ; var g = b . getAttributeNS ( H , "href" ) , l ; if ( g ) try { l = d . getPart ( g ) , l . onchange = f , l . load ( ) } catch ( h ) { runtime . log ( "slight problem: " + String ( h ) ) } else g = q ( b ) , e ( g ) } function e ( a ) { var d = a . ownerDocument ; K . getElementsByTagNameNS ( a , L , "line-break" ) . forEach ( function ( a ) { a . hasChildNodes ( ) ||
a . appendChild ( d . createElement ( "br" ) ) } ) } function a ( a ) { var d = a . ownerDocument ; K . getElementsByTagNameNS ( a , L , "s" ) . forEach ( function ( a ) { var b , c ; K . removeAllChildNodes ( a ) ; a . appendChild ( d . createTextNode ( " " ) ) ; c = parseInt ( a . getAttributeNS ( L , "c" ) , 10 ) ; if ( 1 < c ) for ( a . removeAttributeNS ( L , "c" ) , b = 1 ; b < c ; b += 1 ) a . parentNode . insertBefore ( a . cloneNode ( ! 0 ) , a ) } ) } function d ( a ) { K . getElementsByTagNameNS ( a , L , "tab" ) . forEach ( function ( a ) { a . textContent = "\t" } ) } function r ( a , d ) { function b ( a , c ) { var g = l . documentElement . namespaceURI ; "video/" ===
c . substr ( 0 , 6 ) ? ( e = l . createElementNS ( g , "video" ) , e . setAttribute ( "controls" , "controls" ) , f = l . createElementNS ( g , "source" ) , a && f . setAttribute ( "src" , a ) , f . setAttribute ( "type" , c ) , e . appendChild ( f ) , d . parentNode . appendChild ( e ) ) : d . innerHtml = "Unrecognised Plugin" } function c ( a ) { b ( a . url , a . mimetype ) } var e , f , g , l = d . ownerDocument , h ; if ( g = d . getAttributeNS ( H , "href" ) ) try { h = a . getPart ( g ) , h . onchange = c , h . load ( ) } catch ( r ) { runtime . log ( "slight problem: " + String ( r ) ) } else runtime . log ( "using MP4 data fallback" ) , g = q ( d ) , b ( g , "video/mp4" ) }
function l ( a ) { var d = a . getElementsByTagName ( "head" ) [ 0 ] , b , c ; b = a . styleSheets . length ; for ( c = d . firstElementChild ; c && ( "style" !== c . localName || ! c . hasAttribute ( "webodfcss" ) ) ; ) c = c . nextElementSibling ; if ( c ) return b = parseInt ( c . getAttribute ( "webodfcss" ) , 10 ) , c . setAttribute ( "webodfcss" , b + 1 ) , c ; "string" === String ( typeof webodf _css ) ? b = webodf _css : ( c = "webodf.css" , runtime . currentDirectory && ( c = runtime . currentDirectory ( ) , 0 < c . length && "/" !== c . substr ( - 1 ) && ( c += "/" ) , c += "../webodf.css" ) , b = runtime . readFileSync ( c , "utf-8" ) ) ; c = a . createElementNS ( d . namespaceURI ,
"style" ) ; c . setAttribute ( "media" , "screen, print, handheld, projection" ) ; c . setAttribute ( "type" , "text/css" ) ; c . setAttribute ( "webodfcss" , "1" ) ; c . appendChild ( a . createTextNode ( b ) ) ; d . appendChild ( c ) ; return c } function B ( a ) { var d = parseInt ( a . getAttribute ( "webodfcss" ) , 10 ) ; 1 === d ? a . parentNode . removeChild ( a ) : a . setAttribute ( "count" , d - 1 ) } function y ( a ) { var d = a . getElementsByTagName ( "head" ) [ 0 ] , b = a . createElementNS ( d . namespaceURI , "style" ) , c = "" ; b . setAttribute ( "type" , "text/css" ) ; b . setAttribute ( "media" , "screen, print, handheld, projection" ) ;
odf . Namespaces . forEachPrefix ( function ( a , d ) { c += "@namespace " + a + " url(" + d + ");\n" } ) ; c += "@namespace webodfhelper url(urn:webodf:names:helper);\n" ; b . appendChild ( a . createTextNode ( c ) ) ; d . appendChild ( b ) ; return b } var D = odf . Namespaces . drawns , z = odf . Namespaces . fons , t = odf . Namespaces . officens , x = odf . Namespaces . stylens , w = odf . Namespaces . svgns , F = odf . Namespaces . tablens , L = odf . Namespaces . textns , H = odf . Namespaces . xlinkns , G = odf . Namespaces . presentationns , A = xmldom . XPath , K = core . DomUtils ; odf . OdfCanvas = function ( v , u ) { function q ( a ,
d , b ) { function c ( a , d , b , e ) { na . addToQueue ( function ( ) { f ( a , d , b , e ) } ) } var e , g ; e = d . getElementsByTagNameNS ( D , "image" ) ; for ( d = 0 ; d < e . length ; d += 1 ) g = e . item ( d ) , c ( "image" + String ( d ) , a , g , b ) } function w ( a , d ) { function b ( a , d ) { na . addToQueue ( function ( ) { r ( a , d ) } ) } var c , e , f ; e = d . getElementsByTagNameNS ( D , "plugin" ) ; for ( c = 0 ; c < e . length ; c += 1 ) f = e . item ( c ) , b ( a , f ) } function C ( ) { var a ; a = X . firstChild ; var d = ga . getZoomLevel ( ) ; a && ( X . style . WebkitTransformOrigin = "0% 0%" , X . style . MozTransformOrigin = "0% 0%" , X . style . msTransformOrigin = "0% 0%" , X . style . OTransformOrigin =
"0% 0%" , X . style . transformOrigin = "0% 0%" , S && ( ( a = S . getMinimumHeightForAnnotationPane ( ) ) ? X . style . minHeight = a : X . style . removeProperty ( "min-height" ) ) , v . style . width = Math . round ( d * X . offsetWidth ) + "px" , v . style . height = Math . round ( d * X . offsetHeight ) + "px" , v . style . display = "inline-block" ) } function z ( b , c ) { var f = ea . sheet ; K . removeAllChildNodes ( v ) ; X = Y . createElementNS ( v . namespaceURI , "div" ) ; X . style . display = "inline-block" ; X . style . background = "white" ; X . style . setProperty ( "float" , "left" , "important" ) ; X . appendChild ( c ) ; v . appendChild ( X ) ;
ha = Y . createElementNS ( v . namespaceURI , "div" ) ; ha . id = "annotationsPane" ; aa = Y . createElementNS ( v . namespaceURI , "div" ) ; aa . id = "shadowContent" ; aa . style . position = "absolute" ; aa . style . top = 0 ; aa . style . left = 0 ; b . getContentElement ( ) . appendChild ( aa ) ; var g = c . body , l , h = [ ] , r ; for ( l = g . firstElementChild ; l && l !== g ; ) if ( l . namespaceURI === D && ( h [ h . length ] = l ) , l . firstElementChild ) l = l . firstElementChild ; else { for ( ; l && l !== g && ! l . nextElementSibling ; ) l = l . parentNode ; l && l . nextElementSibling && ( l = l . nextElementSibling ) } for ( r = 0 ; r < h . length ; r += 1 ) l =
h [ r ] , m ( "frame" + String ( r ) , l , f ) ; h = A . getODFElementsWithXPath ( g , ".//*[*[@text:anchor-type='paragraph']]" , odf . Namespaces . lookupNamespaceURI ) ; for ( l = 0 ; l < h . length ; l += 1 ) g = h [ l ] , g . setAttributeNS && g . setAttributeNS ( "urn:webodf:names:helper" , "containsparagraphanchor" , ! 0 ) ; g = Z ; l = aa ; var k , u , B , C , y = 0 , H ; r = b . rootElement . ownerDocument ; if ( ( h = c . body . firstElementChild ) && h . namespaceURI === t && ( "presentation" === h . localName || "drawing" === h . localName ) ) for ( h = h . firstElementChild ; h ; ) { if ( k = ( k = h . getAttributeNS ( D , "master-page-name" ) ) ?
g . getMasterPageElement ( k ) : null ) { u = h . getAttributeNS ( "urn:webodf:names:helper" , "styleid" ) ; B = r . createElementNS ( D , "draw:page" ) ; H = k . firstElementChild ; for ( y = 0 ; H ; ) "true" !== H . getAttributeNS ( G , "placeholder" ) && ( C = H . cloneNode ( ! 0 ) , B . appendChild ( C ) ) , H = H . nextElementSibling , y += 1 ; H = C = y = void 0 ; for ( var I = K . getElementsByTagNameNS ( B , D , "frame" ) , y = 0 ; y < I . length ; y += 1 ) C = I [ y ] , ( H = C . getAttributeNS ( G , "class" ) ) && ! /^(date-time|footer|header|page-number)$/ . test ( H ) && C . parentNode . removeChild ( C ) ; C = K . getElementsByTagNameNS ( B , D , "*" ) ;
for ( y = 0 ; y < C . length ; y += 1 ) m ( u + "_" + y , C [ y ] , f ) ; l . appendChild ( B ) ; y = String ( l . getElementsByTagNameNS ( D , "page" ) . length ) ; p ( B , L , "page-number" , y ) ; p ( B , G , "header" , n ( b , h , "header" ) ) ; p ( B , G , "footer" , n ( b , h , "footer" ) ) ; m ( u , B , f ) ; B . setAttributeNS ( "urn:webodf:names:helper" , "page-style-name" , h . getAttributeNS ( D , "style-name" ) ) ; B . setAttributeNS ( D , "draw:master-page-name" , k . getAttributeNS ( x , "name" ) ) } h = h . nextElementSibling } g = v . namespaceURI ; h = K . getElementsByTagNameNS ( c . body , F , "table-cell" ) ; for ( l = 0 ; l < h . length ; l += 1 ) r = h [ l ] , r . hasAttributeNS ( F ,
"number-columns-spanned" ) && r . setAttributeNS ( g , "colspan" , r . getAttributeNS ( F , "number-columns-spanned" ) ) , r . hasAttributeNS ( F , "number-rows-spanned" ) && r . setAttributeNS ( g , "rowspan" , r . getAttributeNS ( F , "number-rows-spanned" ) ) ; e ( c . body ) ; a ( c . body ) ; d ( c . body ) ; q ( b , c . body , f ) ; w ( b , c . body ) ; X . insertBefore ( aa , X . firstChild ) ; ga . setZoomableElement ( X ) } function H ( a ) { J ? ( ha . parentNode || X . appendChild ( ha ) , S && S . forgetAnnotations ( ) , S = new gui . AnnotationViewManager ( ca , a . body , ha , ba ) , a = K . getElementsByTagNameNS ( a . body , t , "annotation" ) ,
S . addAnnotations ( a ) , C ( ) ) : ha . parentNode && ( X . removeChild ( ha ) , S . forgetAnnotations ( ) , C ( ) ) } function U ( a ) { function d ( ) { c ( M ) ; c ( ja ) ; c ( ea ) ; K . removeAllChildNodes ( v ) ; v . style . display = "inline-block" ; var e = E . rootElement ; v . ownerDocument . importNode ( e , ! 0 ) ; Z . setOdfContainer ( E ) ; g ( E , M ) ; b ( E , Z , ja ) ; z ( E , e ) ; H ( e ) ; a || na . addToQueue ( function ( ) { var a = [ E ] ; if ( fa . hasOwnProperty ( "statereadychange" ) ) { var d = fa . statereadychange , b ; for ( b = 0 ; b < d . length ; b += 1 ) d [ b ] . apply ( null , a ) } } ) } E . state === odf . OdfContainer . DONE ? d ( ) : ( runtime . log ( "WARNING: refreshOdf called but ODF was not DONE." ) ,
qa = runtime . setTimeout ( function W ( ) { E . state === odf . OdfContainer . DONE ? d ( ) : ( runtime . log ( "will be back later..." ) , qa = runtime . setTimeout ( W , 500 ) ) } , 100 ) ) } function T ( a ) { na . clearQueue ( ) ; K . removeAllChildNodes ( v ) ; v . appendChild ( v . ownerDocument . createTextNode ( runtime . tr ( "Loading" ) + a + "..." ) ) ; v . removeAttribute ( "style" ) ; E = new odf . OdfContainer ( a , function ( a ) { E = a ; U ( ! 1 ) } ) } runtime . assert ( null !== v && void 0 !== v , "odf.OdfCanvas constructor needs DOM element" ) ; runtime . assert ( null !== v . ownerDocument && void 0 !== v . ownerDocument ,
"odf.OdfCanvas constructor needs DOM" ) ; var ca = this , Y = v . ownerDocument , E , Z = new odf . Formatting , da , X = null , ha = null , J = ! 1 , ba = ! 1 , S = null , V , M , ja , ea , aa , fa = { } , qa , la , ia = ! 1 , ma = ! 1 , na = new h , ga = new gui . ZoomHelper , ka = u || new gui . SingleScrollViewport ( v . parentNode ) ; this . refreshCSS = function ( ) { ia = ! 0 ; la . trigger ( ) } ; this . refreshSize = function ( ) { la . trigger ( ) } ; this . odfContainer = function ( ) { return E } ; this . setOdfContainer = function ( a , d ) { E = a ; U ( ! 0 === d ) } ; this . load = this . load = T ; this . save = function ( a ) { E . save ( a ) } ; this . addListener = function ( a ,
d ) { switch ( a ) { case "click" : var b = a ; v . addEventListener ? v . addEventListener ( b , d , ! 1 ) : v . attachEvent ? v . attachEvent ( "on" + b , d ) : v [ "on" + b ] = d ; break ; default : b = fa . hasOwnProperty ( a ) ? fa [ a ] : fa [ a ] = [ ] , d && - 1 === b . indexOf ( d ) && b . push ( d ) } } ; this . getFormatting = function ( ) { return Z } ; this . getAnnotationViewManager = function ( ) { return S } ; this . refreshAnnotations = function ( ) { H ( E . rootElement ) } ; this . rerenderAnnotations = function ( ) { S && ( ma = ! 0 , la . trigger ( ) ) } ; this . getSizer = function ( ) { return X } ; this . enableAnnotations = function ( a , d ) { a !== J && ( J =
a , ba = d , E && H ( E . rootElement ) ) } ; this . addAnnotation = function ( a ) { S && ( S . addAnnotations ( [ a ] ) , C ( ) ) } ; this . forgetAnnotation = function ( a ) { S && ( S . forgetAnnotation ( a ) , C ( ) ) } ; this . getZoomHelper = function ( ) { return ga } ; this . setZoomLevel = function ( a ) { ga . setZoomLevel ( a ) } ; this . getZoomLevel = function ( ) { return ga . getZoomLevel ( ) } ; this . fitToContainingElement = function ( a , d ) { var b = ga . getZoomLevel ( ) , c = v . offsetHeight / b , b = a / ( v . offsetWidth / b ) ; d / c < b && ( b = d / c ) ; ga . setZoomLevel ( b ) } ; this . fitToWidth = function ( a ) { var d = v . offsetWidth / ga . getZoomLevel ( ) ;
ga . setZoomLevel ( a / d ) } ; this . fitSmart = function ( a , d ) { var b , c ; c = ga . getZoomLevel ( ) ; b = v . offsetWidth / c ; c = v . offsetHeight / c ; b = a / b ; void 0 !== d && d / c < b && ( b = d / c ) ; ga . setZoomLevel ( Math . min ( 1 , b ) ) } ; this . fitToHeight = function ( a ) { var d = v . offsetHeight / ga . getZoomLevel ( ) ; ga . setZoomLevel ( a / d ) } ; this . showFirstPage = function ( ) { da . showFirstPage ( ) } ; this . showNextPage = function ( ) { da . showNextPage ( ) } ; this . showPreviousPage = function ( ) { da . showPreviousPage ( ) } ; this . showPage = function ( a ) { da . showPage ( a ) ; C ( ) } ; this . getElement = function ( ) { return v } ;
this . getViewport = function ( ) { return ka } ; this . addCssForFrameWithImage = function ( a ) { var d = a . getAttributeNS ( D , "name" ) , b = a . firstElementChild ; m ( d , a , ea . sheet ) ; b && f ( d + "img" , E , b , ea . sheet ) } ; this . destroy = function ( a ) { var d = Y . getElementsByTagName ( "head" ) [ 0 ] , b = [ da . destroy , la . destroy ] ; runtime . clearTimeout ( qa ) ; ha && ha . parentNode && ha . parentNode . removeChild ( ha ) ; ga . destroy ( function ( ) { X && ( v . removeChild ( X ) , X = null ) } ) ; B ( V ) ; d . removeChild ( M ) ; d . removeChild ( ja ) ; d . removeChild ( ea ) ; core . Async . destroyAll ( b , a ) } ; V = l ( Y ) ; da = new k ( y ( Y ) ) ;
M = y ( Y ) ; ja = y ( Y ) ; ea = y ( Y ) ; la = core . Task . createRedrawTask ( function ( ) { ia && ( b ( E , Z , ja ) , ia = ! 1 ) ; ma && ( S && S . rerenderAnnotations ( ) , ma = ! 1 ) ; C ( ) } ) ; ga . subscribe ( gui . ZoomHelper . signalZoomChanged , C ) } } ) ( ) ; odf . StepUtils = function ( ) { this . getContentBounds = function ( h ) { var k = h . container ( ) , c , b ; runtime . assert ( h . isStep ( ) , "Step iterator must be on a step" ) ; k . nodeType === Node . TEXT _NODE && 0 < h . offset ( ) ? c = h . offset ( ) : ( k = h . leftNode ( ) ) && k . nodeType === Node . TEXT _NODE && ( c = k . length ) ; k && ( k . nodeType === Node . TEXT _NODE ? ( runtime . assert ( 0 < c , "Empty text node found" ) , b = { container : k , startOffset : c - 1 , endOffset : c } ) : b = { container : k , startOffset : 0 , endOffset : k . childNodes . length } ) ; return b } } ; ops . MemberProperties = function ( ) { } ;
ops . Member = function ( h , k ) { var c = new ops . MemberProperties ; this . getMemberId = function ( ) { return h } ; this . getProperties = function ( ) { return c } ; this . setProperties = function ( b ) { Object . keys ( b ) . forEach ( function ( g ) { c [ g ] = b [ g ] } ) } ; this . removeProperties = function ( b ) { Object . keys ( b ) . forEach ( function ( b ) { "fullName" !== b && "color" !== b && "imageUrl" !== b && c . hasOwnProperty ( b ) && delete c [ b ] } ) } ; runtime . assert ( Boolean ( h ) , "No memberId was supplied!" ) ; k . fullName || ( k . fullName = runtime . tr ( "Unknown Author" ) ) ; k . color || ( k . color = "black" ) ; k . imageUrl ||
( k . imageUrl = "avatar-joe.png" ) ; c = k } ; ops . Document = function ( ) { } ; ops . Document . prototype . getMemberIds = function ( ) { } ; ops . Document . prototype . removeCursor = function ( h ) { } ; ops . Document . prototype . getDocumentElement = function ( ) { } ; ops . Document . prototype . getRootNode = function ( ) { } ; ops . Document . prototype . getDOMDocument = function ( ) { } ; ops . Document . prototype . cloneDocumentElement = function ( ) { } ; ops . Document . prototype . setDocumentElement = function ( h ) { } ; ops . Document . prototype . subscribe = function ( h , k ) { } ; ops . Document . prototype . unsubscribe = function ( h , k ) { } ;
ops . Document . prototype . getCanvas = function ( ) { } ; ops . Document . prototype . createRootFilter = function ( h ) { } ; ops . Document . prototype . createPositionIterator = function ( h ) { } ; ops . Document . signalCursorAdded = "cursor/added" ; ops . Document . signalCursorRemoved = "cursor/removed" ; ops . Document . signalCursorMoved = "cursor/moved" ; ops . Document . signalMemberAdded = "member/added" ; ops . Document . signalMemberUpdated = "member/updated" ; ops . Document . signalMemberRemoved = "member/removed" ; ops . OdtCursor = function ( h , k ) { var c = this , b = { } , g , n , p = new core . EventNotifier ( [ ops . OdtCursor . signalCursorUpdated ] ) ; this . removeFromDocument = function ( ) { n . remove ( ) } ; this . subscribe = function ( b , c ) { p . subscribe ( b , c ) } ; this . unsubscribe = function ( b , c ) { p . unsubscribe ( b , c ) } ; this . getMemberId = function ( ) { return h } ; this . getNode = function ( ) { return n . getNode ( ) } ; this . getAnchorNode = function ( ) { return n . getAnchorNode ( ) } ; this . getSelectedRange = function ( ) { return n . getSelectedRange ( ) } ; this . setSelectedRange = function ( b , g ) { n . setSelectedRange ( b ,
g ) ; p . emit ( ops . OdtCursor . signalCursorUpdated , c ) } ; this . hasForwardSelection = function ( ) { return n . hasForwardSelection ( ) } ; this . getDocument = function ( ) { return k } ; this . getSelectionType = function ( ) { return g } ; this . setSelectionType = function ( c ) { b . hasOwnProperty ( c ) ? g = c : runtime . log ( "Invalid selection type: " + c ) } ; this . resetSelectionType = function ( ) { c . setSelectionType ( ops . OdtCursor . RangeSelection ) } ; n = new core . Cursor ( k . getDOMDocument ( ) , h ) ; b [ ops . OdtCursor . RangeSelection ] = ! 0 ; b [ ops . OdtCursor . RegionSelection ] = ! 0 ; c . resetSelectionType ( ) } ;
ops . OdtCursor . RangeSelection = "Range" ; ops . OdtCursor . RegionSelection = "Region" ; ops . OdtCursor . signalCursorUpdated = "cursorUpdated" ; ( function ( ) { var h = 0 ; ops . StepsCache = function ( k , c , b ) { function g ( a , d ) { var c = this ; this . nodeId = a ; this . steps = - 1 ; this . node = d ; this . previousBookmark = this . nextBookmark = null ; this . setIteratorPosition = function ( a ) { a . setPositionBeforeElement ( d ) ; b ( c . steps , a ) } } function n ( a , d , c ) { var e = this ; this . nodeId = a ; this . steps = d ; this . node = c ; this . previousBookmark = this . nextBookmark = null ; this . setIteratorPosition = function ( a ) { a . setUnfilteredPosition ( c , 0 ) ; b ( e . steps , a ) } } function p ( a , d ) { var b = "[" + a . nodeId ; d && ( b += " => " + d . nodeId ) ; return b +
"]" } function m ( ) { if ( ! 0 === ops . StepsCache . ENABLE _CACHE _VERIFICATION ) { for ( var a = y , d , b , c , e = new core . LoopWatchDog ( 0 , 1E5 ) , f = { } ; a ; ) { e . check ( ) ; ( d = a . previousBookmark ) ? runtime . assert ( d . nextBookmark === a , "Broken bookmark link to previous @" + p ( d , a ) ) : ( runtime . assert ( a === y , "Broken bookmark link @" + p ( a ) ) , runtime . assert ( void 0 === D || y === y || y . steps <= D , "Base point is damaged @" + p ( a ) ) ) ; ( b = a . nextBookmark ) && runtime . assert ( b . previousBookmark === a , "Broken bookmark link to next @" + p ( a , b ) ) ; if ( void 0 === D || a === y || a . steps <= D ) runtime . assert ( B . containsNode ( k ,
a . node ) , "Disconnected node is being reported as undamaged @" + p ( a ) ) , d && ( c = a . node . compareDocumentPosition ( d . node ) , runtime . assert ( 0 === c || 0 !== ( c & t ) , "Bookmark order with previous does not reflect DOM order @" + p ( d , a ) ) ) , b && B . containsNode ( k , b . node ) && ( c = a . node . compareDocumentPosition ( b . node ) , runtime . assert ( 0 === c || 0 !== ( c & z ) , "Bookmark order with next does not reflect DOM order @" + p ( a , b ) ) ) ; a = a . nextBookmark } Object . keys ( r ) . forEach ( function ( a ) { var d = r [ a ] ; ( void 0 === D || a <= D ) && runtime . assert ( d . steps <= a , "Bookmark step of " +
d . steps + " exceeds cached step lookup for " + a + " @" + p ( d ) ) ; runtime . assert ( ! 1 === f . hasOwnProperty ( d . nodeId ) , "Bookmark " + p ( d ) + " appears twice in cached step lookup at steps " + f [ d . nodeId ] + " and " + a ) ; f [ d . nodeId ] = a } ) } } function q ( a ) { var d = "" ; a . nodeType === Node . ELEMENT _NODE && ( d = a . getAttributeNS ( "urn:webodf:names:steps" , "nodeId" ) || "" ) ; return d } function f ( a ) { var d = h . toString ( ) ; a . setAttributeNS ( "urn:webodf:names:steps" , "nodeId" , d ) ; h += 1 ; return d } function e ( a ) { var d , b , e = new core . LoopWatchDog ( 0 , 1E4 ) ; void 0 !== D && a >
D && ( a = D ) ; for ( d = Math . floor ( a / c ) * c ; ! b && 0 <= d ; ) b = r [ d ] , d -= c ; for ( b = b || y ; b . nextBookmark && b . nextBookmark . steps <= a ; ) e . check ( ) , b = b . nextBookmark ; runtime . assert ( - 1 === a || b . steps <= a , "Bookmark @" + p ( b ) + " at step " + b . steps + " exceeds requested step of " + a ) ; return b } function a ( a ) { a . previousBookmark && ( a . previousBookmark . nextBookmark = a . nextBookmark ) ; a . nextBookmark && ( a . nextBookmark . previousBookmark = a . previousBookmark ) } function d ( a ) { for ( var d , b = null ; ! b && a && a !== k ; ) ( d = q ( a ) ) && ( b = l [ d ] ) && b . node !== a && ( runtime . log ( "Cloned node detected. Creating new bookmark" ) ,
b = null , a . removeAttributeNS ( "urn:webodf:names:steps" , "nodeId" ) ) , a = a . parentNode ; return b } var r = { } , l = { } , B = core . DomUtils , y , D , z = Node . DOCUMENT _POSITION _FOLLOWING , t = Node . DOCUMENT _POSITION _PRECEDING ; this . updateBookmark = function ( d , b ) { var h , n = Math . ceil ( d / c ) * c , p , t , A ; if ( void 0 !== D && D < d ) { p = e ( D ) ; for ( t = p . nextBookmark ; t && t . steps <= d ; ) h = t . nextBookmark , A = Math . ceil ( t . steps / c ) * c , r [ A ] === t && delete r [ A ] , B . containsNode ( k , t . node ) ? t . steps = d + 1 : ( a ( t ) , delete l [ t . nodeId ] ) , t = h ; D = d } else p = e ( d ) ; t = q ( b ) || f ( b ) ; h = l [ t ] ; h ? h . node !== b && ( runtime . log ( "Cloned node detected. Creating new bookmark" ) ,
t = f ( b ) , h = l [ t ] = new g ( t , b ) ) : h = l [ t ] = new g ( t , b ) ; t = h ; t . steps !== d && ( h = Math . ceil ( t . steps / c ) * c , h !== n && r [ h ] === t && delete r [ h ] , t . steps = d ) ; if ( p !== t && p . nextBookmark !== t ) { if ( p . steps === t . steps ) for ( ; 0 !== ( t . node . compareDocumentPosition ( p . node ) & z ) && p !== y ; ) p = p . previousBookmark ; p !== t && p . nextBookmark !== t && ( a ( t ) , h = p . nextBookmark , t . nextBookmark = p . nextBookmark , t . previousBookmark = p , p . nextBookmark = t , h && ( h . previousBookmark = t ) ) } p = r [ n ] ; if ( ! p || t . steps > p . steps ) r [ n ] = t ; m ( ) } ; this . setToClosestStep = function ( a , d ) { var b ; m ( ) ; b = e ( a ) ; b . setIteratorPosition ( d ) ;
return b . steps } ; this . setToClosestDomPoint = function ( a , b , c ) { var f , g ; m ( ) ; if ( a === k && 0 === b ) f = y ; else if ( a === k && b === k . childNodes . length ) for ( g in f = y , r ) r . hasOwnProperty ( g ) && ( a = r [ g ] , a . steps > f . steps && ( f = a ) ) ; else if ( f = d ( a . childNodes . item ( b ) || a ) , ! f ) for ( c . setUnfilteredPosition ( a , b ) ; ! f && c . previousNode ( ) ; ) f = d ( c . getCurrentNode ( ) ) ; f = f || y ; void 0 !== D && f . steps > D && ( f = e ( D ) ) ; f . setIteratorPosition ( c ) ; return f . steps } ; this . damageCacheAfterStep = function ( a ) { 0 > a && ( a = - 1 ) ; void 0 === D ? D = a : a < D && ( D = a ) ; m ( ) } ; ( function ( ) { var a = q ( k ) ||
f ( k ) ; y = new n ( a , 0 , k ) } ) ( ) } ; ops . StepsCache . ENABLE _CACHE _VERIFICATION = ! 1 ; ops . StepsCache . Bookmark = function ( ) { } ; ops . StepsCache . Bookmark . prototype . setIteratorPosition = function ( h ) { } } ) ( ) ; ( function ( ) { ops . OdtStepsTranslator = function ( h , k , c , b ) { function g ( a , b , c ) { var e = b . getCurrentNode ( ) ; b . isBeforeNode ( ) && m . isParagraph ( e ) && ( c || ( a += 1 ) , p . updateBookmark ( a , e ) ) } function n ( d , b ) { if ( ! b || c . acceptPosition ( d ) === f ) return ! 0 ; for ( ; d . previousPosition ( ) ; ) if ( c . acceptPosition ( d ) === f ) { if ( b ( e , d . container ( ) , d . unfilteredDomOffset ( ) ) ) return ! 0 ; break } for ( ; d . nextPosition ( ) ; ) if ( c . acceptPosition ( d ) === f ) { if ( b ( a , d . container ( ) , d . unfilteredDomOffset ( ) ) ) return ! 0 ; break } return ! 1 } var p , m = odf . OdfUtils , q = core . DomUtils , f = core . PositionFilter . FilterResult . FILTER _ACCEPT ,
e = core . StepDirection . PREVIOUS , a = core . StepDirection . NEXT ; this . convertStepsToDomPoint = function ( a ) { var b , e ; if ( isNaN ( a ) ) throw new TypeError ( "Requested steps is not numeric (" + a + ")" ) ; if ( 0 > a ) throw new RangeError ( "Requested steps is negative (" + a + ")" ) ; for ( b = p . setToClosestStep ( a , k ) ; b < a && k . nextPosition ( ) ; ) ( e = c . acceptPosition ( k ) === f ) && ( b += 1 ) , g ( b , k , e ) ; if ( b !== a ) throw new RangeError ( "Requested steps (" + a + ") exceeds available steps (" + b + ")" ) ; return { node : k . container ( ) , offset : k . unfilteredDomOffset ( ) } } ; this . convertDomPointToSteps =
function ( a , b , e ) { var m ; q . containsNode ( h , a ) || ( b = 0 > q . comparePoints ( h , 0 , a , b ) , a = h , b = b ? 0 : h . childNodes . length ) ; k . setUnfilteredPosition ( a , b ) ; n ( k , e ) || k . setUnfilteredPosition ( a , b ) ; e = k . container ( ) ; b = k . unfilteredDomOffset ( ) ; a = p . setToClosestDomPoint ( e , b , k ) ; if ( 0 > q . comparePoints ( k . container ( ) , k . unfilteredDomOffset ( ) , e , b ) ) return 0 < a ? a - 1 : a ; for ( ; ( k . container ( ) !== e || k . unfilteredDomOffset ( ) !== b ) && k . nextPosition ( ) ; ) ( m = c . acceptPosition ( k ) === f ) && ( a += 1 ) , g ( a , k , m ) ; return a + 0 } ; this . prime = function ( ) { var a , b ; for ( a = p . setToClosestStep ( 0 ,
k ) ; k . nextPosition ( ) ; ) ( b = c . acceptPosition ( k ) === f ) && ( a += 1 ) , g ( a , k , b ) } ; this . handleStepsInserted = function ( a ) { p . damageCacheAfterStep ( a . position ) } ; this . handleStepsRemoved = function ( a ) { p . damageCacheAfterStep ( a . position - 1 ) } ; p = new ops . StepsCache ( h , b , function ( a , b ) { do { if ( c . acceptPosition ( b ) === f ) { g ( a , b , ! 0 ) ; break } g ( a - 1 , b , ! 1 ) } while ( b . nextPosition ( ) ) } ) } } ) ( ) ; ops . Operation = function ( ) { } ; ops . Operation . prototype . init = function ( h ) { } ; ops . Operation . prototype . execute = function ( h ) { } ; ops . Operation . prototype . spec = function ( ) { } ; ops . TextPositionFilter = function ( ) { function h ( b , c ) { for ( ; b && c ( b ) !== n ; ) b = b . previousSibling ; return b } function k ( b , g , f , e ) { var a ; if ( g ) { if ( c . isInlineRoot ( g ) && c . isGroupingElement ( f ) ) return p ; e = c . lookLeftForCharacter ( g ) ; if ( 1 === e || 2 === e && ( c . scanRightForAnyCharacter ( f ) || c . scanRightForAnyCharacter ( c . nextNode ( b ) ) ) ) return n } else if ( c . isGroupingElement ( b ) && c . isInlineRoot ( h ( b . previousSibling , e ) ) ) return n ; e = null === g && c . isParagraph ( b ) ; a = c . lookRightForCharacter ( f ) ; if ( e ) return a ? n : c . scanRightForAnyCharacter ( f ) ? p : n ; if ( ! a ) return p ;
g = g || c . previousNode ( b ) ; return c . scanLeftForAnyCharacter ( g ) ? p : n } var c = odf . OdfUtils , b = Node . ELEMENT _NODE , g = Node . TEXT _NODE , n = core . PositionFilter . FilterResult . FILTER _ACCEPT , p = core . PositionFilter . FilterResult . FILTER _REJECT ; this . acceptPosition = function ( h ) { var q = h . container ( ) , f = q . nodeType , e , a , d ; if ( f !== b && f !== g ) return p ; if ( f === g ) { f = h . unfilteredDomOffset ( ) ; e = q . data ; runtime . assert ( f !== e . length , "Unexpected offset." ) ; if ( 0 < f ) { h = e [ f - 1 ] ; if ( ! c . isODFWhitespace ( h ) ) return n ; if ( 1 < f ) if ( h = e [ f - 2 ] , ! c . isODFWhitespace ( h ) ) d =
n ; else { if ( ! c . isODFWhitespace ( e . substr ( 0 , f ) ) ) return p } else a = c . previousNode ( q ) , c . scanLeftForNonSpace ( a ) && ( d = n ) ; if ( d === n ) return c . isTrailingWhitespace ( q , f ) ? p : n ; h = e [ f ] ; return c . isODFWhitespace ( h ) ? p : c . scanLeftForAnyCharacter ( c . previousNode ( q ) ) ? p : n } a = h . leftNode ( ) ; d = q ; q = q . parentNode ; d = k ( q , a , d , h . getNodeFilter ( ) ) } else c . isGroupingElement ( q ) ? ( a = h . leftNode ( ) , d = h . rightNode ( ) , d = k ( q , a , d , h . getNodeFilter ( ) ) ) : d = p ; return d } } ; function RootFilter ( h , k , c ) { var b = core . PositionFilter . FilterResult . FILTER _ACCEPT , g = core . PositionFilter . FilterResult . FILTER _REJECT ; this . acceptPosition = function ( n ) { n = n . container ( ) ; var p ; p = "string" === typeof h ? k [ h ] . getNode ( ) : h ; return c ( n ) === c ( p ) ? b : g } }
ops . OdtDocument = function ( h ) { function k ( a ) { return new core . PositionIterator ( a , F , G , ! 1 ) } function c ( ) { var a = h . odfContainer ( ) . getContentElement ( ) , b = a && a . localName ; runtime . assert ( "text" === b , "Unsupported content element type '" + b + "' for OdtDocument" ) ; return a } function b ( ) { return a . getDocumentElement ( ) . ownerDocument } function g ( a ) { for ( ; a && ! ( a . namespaceURI === odf . Namespaces . officens && "text" === a . localName || a . namespaceURI === odf . Namespaces . officens && "annotation" === a . localName ) ; ) a = a . parentNode ; return a } function n ( a ,
b , d , c ) { c = k ( c ) ; var e ; 1 === d . length ? e = d [ 0 ] : ( e = new core . PositionFilterChain , d . forEach ( e . addFilter ) ) ; d = new core . StepIterator ( e , c ) ; d . setPosition ( a , b ) ; return d } function p ( a ) { var b = k ( c ( ) ) ; a = x . convertStepsToDomPoint ( a ) ; b . setUnfilteredPosition ( a . node , a . offset ) ; return b } function m ( a ) { return a === z } function q ( b ) { var d = b . spec ( ) , c = d . memberid , e = ( new Date ( d . timestamp ) ) . toISOString ( ) , d = h . odfContainer ( ) ; b . isEdit && ( c = a . getMember ( c ) . getProperties ( ) . fullName , d . setMetadata ( { "dc:creator" : c , "dc:date" : e } , null ) , c = { setProperties : { "dc:creator" : c ,
"dc:date" : e } , removedProperties : [ ] } , w || ( c . setProperties [ "meta:editing-cycles" ] = d . incrementEditingCycles ( ) , d . setMetadata ( null , [ "meta:editing-duration" , "meta:document-statistic" ] ) ) , w = b , a . emit ( ops . OdtDocument . signalMetadataUpdated , c ) ) } function f ( a ) { var b , c = [ ] , e , f = 2 ; runtime . assert ( a . isStep ( ) , "positionIterator is not at a step" ) ; do { if ( b = d . getContentBounds ( a ) ) if ( b = b . container , r . isDowngradableSpaceElement ( b ) ) { for ( e = b . lastChild ; b . firstChild ; ) c . push ( b . firstChild ) , b . parentNode . insertBefore ( b . firstChild , b ) ; b . parentNode . removeChild ( b ) ;
a . setPosition ( e , e . nodeType === Node . TEXT _NODE ? e . length : e . childNodes . length ) ; a . roundToPreviousStep ( ) } -- f } while ( 0 < f && a . nextStep ( ) ) ; c . forEach ( l . normalizeTextNodes ) } function e ( a , b , d ) { a = a . childNodes . item ( b ) || a ; return ( a = r . getParagraphElement ( a ) ) && l . containsNode ( d , a ) ? a : d } var a = this , d , r = odf . OdfUtils , l = core . DomUtils , B = { } , y = { } , D = new core . EventNotifier ( [ ops . Document . signalMemberAdded , ops . Document . signalMemberUpdated , ops . Document . signalMemberRemoved , ops . Document . signalCursorAdded , ops . Document . signalCursorRemoved ,
ops . Document . signalCursorMoved , ops . OdtDocument . signalParagraphChanged , ops . OdtDocument . signalParagraphStyleModified , ops . OdtDocument . signalCommonStyleCreated , ops . OdtDocument . signalCommonStyleDeleted , ops . OdtDocument . signalTableAdded , ops . OdtDocument . signalOperationStart , ops . OdtDocument . signalOperationEnd , ops . OdtDocument . signalProcessingBatchStart , ops . OdtDocument . signalProcessingBatchEnd , ops . OdtDocument . signalUndoStackChanged , ops . OdtDocument . signalStepsInserted , ops . OdtDocument . signalStepsRemoved , ops . OdtDocument . signalMetadataUpdated ,
ops . OdtDocument . signalAnnotationAdded ] ) , z = core . StepDirection . NEXT , t , x , w , F = NodeFilter . SHOW _ALL , L = new gui . BlacklistNamespaceNodeFilter ( [ "urn:webodf:names:cursor" , "urn:webodf:names:editinfo" ] ) , H = new gui . OdfTextBodyNodeFilter , G = new core . NodeFilterChain ( [ L , H ] ) ; this . createPositionIterator = k ; this . getDocumentElement = function ( ) { return h . odfContainer ( ) . rootElement } ; this . cloneDocumentElement = function ( ) { var b = a . getDocumentElement ( ) , d = h . getAnnotationViewManager ( ) ; d && d . forgetAnnotations ( ) ; b = b . cloneNode ( ! 0 ) ; h . refreshAnnotations ( ) ;
a . fixCursorPositions ( ) ; return b } ; this . setDocumentElement = function ( a ) { var b = h . odfContainer ( ) ; D . unsubscribe ( ops . OdtDocument . signalStepsInserted , x . handleStepsInserted ) ; D . unsubscribe ( ops . OdtDocument . signalStepsRemoved , x . handleStepsRemoved ) ; b . setRootElement ( a ) ; h . setOdfContainer ( b , ! 0 ) ; h . refreshCSS ( ) ; a = c ( ) ; x = new ops . OdtStepsTranslator ( a , k ( a ) , t , 500 ) ; D . subscribe ( ops . OdtDocument . signalStepsInserted , x . handleStepsInserted ) ; D . subscribe ( ops . OdtDocument . signalStepsRemoved , x . handleStepsRemoved ) } ; this . getDOMDocument =
b ; this . getRootElement = g ; this . createStepIterator = n ; this . getIteratorAtPosition = p ; this . convertCursorStepToDomPoint = function ( a ) { return x . convertStepsToDomPoint ( a ) } ; this . convertDomPointToCursorStep = function ( a , b , d ) { var c ; d === z && ( c = m ) ; return x . convertDomPointToSteps ( a , b , c ) } ; this . convertDomToCursorRange = function ( a ) { var b ; b = x . convertDomPointToSteps ( a . anchorNode , a . anchorOffset ) ; a = a . anchorNode === a . focusNode && a . anchorOffset === a . focusOffset ? b : x . convertDomPointToSteps ( a . focusNode , a . focusOffset ) ; return { position : b ,
length : a - b } } ; this . convertCursorToDomRange = function ( a , d ) { var c = b ( ) . createRange ( ) , e , f ; e = x . convertStepsToDomPoint ( a ) ; d ? ( f = x . convertStepsToDomPoint ( a + d ) , 0 < d ? ( c . setStart ( e . node , e . offset ) , c . setEnd ( f . node , f . offset ) ) : ( c . setStart ( f . node , f . offset ) , c . setEnd ( e . node , e . offset ) ) ) : c . setStart ( e . node , e . offset ) ; return c } ; this . upgradeWhitespacesAtPosition = function ( a ) { var b = p ( a ) , b = new core . StepIterator ( t , b ) , c , e = 2 ; runtime . assert ( b . isStep ( ) , "positionIterator is not at a step (requested step: " + a + ")" ) ; do { if ( c = d . getContentBounds ( b ) ) if ( a =
c . container , c = c . startOffset , a . nodeType === Node . TEXT _NODE && r . isSignificantWhitespace ( a , c ) ) { runtime . assert ( " " === a . data [ c ] , "upgradeWhitespaceToElement: textNode.data[offset] should be a literal space" ) ; var f = a . ownerDocument . createElementNS ( odf . Namespaces . textns , "text:s" ) , g = a . parentNode , l = a ; f . appendChild ( a . ownerDocument . createTextNode ( " " ) ) ; 1 === a . length ? g . replaceChild ( f , a ) : ( a . deleteData ( c , 1 ) , 0 < c && ( c < a . length && a . splitText ( c ) , l = a . nextSibling ) , g . insertBefore ( f , l ) ) ; a = f ; b . setPosition ( a , a . childNodes . length ) ;
b . roundToPreviousStep ( ) } -- e } while ( 0 < e && b . nextStep ( ) ) } ; this . downgradeWhitespaces = f ; this . downgradeWhitespacesAtPosition = function ( a ) { a = p ( a ) ; a = new core . StepIterator ( t , a ) ; f ( a ) } ; this . getTextNodeAtStep = function ( d , c ) { var e = p ( d ) , f = e . container ( ) , g , l = 0 , h = null ; f . nodeType === Node . TEXT _NODE ? ( g = f , l = e . unfilteredDomOffset ( ) , 0 < g . length && ( 0 < l && ( g = g . splitText ( l ) ) , g . parentNode . insertBefore ( b ( ) . createTextNode ( "" ) , g ) , g = g . previousSibling , l = 0 ) ) : ( g = b ( ) . createTextNode ( "" ) , l = 0 , f . insertBefore ( g , e . rightNode ( ) ) ) ; if ( c ) { if ( B [ c ] &&
a . getCursorPosition ( c ) === d ) { for ( h = B [ c ] . getNode ( ) ; h . nextSibling && "cursor" === h . nextSibling . localName ; ) h . parentNode . insertBefore ( h . nextSibling , h ) ; 0 < g . length && g . nextSibling !== h && ( g = b ( ) . createTextNode ( "" ) , l = 0 ) ; h . parentNode . insertBefore ( g , h ) } } else for ( ; g . nextSibling && "cursor" === g . nextSibling . localName ; ) g . parentNode . insertBefore ( g . nextSibling , g ) ; for ( ; g . previousSibling && g . previousSibling . nodeType === Node . TEXT _NODE ; ) e = g . previousSibling , e . appendData ( g . data ) , l = e . length , g = e , g . parentNode . removeChild ( g . nextSibling ) ;
for ( ; g . nextSibling && g . nextSibling . nodeType === Node . TEXT _NODE ; ) e = g . nextSibling , g . appendData ( e . data ) , g . parentNode . removeChild ( e ) ; return { textNode : g , offset : l } } ; this . fixCursorPositions = function ( ) { Object . keys ( B ) . forEach ( function ( b ) { var d = B [ b ] , c = g ( d . getNode ( ) ) , f = a . createRootFilter ( c ) , l , h , r , m = ! 1 ; r = d . getSelectedRange ( ) ; l = e ( r . startContainer , r . startOffset , c ) ; h = n ( r . startContainer , r . startOffset , [ t , f ] , l ) ; r . collapsed ? c = h : ( l = e ( r . endContainer , r . endOffset , c ) , c = n ( r . endContainer , r . endOffset , [ t , f ] , l ) ) ; h . isStep ( ) && c . isStep ( ) ?
h . container ( ) !== c . container ( ) || h . offset ( ) !== c . offset ( ) || r . collapsed && d . getAnchorNode ( ) === d . getNode ( ) || ( m = ! 0 , r . setStart ( h . container ( ) , h . offset ( ) ) , r . collapse ( ! 0 ) ) : ( m = ! 0 , runtime . assert ( h . roundToClosestStep ( ) , "No walkable step found for cursor owned by " + b ) , r . setStart ( h . container ( ) , h . offset ( ) ) , runtime . assert ( c . roundToClosestStep ( ) , "No walkable step found for cursor owned by " + b ) , r . setEnd ( c . container ( ) , c . offset ( ) ) ) ; m && ( d . setSelectedRange ( r , d . hasForwardSelection ( ) ) , a . emit ( ops . Document . signalCursorMoved ,
d ) ) } ) } ; this . getCursorPosition = function ( a ) { return ( a = B [ a ] ) ? x . convertDomPointToSteps ( a . getNode ( ) , 0 ) : 0 } ; this . getCursorSelection = function ( a ) { a = B [ a ] ; var b = 0 , d = 0 ; a && ( b = x . convertDomPointToSteps ( a . getNode ( ) , 0 ) , d = x . convertDomPointToSteps ( a . getAnchorNode ( ) , 0 ) ) ; return { position : d , length : b - d } } ; this . getPositionFilter = function ( ) { return t } ; this . getOdfCanvas = function ( ) { return h } ; this . getCanvas = function ( ) { return h } ; this . getRootNode = c ; this . addMember = function ( a ) { runtime . assert ( void 0 === y [ a . getMemberId ( ) ] , "This member already exists" ) ;
y [ a . getMemberId ( ) ] = a } ; this . getMember = function ( a ) { return y . hasOwnProperty ( a ) ? y [ a ] : null } ; this . removeMember = function ( a ) { delete y [ a ] } ; this . getCursor = function ( a ) { return B [ a ] } ; this . getMemberIds = function ( ) { var a = [ ] , b ; for ( b in B ) B . hasOwnProperty ( b ) && a . push ( B [ b ] . getMemberId ( ) ) ; return a } ; this . addCursor = function ( b ) { runtime . assert ( Boolean ( b ) , "OdtDocument::addCursor without cursor" ) ; var d = b . getMemberId ( ) , c = a . convertCursorToDomRange ( 0 , 0 ) ; runtime . assert ( "string" === typeof d , "OdtDocument::addCursor has cursor without memberid" ) ;
runtime . assert ( ! B [ d ] , "OdtDocument::addCursor is adding a duplicate cursor with memberid " + d ) ; b . setSelectedRange ( c , ! 0 ) ; B [ d ] = b } ; this . removeCursor = function ( b ) { var d = B [ b ] ; return d ? ( d . removeFromDocument ( ) , delete B [ b ] , a . emit ( ops . Document . signalCursorRemoved , b ) , ! 0 ) : ! 1 } ; this . moveCursor = function ( b , d , c , e ) { b = B [ b ] ; d = a . convertCursorToDomRange ( d , c ) ; b && ( b . setSelectedRange ( d , 0 <= c ) , b . setSelectionType ( e || ops . OdtCursor . RangeSelection ) ) } ; this . getFormatting = function ( ) { return h . getFormatting ( ) } ; this . emit = function ( a , b ) { D . emit ( a ,
b ) } ; this . subscribe = function ( a , b ) { D . subscribe ( a , b ) } ; this . unsubscribe = function ( a , b ) { D . unsubscribe ( a , b ) } ; this . createRootFilter = function ( a ) { return new RootFilter ( a , B , g ) } ; this . close = function ( a ) { a ( ) } ; this . destroy = function ( a ) { a ( ) } ; ( function ( ) { var a = c ( ) ; t = new ops . TextPositionFilter ; d = new odf . StepUtils ; x = new ops . OdtStepsTranslator ( a , k ( a ) , t , 500 ) ; D . subscribe ( ops . OdtDocument . signalStepsInserted , x . handleStepsInserted ) ; D . subscribe ( ops . OdtDocument . signalStepsRemoved , x . handleStepsRemoved ) ; D . subscribe ( ops . OdtDocument . signalOperationEnd ,
q ) ; D . subscribe ( ops . OdtDocument . signalProcessingBatchEnd , core . Task . processTasks ) } ) ( ) } ; ops . OdtDocument . signalParagraphChanged = "paragraph/changed" ; ops . OdtDocument . signalTableAdded = "table/added" ; ops . OdtDocument . signalCommonStyleCreated = "style/created" ; ops . OdtDocument . signalCommonStyleDeleted = "style/deleted" ; ops . OdtDocument . signalParagraphStyleModified = "paragraphstyle/modified" ; ops . OdtDocument . signalOperationStart = "operation/start" ; ops . OdtDocument . signalOperationEnd = "operation/end" ;
ops . OdtDocument . signalProcessingBatchStart = "router/batchstart" ; ops . OdtDocument . signalProcessingBatchEnd = "router/batchend" ; ops . OdtDocument . signalUndoStackChanged = "undo/changed" ; ops . OdtDocument . signalStepsInserted = "steps/inserted" ; ops . OdtDocument . signalStepsRemoved = "steps/removed" ; ops . OdtDocument . signalMetadataUpdated = "metadata/updated" ; ops . OdtDocument . signalAnnotationAdded = "annotation/added" ; ops . OpAddAnnotation = function ( ) { function h ( b , c , f ) { var e = b . getTextNodeAtStep ( f , k ) ; e && ( b = e . textNode , f = b . parentNode , e . offset !== b . length && b . splitText ( e . offset ) , f . insertBefore ( c , b . nextSibling ) , 0 === b . length && f . removeChild ( b ) ) } var k , c , b , g , n , p ; this . init = function ( h ) { k = h . memberid ; c = parseInt ( h . timestamp , 10 ) ; b = parseInt ( h . position , 10 ) ; g = void 0 !== h . length ? parseInt ( h . length , 10 ) || 0 : void 0 ; n = h . name } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( m ) { var q = m . getCursor ( k ) , f , e ; p = m . getDOMDocument ( ) ; var a = new Date ( c ) ,
d , r , l ; d = p . createElementNS ( odf . Namespaces . officens , "office:annotation" ) ; d . setAttributeNS ( odf . Namespaces . officens , "office:name" , n ) ; f = p . createElementNS ( odf . Namespaces . dcns , "dc:creator" ) ; f . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" , k ) ; f . textContent = m . getMember ( k ) . getProperties ( ) . fullName ; e = p . createElementNS ( odf . Namespaces . dcns , "dc:date" ) ; e . appendChild ( p . createTextNode ( a . toISOString ( ) ) ) ; a = p . createElementNS ( odf . Namespaces . textns , "text:list" ) ; r = p . createElementNS ( odf . Namespaces . textns ,
"text:list-item" ) ; l = p . createElementNS ( odf . Namespaces . textns , "text:p" ) ; r . appendChild ( l ) ; a . appendChild ( r ) ; d . appendChild ( f ) ; d . appendChild ( e ) ; d . appendChild ( a ) ; void 0 !== g && ( f = p . createElementNS ( odf . Namespaces . officens , "office:annotation-end" ) , f . setAttributeNS ( odf . Namespaces . officens , "office:name" , n ) , d . annotationEndElement = f , h ( m , f , b + g ) ) ; h ( m , d , b ) ; m . emit ( ops . OdtDocument . signalStepsInserted , { position : b } ) ; q && ( f = p . createRange ( ) , e = d . getElementsByTagNameNS ( odf . Namespaces . textns , "p" ) [ 0 ] , f . selectNodeContents ( e ) ,
q . setSelectedRange ( f , ! 1 ) , q . setSelectionType ( ops . OdtCursor . RangeSelection ) , m . emit ( ops . Document . signalCursorMoved , q ) ) ; m . getOdfCanvas ( ) . addAnnotation ( d ) ; m . fixCursorPositions ( ) ; m . emit ( ops . OdtDocument . signalAnnotationAdded , { memberId : k , annotation : d } ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "AddAnnotation" , memberid : k , timestamp : c , position : b , length : g , name : n } } } ; ops . OpAddCursor = function ( ) { var h , k ; this . init = function ( c ) { h = c . memberid ; k = c . timestamp } ; this . isEdit = ! 1 ; this . group = void 0 ; this . execute = function ( c ) { var b = c . getCursor ( h ) ; if ( b ) return ! 1 ; b = new ops . OdtCursor ( h , c ) ; c . addCursor ( b ) ; c . emit ( ops . Document . signalCursorAdded , b ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "AddCursor" , memberid : h , timestamp : k } } } ; ops . OpAddMember = function ( ) { var h , k , c ; this . init = function ( b ) { h = b . memberid ; k = parseInt ( b . timestamp , 10 ) ; c = b . setProperties } ; this . isEdit = ! 1 ; this . group = void 0 ; this . execute = function ( b ) { var g ; if ( b . getMember ( h ) ) return ! 1 ; g = new ops . Member ( h , c ) ; b . addMember ( g ) ; b . emit ( ops . Document . signalMemberAdded , g ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "AddMember" , memberid : h , timestamp : k , setProperties : c } } } ; ops . OpAddStyle = function ( ) { var h , k , c , b , g , n , p = odf . Namespaces . stylens ; this . init = function ( m ) { h = m . memberid ; k = m . timestamp ; c = m . styleName ; b = m . styleFamily ; g = "true" === m . isAutomaticStyle || ! 0 === m . isAutomaticStyle ; n = m . setProperties } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( h ) { var k = h . getOdfCanvas ( ) . odfContainer ( ) , f = h . getFormatting ( ) , e = h . getDOMDocument ( ) . createElementNS ( p , "style:style" ) ; if ( ! e ) return ! 1 ; n && f . updateStyle ( e , n ) ; e . setAttributeNS ( p , "style:family" , b ) ; e . setAttributeNS ( p , "style:name" , c ) ; g ?
k . rootElement . automaticStyles . appendChild ( e ) : k . rootElement . styles . appendChild ( e ) ; h . getOdfCanvas ( ) . refreshCSS ( ) ; g || h . emit ( ops . OdtDocument . signalCommonStyleCreated , { name : c , family : b } ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "AddStyle" , memberid : h , timestamp : k , styleName : c , styleFamily : b , isAutomaticStyle : g , setProperties : n } } } ; odf . ObjectNameGenerator = function ( h , k ) { function c ( a , b ) { var d = { } ; this . generateName = function ( ) { var c = b ( ) , e = 0 , f ; do f = a + e , e += 1 ; while ( d [ f ] || c [ f ] ) ; d [ f ] = ! 0 ; return f } } function b ( ) { var a = { } ; [ h . rootElement . automaticStyles , h . rootElement . styles ] . forEach ( function ( b ) { for ( b = b . firstElementChild ; b ; ) b . namespaceURI === g && "style" === b . localName && ( a [ b . getAttributeNS ( g , "name" ) ] = ! 0 ) , b = b . nextElementSibling } ) ; return a } var g = odf . Namespaces . stylens , n = odf . Namespaces . drawns , p = odf . Namespaces . xlinkns , m = ( new core . Utils ) . hashString ( k ) ,
q = null , f = null , e = null , a = { } , d = { } ; this . generateStyleName = function ( ) { null === q && ( q = new c ( "auto" + m + "_" , function ( ) { return b ( ) } ) ) ; return q . generateName ( ) } ; this . generateFrameName = function ( ) { var b , d , e ; if ( null === f ) { d = h . rootElement . body . getElementsByTagNameNS ( n , "frame" ) ; for ( b = 0 ; b < d . length ; b += 1 ) e = d . item ( b ) , a [ e . getAttributeNS ( n , "name" ) ] = ! 0 ; f = new c ( "fr" + m + "_" , function ( ) { return a } ) } return f . generateName ( ) } ; this . generateImageName = function ( ) { var a , b , f ; if ( null === e ) { f = h . rootElement . body . getElementsByTagNameNS ( n , "image" ) ;
for ( a = 0 ; a < f . length ; a += 1 ) b = f . item ( a ) , b = b . getAttributeNS ( p , "href" ) , b = b . substring ( 9 , b . lastIndexOf ( "." ) ) , d [ b ] = ! 0 ; e = new c ( "img" + m + "_" , function ( ) { return d } ) } return e . generateName ( ) } } ; odf . TextStyleApplicator = function ( h , k , c ) { function b ( b ) { function c ( a , b ) { return "object" === typeof a && "object" === typeof b ? Object . keys ( a ) . every ( function ( f ) { return c ( a [ f ] , b [ f ] ) } ) : a === b } var a = { } ; this . isStyleApplied = function ( d ) { d = k . getAppliedStylesForElement ( d , a ) . styleProperties ; return c ( b , d ) } } function g ( b ) { var e = { } ; this . applyStyleToContainer = function ( a ) { var d ; d = a . getAttributeNS ( m , "style-name" ) ; var g = a . ownerDocument ; d = d || "" ; if ( ! e . hasOwnProperty ( d ) ) { var l = d , n ; n = d ? k . createDerivedStyleObject ( d , "text" , b ) : b ; g =
g . createElementNS ( q , "style:style" ) ; k . updateStyle ( g , n ) ; g . setAttributeNS ( q , "style:name" , h . generateStyleName ( ) ) ; g . setAttributeNS ( q , "style:family" , "text" ) ; g . setAttributeNS ( "urn:webodf:names:scope" , "scope" , "document-content" ) ; c . appendChild ( g ) ; e [ l ] = g } d = e [ d ] . getAttributeNS ( q , "name" ) ; a . setAttributeNS ( m , "text:style-name" , d ) } } function n ( b , c ) { var a = b . ownerDocument , d = b . parentNode , g , l , h , n = new core . LoopWatchDog ( 1E4 ) ; l = [ ] ; l . push ( b ) ; for ( h = b . nextSibling ; h && p . rangeContainsNode ( c , h ) ; ) n . check ( ) , l . push ( h ) , h = h . nextSibling ;
"span" !== d . localName || d . namespaceURI !== m ? ( g = a . createElementNS ( m , "text:span" ) , d . insertBefore ( g , b ) , a = ! 1 ) : ( b . previousSibling && ! p . rangeContainsNode ( c , d . firstChild ) ? ( g = d . cloneNode ( ! 1 ) , d . parentNode . insertBefore ( g , d . nextSibling ) ) : g = d , a = ! 0 ) ; l . forEach ( function ( a ) { a . parentNode !== g && g . appendChild ( a ) } ) ; if ( h && a ) for ( l = g . cloneNode ( ! 1 ) , g . parentNode . insertBefore ( l , g . nextSibling ) ; h ; ) n . check ( ) , a = h . nextSibling , l . appendChild ( h ) , h = a ; return g } var p = core . DomUtils , m = odf . Namespaces . textns , q = odf . Namespaces . stylens ; this . applyStyle =
function ( c , e , a ) { var d = { } , h , l , m , k ; runtime . assert ( a && a . hasOwnProperty ( "style:text-properties" ) , "applyStyle without any text properties" ) ; d [ "style:text-properties" ] = a [ "style:text-properties" ] ; m = new g ( d ) ; k = new b ( d ) ; c . forEach ( function ( a ) { h = k . isStyleApplied ( a ) ; ! 1 === h && ( l = n ( a , e ) , m . applyStyleToContainer ( l ) ) } ) } } ; ops . OpApplyDirectStyling = function ( ) { function h ( b , c , e ) { var a = b . getOdfCanvas ( ) . odfContainer ( ) , d = m . splitBoundaries ( c ) , g = p . getTextNodes ( c , ! 1 ) ; ( new odf . TextStyleApplicator ( new odf . ObjectNameGenerator ( a , k ) , b . getFormatting ( ) , a . rootElement . automaticStyles ) ) . applyStyle ( g , c , e ) ; d . forEach ( m . normalizeTextNodes ) } var k , c , b , g , n , p = odf . OdfUtils , m = core . DomUtils ; this . init = function ( h ) { k = h . memberid ; c = h . timestamp ; b = parseInt ( h . position , 10 ) ; g = parseInt ( h . length , 10 ) ; n = h . setProperties } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute =
function ( m ) { var f = m . convertCursorToDomRange ( b , g ) , e = p . getParagraphElements ( f ) ; h ( m , f , n ) ; f . detach ( ) ; m . getOdfCanvas ( ) . refreshCSS ( ) ; m . fixCursorPositions ( ) ; e . forEach ( function ( a ) { m . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : a , memberId : k , timeStamp : c } ) } ) ; m . getOdfCanvas ( ) . rerenderAnnotations ( ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "ApplyDirectStyling" , memberid : k , timestamp : c , position : b , length : g , setProperties : n } } } ; ops . OpApplyHyperlink = function ( ) { function h ( b ) { for ( ; b ; ) { if ( m . isHyperlink ( b ) ) return ! 0 ; b = b . parentNode } return ! 1 } var k , c , b , g , n , p = core . DomUtils , m = odf . OdfUtils ; this . init = function ( h ) { k = h . memberid ; c = h . timestamp ; b = h . position ; g = h . length ; n = h . hyperlink } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( q ) { var f = q . getDOMDocument ( ) , e = q . convertCursorToDomRange ( b , g ) , a = p . splitBoundaries ( e ) , d = [ ] , r = m . getTextNodes ( e , ! 1 ) ; if ( 0 === r . length ) return ! 1 ; r . forEach ( function ( a ) { var b = m . getParagraphElement ( a ) ; runtime . assert ( ! 1 ===
h ( a ) , "The given range should not contain any link." ) ; var c = n , e = f . createElementNS ( odf . Namespaces . textns , "text:a" ) ; e . setAttributeNS ( odf . Namespaces . xlinkns , "xlink:type" , "simple" ) ; e . setAttributeNS ( odf . Namespaces . xlinkns , "xlink:href" , c ) ; a . parentNode . insertBefore ( e , a ) ; e . appendChild ( a ) ; - 1 === d . indexOf ( b ) && d . push ( b ) } ) ; a . forEach ( p . normalizeTextNodes ) ; e . detach ( ) ; q . fixCursorPositions ( ) ; q . getOdfCanvas ( ) . refreshSize ( ) ; q . getOdfCanvas ( ) . rerenderAnnotations ( ) ; d . forEach ( function ( a ) { q . emit ( ops . OdtDocument . signalParagraphChanged ,
{ paragraphElement : a , memberId : k , timeStamp : c } ) } ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "ApplyHyperlink" , memberid : k , timestamp : c , position : b , length : g , hyperlink : n } } } ; ops . OpInsertImage = function ( ) { var h , k , c , b , g , n , p , m , q = odf . Namespaces . drawns , f = odf . Namespaces . svgns , e = odf . Namespaces . textns , a = odf . Namespaces . xlinkns , d = odf . OdfUtils ; this . init = function ( a ) { h = a . memberid ; k = a . timestamp ; c = a . position ; b = a . filename ; g = a . frameWidth ; n = a . frameHeight ; p = a . frameStyleName ; m = a . frameName } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( r ) { var l = r . getOdfCanvas ( ) , B = r . getTextNodeAtStep ( c , h ) , y , D ; if ( ! B ) return ! 1 ; y = B . textNode ; D = d . getParagraphElement ( y ) ; var B = B . offset !== y . length ? y . splitText ( B . offset ) :
y . nextSibling , z = r . getDOMDocument ( ) , t = z . createElementNS ( q , "draw:image" ) , z = z . createElementNS ( q , "draw:frame" ) ; t . setAttributeNS ( a , "xlink:href" , b ) ; t . setAttributeNS ( a , "xlink:type" , "simple" ) ; t . setAttributeNS ( a , "xlink:show" , "embed" ) ; t . setAttributeNS ( a , "xlink:actuate" , "onLoad" ) ; z . setAttributeNS ( q , "draw:style-name" , p ) ; z . setAttributeNS ( q , "draw:name" , m ) ; z . setAttributeNS ( e , "text:anchor-type" , "as-char" ) ; z . setAttributeNS ( f , "svg:width" , g ) ; z . setAttributeNS ( f , "svg:height" , n ) ; z . appendChild ( t ) ; y . parentNode . insertBefore ( z ,
B ) ; r . emit ( ops . OdtDocument . signalStepsInserted , { position : c } ) ; 0 === y . length && y . parentNode . removeChild ( y ) ; l . addCssForFrameWithImage ( z ) ; l . refreshCSS ( ) ; r . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : D , memberId : h , timeStamp : k } ) ; l . rerenderAnnotations ( ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "InsertImage" , memberid : h , timestamp : k , filename : b , position : c , frameWidth : g , frameHeight : n , frameStyleName : p , frameName : m } } } ; ops . OpInsertTable = function ( ) { function h ( a , d ) { var c ; if ( 1 === f . length ) c = f [ 0 ] ; else if ( 3 === f . length ) switch ( a ) { case 0 : c = f [ 0 ] ; break ; case b - 1 : c = f [ 2 ] ; break ; default : c = f [ 1 ] } else c = f [ a ] ; if ( 1 === c . length ) return c [ 0 ] ; if ( 3 === c . length ) switch ( d ) { case 0 : return c [ 0 ] ; case g - 1 : return c [ 2 ] ; default : return c [ 1 ] } return c [ d ] } var k , c , b , g , n , p , m , q , f , e = odf . OdfUtils ; this . init = function ( a ) { k = a . memberid ; c = a . timestamp ; n = a . position ; b = a . initialRows ; g = a . initialColumns ; p = a . tableName ; m = a . tableStyleName ; q = a . tableColumnStyleName ; f = a . tableCellStyleMatrix } ;
this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( a ) { var d = a . getTextNodeAtStep ( n ) , f = a . getRootNode ( ) ; if ( d ) { var l = a . getDOMDocument ( ) , B = l . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:table" ) , y = l . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:table-column" ) , D , z , t , x ; m && B . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:style-name" , m ) ; p && B . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:name" , p ) ; y . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" ,
"table:number-columns-repeated" , g ) ; q && y . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:style-name" , q ) ; B . appendChild ( y ) ; for ( t = 0 ; t < b ; t += 1 ) { y = l . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:table-row" ) ; for ( x = 0 ; x < g ; x += 1 ) D = l . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:table-cell" ) , ( z = h ( t , x ) ) && D . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:table:1.0" , "table:style-name" , z ) , z = l . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:text:1.0" ,
"text:p" ) , D . appendChild ( z ) , y . appendChild ( D ) ; B . appendChild ( y ) } d = e . getParagraphElement ( d . textNode ) ; f . insertBefore ( B , d . nextSibling ) ; a . emit ( ops . OdtDocument . signalStepsInserted , { position : n } ) ; a . getOdfCanvas ( ) . refreshSize ( ) ; a . emit ( ops . OdtDocument . signalTableAdded , { tableElement : B , memberId : k , timeStamp : c } ) ; a . getOdfCanvas ( ) . rerenderAnnotations ( ) ; return ! 0 } return ! 1 } ; this . spec = function ( ) { return { optype : "InsertTable" , memberid : k , timestamp : c , position : n , initialRows : b , initialColumns : g , tableName : p , tableStyleName : m , tableColumnStyleName : q ,
tableCellStyleMatrix : f } } } ; ops . OpInsertText = function ( ) { function h ( b ) { return "\t" !== b && p . isODFWhitespace ( b ) } var k , c , b , g , n , p = odf . OdfUtils ; this . init = function ( h ) { k = h . memberid ; c = h . timestamp ; b = h . position ; n = h . text ; g = "true" === h . moveCursor || ! 0 === h . moveCursor } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( m ) { var q , f , e , a = null , d = m . getDOMDocument ( ) , r , l = 0 , B , y = m . getCursor ( k ) , D ; m . upgradeWhitespacesAtPosition ( b ) ; if ( q = m . getTextNodeAtStep ( b ) ) { f = q . textNode ; a = f . nextSibling ; e = f . parentNode ; r = p . getParagraphElement ( f ) ; for ( D = 0 ; D < n . length ; D +=
1 ) { if ( ! ( B = "\t" === n [ D ] ) ) { B = n ; var z = D ; B = h ( B [ z ] ) && ( 0 === z || z === B . length - 1 || h ( B [ z - 1 ] ) ) } B && ( 0 === l ? ( q . offset !== f . length && ( a = f . splitText ( q . offset ) ) , 0 < D && f . appendData ( n . substring ( 0 , D ) ) ) : l < D && ( l = n . substring ( l , D ) , e . insertBefore ( d . createTextNode ( l ) , a ) ) , l = D + 1 , "\t" === n [ D ] ? ( B = d . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:text:1.0" , "text:tab" ) , B . appendChild ( d . createTextNode ( "\t" ) ) ) : ( " " !== n [ D ] && runtime . log ( "WARN: InsertText operation contains non-tab, non-space whitespace character (character code " + n . charCodeAt ( D ) +
")" ) , B = d . createElementNS ( "urn:oasis:names:tc:opendocument:xmlns:text:1.0" , "text:s" ) , B . appendChild ( d . createTextNode ( " " ) ) ) , e . insertBefore ( B , a ) ) } 0 === l ? f . insertData ( q . offset , n ) : l < n . length && ( q = n . substring ( l ) , e . insertBefore ( d . createTextNode ( q ) , a ) ) ; e = f . parentNode ; a = f . nextSibling ; e . removeChild ( f ) ; e . insertBefore ( f , a ) ; 0 === f . length && f . parentNode . removeChild ( f ) ; m . emit ( ops . OdtDocument . signalStepsInserted , { position : b } ) ; y && g && ( m . moveCursor ( k , b + n . length , 0 ) , m . emit ( ops . Document . signalCursorMoved , y ) ) ; m . downgradeWhitespacesAtPosition ( b ) ;
m . downgradeWhitespacesAtPosition ( b + n . length ) ; m . getOdfCanvas ( ) . refreshSize ( ) ; m . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : r , memberId : k , timeStamp : c } ) ; m . getOdfCanvas ( ) . rerenderAnnotations ( ) ; return ! 0 } return ! 1 } ; this . spec = function ( ) { return { optype : "InsertText" , memberid : k , timestamp : c , position : b , text : n , moveCursor : g } } } ; odf . CollapsingRules = function ( h ) { function k ( c ) { return b . isODFNode ( c ) || "br" === c . localName && b . isLineBreak ( c . parentNode ) || c . nodeType === Node . TEXT _NODE && b . isODFNode ( c . parentNode ) ? NodeFilter . FILTER _REJECT : NodeFilter . FILTER _ACCEPT } function c ( n ) { var p ; n . nodeType === Node . TEXT _NODE ? ( p = n . parentNode , p . removeChild ( n ) ) : p = g . removeUnwantedNodes ( n , k ) ; if ( n = p ) n = p , n = ! b . isParagraph ( n ) && n !== h && b . hasNoODFContent ( n ) ; return n ? c ( p ) : p } var b = odf . OdfUtils , g = core . DomUtils ; this . mergeChildrenIntoParent = c } ; ops . OpMergeParagraph = function ( ) { function h ( a ) { return odf . OdfUtils . isInlineRoot ( a ) ? NodeFilter . FILTER _SKIP : e . isGroupingElement ( a ) && e . hasNoODFContent ( a ) ? NodeFilter . FILTER _REJECT : NodeFilter . FILTER _ACCEPT } function k ( a ) { if ( a . nodeType === Node . TEXT _NODE ) { if ( 0 === a . length ) return runtime . log ( "WARN: Empty text node found during merge operation" ) , ! 0 ; if ( e . isODFWhitespace ( a . data ) && ! 1 === e . isSignificantWhitespace ( a , 0 ) ) return ! 0 ; a = "#text" } else a = ( a . prefix ? a . prefix + ":" : "" ) + a . localName ; runtime . log ( "WARN: Unexpected text element found near paragraph boundary [" +
a + "]" ) ; return ! 1 } function c ( b ) { b . collapsed || ( a . splitBoundaries ( b ) , b = e . getTextElements ( b , ! 1 , ! 0 ) . filter ( k ) , b . forEach ( function ( a ) { a . parentNode . removeChild ( a ) } ) ) } function b ( a , b , d ) { a = a . convertCursorStepToDomPoint ( b ) ; var c = e . getParagraphElement ( a . node , a . offset ) ; runtime . assert ( Boolean ( c ) , "Paragraph not found at step " + b ) ; d && d . setPosition ( a . node , a . offset ) ; return c } var g , n , p , m , q , f , e = odf . OdfUtils , a = core . DomUtils , d = odf . Namespaces . textns ; this . init = function ( a ) { g = a . memberid ; n = a . timestamp ; p = a . moveCursor ; m = a . paragraphStyleName ;
q = parseInt ( a . sourceStartPosition , 10 ) ; f = parseInt ( a . destinationStartPosition , 10 ) } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( e ) { var l , k , y = e . getCursor ( g ) ; l = e . getRootNode ( ) ; var D = new odf . CollapsingRules ( l ) , z = e . createStepIterator ( l , 0 , [ e . getPositionFilter ( ) ] , l ) , t ; runtime . assert ( f < q , "Destination paragraph (" + f + ") must be before source paragraph (" + q + ")" ) ; k = b ( e , f ) ; l = b ( e , q , z ) ; z . previousStep ( ) ; runtime . assert ( a . containsNode ( k , z . container ( ) ) , "Destination paragraph must be adjacent to the source paragraph" ) ;
t = k . ownerDocument . createRange ( ) ; z . setPosition ( k , k . childNodes . length ) ; z . roundToPreviousStep ( ) ; t . setStart ( z . container ( ) , z . offset ( ) ) ; t . setEnd ( k , k . childNodes . length ) ; c ( t ) ; t = k . childNodes . length ; var x = l . ownerDocument . createRange ( ) ; z . setPosition ( l , 0 ) ; z . roundToNextStep ( ) ; x . setStart ( l , 0 ) ; x . setEnd ( z . container ( ) , z . offset ( ) ) ; c ( x ) ; for ( x = l . firstChild ; x ; ) "editinfo" === x . localName ? l . removeChild ( x ) : ( k . appendChild ( x ) , a . removeUnwantedNodes ( x , h ) ) , x = l . firstChild ; runtime . assert ( 0 === l . childNodes . length , "Source paragraph should be empty before it is removed" ) ;
D . mergeChildrenIntoParent ( l ) ; e . emit ( ops . OdtDocument . signalStepsRemoved , { position : q - 1 } ) ; z . setPosition ( k , t ) ; z . roundToClosestStep ( ) ; z . previousStep ( ) || z . roundToNextStep ( ) ; e . downgradeWhitespaces ( z ) ; m ? k . setAttributeNS ( d , "text:style-name" , m ) : k . removeAttributeNS ( d , "style-name" ) ; y && p && ( e . moveCursor ( g , q - 1 , 0 ) , e . emit ( ops . Document . signalCursorMoved , y ) ) ; e . fixCursorPositions ( ) ; e . getOdfCanvas ( ) . refreshSize ( ) ; e . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : k , memberId : g , timeStamp : n } ) ; e . getOdfCanvas ( ) . rerenderAnnotations ( ) ;
return ! 0 } ; this . spec = function ( ) { return { optype : "MergeParagraph" , memberid : g , timestamp : n , moveCursor : p , paragraphStyleName : m , sourceStartPosition : q , destinationStartPosition : f } } } ; ops . OpMoveCursor = function ( ) { var h , k , c , b , g ; this . init = function ( n ) { h = n . memberid ; k = n . timestamp ; c = n . position ; b = n . length || 0 ; g = n . selectionType || ops . OdtCursor . RangeSelection } ; this . isEdit = ! 1 ; this . group = void 0 ; this . execute = function ( n ) { var k = n . getCursor ( h ) , m ; if ( ! k ) return ! 1 ; m = n . convertCursorToDomRange ( c , b ) ; k . setSelectedRange ( m , 0 <= b ) ; k . setSelectionType ( g ) ; n . emit ( ops . Document . signalCursorMoved , k ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "MoveCursor" , memberid : h , timestamp : k , position : c , length : b , selectionType : g } } } ; ops . OpRemoveAnnotation = function ( ) { var h , k , c , b , g = core . DomUtils ; this . init = function ( g ) { h = g . memberid ; k = g . timestamp ; c = parseInt ( g . position , 10 ) ; b = parseInt ( g . length , 10 ) } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( b ) { function h ( b ) { k . parentNode . insertBefore ( b , k ) } for ( var m = b . getIteratorAtPosition ( c ) . container ( ) , k ; m . namespaceURI !== odf . Namespaces . officens || "annotation" !== m . localName ; ) m = m . parentNode ; if ( null === m ) return ! 1 ; k = m ; m = k . annotationEndElement ; b . getOdfCanvas ( ) . forgetAnnotation ( k ) ; g . getElementsByTagNameNS ( k ,
"urn:webodf:names:cursor" , "cursor" ) . forEach ( h ) ; g . getElementsByTagNameNS ( k , "urn:webodf:names:cursor" , "anchor" ) . forEach ( h ) ; k . parentNode . removeChild ( k ) ; m && m . parentNode . removeChild ( m ) ; b . emit ( ops . OdtDocument . signalStepsRemoved , { position : 0 < c ? c - 1 : c } ) ; b . getOdfCanvas ( ) . rerenderAnnotations ( ) ; b . fixCursorPositions ( ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "RemoveAnnotation" , memberid : h , timestamp : k , position : c , length : b } } } ; ops . OpRemoveBlob = function ( ) { var h , k , c ; this . init = function ( b ) { h = b . memberid ; k = b . timestamp ; c = b . filename } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( b ) { b . getOdfCanvas ( ) . odfContainer ( ) . removeBlob ( c ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "RemoveBlob" , memberid : h , timestamp : k , filename : c } } } ; ops . OpRemoveCursor = function ( ) { var h , k ; this . init = function ( c ) { h = c . memberid ; k = c . timestamp } ; this . isEdit = ! 1 ; this . group = void 0 ; this . execute = function ( c ) { return c . removeCursor ( h ) ? ! 0 : ! 1 } ; this . spec = function ( ) { return { optype : "RemoveCursor" , memberid : h , timestamp : k } } } ; ops . OpRemoveHyperlink = function ( ) { var h , k , c , b , g = core . DomUtils , n = odf . OdfUtils ; this . init = function ( g ) { h = g . memberid ; k = g . timestamp ; c = g . position ; b = g . length } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( p ) { var m = p . convertCursorToDomRange ( c , b ) , q = n . getHyperlinkElements ( m ) ; runtime . assert ( 1 === q . length , "The given range should only contain a single link." ) ; q = g . mergeIntoParent ( q [ 0 ] ) ; m . detach ( ) ; p . fixCursorPositions ( ) ; p . getOdfCanvas ( ) . refreshSize ( ) ; p . getOdfCanvas ( ) . rerenderAnnotations ( ) ; p . emit ( ops . OdtDocument . signalParagraphChanged ,
{ paragraphElement : n . getParagraphElement ( q ) , memberId : h , timeStamp : k } ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "RemoveHyperlink" , memberid : h , timestamp : k , position : c , length : b } } } ; ops . OpRemoveMember = function ( ) { var h , k ; this . init = function ( c ) { h = c . memberid ; k = parseInt ( c . timestamp , 10 ) } ; this . isEdit = ! 1 ; this . group = void 0 ; this . execute = function ( c ) { if ( ! c . getMember ( h ) ) return ! 1 ; c . removeMember ( h ) ; c . emit ( ops . Document . signalMemberRemoved , h ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "RemoveMember" , memberid : h , timestamp : k } } } ; ops . OpRemoveStyle = function ( ) { var h , k , c , b ; this . init = function ( g ) { h = g . memberid ; k = g . timestamp ; c = g . styleName ; b = g . styleFamily } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( g ) { var h = g . getFormatting ( ) . getStyleElement ( c , b ) ; if ( ! h ) return ! 1 ; h . parentNode . removeChild ( h ) ; g . getOdfCanvas ( ) . refreshCSS ( ) ; g . emit ( ops . OdtDocument . signalCommonStyleDeleted , { name : c , family : b } ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "RemoveStyle" , memberid : h , timestamp : k , styleName : c , styleFamily : b } } } ; ops . OpRemoveText = function ( ) { var h , k , c , b , g = odf . OdfUtils , n = core . DomUtils ; this . init = function ( g ) { runtime . assert ( 0 <= g . length , "OpRemoveText only supports positive lengths" ) ; h = g . memberid ; k = g . timestamp ; c = parseInt ( g . position , 10 ) ; b = parseInt ( g . length , 10 ) } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( p ) { var m , q , f , e = p . getCursor ( h ) , a = new odf . CollapsingRules ( p . getRootNode ( ) ) ; p . upgradeWhitespacesAtPosition ( c ) ; p . upgradeWhitespacesAtPosition ( c + b ) ; m = p . convertCursorToDomRange ( c , b ) ; n . splitBoundaries ( m ) ; q = g . getTextElements ( m ,
! 1 , ! 0 ) ; f = g . getParagraphElement ( m . startContainer , m . startOffset ) ; runtime . assert ( void 0 !== f , "Attempting to remove text outside a paragraph element" ) ; m . detach ( ) ; q . forEach ( function ( b ) { b . parentNode ? ( runtime . assert ( n . containsNode ( f , b ) , "RemoveText only supports removing elements within the same paragraph" ) , a . mergeChildrenIntoParent ( b ) ) : runtime . log ( "WARN: text element has already been removed from it's container" ) } ) ; p . emit ( ops . OdtDocument . signalStepsRemoved , { position : c } ) ; p . downgradeWhitespacesAtPosition ( c ) ;
p . fixCursorPositions ( ) ; p . getOdfCanvas ( ) . refreshSize ( ) ; p . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : f , memberId : h , timeStamp : k } ) ; e && ( e . resetSelectionType ( ) , p . emit ( ops . Document . signalCursorMoved , e ) ) ; p . getOdfCanvas ( ) . rerenderAnnotations ( ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "RemoveText" , memberid : h , timestamp : k , position : c , length : b } } } ; ops . OpSetBlob = function ( ) { var h , k , c , b , g ; this . init = function ( n ) { h = n . memberid ; k = n . timestamp ; c = n . filename ; b = n . mimetype ; g = n . content } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( h ) { h . getOdfCanvas ( ) . odfContainer ( ) . setBlob ( c , b , g ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "SetBlob" , memberid : h , timestamp : k , filename : c , mimetype : b , content : g } } } ; ops . OpSetParagraphStyle = function ( ) { function h ( b , c , g ) { var f = [ b . getPositionFilter ( ) ] , e = g . container ( ) ; g = g . unfilteredDomOffset ( ) ; return ! 1 === b . createStepIterator ( e , g , f , c ) . previousStep ( ) } var k , c , b , g , n = odf . OdfUtils ; this . init = function ( h ) { k = h . memberid ; c = h . timestamp ; b = h . position ; g = h . styleName } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( p ) { var m , q ; m = p . getIteratorAtPosition ( b ) ; return ( q = n . getParagraphElement ( m . container ( ) ) ) ? ( runtime . assert ( h ( p , q , m ) , "SetParagraphStyle position should be the first position in the paragraph" ) ,
g ? q . setAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:text:1.0" , "text:style-name" , g ) : q . removeAttributeNS ( "urn:oasis:names:tc:opendocument:xmlns:text:1.0" , "style-name" ) , p . getOdfCanvas ( ) . refreshSize ( ) , p . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : q , timeStamp : c , memberId : k } ) , p . getOdfCanvas ( ) . rerenderAnnotations ( ) , ! 0 ) : ! 1 } ; this . spec = function ( ) { return { optype : "SetParagraphStyle" , memberid : k , timestamp : c , position : b , styleName : g } } } ; ops . OpSplitParagraph = function ( ) { var h , k , c , b , g , n , p = odf . OdfUtils , m = odf . Namespaces . textns ; this . init = function ( m ) { h = m . memberid ; k = m . timestamp ; b = m . position ; c = m . sourceParagraphPosition ; n = m . paragraphStyleName ; g = "true" === m . moveCursor || ! 0 === m . moveCursor } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( c ) { var f , e , a , d , r , l , B , y = c . getCursor ( h ) ; c . upgradeWhitespacesAtPosition ( b ) ; f = c . getTextNodeAtStep ( b ) ; if ( ! f ) return ! 1 ; e = p . getParagraphElement ( f . textNode ) ; if ( ! e ) return ! 1 ; a = p . isListItem ( e . parentNode ) ? e . parentNode :
e ; 0 === f . offset ? ( B = f . textNode . previousSibling , l = null ) : ( B = f . textNode , l = f . offset >= f . textNode . length ? null : f . textNode . splitText ( f . offset ) ) ; for ( d = f . textNode ; d !== a ; ) { d = d . parentNode ; r = d . cloneNode ( ! 1 ) ; l && r . appendChild ( l ) ; if ( B ) for ( ; B && B . nextSibling ; ) r . appendChild ( B . nextSibling ) ; else for ( ; d . firstChild ; ) r . appendChild ( d . firstChild ) ; d . parentNode . insertBefore ( r , d . nextSibling ) ; B = d ; l = r } p . isListItem ( l ) && ( l = l . childNodes . item ( 0 ) ) ; n ? l . setAttributeNS ( m , "text:style-name" , n ) : l . removeAttributeNS ( m , "style-name" ) ; 0 === f . textNode . length &&
f . textNode . parentNode . removeChild ( f . textNode ) ; c . emit ( ops . OdtDocument . signalStepsInserted , { position : b } ) ; y && g && ( c . moveCursor ( h , b + 1 , 0 ) , c . emit ( ops . Document . signalCursorMoved , y ) ) ; c . fixCursorPositions ( ) ; c . getOdfCanvas ( ) . refreshSize ( ) ; c . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : e , memberId : h , timeStamp : k } ) ; c . emit ( ops . OdtDocument . signalParagraphChanged , { paragraphElement : l , memberId : h , timeStamp : k } ) ; c . getOdfCanvas ( ) . rerenderAnnotations ( ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "SplitParagraph" ,
memberid : h , timestamp : k , position : b , sourceParagraphPosition : c , paragraphStyleName : n , moveCursor : g } } } ; ops . OpUpdateMember = function ( ) { function h ( c ) { var g = "//dc:creator[@editinfo:memberid='" + k + "']" ; c = xmldom . XPath . getODFElementsWithXPath ( c . getRootNode ( ) , g , function ( b ) { return "editinfo" === b ? "urn:webodf:names:editinfo" : odf . Namespaces . lookupNamespaceURI ( b ) } ) ; for ( g = 0 ; g < c . length ; g += 1 ) c [ g ] . textContent = b . fullName } var k , c , b , g ; this . init = function ( h ) { k = h . memberid ; c = parseInt ( h . timestamp , 10 ) ; b = h . setProperties ; g = h . removedProperties } ; this . isEdit = ! 1 ; this . group = void 0 ; this . execute = function ( c ) { var p = c . getMember ( k ) ; if ( ! p ) return ! 1 ;
g && p . removeProperties ( g ) ; b && ( p . setProperties ( b ) , b . fullName && h ( c ) ) ; c . emit ( ops . Document . signalMemberUpdated , p ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "UpdateMember" , memberid : k , timestamp : c , setProperties : b , removedProperties : g } } } ; ops . OpUpdateMetadata = function ( ) { var h , k , c , b ; this . init = function ( g ) { h = g . memberid ; k = parseInt ( g . timestamp , 10 ) ; c = g . setProperties ; b = g . removedProperties } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( g ) { var h = g . getOdfCanvas ( ) . odfContainer ( ) , k = null ; b && ( k = b . attributes . split ( "," ) ) ; h . setMetadata ( c , k ) ; g . emit ( ops . OdtDocument . signalMetadataUpdated , { setProperties : null !== c ? c : { } , removedProperties : null !== k ? k : [ ] } ) ; return ! 0 } ; this . spec = function ( ) { return { optype : "UpdateMetadata" , memberid : h , timestamp : k , setProperties : c ,
removedProperties : b } } } ; ops . OpUpdateParagraphStyle = function ( ) { function h ( b , c ) { var f , e , a = c ? c . split ( "," ) : [ ] ; for ( f = 0 ; f < a . length ; f += 1 ) e = a [ f ] . split ( ":" ) , b . removeAttributeNS ( odf . Namespaces . lookupNamespaceURI ( e [ 0 ] ) , e [ 1 ] ) } var k , c , b , g , n , p = odf . Namespaces . stylens ; this . init = function ( h ) { k = h . memberid ; c = h . timestamp ; b = h . styleName ; g = h . setProperties ; n = h . removedProperties } ; this . isEdit = ! 0 ; this . group = void 0 ; this . execute = function ( c ) { var k = c . getFormatting ( ) , f , e , a ; return ( f = "" !== b ? k . getStyleElement ( b , "paragraph" ) : k . getDefaultStyleElement ( "paragraph" ) ) ?
( e = f . getElementsByTagNameNS ( p , "paragraph-properties" ) . item ( 0 ) , a = f . getElementsByTagNameNS ( p , "text-properties" ) . item ( 0 ) , g && k . updateStyle ( f , g ) , n && ( k = n [ "style:paragraph-properties" ] , e && k && ( h ( e , k . attributes ) , 0 === e . attributes . length && f . removeChild ( e ) ) , k = n [ "style:text-properties" ] , a && k && ( h ( a , k . attributes ) , 0 === a . attributes . length && f . removeChild ( a ) ) , h ( f , n . attributes ) ) , c . getOdfCanvas ( ) . refreshCSS ( ) , c . emit ( ops . OdtDocument . signalParagraphStyleModified , b ) , c . getOdfCanvas ( ) . rerenderAnnotations ( ) , ! 0 ) : ! 1 } ; this . spec =
function ( ) { return { optype : "UpdateParagraphStyle" , memberid : k , timestamp : c , styleName : b , setProperties : g , removedProperties : n } } } ; ops . OperationFactory = function ( ) { function h ( c ) { return function ( b ) { return new c } } var k ; this . register = function ( c , b ) { k [ c ] = b } ; this . create = function ( c ) { var b = null , g = k [ c . optype ] ; g && ( b = g ( c ) , b . init ( c ) ) ; return b } ; k = { AddMember : h ( ops . OpAddMember ) , UpdateMember : h ( ops . OpUpdateMember ) , RemoveMember : h ( ops . OpRemoveMember ) , AddCursor : h ( ops . OpAddCursor ) , ApplyDirectStyling : h ( ops . OpApplyDirectStyling ) , SetBlob : h ( ops . OpSetBlob ) , RemoveBlob : h ( ops . OpRemoveBlob ) , InsertImage : h ( ops . OpInsertImage ) , InsertTable : h ( ops . OpInsertTable ) ,
InsertText : h ( ops . OpInsertText ) , RemoveText : h ( ops . OpRemoveText ) , MergeParagraph : h ( ops . OpMergeParagraph ) , SplitParagraph : h ( ops . OpSplitParagraph ) , SetParagraphStyle : h ( ops . OpSetParagraphStyle ) , UpdateParagraphStyle : h ( ops . OpUpdateParagraphStyle ) , AddStyle : h ( ops . OpAddStyle ) , RemoveStyle : h ( ops . OpRemoveStyle ) , MoveCursor : h ( ops . OpMoveCursor ) , RemoveCursor : h ( ops . OpRemoveCursor ) , AddAnnotation : h ( ops . OpAddAnnotation ) , RemoveAnnotation : h ( ops . OpRemoveAnnotation ) , UpdateMetadata : h ( ops . OpUpdateMetadata ) , ApplyHyperlink : h ( ops . OpApplyHyperlink ) ,
RemoveHyperlink : h ( ops . OpRemoveHyperlink ) } } ; ops . OperationRouter = function ( ) { } ; ops . OperationRouter . prototype . setOperationFactory = function ( h ) { } ; ops . OperationRouter . prototype . setPlaybackFunction = function ( h ) { } ; ops . OperationRouter . prototype . push = function ( h ) { } ; ops . OperationRouter . prototype . close = function ( h ) { } ; ops . OperationRouter . prototype . subscribe = function ( h , k ) { } ; ops . OperationRouter . prototype . unsubscribe = function ( h , k ) { } ; ops . OperationRouter . prototype . hasLocalUnsyncedOps = function ( ) { } ; ops . OperationRouter . prototype . hasSessionHostConnection = function ( ) { } ;
ops . OperationRouter . signalProcessingBatchStart = "router/batchstart" ; ops . OperationRouter . signalProcessingBatchEnd = "router/batchend" ; ops . TrivialOperationRouter = function ( ) { var h = new core . EventNotifier ( [ ops . OperationRouter . signalProcessingBatchStart , ops . OperationRouter . signalProcessingBatchEnd ] ) , k , c , b = 0 ; this . setOperationFactory = function ( b ) { k = b } ; this . setPlaybackFunction = function ( b ) { c = b } ; this . push = function ( g ) { b += 1 ; h . emit ( ops . OperationRouter . signalProcessingBatchStart , { } ) ; g . forEach ( function ( g ) { g = g . spec ( ) ; g . timestamp = Date . now ( ) ; g = k . create ( g ) ; g . group = "g" + b ; c ( g ) } ) ; h . emit ( ops . OperationRouter . signalProcessingBatchEnd , { } ) } ; this . close = function ( b ) { b ( ) } ;
this . subscribe = function ( b , c ) { h . subscribe ( b , c ) } ; this . unsubscribe = function ( b , c ) { h . unsubscribe ( b , c ) } ; this . hasLocalUnsyncedOps = function ( ) { return ! 1 } ; this . hasSessionHostConnection = function ( ) { return ! 0 } } ; ops . Session = function ( h ) { function k ( b ) { g . emit ( ops . OdtDocument . signalProcessingBatchStart , b ) } function c ( b ) { g . emit ( ops . OdtDocument . signalProcessingBatchEnd , b ) } var b = new ops . OperationFactory , g = new ops . OdtDocument ( h ) , n = null ; this . setOperationFactory = function ( c ) { b = c ; n && n . setOperationFactory ( b ) } ; this . setOperationRouter = function ( h ) { n && ( n . unsubscribe ( ops . OperationRouter . signalProcessingBatchStart , k ) , n . unsubscribe ( ops . OperationRouter . signalProcessingBatchEnd , c ) ) ; n = h ; n . subscribe ( ops . OperationRouter . signalProcessingBatchStart ,
k ) ; n . subscribe ( ops . OperationRouter . signalProcessingBatchEnd , c ) ; h . setPlaybackFunction ( function ( b ) { g . emit ( ops . OdtDocument . signalOperationStart , b ) ; return b . execute ( g ) ? ( g . emit ( ops . OdtDocument . signalOperationEnd , b ) , ! 0 ) : ! 1 } ) ; h . setOperationFactory ( b ) } ; this . getOperationFactory = function ( ) { return b } ; this . getOdtDocument = function ( ) { return g } ; this . enqueue = function ( b ) { n . push ( b ) } ; this . close = function ( b ) { n . close ( function ( c ) { c ? b ( c ) : g . close ( b ) } ) } ; this . destroy = function ( b ) { g . destroy ( b ) } ; this . setOperationRouter ( new ops . TrivialOperationRouter ) } ; gui . AnnotationController = function ( h , k , c ) { function b ( ) { var a = m . getCursor ( c ) , a = a && a . getNode ( ) , b = ! 1 ; a && ( b = ! e . isWithinAnnotation ( a , m . getRootNode ( ) ) ) ; b !== q && ( q = b , f . emit ( gui . AnnotationController . annotatableChanged , q ) ) } function g ( a ) { a . getMemberId ( ) === c && b ( ) } function n ( a ) { a === c && b ( ) } function p ( a ) { a . getMemberId ( ) === c && b ( ) } var m = h . getOdtDocument ( ) , q = ! 1 , f = new core . EventNotifier ( [ gui . AnnotationController . annotatableChanged ] ) , e = odf . OdfUtils , a = core . StepDirection . NEXT ; this . isAnnotatable = function ( ) { return q } ; this . addAnnotation =
function ( ) { var a = new ops . OpAddAnnotation , b = m . getCursorSelection ( c ) , e = b . length , b = b . position ; q && ( 0 === e ? e = void 0 : ( b = 0 <= e ? b : b + e , e = Math . abs ( e ) ) , a . init ( { memberid : c , position : b , length : e , name : c + Date . now ( ) } ) , h . enqueue ( [ a ] ) ) } ; this . removeAnnotation = function ( b ) { var f , g ; f = m . getMember ( c ) . getProperties ( ) . fullName ; if ( ! 0 !== k . getState ( gui . CommonConstraints . EDIT . ANNOTATIONS . ONLY _DELETE _OWN ) || f === e . getAnnotationCreator ( b ) ) f = m . convertDomPointToCursorStep ( b , 0 , a ) , g = m . convertDomPointToCursorStep ( b , b . childNodes . length ) , b =
new ops . OpRemoveAnnotation , b . init ( { memberid : c , position : f , length : g - f } ) , g = new ops . OpMoveCursor , g . init ( { memberid : c , position : 0 < f ? f - 1 : f , length : 0 } ) , h . enqueue ( [ b , g ] ) } ; this . subscribe = function ( a , b ) { f . subscribe ( a , b ) } ; this . unsubscribe = function ( a , b ) { f . unsubscribe ( a , b ) } ; this . destroy = function ( a ) { m . unsubscribe ( ops . Document . signalCursorAdded , g ) ; m . unsubscribe ( ops . Document . signalCursorRemoved , n ) ; m . unsubscribe ( ops . Document . signalCursorMoved , p ) ; a ( ) } ; k . registerConstraint ( gui . CommonConstraints . EDIT . ANNOTATIONS . ONLY _DELETE _OWN ) ;
m . subscribe ( ops . Document . signalCursorAdded , g ) ; m . subscribe ( ops . Document . signalCursorRemoved , n ) ; m . subscribe ( ops . Document . signalCursorMoved , p ) ; b ( ) } ; gui . AnnotationController . annotatableChanged = "annotatable/changed" ; gui . Avatar = function ( h , k ) { var c = this , b , g , n ; this . setColor = function ( b ) { g . style . borderColor = b } ; this . setImageUrl = function ( b ) { c . isVisible ( ) ? g . src = b : n = b } ; this . isVisible = function ( ) { return "block" === b . style . display } ; this . show = function ( ) { n && ( g . src = n , n = void 0 ) ; b . style . display = "block" } ; this . hide = function ( ) { b . style . display = "none" } ; this . markAsFocussed = function ( c ) { c ? b . classList . add ( "active" ) : b . classList . remove ( "active" ) } ; this . destroy = function ( c ) { h . removeChild ( b ) ; c ( ) } ; ( function ( ) { var c = h . ownerDocument ; b = c . createElement ( "div" ) ;
g = c . createElement ( "img" ) ; b . appendChild ( g ) ; b . style . display = k ? "block" : "none" ; b . className = "handle" ; h . appendChild ( b ) } ) ( ) } ; gui . StepInfo = function ( ) { } ; gui . StepInfo . VisualDirection = { LEFT _TO _RIGHT : 0 , RIGHT _TO _LEFT : 1 } ; gui . StepInfo . prototype . container = function ( ) { } ; gui . StepInfo . prototype . offset = function ( ) { } ; gui . VisualStepScanner = function ( ) { } ; gui . VisualStepScanner . prototype . process = function ( h , k , c ) { } ; gui . GuiStepUtils = function ( ) { function h ( g ) { g = c . getContentBounds ( g ) ; var h , f = null ; if ( g ) if ( g . container . nodeType === Node . TEXT _NODE ) h = g . container . ownerDocument . createRange ( ) , h . setStart ( g . container , g . startOffset ) , h . setEnd ( g . container , g . endOffset ) , ( f = 0 < h . getClientRects ( ) . length ? h . getBoundingClientRect ( ) : null ) && " " === g . container . data . substring ( g . startOffset , g . endOffset ) && 1 >= f . width && ( f = null ) , h . detach ( ) ; else if ( k . isCharacterElement ( g . container ) || k . isCharacterFrame ( g . container ) ) f = b . getBoundingClientRect ( g . container ) ;
return f } var k = odf . OdfUtils , c = new odf . StepUtils , b = core . DomUtils , g = core . StepDirection . NEXT , n = gui . StepInfo . VisualDirection . LEFT _TO _RIGHT , p = gui . StepInfo . VisualDirection . RIGHT _TO _LEFT ; this . getContentRect = h ; this . moveToFilteredStep = function ( b , c , f ) { function e ( a , b ) { b . process ( z , l , B ) && ( a = ! 0 , ! y && b . token && ( y = b . token ) ) ; return a } var a = c === g , d , k , l , B , y , D = b . snapshot ( ) ; d = ! 1 ; var z ; do d = h ( b ) , z = { token : b . snapshot ( ) , container : b . container , offset : b . offset , direction : c , visualDirection : c === g ? n : p } , k = b . nextStep ( ) ? h ( b ) : null , b . restore ( z . token ) ,
a ? ( l = d , B = k ) : ( l = k , B = d ) , d = f . reduce ( e , ! 1 ) ; while ( ! d && b . advanceStep ( c ) ) ; d || f . forEach ( function ( a ) { ! y && a . token && ( y = a . token ) } ) ; b . restore ( y || D ) ; return Boolean ( y ) } } ; gui . Caret = function ( h , k , c , b ) { function g ( ) { a . style . opacity = "0" === a . style . opacity ? "1" : "0" ; w . trigger ( ) } function n ( ) { B . selectNodeContents ( l ) ; return B . getBoundingClientRect ( ) } function p ( a ) { return A [ a ] !== G [ a ] } function m ( ) { Object . keys ( G ) . forEach ( function ( a ) { A [ a ] = G [ a ] } ) } function q ( ) { if ( ! 1 === G . isShown || h . getSelectionType ( ) !== ops . OdtCursor . RangeSelection || ! b && ! h . getSelectedRange ( ) . collapsed ) G . visibility = "hidden" , a . style . visibility = "hidden" , w . cancel ( ) ; else if ( G . visibility = "visible" , a . style . visibility = "visible" ,
! 1 === G . isFocused ) a . style . opacity = "1" , w . cancel ( ) ; else { if ( F || p ( "visibility" ) ) a . style . opacity = "1" , w . cancel ( ) ; w . trigger ( ) } if ( H || L ) { var c ; c = h . getNode ( ) ; var f , g , l = D . getBoundingClientRect ( y . getSizer ( ) ) , q = ! 1 , B = 0 ; c . removeAttributeNS ( "urn:webodf:names:cursor" , "caret-sizer-active" ) ; if ( 0 < c . getClientRects ( ) . length ) g = n ( ) , B = g . left - D . getBoundingClientRect ( c ) . left , q = ! 0 ; else if ( t . setPosition ( c , 0 ) , g = z . getContentRect ( t ) , ! g && t . nextStep ( ) && ( f = z . getContentRect ( t ) ) && ( g = f , q = ! 0 ) , g || ( c . setAttributeNS ( "urn:webodf:names:cursor" ,
"caret-sizer-active" , "true" ) , g = n ( ) , q = ! 0 ) , ! g ) for ( runtime . log ( "WARN: No suitable client rectangle found for visual caret for " + h . getMemberId ( ) ) ; c ; ) { if ( 0 < c . getClientRects ( ) . length ) { g = D . getBoundingClientRect ( c ) ; q = ! 0 ; break } c = c . parentNode } g = D . translateRect ( g , l , y . getZoomLevel ( ) ) ; c = { top : g . top , height : g . height , right : q ? g . left : g . right , width : D . adaptRangeDifferenceToZoomLevel ( B , y . getZoomLevel ( ) ) } ; 8 > c . height && ( c = { top : c . top - ( 8 - c . height ) / 2 , height : 8 , right : c . right } ) ; e . style . height = c . height + "px" ; e . style . top = c . top + "px" ;
e . style . left = c . right - c . width + "px" ; e . style . width = c . width ? c . width + "px" : "" ; r && ( c = runtime . getWindow ( ) . getComputedStyle ( h . getNode ( ) , null ) , c . font ? r . style . font = c . font : ( r . style . fontStyle = c . fontStyle , r . style . fontVariant = c . fontVariant , r . style . fontWeight = c . fontWeight , r . style . fontSize = c . fontSize , r . style . lineHeight = c . lineHeight , r . style . fontFamily = c . fontFamily ) ) } G . isShown && L && k . scrollIntoView ( a . getBoundingClientRect ( ) ) ; p ( "isFocused" ) && d . markAsFocussed ( G . isFocused ) ; m ( ) ; H = L = F = ! 1 } function f ( a ) { e . parentNode . removeChild ( e ) ;
l . parentNode . removeChild ( l ) ; a ( ) } var e , a , d , r , l , B , y = h . getDocument ( ) . getCanvas ( ) , D = core . DomUtils , z = new gui . GuiStepUtils , t , x , w , F = ! 1 , L = ! 1 , H = ! 1 , G = { isFocused : ! 1 , isShown : ! 0 , visibility : "hidden" } , A = { isFocused : ! G . isFocused , isShown : ! G . isShown , visibility : "hidden" } ; this . handleUpdate = function ( ) { H = ! 0 ; x . trigger ( ) } ; this . refreshCursorBlinking = function ( ) { F = ! 0 ; x . trigger ( ) } ; this . setFocus = function ( ) { G . isFocused = ! 0 ; x . trigger ( ) } ; this . removeFocus = function ( ) { G . isFocused = ! 1 ; x . trigger ( ) } ; this . show = function ( ) { G . isShown = ! 0 ; x . trigger ( ) } ;
this . hide = function ( ) { G . isShown = ! 1 ; x . trigger ( ) } ; this . setAvatarImageUrl = function ( a ) { d . setImageUrl ( a ) } ; this . setColor = function ( b ) { a . style . borderColor = b ; d . setColor ( b ) } ; this . getCursor = function ( ) { return h } ; this . getFocusElement = function ( ) { return a } ; this . toggleHandleVisibility = function ( ) { d . isVisible ( ) ? d . hide ( ) : d . show ( ) } ; this . showHandle = function ( ) { d . show ( ) } ; this . hideHandle = function ( ) { d . hide ( ) } ; this . setOverlayElement = function ( a ) { r = a ; e . appendChild ( a ) ; H = ! 0 ; x . trigger ( ) } ; this . ensureVisible = function ( ) { L = ! 0 ; x . trigger ( ) } ;
this . getBoundingClientRect = function ( ) { return D . getBoundingClientRect ( e ) } ; this . destroy = function ( a ) { core . Async . destroyAll ( [ x . destroy , w . destroy , d . destroy , f ] , a ) } ; ( function ( ) { var b = h . getDocument ( ) , f = [ b . createRootFilter ( h . getMemberId ( ) ) , b . getPositionFilter ( ) ] , k = b . getDOMDocument ( ) ; B = k . createRange ( ) ; l = k . createElement ( "span" ) ; l . className = "webodf-caretSizer" ; l . textContent = "|" ; h . getNode ( ) . appendChild ( l ) ; e = k . createElement ( "div" ) ; e . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" , h . getMemberId ( ) ) ;
e . className = "webodf-caretOverlay" ; a = k . createElement ( "div" ) ; a . className = "caret" ; e . appendChild ( a ) ; d = new gui . Avatar ( e , c ) ; y . getSizer ( ) . appendChild ( e ) ; t = b . createStepIterator ( h . getNode ( ) , 0 , f , b . getRootNode ( ) ) ; x = core . Task . createRedrawTask ( q ) ; w = core . Task . createTimeoutTask ( g , 500 ) ; x . triggerImmediate ( ) } ) ( ) } ; odf . TextSerializer = function ( ) { function h ( b ) { var g = "" , n = k . filter ? k . filter . acceptNode ( b ) : NodeFilter . FILTER _ACCEPT , p = b . nodeType , m ; if ( ( n === NodeFilter . FILTER _ACCEPT || n === NodeFilter . FILTER _SKIP ) && c . isTextContentContainingNode ( b ) ) for ( m = b . firstChild ; m ; ) g += h ( m ) , m = m . nextSibling ; n === NodeFilter . FILTER _ACCEPT && ( p === Node . ELEMENT _NODE && c . isParagraph ( b ) ? g += "\n" : p === Node . TEXT _NODE && b . textContent && ( g += b . textContent ) ) ; return g } var k = this , c = odf . OdfUtils ; this . filter = null ; this . writeToString = function ( b ) { if ( ! b ) return "" ;
b = h ( b ) ; "\n" === b [ b . length - 1 ] && ( b = b . substr ( 0 , b . length - 1 ) ) ; return b } } ; gui . MimeDataExporter = function ( ) { var h ; this . exportRangeToDataTransfer = function ( k , c ) { var b ; b = c . startContainer . ownerDocument . createElement ( "span" ) ; b . appendChild ( c . cloneContents ( ) ) ; b = h . writeToString ( b ) ; try { k . setData ( "text/plain" , b ) } catch ( g ) { k . setData ( "Text" , b ) } } ; h = new odf . TextSerializer ; h . filter = new odf . OdfNodeFilter } ; gui . Clipboard = function ( h ) { this . setDataFromRange = function ( k , c ) { var b , g = k . clipboardData ; b = runtime . getWindow ( ) ; ! g && b && ( g = b . clipboardData ) ; g ? ( b = ! 0 , h . exportRangeToDataTransfer ( g , c ) , k . preventDefault ( ) ) : b = ! 1 ; return b } } ; gui . SessionContext = function ( h , k ) { var c = h . getOdtDocument ( ) , b = odf . OdfUtils ; this . isLocalCursorWithinOwnAnnotation = function ( ) { var g = c . getCursor ( k ) , h ; if ( ! g ) return ! 1 ; h = g && g . getNode ( ) ; g = c . getMember ( k ) . getProperties ( ) . fullName ; return ( h = b . getParentAnnotation ( h , c . getRootNode ( ) ) ) && b . getAnnotationCreator ( h ) === g ? ! 0 : ! 1 } } ; gui . StyleSummary = function ( h ) { function k ( b , c ) { var k = b + "|" + c , q ; g . hasOwnProperty ( k ) || ( q = [ ] , h . forEach ( function ( f ) { f = ( f = f . styleProperties [ b ] ) && f [ c ] ; - 1 === q . indexOf ( f ) && q . push ( f ) } ) , g [ k ] = q ) ; return g [ k ] } function c ( b , c , g ) { return function ( ) { var h = k ( b , c ) ; return g . length >= h . length && h . every ( function ( b ) { return - 1 !== g . indexOf ( b ) } ) } } function b ( b , c ) { var g = k ( b , c ) ; return 1 === g . length ? g [ 0 ] : void 0 } var g = { } ; this . getPropertyValues = k ; this . getCommonValue = b ; this . isBold = c ( "style:text-properties" , "fo:font-weight" , [ "bold" ] ) ; this . isItalic =
c ( "style:text-properties" , "fo:font-style" , [ "italic" ] ) ; this . hasUnderline = c ( "style:text-properties" , "style:text-underline-style" , [ "solid" ] ) ; this . hasStrikeThrough = c ( "style:text-properties" , "style:text-line-through-style" , [ "solid" ] ) ; this . fontSize = function ( ) { var c = b ( "style:text-properties" , "fo:font-size" ) ; return c && parseFloat ( c ) } ; this . fontName = function ( ) { return b ( "style:text-properties" , "style:font-name" ) } ; this . isAlignedLeft = c ( "style:paragraph-properties" , "fo:text-align" , [ "left" , "start" ] ) ; this . isAlignedCenter =
c ( "style:paragraph-properties" , "fo:text-align" , [ "center" ] ) ; this . isAlignedRight = c ( "style:paragraph-properties" , "fo:text-align" , [ "right" , "end" ] ) ; this . isAlignedJustified = c ( "style:paragraph-properties" , "fo:text-align" , [ "justify" ] ) ; this . text = { isBold : this . isBold , isItalic : this . isItalic , hasUnderline : this . hasUnderline , hasStrikeThrough : this . hasStrikeThrough , fontSize : this . fontSize , fontName : this . fontName } ; this . paragraph = { isAlignedLeft : this . isAlignedLeft , isAlignedCenter : this . isAlignedCenter , isAlignedRight : this . isAlignedRight ,
isAlignedJustified : this . isAlignedJustified } } ; gui . DirectFormattingController = function ( h , k , c , b , g , n , p ) { function m ( ) { return X . value ( ) . styleSummary } function q ( ) { return X . value ( ) . enabledFeatures } function f ( a ) { var b ; a . collapsed ? ( b = a . startContainer , b . hasChildNodes ( ) && a . startOffset < b . childNodes . length && ( b = b . childNodes . item ( a . startOffset ) ) , a = [ b ] ) : a = T . getTextElements ( a , ! 0 , ! 1 ) ; return a } function e ( ) { var a = P . getCursor ( b ) , d = a && a . getSelectedRange ( ) , e = [ ] , e = [ ] , g = ! 0 , h = { directTextStyling : ! 0 , directParagraphStyling : ! 0 } ; d && ( e = f ( d ) , 0 === e . length && ( e = [ d . startContainer ,
d . endContainer ] , g = ! 1 ) , e = P . getFormatting ( ) . getAppliedStyles ( e ) ) ; void 0 !== e [ 0 ] && Z && ( e [ 0 ] . styleProperties = U . mergeObjects ( e [ 0 ] . styleProperties , Z ) ) ; ! 0 === k . getState ( gui . CommonConstraints . EDIT . REVIEW _MODE ) && ( h . directTextStyling = h . directParagraphStyling = c . isLocalCursorWithinOwnAnnotation ( ) ) ; h . directTextStyling && ( h . directTextStyling = g && void 0 !== a && a . getSelectionType ( ) === ops . OdtCursor . RangeSelection ) ; return { enabledFeatures : h , appliedStyles : e , styleSummary : new gui . StyleSummary ( e ) } } function a ( a , b ) { var d = { } ; Object . keys ( a ) . forEach ( function ( c ) { var e =
a [ c ] ( ) , f = b [ c ] ( ) ; e !== f && ( d [ c ] = f ) } ) ; return d } function d ( ) { var b , d ; d = da . styleSummary ; var c = X . value ( ) , e = c . styleSummary , f = da . enabledFeatures , g = c . enabledFeatures ; b = a ( d . text , e . text ) ; d = a ( d . paragraph , e . paragraph ) ; f = ! ( g . directTextStyling === f . directTextStyling && g . directParagraphStyling === f . directParagraphStyling ) ; da = c ; f && ca . emit ( gui . DirectFormattingController . enabledChanged , g ) ; 0 < Object . keys ( b ) . length && ca . emit ( gui . DirectFormattingController . textStylingChanged , b ) ; 0 < Object . keys ( d ) . length && ca . emit ( gui . DirectFormattingController . paragraphStylingChanged ,
d ) } function r ( ) { X . reset ( ) ; d ( ) } function l ( a ) { ( "string" === typeof a ? a : a . getMemberId ( ) ) === b && X . reset ( ) } function B ( ) { X . reset ( ) } function y ( a ) { var d = P . getCursor ( b ) ; a = a . paragraphElement ; d && T . getParagraphElement ( d . getNode ( ) ) === a && X . reset ( ) } function D ( a , b ) { b ( ! a ( ) ) ; return ! 0 } function z ( a ) { if ( q ( ) . directTextStyling ) { var d = P . getCursorSelection ( b ) , c = { "style:text-properties" : a } ; 0 !== d . length ? ( a = new ops . OpApplyDirectStyling , a . init ( { memberid : b , position : d . position , length : d . length , setProperties : c } ) , h . enqueue ( [ a ] ) ) : ( Z =
U . mergeObjects ( Z || { } , c ) , X . reset ( ) ) } } function t ( a , b ) { var d = { } ; d [ a ] = b ; z ( d ) } function x ( a ) { a = a . spec ( ) ; Z && a . memberid === b && "SplitParagraph" !== a . optype && ( Z = null , X . reset ( ) ) } function w ( a ) { t ( "fo:font-weight" , a ? "bold" : "normal" ) } function F ( a ) { t ( "fo:font-style" , a ? "italic" : "normal" ) } function L ( a ) { t ( "style:text-underline-style" , a ? "solid" : "none" ) } function H ( a ) { t ( "style:text-line-through-style" , a ? "solid" : "none" ) } function G ( a ) { if ( q ( ) . directParagraphStyling ) { var d = P . getCursor ( b ) . getSelectedRange ( ) , d = T . getParagraphElements ( d ) ,
c = P . getFormatting ( ) , e = [ ] , f = { } , l ; d . forEach ( function ( d ) { var h = P . convertDomPointToCursorStep ( d , 0 , E ) , k = d . getAttributeNS ( odf . Namespaces . textns , "style-name" ) , r ; d = k ? f . hasOwnProperty ( k ) ? f [ k ] : void 0 : l ; d || ( d = g . generateStyleName ( ) , k ? ( f [ k ] = d , r = c . createDerivedStyleObject ( k , "paragraph" , { } ) ) : ( l = d , r = { } ) , r = a ( r ) , k = new ops . OpAddStyle , k . init ( { memberid : b , styleName : d . toString ( ) , styleFamily : "paragraph" , isAutomaticStyle : ! 0 , setProperties : r } ) , e . push ( k ) ) ; k = new ops . OpSetParagraphStyle ; k . init ( { memberid : b , styleName : d . toString ( ) ,
position : h } ) ; e . push ( k ) } ) ; h . enqueue ( e ) } } function A ( a ) { G ( function ( b ) { return U . mergeObjects ( b , a ) } ) } function K ( a ) { A ( { "style:paragraph-properties" : { "fo:text-align" : a } } ) } function v ( a , b ) { var d = P . getFormatting ( ) . getDefaultTabStopDistance ( ) , c = b [ "style:paragraph-properties" ] , e ; c && ( c = c [ "fo:margin-left" ] , e = T . parseLength ( c ) ) ; return U . mergeObjects ( b , { "style:paragraph-properties" : { "fo:margin-left" : e && e . unit === d . unit ? e . value + a * d . value + e . unit : a * d . value + d . unit } } ) } function u ( a , b ) { var d = f ( a ) , d = 0 === d . length ? [ a . startContainer ] :
d , d = P . getFormatting ( ) . getAppliedStyles ( d ) , c = 0 < d . length ? d [ 0 ] . styleProperties : void 0 , e = P . getFormatting ( ) . getAppliedStylesForElement ( b ) . styleProperties ; if ( ! c || "text" !== c [ "style:family" ] || ! c [ "style:text-properties" ] ) return ! 1 ; if ( ! e || ! e [ "style:text-properties" ] ) return ! 0 ; c = c [ "style:text-properties" ] ; e = e [ "style:text-properties" ] ; return ! Object . keys ( c ) . every ( function ( a ) { return c [ a ] === e [ a ] } ) } function Q ( ) { } function R ( ) { return ! 1 } function C ( ) { return ! 1 } var I = this , P = h . getOdtDocument ( ) , U = new core . Utils , T = odf . OdfUtils ,
ca = new core . EventNotifier ( [ gui . DirectFormattingController . enabledChanged , gui . DirectFormattingController . textStylingChanged , gui . DirectFormattingController . paragraphStylingChanged ] ) , Y = odf . Namespaces . textns , E = core . StepDirection . NEXT , Z = null , da , X ; this . enabledFeatures = q ; this . formatTextSelection = z ; this . createCursorStyleOp = function ( a , d , c ) { var e = null , f = Z ; c && ( f = ( c = X . value ( ) . appliedStyles [ 0 ] ) && c . styleProperties ) ; f && f [ "style:text-properties" ] && ( e = new ops . OpApplyDirectStyling , e . init ( { memberid : b , position : a , length : d ,
setProperties : { "style:text-properties" : f [ "style:text-properties" ] } } ) , Z = null , X . reset ( ) ) ; return e } ; this . setBold = w ; this . setItalic = F ; this . setHasUnderline = L ; this . setHasStrikethrough = H ; this . setFontSize = function ( a ) { t ( "fo:font-size" , a + "pt" ) } ; this . setFontName = function ( a ) { t ( "style:font-name" , a ) } ; this . getAppliedStyles = function ( ) { return X . value ( ) . appliedStyles } ; this . toggleBold = D . bind ( I , function ( ) { return m ( ) . isBold ( ) } , w ) ; this . toggleItalic = D . bind ( I , function ( ) { return m ( ) . isItalic ( ) } , F ) ; this . toggleUnderline = D . bind ( I ,
function ( ) { return m ( ) . hasUnderline ( ) } , L ) ; this . toggleStrikethrough = D . bind ( I , function ( ) { return m ( ) . hasStrikeThrough ( ) } , H ) ; this . isBold = function ( ) { return m ( ) . isBold ( ) } ; this . isItalic = function ( ) { return m ( ) . isItalic ( ) } ; this . hasUnderline = function ( ) { return m ( ) . hasUnderline ( ) } ; this . hasStrikeThrough = function ( ) { return m ( ) . hasStrikeThrough ( ) } ; this . fontSize = function ( ) { return m ( ) . fontSize ( ) } ; this . fontName = function ( ) { return m ( ) . fontName ( ) } ; this . isAlignedLeft = function ( ) { return m ( ) . isAlignedLeft ( ) } ; this . isAlignedCenter =
function ( ) { return m ( ) . isAlignedCenter ( ) } ; this . isAlignedRight = function ( ) { return m ( ) . isAlignedRight ( ) } ; this . isAlignedJustified = function ( ) { return m ( ) . isAlignedJustified ( ) } ; this . alignParagraphLeft = function ( ) { K ( "left" ) ; return ! 0 } ; this . alignParagraphCenter = function ( ) { K ( "center" ) ; return ! 0 } ; this . alignParagraphRight = function ( ) { K ( "right" ) ; return ! 0 } ; this . alignParagraphJustified = function ( ) { K ( "justify" ) ; return ! 0 } ; this . indent = function ( ) { G ( v . bind ( null , 1 ) ) ; return ! 0 } ; this . outdent = function ( ) { G ( v . bind ( null , - 1 ) ) ; return ! 0 } ;
this . createParagraphStyleOps = function ( a ) { if ( ! q ( ) . directParagraphStyling ) return [ ] ; var d = P . getCursor ( b ) , c = d . getSelectedRange ( ) , e = [ ] , f , h ; d . hasForwardSelection ( ) ? ( f = d . getAnchorNode ( ) , h = d . getNode ( ) ) : ( f = d . getNode ( ) , h = d . getAnchorNode ( ) ) ; d = T . getParagraphElement ( h ) ; runtime . assert ( Boolean ( d ) , "DirectFormattingController: Cursor outside paragraph" ) ; var l = d , k = [ P . getPositionFilter ( ) , P . createRootFilter ( b ) ] ; if ( ! 1 !== P . createStepIterator ( c . endContainer , c . endOffset , k , l ) . nextStep ( ) ) return e ; h !== f && ( d = T . getParagraphElement ( f ) ) ;
if ( ! Z && ! u ( c , d ) ) return e ; c = ( c = X . value ( ) . appliedStyles [ 0 ] ) && c . styleProperties ; if ( ! c ) return e ; if ( d = d . getAttributeNS ( Y , "style-name" ) ) c = { "style:text-properties" : c [ "style:text-properties" ] } , c = P . getFormatting ( ) . createDerivedStyleObject ( d , "paragraph" , c ) ; f = g . generateStyleName ( ) ; d = new ops . OpAddStyle ; d . init ( { memberid : b , styleName : f , styleFamily : "paragraph" , isAutomaticStyle : ! 0 , setProperties : c } ) ; e . push ( d ) ; d = new ops . OpSetParagraphStyle ; d . init ( { memberid : b , styleName : f , position : a } ) ; e . push ( d ) ; return e } ; this . subscribe =
function ( a , b ) { ca . subscribe ( a , b ) } ; this . unsubscribe = function ( a , b ) { ca . unsubscribe ( a , b ) } ; this . destroy = function ( a ) { P . unsubscribe ( ops . Document . signalCursorAdded , l ) ; P . unsubscribe ( ops . Document . signalCursorRemoved , l ) ; P . unsubscribe ( ops . Document . signalCursorMoved , l ) ; P . unsubscribe ( ops . OdtDocument . signalParagraphStyleModified , B ) ; P . unsubscribe ( ops . OdtDocument . signalParagraphChanged , y ) ; P . unsubscribe ( ops . OdtDocument . signalOperationEnd , x ) ; P . unsubscribe ( ops . OdtDocument . signalProcessingBatchEnd , d ) ; k . unsubscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE ,
r ) ; a ( ) } ; ( function ( ) { P . subscribe ( ops . Document . signalCursorAdded , l ) ; P . subscribe ( ops . Document . signalCursorRemoved , l ) ; P . subscribe ( ops . Document . signalCursorMoved , l ) ; P . subscribe ( ops . OdtDocument . signalParagraphStyleModified , B ) ; P . subscribe ( ops . OdtDocument . signalParagraphChanged , y ) ; P . subscribe ( ops . OdtDocument . signalOperationEnd , x ) ; P . subscribe ( ops . OdtDocument . signalProcessingBatchEnd , d ) ; k . subscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , r ) ; X = new core . LazyProperty ( e ) ; da = X . value ( ) ; n || ( I . formatTextSelection = Q ,
I . setBold = Q , I . setItalic = Q , I . setHasUnderline = Q , I . setHasStrikethrough = Q , I . setFontSize = Q , I . setFontName = Q , I . toggleBold = C , I . toggleItalic = C , I . toggleUnderline = C , I . toggleStrikethrough = C ) ; p || ( I . alignParagraphCenter = R , I . alignParagraphJustified = R , I . alignParagraphLeft = R , I . alignParagraphRight = R , I . createParagraphStyleOps = function ( ) { return [ ] } , I . indent = R , I . outdent = R ) } ) ( ) } ; gui . DirectFormattingController . enabledChanged = "enabled/changed" ; gui . DirectFormattingController . textStylingChanged = "textStyling/changed" ;
gui . DirectFormattingController . paragraphStylingChanged = "paragraphStyling/changed" ; gui . DirectFormattingController . SelectionInfo = function ( ) { } ; gui . KeyboardHandler = function ( ) { function h ( b , c ) { c || ( c = k . None ) ; switch ( b ) { case gui . KeyboardHandler . KeyCode . LeftMeta : case gui . KeyboardHandler . KeyCode . RightMeta : case gui . KeyboardHandler . KeyCode . MetaInMozilla : c |= k . Meta ; break ; case gui . KeyboardHandler . KeyCode . Ctrl : c |= k . Ctrl ; break ; case gui . KeyboardHandler . KeyCode . Alt : c |= k . Alt ; break ; case gui . KeyboardHandler . KeyCode . Shift : c |= k . Shift } return b + ":" + c } var k = gui . KeyboardHandler . Modifier , c = null , b = { } ; this . setDefault = function ( b ) { c = b } ; this . bind = function ( c , k , p , m ) { c = h ( c ,
k ) ; runtime . assert ( m || ! 1 === b . hasOwnProperty ( c ) , "tried to overwrite the callback handler of key combo: " + c ) ; b [ c ] = p } ; this . unbind = function ( c , k ) { var p = h ( c , k ) ; delete b [ p ] } ; this . reset = function ( ) { c = null ; b = { } } ; this . handleEvent = function ( g ) { var n = g . keyCode , p = k . None ; g . metaKey && ( p |= k . Meta ) ; g . ctrlKey && ( p |= k . Ctrl ) ; g . altKey && ( p |= k . Alt ) ; g . shiftKey && ( p |= k . Shift ) ; n = h ( n , p ) ; n = b [ n ] ; p = ! 1 ; n ? p = n ( ) : null !== c && ( p = c ( g ) ) ; p && ( g . preventDefault ? g . preventDefault ( ) : g . returnValue = ! 1 ) } } ;
gui . KeyboardHandler . Modifier = { None : 0 , Meta : 1 , Ctrl : 2 , Alt : 4 , CtrlAlt : 6 , Shift : 8 , MetaShift : 9 , CtrlShift : 10 , AltShift : 12 } ; gui . KeyboardHandler . KeyCode = { Backspace : 8 , Tab : 9 , Clear : 12 , Enter : 13 , Shift : 16 , Ctrl : 17 , Alt : 18 , End : 35 , Home : 36 , Left : 37 , Up : 38 , Right : 39 , Down : 40 , Delete : 46 , A : 65 , B : 66 , C : 67 , D : 68 , E : 69 , F : 70 , G : 71 , H : 72 , I : 73 , J : 74 , K : 75 , L : 76 , M : 77 , N : 78 , O : 79 , P : 80 , Q : 81 , R : 82 , S : 83 , T : 84 , U : 85 , V : 86 , W : 87 , X : 88 , Y : 89 , Z : 90 , LeftMeta : 91 , RightMeta : 93 , MetaInMozilla : 224 } ; gui . HyperlinkClickHandler = function ( h , k , c ) { function b ( ) { var a = h ( ) ; runtime . assert ( Boolean ( a . classList ) , "Document container has no classList element" ) ; a . classList . remove ( "webodf-inactiveLinks" ) } function g ( ) { var a = h ( ) ; runtime . assert ( Boolean ( a . classList ) , "Document container has no classList element" ) ; a . classList . add ( "webodf-inactiveLinks" ) } function n ( ) { a . removeEventListener ( "focus" , g , ! 1 ) ; r . forEach ( function ( a ) { k . unbind ( a . keyCode , a . modifier ) ; c . unbind ( a . keyCode , a . modifier ) } ) ; r . length = 0 } function p ( d ) { n ( ) ;
if ( d !== m . None ) { a . addEventListener ( "focus" , g , ! 1 ) ; switch ( d ) { case m . Ctrl : r . push ( { keyCode : q . Ctrl , modifier : m . None } ) ; break ; case m . Meta : r . push ( { keyCode : q . LeftMeta , modifier : m . None } ) , r . push ( { keyCode : q . RightMeta , modifier : m . None } ) , r . push ( { keyCode : q . MetaInMozilla , modifier : m . None } ) } r . forEach ( function ( a ) { k . bind ( a . keyCode , a . modifier , b ) ; c . bind ( a . keyCode , a . modifier , g ) } ) } } var m = gui . KeyboardHandler . Modifier , q = gui . KeyboardHandler . KeyCode , f = xmldom . XPath , e = odf . OdfUtils , a = runtime . getWindow ( ) , d = m . None , r = [ ] ; runtime . assert ( null !==
a , "Expected to be run in an environment which has a global window, like a browser." ) ; this . handleClick = function ( b ) { var c = b . target || b . srcElement , g , k ; b . ctrlKey ? g = m . Ctrl : b . metaKey && ( g = m . Meta ) ; if ( d === m . None || d === g ) { a : { for ( ; null !== c ; ) { if ( e . isHyperlink ( c ) ) break a ; if ( e . isParagraph ( c ) ) break ; c = c . parentNode } c = null } c && ( c = e . getHyperlinkTarget ( c ) , "" !== c && ( "#" === c [ 0 ] ? ( c = c . substring ( 1 ) , g = h ( ) , k = f . getODFElementsWithXPath ( g , "//text:bookmark-start[@text:name='" + c + "']" , odf . Namespaces . lookupNamespaceURI ) , 0 === k . length &&
( k = f . getODFElementsWithXPath ( g , "//text:bookmark[@text:name='" + c + "']" , odf . Namespaces . lookupNamespaceURI ) ) , 0 < k . length && k [ 0 ] . scrollIntoView ( ! 0 ) ) : /^\s*(javascript|data):/ . test ( c ) ? runtime . log ( "WARN:" , "potentially malicious URL ignored" ) : a . open ( c ) , b . preventDefault ? b . preventDefault ( ) : b . returnValue = ! 1 ) ) } } ; this . setModifier = function ( a ) { d !== a && ( runtime . assert ( a === m . None || a === m . Ctrl || a === m . Meta , "Unsupported KeyboardHandler.Modifier value: " + a ) , d = a , d !== m . None ? g ( ) : b ( ) , p ( d ) ) } ; this . getModifier = function ( ) { return d } ;
this . destroy = function ( a ) { g ( ) ; n ( ) ; a ( ) } } ; gui . EventManager = function ( h ) { function k ( a ) { function b ( a , d , c ) { var e , f = ! 1 ; e = "on" + d ; a . attachEvent && ( a . attachEvent ( e , c ) , f = ! 0 ) ; ! f && a . addEventListener && ( a . addEventListener ( d , c , ! 1 ) , f = ! 0 ) ; f && ! x [ d ] || ! a . hasOwnProperty ( e ) || ( a [ e ] = c ) } function d ( a , b , c ) { var e = "on" + b ; a . detachEvent && a . detachEvent ( e , c ) ; a . removeEventListener && a . removeEventListener ( b , c , ! 1 ) ; a [ e ] === c && ( a [ e ] = null ) } function c ( b ) { if ( - 1 === f . indexOf ( b ) ) { f . push ( b ) ; if ( e . filters . every ( function ( a ) { return a ( b ) } ) ) try { g . emit ( a , b ) } catch ( d ) { runtime . log ( "Error occurred while processing " +
a + ":\n" + d . message + "\n" + d . stack ) } runtime . setTimeout ( function ( ) { f . splice ( f . indexOf ( b ) , 1 ) } , 0 ) } } var e = this , f = [ ] , g = new core . EventNotifier ( [ a ] ) ; this . filters = [ ] ; this . subscribe = function ( b ) { g . subscribe ( a , b ) } ; this . unsubscribe = function ( b ) { g . unsubscribe ( a , b ) } ; this . destroy = function ( ) { d ( t , a , c ) ; d ( H , a , c ) ; d ( G , a , c ) } ; w [ a ] && b ( t , a , c ) ; b ( H , a , c ) ; b ( G , a , c ) } function c ( a , b , d ) { function c ( b ) { d ( b , e , function ( b ) { b . type = a ; f . emit ( a , b ) } ) } var e = { } , f = new core . EventNotifier ( [ a ] ) ; this . subscribe = function ( b ) { f . subscribe ( a , b ) } ; this . unsubscribe =
function ( b ) { f . unsubscribe ( a , b ) } ; this . destroy = function ( ) { b . forEach ( function ( a ) { A . unsubscribe ( a , c ) } ) } ; ( function ( ) { b . forEach ( function ( a ) { A . subscribe ( a , c ) } ) } ) ( ) } function b ( a ) { runtime . clearTimeout ( a ) ; delete K [ a ] } function g ( a , d ) { var c = runtime . setTimeout ( function ( ) { a ( ) ; b ( c ) } , d ) ; K [ c ] = ! 0 ; return c } function n ( a , d , c ) { var e = a . touches . length , f = a . touches [ 0 ] , h = d . timer ; "touchmove" === a . type || "touchend" === a . type ? h && b ( h ) : "touchstart" === a . type && ( 1 !== e ? runtime . clearTimeout ( h ) : h = g ( function ( ) { c ( { clientX : f . clientX , clientY : f . clientY ,
pageX : f . pageX , pageY : f . pageY , target : a . target || a . srcElement || null , detail : 1 } ) } , 400 ) ) ; d . timer = h } function p ( a , b , d ) { var c = a . touches [ 0 ] , e = a . target || a . srcElement || null , f = b . target ; 1 !== a . touches . length || "touchend" === a . type ? f = null : "touchstart" === a . type && "webodf-draggable" === e . getAttribute ( "class" ) ? f = e : "touchmove" === a . type && f && ( a . preventDefault ( ) , a . stopPropagation ( ) , d ( { clientX : c . clientX , clientY : c . clientY , pageX : c . pageX , pageY : c . pageY , target : f , detail : 1 } ) ) ; b . target = f } function m ( a , b , d ) { var c = a . target || a . srcElement ||
null , e = b . dragging ; "drag" === a . type ? e = ! 0 : "touchend" === a . type && e && ( e = ! 1 , a = a . changedTouches [ 0 ] , d ( { clientX : a . clientX , clientY : a . clientY , pageX : a . pageX , pageY : a . pageY , target : c , detail : 1 } ) ) ; b . dragging = e } function q ( ) { G . classList . add ( "webodf-touchEnabled" ) ; A . unsubscribe ( "touchstart" , q ) } function f ( a ) { var b = a . scrollX , d = a . scrollY ; this . restore = function ( ) { a . scrollX === b && a . scrollY === d || a . scrollTo ( b , d ) } } function e ( a ) { var b = a . scrollTop , d = a . scrollLeft ; this . restore = function ( ) { if ( a . scrollTop !== b || a . scrollLeft !== d ) a . scrollTop =
b , a . scrollLeft = d } } function a ( a , b ) { var d = L [ a ] || F [ a ] || null ; ! d && b && ( d = L [ a ] = new k ( a ) ) ; return d } function d ( b , d ) { a ( b , ! 0 ) . subscribe ( d ) } function r ( b , d ) { var c = a ( b , ! 1 ) ; c && c . unsubscribe ( d ) } function l ( ) { return h . getDOMDocument ( ) . activeElement === H } function B ( ) { l ( ) && H . blur ( ) ; H . setAttribute ( "disabled" , "true" ) } function y ( ) { H . removeAttribute ( "disabled" ) } function D ( a ) { for ( var b = [ ] ; a ; ) ( a . scrollWidth > a . clientWidth || a . scrollHeight > a . clientHeight ) && b . push ( new e ( a ) ) , a = a . parentNode ; b . push ( new f ( t ) ) ; return b } function z ( ) { var a ;
l ( ) || ( a = D ( H ) , y ( ) , H . focus ( ) , a . forEach ( function ( a ) { a . restore ( ) } ) ) } var t = runtime . getWindow ( ) , x = { beforecut : ! 0 , beforepaste : ! 0 , longpress : ! 0 , drag : ! 0 , dragstop : ! 0 } , w = { mousedown : ! 0 , mouseup : ! 0 , focus : ! 0 } , F = { } , L = { } , H , G = h . getCanvas ( ) . getElement ( ) , A = this , K = { } ; this . addFilter = function ( b , d ) { a ( b , ! 0 ) . filters . push ( d ) } ; this . removeFilter = function ( b , d ) { var c = a ( b , ! 0 ) , e = c . filters . indexOf ( d ) ; - 1 !== e && c . filters . splice ( e , 1 ) } ; this . subscribe = d ; this . unsubscribe = r ; this . hasFocus = l ; this . focus = z ; this . getEventTrap = function ( ) { return H } ;
this . setEditing = function ( a ) { var b = l ( ) ; b && H . blur ( ) ; a ? H . removeAttribute ( "readOnly" ) : H . setAttribute ( "readOnly" , "true" ) ; b && z ( ) } ; this . destroy = function ( a ) { r ( "touchstart" , q ) ; Object . keys ( K ) . forEach ( function ( a ) { b ( parseInt ( a , 10 ) ) } ) ; K . length = 0 ; Object . keys ( F ) . forEach ( function ( a ) { F [ a ] . destroy ( ) } ) ; F = { } ; r ( "mousedown" , B ) ; r ( "mouseup" , y ) ; r ( "contextmenu" , y ) ; Object . keys ( L ) . forEach ( function ( a ) { L [ a ] . destroy ( ) } ) ; L = { } ; H . parentNode . removeChild ( H ) ; a ( ) } ; ( function ( ) { var a = h . getOdfCanvas ( ) . getSizer ( ) , b = a . ownerDocument ; runtime . assert ( Boolean ( t ) ,
"EventManager requires a window object to operate correctly" ) ; H = b . createElement ( "textarea" ) ; H . id = "eventTrap" ; H . setAttribute ( "tabindex" , "-1" ) ; H . setAttribute ( "readOnly" , "true" ) ; H . setAttribute ( "rows" , "1" ) ; a . appendChild ( H ) ; d ( "mousedown" , B ) ; d ( "mouseup" , y ) ; d ( "contextmenu" , y ) ; F . longpress = new c ( "longpress" , [ "touchstart" , "touchmove" , "touchend" ] , n ) ; F . drag = new c ( "drag" , [ "touchstart" , "touchmove" , "touchend" ] , p ) ; F . dragstop = new c ( "dragstop" , [ "drag" , "touchend" ] , m ) ; d ( "touchstart" , q ) } ) ( ) } ; gui . IOSSafariSupport = function ( h ) { function k ( ) { c . innerHeight !== c . outerHeight && ( b . style . display = "none" , runtime . requestAnimationFrame ( function ( ) { b . style . display = "block" } ) ) } var c = runtime . getWindow ( ) , b = h . getEventTrap ( ) ; this . destroy = function ( c ) { h . unsubscribe ( "focus" , k ) ; b . removeAttribute ( "autocapitalize" ) ; b . style . WebkitTransform = "" ; c ( ) } ; h . subscribe ( "focus" , k ) ; b . setAttribute ( "autocapitalize" , "off" ) ; b . style . WebkitTransform = "translateX(-10000px)" } ; gui . HyperlinkController = function ( h , k , c , b ) { function g ( ) { var b = ! 0 ; ! 0 === k . getState ( gui . CommonConstraints . EDIT . REVIEW _MODE ) && ( b = c . isLocalCursorWithinOwnAnnotation ( ) ) ; b !== f && ( f = b , q . emit ( gui . HyperlinkController . enabledChanged , f ) ) } function n ( c ) { c . getMemberId ( ) === b && g ( ) } var p = odf . OdfUtils , m = h . getOdtDocument ( ) , q = new core . EventNotifier ( [ gui . HyperlinkController . enabledChanged ] ) , f = ! 1 ; this . isEnabled = function ( ) { return f } ; this . subscribe = function ( b , a ) { q . subscribe ( b , a ) } ; this . unsubscribe = function ( b , a ) { q . unsubscribe ( b ,
a ) } ; this . addHyperlink = function ( c , a ) { if ( f ) { var d = m . getCursorSelection ( b ) , g = new ops . OpApplyHyperlink , l = [ ] ; if ( 0 === d . length || a ) a = a || c , g = new ops . OpInsertText , g . init ( { memberid : b , position : d . position , text : a } ) , d . length = a . length , l . push ( g ) ; g = new ops . OpApplyHyperlink ; g . init ( { memberid : b , position : d . position , length : d . length , hyperlink : c } ) ; l . push ( g ) ; h . enqueue ( l ) } } ; this . removeHyperlinks = function ( ) { if ( f ) { var c = m . createPositionIterator ( m . getRootNode ( ) ) , a = m . getCursor ( b ) . getSelectedRange ( ) , d = p . getHyperlinkElements ( a ) ,
g = a . collapsed && 1 === d . length , l = m . getDOMDocument ( ) . createRange ( ) , k = [ ] , n , q ; 0 !== d . length && ( d . forEach ( function ( a ) { l . selectNodeContents ( a ) ; n = m . convertDomToCursorRange ( { anchorNode : l . startContainer , anchorOffset : l . startOffset , focusNode : l . endContainer , focusOffset : l . endOffset } ) ; q = new ops . OpRemoveHyperlink ; q . init ( { memberid : b , position : n . position , length : n . length } ) ; k . push ( q ) } ) , g || ( g = d [ 0 ] , - 1 === a . comparePoint ( g , 0 ) && ( l . setStart ( g , 0 ) , l . setEnd ( a . startContainer , a . startOffset ) , n = m . convertDomToCursorRange ( { anchorNode : l . startContainer ,
anchorOffset : l . startOffset , focusNode : l . endContainer , focusOffset : l . endOffset } ) , 0 < n . length && ( q = new ops . OpApplyHyperlink , q . init ( { memberid : b , position : n . position , length : n . length , hyperlink : p . getHyperlinkTarget ( g ) } ) , k . push ( q ) ) ) , d = d [ d . length - 1 ] , c . moveToEndOfNode ( d ) , c = c . unfilteredDomOffset ( ) , 1 === a . comparePoint ( d , c ) && ( l . setStart ( a . endContainer , a . endOffset ) , l . setEnd ( d , c ) , n = m . convertDomToCursorRange ( { anchorNode : l . startContainer , anchorOffset : l . startOffset , focusNode : l . endContainer , focusOffset : l . endOffset } ) , 0 < n . length &&
( q = new ops . OpApplyHyperlink , q . init ( { memberid : b , position : n . position , length : n . length , hyperlink : p . getHyperlinkTarget ( d ) } ) , k . push ( q ) ) ) ) , h . enqueue ( k ) , l . detach ( ) ) } } ; this . destroy = function ( b ) { m . unsubscribe ( ops . Document . signalCursorMoved , n ) ; k . unsubscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , g ) ; b ( ) } ; m . subscribe ( ops . Document . signalCursorMoved , n ) ; k . subscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , g ) ; g ( ) } ; gui . HyperlinkController . enabledChanged = "enabled/changed" ; gui . ImageController = function ( h , k , c , b , g ) { function n ( ) { var a = ! 0 ; ! 0 === k . getState ( gui . CommonConstraints . EDIT . REVIEW _MODE ) && ( a = c . isLocalCursorWithinOwnAnnotation ( ) ) ; a !== r && ( r = a , d . emit ( gui . ImageController . enabledChanged , r ) ) } function p ( a ) { a . getMemberId ( ) === b && n ( ) } var m = { "image/gif" : ".gif" , "image/jpeg" : ".jpg" , "image/png" : ".png" } , q = odf . Namespaces . textns , f = h . getOdtDocument ( ) , e = odf . OdfUtils , a = f . getFormatting ( ) , d = new core . EventNotifier ( [ gui . HyperlinkController . enabledChanged ] ) , r = ! 1 ; this . isEnabled = function ( ) { return r } ;
this . subscribe = function ( a , b ) { d . subscribe ( a , b ) } ; this . unsubscribe = function ( a , b ) { d . unsubscribe ( a , b ) } ; this . insertImage = function ( d , c , k , n ) { if ( r ) { runtime . assert ( 0 < k && 0 < n , "Both width and height of the image should be greater than 0px." ) ; n = { width : k , height : n } ; if ( k = e . getParagraphElement ( f . getCursor ( b ) . getNode ( ) ) . getAttributeNS ( q , "style-name" ) ) { k = a . getContentSize ( k , "paragraph" ) ; var p = 1 , t = 1 ; n . width > k . width && ( p = k . width / n . width ) ; n . height > k . height && ( t = k . height / n . height ) ; k = Math . min ( p , t ) ; n = { width : n . width * k , height : n . height *
k } } k = n . width + "px" ; n = n . height + "px" ; var x = f . getOdfCanvas ( ) . odfContainer ( ) . rootElement . styles , p = d . toLowerCase ( ) , t = m . hasOwnProperty ( p ) ? m [ p ] : null , w , p = [ ] ; runtime . assert ( null !== t , "Image type is not supported: " + d ) ; t = "Pictures/" + g . generateImageName ( ) + t ; w = new ops . OpSetBlob ; w . init ( { memberid : b , filename : t , mimetype : d , content : c } ) ; p . push ( w ) ; a . getStyleElement ( "Graphics" , "graphic" , [ x ] ) || ( d = new ops . OpAddStyle , d . init ( { memberid : b , styleName : "Graphics" , styleFamily : "graphic" , isAutomaticStyle : ! 1 , setProperties : { "style:graphic-properties" : { "text:anchor-type" : "paragraph" ,
"svg:x" : "0cm" , "svg:y" : "0cm" , "style:wrap" : "dynamic" , "style:number-wrapped-paragraphs" : "no-limit" , "style:wrap-contour" : "false" , "style:vertical-pos" : "top" , "style:vertical-rel" : "paragraph" , "style:horizontal-pos" : "center" , "style:horizontal-rel" : "paragraph" } } } ) , p . push ( d ) ) ; d = g . generateStyleName ( ) ; c = new ops . OpAddStyle ; c . init ( { memberid : b , styleName : d , styleFamily : "graphic" , isAutomaticStyle : ! 0 , setProperties : { "style:parent-style-name" : "Graphics" , "style:graphic-properties" : { "style:vertical-pos" : "top" , "style:vertical-rel" : "baseline" ,
"style:horizontal-pos" : "center" , "style:horizontal-rel" : "paragraph" , "fo:background-color" : "transparent" , "style:background-transparency" : "100%" , "style:shadow" : "none" , "style:mirror" : "none" , "fo:clip" : "rect(0cm, 0cm, 0cm, 0cm)" , "draw:luminance" : "0%" , "draw:contrast" : "0%" , "draw:red" : "0%" , "draw:green" : "0%" , "draw:blue" : "0%" , "draw:gamma" : "100%" , "draw:color-inversion" : "false" , "draw:image-opacity" : "100%" , "draw:color-mode" : "standard" } } } ) ; p . push ( c ) ; w = new ops . OpInsertImage ; w . init ( { memberid : b , position : f . getCursorPosition ( b ) ,
filename : t , frameWidth : k , frameHeight : n , frameStyleName : d , frameName : g . generateFrameName ( ) } ) ; p . push ( w ) ; h . enqueue ( p ) } } ; this . destroy = function ( a ) { f . unsubscribe ( ops . Document . signalCursorMoved , p ) ; k . unsubscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , n ) ; a ( ) } ; f . subscribe ( ops . Document . signalCursorMoved , p ) ; k . subscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , n ) ; n ( ) } ; gui . ImageController . enabledChanged = "enabled/changed" ; gui . ImageSelector = function ( h ) { function k ( ) { var c = h . getSizer ( ) , k = g . createElement ( "div" ) ; k . id = "imageSelector" ; k . style . borderWidth = "1px" ; c . appendChild ( k ) ; b . forEach ( function ( b ) { var c = g . createElement ( "div" ) ; c . className = b ; k . appendChild ( c ) } ) ; return k } var c = odf . Namespaces . svgns , b = "topLeft topRight bottomRight bottomLeft topMiddle rightMiddle bottomMiddle leftMiddle" . split ( " " ) , g = h . getElement ( ) . ownerDocument , n = ! 1 ; this . select = function ( b ) { var m , q , f = g . getElementById ( "imageSelector" ) ; f || ( f = k ( ) ) ; n = ! 0 ; m = f . parentNode ;
q = b . getBoundingClientRect ( ) ; var e = m . getBoundingClientRect ( ) , a = h . getZoomLevel ( ) ; m = ( q . left - e . left ) / a - 1 ; q = ( q . top - e . top ) / a - 1 ; f . style . display = "block" ; f . style . left = m + "px" ; f . style . top = q + "px" ; f . style . width = b . getAttributeNS ( c , "width" ) ; f . style . height = b . getAttributeNS ( c , "height" ) } ; this . clearSelection = function ( ) { var b ; n && ( b = g . getElementById ( "imageSelector" ) ) && ( b . style . display = "none" ) ; n = ! 1 } ; this . isSelectorElement = function ( b ) { var c = g . getElementById ( "imageSelector" ) ; return c ? b === c || b . parentNode === c : ! 1 } } ; ( function ( ) { function h ( h ) { function c ( b ) { p = b . which && String . fromCharCode ( b . which ) === n ; n = void 0 ; return ! 1 === p } function b ( ) { p = ! 1 } function g ( b ) { n = b . data ; p = ! 1 } var n , p = ! 1 ; this . destroy = function ( n ) { h . unsubscribe ( "textInput" , b ) ; h . unsubscribe ( "compositionend" , g ) ; h . removeFilter ( "keypress" , c ) ; n ( ) } ; h . subscribe ( "textInput" , b ) ; h . subscribe ( "compositionend" , g ) ; h . addFilter ( "keypress" , c ) } gui . InputMethodEditor = function ( k , c ) { function b ( b ) { a && ( b ? a . getNode ( ) . setAttributeNS ( "urn:webodf:names:cursor" , "composing" , "true" ) : ( a . getNode ( ) . removeAttributeNS ( "urn:webodf:names:cursor" ,
"composing" ) , l . textContent = "" ) ) } function g ( ) { y && ( y = ! 1 , b ( ! 1 ) , z . emit ( gui . InputMethodEditor . signalCompositionEnd , { data : D } ) , D = "" ) } function n ( ) { L || ( L = ! 0 , g ( ) , a && a . getSelectedRange ( ) . collapsed ? d . value = "" : d . value = x . writeToString ( a . getSelectedRange ( ) . cloneContents ( ) ) , d . setSelectionRange ( 0 , d . value . length ) , L = ! 1 ) } function p ( ) { c . hasFocus ( ) && B . trigger ( ) } function m ( ) { t = void 0 ; B . cancel ( ) ; b ( ! 0 ) ; y || z . emit ( gui . InputMethodEditor . signalCompositionStart , { data : "" } ) } function q ( a ) { a = t = a . data ; y = ! 0 ; D += a ; B . trigger ( ) } function f ( a ) { a . data !==
t && ( a = a . data , y = ! 0 , D += a , B . trigger ( ) ) ; t = void 0 } function e ( ) { l . textContent = d . value } var a = null , d = c . getEventTrap ( ) , r = d . ownerDocument , l , B , y = ! 1 , D = "" , z = new core . EventNotifier ( [ gui . InputMethodEditor . signalCompositionStart , gui . InputMethodEditor . signalCompositionEnd ] ) , t , x , w = [ ] , F , L = ! 1 ; this . subscribe = z . subscribe ; this . unsubscribe = z . unsubscribe ; this . registerCursor = function ( b ) { b . getMemberId ( ) === k && ( a = b , a . getNode ( ) . appendChild ( l ) , b . subscribe ( ops . OdtCursor . signalCursorUpdated , p ) , c . subscribe ( "input" , e ) , c . subscribe ( "compositionupdate" ,
e ) ) } ; this . removeCursor = function ( b ) { a && b === k && ( a . getNode ( ) . removeChild ( l ) , a . unsubscribe ( ops . OdtCursor . signalCursorUpdated , p ) , c . unsubscribe ( "input" , e ) , c . unsubscribe ( "compositionupdate" , e ) , a = null ) } ; this . destroy = function ( a ) { c . unsubscribe ( "compositionstart" , m ) ; c . unsubscribe ( "compositionend" , q ) ; c . unsubscribe ( "textInput" , f ) ; c . unsubscribe ( "keypress" , g ) ; c . unsubscribe ( "focus" , n ) ; core . Async . destroyAll ( F , a ) } ; ( function ( ) { x = new odf . TextSerializer ; x . filter = new odf . OdfNodeFilter ; c . subscribe ( "compositionstart" , m ) ;
c . subscribe ( "compositionend" , q ) ; c . subscribe ( "textInput" , f ) ; c . subscribe ( "keypress" , g ) ; c . subscribe ( "focus" , n ) ; w . push ( new h ( c ) ) ; F = w . map ( function ( a ) { return a . destroy } ) ; l = r . createElement ( "span" ) ; l . setAttribute ( "id" , "composer" ) ; B = core . Task . createTimeoutTask ( n , 1 ) ; F . push ( B . destroy ) } ) ( ) } ; gui . InputMethodEditor . signalCompositionStart = "input/compositionstart" ; gui . InputMethodEditor . signalCompositionEnd = "input/compositionend" } ) ( ) ; gui . MetadataController = function ( h , k ) { function c ( b ) { n . emit ( gui . MetadataController . signalMetadataChanged , b ) } function b ( b ) { var c = - 1 === p . indexOf ( b ) ; c || runtime . log ( "Setting " + b + " is restricted." ) ; return c } var g = h . getOdtDocument ( ) , n = new core . EventNotifier ( [ gui . MetadataController . signalMetadataChanged ] ) , p = [ "dc:creator" , "dc:date" , "meta:editing-cycles" , "meta:editing-duration" , "meta:document-statistic" ] ; this . setMetadata = function ( c , g ) { var f = { } , e = "" , a ; c && Object . keys ( c ) . filter ( b ) . forEach ( function ( a ) { f [ a ] = c [ a ] } ) ;
g && ( e = g . filter ( b ) . join ( "," ) ) ; if ( 0 < e . length || 0 < Object . keys ( f ) . length ) a = new ops . OpUpdateMetadata , a . init ( { memberid : k , setProperties : f , removedProperties : 0 < e . length ? { attributes : e } : null } ) , h . enqueue ( [ a ] ) } ; this . getMetadata = function ( b ) { var c ; runtime . assert ( "string" === typeof b , "Property must be a string" ) ; c = b . split ( ":" ) ; runtime . assert ( 2 === c . length , "Property must be a namespace-prefixed string" ) ; b = odf . Namespaces . lookupNamespaceURI ( c [ 0 ] ) ; runtime . assert ( Boolean ( b ) , "Prefix must be for an ODF namespace." ) ; return g . getOdfCanvas ( ) . odfContainer ( ) . getMetadata ( b ,
c [ 1 ] ) } ; this . subscribe = function ( b , c ) { n . subscribe ( b , c ) } ; this . unsubscribe = function ( b , c ) { n . unsubscribe ( b , c ) } ; this . destroy = function ( b ) { g . unsubscribe ( ops . OdtDocument . signalMetadataUpdated , c ) ; b ( ) } ; g . subscribe ( ops . OdtDocument . signalMetadataUpdated , c ) } ; gui . MetadataController . signalMetadataChanged = "metadata/changed" ; gui . PasteController = function ( h , k , c , b ) { function g ( ) { m = ! 0 === k . getState ( gui . CommonConstraints . EDIT . REVIEW _MODE ) ? c . isLocalCursorWithinOwnAnnotation ( ) : ! 0 } function n ( a ) { a . getMemberId ( ) === b && g ( ) } var p = h . getOdtDocument ( ) , m = ! 1 , q = odf . Namespaces . textns , f = core . StepDirection . NEXT , e = odf . OdfUtils ; this . isEnabled = function ( ) { return m } ; this . paste = function ( a ) { if ( m ) { var d = p . getCursorPosition ( b ) , c = p . getCursor ( b ) . getNode ( ) , c = e . getParagraphElement ( c ) , g = c . getAttributeNS ( q , "style-name" ) || "" , k = d , n = [ ] , D = p . convertDomPointToCursorStep ( c ,
0 , f ) ; a . replace ( /\r/g , "" ) . split ( "\n" ) . forEach ( function ( a ) { var d = new ops . OpInsertText , c = new ops . OpSplitParagraph ; d . init ( { memberid : b , position : k , text : a , moveCursor : ! 0 } ) ; n . push ( d ) ; k += a . length ; c . init ( { memberid : b , position : k , paragraphStyleName : g , sourceParagraphPosition : D , moveCursor : ! 0 } ) ; n . push ( c ) ; D = k += 1 } ) ; n . pop ( ) ; h . enqueue ( n ) } } ; this . destroy = function ( a ) { p . unsubscribe ( ops . Document . signalCursorMoved , n ) ; k . unsubscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , g ) ; a ( ) } ; p . subscribe ( ops . Document . signalCursorMoved , n ) ;
k . subscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , g ) ; g ( ) } ; gui . ClosestXOffsetScanner = function ( h ) { function k ( b ) { return null !== b && void 0 !== g ? Math . abs ( b - h ) > g : ! 1 } function c ( b ) { null !== b && ! 1 === k ( b ) && ( g = Math . abs ( b - h ) ) } var b = this , g , n = gui . StepInfo . VisualDirection . LEFT _TO _RIGHT ; this . token = void 0 ; this . process = function ( g , h , q ) { var f , e ; g . visualDirection === n ? ( f = h && h . right , e = q && q . left ) : ( f = h && h . left , e = q && q . right ) ; if ( k ( f ) || k ( e ) ) return ! 0 ; if ( h || q ) c ( f ) , c ( e ) , b . token = g . token ; return ! 1 } } ; gui . LineBoundaryScanner = function ( ) { var h = this , k = null ; this . token = void 0 ; this . process = function ( c , b , g ) { var n ; if ( n = g ) if ( k ) { var p = k ; n = Math . min ( p . bottom - p . top , g . bottom - g . top ) ; var m = Math . max ( p . top , g . top ) , p = Math . min ( p . bottom , g . bottom ) - m ; n = . 4 >= ( 0 < n ? p / n : 0 ) } else n = ! 1 ; ! b || g && ! n || ( h . token = c . token ) ; if ( n ) return ! 0 ; k = ( c = k ) && b ? { left : Math . min ( c . left , b . left ) , right : Math . max ( c . right , b . right ) , top : Math . min ( c . top , b . top ) , bottom : Math . min ( c . bottom , b . bottom ) } : c || b ; return ! 1 } } ; gui . ParagraphBoundaryScanner = function ( ) { var h = this , k = ! 1 , c , b = odf . OdfUtils ; this . token = void 0 ; this . process = function ( g ) { var n = b . getParagraphElement ( g . container ( ) ) ; k || ( c = n , k = ! 0 ) ; if ( c !== n ) return ! 0 ; h . token = g . token ; return ! 1 } } ; odf . WordBoundaryFilter = function ( h , k ) { function c ( a , b , d ) { for ( var c = null , e = h . getRootNode ( ) , f ; a !== e && null !== a && null === c ; ) f = 0 > b ? a . previousSibling : a . nextSibling , d ( f ) === NodeFilter . FILTER _ACCEPT && ( c = f ) , a = a . parentNode ; return c } function b ( a , b ) { var d ; return null === a ? r . NO _NEIGHBOUR : p . isCharacterElement ( a ) ? r . SPACE _CHAR : a . nodeType === g || p . isTextSpan ( a ) || p . isHyperlink ( a ) ? ( d = a . textContent . charAt ( b ( ) ) , q . test ( d ) ? r . SPACE _CHAR : m . test ( d ) ? r . PUNCTUATION _CHAR : r . WORD _CHAR ) : r . OTHER } var g = Node . TEXT _NODE , n = Node . ELEMENT _NODE ,
p = odf . OdfUtils , m = /[!-#%-*,-\/:-;?-@\[-\]_{}\u00a1\u00ab\u00b7\u00bb\u00bf;\u00b7\u055a-\u055f\u0589-\u058a\u05be\u05c0\u05c3\u05c6\u05f3-\u05f4\u0609-\u060a\u060c-\u060d\u061b\u061e-\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0964-\u0965\u0970\u0df4\u0e4f\u0e5a-\u0e5b\u0f04-\u0f12\u0f3a-\u0f3d\u0f85\u0fd0-\u0fd4\u104a-\u104f\u10fb\u1361-\u1368\u166d-\u166e\u169b-\u169c\u16eb-\u16ed\u1735-\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u180a\u1944-\u1945\u19de-\u19df\u1a1e-\u1a1f\u1b5a-\u1b60\u1c3b-\u1c3f\u1c7e-\u1c7f\u2000-\u206e\u207d-\u207e\u208d-\u208e\u3008-\u3009\u2768-\u2775\u27c5-\u27c6\u27e6-\u27ef\u2983-\u2998\u29d8-\u29db\u29fc-\u29fd\u2cf9-\u2cfc\u2cfe-\u2cff\u2e00-\u2e7e\u3000-\u303f\u30a0\u30fb\ua60d-\ua60f\ua673\ua67e\ua874-\ua877\ua8ce-\ua8cf\ua92e-\ua92f\ua95f\uaa5c-\uaa5f\ufd3e-\ufd3f\ufe10-\ufe19\ufe30-\ufe52\ufe54-\ufe61\ufe63\ufe68\ufe6a-\ufe6b\uff01-\uff03\uff05-\uff0a\uff0c-\uff0f\uff1a-\uff1b\uff1f-\uff20\uff3b-\uff3d\uff3f\uff5b\uff5d\uff5f-\uff65]|\ud800[\udd00-\udd01\udf9f\udfd0]|\ud802[\udd1f\udd3f\ude50-\ude58]|\ud809[\udc00-\udc7e]/ ,
q = /\s/ , f = core . PositionFilter . FilterResult . FILTER _ACCEPT , e = core . PositionFilter . FilterResult . FILTER _REJECT , a = odf . WordBoundaryFilter . IncludeWhitespace . TRAILING , d = odf . WordBoundaryFilter . IncludeWhitespace . LEADING , r = { NO _NEIGHBOUR : 0 , SPACE _CHAR : 1 , PUNCTUATION _CHAR : 2 , WORD _CHAR : 3 , OTHER : 4 } ; this . acceptPosition = function ( g ) { var h = g . container ( ) , m = g . leftNode ( ) , p = g . rightNode ( ) , q = g . unfilteredDomOffset , t = function ( ) { return g . unfilteredDomOffset ( ) - 1 } ; h . nodeType === n && ( null === p && ( p = c ( h , 1 , g . getNodeFilter ( ) ) ) , null === m && ( m =
c ( h , - 1 , g . getNodeFilter ( ) ) ) ) ; h !== p && ( q = function ( ) { return 0 } ) ; h !== m && null !== m && ( t = function ( ) { return m . textContent . length - 1 } ) ; h = b ( m , t ) ; p = b ( p , q ) ; return h === r . WORD _CHAR && p === r . WORD _CHAR || h === r . PUNCTUATION _CHAR && p === r . PUNCTUATION _CHAR || k === a && h !== r . NO _NEIGHBOUR && p === r . SPACE _CHAR || k === d && h === r . SPACE _CHAR && p !== r . NO _NEIGHBOUR ? e : f } } ; odf . WordBoundaryFilter . IncludeWhitespace = { None : 0 , TRAILING : 1 , LEADING : 2 } ; gui . SelectionController = function ( h , k ) { function c ( a ) { var b = a . spec ( ) ; if ( a . isEdit || b . memberid === k ) L = void 0 , H . cancel ( ) } function b ( ) { var a = y . getCursor ( k ) . getNode ( ) ; return y . createStepIterator ( a , 0 , [ t , w ] , y . getRootElement ( a ) ) } function g ( a , b , d ) { d = new odf . WordBoundaryFilter ( y , d ) ; var c = y . getRootElement ( a ) || y . getRootNode ( ) , e = y . createRootFilter ( c ) ; return y . createStepIterator ( a , b , [ t , e , d ] , c ) } function n ( a , b ) { return b ? { anchorNode : a . startContainer , anchorOffset : a . startOffset , focusNode : a . endContainer , focusOffset : a . endOffset } :
{ anchorNode : a . endContainer , anchorOffset : a . endOffset , focusNode : a . startContainer , focusOffset : a . startOffset } } function p ( a , b , d ) { var c = new ops . OpMoveCursor ; c . init ( { memberid : k , position : a , length : b || 0 , selectionType : d } ) ; return c } function m ( a , b , d ) { var c ; c = y . getCursor ( k ) ; c = n ( c . getSelectedRange ( ) , c . hasForwardSelection ( ) ) ; c . focusNode = a ; c . focusOffset = b ; d || ( c . anchorNode = c . focusNode , c . anchorOffset = c . focusOffset ) ; a = y . convertDomToCursorRange ( c ) ; h . enqueue ( [ p ( a . position , a . length ) ] ) } function q ( a ) { var b ; b = g ( a . startContainer ,
a . startOffset , G ) ; b . roundToPreviousStep ( ) && a . setStart ( b . container ( ) , b . offset ( ) ) ; b = g ( a . endContainer , a . endOffset , A ) ; b . roundToNextStep ( ) && a . setEnd ( b . container ( ) , b . offset ( ) ) } function f ( a ) { var b = z . getParagraphElements ( a ) , d = b [ 0 ] , b = b [ b . length - 1 ] ; d && a . setStart ( d , 0 ) ; b && ( z . isParagraph ( a . endContainer ) && 0 === a . endOffset ? a . setEndBefore ( b ) : a . setEnd ( b , b . childNodes . length ) ) } function e ( a , b , d , c ) { var e , f ; c ? ( e = d . startContainer , f = d . startOffset ) : ( e = d . endContainer , f = d . endOffset ) ; D . containsNode ( a , e ) || ( f = 0 > D . comparePoints ( a ,
0 , e , f ) ? 0 : a . childNodes . length , e = a ) ; a = y . createStepIterator ( e , f , b , z . getParagraphElement ( e ) || a ) ; a . roundToClosestStep ( ) || runtime . assert ( ! 1 , "No step found in requested range" ) ; c ? d . setStart ( a . container ( ) , a . offset ( ) ) : d . setEnd ( a . container ( ) , a . offset ( ) ) } function a ( a , d ) { var c = b ( ) ; c . advanceStep ( a ) && m ( c . container ( ) , c . offset ( ) , d ) } function d ( a , d ) { var c , e = L , f = [ new gui . LineBoundaryScanner , new gui . ParagraphBoundaryScanner ] ; void 0 === e && F && ( e = F ( ) ) ; isNaN ( e ) || ( c = b ( ) , x . moveToFilteredStep ( c , a , f ) && c . advanceStep ( a ) && ( f = [ new gui . ClosestXOffsetScanner ( e ) ,
new gui . LineBoundaryScanner , new gui . ParagraphBoundaryScanner ] , x . moveToFilteredStep ( c , a , f ) && ( m ( c . container ( ) , c . offset ( ) , d ) , L = e , H . restart ( ) ) ) ) } function r ( a , d ) { var c = b ( ) , e = [ new gui . LineBoundaryScanner , new gui . ParagraphBoundaryScanner ] ; x . moveToFilteredStep ( c , a , e ) && m ( c . container ( ) , c . offset ( ) , d ) } function l ( a , b ) { var d = y . getCursor ( k ) , d = n ( d . getSelectedRange ( ) , d . hasForwardSelection ( ) ) , d = g ( d . focusNode , d . focusOffset , G ) ; d . advanceStep ( a ) && m ( d . container ( ) , d . offset ( ) , b ) } function B ( a , b , d ) { var c = ! 1 , e = y . getCursor ( k ) ,
e = n ( e . getSelectedRange ( ) , e . hasForwardSelection ( ) ) , c = y . getRootElement ( e . focusNode ) ; runtime . assert ( Boolean ( c ) , "SelectionController: Cursor outside root" ) ; e = y . createStepIterator ( e . focusNode , e . focusOffset , [ t , w ] , c ) ; e . roundToClosestStep ( ) ; e . advanceStep ( a ) && ( d = d ( e . container ( ) ) ) && ( a === K ? ( e . setPosition ( d , 0 ) , c = e . roundToNextStep ( ) ) : ( e . setPosition ( d , d . childNodes . length ) , c = e . roundToPreviousStep ( ) ) , c && m ( e . container ( ) , e . offset ( ) , b ) ) } var y = h . getOdtDocument ( ) , D = core . DomUtils , z = odf . OdfUtils , t = y . getPositionFilter ( ) ,
x = new gui . GuiStepUtils , w = y . createRootFilter ( k ) , F = null , L , H , G = odf . WordBoundaryFilter . IncludeWhitespace . TRAILING , A = odf . WordBoundaryFilter . IncludeWhitespace . LEADING , K = core . StepDirection . PREVIOUS , v = core . StepDirection . NEXT ; this . selectionToRange = function ( a ) { var b = 0 <= D . comparePoints ( a . anchorNode , a . anchorOffset , a . focusNode , a . focusOffset ) , d = a . focusNode . ownerDocument . createRange ( ) ; b ? ( d . setStart ( a . anchorNode , a . anchorOffset ) , d . setEnd ( a . focusNode , a . focusOffset ) ) : ( d . setStart ( a . focusNode , a . focusOffset ) , d . setEnd ( a . anchorNode ,
a . anchorOffset ) ) ; return { range : d , hasForwardSelection : b } } ; this . rangeToSelection = n ; this . selectImage = function ( a ) { var b = y . getRootElement ( a ) , d = y . createRootFilter ( b ) , b = y . createStepIterator ( a , 0 , [ d , y . getPositionFilter ( ) ] , b ) , c ; b . roundToPreviousStep ( ) || runtime . assert ( ! 1 , "No walkable position before frame" ) ; d = b . container ( ) ; c = b . offset ( ) ; b . setPosition ( a , a . childNodes . length ) ; b . roundToNextStep ( ) || runtime . assert ( ! 1 , "No walkable position after frame" ) ; a = y . convertDomToCursorRange ( { anchorNode : d , anchorOffset : c , focusNode : b . container ( ) ,
focusOffset : b . offset ( ) } ) ; a = p ( a . position , a . length , ops . OdtCursor . RegionSelection ) ; h . enqueue ( [ a ] ) } ; this . expandToWordBoundaries = q ; this . expandToParagraphBoundaries = f ; this . selectRange = function ( a , b , d ) { var c = y . getOdfCanvas ( ) . getElement ( ) , g , l = [ t ] ; g = D . containsNode ( c , a . startContainer ) ; c = D . containsNode ( c , a . endContainer ) ; if ( g || c ) if ( g && c && ( 2 === d ? q ( a ) : 3 <= d && f ( a ) ) , ( d = b ? y . getRootElement ( a . startContainer ) : y . getRootElement ( a . endContainer ) ) || ( d = y . getRootNode ( ) ) , l . push ( y . createRootFilter ( d ) ) , e ( d , l , a , ! 0 ) , e ( d , l , a , ! 1 ) , a =
n ( a , b ) , b = y . convertDomToCursorRange ( a ) , a = y . getCursorSelection ( k ) , b . position !== a . position || b . length !== a . length ) a = p ( b . position , b . length , ops . OdtCursor . RangeSelection ) , h . enqueue ( [ a ] ) } ; this . moveCursorToLeft = function ( ) { a ( K , ! 1 ) ; return ! 0 } ; this . moveCursorToRight = function ( ) { a ( v , ! 1 ) ; return ! 0 } ; this . extendSelectionToLeft = function ( ) { a ( K , ! 0 ) ; return ! 0 } ; this . extendSelectionToRight = function ( ) { a ( v , ! 0 ) ; return ! 0 } ; this . setCaretXPositionLocator = function ( a ) { F = a } ; this . moveCursorUp = function ( ) { d ( K , ! 1 ) ; return ! 0 } ; this . moveCursorDown =
function ( ) { d ( v , ! 1 ) ; return ! 0 } ; this . extendSelectionUp = function ( ) { d ( K , ! 0 ) ; return ! 0 } ; this . extendSelectionDown = function ( ) { d ( v , ! 0 ) ; return ! 0 } ; this . moveCursorBeforeWord = function ( ) { l ( K , ! 1 ) ; return ! 0 } ; this . moveCursorPastWord = function ( ) { l ( v , ! 1 ) ; return ! 0 } ; this . extendSelectionBeforeWord = function ( ) { l ( K , ! 0 ) ; return ! 0 } ; this . extendSelectionPastWord = function ( ) { l ( v , ! 0 ) ; return ! 0 } ; this . moveCursorToLineStart = function ( ) { r ( K , ! 1 ) ; return ! 0 } ; this . moveCursorToLineEnd = function ( ) { r ( v , ! 1 ) ; return ! 0 } ; this . extendSelectionToLineStart =
function ( ) { r ( K , ! 0 ) ; return ! 0 } ; this . extendSelectionToLineEnd = function ( ) { r ( v , ! 0 ) ; return ! 0 } ; this . extendSelectionToParagraphStart = function ( ) { B ( K , ! 0 , z . getParagraphElement ) ; return ! 0 } ; this . extendSelectionToParagraphEnd = function ( ) { B ( v , ! 0 , z . getParagraphElement ) ; return ! 0 } ; this . moveCursorToParagraphStart = function ( ) { B ( K , ! 1 , z . getParagraphElement ) ; return ! 0 } ; this . moveCursorToParagraphEnd = function ( ) { B ( v , ! 1 , z . getParagraphElement ) ; return ! 0 } ; this . moveCursorToDocumentStart = function ( ) { B ( K , ! 1 , y . getRootElement ) ; return ! 0 } ;
this . moveCursorToDocumentEnd = function ( ) { B ( v , ! 1 , y . getRootElement ) ; return ! 0 } ; this . extendSelectionToDocumentStart = function ( ) { B ( K , ! 0 , y . getRootElement ) ; return ! 0 } ; this . extendSelectionToDocumentEnd = function ( ) { B ( v , ! 0 , y . getRootElement ) ; return ! 0 } ; this . extendSelectionToEntireDocument = function ( ) { var a = y . getCursor ( k ) , a = y . getRootElement ( a . getNode ( ) ) , b , d , c ; runtime . assert ( Boolean ( a ) , "SelectionController: Cursor outside root" ) ; c = y . createStepIterator ( a , 0 , [ t , w ] , a ) ; c . roundToClosestStep ( ) ; b = c . container ( ) ; d = c . offset ( ) ;
c . setPosition ( a , a . childNodes . length ) ; c . roundToClosestStep ( ) ; a = y . convertDomToCursorRange ( { anchorNode : b , anchorOffset : d , focusNode : c . container ( ) , focusOffset : c . offset ( ) } ) ; h . enqueue ( [ p ( a . position , a . length ) ] ) ; return ! 0 } ; this . destroy = function ( a ) { y . unsubscribe ( ops . OdtDocument . signalOperationStart , c ) ; core . Async . destroyAll ( [ H . destroy ] , a ) } ; ( function ( ) { H = core . Task . createTimeoutTask ( function ( ) { L = void 0 } , 2E3 ) ; y . subscribe ( ops . OdtDocument . signalOperationStart , c ) } ) ( ) } ; gui . TextController = function ( h , k , c , b , g , n ) { function p ( ) { B = ! 0 === k . getState ( gui . CommonConstraints . EDIT . REVIEW _MODE ) ? c . isLocalCursorWithinOwnAnnotation ( ) : ! 0 } function m ( a ) { a . getMemberId ( ) === b && p ( ) } function q ( a , b , c ) { var e = [ d . getPositionFilter ( ) ] ; c && e . push ( d . createRootFilter ( a . startContainer ) ) ; c = d . createStepIterator ( a . startContainer , a . startOffset , e , b ) ; c . roundToClosestStep ( ) || runtime . assert ( ! 1 , "No walkable step found in paragraph element at range start" ) ; b = d . convertDomPointToCursorStep ( c . container ( ) , c . offset ( ) ) ;
a . collapsed ? a = b : ( c . setPosition ( a . endContainer , a . endOffset ) , c . roundToClosestStep ( ) || runtime . assert ( ! 1 , "No walkable step found in paragraph element at range end" ) , a = d . convertDomPointToCursorStep ( c . container ( ) , c . offset ( ) ) ) ; return { position : b , length : a - b } } function f ( a ) { var d , c , e , f = r . getParagraphElements ( a ) , g = a . cloneRange ( ) , h = [ ] ; d = f [ 0 ] ; 1 < f . length && ( r . hasNoODFContent ( d ) && ( d = f [ f . length - 1 ] ) , c = d . getAttributeNS ( odf . Namespaces . textns , "style-name" ) || "" ) ; f . forEach ( function ( d , f ) { var k , n ; g . setStart ( d , 0 ) ; g . collapse ( ! 0 ) ;
k = q ( g , d , ! 1 ) . position ; 0 < f && ( n = new ops . OpMergeParagraph , n . init ( { memberid : b , paragraphStyleName : c , destinationStartPosition : e , sourceStartPosition : k , moveCursor : 1 === f } ) , h . unshift ( n ) ) ; e = k ; g . selectNodeContents ( d ) ; if ( k = l . rangeIntersection ( g , a ) ) k = q ( k , d , ! 0 ) , 0 < k . length && ( n = new ops . OpRemoveText , n . init ( { memberid : b , position : k . position , length : k . length } ) , h . unshift ( n ) ) } ) ; return h } function e ( a ) { 0 > a . length && ( a . position += a . length , a . length = - a . length ) ; return a } function a ( a ) { if ( ! B ) return ! 1 ; var c , g = d . getCursor ( b ) . getSelectedRange ( ) . cloneRange ( ) ,
l = e ( d . getCursorSelection ( b ) ) , k ; if ( 0 === l . length ) { l = void 0 ; c = d . getCursor ( b ) . getNode ( ) ; k = d . getRootElement ( c ) ; var n = [ d . getPositionFilter ( ) , d . createRootFilter ( k ) ] ; k = d . createStepIterator ( c , 0 , n , k ) ; k . roundToClosestStep ( ) && ( a ? k . nextStep ( ) : k . previousStep ( ) ) && ( l = e ( d . convertDomToCursorRange ( { anchorNode : c , anchorOffset : 0 , focusNode : k . container ( ) , focusOffset : k . offset ( ) } ) ) , a ? ( g . setStart ( c , 0 ) , g . setEnd ( k . container ( ) , k . offset ( ) ) ) : ( g . setStart ( k . container ( ) , k . offset ( ) ) , g . setEnd ( c , 0 ) ) ) } l && h . enqueue ( f ( g ) ) ; return void 0 !==
l } var d = h . getOdtDocument ( ) , r = odf . OdfUtils , l = core . DomUtils , B = ! 1 , y = odf . Namespaces . textns , D = core . StepDirection . NEXT ; this . isEnabled = function ( ) { return B } ; this . enqueueParagraphSplittingOps = function ( ) { if ( ! B ) return ! 1 ; var a = d . getCursor ( b ) , c = a . getSelectedRange ( ) , g = e ( d . getCursorSelection ( b ) ) , l = [ ] , a = r . getParagraphElement ( a . getNode ( ) ) , k = a . getAttributeNS ( y , "style-name" ) || "" ; 0 < g . length && ( l = l . concat ( f ( c ) ) ) ; c = new ops . OpSplitParagraph ; c . init ( { memberid : b , position : g . position , paragraphStyleName : k , sourceParagraphPosition : d . convertDomPointToCursorStep ( a ,
0 , D ) , moveCursor : ! 0 } ) ; l . push ( c ) ; n && ( g = n ( g . position + 1 ) , l = l . concat ( g ) ) ; h . enqueue ( l ) ; return ! 0 } ; this . removeTextByBackspaceKey = function ( ) { return a ( ! 1 ) } ; this . removeTextByDeleteKey = function ( ) { return a ( ! 0 ) } ; this . removeCurrentSelection = function ( ) { if ( ! B ) return ! 1 ; var a = d . getCursor ( b ) . getSelectedRange ( ) ; h . enqueue ( f ( a ) ) ; return ! 0 } ; this . insertText = function ( a ) { if ( B ) { var c = d . getCursor ( b ) . getSelectedRange ( ) , l = e ( d . getCursorSelection ( b ) ) , k = [ ] , n = ! 1 ; 0 < l . length && ( k = k . concat ( f ( c ) ) , n = ! 0 ) ; c = new ops . OpInsertText ; c . init ( { memberid : b ,
position : l . position , text : a , moveCursor : ! 0 } ) ; k . push ( c ) ; g && ( a = g ( l . position , a . length , n ) ) && k . push ( a ) ; h . enqueue ( k ) } } ; this . destroy = function ( a ) { d . unsubscribe ( ops . Document . signalCursorMoved , m ) ; k . unsubscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , p ) ; a ( ) } ; d . subscribe ( ops . Document . signalCursorMoved , m ) ; k . subscribe ( gui . CommonConstraints . EDIT . REVIEW _MODE , p ) ; p ( ) } ; gui . UndoManager = function ( ) { } ; gui . UndoManager . prototype . subscribe = function ( h , k ) { } ; gui . UndoManager . prototype . unsubscribe = function ( h , k ) { } ; gui . UndoManager . prototype . setDocument = function ( h ) { } ; gui . UndoManager . prototype . setInitialState = function ( ) { } ; gui . UndoManager . prototype . initialize = function ( ) { } ; gui . UndoManager . prototype . purgeInitialState = function ( ) { } ; gui . UndoManager . prototype . setPlaybackFunction = function ( h ) { } ; gui . UndoManager . prototype . hasUndoStates = function ( ) { } ;
gui . UndoManager . prototype . hasRedoStates = function ( ) { } ; gui . UndoManager . prototype . moveForward = function ( h ) { } ; gui . UndoManager . prototype . moveBackward = function ( h ) { } ; gui . UndoManager . prototype . onOperationExecuted = function ( h ) { } ; gui . UndoManager . prototype . isDocumentModified = function ( ) { } ; gui . UndoManager . prototype . setDocumentModified = function ( h ) { } ; gui . UndoManager . signalUndoStackChanged = "undoStackChanged" ; gui . UndoManager . signalUndoStateCreated = "undoStateCreated" ; gui . UndoManager . signalUndoStateModified = "undoStateModified" ;
gui . UndoManager . signalDocumentModifiedChanged = "documentModifiedChanged" ; gui . SessionControllerOptions = function ( ) { this . annotationsEnabled = this . directParagraphStylingEnabled = this . directTextStylingEnabled = ! 1 } ;
( function ( ) { var h = core . PositionFilter . FilterResult . FILTER _ACCEPT ; gui . SessionController = function ( k , c , b , g ) { function n ( a , b ) { var d = C . getDOMDocument ( ) , c = null ; d . caretRangeFromPoint ? ( d = d . caretRangeFromPoint ( a , b ) , c = { container : d . startContainer , offset : d . startOffset } ) : d . caretPositionFromPoint && ( d = d . caretPositionFromPoint ( a , b ) ) && d . offsetNode && ( c = { container : d . offsetNode , offset : d . offset } ) ; return c } function p ( a ) { var b = C . getCursor ( c ) . getSelectedRange ( ) ; b . collapsed ? a . preventDefault ( ) : Y . setDataFromRange ( a , b ) ? fa . removeCurrentSelection ( ) :
runtime . log ( "Cut operation failed" ) } function m ( ) { return ! 1 !== C . getCursor ( c ) . getSelectedRange ( ) . collapsed } function q ( a ) { var b = C . getCursor ( c ) . getSelectedRange ( ) ; b . collapsed ? a . preventDefault ( ) : Y . setDataFromRange ( a , b ) || runtime . log ( "Copy operation failed" ) } function f ( a ) { var b ; R . clipboardData && R . clipboardData . getData ? b = R . clipboardData . getData ( "Text" ) : a . clipboardData && a . clipboardData . getData && ( b = a . clipboardData . getData ( "text/plain" ) ) ; b && ( fa . removeCurrentSelection ( ) , ga . paste ( b ) ) ; a . preventDefault ? a . preventDefault ( ) :
a . returnValue = ! 1 } function e ( ) { return ! 1 } function a ( a ) { if ( V ) V . onOperationExecuted ( a ) } function d ( a ) { C . emit ( ops . OdtDocument . signalUndoStackChanged , a ) } function r ( ) { var a ; return V ? ( a = M . hasFocus ( ) , V . moveBackward ( 1 ) , a && M . focus ( ) , ! 0 ) : ! 1 } function l ( ) { var a ; return V ? ( a = M . hasFocus ( ) , V . moveForward ( 1 ) , a && M . focus ( ) , ! 0 ) : ! 1 } function B ( a ) { var d = C . getCursor ( c ) . getSelectedRange ( ) , e = ( a . target || a . srcElement || null ) . getAttribute ( "end" ) ; d && e && ( a = n ( a . clientX , a . clientY ) ) && ( ia . setUnfilteredPosition ( a . container , a . offset ) , ba . acceptPosition ( ia ) ===
h && ( d = d . cloneRange ( ) , "left" === e ? d . setStart ( ia . container ( ) , ia . unfilteredDomOffset ( ) ) : d . setEnd ( ia . container ( ) , ia . unfilteredDomOffset ( ) ) , b . setSelectedRange ( d , "right" === e ) , C . emit ( ops . Document . signalCursorMoved , b ) ) ) } function y ( ) { W . selectRange ( b . getSelectedRange ( ) , b . hasForwardSelection ( ) , 1 ) } function D ( ) { var a = R . getSelection ( ) , d = 0 < a . rangeCount && W . selectionToRange ( a ) ; X && d && ( J = ! 0 , la . clearSelection ( ) , ia . setUnfilteredPosition ( a . focusNode , a . focusOffset ) , ba . acceptPosition ( ia ) === h && ( 2 === oa ? W . expandToWordBoundaries ( d . range ) :
3 <= oa && W . expandToParagraphBoundaries ( d . range ) , b . setSelectedRange ( d . range , d . hasForwardSelection ) , C . emit ( ops . Document . signalCursorMoved , b ) ) ) } function z ( a ) { var b = a . target || a . srcElement || null , d = C . getCursor ( c ) ; if ( X = null !== b && U . containsNode ( C . getOdfCanvas ( ) . getElement ( ) , b ) ) J = ! 1 , b = C . getRootElement ( b ) || C . getRootNode ( ) , ba = C . createRootFilter ( b ) , oa = 0 === a . button ? a . detail : 0 , d && a . shiftKey ? R . getSelection ( ) . collapse ( d . getAnchorNode ( ) , 0 ) : ( a = R . getSelection ( ) , b = d . getSelectedRange ( ) , a . extend ? d . hasForwardSelection ( ) ?
( a . collapse ( b . startContainer , b . startOffset ) , a . extend ( b . endContainer , b . endOffset ) ) : ( a . collapse ( b . endContainer , b . endOffset ) , a . extend ( b . startContainer , b . startOffset ) ) : ( a . removeAllRanges ( ) , a . addRange ( b . cloneRange ( ) ) ) ) , 1 < oa && D ( ) } function t ( a ) { var b = C . getRootElement ( a ) , d = C . createRootFilter ( b ) , b = C . createStepIterator ( a , 0 , [ d , C . getPositionFilter ( ) ] , b ) ; b . setPosition ( a , a . childNodes . length ) ; return b . roundToNextStep ( ) ? { container : b . container ( ) , offset : b . offset ( ) } : null } function x ( a ) { var b ; b = ( b = R . getSelection ( ) ) ? { anchorNode : b . anchorNode ,
anchorOffset : b . anchorOffset , focusNode : b . focusNode , focusOffset : b . focusOffset } : null ; var d = R . getSelection ( ) . isCollapsed , c , e ; b . anchorNode || b . focusNode || ! ( c = n ( a . clientX , a . clientY ) ) || ( b . anchorNode = c . container , b . anchorOffset = c . offset , b . focusNode = b . anchorNode , b . focusOffset = b . anchorOffset ) ; if ( T . isImage ( b . focusNode ) && 0 === b . focusOffset && T . isCharacterFrame ( b . focusNode . parentNode ) ) { if ( e = b . focusNode . parentNode , c = e . getBoundingClientRect ( ) , a . clientX > c . left && ( c = t ( e ) ) ) b . focusNode = c . container , b . focusOffset = c . offset ,
d && ( b . anchorNode = b . focusNode , b . anchorOffset = b . focusOffset ) } else T . isImage ( b . focusNode . firstChild ) && 1 === b . focusOffset && T . isCharacterFrame ( b . focusNode ) && ( c = t ( b . focusNode ) ) && ( b . anchorNode = b . focusNode = c . container , b . anchorOffset = b . focusOffset = c . offset ) ; b . anchorNode && b . focusNode && ( b = W . selectionToRange ( b ) , W . selectRange ( b . range , b . hasForwardSelection , 0 === a . button ? a . detail : 0 ) ) ; M . focus ( ) } function w ( a ) { var b ; if ( b = n ( a . clientX , a . clientY ) ) a = b . container , b = b . offset , a = { anchorNode : a , anchorOffset : b , focusNode : a , focusOffset : b } ,
a = W . selectionToRange ( a ) , W . selectRange ( a . range , a . hasForwardSelection , 2 ) , M . focus ( ) } function F ( a ) { var d = a . target || a . srcElement || null , c , e , f ; ma . processRequests ( ) ; X && ( T . isImage ( d ) && T . isCharacterFrame ( d . parentNode ) && R . getSelection ( ) . isCollapsed ? ( W . selectImage ( d . parentNode ) , M . focus ( ) ) : la . isSelectorElement ( d ) ? M . focus ( ) : J ? ( d = b . getSelectedRange ( ) , e = d . collapsed , T . isImage ( d . endContainer ) && 0 === d . endOffset && T . isCharacterFrame ( d . endContainer . parentNode ) && ( f = d . endContainer . parentNode , f = t ( f ) ) && ( d . setEnd ( f . container ,
f . offset ) , e && d . collapse ( ! 1 ) ) , W . selectRange ( d , b . hasForwardSelection ( ) , 0 === a . button ? a . detail : 0 ) , M . focus ( ) ) : ua ? x ( a ) : ( c = U . cloneEvent ( a ) , S = runtime . setTimeout ( function ( ) { x ( c ) } , 0 ) ) , oa = 0 , J = X = ! 1 ) } function L ( a ) { var b = C . getCursor ( c ) . getSelectedRange ( ) ; b . collapsed || ca . exportRangeToDataTransfer ( a . dataTransfer , b ) } function H ( ) { X && M . focus ( ) ; oa = 0 ; J = X = ! 1 } function G ( a ) { F ( a ) } function A ( a ) { var b = a . target || a . srcElement || null , d = null ; "annotationRemoveButton" === b . className ? ( runtime . assert ( ja , "Remove buttons are displayed on annotations while annotation editing is disabled in the controller." ) ,
d = b . parentNode . getElementsByTagNameNS ( odf . Namespaces . officens , "annotation" ) . item ( 0 ) , ea . removeAnnotation ( d ) , M . focus ( ) ) : "webodf-draggable" !== b . getAttribute ( "class" ) && F ( a ) } function K ( a ) { ( a = a . data ) && ( - 1 === a . indexOf ( "\n" ) ? fa . insertText ( a ) : ga . paste ( a ) ) } function v ( a ) { return function ( ) { a ( ) ; return ! 0 } } function u ( a ) { return function ( b ) { return C . getCursor ( c ) . getSelectionType ( ) === ops . OdtCursor . RangeSelection ? a ( b ) : ! 0 } } function Q ( b ) { M . unsubscribe ( "keydown" , E . handleEvent ) ; M . unsubscribe ( "keypress" , Z . handleEvent ) ; M . unsubscribe ( "keyup" ,
da . handleEvent ) ; M . unsubscribe ( "copy" , q ) ; M . unsubscribe ( "mousedown" , z ) ; M . unsubscribe ( "mousemove" , ma . trigger ) ; M . unsubscribe ( "mouseup" , A ) ; M . unsubscribe ( "contextmenu" , G ) ; M . unsubscribe ( "dragstart" , L ) ; M . unsubscribe ( "dragend" , H ) ; M . unsubscribe ( "click" , pa . handleClick ) ; M . unsubscribe ( "longpress" , w ) ; M . unsubscribe ( "drag" , B ) ; M . unsubscribe ( "dragstop" , y ) ; C . unsubscribe ( ops . OdtDocument . signalOperationEnd , na . trigger ) ; C . unsubscribe ( ops . Document . signalCursorAdded , ka . registerCursor ) ; C . unsubscribe ( ops . Document . signalCursorRemoved ,
ka . removeCursor ) ; C . unsubscribe ( ops . OdtDocument . signalOperationEnd , a ) ; b ( ) } var R = runtime . getWindow ( ) , C = k . getOdtDocument ( ) , I = new gui . SessionConstraints , P = new gui . SessionContext ( k , c ) , U = core . DomUtils , T = odf . OdfUtils , ca = new gui . MimeDataExporter , Y = new gui . Clipboard ( ca ) , E = new gui . KeyboardHandler , Z = new gui . KeyboardHandler , da = new gui . KeyboardHandler , X = ! 1 , ha = new odf . ObjectNameGenerator ( C . getOdfCanvas ( ) . odfContainer ( ) , c ) , J = ! 1 , ba = null , S , V = null , M = new gui . EventManager ( C ) , ja = g . annotationsEnabled , ea = new gui . AnnotationController ( k ,
I , c ) , aa = new gui . DirectFormattingController ( k , I , P , c , ha , g . directTextStylingEnabled , g . directParagraphStylingEnabled ) , fa = new gui . TextController ( k , I , P , c , aa . createCursorStyleOp , aa . createParagraphStyleOps ) , qa = new gui . ImageController ( k , I , P , c , ha ) , la = new gui . ImageSelector ( C . getOdfCanvas ( ) ) , ia = C . createPositionIterator ( C . getRootNode ( ) ) , ma , na , ga = new gui . PasteController ( k , I , P , c ) , ka = new gui . InputMethodEditor ( c , M ) , oa = 0 , pa = new gui . HyperlinkClickHandler ( C . getOdfCanvas ( ) . getElement , E , da ) , ta = new gui . HyperlinkController ( k ,
I , P , c ) , W = new gui . SelectionController ( k , c ) , va = new gui . MetadataController ( k , c ) , N = gui . KeyboardHandler . Modifier , O = gui . KeyboardHandler . KeyCode , ra = - 1 !== R . navigator . appVersion . toLowerCase ( ) . indexOf ( "mac" ) , ua = - 1 !== [ "iPad" , "iPod" , "iPhone" ] . indexOf ( R . navigator . platform ) , sa ; runtime . assert ( null !== R , "Expected to be run in an environment which has a global window, like a browser." ) ; this . undo = r ; this . redo = l ; this . insertLocalCursor = function ( ) { runtime . assert ( void 0 === k . getOdtDocument ( ) . getCursor ( c ) , "Inserting local cursor a second time." ) ;
var a = new ops . OpAddCursor ; a . init ( { memberid : c } ) ; k . enqueue ( [ a ] ) ; M . focus ( ) } ; this . removeLocalCursor = function ( ) { runtime . assert ( void 0 !== k . getOdtDocument ( ) . getCursor ( c ) , "Removing local cursor without inserting before." ) ; var a = new ops . OpRemoveCursor ; a . init ( { memberid : c } ) ; k . enqueue ( [ a ] ) } ; this . startEditing = function ( ) { ka . subscribe ( gui . InputMethodEditor . signalCompositionStart , fa . removeCurrentSelection ) ; ka . subscribe ( gui . InputMethodEditor . signalCompositionEnd , K ) ; M . subscribe ( "beforecut" , m ) ; M . subscribe ( "cut" , p ) ;
M . subscribe ( "beforepaste" , e ) ; M . subscribe ( "paste" , f ) ; V && V . initialize ( ) ; M . setEditing ( ! 0 ) ; pa . setModifier ( ra ? N . Meta : N . Ctrl ) ; E . bind ( O . Backspace , N . None , v ( fa . removeTextByBackspaceKey ) , ! 0 ) ; E . bind ( O . Delete , N . None , fa . removeTextByDeleteKey ) ; E . bind ( O . Tab , N . None , u ( function ( ) { fa . insertText ( "\t" ) ; return ! 0 } ) ) ; ra ? ( E . bind ( O . Clear , N . None , fa . removeCurrentSelection ) , E . bind ( O . B , N . Meta , u ( aa . toggleBold ) ) , E . bind ( O . I , N . Meta , u ( aa . toggleItalic ) ) , E . bind ( O . U , N . Meta , u ( aa . toggleUnderline ) ) , E . bind ( O . L , N . MetaShift , u ( aa . alignParagraphLeft ) ) ,
E . bind ( O . E , N . MetaShift , u ( aa . alignParagraphCenter ) ) , E . bind ( O . R , N . MetaShift , u ( aa . alignParagraphRight ) ) , E . bind ( O . J , N . MetaShift , u ( aa . alignParagraphJustified ) ) , ja && E . bind ( O . C , N . MetaShift , ea . addAnnotation ) , E . bind ( O . Z , N . Meta , r ) , E . bind ( O . Z , N . MetaShift , l ) ) : ( E . bind ( O . B , N . Ctrl , u ( aa . toggleBold ) ) , E . bind ( O . I , N . Ctrl , u ( aa . toggleItalic ) ) , E . bind ( O . U , N . Ctrl , u ( aa . toggleUnderline ) ) , E . bind ( O . L , N . CtrlShift , u ( aa . alignParagraphLeft ) ) , E . bind ( O . E , N . CtrlShift , u ( aa . alignParagraphCenter ) ) , E . bind ( O . R , N . CtrlShift , u ( aa . alignParagraphRight ) ) ,
E . bind ( O . J , N . CtrlShift , u ( aa . alignParagraphJustified ) ) , ja && E . bind ( O . C , N . CtrlAlt , ea . addAnnotation ) , E . bind ( O . Z , N . Ctrl , r ) , E . bind ( O . Z , N . CtrlShift , l ) ) ; Z . setDefault ( u ( function ( a ) { var b ; b = null === a . which || void 0 === a . which ? String . fromCharCode ( a . keyCode ) : 0 !== a . which && 0 !== a . charCode ? String . fromCharCode ( a . which ) : null ; return ! b || a . altKey || a . ctrlKey || a . metaKey ? ! 1 : ( fa . insertText ( b ) , ! 0 ) } ) ) ; Z . bind ( O . Enter , N . None , u ( fa . enqueueParagraphSplittingOps ) ) } ; this . endEditing = function ( ) { ka . unsubscribe ( gui . InputMethodEditor . signalCompositionStart ,
fa . removeCurrentSelection ) ; ka . unsubscribe ( gui . InputMethodEditor . signalCompositionEnd , K ) ; M . unsubscribe ( "cut" , p ) ; M . unsubscribe ( "beforecut" , m ) ; M . unsubscribe ( "paste" , f ) ; M . unsubscribe ( "beforepaste" , e ) ; M . setEditing ( ! 1 ) ; pa . setModifier ( N . None ) ; E . bind ( O . Backspace , N . None , function ( ) { return ! 0 } , ! 0 ) ; E . unbind ( O . Delete , N . None ) ; E . unbind ( O . Tab , N . None ) ; ra ? ( E . unbind ( O . Clear , N . None ) , E . unbind ( O . B , N . Meta ) , E . unbind ( O . I , N . Meta ) , E . unbind ( O . U , N . Meta ) , E . unbind ( O . L , N . MetaShift ) , E . unbind ( O . E , N . MetaShift ) , E . unbind ( O . R , N . MetaShift ) ,
E . unbind ( O . J , N . MetaShift ) , ja && E . unbind ( O . C , N . MetaShift ) , E . unbind ( O . Z , N . Meta ) , E . unbind ( O . Z , N . MetaShift ) ) : ( E . unbind ( O . B , N . Ctrl ) , E . unbind ( O . I , N . Ctrl ) , E . unbind ( O . U , N . Ctrl ) , E . unbind ( O . L , N . CtrlShift ) , E . unbind ( O . E , N . CtrlShift ) , E . unbind ( O . R , N . CtrlShift ) , E . unbind ( O . J , N . CtrlShift ) , ja && E . unbind ( O . C , N . CtrlAlt ) , E . unbind ( O . Z , N . Ctrl ) , E . unbind ( O . Z , N . CtrlShift ) ) ; Z . setDefault ( null ) ; Z . unbind ( O . Enter , N . None ) } ; this . getInputMemberId = function ( ) { return c } ; this . getSession = function ( ) { return k } ; this . getSessionConstraints = function ( ) { return I } ;
this . setUndoManager = function ( a ) { V && V . unsubscribe ( gui . UndoManager . signalUndoStackChanged , d ) ; if ( V = a ) V . setDocument ( C ) , V . setPlaybackFunction ( k . enqueue ) , V . subscribe ( gui . UndoManager . signalUndoStackChanged , d ) } ; this . getUndoManager = function ( ) { return V } ; this . getMetadataController = function ( ) { return va } ; this . getAnnotationController = function ( ) { return ea } ; this . getDirectFormattingController = function ( ) { return aa } ; this . getHyperlinkClickHandler = function ( ) { return pa } ; this . getHyperlinkController = function ( ) { return ta } ;
this . getImageController = function ( ) { return qa } ; this . getSelectionController = function ( ) { return W } ; this . getTextController = function ( ) { return fa } ; this . getEventManager = function ( ) { return M } ; this . getKeyboardHandlers = function ( ) { return { keydown : E , keypress : Z } } ; this . destroy = function ( a ) { var b = [ ma . destroy , na . destroy , aa . destroy , ka . destroy , M . destroy , pa . destroy , ta . destroy , va . destroy , W . destroy , fa . destroy , Q ] ; sa && b . unshift ( sa . destroy ) ; runtime . clearTimeout ( S ) ; core . Async . destroyAll ( b , a ) } ; ma = core . Task . createRedrawTask ( D ) ;
na = core . Task . createRedrawTask ( function ( ) { var a = C . getCursor ( c ) ; if ( a && a . getSelectionType ( ) === ops . OdtCursor . RegionSelection && ( a = T . getImageElements ( a . getSelectedRange ( ) ) [ 0 ] ) ) { la . select ( a . parentNode ) ; return } la . clearSelection ( ) } ) ; E . bind ( O . Left , N . None , u ( W . moveCursorToLeft ) ) ; E . bind ( O . Right , N . None , u ( W . moveCursorToRight ) ) ; E . bind ( O . Up , N . None , u ( W . moveCursorUp ) ) ; E . bind ( O . Down , N . None , u ( W . moveCursorDown ) ) ; E . bind ( O . Left , N . Shift , u ( W . extendSelectionToLeft ) ) ; E . bind ( O . Right , N . Shift , u ( W . extendSelectionToRight ) ) ; E . bind ( O . Up ,
N . Shift , u ( W . extendSelectionUp ) ) ; E . bind ( O . Down , N . Shift , u ( W . extendSelectionDown ) ) ; E . bind ( O . Home , N . None , u ( W . moveCursorToLineStart ) ) ; E . bind ( O . End , N . None , u ( W . moveCursorToLineEnd ) ) ; E . bind ( O . Home , N . Ctrl , u ( W . moveCursorToDocumentStart ) ) ; E . bind ( O . End , N . Ctrl , u ( W . moveCursorToDocumentEnd ) ) ; E . bind ( O . Home , N . Shift , u ( W . extendSelectionToLineStart ) ) ; E . bind ( O . End , N . Shift , u ( W . extendSelectionToLineEnd ) ) ; E . bind ( O . Up , N . CtrlShift , u ( W . extendSelectionToParagraphStart ) ) ; E . bind ( O . Down , N . CtrlShift , u ( W . extendSelectionToParagraphEnd ) ) ;
E . bind ( O . Home , N . CtrlShift , u ( W . extendSelectionToDocumentStart ) ) ; E . bind ( O . End , N . CtrlShift , u ( W . extendSelectionToDocumentEnd ) ) ; ra ? ( E . bind ( O . Left , N . Alt , u ( W . moveCursorBeforeWord ) ) , E . bind ( O . Right , N . Alt , u ( W . moveCursorPastWord ) ) , E . bind ( O . Left , N . Meta , u ( W . moveCursorToLineStart ) ) , E . bind ( O . Right , N . Meta , u ( W . moveCursorToLineEnd ) ) , E . bind ( O . Home , N . Meta , u ( W . moveCursorToDocumentStart ) ) , E . bind ( O . End , N . Meta , u ( W . moveCursorToDocumentEnd ) ) , E . bind ( O . Left , N . AltShift , u ( W . extendSelectionBeforeWord ) ) , E . bind ( O . Right , N . AltShift ,
u ( W . extendSelectionPastWord ) ) , E . bind ( O . Left , N . MetaShift , u ( W . extendSelectionToLineStart ) ) , E . bind ( O . Right , N . MetaShift , u ( W . extendSelectionToLineEnd ) ) , E . bind ( O . Up , N . AltShift , u ( W . extendSelectionToParagraphStart ) ) , E . bind ( O . Down , N . AltShift , u ( W . extendSelectionToParagraphEnd ) ) , E . bind ( O . Up , N . MetaShift , u ( W . extendSelectionToDocumentStart ) ) , E . bind ( O . Down , N . MetaShift , u ( W . extendSelectionToDocumentEnd ) ) , E . bind ( O . A , N . Meta , u ( W . extendSelectionToEntireDocument ) ) ) : ( E . bind ( O . Left , N . Ctrl , u ( W . moveCursorBeforeWord ) ) , E . bind ( O . Right ,
N . Ctrl , u ( W . moveCursorPastWord ) ) , E . bind ( O . Left , N . CtrlShift , u ( W . extendSelectionBeforeWord ) ) , E . bind ( O . Right , N . CtrlShift , u ( W . extendSelectionPastWord ) ) , E . bind ( O . A , N . Ctrl , u ( W . extendSelectionToEntireDocument ) ) ) ; ua && ( sa = new gui . IOSSafariSupport ( M ) ) ; M . subscribe ( "keydown" , E . handleEvent ) ; M . subscribe ( "keypress" , Z . handleEvent ) ; M . subscribe ( "keyup" , da . handleEvent ) ; M . subscribe ( "copy" , q ) ; M . subscribe ( "mousedown" , z ) ; M . subscribe ( "mousemove" , ma . trigger ) ; M . subscribe ( "mouseup" , A ) ; M . subscribe ( "contextmenu" , G ) ; M . subscribe ( "dragstart" ,
L ) ; M . subscribe ( "dragend" , H ) ; M . subscribe ( "click" , pa . handleClick ) ; M . subscribe ( "longpress" , w ) ; M . subscribe ( "drag" , B ) ; M . subscribe ( "dragstop" , y ) ; C . subscribe ( ops . OdtDocument . signalOperationEnd , na . trigger ) ; C . subscribe ( ops . Document . signalCursorAdded , ka . registerCursor ) ; C . subscribe ( ops . Document . signalCursorRemoved , ka . removeCursor ) ; C . subscribe ( ops . OdtDocument . signalOperationEnd , a ) } } ) ( ) ; gui . CaretManager = function ( h , k ) { function c ( b ) { return n . hasOwnProperty ( b ) ? n [ b ] : null } function b ( ) { return Object . keys ( n ) . map ( function ( b ) { return n [ b ] } ) } function g ( b ) { var c = n [ b ] ; c && ( delete n [ b ] , b === h . getInputMemberId ( ) ? ( m . unsubscribe ( ops . OdtDocument . signalProcessingBatchEnd , c . ensureVisible ) , m . unsubscribe ( ops . Document . signalCursorMoved , c . refreshCursorBlinking ) , q . unsubscribe ( "compositionupdate" , c . handleUpdate ) , q . unsubscribe ( "compositionend" , c . handleUpdate ) , q . unsubscribe ( "focus" , c . setFocus ) , q . unsubscribe ( "blur" ,
c . removeFocus ) , p . removeEventListener ( "focus" , c . show , ! 1 ) , p . removeEventListener ( "blur" , c . hide , ! 1 ) ) : m . unsubscribe ( ops . OdtDocument . signalProcessingBatchEnd , c . handleUpdate ) , c . destroy ( function ( ) { } ) ) } var n = { } , p = runtime . getWindow ( ) , m = h . getSession ( ) . getOdtDocument ( ) , q = h . getEventManager ( ) ; this . registerCursor = function ( b , c , a ) { var d = b . getMemberId ( ) ; b = new gui . Caret ( b , k , c , a ) ; n [ d ] = b ; d === h . getInputMemberId ( ) ? ( runtime . log ( "Starting to track input on new cursor of " + d ) , m . subscribe ( ops . OdtDocument . signalProcessingBatchEnd ,
b . ensureVisible ) , m . subscribe ( ops . Document . signalCursorMoved , b . refreshCursorBlinking ) , q . subscribe ( "compositionupdate" , b . handleUpdate ) , q . subscribe ( "compositionend" , b . handleUpdate ) , q . subscribe ( "focus" , b . setFocus ) , q . subscribe ( "blur" , b . removeFocus ) , p . addEventListener ( "focus" , b . show , ! 1 ) , p . addEventListener ( "blur" , b . hide , ! 1 ) , b . setOverlayElement ( q . getEventTrap ( ) ) ) : m . subscribe ( ops . OdtDocument . signalProcessingBatchEnd , b . handleUpdate ) ; return b } ; this . getCaret = c ; this . getCarets = b ; this . destroy = function ( c ) { var e =
b ( ) . map ( function ( a ) { return a . destroy } ) ; h . getSelectionController ( ) . setCaretXPositionLocator ( null ) ; m . unsubscribe ( ops . Document . signalCursorRemoved , g ) ; n = { } ; core . Async . destroyAll ( e , c ) } ; h . getSelectionController ( ) . setCaretXPositionLocator ( function ( ) { var b = c ( h . getInputMemberId ( ) ) , e ; b && ( e = b . getBoundingClientRect ( ) ) ; return e ? e . right : void 0 } ) ; m . subscribe ( ops . Document . signalCursorRemoved , g ) } ; gui . EditInfoHandle = function ( h ) { var k = [ ] , c , b = h . ownerDocument , g = b . documentElement . namespaceURI ; this . setEdits = function ( h ) { k = h ; var p , m , q , f ; core . DomUtils . removeAllChildNodes ( c ) ; for ( h = 0 ; h < k . length ; h += 1 ) p = b . createElementNS ( g , "div" ) , p . className = "editInfo" , m = b . createElementNS ( g , "span" ) , m . className = "editInfoColor" , m . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" , k [ h ] . memberid ) , q = b . createElementNS ( g , "span" ) , q . className = "editInfoAuthor" , q . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" ,
k [ h ] . memberid ) , f = b . createElementNS ( g , "span" ) , f . className = "editInfoTime" , f . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" , k [ h ] . memberid ) , f . appendChild ( b . createTextNode ( k [ h ] . time . toString ( ) ) ) , p . appendChild ( m ) , p . appendChild ( q ) , p . appendChild ( f ) , c . appendChild ( p ) } ; this . show = function ( ) { c . style . display = "block" } ; this . hide = function ( ) { c . style . display = "none" } ; this . destroy = function ( b ) { h . removeChild ( c ) ; b ( ) } ; c = b . createElementNS ( g , "div" ) ; c . setAttribute ( "class" , "editInfoHandle" ) ; c . style . display = "none" ;
h . appendChild ( c ) } ; ops . EditInfo = function ( h , k ) { function c ( ) { var b = [ ] , c ; for ( c in g ) g . hasOwnProperty ( c ) && b . push ( { memberid : c , time : g [ c ] . time } ) ; b . sort ( function ( b , c ) { return b . time - c . time } ) ; return b } var b , g = { } ; this . getNode = function ( ) { return b } ; this . getOdtDocument = function ( ) { return k } ; this . getEdits = function ( ) { return g } ; this . getSortedEdits = function ( ) { return c ( ) } ; this . addEdit = function ( b , c ) { g [ b ] = { time : c } } ; this . clearEdits = function ( ) { g = { } } ; this . destroy = function ( c ) { h . parentNode && h . removeChild ( b ) ; c ( ) } ; b = k . getDOMDocument ( ) . createElementNS ( "urn:webodf:names:editinfo" ,
"editinfo" ) ; h . insertBefore ( b , h . firstChild ) } ; gui . EditInfoMarker = function ( h , k ) { function c ( b , a ) { return runtime . setTimeout ( function ( ) { p . style . opacity = b } , a ) } var b = this , g , n , p , m , q , f ; this . addEdit = function ( b , a ) { var d = Date . now ( ) - a ; h . addEdit ( b , a ) ; n . setEdits ( h . getSortedEdits ( ) ) ; p . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" , b ) ; runtime . clearTimeout ( q ) ; runtime . clearTimeout ( f ) ; 1E4 > d ? ( m = c ( 1 , 0 ) , q = c ( . 5 , 1E4 - d ) , f = c ( . 2 , 2E4 - d ) ) : 1E4 <= d && 2E4 > d ? ( m = c ( . 5 , 0 ) , f = c ( . 2 , 2E4 - d ) ) : m = c ( . 2 , 0 ) } ; this . getEdits = function ( ) { return h . getEdits ( ) } ; this . clearEdits = function ( ) { h . clearEdits ( ) ;
n . setEdits ( [ ] ) ; p . hasAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" ) && p . removeAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" ) } ; this . getEditInfo = function ( ) { return h } ; this . show = function ( ) { p . style . display = "block" } ; this . hide = function ( ) { b . hideHandle ( ) ; p . style . display = "none" } ; this . showHandle = function ( ) { n . show ( ) } ; this . hideHandle = function ( ) { n . hide ( ) } ; this . destroy = function ( b ) { runtime . clearTimeout ( m ) ; runtime . clearTimeout ( q ) ; runtime . clearTimeout ( f ) ; g . removeChild ( p ) ; n . destroy ( function ( a ) { a ?
b ( a ) : h . destroy ( b ) } ) } ; ( function ( ) { var c = h . getOdtDocument ( ) . getDOMDocument ( ) ; p = c . createElementNS ( c . documentElement . namespaceURI , "div" ) ; p . setAttribute ( "class" , "editInfoMarker" ) ; p . onmouseover = function ( ) { b . showHandle ( ) } ; p . onmouseout = function ( ) { b . hideHandle ( ) } ; g = h . getNode ( ) ; g . appendChild ( p ) ; n = new gui . EditInfoHandle ( g ) ; k || b . hide ( ) } ) ( ) } ; gui . HyperlinkTooltipView = function ( h , k ) { var c = core . DomUtils , b = odf . OdfUtils , g = runtime . getWindow ( ) , n , p , m ; runtime . assert ( null !== g , "Expected to be run in an environment which has a global window, like a browser." ) ; this . showTooltip = function ( q ) { var f = q . target || q . srcElement , e = h . getSizer ( ) , a = h . getZoomLevel ( ) , d ; a : { for ( ; f ; ) { if ( b . isHyperlink ( f ) ) break a ; if ( b . isParagraph ( f ) || b . isInlineRoot ( f ) ) break ; f = f . parentNode } f = null } if ( f ) { c . containsNode ( e , m ) || e . appendChild ( m ) ; d = p ; var r ; switch ( k ( ) ) { case gui . KeyboardHandler . Modifier . Ctrl : r =
runtime . tr ( "Ctrl-click to follow link" ) ; break ; case gui . KeyboardHandler . Modifier . Meta : r = runtime . tr ( "\u2318-click to follow link" ) ; break ; default : r = "" } d . textContent = r ; n . textContent = b . getHyperlinkTarget ( f ) ; m . style . display = "block" ; d = g . innerWidth - m . offsetWidth - 15 ; f = q . clientX > d ? d : q . clientX + 15 ; d = g . innerHeight - m . offsetHeight - 10 ; q = q . clientY > d ? d : q . clientY + 10 ; e = e . getBoundingClientRect ( ) ; f = ( f - e . left ) / a ; q = ( q - e . top ) / a ; m . style . left = f + "px" ; m . style . top = q + "px" } } ; this . hideTooltip = function ( ) { m . style . display = "none" } ; this . destroy =
function ( b ) { m . parentNode && m . parentNode . removeChild ( m ) ; b ( ) } ; ( function ( ) { var b = h . getElement ( ) . ownerDocument ; n = b . createElement ( "span" ) ; p = b . createElement ( "span" ) ; n . className = "webodf-hyperlinkTooltipLink" ; p . className = "webodf-hyperlinkTooltipText" ; m = b . createElement ( "div" ) ; m . className = "webodf-hyperlinkTooltip" ; m . appendChild ( n ) ; m . appendChild ( p ) ; h . getElement ( ) . appendChild ( m ) } ) ( ) } ; gui . OdfFieldView = function ( h ) { function k ( ) { var b = odf . OdfSchema . getFields ( ) . map ( function ( b ) { return b . replace ( ":" , "|" ) } ) , c = b . join ( ",\n" ) + "\n{ background-color: #D0D0D0; }\n" , b = b . map ( function ( b ) { return b + ":empty::after" } ) . join ( ",\n" ) + "\n{ content:' '; white-space: pre; }\n" ; return c + "\n" + b } var c , b = h . getElement ( ) . ownerDocument ; this . showFieldHighlight = function ( ) { c . appendChild ( b . createTextNode ( k ( ) ) ) } ; this . hideFieldHighlight = function ( ) { for ( var b = c . sheet , h = b . cssRules ; h . length ; ) b . deleteRule ( h . length - 1 ) } ; this . destroy =
function ( b ) { c . parentNode && c . parentNode . removeChild ( c ) ; b ( ) } ; c = function ( ) { var c = b . getElementsByTagName ( "head" ) . item ( 0 ) , h = b . createElement ( "style" ) , k = "" ; h . type = "text/css" ; h . media = "screen, print, handheld, projection" ; odf . Namespaces . forEachPrefix ( function ( b , c ) { k += "@namespace " + b + " url(" + c + ");\n" } ) ; h . appendChild ( b . createTextNode ( k ) ) ; c . appendChild ( h ) ; return h } ( ) } ; gui . ShadowCursor = function ( h ) { var k = h . getDOMDocument ( ) . createRange ( ) , c = ! 0 ; this . removeFromDocument = function ( ) { } ; this . getMemberId = function ( ) { return gui . ShadowCursor . ShadowCursorMemberId } ; this . getSelectedRange = function ( ) { return k } ; this . setSelectedRange = function ( b , g ) { k = b ; c = ! 1 !== g } ; this . hasForwardSelection = function ( ) { return c } ; this . getDocument = function ( ) { return h } ; this . getSelectionType = function ( ) { return ops . OdtCursor . RangeSelection } ; k . setStart ( h . getRootNode ( ) , 0 ) } ; gui . ShadowCursor . ShadowCursorMemberId = "" ; gui . SelectionView = function ( h ) { } ; gui . SelectionView . prototype . rerender = function ( ) { } ; gui . SelectionView . prototype . show = function ( ) { } ; gui . SelectionView . prototype . hide = function ( ) { } ; gui . SelectionView . prototype . destroy = function ( h ) { } ; gui . SelectionViewManager = function ( h ) { function k ( ) { return Object . keys ( c ) . map ( function ( b ) { return c [ b ] } ) } var c = { } ; this . getSelectionView = function ( b ) { return c . hasOwnProperty ( b ) ? c [ b ] : null } ; this . getSelectionViews = k ; this . removeSelectionView = function ( b ) { c . hasOwnProperty ( b ) && ( c [ b ] . destroy ( function ( ) { } ) , delete c [ b ] ) } ; this . hideSelectionView = function ( b ) { c . hasOwnProperty ( b ) && c [ b ] . hide ( ) } ; this . showSelectionView = function ( b ) { c . hasOwnProperty ( b ) && c [ b ] . show ( ) } ; this . rerenderSelectionViews = function ( ) { Object . keys ( c ) . forEach ( function ( b ) { c [ b ] . rerender ( ) } ) } ;
this . registerCursor = function ( b , g ) { var k = b . getMemberId ( ) , p = new h ( b ) ; g ? p . show ( ) : p . hide ( ) ; return c [ k ] = p } ; this . destroy = function ( b ) { function c ( k , m ) { m ? b ( m ) : k < h . length ? h [ k ] . destroy ( function ( b ) { c ( k + 1 , b ) } ) : b ( ) } var h = k ( ) ; c ( 0 , void 0 ) } } ; gui . SessionViewOptions = function ( ) { this . caretBlinksOnRangeSelect = this . caretAvatarsInitiallyVisible = this . editInfoMarkersInitiallyVisible = ! 0 } ;
( function ( ) { function h ( h , c ) { return void 0 !== h ? Boolean ( h ) : c } gui . SessionView = function ( k , c , b , g , n , p ) { function m ( a ) { a . memberId === c && L . getViewport ( ) . scrollIntoView ( a . annotation . getBoundingClientRect ( ) ) } function q ( ) { var a = document . getElementsByTagName ( "head" ) . item ( 0 ) , b = document . createElement ( "style" ) ; b . type = "text/css" ; b . media = "screen, print, handheld, projection" ; a . appendChild ( b ) ; return b } function f ( a , b , d ) { function e ( b , d , c ) { d = b + '[editinfo|memberid="' + a + '"]' + c + d ; a : { var f = t . firstChild ; for ( b = b + '[editinfo|memberid="' +
a + '"]' + c + "{" ; f ; ) { if ( f . nodeType === Node . TEXT _NODE && 0 === f . data . indexOf ( b ) ) { b = f ; break a } f = f . nextSibling } b = null } b ? b . data = d : t . appendChild ( document . createTextNode ( d ) ) } e ( "div.editInfoMarker" , "{ background-color: " + d + "; }" , "" ) ; e ( "span.editInfoColor" , "{ background-color: " + d + "; }" , "" ) ; e ( "span.editInfoAuthor" , '{ content: "' + b + '"; }' , ":before" ) ; e ( "dc|creator" , "{ background-color: " + d + "; }" , "" ) ; e ( ".webodf-selectionOverlay" , "{ fill: " + d + "; stroke: " + d + ";}" , "" ) ; a === c && ( e ( ".webodf-touchEnabled .webodf-selectionOverlay" ,
"{ display: block; }" , " > .webodf-draggable" ) , a = gui . ShadowCursor . ShadowCursorMemberId , e ( ".webodf-selectionOverlay" , "{ fill: " + d + "; stroke: " + d + ";}" , "" ) , e ( ".webodf-touchEnabled .webodf-selectionOverlay" , "{ display: block; }" , " > .webodf-draggable" ) ) } function e ( a ) { var b , d ; for ( d in w ) w . hasOwnProperty ( d ) && ( b = w [ d ] , a ? b . show ( ) : b . hide ( ) ) } function a ( a ) { n . getCarets ( ) . forEach ( function ( b ) { a ? b . showHandle ( ) : b . hideHandle ( ) } ) } function d ( a ) { var b = a . getMemberId ( ) ; a = a . getProperties ( ) ; f ( b , a . fullName , a . color ) } function r ( a ) { var d =
a . getMemberId ( ) , c = b . getOdtDocument ( ) . getMember ( d ) . getProperties ( ) ; n . registerCursor ( a , A , K ) ; p . registerCursor ( a , ! 0 ) ; if ( a = n . getCaret ( d ) ) a . setAvatarImageUrl ( c . imageUrl ) , a . setColor ( c . color ) ; runtime . log ( "+++ View here +++ eagerly created an Caret for '" + d + "'! +++" ) } function l ( a ) { a = a . getMemberId ( ) ; var b = p . getSelectionView ( c ) , d = p . getSelectionView ( gui . ShadowCursor . ShadowCursorMemberId ) , e = n . getCaret ( c ) ; a === c ? ( d . hide ( ) , b && b . show ( ) , e && e . show ( ) ) : a === gui . ShadowCursor . ShadowCursorMemberId && ( d . show ( ) , b && b . hide ( ) ,
e && e . hide ( ) ) } function B ( a ) { p . removeSelectionView ( a ) } function y ( a ) { var d = a . paragraphElement , c = a . memberId ; a = a . timeStamp ; var e , f = "" , g = d . getElementsByTagNameNS ( "urn:webodf:names:editinfo" , "editinfo" ) . item ( 0 ) ; g ? ( f = g . getAttributeNS ( "urn:webodf:names:editinfo" , "id" ) , e = w [ f ] ) : ( f = Math . random ( ) . toString ( ) , e = new ops . EditInfo ( d , b . getOdtDocument ( ) ) , e = new gui . EditInfoMarker ( e , G ) , g = d . getElementsByTagNameNS ( "urn:webodf:names:editinfo" , "editinfo" ) . item ( 0 ) , g . setAttributeNS ( "urn:webodf:names:editinfo" , "id" , f ) , w [ f ] = e ) ;
e . addEdit ( c , new Date ( a ) ) ; H . trigger ( ) } function D ( ) { var a ; x . hasChildNodes ( ) && core . DomUtils . removeAllChildNodes ( x ) ; ! 0 === g . getState ( gui . CommonConstraints . EDIT . ANNOTATIONS . ONLY _DELETE _OWN ) && ( a = b . getOdtDocument ( ) . getMember ( c ) ) && ( a = a . getProperties ( ) . fullName , x . appendChild ( document . createTextNode ( ".annotationWrapper:not([creator = '" + a + "']) .annotationRemoveButton { display: none; }" ) ) ) } function z ( a ) { var b = Object . keys ( w ) . map ( function ( a ) { return w [ a ] } ) ; F . unsubscribe ( ops . Document . signalMemberAdded , d ) ; F . unsubscribe ( ops . Document . signalMemberUpdated ,
d ) ; F . unsubscribe ( ops . Document . signalCursorAdded , r ) ; F . unsubscribe ( ops . Document . signalCursorRemoved , B ) ; F . unsubscribe ( ops . OdtDocument . signalParagraphChanged , y ) ; F . unsubscribe ( ops . Document . signalCursorMoved , l ) ; F . unsubscribe ( ops . OdtDocument . signalParagraphChanged , p . rerenderSelectionViews ) ; F . unsubscribe ( ops . OdtDocument . signalTableAdded , p . rerenderSelectionViews ) ; F . unsubscribe ( ops . OdtDocument . signalParagraphStyleModified , p . rerenderSelectionViews ) ; g . unsubscribe ( gui . CommonConstraints . EDIT . ANNOTATIONS . ONLY _DELETE _OWN ,
D ) ; F . unsubscribe ( ops . Document . signalMemberAdded , D ) ; F . unsubscribe ( ops . Document . signalMemberUpdated , D ) ; t . parentNode . removeChild ( t ) ; x . parentNode . removeChild ( x ) ; ( function R ( d , c ) { c ? a ( c ) : d < b . length ? b [ d ] . destroy ( function ( a ) { R ( d + 1 , a ) } ) : a ( ) } ) ( 0 , void 0 ) } var t , x , w = { } , F , L , H , G = h ( k . editInfoMarkersInitiallyVisible , ! 0 ) , A = h ( k . caretAvatarsInitiallyVisible , ! 0 ) , K = h ( k . caretBlinksOnRangeSelect , ! 0 ) ; this . showEditInfoMarkers = function ( ) { G || ( G = ! 0 , e ( G ) ) } ; this . hideEditInfoMarkers = function ( ) { G && ( G = ! 1 , e ( G ) ) } ; this . showCaretAvatars =
function ( ) { A || ( A = ! 0 , a ( A ) ) } ; this . hideCaretAvatars = function ( ) { A && ( A = ! 1 , a ( A ) ) } ; this . getSession = function ( ) { return b } ; this . getCaret = function ( a ) { return n . getCaret ( a ) } ; this . destroy = function ( a ) { var b = [ H . destroy , z ] ; F . unsubscribe ( ops . OdtDocument . signalAnnotationAdded , m ) ; core . Async . destroyAll ( b , a ) } ; F = b . getOdtDocument ( ) ; L = F . getOdfCanvas ( ) ; F . subscribe ( ops . OdtDocument . signalAnnotationAdded , m ) ; F . subscribe ( ops . Document . signalMemberAdded , d ) ; F . subscribe ( ops . Document . signalMemberUpdated , d ) ; F . subscribe ( ops . Document . signalCursorAdded ,
r ) ; F . subscribe ( ops . Document . signalCursorRemoved , B ) ; F . subscribe ( ops . OdtDocument . signalParagraphChanged , y ) ; F . subscribe ( ops . Document . signalCursorMoved , l ) ; F . subscribe ( ops . OdtDocument . signalParagraphChanged , p . rerenderSelectionViews ) ; F . subscribe ( ops . OdtDocument . signalTableAdded , p . rerenderSelectionViews ) ; F . subscribe ( ops . OdtDocument . signalParagraphStyleModified , p . rerenderSelectionViews ) ; g . subscribe ( gui . CommonConstraints . EDIT . ANNOTATIONS . ONLY _DELETE _OWN , D ) ; F . subscribe ( ops . Document . signalMemberAdded , D ) ; F . subscribe ( ops . Document . signalMemberUpdated ,
D ) ; t = q ( ) ; t . appendChild ( document . createTextNode ( "@namespace editinfo url(urn:webodf:names:editinfo);" ) ) ; t . appendChild ( document . createTextNode ( "@namespace dc url(http://purl.org/dc/elements/1.1/);" ) ) ; x = q ( ) ; D ( ) ; H = core . Task . createRedrawTask ( function ( ) { var a = L . getAnnotationViewManager ( ) ; a && ( a . rehighlightAnnotations ( ) , F . fixCursorPositions ( ) ) } ) } } ) ( ) ; gui . SvgSelectionView = function ( h ) { function k ( ) { var a = d . getRootNode ( ) ; r !== a && ( r = a , l = d . getCanvas ( ) . getSizer ( ) , l . appendChild ( y ) , y . setAttribute ( "class" , "webodf-selectionOverlay" ) , z . setAttribute ( "class" , "webodf-draggable" ) , t . setAttribute ( "class" , "webodf-draggable" ) , z . setAttribute ( "end" , "left" ) , t . setAttribute ( "end" , "right" ) , z . setAttribute ( "r" , 8 ) , t . setAttribute ( "r" , 8 ) , y . appendChild ( D ) , y . appendChild ( z ) , y . appendChild ( t ) ) } function c ( a ) { a = a . getBoundingClientRect ( ) ; return Boolean ( a && 0 !== a . height ) } function b ( a ) { var b =
x . getTextElements ( a , ! 0 , ! 1 ) , d = a . cloneRange ( ) , e = a . cloneRange ( ) ; a = a . cloneRange ( ) ; if ( ! b . length ) return null ; var f ; a : { f = 0 ; var g = b [ f ] , h = d . startContainer === g ? d . startOffset : 0 , l = h ; d . setStart ( g , h ) ; for ( d . setEnd ( g , l ) ; ! c ( d ) ; ) { if ( g . nodeType === Node . ELEMENT _NODE && l < g . childNodes . length ) l = g . childNodes . length ; else if ( g . nodeType === Node . TEXT _NODE && l < g . length ) l += 1 ; else if ( b [ f ] ) g = b [ f ] , f += 1 , h = l = 0 ; else { f = ! 1 ; break a } d . setStart ( g , h ) ; d . setEnd ( g , l ) } f = ! 0 } if ( ! f ) return null ; a : { f = b . length - 1 ; g = b [ f ] ; l = h = e . endContainer === g ? e . endOffset :
g . nodeType === Node . TEXT _NODE ? g . length : g . childNodes . length ; e . setStart ( g , h ) ; for ( e . setEnd ( g , l ) ; ! c ( e ) ; ) { if ( g . nodeType === Node . ELEMENT _NODE && 0 < h ) h = 0 ; else if ( g . nodeType === Node . TEXT _NODE && 0 < h ) -- h ; else if ( b [ f ] ) g = b [ f ] , -- f , h = l = g . length || g . childNodes . length ; else { b = ! 1 ; break a } e . setStart ( g , h ) ; e . setEnd ( g , l ) } b = ! 0 } if ( ! b ) return null ; a . setStart ( d . startContainer , d . startOffset ) ; a . setEnd ( e . endContainer , e . endOffset ) ; return { firstRange : d , lastRange : e , fillerRange : a } } function g ( a , b ) { var d = { } ; d . top = Math . min ( a . top , b . top ) ; d . left =
Math . min ( a . left , b . left ) ; d . right = Math . max ( a . right , b . right ) ; d . bottom = Math . max ( a . bottom , b . bottom ) ; d . width = d . right - d . left ; d . height = d . bottom - d . top ; return d } function n ( a , b ) { b && 0 < b . width && 0 < b . height && ( a = a ? g ( a , b ) : b ) ; return a } function p ( a ) { function b ( a ) { H . setUnfilteredPosition ( a , 0 ) ; return y . acceptNode ( a ) === G && t . acceptPosition ( H ) === G ? G : A } function c ( a ) { var d = null ; b ( a ) === G && ( d = w . getBoundingClientRect ( a ) ) ; return d } var e = a . commonAncestorContainer , f = a . startContainer , g = a . endContainer , h = a . startOffset , l = a . endOffset ,
k , r , m = null , p , q = B . createRange ( ) , t , y = new odf . OdfNodeFilter , z ; if ( f === e || g === e ) return q = a . cloneRange ( ) , m = q . getBoundingClientRect ( ) , q . detach ( ) , m ; for ( a = f ; a . parentNode !== e ; ) a = a . parentNode ; for ( r = g ; r . parentNode !== e ; ) r = r . parentNode ; t = d . createRootFilter ( f ) ; for ( e = a . nextSibling ; e && e !== r ; ) p = c ( e ) , m = n ( m , p ) , e = e . nextSibling ; if ( x . isParagraph ( a ) ) m = n ( m , w . getBoundingClientRect ( a ) ) ; else if ( a . nodeType === Node . TEXT _NODE ) e = a , q . setStart ( e , h ) , q . setEnd ( e , e === r ? l : e . length ) , p = q . getBoundingClientRect ( ) , m = n ( m , p ) ; else for ( z = B . createTreeWalker ( a ,
NodeFilter . SHOW _TEXT , b , ! 1 ) , e = z . currentNode = f ; e && e !== g ; ) q . setStart ( e , h ) , q . setEnd ( e , e . length ) , p = q . getBoundingClientRect ( ) , m = n ( m , p ) , k = e , h = 0 , e = z . nextNode ( ) ; k || ( k = f ) ; if ( x . isParagraph ( r ) ) m = n ( m , w . getBoundingClientRect ( r ) ) ; else if ( r . nodeType === Node . TEXT _NODE ) e = r , q . setStart ( e , e === a ? h : 0 ) , q . setEnd ( e , l ) , p = q . getBoundingClientRect ( ) , m = n ( m , p ) ; else for ( z = B . createTreeWalker ( r , NodeFilter . SHOW _TEXT , b , ! 1 ) , e = z . currentNode = g ; e && e !== k ; ) if ( q . setStart ( e , 0 ) , q . setEnd ( e , l ) , p = q . getBoundingClientRect ( ) , m = n ( m , p ) , e = z . previousNode ( ) ) l =
e . length ; return m } function m ( a , b ) { var d = a . getBoundingClientRect ( ) , c = { width : 0 } ; c . top = d . top ; c . bottom = d . bottom ; c . height = d . height ; c . left = c . right = b ? d . right : d . left ; return c } function q ( ) { var a = h . getSelectedRange ( ) , d ; if ( d = L && h . getSelectionType ( ) === ops . OdtCursor . RangeSelection && ! a . collapsed ) { k ( ) ; var c = w . getBoundingClientRect ( l ) , e = F . getZoomLevel ( ) , a = b ( a ) , f , r , n , q , B , A ; if ( a ) { d = a . firstRange ; f = a . lastRange ; r = a . fillerRange ; n = w . translateRect ( m ( d , ! 1 ) , c , e ) ; B = w . translateRect ( m ( f , ! 0 ) , c , e ) ; q = ( q = p ( r ) ) ? w . translateRect ( q ,
c , e ) : g ( n , B ) ; A = q . left ; q = n . left + Math . max ( 0 , q . width - ( n . left - q . left ) ) ; c = Math . min ( n . top , B . top ) ; e = B . top + B . height ; A = [ { x : n . left , y : c + n . height } , { x : n . left , y : c } , { x : q , y : c } , { x : q , y : e - B . height } , { x : B . right , y : e - B . height } , { x : B . right , y : e } , { x : A , y : e } , { x : A , y : c + n . height } , { x : n . left , y : c + n . height } ] ; q = "" ; var x ; for ( x = 0 ; x < A . length ; x += 1 ) q += A [ x ] . x + "," + A [ x ] . y + " " ; D . setAttribute ( "points" , q ) ; z . setAttribute ( "cx" , n . left ) ; z . setAttribute ( "cy" , c + n . height / 2 ) ; t . setAttribute ( "cx" , B . right ) ; t . setAttribute ( "cy" , e - B . height / 2 ) ; d . detach ( ) ; f . detach ( ) ;
r . detach ( ) } d = Boolean ( a ) } y . style . display = d ? "block" : "none" } function f ( a ) { L && a === h && K . trigger ( ) } function e ( a ) { a = 8 / a ; z . setAttribute ( "r" , a ) ; t . setAttribute ( "r" , a ) } function a ( a ) { l . removeChild ( y ) ; l . classList . remove ( "webodf-virtualSelections" ) ; h . getDocument ( ) . unsubscribe ( ops . Document . signalCursorMoved , f ) ; F . unsubscribe ( gui . ZoomHelper . signalZoomChanged , e ) ; a ( ) } var d = h . getDocument ( ) , r , l , B = d . getDOMDocument ( ) , y = B . createElementNS ( "http://www.w3.org/2000/svg" , "svg" ) , D = B . createElementNS ( "http://www.w3.org/2000/svg" ,
"polygon" ) , z = B . createElementNS ( "http://www.w3.org/2000/svg" , "circle" ) , t = B . createElementNS ( "http://www.w3.org/2000/svg" , "circle" ) , x = odf . OdfUtils , w = core . DomUtils , F = d . getCanvas ( ) . getZoomHelper ( ) , L = ! 0 , H = h . getDocument ( ) . createPositionIterator ( d . getRootNode ( ) ) , G = NodeFilter . FILTER _ACCEPT , A = NodeFilter . FILTER _REJECT , K ; this . rerender = function ( ) { L && K . trigger ( ) } ; this . show = function ( ) { L = ! 0 ; K . trigger ( ) } ; this . hide = function ( ) { L = ! 1 ; K . trigger ( ) } ; this . destroy = function ( b ) { core . Async . destroyAll ( [ K . destroy , a ] , b ) } ; ( function ( ) { var a =
h . getMemberId ( ) ; K = core . Task . createRedrawTask ( q ) ; k ( ) ; y . setAttributeNS ( "urn:webodf:names:editinfo" , "editinfo:memberid" , a ) ; l . classList . add ( "webodf-virtualSelections" ) ; h . getDocument ( ) . subscribe ( ops . Document . signalCursorMoved , f ) ; F . subscribe ( gui . ZoomHelper . signalZoomChanged , e ) ; e ( F . getZoomLevel ( ) ) } ) ( ) } ; gui . UndoStateRules = function ( ) { function h ( b , c ) { var h = b . length ; this . previous = function ( ) { for ( -- h ; 0 <= h ; -- h ) if ( c ( b [ h ] ) ) return b [ h ] ; return null } } function k ( b ) { b = b . spec ( ) ; var c ; b . hasOwnProperty ( "position" ) && ( c = b . position ) ; return c } function c ( b ) { return b . isEdit } function b ( b , c , h ) { if ( ! h ) return h = k ( b ) - k ( c ) , 0 === h || 1 === Math . abs ( h ) ; b = k ( b ) ; c = k ( c ) ; h = k ( h ) ; return b - c === c - h } this . isEditOperation = c ; this . isPartOfOperationSet = function ( g , k ) { var p = void 0 !== g . group , m ; if ( ! g . isEdit || 0 === k . length ) return ! 0 ; m = k [ k . length - 1 ] ; if ( p &&
g . group === m . group ) return ! 0 ; a : switch ( g . spec ( ) . optype ) { case "RemoveText" : case "InsertText" : m = ! 0 ; break a ; default : m = ! 1 } if ( m && k . some ( c ) ) { if ( p ) { var q ; p = g . spec ( ) . optype ; m = new h ( k , c ) ; var f = m . previous ( ) , e = null , a , d ; runtime . assert ( Boolean ( f ) , "No edit operations found in state" ) ; d = f . group ; runtime . assert ( void 0 !== d , "Operation has no group" ) ; for ( a = 1 ; f && f . group === d ; ) { if ( p === f . spec ( ) . optype ) { q = f ; break } f = m . previous ( ) } if ( q ) { for ( f = m . previous ( ) ; f ; ) { if ( f . group !== d ) { if ( 2 === a ) break ; d = f . group ; a += 1 } if ( p === f . spec ( ) . optype ) { e =
f ; break } f = m . previous ( ) } q = b ( g , q , e ) } else q = ! 1 ; return q } q = g . spec ( ) . optype ; p = new h ( k , c ) ; m = p . previous ( ) ; runtime . assert ( Boolean ( m ) , "No edit operations found in state" ) ; q = q === m . spec ( ) . optype ? b ( g , m , p . previous ( ) ) : ! 1 ; return q } return ! 1 } } ; ( function ( ) { function h ( b , c ) { this . mainId = void 0 !== b ? b : - 1 ; this . subId = void 0 !== c ? c : - 1 } function k ( b , g , k ) { function p ( c , a ) { return c + ( b . isEditOperation ( a ) ? 1 : 0 ) } var m , q , f ; this . addOperation = function ( c ) { b . isEditOperation ( c ) && ( f += 1 ) ; q . push ( c ) } ; this . isNextStateId = function ( b ) { return b . mainId === m && b . subId === f } ; this . getNextStateId = function ( ) { return new h ( m , f ) } ; this . getOperations = function ( ) { return q } ; m = c += 1 ; q = g || [ ] ; f = g && k ? g . reduce ( p , 0 ) : 0 } var c = 0 ; gui . TrivialUndoManager = function ( b ) { function c ( ) { return ! 0 !== x . isNextStateId ( t ) }
function n ( a ) { a = a . getOperations ( ) ; 0 < a . length && ( G = ! 0 , D ( a ) , G = ! 1 ) } function p ( ) { L . emit ( gui . UndoManager . signalUndoStackChanged , { undoAvailable : r . hasUndoStates ( ) , redoAvailable : r . hasRedoStates ( ) } ) } function m ( a ) { var b = c ( ) ; a !== b && L . emit ( gui . UndoManager . signalDocumentModifiedChanged , b ) } function q ( ) { x !== y && x !== w [ w . length - 1 ] && w . push ( x ) } function f ( a ) { var b = a . previousSibling || a . nextSibling ; a . parentNode . removeChild ( a ) ; l . normalizeTextNodes ( b ) } function e ( a ) { return Object . keys ( a ) . map ( function ( b ) { return a [ b ] } ) } function a ( a ) { function b ( a ) { var e =
a . spec ( ) ; if ( f [ e . memberid ] ) switch ( e . optype ) { case "AddCursor" : d [ e . memberid ] || ( d [ e . memberid ] = a , delete f [ e . memberid ] , -- g ) ; break ; case "MoveCursor" : c [ e . memberid ] || ( c [ e . memberid ] = a ) } } var d = { } , c = { } , f = { } , g , h ; h = a . pop ( ) ; z . getMemberIds ( ) . forEach ( function ( a ) { f [ a ] = ! 0 } ) ; for ( g = Object . keys ( f ) . length ; h && 0 < g ; ) h = h . getOperations ( ) , h . reverse ( ) , h . forEach ( b ) , h = a . pop ( ) ; return new k ( H , e ( d ) . concat ( e ( c ) ) ) } function d ( ) { var b = c ( ) , d = B = z . cloneDocumentElement ( ) ; l . getElementsByTagNameNS ( d , "urn:webodf:names:cursor" , "cursor" ) . forEach ( f ) ;
l . getElementsByTagNameNS ( d , "urn:webodf:names:cursor" , "anchor" ) . forEach ( f ) ; q ( ) ; x = y = a ( [ y ] . concat ( w ) ) ; w . length = 0 ; F . length = 0 ; b || ( t = x . getNextStateId ( ) ) ; p ( ) ; m ( b ) } var r = this , l = core . DomUtils , B , y , D , z , t , x , w = [ ] , F = [ ] , L = new core . EventNotifier ( [ gui . UndoManager . signalUndoStackChanged , gui . UndoManager . signalUndoStateCreated , gui . UndoManager . signalUndoStateModified , gui . UndoManager . signalDocumentModifiedChanged , gui . TrivialUndoManager . signalDocumentRootReplaced ] ) , H = b || new gui . UndoStateRules , G = ! 1 ; this . subscribe = function ( a ,
b ) { L . subscribe ( a , b ) } ; this . unsubscribe = function ( a , b ) { L . unsubscribe ( a , b ) } ; this . isDocumentModified = c ; this . setDocumentModified = function ( a ) { c ( ) !== a && ( t = a ? new h : x . getNextStateId ( ) , L . emit ( gui . UndoManager . signalDocumentModifiedChanged , a ) ) } ; this . hasUndoStates = function ( ) { return 0 < w . length } ; this . hasRedoStates = function ( ) { return 0 < F . length } ; this . setDocument = function ( a ) { z = a } ; this . purgeInitialState = function ( ) { var a = c ( ) ; w . length = 0 ; F . length = 0 ; x = y = new k ( H ) ; t = x . getNextStateId ( ) ; B = null ; p ( ) ; m ( a ) } ; this . setInitialState =
d ; this . initialize = function ( ) { B || d ( ) } ; this . setPlaybackFunction = function ( a ) { D = a } ; this . onOperationExecuted = function ( a ) { if ( ! G ) { var b = c ( ) ; H . isEditOperation ( a ) && ( x === y || 0 < F . length ) || ! H . isPartOfOperationSet ( a , x . getOperations ( ) ) ? ( F . length = 0 , q ( ) , x = new k ( H , [ a ] , ! 0 ) , w . push ( x ) , L . emit ( gui . UndoManager . signalUndoStateCreated , { operations : x . getOperations ( ) } ) , p ( ) ) : ( x . addOperation ( a ) , L . emit ( gui . UndoManager . signalUndoStateModified , { operations : x . getOperations ( ) } ) ) ; m ( b ) } } ; this . moveForward = function ( a ) { for ( var b = 0 , d = c ( ) ,
e ; a && F . length ; ) e = F . pop ( ) , w . push ( e ) , n ( e ) , -- a , b += 1 ; b && ( x = w [ w . length - 1 ] , p ( ) , m ( d ) ) ; return b } ; this . moveBackward = function ( a ) { for ( var b = 0 , d = c ( ) ; a && w . length ; ) F . push ( w . pop ( ) ) , -- a , b += 1 ; b && ( z . getMemberIds ( ) . forEach ( function ( a ) { z . removeCursor ( a ) } ) , z . setDocumentElement ( B . cloneNode ( ! 0 ) ) , L . emit ( gui . TrivialUndoManager . signalDocumentRootReplaced , { } ) , n ( y ) , w . forEach ( n ) , x = w [ w . length - 1 ] || y , p ( ) , m ( d ) ) ; return b } ; x = y = new k ( H ) ; t = x . getNextStateId ( ) } ; gui . TrivialUndoManager . signalDocumentRootReplaced = "documentRootReplaced" } ) ( ) ; odf . GraphicProperties = function ( h , k , c ) { var b = this , g = odf . Namespaces . stylens , n = odf . Namespaces . svgns ; this . verticalPos = function ( ) { return b . data . value ( "verticalPos" ) } ; this . verticalRel = function ( ) { return b . data . value ( "verticalRel" ) } ; this . horizontalPos = function ( ) { return b . data . value ( "horizontalPos" ) } ; this . horizontalRel = function ( ) { return b . data . value ( "horizontalRel" ) } ; this . strokeWidth = function ( ) { return b . data . value ( "strokeWidth" ) } ; b . data = new odf . LazyStyleProperties ( void 0 === c ? void 0 : c . data , { verticalPos : function ( ) { var b =
h . getAttributeNS ( g , "vertical-pos" ) ; return "" === b ? void 0 : b } , verticalRel : function ( ) { var b = h . getAttributeNS ( g , "vertical-rel" ) ; return "" === b ? void 0 : b } , horizontalPos : function ( ) { var b = h . getAttributeNS ( g , "horizontal-pos" ) ; return "" === b ? void 0 : b } , horizontalRel : function ( ) { var b = h . getAttributeNS ( g , "horizontal-rel" ) ; return "" === b ? void 0 : b } , strokeWidth : function ( ) { var b = h . getAttributeNS ( n , "stroke-width" ) ; return k . parseLength ( b ) } } ) } ;
odf . ComputedGraphicProperties = function ( ) { var h ; this . setGraphicProperties = function ( k ) { h = k } ; this . verticalPos = function ( ) { return h && h . verticalPos ( ) || "from-top" } ; this . verticalRel = function ( ) { return h && h . verticalRel ( ) || "page" } ; this . horizontalPos = function ( ) { return h && h . horizontalPos ( ) || "from-left" } ; this . horizontalRel = function ( ) { return h && h . horizontalRel ( ) || "page" } } ; odf . PageLayoutProperties = function ( h , k , c ) { var b = this , g = odf . Namespaces . fons ; this . pageHeight = function ( ) { return b . data . value ( "pageHeight" ) || 1123 } ; this . pageWidth = function ( ) { return b . data . value ( "pageWidth" ) || 794 } ; b . data = new odf . LazyStyleProperties ( void 0 === c ? void 0 : c . data , { pageHeight : function ( ) { var b ; h && ( b = h . getAttributeNS ( g , "page-height" ) , b = k . parseLength ( b ) ) ; return b } , pageWidth : function ( ) { var b ; h && ( b = h . getAttributeNS ( g , "page-width" ) , b = k . parseLength ( b ) ) ; return b } } ) } ;
odf . PageLayout = function ( h , k , c ) { var b = null ; h && ( b = k . getPropertiesElement ( "page-layout-properties" , h ) ) ; this . pageLayout = new odf . PageLayoutProperties ( b , k , c && c . pageLayout ) } ; odf . PageLayoutCache = function ( ) { } ; odf . PageLayoutCache . prototype . getPageLayout = function ( h ) { } ; odf . PageLayoutCache . prototype . getDefaultPageLayout = function ( ) { } ; odf . ParagraphProperties = function ( h , k , c ) { var b = this , g = odf . Namespaces . fons ; this . marginTop = function ( ) { return b . data . value ( "marginTop" ) } ; b . data = new odf . LazyStyleProperties ( void 0 === c ? void 0 : c . data , { marginTop : function ( ) { var b = h . getAttributeNS ( g , "margin-top" ) ; return k . parsePositiveLengthOrPercent ( b , "marginTop" , c && c . data ) } } ) } ;
odf . ComputedParagraphProperties = function ( ) { var h = { } , k = [ ] ; this . setStyleChain = function ( c ) { k = c ; h = { } } ; this . marginTop = function ( ) { var c , b ; if ( h . hasOwnProperty ( "marginTop" ) ) c = h . marginTop ; else { for ( b = 0 ; void 0 === c && b < k . length ; b += 1 ) c = k [ b ] . marginTop ( ) ; h . marginTop = c } return c || 0 } } ; odf . TextProperties = function ( h , k , c ) { var b = this , g = odf . Namespaces . fons ; this . fontSize = function ( ) { return b . data . value ( "fontSize" ) } ; b . data = new odf . LazyStyleProperties ( void 0 === c ? void 0 : c . data , { fontSize : function ( ) { var b = h . getAttributeNS ( g , "font-size" ) ; return k . parsePositiveLengthOrPercent ( b , "fontSize" , c && c . data ) } } ) } ;
odf . ComputedTextProperties = function ( ) { var h = { } , k = [ ] ; this . setStyleChain = function ( c ) { k = c ; h = { } } ; this . fontSize = function ( ) { var c , b ; if ( h . hasOwnProperty ( "fontSize" ) ) c = h . fontSize ; else { for ( b = 0 ; void 0 === c && b < k . length ; b += 1 ) c = k [ b ] . fontSize ( ) ; h . fontSize = c } return c || 12 } } ; odf . MasterPage = function ( h , k ) { var c ; h ? ( c = h . getAttributeNS ( odf . Namespaces . stylens , "page-layout-name" ) , this . pageLayout = k . getPageLayout ( c ) ) : this . pageLayout = k . getDefaultPageLayout ( ) } ; odf . MasterPageCache = function ( ) { } ; odf . MasterPageCache . prototype . getMasterPage = function ( h ) { } ;
odf . StylePileEntry = function ( h , k , c , b ) { this . masterPage = function ( ) { var b = h . getAttributeNS ( odf . Namespaces . stylens , "master-page-name" ) , k = null ; b && ( k = c . getMasterPage ( b ) ) ; return k } ; ( function ( c ) { var n = h . getAttributeNS ( odf . Namespaces . stylens , "family" ) , p = null ; if ( "graphic" === n || "chart" === n ) c . graphic = void 0 === b ? void 0 : b . graphic , p = k . getPropertiesElement ( "graphic-properties" , h , p ) , null !== p && ( c . graphic = new odf . GraphicProperties ( p , k , c . graphic ) ) ; if ( "paragraph" === n || "table-cell" === n || "graphic" === n || "presentation" ===
n || "chart" === n ) c . paragraph = void 0 === b ? void 0 : b . paragraph , p = k . getPropertiesElement ( "paragraph-properties" , h , p ) , null !== p && ( c . paragraph = new odf . ParagraphProperties ( p , k , c . paragraph ) ) ; if ( "text" === n || "paragraph" === n || "table-cell" === n || "graphic" === n || "presentation" === n || "chart" === n ) c . text = void 0 === b ? void 0 : b . text , p = k . getPropertiesElement ( "text-properties" , h , p ) , null !== p && ( c . text = new odf . TextProperties ( p , k , c . text ) ) } ) ( this ) } ;
odf . StylePile = function ( h , k ) { function c ( c , a ) { var d , g ; c . hasAttributeNS ( b , "parent-style-name" ) && ( g = c . getAttributeNS ( b , "parent-style-name" ) , - 1 === a . indexOf ( g ) && ( d = f ( g , a ) ) ) ; return new odf . StylePileEntry ( c , h , k , d ) } var b = odf . Namespaces . stylens , g = { } , n = { } , p , m = { } , q = { } , f ; f = function ( b , a ) { var d = m [ b ] , f ; ! d && ( f = g [ b ] ) && ( a . push ( b ) , d = c ( f , a ) , m [ b ] = d ) ; return d } ; this . getStyle = function ( b ) { var a = q [ b ] || m [ b ] , d , f = [ ] ; a || ( d = n [ b ] , d || ( d = g [ b ] ) && f . push ( b ) , d && ( a = c ( d , f ) ) ) ; return a } ; this . addCommonStyle = function ( c ) { var a ; c . hasAttributeNS ( b ,
"name" ) && ( a = c . getAttributeNS ( b , "name" ) , g . hasOwnProperty ( a ) || ( g [ a ] = c ) ) } ; this . addAutomaticStyle = function ( c ) { var a ; c . hasAttributeNS ( b , "name" ) && ( a = c . getAttributeNS ( b , "name" ) , n . hasOwnProperty ( a ) || ( n [ a ] = c ) ) } ; this . setDefaultStyle = function ( b ) { void 0 === p && ( p = c ( b , [ ] ) ) } ; this . getDefaultStyle = function ( ) { return p } } ; odf . ComputedGraphicStyle = function ( ) { this . text = new odf . ComputedTextProperties ; this . paragraph = new odf . ComputedParagraphProperties ; this . graphic = new odf . ComputedGraphicProperties } ;
odf . ComputedParagraphStyle = function ( ) { this . text = new odf . ComputedTextProperties ; this . paragraph = new odf . ComputedParagraphProperties } ; odf . ComputedTextStyle = function ( ) { this . text = new odf . ComputedTextProperties } ;
odf . StyleCache = function ( h ) { function k ( a , b , d , c ) { b = d . getAttributeNS ( b , "class-names" ) ; var e ; if ( b ) for ( b = b . split ( " " ) , e = 0 ; e < b . length ; e += 1 ) if ( d = b [ e ] ) c . push ( a ) , c . push ( d ) } function c ( a , b ) { var d = y . getStyleName ( "paragraph" , a ) ; void 0 !== d && ( b . push ( "paragraph" ) , b . push ( d ) ) ; a . namespaceURI !== l || "h" !== a . localName && "p" !== a . localName || k ( "paragraph" , l , a , b ) ; return b } function b ( a , b , d ) { var c = [ ] , e , f , g , h ; for ( e = 0 ; e < a . length ; e += 2 ) g = a [ e ] , h = a [ e + 1 ] , g = m [ g ] , h = g . getStyle ( h ) , void 0 !== h && ( h = h [ b ] , void 0 !== h && h !== f && ( c . push ( h ) , f = h ) ) ;
g = m [ d ] ; if ( h = g . getDefaultStyle ( ) ) h = h [ b ] , void 0 !== h && h !== f && c . push ( h ) ; return c } function g ( a , b ) { var d = y . getStyleName ( "text" , a ) , e = a . parentNode ; void 0 !== d && ( b . push ( "text" ) , b . push ( d ) ) ; "span" === a . localName && a . namespaceURI === l && k ( "text" , l , a , b ) ; if ( ! e || e === h ) return b ; e . namespaceURI !== l || "p" !== e . localName && "h" !== e . localName ? g ( e , b ) : c ( e , b ) ; return b } function n ( a ) { a = a . getAttributeNS ( B , "family" ) ; return m [ a ] } var p = this , m , q , f , e , a , d , r , l = odf . Namespaces . textns , B = odf . Namespaces . stylens , y = new odf . StyleInfo , D = new odf . StyleParseUtils ,
z , t , x , w , F , L ; this . getComputedGraphicStyle = function ( a ) { var d = [ ] ; a = y . getStyleName ( "graphic" , a ) ; void 0 !== a && ( d . push ( "graphic" ) , d . push ( a ) ) ; a = d . join ( "/" ) ; var c = e [ a ] ; runtime . assert ( 0 === d . length % 2 , "Invalid style chain." ) ; void 0 === c && ( c = new odf . ComputedGraphicStyle , c . graphic . setGraphicProperties ( b ( d , "graphic" , "graphic" ) [ 0 ] ) , c . text . setStyleChain ( b ( d , "text" , "graphic" ) ) , c . paragraph . setStyleChain ( b ( d , "paragraph" , "graphic" ) ) , e [ a ] = c ) ; return c } ; this . getComputedParagraphStyle = function ( a ) { a = c ( a , [ ] ) ; var d = a . join ( "/" ) ,
e = f [ d ] ; runtime . assert ( 0 === a . length % 2 , "Invalid style chain." ) ; void 0 === e && ( e = new odf . ComputedParagraphStyle , e . text . setStyleChain ( b ( a , "text" , "paragraph" ) ) , e . paragraph . setStyleChain ( b ( a , "paragraph" , "paragraph" ) ) , f [ d ] = e ) ; return e } ; this . getComputedTextStyle = function ( a ) { a = g ( a , [ ] ) ; var d = a . join ( "/" ) , c = q [ d ] ; runtime . assert ( 0 === a . length % 2 , "Invalid style chain." ) ; void 0 === c && ( c = new odf . ComputedTextStyle , c . text . setStyleChain ( b ( a , "text" , "text" ) ) , q [ d ] = c ) ; return c } ; this . getPageLayout = function ( a ) { var b = L [ a ] ; b || ( ( b =
F [ a ] ) ? ( b = new odf . PageLayout ( b , D , w ) , L [ a ] = b ) : b = w ) ; return b } ; this . getDefaultPageLayout = function ( ) { return w } ; this . getMasterPage = function ( a ) { var b = t [ a ] ; void 0 === b && ( ( b = z [ a ] ) ? ( b = new odf . MasterPage ( b , p ) , t [ a ] = b ) : b = null ) ; return b } ; this . getDefaultMasterPage = function ( ) { return x } ; this . update = function ( ) { var b , c , g = null , l = null ; q = { } ; f = { } ; e = { } ; z = { } ; t = { } ; L = { } ; F = { } ; a = new odf . StylePile ( D , p ) ; d = new odf . StylePile ( D , p ) ; r = new odf . StylePile ( D , p ) ; m = { text : a , paragraph : d , graphic : r } ; for ( b = h . styles . firstElementChild ; b ; ) b . namespaceURI ===
B && ( ( c = n ( b ) ) ? "style" === b . localName ? c . addCommonStyle ( b ) : "default-style" === b . localName && c . setDefaultStyle ( b ) : "default-page-layout" === b . localName && ( g = b ) ) , b = b . nextElementSibling ; w = new odf . PageLayout ( g , D ) ; for ( b = h . automaticStyles . firstElementChild ; b ; ) b . namespaceURI === B && ( ( c = n ( b ) ) && "style" === b . localName ? c . addAutomaticStyle ( b ) : "page-layout" === b . localName && ( F [ b . getAttributeNS ( B , "name" ) ] = b ) ) , b = b . nextElementSibling ; for ( b = h . masterStyles . firstElementChild ; b ; ) b . namespaceURI === B && "master-page" === b . localName && ( l =
l || b , c = b , g = c . getAttributeNS ( B , "name" ) , 0 < g . length && ! z . hasOwnProperty ( g ) && ( z [ g ] = c ) ) , b = b . nextElementSibling ; x = new odf . MasterPage ( l , p ) } } ; ops . OperationTransformMatrix = function ( ) { function h ( a ) { a . position += a . length ; a . length *= - 1 } function k ( a ) { var b = 0 > a . length ; b && h ( a ) ; return b } function c ( a , b ) { function c ( f ) { a [ f ] === b && e . push ( f ) } var e = [ ] ; a && [ "style:parent-style-name" , "style:next-style-name" ] . forEach ( c ) ; return e } function b ( a , b ) { function c ( e ) { a [ e ] === b && delete a [ e ] } a && [ "style:parent-style-name" , "style:next-style-name" ] . forEach ( c ) } function g ( a ) { var b = { } ; Object . keys ( a ) . forEach ( function ( c ) { b [ c ] = "object" === typeof a [ c ] ? g ( a [ c ] ) : a [ c ] } ) ; return b } function n ( a ,
b , c , e ) { var f , g = ! 1 , h = ! 1 , k , m = [ ] ; e && e . attributes && ( m = e . attributes . split ( "," ) ) ; a && ( c || 0 < m . length ) && Object . keys ( a ) . forEach ( function ( b ) { var d = a [ b ] , e ; "object" !== typeof d && ( c && ( e = c [ b ] ) , void 0 !== e ? ( delete a [ b ] , h = ! 0 , e === d && ( delete c [ b ] , g = ! 0 ) ) : - 1 !== m . indexOf ( b ) && ( delete a [ b ] , h = ! 0 ) ) } ) ; if ( b && b . attributes && ( c || 0 < m . length ) ) { k = b . attributes . split ( "," ) ; for ( e = 0 ; e < k . length ; e += 1 ) if ( f = k [ e ] , c && void 0 !== c [ f ] || m && - 1 !== m . indexOf ( f ) ) k . splice ( e , 1 ) , -- e , h = ! 0 ; 0 < k . length ? b . attributes = k . join ( "," ) : delete b . attributes } return { majorChanged : g ,
minorChanged : h } } function p ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) ) return ! 0 ; return ! 1 } function m ( a ) { for ( var b in a ) if ( a . hasOwnProperty ( b ) && ( "attributes" !== b || 0 < a . attributes . length ) ) return ! 0 ; return ! 1 } function q ( a , b , c , e , f ) { var g = a ? a [ f ] : null , h = b ? b [ f ] : null , k = c ? c [ f ] : null , q = e ? e [ f ] : null , x ; x = n ( g , h , k , q ) ; g && ! p ( g ) && delete a [ f ] ; h && ! m ( h ) && delete b [ f ] ; k && ! p ( k ) && delete c [ f ] ; q && ! m ( q ) && delete e [ f ] ; return x } function f ( a , b ) { return { opSpecsA : [ a ] , opSpecsB : [ b ] } } var e ; e = { AddAnnotation : { AddAnnotation : function ( a , b , c ) { var e ;
a . position < b . position ? ( e = a , c = b ) : b . position < a . position ? ( e = b , c = a ) : ( e = c ? a : b , c = c ? b : a ) ; c . position < e . position + e . length && ( e . length += 2 ) ; c . position += 2 ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , AddCursor : f , AddMember : f , AddStyle : f , ApplyDirectStyling : function ( a , b ) { a . position <= b . position ? b . position += 2 : a . position <= b . position + b . length && ( b . length += 2 ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , InsertText : function ( a , b ) { b . position <= a . position ? a . position += b . text . length : ( void 0 !== a . length && b . position <= a . position + a . length && ( a . length +=
b . text . length ) , b . position += 2 ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , MergeParagraph : function ( a , b ) { b . sourceStartPosition <= a . position ? -- a . position : ( void 0 !== a . length && b . sourceStartPosition <= a . position + a . length && -- a . length , b . sourceStartPosition += 2 , a . position < b . destinationStartPosition && ( b . destinationStartPosition += 2 ) ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , MoveCursor : function ( a , b ) { var c = k ( b ) ; a . position < b . position ? b . position += 2 : a . position < b . position + b . length && ( b . length += 2 ) ; c && h ( b ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } ,
RemoveAnnotation : function ( a , b ) { a . position < b . position ? ( b . position < a . position + a . length && ( a . length -= b . length + 2 ) , b . position += 2 ) : a . position -= b . length + 2 ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , RemoveCursor : f , RemoveMember : f , RemoveStyle : f , RemoveText : function ( a , b ) { var c = b . position , e = b . position + b . length , f , g = [ a ] , h = [ b ] ; a . position <= b . position ? b . position += 2 : a . position < e && ( b . length = a . position - b . position , f = { optype : "RemoveText" , memberid : b . memberid , timestamp : b . timestamp , position : a . position + 2 , length : e - a . position } , h . unshift ( f ) ) ;
b . position + b . length <= a . position ? ( a . position -= b . length , void 0 !== a . length && f && ( a . length = f . length >= a . length ? 0 : a . length - f . length ) ) : void 0 !== a . length && ( f = a . position + a . length , e <= f ? a . length -= b . length : c < f && ( a . length = c - a . position ) ) ; return { opSpecsA : g , opSpecsB : h } } , SetParagraphStyle : function ( a , b ) { a . position < b . position && ( b . position += 2 ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , SplitParagraph : function ( a , b ) { a . position < b . sourceParagraphPosition && ( b . sourceParagraphPosition += 2 ) ; b . position <= a . position ? a . position += 1 : ( void 0 !==
a . length && b . position <= a . position + a . length && ( a . length += 1 ) , b . position += 2 ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , AddCursor : { AddCursor : f , AddMember : f , AddStyle : f , ApplyDirectStyling : f , InsertText : f , MergeParagraph : f , MoveCursor : f , RemoveAnnotation : f , RemoveCursor : f , RemoveMember : f , RemoveStyle : f , RemoveText : f , SetParagraphStyle : f , SplitParagraph : f , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , AddMember : { AddStyle : f , ApplyDirectStyling : f , InsertText : f , MergeParagraph : f ,
MoveCursor : f , RemoveAnnotation : f , RemoveCursor : f , RemoveStyle : f , RemoveText : f , SetParagraphStyle : f , SplitParagraph : f , UpdateMetadata : f , UpdateParagraphStyle : f } , AddStyle : { AddStyle : f , ApplyDirectStyling : f , InsertText : f , MergeParagraph : f , MoveCursor : f , RemoveAnnotation : f , RemoveCursor : f , RemoveMember : f , RemoveStyle : function ( a , d ) { var e , f = [ a ] , g = [ d ] ; a . styleFamily === d . styleFamily && ( e = c ( a . setProperties , d . styleName ) , 0 < e . length && ( e = { optype : "UpdateParagraphStyle" , memberid : d . memberid , timestamp : d . timestamp , styleName : a . styleName ,
removedProperties : { attributes : e . join ( "," ) } } , g . unshift ( e ) ) , b ( a . setProperties , d . styleName ) ) ; return { opSpecsA : f , opSpecsB : g } } , RemoveText : f , SetParagraphStyle : f , SplitParagraph : f , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , ApplyDirectStyling : { ApplyDirectStyling : function ( a , b , c ) { var e , f , h , k , m , n , x , w ; k = [ a ] ; h = [ b ] ; if ( ! ( a . position + a . length <= b . position || a . position >= b . position + b . length ) ) { e = c ? a : b ; f = c ? b : a ; if ( a . position !== b . position || a . length !== b . length ) n = g ( e ) , x = g ( f ) ; b = q ( f . setProperties , null , e . setProperties ,
null , "style:text-properties" ) ; if ( b . majorChanged || b . minorChanged ) h = [ ] , a = [ ] , k = e . position + e . length , m = f . position + f . length , f . position < e . position ? b . minorChanged && ( w = g ( x ) , w . length = e . position - f . position , a . push ( w ) , f . position = e . position , f . length = m - f . position ) : e . position < f . position && b . majorChanged && ( w = g ( n ) , w . length = f . position - e . position , h . push ( w ) , e . position = f . position , e . length = k - e . position ) , m > k ? b . minorChanged && ( n = x , n . position = k , n . length = m - k , a . push ( n ) , f . length = k - f . position ) : k > m && b . majorChanged && ( n . position = m ,
n . length = k - m , h . push ( n ) , e . length = m - e . position ) , e . setProperties && p ( e . setProperties ) && h . push ( e ) , f . setProperties && p ( f . setProperties ) && a . push ( f ) , c ? ( k = h , h = a ) : k = a } return { opSpecsA : k , opSpecsB : h } } , InsertText : function ( a , b ) { b . position <= a . position ? a . position += b . text . length : b . position <= a . position + a . length && ( a . length += b . text . length ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , MergeParagraph : function ( a , b ) { var c = a . position , e = a . position + a . length ; c >= b . sourceStartPosition && -- c ; e >= b . sourceStartPosition && -- e ; a . position = c ; a . length =
e - c ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , MoveCursor : f , RemoveAnnotation : function ( a , b ) { var c = a . position , e = a . position + a . length , f = b . position + b . length , g = [ a ] , h = [ b ] ; b . position <= c && e <= f ? g = [ ] : ( f < c && ( c -= b . length + 2 ) , f < e && ( e -= b . length + 2 ) , a . position = c , a . length = e - c ) ; return { opSpecsA : g , opSpecsB : h } } , RemoveCursor : f , RemoveMember : f , RemoveStyle : f , RemoveText : function ( a , b ) { var c = a . position + a . length , e = b . position + b . length , f = [ a ] , g = [ b ] ; e <= a . position ? a . position -= b . length : b . position < c && ( a . position < b . position ? a . length = e < c ? a . length -
b . length : b . position - a . position : ( a . position = b . position , e < c ? a . length = c - e : f = [ ] ) ) ; return { opSpecsA : f , opSpecsB : g } } , SetParagraphStyle : f , SplitParagraph : function ( a , b ) { b . position < a . position ? a . position += 1 : b . position < a . position + a . length && ( a . length += 1 ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , InsertText : { InsertText : function ( a , b , c ) { a . position < b . position ? b . position += a . text . length : a . position > b . position ? a . position += b . text . length : c ? b . position += a . text . length : a . position +=
b . text . length ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , MergeParagraph : function ( a , b ) { a . position >= b . sourceStartPosition ? -- a . position : ( a . position < b . sourceStartPosition && ( b . sourceStartPosition += a . text . length ) , a . position < b . destinationStartPosition && ( b . destinationStartPosition += a . text . length ) ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , MoveCursor : function ( a , b ) { var c = k ( b ) ; a . position < b . position ? b . position += a . text . length : a . position < b . position + b . length && ( b . length += a . text . length ) ; c && h ( b ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } ,
RemoveAnnotation : function ( a , b ) { var c = a . position , e = b . position + b . length , f = [ a ] , g = [ b ] ; b . position <= c && c <= e ? ( f = [ ] , b . length += a . text . length ) : e < a . position ? a . position -= b . length + 2 : b . position += a . text . length ; return { opSpecsA : f , opSpecsB : g } } , RemoveCursor : f , RemoveMember : f , RemoveStyle : f , RemoveText : function ( a , b ) { var c ; c = b . position + b . length ; var e = [ a ] , f = [ b ] ; c <= a . position ? a . position -= b . length : a . position <= b . position ? b . position += a . text . length : ( b . length = a . position - b . position , c = { optype : "RemoveText" , memberid : b . memberid , timestamp : b . timestamp ,
position : a . position + a . text . length , length : c - a . position } , f . unshift ( c ) , a . position = b . position ) ; return { opSpecsA : e , opSpecsB : f } } , SetParagraphStyle : function ( a , b ) { b . position > a . position && ( b . position += a . text . length ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , SplitParagraph : function ( a , b ) { a . position < b . sourceParagraphPosition && ( b . sourceParagraphPosition += a . text . length ) ; a . position <= b . position ? b . position += a . text . length : a . position += 1 ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } ,
MergeParagraph : { MergeParagraph : function ( a , b , c ) { var e = [ a ] , f = [ b ] , g ; a . destinationStartPosition === b . destinationStartPosition ? ( e = [ ] , f = [ ] , a . moveCursor && ( g = { optype : "MoveCursor" , memberid : a . memberid , timestamp : a . timestamp , position : a . sourceStartPosition - 1 } , e . push ( g ) ) , b . moveCursor && ( g = { optype : "MoveCursor" , memberid : b . memberid , timestamp : b . timestamp , position : b . sourceStartPosition - 1 } , f . push ( g ) ) , a = c ? a : b , a = { optype : "SetParagraphStyle" , memberid : a . memberid , timestamp : a . timestamp , position : a . destinationStartPosition , styleName : a . paragraphStyleName } ,
c ? e . push ( a ) : f . push ( a ) ) : b . sourceStartPosition === a . destinationStartPosition ? ( a . destinationStartPosition = b . destinationStartPosition , -- a . sourceStartPosition , a . paragraphStyleName = b . paragraphStyleName ) : a . sourceStartPosition === b . destinationStartPosition ? ( b . destinationStartPosition = a . destinationStartPosition , -- b . sourceStartPosition , b . paragraphStyleName = a . paragraphStyleName ) : a . destinationStartPosition < b . destinationStartPosition ? ( -- b . destinationStartPosition , -- b . sourceStartPosition ) : ( -- a . destinationStartPosition ,
-- a . sourceStartPosition ) ; return { opSpecsA : e , opSpecsB : f } } , MoveCursor : function ( a , b ) { var c = b . position , e = b . position + b . length , f = Math . min ( c , e ) , c = Math . max ( c , e ) ; f >= a . sourceStartPosition && -- f ; c >= a . sourceStartPosition && -- c ; 0 <= b . length ? ( b . position = f , b . length = c - f ) : ( b . position = c , b . length = f - c ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , RemoveAnnotation : function ( a , b ) { var c = b . position + b . length , e = [ a ] , f = [ b ] ; b . position <= a . destinationStartPosition && a . sourceStartPosition <= c ? ( e = [ ] , -- b . length ) : a . sourceStartPosition < b . position ? -- b . position :
( c < a . destinationStartPosition && ( a . destinationStartPosition -= b . length + 2 ) , c < a . sourceStartPosition && ( a . sourceStartPosition -= b . length + 2 ) ) ; return { opSpecsA : e , opSpecsB : f } } , RemoveCursor : f , RemoveMember : f , RemoveStyle : f , RemoveText : function ( a , b ) { b . position >= a . sourceStartPosition ? -- b . position : ( b . position < a . destinationStartPosition && ( a . destinationStartPosition -= b . length ) , b . position < a . sourceStartPosition && ( a . sourceStartPosition -= b . length ) ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , SetParagraphStyle : function ( a , b ) { var c =
[ a ] , e = [ b ] ; if ( b . position > a . sourceStartPosition ) -- b . position ; else if ( b . position === a . destinationStartPosition || b . position === a . sourceStartPosition ) b . position = a . destinationStartPosition , a . paragraphStyleName = b . styleName ; return { opSpecsA : c , opSpecsB : e } } , SplitParagraph : function ( a , b ) { var c , e = [ a ] , f = [ b ] ; b . position < a . destinationStartPosition ? ( a . destinationStartPosition += 1 , a . sourceStartPosition += 1 ) : b . position >= a . destinationStartPosition && b . position < a . sourceStartPosition ? ( b . paragraphStyleName = a . paragraphStyleName ,
c = { optype : "SetParagraphStyle" , memberid : a . memberid , timestamp : a . timestamp , position : a . destinationStartPosition , styleName : a . paragraphStyleName } , e . push ( c ) , b . position === a . sourceStartPosition - 1 && a . moveCursor && ( c = { optype : "MoveCursor" , memberid : a . memberid , timestamp : a . timestamp , position : b . position , length : 0 } , e . push ( c ) ) , a . destinationStartPosition = b . position + 1 , a . sourceStartPosition += 1 ) : b . position >= a . sourceStartPosition && ( -- b . position , -- b . sourceParagraphPosition ) ; return { opSpecsA : e , opSpecsB : f } } , UpdateMember : f , UpdateMetadata : f ,
UpdateParagraphStyle : f } , MoveCursor : { MoveCursor : f , RemoveAnnotation : function ( a , b ) { var c = k ( a ) , e = a . position + a . length , f = b . position + b . length ; b . position <= a . position && e <= f ? ( a . position = b . position - 1 , a . length = 0 ) : ( f < a . position ? a . position -= b . length + 2 : f < e && ( a . length -= b . length + 2 ) , c && h ( a ) ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , RemoveCursor : function ( a , b ) { return { opSpecsA : a . memberid === b . memberid ? [ ] : [ a ] , opSpecsB : [ b ] } } , RemoveMember : f , RemoveStyle : f , RemoveText : function ( a , b ) { var c = k ( a ) , e = a . position + a . length , f = b . position + b . length ;
f <= a . position ? a . position -= b . length : b . position < e && ( a . position < b . position ? a . length = f < e ? a . length - b . length : b . position - a . position : ( a . position = b . position , a . length = f < e ? e - f : 0 ) ) ; c && h ( a ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , SetParagraphStyle : f , SplitParagraph : function ( a , b ) { var c = k ( a ) ; b . position < a . position ? a . position += 1 : b . position < a . position + a . length && ( a . length += 1 ) ; c && h ( a ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , RemoveAnnotation : { RemoveAnnotation : function ( a , b ) { var c =
[ a ] , e = [ b ] ; a . position === b . position && a . length === b . length ? ( c = [ ] , e = [ ] ) : a . position < b . position ? b . position -= a . length + 2 : a . position -= b . length + 2 ; return { opSpecsA : c , opSpecsB : e } } , RemoveCursor : f , RemoveMember : f , RemoveStyle : f , RemoveText : function ( a , b ) { var c = a . position + a . length , e = b . position + b . length , f = [ a ] , g = [ b ] ; a . position <= b . position && e <= c ? ( g = [ ] , a . length -= b . length ) : e < a . position ? a . position -= b . length : b . position < a . position ? ( a . position = b . position + 1 , b . length -= a . length + 2 ) : b . position -= a . length + 2 ; return { opSpecsA : f , opSpecsB : g } } ,
SetParagraphStyle : function ( a , b ) { var c = b . position , e = a . position + a . length , f = [ a ] , g = [ b ] ; a . position <= c && c <= e ? g = [ ] : e < c && ( b . position -= a . length + 2 ) ; return { opSpecsA : f , opSpecsB : g } } , SplitParagraph : function ( a , b ) { var c = b . position , e = a . position + a . length , f = [ a ] , g = [ b ] ; a . position <= c && c <= e ? ( g = [ ] , a . length += 1 ) : ( e < b . sourceParagraphPosition && ( b . sourceParagraphPosition -= a . length + 2 ) , e < c ? b . position -= a . length + 2 : a . position += 1 ) ; return { opSpecsA : f , opSpecsB : g } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , RemoveCursor : { RemoveCursor : function ( a ,
b ) { var c = a . memberid === b . memberid ; return { opSpecsA : c ? [ ] : [ a ] , opSpecsB : c ? [ ] : [ b ] } } , RemoveMember : f , RemoveStyle : f , RemoveText : f , SetParagraphStyle : f , SplitParagraph : f , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , RemoveMember : { RemoveStyle : f , RemoveText : f , SetParagraphStyle : f , SplitParagraph : f , UpdateMetadata : f , UpdateParagraphStyle : f } , RemoveStyle : { RemoveStyle : function ( a , b ) { var c = a . styleName === b . styleName && a . styleFamily === b . styleFamily ; return { opSpecsA : c ? [ ] : [ a ] , opSpecsB : c ? [ ] : [ b ] } } , RemoveText : f , SetParagraphStyle : function ( a ,
b ) { var c , e = [ a ] , f = [ b ] ; "paragraph" === a . styleFamily && a . styleName === b . styleName && ( c = { optype : "SetParagraphStyle" , memberid : a . memberid , timestamp : a . timestamp , position : b . position , styleName : "" } , e . unshift ( c ) , b . styleName = "" ) ; return { opSpecsA : e , opSpecsB : f } } , SplitParagraph : f , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : function ( a , d ) { var e , f = [ a ] , g = [ d ] ; "paragraph" === a . styleFamily && ( e = c ( d . setProperties , a . styleName ) , 0 < e . length && ( e = { optype : "UpdateParagraphStyle" , memberid : a . memberid , timestamp : a . timestamp , styleName : d . styleName ,
removedProperties : { attributes : e . join ( "," ) } } , f . unshift ( e ) ) , a . styleName === d . styleName ? g = [ ] : b ( d . setProperties , a . styleName ) ) ; return { opSpecsA : f , opSpecsB : g } } } , RemoveText : { RemoveText : function ( a , b ) { var c = a . position + a . length , e = b . position + b . length , f = [ a ] , g = [ b ] ; e <= a . position ? a . position -= b . length : c <= b . position ? b . position -= a . length : b . position < c && ( a . position < b . position ? ( a . length = e < c ? a . length - b . length : b . position - a . position , c < e ? ( b . position = a . position , b . length = e - c ) : g = [ ] ) : ( c < e ? b . length -= a . length : b . position < a . position ?
b . length = a . position - b . position : g = [ ] , e < c ? ( a . position = b . position , a . length = c - e ) : f = [ ] ) ) ; return { opSpecsA : f , opSpecsB : g } } , SetParagraphStyle : function ( a , b ) { a . position < b . position && ( b . position -= a . length ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , SplitParagraph : function ( a , b ) { var c = a . position + a . length , e = [ a ] , f = [ b ] ; b . position <= a . position ? a . position += 1 : b . position < c && ( a . length = b . position - a . position , c = { optype : "RemoveText" , memberid : a . memberid , timestamp : a . timestamp , position : b . position + 1 , length : c - b . position } , e . unshift ( c ) ) ; a . position +
a . length <= b . position ? b . position -= a . length : a . position < b . position && ( b . position = a . position ) ; a . position + a . length < b . sourceParagraphPosition && ( b . sourceParagraphPosition -= a . length ) ; return { opSpecsA : e , opSpecsB : f } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , SetParagraphStyle : { SetParagraphStyle : function ( a , b , c ) { a . position === b . position && ( c ? b . styleName = a . styleName : a . styleName = b . styleName ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , SplitParagraph : function ( a , b ) { var c = [ a ] , e = [ b ] , f ; a . position > b . position ? a . position +=
1 : a . position === b . sourceParagraphPosition && ( b . paragraphStyleName = a . styleName , f = g ( a ) , f . position = b . position + 1 , c . push ( f ) ) ; return { opSpecsA : c , opSpecsB : e } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , SplitParagraph : { SplitParagraph : function ( a , b , c ) { var e , f ; a . position < b . position ? e = ! 0 : b . position < a . position ? f = ! 0 : a . position === b . position && ( c ? e = ! 0 : f = ! 0 ) ; e ? ( b . position += 1 , b . sourceParagraphPosition = a . position < b . sourceParagraphPosition ? b . sourceParagraphPosition + 1 : a . position + 1 ) : f && ( a . position += 1 , a . sourceParagraphPosition =
b . position < b . sourceParagraphPosition ? a . sourceParagraphPosition + 1 : b . position + 1 ) ; return { opSpecsA : [ a ] , opSpecsB : [ b ] } } , UpdateMember : f , UpdateMetadata : f , UpdateParagraphStyle : f } , UpdateMember : { UpdateMetadata : f , UpdateParagraphStyle : f } , UpdateMetadata : { UpdateMetadata : function ( a , b , c ) { var e , f = [ a ] , g = [ b ] ; e = c ? a : b ; a = c ? b : a ; n ( a . setProperties || null , a . removedProperties || null , e . setProperties || null , e . removedProperties || null ) ; e . setProperties && p ( e . setProperties ) || e . removedProperties && m ( e . removedProperties ) || ( c ? f = [ ] : g = [ ] ) ;
a . setProperties && p ( a . setProperties ) || a . removedProperties && m ( a . removedProperties ) || ( c ? g = [ ] : f = [ ] ) ; return { opSpecsA : f , opSpecsB : g } } , UpdateParagraphStyle : f } , UpdateParagraphStyle : { UpdateParagraphStyle : function ( a , b , c ) { var e , f = [ a ] , g = [ b ] ; a . styleName === b . styleName && ( e = c ? a : b , a = c ? b : a , q ( a . setProperties , a . removedProperties , e . setProperties , e . removedProperties , "style:paragraph-properties" ) , q ( a . setProperties , a . removedProperties , e . setProperties , e . removedProperties , "style:text-properties" ) , n ( a . setProperties || null , a . removedProperties ||
null , e . setProperties || null , e . removedProperties || null ) , e . setProperties && p ( e . setProperties ) || e . removedProperties && m ( e . removedProperties ) || ( c ? f = [ ] : g = [ ] ) , a . setProperties && p ( a . setProperties ) || a . removedProperties && m ( a . removedProperties ) || ( c ? g = [ ] : f = [ ] ) ) ; return { opSpecsA : f , opSpecsB : g } } } } ; this . passUnchanged = f ; this . extendTransformations = function ( a ) { Object . keys ( a ) . forEach ( function ( b ) { var c = a [ b ] , f , g = e . hasOwnProperty ( b ) ; runtime . log ( ( g ? "Extending" : "Adding" ) + " map for optypeA: " + b ) ; g || ( e [ b ] = { } ) ; f = e [ b ] ; Object . keys ( c ) . forEach ( function ( a ) { var e =
f . hasOwnProperty ( a ) ; runtime . assert ( b <= a , "Wrong order:" + b + ", " + a ) ; runtime . log ( " " + ( e ? "Overwriting" : "Adding" ) + " entry for optypeB: " + a ) ; f [ a ] = c [ a ] } ) } ) } ; this . transformOpspecVsOpspec = function ( a , b ) { var c = a . optype <= b . optype , f ; runtime . log ( "Crosstransforming:" ) ; runtime . log ( runtime . toJson ( a ) ) ; runtime . log ( runtime . toJson ( b ) ) ; c || ( f = a , a = b , b = f ) ; ( f = ( f = e [ a . optype ] ) && f [ b . optype ] ) ? ( f = f ( a , b , ! c ) , c || null === f || ( f = { opSpecsA : f . opSpecsB , opSpecsB : f . opSpecsA } ) ) : f = null ; runtime . log ( "result:" ) ; f ? ( runtime . log ( runtime . toJson ( f . opSpecsA ) ) ,
runtime . log ( runtime . toJson ( f . opSpecsB ) ) ) : runtime . log ( "null" ) ; return f } } ; ops . OperationTransformer = function ( ) { function h ( c , b ) { for ( var g , n , p = [ ] , m = [ ] ; 0 < c . length && b ; ) { g = c . shift ( ) ; g = k . transformOpspecVsOpspec ( g , b ) ; if ( ! g ) return null ; p = p . concat ( g . opSpecsA ) ; if ( 0 === g . opSpecsB . length ) { p = p . concat ( c ) ; b = null ; break } for ( ; 1 < g . opSpecsB . length ; ) { n = h ( c , g . opSpecsB . shift ( ) ) ; if ( ! n ) return null ; m = m . concat ( n . opSpecsB ) ; c = n . opSpecsA } b = g . opSpecsB . pop ( ) } b && m . push ( b ) ; return { opSpecsA : p , opSpecsB : m } } var k = new ops . OperationTransformMatrix ; this . getOperationTransformMatrix = function ( ) { return k } ; this . transform =
function ( c , b ) { for ( var g , k = [ ] ; 0 < b . length ; ) { g = h ( c , b . shift ( ) ) ; if ( ! g ) return null ; c = g . opSpecsA ; k = k . concat ( g . opSpecsB ) } return { opSpecsA : c , opSpecsB : k } } } ; var webodf _css = ' @ namespace draw url ( urn : oasis : names : tc : opendocument : xmlns : drawing : 1.0 ) ; @ namespace fo url ( urn : oasis : names : tc : opendocument : xmlns : xsl - fo - compatible : 1.0 ) ; @ namespace office url ( urn : oasis : names : tc : opendocument : xmlns : office : 1.0 ) ; @ namespace presentation url ( urn : oasis : names : tc : opendocument : xmlns : presentation : 1.0 ) ; @ namespace style url ( urn : oasis : names : tc : opendocument : xmlns : style : 1.0 ) ; @ namespace svg url ( urn : oasis : names : tc : opendocument : xmlns : svg - compatible : 1.0 ) ; @ namespace table url ( urn : oasis : names : tc : opendocument : xmlns : table : 1.0 ) ; @ namespace text url ( urn : oasis : names : tc : opendocument : xmlns : text : 1.0 ) ; @ namespace webodfhelper url ( urn : webodf : names : helper ) ; @ namespace cursor url ( urn : webodf : names : cursor ) ; @ namespace editinfo url ( urn : webodf : names : editinfo ) ; @ namespace annotation url ( urn : webodf : names : annotation ) ; @ namespace dc url ( http : //purl.org/dc/elements/1.1/);@namespace svgns url(http://www.w3.org/2000/svg);office|document > *, office|document-content > * {display: none;}office|body, office|document {display: inline-block;position: relative;}text|p, text|h {display: block;padding: 0;margin: 0;line-height: normal;position: relative;}text|p::after, text|h::after {content: "\\200B";white-space: pre;}*[webodfhelper|containsparagraphanchor] {position: relative;}text|s {white-space: pre;}text|tab {display: inline;white-space: pre;}text|tracked-changes {display: none;}office|binary-data {display: none;}office|text {display: block;text-align: left;overflow: visible;word-wrap: break-word;}office|text::selection {background: transparent;}.webodf-virtualSelections *::selection {background: transparent;}.webodf-virtualSelections *::-moz-selection {background: transparent;}office|text * draw|text-box {display: block;border: 1px solid #d3d3d3;}office|text draw|frame {z-index: 1;}office|spreadsheet {display: block;border-collapse: collapse;empty-cells: show;font-family: sans-serif;font-size: 10pt;text-align: left;page-break-inside: avoid;overflow: hidden;}office|presentation {display: inline-block;text-align: left;}#shadowContent {display: inline-block;text-align: left;}draw|page {display: block;position: relative;overflow: hidden;}presentation|notes, presentation|footer-decl, presentation|date-time-decl {display: none;}@media print {draw|page {border: 1pt solid black;page-break-inside: avoid;}presentation|notes {}}office|spreadsheet text|p {border: 0px;padding: 1px;margin: 0px;}office|spreadsheet table|table {margin: 3px;}office|spreadsheet table|table:after {}office|spreadsheet table|table-row {counter-increment: row;}office|spreadsheet table|table-row:before {width: 3em;background: #cccccc;border: 1px solid black;text-align: center;content: counter(row);display: table-cell;}office|spreadsheet table|table-cell {border: 1px solid #cccccc;}table|table {display: table;}draw|frame table|table {width: 100%;height: 100%;background: white;}table|table-header-rows {display: table-header-group;}table|table-row {display: table-row;}table|table-column {display: table-column;}table|table-cell {width: 0.889in;display: table-cell;word-break: break-all;}draw|frame {display: block;}draw|image {display: block;width: 100%;height: 100%;top: 0px;left: 0px;background-repeat: no-repeat;background-size: 100% 100%;-moz-background-size: 100% 100%;}draw|frame > draw|image:nth-of-type(n+2) {display: none;}text|list:before {display: none;content:"";}text|list {display: block;}text|list-item {display: block;}text|number {display:none;}text|a {color: blue;text-decoration: underline;cursor: pointer;}.webodf-inactiveLinks text|a {cursor: text;}text|note-citation {vertical-align: super;font-size: smaller;}text|note-body {display: none;}text|note:hover text|note-citation {background: #dddddd;}text|note:hover text|note-body {display: block;left:1em;max-width: 80%;position: absolute;background: #ffffaa;}text|bibliography-source {display: none;}svg|title, svg|desc {display: none;}video {width: 100%;height: 100%}cursor|anchor {display