{"version":3,"file":"treeElement.js","sources":["../../../cookieNodeJS/master/index.js","../../../cookieNodeJS/master/cookie.js","../../../loadFileNodeJS/master/index.js","../../../loadFileNodeJS/master/loadFile.js","../index.js"],"sourcesContent":["/**\r\n * @module cookie\r\n * @description node.js version of the cookie.\r\n * Cookies let you store user information in web pages.\r\n * @see {@link https://www.w3schools.com/js/js_cookies.asp}\r\n *\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * @copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * @license under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nexport { isEnabled, set, setObject, get, getObject, copyObject, remove, defaultCookie };\r\n\r\n/**\r\n * Is the cookie enabled in your web browser?\r\n * @returns {boolean} true if cookie enabled\r\n * \r\n * @example\r\n\tvar isCookieEnabled = cookie.isEnabled('age', 25);\r\n */\r\nfunction isEnabled() {\r\n\r\n\treturn navigator.cookieEnabled;\r\n\t//Enable cookie\r\n\t//Chrome: Settings/Show advanced settings.../Privacy/Content settings.../Cookies/Allow local data to be set\r\n\r\n}\r\n\r\n/**\r\n * Set a cookie.\r\n * @param {string} name cookie name.\r\n * @param {any} value cookie value.\r\n * @param {Date} [cookie_date] expiry date (in UTC time). Optional.\r\n * @example\r\n\tcookie.set('age', 25);\r\n */\r\nfunction set( name, value, cookie_date ) {\r\n\r\n\tif ( !isEnabled() ) {\r\n\r\n\t\tconsoleCookieEnabled();\r\n\t\treturn;\r\n\r\n\t}\r\n\tvalue = value.toString();\r\n\t//http://ruseller.com/lessons.php?rub=28&id=593\r\n\tif ( cookie_date === undefined ) {\r\n\r\n\t\tcookie_date = new Date(); // Curent date and time\r\n\t\tcookie_date.setTime( cookie_date.getTime() + 1000 * 60 * 60 * 24 * 365 );//expiry date is one year\r\n\r\n\t}\r\n\tdocument.cookie = name + \"=\" + value + ( ( typeof settings == 'undefined' ) ? '' : settings ) + \"; expires=\" + cookie_date.toGMTString();\r\n\tif ( document.cookie === '' )\r\n\t\tconsole.error( 'document.cookie is empty' );\r\n\r\n}\r\n\r\n/**\r\n * sets an object into cookie.\r\n * @param {string} name cookie name.\r\n * @param {any} object an object for saving into cookie\r\n */\r\nfunction setObject( name, object ) {\r\n\r\n\tset( name, JSON.stringify( object ) );\r\n\r\n};\r\n\r\n/**\r\n * Get a cookie.\r\n * @param {string} name cookie name.\r\n * @param {any} [defaultValue] cookie default value. Optional.\r\n * @returns {string} cookie value or defaultValue if cookie was not found.\r\n * @example\r\n\tvar age = cookie.get('age', 25);\r\n */\r\nfunction get( name, defaultValue ) {\r\n\r\n\tif ( !isEnabled() ) {\r\n\r\n\t\tconsoleCookieEnabled();\r\n\t\treturn;\r\n\r\n\t}\r\n\t//http://ruseller.com/lessons.php?rub=28&id=593\r\n\tvar results = document.cookie.match( '(^|;) ?' + name + '=([^;]*)(;|$)' );\r\n\r\n\tif ( results )\r\n\t\treturn ( unescape( results[2] ) );\r\n\tif ( typeof defaultValue == 'undefined' )\r\n\t\treturn '';\r\n\treturn defaultValue;\r\n\r\n}\r\n\r\n/**\r\n * gets an object from cookie.\r\n * @param {string} name name of the object\r\n * @param {any} options load an object from cookie into options\r\n * @param {Object} optionsDefault copy to options this default object if named object is not exists in the cookie.\r\n */\r\nfunction getObject( name, options, optionsDefault ) {\r\n\r\n//\tnew defaultCookie().getObject( name, options, JSON.parse( get( name, JSON.stringify( optionsDefault ) ) ) );\r\n\tnew defaultCookie().getObject( name, options, copyObject( name, optionsDefault ) );\r\n\r\n};\r\n\r\n/**\r\n * gets an object from cookie and returns a copy of object.\r\n * @param {string} name name of the object\r\n * @param {Object} objectDefault copy to options this default object if named object is not exists in the cookie.\r\n * @returns copy of object from cookie\r\n */\r\nfunction copyObject( name, objectDefault ) {\r\n\r\n\treturn JSON.parse( get( name, JSON.stringify( objectDefault ) ) );\r\n\r\n}\r\n\r\n/**\r\n * Remove cookie\r\n * @param {string} name cookie name.\r\n */\r\nfunction remove( name ) {\r\n\r\n\tif ( !isEnabled() ) {\r\n\r\n\t\tconsoleCookieEnabled();\r\n\t\treturn;\r\n\r\n\t}\r\n\t//http://ruseller.com/lessons.php?rub=28&id=593\r\n\tvar cookie_date = new Date(); // ������� ���� � �����\r\n\tcookie_date.setTime( cookie_date.getTime() - 1 );\r\n\tdocument.cookie = name += \"=; expires=\" + cookie_date.toGMTString();\r\n\r\n}\r\n\r\nfunction consoleCookieEnabled() {\r\n\r\n\tconsole.error( 'navigator.cookieEnabled = ' + navigator.cookieEnabled );\r\n\r\n}\r\n\r\n/**\r\n * Default cookie is not saving settings\r\n * @param {any} name is not using\r\n */\r\nfunction defaultCookie( name ) {\r\n\r\n\t/**\r\n\t * Default cookie is not loading settings\r\n\t * @param {any} defaultValue\r\n\t * @returns defaultValue\r\n\t */\r\n\tthis.get = function ( defaultValue ) {\r\n\r\n\t\treturn defaultValue;\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Default cookie is not saving settings\r\n\t */\r\n\tthis.set = function () {\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * Default cookie is not loading objects\r\n\t * @param {string} name is not using\r\n\t * @param {any} options load an object from optionsDefault into options\r\n\t * @param {Object} optionsDefault source object\r\n\t */\r\n\tthis.getObject = function ( name, options, optionsDefault ) {\r\n\r\n\t\t// \r\n\t\tif ( !optionsDefault )\r\n\t\t\treturn;//object's settings is not saving\r\n\t\tObject.keys( optionsDefault ).forEach( function ( key ) {\r\n\r\n\t\t\t//I cannot modify options[key] if optionsDefault is read only and options[key] is not copy of optionsDefault[key]\r\n\t\t\t//options[key] = optionsDefault[key];\r\n\t\t\t//copy key\r\n\t\t\tvar option = optionsDefault[key];\r\n\t\t\tif ( option !== undefined )\r\n\t\t\t\toptions[key] = JSON.parse( JSON.stringify( option ) );\r\n\r\n\t\t} );\r\n\r\n\t};\r\n\r\n\t/**\r\n\t * copy and returns an object from objectDefault\r\n\t * @param {string} name is not using\r\n\t * @param {any} objectDefault source object\r\n\t */\r\n\tthis.copyObject = function ( name, objectDefault ){\r\n\r\n\t\treturn JSON.parse( JSON.stringify( objectDefault ) );\r\n\r\n\t}\r\n\r\n\t/**\r\n\t * Default cookie is not saving object's settings\r\n\t */\r\n\tthis.setObject = function () {\r\n\r\n\t};\r\n\r\n\tthis.isTrue = function ( defaultValue ) {\r\n\r\n\t\treturn defaultValue;\r\n\r\n\t};\r\n\r\n};\r\n","/**\r\n * node.js version of the cookie.\r\n *\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * @copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * @license under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\nimport { set as setCookie, get as getCookie, getObject, copyObject, setObject, defaultCookie } from './index.js';\r\nvar cookie = {\r\n\r\n\tset: setCookie,\r\n\tsetObject: setObject,\r\n\tget: getCookie,\r\n\tgetObject: getObject,\r\n\tcopyObject: copyObject,\r\n\tdefaultCookie: defaultCookie,\r\n\r\n}\r\n\r\nexport default cookie;","/**\r\n * node.js version of the synchronous download of the file.\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * @copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * @license under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n//The myRequest is cross-browser XMLHttpRequest wrapper.\r\nfunction myRequest( options ) {\r\n\r\n\tthis.loadXMLDoc = function () {\r\n\t\tvar req;\r\n\r\n\t\tif ( window.XMLHttpRequest ) {\r\n\t\t\treq = new XMLHttpRequest();\r\n\t\t\tif ( !req )\r\n\t\t\t\tthrow \"new XMLHttpRequest() failed!\"\r\n\t\t}\r\n\t\telse if ( window.ActiveXObject ) {\r\n\t\t\treq = this.NewActiveXObject();\r\n\t\t\tif ( !req )\r\n\t\t\t\tthrow \"NewActiveXObject() failed!\"\r\n\t\t}\r\n\t\telse throw \"myRequest.loadXMLDoc(...) failed!\";\r\n\t\treturn req;\r\n\t}\r\n\r\n\tthis.NewActiveXObject = function () {\r\n\t\ttry { return new ActiveXObject( \"Msxml2.XMLHTTP.6.0\" ); }\r\n\t\tcatch ( e ) { }\r\n\t\ttry { return new ActiveXObject( \"Msxml2.XMLHTTP.3.0\" ); }\r\n\t\tcatch ( e ) { }\r\n\t\ttry { return new ActiveXObject( \"Msxml2.XMLHTTP\" ); }\r\n\t\tcatch ( e ) { }\r\n\t\ttry { return new ActiveXObject( \"Microsoft.XMLHTTP\" ); }\r\n\t\tcatch ( e ) { }\r\n\t\tErrorMessage( 'This browser does not support XMLHttpRequest. Probably, your security settings do not allow Web sites to use ActiveX controls installed on your computer. Refresh your Web page to find out the current status of your Web page or enable the \"Initialize and script ActiveX controls not marked as safe\" and \"Run Active X controls and plug-ins\" of the Security settings of the Internet zone of your browser.' );\r\n\t\treturn null;\r\n\t}\r\n\r\n\tthis.XMLHttpRequestStart = function ( onreadystatechange, async ) {\r\n\r\n\t\tthis.XMLHttpRequestStop();//For compatibility with IE Windows Phone\r\n\r\n\t\tthis.req.onreadystatechange = onreadystatechange;\r\n\r\n\t\t//ATTENTION!!! do not works in IE\r\n\t\tif ( \"onerror\" in this.req ) {\r\n\t\t\tthis.req.onerror = function ( event ) {\r\n\t\t\t\tErrorMessage( \"XMLHttpRequest error. url: \" + this.url, false, false );\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.XMLHttpRequestReStart( async );\r\n\t}\r\n\r\n\tthis.getUrl = function () {\r\n\t\tif ( ( typeof this.url == 'undefined' ) || ( this.url == null ) ) {\r\n\t\t\tthis.url = \"XMLHttpRequest.xml\";\r\n\t\t}\r\n\t\treturn this.url + ( this.params ? this.params : \"\" );\r\n\t}\r\n\r\n\tthis.XMLHttpRequestReStart = function ( async ) {\r\n\t\ttry {\r\n\t\t\tif ( typeof async == 'undefined' )\r\n\t\t\t\tasync = true;\r\n\t\t\tthis.req.open( \"GET\", this.getUrl(), async );\r\n\t\t\tif ( async ) {\r\n\t\t\t\tvar timeout = ( 60 + 30 ) * 1000;//��������!!! �������� ������ ���� ������ CSocketWaitEvent::WaitResponse\r\n\t\t\t\tif ( \"timeout\" in this.req )//for IE6\r\n\t\t\t\t\tthis.req.timeout = timeout;\r\n\t\t\t\tif ( \"ontimeout\" in this.req )\r\n\t\t\t\t\tthis.req.ontimeout = function () {\r\n\t\t\t\t\t\tErrorMessage( 'XMLHttpRequest timeout', false, false );\r\n\t\t\t\t\t}\r\n\t\t\t\telse {//for Safari, IE6\r\n\t\t\t\t\tclearTimeout( this.timeout_id_SendReq );\r\n\t\t\t\t\tthis.timeout_id_SendReq = setTimeout( function () {\r\n\t\t\t\t\t\tErrorMessage( 'XMLHttpRequest timeout 2', false, false );\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\t, timeout );\r\n\t\t\t\t\t//console.log(\"setTimeout this.req.timeout_id_SendReq = \" + this.req.timeout_id_SendReq);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.req.send( null );\r\n\t\t} catch ( e ) {\r\n\t\t\tErrorMessage( e.message + \" url: \" + this.url, false, false );\r\n\t\t}\r\n\t}\r\n\r\n\tthis.XMLHttpRequestStop = function () {\r\n\t\t//console.log(\"XMLHttpRequestStop(...)\");\r\n\t\tif ( this.req == null )\r\n\t\t\treturn;\r\n\t\tthis.req.abort();\r\n\t}\r\n\r\n\tthis.ProcessReqChange = function ( processStatus200 ) {\r\n\t\tvar req = this.req;\r\n\t\tif ( ( typeof isIE === 'undefined' ) || !isIE ) {\r\n\t\t\t//\tconsole.log(\"processReqChange(); req.statusText: \" + req.statusText + \". req.status = \" + req.status + \". req.readyState = \" + req.readyState + \". req.responseText: \" + req.responseText);\r\n\t\t}\r\n\t\t// only if req shows \"complete\"\r\n\t\t//http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp\r\n\t\t//http://xmlhttprequest.ru/w3c\r\n\t\tswitch ( req.readyState ) {\r\n\t\t\tcase 4://request finished and response is ready\r\n\t\t\t\t{\r\n\t\t\t\t\tif ( typeof req.status == \"unknown\" ) {//IE5 timeout\r\n\t\t\t\t\t\tconsoleError( 'typeof XMLHttpRequest status == \"unknown\"' );\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t//� �� ���� ��������� switch ���� � ������\r\n\t\t\t\t\tif ( req.status == 200 )//OK)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tclearTimeout( this.timeout_id_SendReq );\r\n\t\t\t\t\t\treturn processStatus200( this );\r\n\t\t\t\t\t}//200://OK\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tErrorMessage( \"Invalid XMLHttpRequest status : \" + req.status + \" url: \" + this.url );\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\tcase 1://server connection established\r\n\t\t\tcase 2://request received\r\n\t\t\tcase 3://processing request\r\n\t\t\t\tbreak;\r\n\t\t\t//\t\tcase 404:\r\n\t\t\tcase 0://request not initialized\r\n\t\t\tdefault:\r\n\t\t\t\tthrow \"processReqChange(); req.readyState = \" + req.readyState;\r\n\t\t\t\tbreak;\r\n\t\t}//switch(req.readyState)\r\n\t\treturn true;\r\n\t}\r\n\r\n\tthis.processStatus200Error = function () {\r\n\t\tvar error = this.GetElementText( 'error', true );\r\n\t\tif ( error ) {\r\n\t\t\tErrorMessage( error );\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tthis.GetElementText = function ( tagName, noDisplayErrorMessage ) {\r\n\t\tvar xmlhttp = this.req;\r\n\t\tif ( !xmlhttp.responseXML ) {\r\n\t\t\tif ( noDisplayErrorMessage != true )\r\n\t\t\t\tErrorMessage( 'GetXMLElementText(xmlhttp, ' + tagName + '); xmlhttp.responseXML is null.\\nxmlhttp.responseText:\\n' + xmlhttp.responseText );\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tvar element = xmlhttp.responseXML.getElementsByTagName( tagName );\r\n\r\n\t\t//ATTENTION!!! For IE set the content-type m_HttpResponse.SetContentType(\"text/xml\");\r\n\r\n\t\tif ( element.length == 0 ) {\r\n\t\t\tif ( noDisplayErrorMessage != true )\r\n\t\t\t\tErrorMessage( 'GetXMLElementText(xmlhttp, \"' + tagName + '\"); element.length == ' + element.length );\r\n\t\t\treturn \"\";\r\n\t\t}\r\n\t\tvar text = \"\";\r\n\t\tfor ( var i = 0; i < element.length; i++ ) {\r\n\t\t\tif ( typeof ( element[i].textContent ) == 'undefined' ) {\r\n\t\t\t\tif ( typeof ( element[i].text ) == 'undefined' ) {\r\n\t\t\t\t\tErrorMessage( 'GetXMLElementText(xmlhttp, ' + tagName + '); element[' + i + '].text) == undefined' );\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t\tif ( text != \"\" )\r\n\t\t\t\t\ttext += \" \";\r\n\t\t\t\ttext += element[i].text;//IE\r\n\t\t\t}\r\n\t\t\telse text += element[i].textContent;//Chrome\r\n\t\t}\r\n\t\treturn text;\r\n\t}\r\n\r\n\tif ( options.data ) {\r\n\t\tthis.req = options.data.req;\r\n\t\tthis.url = options.data.url;\r\n\t\tthis.params = options.data.params;\r\n\t} else {\r\n\t\ttry {\r\n\t\t\tthis.req = this.loadXMLDoc();\r\n\t\t} catch ( e ) {\r\n\t\t\tvar message;\r\n\t\t\tif ( typeof e.message == 'undefined' )\r\n\t\t\t\tmessage = e;\r\n\t\t\telse message = e.message;\r\n\t\t\tErrorMessage( \"Your browser is too old and is not compatible with our site.\\n\\n\"\r\n\t\t\t\t+ window.navigator.appName + \" \" + window.navigator.appVersion + \"\\n\\n\" + message );\r\n\t\t\treturn;\r\n\t\t}\r\n\t}\r\n\tif ( !this.req ) {\r\n\t\tconsoleError( \"Invalid myRequest.req: \" + this.req );\r\n\t\treturn;\r\n\t}\r\n\r\n\tfunction ErrorMessage( error ) {\r\n\r\n\t\tconsole.error( error );\r\n\t\toptions.onerror( error );\r\n\r\n\t}\r\n\r\n}\r\n\r\n/**\r\n * @callback onerror\r\n * @param {string} str - error details\r\n */\r\n\r\n/**\r\n * Synchronous load file\r\n * @param {string} url URL of an external file.\r\n * @param {Object} [options] followed options is available. Optional.\r\n * @param {Function} [options.onload] function () The onload event occurs when a script has been loaded. Optional.\r\n * @param {onerror} [options.onerror] function ( str ) The onerror event occurs when an error has been occured. Optional.\r\n * @returns {string} file content\r\n * @example\r\n * \r\n\t//Simplest example.\r\n\tdocument.getElementById( \"elID\" ).innerHTML = loadFile.sync('element.html');\r\n *\r\n * @example\r\n *\r\n\t//onload, onerror events.\r\n\tdocument.getElementById( \"elID\").innerHTML = loadFile.sync( 'element.html',\r\n\t{\r\n\t\tonload: function ( response ) {\r\n\r\n\t\t\tvar str = 'file has been loaded successfully';\r\n\t\t\tconsole.log( str );\r\n\r\n\t\t},\r\n\t\tonerror: function ( str, e ) {\r\n\r\n\t\t\tconsole.error( str );\r\n\r\n\t\t},\r\n\t}, );\r\n */\r\nfunction sync( url, options ) {\r\n\r\n\toptions = options || {};\r\n\toptions.onload = options.onload || function () { };\r\n\toptions.onerror = options.onerror || function () { };\r\n\r\n\tvar response,\r\n\t\trequest = new myRequest( options );\r\n\trequest.url = url;\r\n\trequest.XMLHttpRequestStart(\r\n\r\n\t\tfunction () {//onreadystatechange\r\n\r\n\t\t\trequest.ProcessReqChange( function ( myRequest ) {//processStatus200\r\n\r\n\t\t\t\tif ( myRequest.processStatus200Error() )\r\n\t\t\t\t\treturn;\r\n\t\t\t\tresponse = myRequest.req.responseText;\r\n\t\t\t\t//console.log( 'loadFile.sync.onload() ' + url );\r\n\t\t\t\toptions.onload( response, url );\r\n\t\t\t\treturn;\r\n\r\n\t\t\t} );\r\n\r\n\t\t}\r\n\t\t, false//Synchronous mode\r\n\r\n\t);\r\n\t//console.log( 'sync(' + url + ')' );\r\n\treturn response;\r\n\r\n}\r\n\r\n/**\r\n * display a text to HTML\r\n * @param {string} str source text\r\n * @returns {string} escaped text\r\n */\r\nfunction escapeHtml( str ) {\r\n\r\n\treturn str.replace( /[&<>\"'\\/]/g, function ( s ) {\r\n\r\n\t\tvar entityMap = {\r\n\r\n\t\t\t\"&\": \"&\",\r\n\t\t\t\"<\": \"<\",\r\n\t\t\t\">\": \">\",\r\n\t\t\t'\"': '"',\r\n\t\t\t\"'\": ''',\r\n\t\t\t\"/\": '/'\r\n\r\n\t\t};\r\n\r\n\t\treturn entityMap[s];\r\n\r\n\t} );\r\n}\r\n\r\nexport { sync, escapeHtml };\r\n","/**\r\n * node.js version of the synchronous download of the file.\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * @copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * @license under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\nimport { sync } from './index.js';\r\n\r\nvar loadFile = {\r\n\r\n\tsync: sync,\r\n\r\n}\r\n\r\n//export { loadFile };\r\nexport default loadFile;\r\n","/**\r\n * node.js version of the TreeElement\r\n * @author Andrej Hristoliubov https://anhr.github.io/AboutMe/\r\n *\r\n * @copyright 2011 Data Arts Team, Google Creative Lab\r\n *\r\n * @license under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n */\r\n\r\n//Please download https://github.com/anhr/cookieNodeJS into ../../cookieNodeJS/master folder\r\nimport cookie from '../../cookieNodeJS/master/cookie.js';\r\n//import cookie from 'https://raw.githack.com/anhr/cookieNodeJS/master/cookie.js';\r\n\r\n//import { loadFile } from 'http://localhost/anhr/loadFileNodeJS/master/loadFile.js';\r\n//import { loadFile } from 'https://raw.githack.com/anhr/loadFileNodeJS/master/loadFile.js';\r\n//Please download https://github.com/anhr/loadFileNodeJS into ../../loadFileNodeJS/master folder\r\nimport loadFile from '../../loadFileNodeJS/master/loadFile.js';\r\n/**\r\n * @callback onBranchEvent\r\n * @param {HTMLElement} a element of the \"treeView\" class\r\n */\r\n\r\n/**\r\n * @callback branchOptions\r\n */\r\n\r\n/**\r\n * Create tree branch\r\n * @param {Object} options followed options is available\r\n * @param {string} [options.name] name of the branch. Optional. Default is empty name\r\n * @param {string} [options.title] title of the tag of the TreeElement. Optional. Default is empty title\r\n * @param {string} [options.tagName] name of the branch tag. Optional. Default is div\r\n * @param {string} [options.className] className of branch tag. Optional.\r\n * @param {string} [options.id] id of tag of the branch. Optional. Default is empty id\r\n * @param {string} [options.treeViewTagName] name of tag of the TreeElement. Optional. Default is span\r\n * \r\n * @param {Object} options.params followed params is available\r\n * @param {Function} options.params.createBranch function (). creates and returns the branch element\r\n * @param {string} [options.params.remember] the name of the branch that was opened before closing the web page.\r\n * This branch will be opened immediately after opening the web page.\r\n * Optional. Default is empty - not remember\r\n * @param {boolean} [options.params.noBranchLeft] true - margin-left of the branch is 0 and not 10 pixels.\r\n * Optional. Default - shift the tree branch to left to the 10 pixels\r\n * @param {onBranchEvent} [options.params.onOpenBranch] function ( a ). event is user has opened a branch.\r\n * element is class=\"treeView\". * Optional.\r\n * @param {onBranchEvent} [options.params.onCloseBranch] function ( a ). event is user has closed a branch. Optional.\r\n * @param {boolean} [options.params.animate] true - animate of open/closing of the branch. Optional. Default is undefined\r\n * @param {string} [options.params.branchId] identifier of the branch. Optional.\r\n * @param {string|Function} [options.params.branch] name of the branch or function () - creates and returns the branch element. Optional.\r\n * @param {branchOptions[]} [options.params.tree] array of branches. Each item of the tree array is options of the branch. Optional.\r\n * @param {boolean} [options.params.scrollIntoView] true - scroll the opened branch into the visible area of the browser window.\r\n * Optional. Default is not scrolling\r\n *\r\n * @returns tree branch element\r\n *\r\n * @example\r\n * \r\n \tdocument.getElementById( \"SimpleTree\" ).appendChild( myTreeView.createBranch( {\r\n\t\tname: \"Simple Tree\",\r\n\t\tparams:\r\n\t\t{\r\n\t\t\tcreateBranch: function () {\r\n\t\t\t\tvar el = document.createElement( \"div\" );\r\n\t\t\t\tel.innerText = \"Branch\";\r\n\t\t\t\treturn el;\r\n\t\t\t}\r\n\t\t}\r\n\t} ) );\r\n*\r\n * @example see https://raw.githack.com/anhr/TreeElementNodeJS/master/Examples/html/\r\n * and https://raw.githack.com/anhr/TreeElementNodeJS/master/Examples/module/\r\n *\r\n*/\r\nfunction createBranch( options ) {\r\n\r\n\tvar el = document.createElement( ( options.tagName == undefined ) ? \"div\" : options.tagName );\r\n\tif ( ( options.className != undefined ) )\r\n\t\tel.className = options.className;\r\n\tif ( ( options.id != undefined ) )\r\n\t\tel.id = options.id;\r\n\tvar treeViewTagName = typeof options.treeViewTagName == 'undefined' ? 'span' : options.treeViewTagName;\r\n\tswitch ( typeof options.name ) {\r\n\r\n\t\tcase 'undefined': options.name = ''; break;\r\n\t\tcase 'function': el.appendChild( options.name() ); return el;\r\n\r\n\t}\r\n\tel.innerHTML =\r\n\t\t'<' + treeViewTagName + ' class=\"treeView\" onclick=\"javascript: myTreeView.onclickBranch(this)\" '\r\n\t\t+ ( ( typeof options.title == 'undefined' ) ? '' : 'title=\"' + options.title + '\"' ) + '>'\r\n\t\t+ ''//▶//⯈➤compatible with edge and ⯈ not compatible with Safari\r\n\t\t+ '' + options.name + ''\r\n\t\t+ '';\r\n\tvar elA = getElTreeView( el );\r\n\telA.params = options.params;\r\n\tif (\r\n\t\t( options.params != undefined )\r\n\t\t&& options.params.remember\r\n\t\t&& ( cookie.get( options.params.remember, 'false' ) == 'true' )\r\n\t) this.onclickBranch( elA );\r\n\treturn el;\r\n\r\n}\r\n\r\n/**\r\n * Create tree\r\n * @param {HTMLElement|string} elTree parent element of the tree or class name of the new parent element\r\n * @param {branchOptions[]} tree array of branches. Each item of the tree array is options of the branch\r\n * @param {string} [tree[].name] name of the branch. Optional. Default is empty name\r\n * @param {string|HTMLElement|Function} tree[].branch name of the branch\r\n * or branch element\r\n * or function () - creates and returns the branch element\r\n * @param {boolean} [tree[].animate] true - animate of open/closing of the branch. Optional. Default is undefined\r\n * @param {string} [tree[].title] title of the tag of the branch. Optional. Default is empty title\r\n * @param {string} [tree[].tagName] name of the branch tag. Optional. Default is div\r\n * @param {branchOptions[]} [tree[].tree] array of child branches. Each item of the tree array is options of the branch\r\n * @param {string} [tree[].parentElement] id of the parentElement of the branch tag.\r\n * A new branch can be not a child of the tree. Use the parentElement option if you want to create a branch anywhere on the web page.\r\n * Optional. Default is undefined\r\n * @param {string} [tree[].file] the path to HTML file with code of the branch element. Optional.\r\n * @param {string} [tree[].el] code of the branch element. Optional.\r\n *\r\n * @example\r\n * \r\n\tmyTreeView.createTree(\r\n\t\tdocument.getElementById( \"ComplexTree\" ),\r\n\t\t[\r\n\t\t\t{\r\n\t\t\t\tname: \"Animate Branch\",\r\n\t\t\t\tbranch: \"branch 1\",\r\n\t\t\t\tanimate: true,\r\n\t\t\t\ttree: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: \"tree 2.1\",\r\n\t\t\t\t\t\tanimate: true,\r\n\t\t\t\t\t\ttree: [\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tname: \"tree 2.2\",\r\n\t\t\t\t\t\t\t\tbranch: \"branch 2.2\",\r\n\t\t\t\t\t\t\t\tanimate: true\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t]\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tfile: \"branch1.html\",\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tel: \"
Branch from string
\"\r\n\t\t\t\t\t},\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: \"Complex Tree 2\",\r\n\t\t\t\tbranch: function () {\r\n\t\t\t\t\tvar el = document.createElement( \"div\" );\r\n\t\t\t\t\tel.className = \"branchLeft\";\r\n\t\t\t\t\tel.appendChild( document.createElement( \"input\" ) );\r\n\t\t\t\t\tvar elClose = document.createElement( \"input\" );\r\n\t\t\t\t\telClose.type = \"button\";\r\n\t\t\t\t\telClose.onclick = myTreeView.onclickCloseBranch;\r\n\t\t\t\t\telClose.value = \"Close Branch\";\r\n\t\t\t\t\tel.appendChild( elClose );\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t},\r\n\t\t\t\ttitle: \"inline-element\",\r\n\t\t\t\ttagName: \"span\"\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\tname: \"Complex Tree 3\",\r\n\t\t\t\tbranch: \"branch 3\",\r\n\t\t\t\ttitle: \"inline-element\",\r\n\t\t\t\ttagName: \"span\"\r\n\t\t\t},\r\n\t\t]\r\n\t);\r\n *\r\n */\r\nfunction createTree( elTree, tree ) {\r\n\r\n\ttree.forEach( function ( branch ) {\r\n\r\n\t\tappendBranch( elTree, branch );\r\n\t\tif ( typeof branch.branch == \"object\" ) {\r\n\r\n\t\t\tbranch.branch.parentElement.removeChild( branch.branch );\r\n\t\t\tif ( branch.branch.style.display == \"none\" )\r\n\t\t\t\tbranch.branch.style.display = '';\r\n\r\n\t\t}\r\n\r\n\t} );\r\n\r\n}\r\n\r\n/**\r\n * User has clicked a branch event\r\n * @param {HTMLElement} a the branch the user clicked on\r\n */\r\nfunction onclickBranch( a ) {\r\n\r\n\tvar parentElement = getParentElement( a ),\r\n\t\telBranch = getElBranch( parentElement ),\r\n\t\ttriangle,\r\n\t\tisOpened = isBranchOpened( elBranch );\r\n\tif ( isOpened ) {\r\n\r\n\t\tif ( typeof a.branchElement != 'undefined' )\r\n\t\t\t//Parent element of the branch is null after closing of the branch.\r\n\t\t\t//But some applications want to know it.\r\n\t\t\t//Remembers a parent element in the rootElement member.\r\n\t\t\ta.branchElement.rootElement = a.branchElement.parentElement;\r\n\t\tif ( ( typeof a.branchElement != 'undefined' ) && a.branchElement.classList.contains( btoggle ) )\r\n\t\t\ta.branchElement.classList.remove( expanded );\r\n\t\telse parentElement.removeChild( elBranch );\r\n\t\ttriangle = '▶';\r\n\t\tisOpened = false;\r\n\t\tif ( a.params.onCloseBranch != undefined )\r\n\t\t\ta.params.onCloseBranch( a );\r\n\t\tif ( ( a.params.branch != undefined ) && ( a.params.branch.onCloseBranch != undefined ) )\r\n\t\t\ta.params.branch.onCloseBranch( a );\r\n\r\n\t} else {\r\n\r\n\t\tif ( typeof a.branchElement == 'undefined' ) {\r\n\r\n\t\t\tif ( typeof a.params == \"undefined\" )\r\n\t\t\t\ta.params = {};\r\n\t\t\tswitch ( typeof a.params.createBranch ) {\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\t\ta.branchElement = a.params.createBranch( a );\r\n\t\t\t\t\tif ( a.branchElement == null ) {\r\n\r\n\t\t\t\t\t\tconsoleError( 'Invalid branchElement: ' + a.branchElement );\r\n\t\t\t\t\t\treturn;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( a.branchElement.style.display == \"none\" )\r\n\t\t\t\t\t\ta.branchElement.style.display = 'block';\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\ta.branchElement = document.getElementById( a.params.createBranch );\r\n\t\t\t\t\tif ( a.branchElement == null ) {\r\n\r\n\t\t\t\t\t\ta.branchElement = document.createElement( \"div\" );\r\n\t\t\t\t\t\ta.branchElement.innerText = a.params.createBranch;\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\"://tree\r\n\t\t\t\t\tif ( typeof a.params.tree == \"undefined\" )\r\n\t\t\t\t\t\ta.params.tree = [];\r\n\t\t\t\t\tif ( typeof a.params.tree == \"object\" ) {\r\n\r\n\t\t\t\t\t\tvar el = document.createElement( \"div\" );\r\n\t\t\t\t\t\tif ( a.params.tree.length == 0 )\r\n\t\t\t\t\t\t\tconsoleError( 'empty branch' );\r\n\t\t\t\t\t\ta.params.tree.forEach( function ( branch ) {\r\n\r\n\t\t\t\t\t\t\tvar elBranch = document.createElement( \"div\" );\r\n\t\t\t\t\t\t\tif ( typeof branch.branch == \"function\" ) {\r\n\r\n\t\t\t\t\t\t\t\tvar branch = branch.branch();\r\n\t\t\t\t\t\t\t\tswitch ( typeof branch ) {\r\n\r\n\t\t\t\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\t\t\t\t\telBranch.innerHTML = branch;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\t\t\t\telBranch = branch;\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tdefault: consoleError( 'invalid typeof branch: ' + typeof branch );\r\n\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t} else {\r\n\r\n\t\t\t\t\t\t\t\telBranch.innerHTML = branch.name;\r\n\t\t\t\t\t\t\t\tif ( branch.branchId )\r\n\t\t\t\t\t\t\t\t\telBranch.branchId = branch.branchId;\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tel.appendChild( elBranch );\r\n\r\n\t\t\t\t\t\t} );\r\n\t\t\t\t\t\tdelete a.params.tree;\r\n\t\t\t\t\t\ta.branchElement = el;\r\n\r\n\t\t\t\t\t} else consoleError( 'invalid a.params.tree: ' + a.params.tree );\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t}\r\n\t\t\tvar branch = 'branch', branchLeft = 'branchLeft';\r\n\t\t\tif ( ! a.branchElement.classList.contains( branch ) )\r\n\t\t\t\ta.branchElement.classList.add( branch );\r\n\t\t\tif ( a.params.animate && ! a.branchElement.classList.contains( btoggle ) )\r\n\t\t\t\ta.branchElement.classList.add( btoggle );\r\n\t\t\tif ( ( typeof a.params.noBranchLeft == 'undefined' ) || ! a.params.noBranchLeft )\r\n\t\t\t\ta.branchElement.classList.add( branchLeft );\r\n\r\n\t\t}\r\n\t\tif ( ! elBranch ) {\r\n\r\n\t\t\tparentElement.appendChild( a.branchElement );\r\n\t\t\tif ( a.params.scrollIntoView || ( ( typeof a.params.branch != 'undefined' ) && ( a.params.branch.scrollIntoView ) ) )\r\n\t\t\t\tsetTimeout( function () {\r\n\r\n\t\t\t\t\ta.branchElement.scrollIntoView();\r\n\r\n\t\t\t\t}, 0 );\r\n\r\n\t\t}\r\n\t\tif ( a.branchElement.classList.contains( btoggle ) && ! a.branchElement.classList.contains( expanded ) )\r\n\t\t\tsetTimeout( function () {\r\n\r\n\t\t\t\ta.branchElement.classList.add( expanded );\r\n\r\n\t\t\t}, 0 );\r\n\r\n\t\ttriangle = '▼';\r\n\t\tisOpened = true;\r\n\t\tif ( a.params.onOpenBranch != undefined )\r\n\t\t\ta.params.onOpenBranch( a );\r\n\t\tif ( ( a.params.branch != undefined ) && ( a.params.branch.onOpenBranch != undefined ) )\r\n\t\t\ta.params.branch.onOpenBranch( a );\r\n\r\n\t}\r\n\tif ( a.params.remember !== undefined )\r\n\t\tcookie.set( a.params.remember, isOpened ? 'true' : 'false' );\r\n\ta.querySelector( '.triangle' ).innerHTML = triangle;\r\n\tif ( ( typeof a.params.branch != 'undefined' ) && ( typeof a.params.branch.onclickBranch != 'undefined' ) )\r\n\t\ta.params.branch.onclickBranch( a );\r\n\telse if ( typeof a.params.onclickBranch != 'undefined' )\r\n\t\ta.params.onclickBranch( a );\r\n\treturn isOpened;\r\n\r\n}\r\n\r\n/**\r\n * User has closed a branch event\r\n * @param {Event} event\r\n */\r\nfunction onclickCloseBranch( event ) {\r\n\r\n\tvar elParent = getElementFromEvent( event ).parentElement.parentElement;\r\n\tvar elTreeView = getElTreeView( elParent );\r\n\tif ( elTreeView.parentElement != elParent )\r\n\t\tconsoleError( 'incorrect treeView' );\r\n\tonclickBranch( elTreeView );\r\n\r\n}\r\n\r\n/**\r\n * User has closed a branch event\r\n * @param {Event} event\r\n */\r\nfunction onCloseBranchAnywhere( event ) {\r\n\r\n\tgetElementFromEvent( event ).parentElement.elTreeView.onclick();\r\n\r\n}\r\n\r\n/**\r\n * Adds a new branch to the tree\r\n * @param {String|HTMLElement} elTree id of the tree element or tree element to which the new branch will be added\r\n * @param {Object} branch new branch options\r\n * @param {string} [branch.name] name of the branch.\r\n * Optional. You can use a branch function instead branch name.\r\n * @param {Function} [branch.branch] function () returns an element of the new branch\r\n * @param {string} [branch.branchId] identifier of the new branch. Uses for find and remove branch.\r\n */\r\nfunction AddNewBranch( elTree, branch ) {\r\n\r\n\tif ( typeof elTree == \"string\" )\r\n\t\telTree = document.getElementById( elTree );\r\n\tvar elTreeView = getElTreeView( elTree );\r\n\tvar elBranch = getElBranch( elTree );\r\n\tif ( ! elBranch )\r\n\t\telBranch = elTreeView.branchElement;//branch exists but hidden\r\n\tif ( elBranch ) {\r\n\r\n\t\tvar elNewBranch;\r\n\t\tif ( typeof branch.branch == \"function\" ) {\r\n\r\n\t\t\tvar newBranch = branch.branch();\r\n\t\t\tswitch ( typeof newBranch ) {\r\n\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\t\telNewBranch = document.createElement( 'div' );\r\n\t\t\t\t\telNewBranch.innerHTML = newBranch;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\t\telNewBranch = newBranch;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault: consoleError( 'invalid typeof branch: ' + typeof newBranch );\r\n\r\n\t\t\t}\r\n\t\t\telBranch.appendChild( elNewBranch );\r\n\r\n\t\t} else if ( typeof branch.name == \"string\" ) {\r\n\r\n\t\t\telNewBranch = document.createElement( 'div' );\r\n\t\t\telNewBranch.innerHTML = branch.name;\r\n\t\t\telBranch.appendChild( elNewBranch );\r\n\r\n\t\t} else consoleError( 'invalid typeof branch.branch: ' + typeof branch.branch );\r\n\t\tif ( typeof branch.branchId != \"undefined\" )\r\n\t\t\telNewBranch.branchId = branch.branchId;//for branch removing\r\n\r\n\t} else {\r\n\r\n\t\tif ( typeof elTreeView.params == \"undefined\" )\r\n\t\t\telTreeView.params = {};\r\n\t\tif ( typeof elTreeView.params.tree == \"undefined\" )\r\n\t\t\telTreeView.params.tree = [];\r\n\t\telTreeView.params.tree.push( branch );\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction findBranch( elTree, branchId ) {\r\n\r\n\tif ( typeof elTree == \"string\" ) elTree = document.getElementById( elTree );\r\n\tvar elTreeView = getElTreeView( elTree ),\r\n\t\tarray = [];\r\n\tif ( elTreeView == null ) return array;\r\n\tvar tree = elTreeView.params == undefined ? undefined : elTreeView.params.tree;\r\n\tif ( typeof tree == 'undefined' ) {\r\n\r\n\t\tvar elBranches = getElBranch( elTree ),\r\n\t\t\tchildNodes = elBranches == null ?\r\n\t\t\t\t( elTreeView.branchElement == undefined ? null : elTreeView.branchElement.childNodes )\r\n\t\t\t\t: elBranches.childNodes;\r\n\t\tif ( childNodes == null ) return array;\r\n\t\tfor ( var i = childNodes.length - 1; i >= 0; i -- ) {\r\n\r\n\t\t\tvar elBranch = childNodes[ i ],\r\n\t\t\t\tres = false, //Branch is not detected\r\n\t\t\t\telTreeViewChild = getElTreeView( elBranch );\r\n\t\t\tif ( elTreeViewChild ) {\r\n\r\n\t\t\t\tif ( elTreeViewChild.params.branchId == undefined ) consoleError( 'elTreeViewChild.params.branchId: ' + elTreeViewChild.params.branchId );\r\n\t\t\t\tif ( ( branchId == undefined ) || ( elTreeViewChild.params.branchId == branchId ) ) res = true;\r\n\r\n\t\t\t} else if ( typeof elBranch.branchId == 'undefined' ) {\r\n\r\n\t\t\t\tconsoleError( 'elBranch.branchId: ' + elBranch.branchId );\r\n\t\t\t\tif ( ( branchId == undefined ) || ( elBranch.innerText == branchId ) ) res = true;\r\n\r\n\t\t\t} else if ( ( branchId == undefined ) || ( elBranch.branchId == branchId ) ) res = true;\r\n\t\t\tif ( res ) array.push( elBranch );\r\n\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tfor ( var i = tree.length - 1; i >= 0; i -- ) {\r\n\r\n\t\t\tvar branch = tree[ i ],\r\n\t\t\t\tres = false;//Branch is not detected\r\n\t\t\tif ( typeof branch.branchId == 'undefined' ) {\r\n\r\n\t\t\t\tconsoleError( 'branch.branchId: ' + branch.branchId );\r\n\t\t\t\tif ( ( branchId == undefined ) || ( branch.name == branchId ) ) res = true;\r\n\r\n\t\t\t} else if ( ( branchId == undefined ) || ( branch.branchId == branchId ) ) res = true;\r\n\t\t\tif ( res ) array.push( { tree: tree, i: i } );\r\n\r\n\t\t}\r\n\r\n\t}\r\n\treturn array;\r\n\r\n}\r\n\r\n/**\r\n * Removes a branch from the tree\r\n * @param {String} branchId identifier of the branch for removing. See AddNewBranch function for details\r\n * @param {HTMLElement} elTree The tree element from which the branch will be removed\r\n */\r\nfunction removeBranch( branchId, elTree ) {\r\n\r\n\tvar array = findBranch( elTree, branchId );\r\n\tvar res = false;//Branch is not detected and not removed\r\n\tarray.forEach( function ( item ) {\r\n\r\n\t\tif ( item.tree == undefined ) item.parentElement.removeChild( item );\r\n\t\telse item.tree.splice( item.i, 1 );\r\n\t\tres = true;\r\n\r\n\t} );\r\n\treturn res;\r\n\r\n}\r\n\r\n/**\r\n * Removes all branch from the tree\r\n * @param {HTMLElement} elTree The tree element from which all branches will be removed\r\n */\r\nfunction removeAllBranches( elTree ) {\r\n\r\n\tif ( typeof elTree == \"string\" )\r\n\t\telTree = document.getElementById( elTree );\r\n\tvar res = false;//Branch is not detected and not removed\r\n\tvar elTreeView = getElTreeView( elTree );\r\n\tif ( elTreeView == null )\r\n\t\treturn res;\r\n\tvar tree = elTreeView.params.tree;\r\n\tif ( typeof tree == 'undefined' ) {\r\n\r\n\t\tvar elBranches = getElBranch( elTree );\r\n\t\tvar childNodes = elBranches == null ? elTreeView.branchElement.childNodes : elBranches.childNodes;\r\n\t\tfor ( var i = childNodes.length - 1; i >= 0; i -- ) {\r\n\r\n\t\t\tvar elBranch = childNodes[ i ];\r\n\t\t\telBranch.parentElement.removeChild( elBranch );\r\n\t\t\tres = true;\r\n\r\n\t\t}\r\n\r\n\t} else {\r\n\r\n\t\tif ( tree.length > 0 )\r\n\t\t\tres = true;\r\n\t\telTreeView.params.tree = [];\r\n\r\n\t}\r\n\treturn res;\r\n\r\n}\r\n\r\nfunction getElTreeView( parentElement ) {\r\n\r\n\treturn parentElement.querySelector( '.treeView' );\r\n\r\n}\r\n\r\nfunction getParentElement( a ) {\r\n\r\n\tvar parentElement = ( ( a.params.branch != undefined ) && ( a.params.branch.parentElement != undefined ) ) ?\r\n\t\ta.params.branch.parentElement : ( a.params.parentElement == undefined ) ? a.parentElement : a.params.parentElement;\r\n\tif ( typeof parentElement == \"string\" )\r\n\t\tparentElement = document.getElementById( parentElement );\r\n\treturn parentElement;\r\n\r\n}\r\n\r\nfunction getElBranch( parentElement ) {\r\n\r\n\treturn parentElement.querySelector( '.branch' );\r\n\r\n}\r\n\r\nfunction isBranchOpened( elBranch ) {\r\n\r\n\treturn elBranch ?\r\n\t\t(\r\n\t\t\t! elBranch.classList.contains( btoggle ) ?\r\n\t\t\t\ttrue : ( elBranch.classList.contains( expanded ) ? true : false )\r\n\t\t)\r\n\t\t: false;\r\n\r\n}\r\n\r\nfunction appendBranch( elTree, branch ) {\r\n\r\n\tif ( typeof elTree == \"string\" )\r\n\t\telTree = document.getElementById( elTree );\r\n\tvar parentElement;\r\n\tswitch ( typeof branch.parentElement ) {\r\n\r\n\t\tcase \"undefined\":\r\n\t\t\tbreak;\r\n\t\tcase \"string\":\r\n\t\t\tparentElement = document.getElementById( branch.parentElement );\r\n\t\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\t\tparentElement = branch.parentElement;\r\n\t\t\tbreak;\r\n\t\tdefault: consoleError( \"Invalid typeof branch.parentElement: \" + typeof branch.parentElement );\r\n\r\n\t}\r\n\tvar branchClass = \"branch\";\r\n\tif ( parentElement && ( parentElement.className.indexOf( branchClass ) == - 1 ) )\r\n\t\tparentElement.className += \" \" + branchClass;\r\n\telTree.appendChild( createBranch(\r\n\t\t{\r\n\t\t\tname: branch.name,\r\n\t\t\tparams:\r\n\t\t\t{\r\n\t\t\t\tcreateBranch: function () {\r\n\r\n\t\t\t\t\tvar el;\r\n\t\t\t\t\tswitch ( typeof branch.branch ) {\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\t\tel = branch.branch();\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tel = branch.branch;\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tel = document.createElement( \"div\" );\r\n\t\t\t\t\t\t\tvar res = false;\r\n\t\t\t\t\t\t\tif ( typeof branch.branch == \"string\" ) {\r\n\r\n\t\t\t\t\t\t\t\tel.innerText = branch.branch;\r\n\t\t\t\t\t\t\t\tres = true;\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif ( this.branch.tree ) {\r\n\r\n\t\t\t\t\t\t\t\tthis.branch.tree.forEach( function ( branch ) {\r\n\r\n\t\t\t\t\t\t\t\t\tif ( branch.name ) appendBranch( el, branch );\r\n\t\t\t\t\t\t\t\t\telse if ( branch.el ) {\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar elChild = document.createElement( 'div' );\r\n\t\t\t\t\t\t\t\t\t\telChild.innerHTML = branch.el;\r\n\t\t\t\t\t\t\t\t\t\tel.appendChild( elChild );\r\n\r\n\t\t\t\t\t\t\t\t\t} else if ( branch.file ) {\r\n\r\n\t\t\t\t\t\t\t\t\t\tvar elChild = document.createElement( 'div' );\r\n\t\t\t\t\t\t\t\t\t\telChild.innerHTML = 'branch from \"' + branch.file + '\" file';\r\n\t\t\t\t\t\t\t\t\t\tel.appendChild( elChild );\r\n\t\t\t\t\t\t\t\t\t\telChild.innerHTML = loadFile.sync( branch.file );\r\n\r\n\t\t\t\t\t\t\t\t\t} else consoleError( 'Branch: ' + JSON.stringify( branch ) );\r\n\r\n\t\t\t\t\t\t\t\t} );\r\n\t\t\t\t\t\t\t\tres = true;\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif ( ! res )\r\n\t\t\t\t\t\t\t\tconsoleError( \"Invalid branch\" );\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif ( branch.animate )\r\n\t\t\t\t\t\tel.classList.add( btoggle );\r\n\t\t\t\t\treturn el;\r\n\r\n\t\t\t\t},\r\n\t\t\t\tbranch: branch,\r\n\t\t\t\tremember: branch.remember\r\n\t\t\t},\r\n\t\t\ttitle: branch.title,\r\n\t\t\ttagName: branch.tagName,\r\n\t\t\tclassName: branch.className,\r\n\t\t\tid: branch.id\r\n\t\t}\r\n\t) );\r\n\r\n}\r\n\r\nvar expanded = 'expanded', btoggle = 'b-toggle';\r\n\r\nfunction consoleError( e ) {\r\n\r\n\tconsole.error( e );\r\n\r\n}\r\nfunction getElementFromEvent( event ) {\r\n\tif ( !event ) event = window.event;//for IE6\r\n\treturn event.target || event.srcElement;\r\n}\r\n\r\nexport function getWaitIconBase( papams ) {\r\n\tif ( typeof papams == 'undefined' )\r\n\t\tpapams = 'style=\"width: 20px; height:20px\"';\r\n\treturn '';\r\n}\r\n\r\nexport { createBranch, createTree, onclickBranch, onclickCloseBranch, onCloseBranchAnywhere, AddNewBranch, removeBranch, removeAllBranches };\r\n"],"names":["isEnabled","navigator","cookieEnabled","set","name","value","cookie_date","toString","undefined","Date","setTime","getTime","cookie","settings","toGMTString","document","console","error","setObject","object","JSON","stringify","get","defaultValue","results","match","unescape","getObject","options","optionsDefault","defaultCookie","copyObject","objectDefault","parse","consoleCookieEnabled","keys","forEach","key","option","isTrue","setCookie","getCookie","myRequest","loadXMLDoc","req","window","XMLHttpRequest","ActiveXObject","NewActiveXObject","e","XMLHttpRequestStart","onreadystatechange","async","XMLHttpRequestStop","onerror","event","url","XMLHttpRequestReStart","getUrl","params","open","timeout","ontimeout","timeout_id_SendReq","setTimeout","send","message","abort","ProcessReqChange","processStatus200","readyState","status","processStatus200Error","GetElementText","tagName","noDisplayErrorMessage","xmlhttp","responseXML","ErrorMessage","responseText","element","getElementsByTagName","length","text","i","textContent","data","appName","appVersion","sync","onload","response","request","loadFile","createBranch","el","createElement","className","id","treeViewTagName","appendChild","innerHTML","title","elA","getElTreeView","remember","onclickBranch","createTree","elTree","tree","branch","parentElement","removeChild","style","display","a","getParentElement","elBranch","getElBranch","triangle","isOpened","isBranchOpened","branchElement","rootElement","classList","contains","btoggle","remove","expanded","onCloseBranch","getElementById","innerText","consoleError","branchId","branchLeft","add","animate","noBranchLeft","scrollIntoView","onOpenBranch","querySelector","onclickCloseBranch","elParent","getElementFromEvent","elTreeView","onCloseBranchAnywhere","onclick","AddNewBranch","elNewBranch","newBranch","push","findBranch","array","elBranches","childNodes","res","elTreeViewChild","removeBranch","item","splice","removeAllBranches","appendBranch","branchClass","indexOf","elChild","file","target","srcElement","getWaitIconBase","papams"],"mappings":"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"}