diff --git a/modules/vulnerabilities/unix/http/elfinder/elfinder.pp b/modules/vulnerabilities/unix/http/elfinder/elfinder.pp new file mode 100644 index 000000000..d00cd61ad --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/elfinder.pp @@ -0,0 +1,8 @@ +# begining of puppet code execution + +contain elfinder::install +contain elfinder::apache +contain elfinder::configure +Class['elfinder::install'] -> +Class['elfinder::apache'] -> +Class['elfinder::configure'] \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/elfinder/files/elFinder-2.1.58.zip b/modules/vulnerabilities/unix/http/elfinder/files/elFinder-2.1.58.zip new file mode 100644 index 000000000..ae7010dc9 Binary files /dev/null and b/modules/vulnerabilities/unix/http/elfinder/files/elFinder-2.1.58.zip differ diff --git a/modules/vulnerabilities/unix/http/elfinder/manifests/apache.pp b/modules/vulnerabilities/unix/http/elfinder/manifests/apache.pp new file mode 100644 index 000000000..09bf157dd --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/manifests/apache.pp @@ -0,0 +1,92 @@ +class elfinder::apache{ + #install web server + #secgen parameters commented out and hardcode inputs used for testing + ##$secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file) + $port = '80' ##$secgen_parameters['port'][0] + $releasename = 'elFinder-2.1.58' + $docroot = "/var/www/$releasename" + + Exec { path => ['/bin', '/usr/bin', '/usr/local/bin', '/sbin', '/usr/sbin'] } + + class { '::apache': + default_vhost => false, + default_mods => ['rewrite'], + overwrite_ports => false, + mpm_module => 'prefork' + } -> + #unzip install and update permissions + exec {'elfinder': + cwd => '/usr/local/src', + command => "unzip $releasename.zip -d /var/www/", + creates => "$docroot" + }-> + exec { 'chown-elfinder': + command => "chown www-data. /var/www/ -R", + }->exec { 'chown-elfinder-permissions': + command => "chown 755 /var/www/ -R", + }-> + ::apache::vhost { 'www-elfinder': + port => $port, + docroot => $docroot, + }-> + #remove default apache files + file{ '/var/www/html/index.html': + ensure => absent, + } -> + file{ '/etc/apache2/sites-enabled/000-default.conf': + ensure => absent, + }-> + file { "$docroot/php/connector.minimal.php": + ensure => present, + content => template('elfinder/connector.minimal.php') + }-> + #removed url for 3rd party source and added custom congfigurations + file { "$docroot/index.html": + ensure => present, + content => template('elfinder/elfinder.html') + }-> + #removed url for 3rd party source + file { "$docroot/main.js": + ensure => present, + content => template('elfinder/main.js') + }-> + #remove links for 3rd party urls + file { "$docroot/js/elFinder.options.js": + ensure => present, + content => template('elfinder/elFinder.options.js') + }-> + file { "$docroot/css/jquery-ui.css": + ensure => present, + content => template('elfinder/jquery-ui.css') + }-> + file { "$docroot/js/jquery-ui.min.js": + ensure => present, + content => template('elfinder/jquery-ui.min.js') + }-> + file { "$docroot/js/jquery.min.js": + ensure => present, + content => template('elfinder/jquery.min.js') + }-> + file { "$docroot/js/require.js": + ensure => present, + content => template('elfinder/require.js') + }-> + file { "$docroot/js/require.min.js": + ensure => present, + content => template('elfinder/require.min.js') + }-> + file { "$docroot/js/encoding.min.js": + ensure => present, + content => template('elfinder/encoding.min.js') + }-> + + exec { 'restart-apache-elfinder': + command => 'systemctl restart apache2', + logoutput => true + } -> + exec { 'wait-apache-elfinder': + command => 'sleep 4', + } + + +} \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/elfinder/manifests/configure.pp b/modules/vulnerabilities/unix/http/elfinder/manifests/configure.pp new file mode 100644 index 000000000..379198866 --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/manifests/configure.pp @@ -0,0 +1,52 @@ +class elfinder::configure { + #secgen parameters commented out and hardcode inputs used for testing + ##$secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file) + $leaked_filenames = ["flagtest"] ##$secgen_parameters['leaked_filenames'] + $strings_to_leak = ["this is a list of strings that are secrets / flags","another secret"] ##$secgen_parameters['strings_to_leak'] + $releasename = 'elFinder-2.1.58' + $docroot = "/var/www/$releasename" + $dir_array=['folder1', 'folder2', 'folder3'] ##$secgen_parameters['strings_to_pre_leak'], + + Exec { path => ['/bin', '/usr/bin', '/usr/local/bin', '/sbin', '/usr/sbin'] } + + #create public directory + file { "${docroot}/files/public": + ensure => directory, + mode => '0777', + } + + #add read only folders + $dir_array.each |String $dir_array| { + file { "${docroot}/files/${leaked_filenames}": + ensure => directory, + owner => 'www-data', + mode => '0444', + } + } + + #create flag directory + file { "${docroot}/files/.hidden": + ensure => directory, + owner => 'www-data', + mode => '0700', + + } + #FOR TESTING ONLY + file { "${docroot}/files/.hidden/${leaked_filenames}": + ensure => present, + owner => 'www-data', + mode => '0700', + + } + + # ::secgen_functions::leak_files { 'elfinder-flag-leak': + # storage_directory => '$docroot/files/.hidden', + # leaked_filenames => $leaked_filenames, + # strings_to_leak => $strings_to_leak, + # owner => 'www-data', + # mode => '0750', + # leaked_from => 'elfinder', + #} + + +} \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/elfinder/manifests/install.pp b/modules/vulnerabilities/unix/http/elfinder/manifests/install.pp new file mode 100644 index 000000000..b3b6a1d57 --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/manifests/install.pp @@ -0,0 +1,22 @@ +class elfinder::install { + + $releasename = 'elFinder-2.1.58' + + + # ensure packages + + ensure_packages(['php-xml','php-gd','php.mbstring','php-json','libapache2-mod-php','php']) + ensure_packages(['libjs-requirejs','libjs-jquery','libjs-jquery-ui','javascript-common']) + + # sets the default paths to use + + Exec { path => ['/bin', '/usr/bin', '/usr/local/bin', '/sbin', '/usr/sbin'] } + + # copy archive + file { "/usr/local/src/$releasename.zip" : + ensure => file, + source => "puppet:///modules/elfinder/$releasename.zip", + } + + +} \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/elfinder/secgen_metadata.xml b/modules/vulnerabilities/unix/http/elfinder/secgen_metadata.xml new file mode 100644 index 000000000..92d7918bc --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/secgen_metadata.xml @@ -0,0 +1,96 @@ + + +elFinder Archive Command Injection + Sofia Markusfeld + BSD/MIT + + elFinder versions below 2.1.59 are vulnerable to a command injection vulnerability via the archive functionality. + + + remote + in_the_wild + + remote + linux_apache_php + low + + + port + strings_to_leak + strings_to_preleak + leaked_filenames + storage_directory + + + 80 + + + + + + + + + + + + + + + + + + CVE-2021-32682 + + + + 9 + AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H + https://github.com/rapid7/metasploit-framework/blob/master//modules/exploits/linux/http/elfinder_archive_cmd_injection.rb + https://www.rapid7.com/db/modules/exploit/linux/http/elfinder_archive_cmd_injection/ + elFinder + BSD/MIT + + + + exploit/linux/http/elfinder_archive_cmd_injection + + Visit the webapp in a browser at: ip/elfinder + + + + + + + + + .*apache.*compatible.* + + + + .*php.*compatible.* + + + + + + + + server-side misconfiguration and vulnerable components + FILE UPLOAD VULNERABILITY + + + EXPLOITATION + EXPLOITATION FRAMEWORKS + + + CVEs and CWEs + + + PENETRATION TESTING - SOFTWARE TOOLS + PENETRATION TESTING - ACTIVE PENETRATION + + + \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/elfinder/templates/connector.minimal.php b/modules/vulnerabilities/unix/http/elfinder/templates/connector.minimal.php new file mode 100644 index 000000000..567e83956 --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/templates/connector.minimal.php @@ -0,0 +1,209 @@ + true, + 'roots' => array( + // Main volume + array( + 'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED) + 'path' => '../files/', // path to files (REQUIRED) + 'URL' => dirname($_SERVER['PHP_SELF']) . '/../files/', // URL to files (REQUIRED) + 'trashHash' => 't1_Lw', // elFinder's hash of trash folder + 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too + 'uploadDeny' => array('all'), // All Mimetypes not allowed to upload + 'uploadAllow' => array('image/x-ms-bmp', 'image/gif', 'image/jpeg', 'image/png', 'image/x-icon', 'text/plain'), // Mimetype `image` and `text/plain` allowed to upload + 'uploadOrder' => array('deny', 'allow'), // allowed Mimetype `image` and `text/plain` only + 'accessControl' => 'access' // disable and hide dot starting files (OPTIONAL) + ), + //editable volume + array( + 'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED) + 'path' => '../files/public/', // path to files (REQUIRED) + 'URL' => dirname($_SERVER['PHP_SELF']) . '/../files/public', // URL to files (REQUIRED) + 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too + 'uploadDeny' => array('all'), // All Mimetypes not allowed to upload + 'uploadAllow' => array('image/x-ms-bmp', 'image/gif', 'image/jpeg', 'image/png', 'image/x-icon', 'text/plain'), // Mimetype `image` and `text/plain` allowed to upload + 'uploadOrder' => array('deny', 'allow') // allowed Mimetype `image` and `text/plain` only + ), + //hidden + array( + 'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED) + 'path' => '../files/.hidden/', // path to files (REQUIRED) + 'URL' => dirname($_SERVER['PHP_SELF']) . '/../files/.hidden', // URL to files (REQUIRED) + 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too + 'uploadDeny' => array('all'), // All Mimetypes not allowed to upload + 'uploadAllow' => array('image/x-ms-bmp', 'image/gif', 'image/jpeg', 'image/png', 'image/x-icon', 'text/plain'), // Mimetype `image` and `text/plain` allowed to upload + 'uploadOrder' => array('deny', 'allow'), // allowed Mimetype `image` and `text/plain` only + 'attributes' => array( + array( + 'pattern' => '', + 'read' => false, + 'write' => false, + 'locked' => true, + 'hidden' => true, + ) + ), + ), + // Trash volume + array( + 'id' => '1', + 'driver' => 'Trash', + 'path' => '../files/.trash/', + 'tmbURL' => dirname($_SERVER['PHP_SELF']) . '/../files/.trash/.tmb/', + 'winHashFix' => DIRECTORY_SEPARATOR !== '/', // to make hash same to Linux one on windows too + 'uploadDeny' => array('all'), // Recomend the same settings as the original volume that uses the trash + 'uploadAllow' => array('image/x-ms-bmp', 'image/gif', 'image/jpeg', 'image/png', 'image/x-icon', 'text/plain'), // Same as above + 'uploadOrder' => array('deny', 'allow'), // Same as above + 'accessControl' => 'access', // Same as above + ), + ) +); + +// run elFinder +$connector = new elFinderConnector(new elFinder($opts)); +$connector->run(); + diff --git a/modules/vulnerabilities/unix/http/elfinder/templates/elFinder.options.js b/modules/vulnerabilities/unix/http/elfinder/templates/elFinder.options.js new file mode 100644 index 000000000..e0b995ef6 --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/templates/elFinder.options.js @@ -0,0 +1,1355 @@ +/** + * Default elFinder config + * + * @type Object + * @autor Dmitry (dio) Levashov + */ +elFinder.prototype._options = { + /** + * URLs of 3rd party libraries CDN + * + * @type Object + */ + cdns : { + // for editor etc. + ace : null, // or your location + codemirror : null, // or your location + ckeditor : null, // or your location + tinymce : null, // or your location + simplemde : null, // or your location + // for quicklook etc. + hls : null, // or your location + dash : null, // or your location + prettify : null, // or your location + psd : null, // or your location + rar : null, // or your location + zlibUnzip : null, // or your location + zlibGunzip : null // or your location + }, + + /** + * Connector url. Required! + * + * @type String + */ + url : '', + + /** + * Ajax request type. + * + * @type String + * @default "get" + */ + requestType : 'get', + + /** + * Use CORS to connector url + * + * @type Boolean|null true|false|null(Auto detect) + */ + cors : null, + + /** + * Array of header names to return parrot out in HTTP headers received from the server + * + * @type Array + */ + parrotHeaders : [], + + /** + * Maximum number of concurrent connections on request + * + * @type Number + * @default 3 + */ + requestMaxConn : 3, + + /** + * Transport to send request to backend. + * Required for future extensions using websockets/webdav etc. + * Must be an object with "send" method. + * transport.send must return $.Deferred() object + * + * @type Object + * @default null + * @example + * transport : { + * init : function(elfinderInstance) { }, + * send : function(options) { + * var dfrd = $.Deferred(); + * // connect to backend ... + * return dfrd; + * }, + * upload : function(data) { + * var dfrd = $.Deferred(); + * // upload ... + * return dfrd; + * } + * + * } + **/ + transport : {}, + + /** + * URL to upload file to. + * If not set - connector URL will be used + * + * @type String + * @default '' + */ + urlUpload : '', + + /** + * Allow to drag and drop to upload files + * + * @type Boolean|String + * @default 'auto' + */ + dragUploadAllow : 'auto', + + /** + * Confirmation dialog displayed at the time of overwriting upload + * + * @type Boolean + * @default true + */ + overwriteUploadConfirm : true, + + /** + * Max size of chunked data of file upload + * + * @type Number + * @default 10485760(10MB) + */ + uploadMaxChunkSize : 10485760, + + /** + * Regular expression of file name to exclude when uploading folder + * + * @type Object + * @default { win: /^(?:desktop\.ini|thumbs\.db)$/i, mac: /^\.ds_store$/i } + */ + folderUploadExclude : { + win: /^(?:desktop\.ini|thumbs\.db)$/i, + mac: /^\.ds_store$/i + }, + + /** + * Timeout for upload using iframe + * + * @type Number + * @default 0 - no timeout + */ + iframeTimeout : 0, + + /** + * Data to append to all requests and to upload files + * + * @type Object + * @default {} + */ + customData : {}, + + /** + * Event listeners to bind on elFinder init + * + * @type Object + * @default {} + */ + handlers : {}, + + /** + * Any custom headers to send across every ajax request + * + * @type Object + * @default {} + */ + customHeaders : {}, + + /** + * Any custom xhrFields to send across every ajax request + * + * @type Object + * @default {} + */ + xhrFields : {}, + + /** + * Interface language + * + * @type String + * @default "en" + */ + lang : 'en', + + /** + * Base URL of elfFinder library starting from Manager HTML + * Auto detect when empty value + * + * @type String + * @default "" + */ + baseUrl : '', + + /** + * Base URL of i18n js files + * baseUrl + "js/i18n/" when empty value + * + * @type String + * @default "" + */ + i18nBaseUrl : '', + + /** + * Base URL of worker js files + * baseUrl + "js/worker/" when empty value + * + * @type String + * @default "" + */ + workerBaseUrl : '', + + /** + * Auto load required CSS + * `false` to disable this function or + * CSS URL Array to load additional CSS files + * + * @type Boolean|Array + * @default true + */ + cssAutoLoad : true, + + /** + * Theme to load + * {"themeid" : "Theme CSS URL"} or + * {"themeid" : "Theme manifesto.json URL"} or + * Theme manifesto.json Object + * { + * "themeid" : { + * "name":"Theme Name", + * "cssurls":"Theme CSS URL", + * "author":"Author Name", + * "email":"Author Email", + * "license":"License", + * "link":"Web Site URL", + * "image":"Screen Shot URL", + * "description":"Description" + * } + * } + * + * @type Object + */ + themes : {}, + + /** + * Theme id to initial theme + * + * @type String|Null + */ + theme : null, + + /** + * Maximum value of error dialog open at the same time + * + * @type Number + */ + maxErrorDialogs : 5, + + /** + * Additional css class for filemanager node. + * + * @type String + */ + cssClass : '', + + /** + * Active commands list. '*' means all of the commands that have been load. + * If some required commands will be missed here, elFinder will add its + * + * @type Array + */ + commands : ['*'], + // Available commands list + //commands : [ + // 'archive', 'back', 'chmod', 'colwidth', 'copy', 'cut', 'download', 'duplicate', 'edit', 'extract', + // 'forward', 'fullscreen', 'getfile', 'help', 'home', 'info', 'mkdir', 'mkfile', 'netmount', 'netunmount', + // 'open', 'opendir', 'paste', 'places', 'quicklook', 'reload', 'rename', 'resize', 'restore', 'rm', + // 'search', 'sort', 'up', 'upload', 'view', 'zipdl' + //], + + /** + * Commands options. + * + * @type Object + **/ + commandsOptions : { + // // configure shortcuts of any command + // // add `shortcuts` property into each command + // any_command_name : { + // shortcuts : [] // for disable this command's shortcuts + // }, + // any_command_name : { + // shortcuts : function(fm, shortcuts) { + // // for add `CTRL + E` for this command action + // shortcuts[0]['pattern'] += ' ctrl+e'; + // return shortcuts; + // } + // }, + // any_command_name : { + // shortcuts : function(fm, shortcuts) { + // // for full customize of this command's shortcuts + // return [ { pattern: 'ctrl+e ctrl+down numpad_enter' + (fm.OS != 'mac' && ' enter') } ]; + // } + // }, + // "getfile" command options. + getfile : { + onlyURL : false, + // allow to return multiple files info + multiple : false, + // allow to return filers info + folders : false, + // action after callback (""/"close"/"destroy") + oncomplete : '', + // action when callback is fail (""/"close"/"destroy") + onerror : '', + // get path before callback call + getPath : true, + // get image sizes before callback call + getImgSize : false + }, + open : { + // HTTP method that request to the connector when item URL is not valid URL. + // If you set to "get" will be displayed request parameter in the browser's location field + // so if you want to conceal its parameters should be given "post". + // Nevertheless, please specify "get" if you want to enable the partial request by HTTP Range header. + method : 'post', + // Where to open into : 'window'(default), 'tab' or 'tabs' + // 'tabs' opens in each tabs + into : 'window', + // Default command list of action when select file + // String value that is 'Command Name' or 'Command Name1/CommandName2...' + selectAction : 'open' + }, + opennew : { + // URL of to open elFinder manager + // Default '' : Origin URL + url : '', + // Use search query of origin URL + useOriginQuery : true + }, + // "upload" command options. + upload : { + // Open elFinder upload dialog: 'button' OR Open system OS upload dialog: 'uploadbutton' + ui : 'button' + }, + // "download" command options. + download : { + // max request to download files when zipdl disabled + maxRequests : 10, + // minimum count of files to use zipdl + minFilesZipdl : 2 + }, + // "quicklook" command options. + quicklook : { + autoplay : true, + width : 450, + height : 300, + // ControlsList of HTML5 audio/video preview + // see https://googlechrome.github.io/samples/media/controlslist.html + mediaControlsList : '', // e.g. 'nodownload nofullscreen noremoteplayback' + // Show toolbar of PDF preview (with tag) + pdfToolbar : true, + // Maximum lines to preview at initial + textInitialLines : 100, + // Maximum lines to preview by prettify + prettifyMaxLines : 300, + // quicklook window must be contained in elFinder node on window open (true|false) + contain : false, + // preview window into NavDock (0 : undocked | 1 : docked(show) | 2 : docked(hide)) + docked : 0, + // Docked preview height ('auto' or Number of pixel) 'auto' is setted to the Navbar width + dockHeight : 'auto', + // media auto play when docked + dockAutoplay : false, + // Google Maps API key (Require Maps JavaScript API) + googleMapsApiKey : '', + // Google Maps API Options + googleMapsOpts : { + maps : {}, + kml : { + suppressInfoWindows : false, + preserveViewport : false + } + }, + // ViewerJS (https://viewerjs.org/) Options + // To enable this you need to place ViewerJS on the same server as elFinder and specify that URL in `url`. + viewerjs : { + url: '', // Example '/ViewerJS/index.html' + mimes: ['application/pdf', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'], + pdfNative: true // Use Native PDF Viewer first + }, + // MIME types to CAD-Files and 3D-Models online viewer on sharecad.org + // Example ['image/vnd.dwg', 'image/vnd.dxf', 'model/vnd.dwf', 'application/vnd.hp-hpgl', 'application/plt', 'application/step', 'model/iges', 'application/vnd.ms-pki.stl', 'application/sat', 'image/cgm', 'application/x-msmetafile'] + sharecadMimes : [], + // MIME types to use Google Docs online viewer + // Example ['application/pdf', 'image/tiff', 'application/vnd.ms-office', 'application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/postscript', 'application/rtf'] + googleDocsMimes : [], + // MIME types to use Microsoft Office Online viewer + // Example ['application/msword', 'application/vnd.ms-word', 'application/vnd.ms-excel', 'application/vnd.ms-powerpoint', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/vnd.openxmlformats-officedocument.presentationml.presentation', 'application/vnd.oasis.opendocument.text', 'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.presentation'] + // These MIME types override "googleDocsMimes" + officeOnlineMimes : [], + // File size threshold when using the dim command for obtain the image size necessary to image preview + getDimThreshold : '200K', + // Max filesize to show filenames of the zip/tar/gzip/bzip file + unzipMaxSize : '50M', + // MIME-Type regular expression that does not check empty files + mimeRegexNotEmptyCheck : /^application\/vnd\.google-apps\./ + }, + // "edit" command options. + edit : { + // dialog width, integer(px) or integer+'%' (example: 650, '80%' ...) + dialogWidth : void(0), + // dialog height, integer(px) or integer+'%' (example: 650, '80%' ...) + dialogHeight : void(0), + // list of allowed mimetypes to edit of text files + // if empty - any text files can be edited + mimes : [], + // MIME-types to unselected as default of "File types to enable with "New file"" in preferences + mkfileHideMimes : [], + // MIME-types of text file to make empty file + makeTextMimes : ['text/plain', 'text/css', 'text/html'], + // Use the editor stored in the browser + // This value allowd overwrite with user preferences + useStoredEditor : false, + // Open the maximized editor window + // This value allowd overwrite with user preferences + editorMaximized : false, + // edit files in wysisyg's + editors : [ + // { + // /** + // * editor info + // * @type Object + // */ + // info : { name: 'Editor Name' }, + // /** + // * files mimetypes allowed to edit in current wysisyg + // * @type Array + // */ + // mimes : ['text/html'], + // /** + // * HTML element for editing area (optional for text editor) + // * @type String + // */ + // html : '', + // /** + // * Initialize editing area node (optional for text editor) + // * + // * @param String dialog DOM id + // * @param Object target file object + // * @param String target file content (text or Data URI Scheme(binary file)) + // * @param Object elFinder instance + // * @type Function + // */ + // init : function(id, file, content, fm) { + // $(this).attr('id', id + '-text').val(content); + // }, + // /** + // * Get edited contents (optional for text editor) + // * @type Function + // */ + // getContent : function() { + // return $(this).val(); + // }, + // /** + // * Called when "edit" dialog loaded. + // * Place to init wysisyg. + // * Can return wysisyg instance + // * + // * @param DOMElement textarea node + // * @return Object editor instance|jQuery.Deferred(return instance on resolve()) + // */ + // load : function(textarea) { }, + // /** + // * Called before "edit" dialog closed. + // * Place to destroy wysisyg instance. + // * + // * @param DOMElement textarea node + // * @param Object wysisyg instance (if was returned by "load" callback) + // * @return void + // */ + // close : function(textarea, instance) { }, + // /** + // * Called before file content send to backend. + // * Place to update textarea content if needed. + // * + // * @param DOMElement textarea node + // * @param Object wysisyg instance (if was returned by "load" callback) + // * @return void + // */ + // save : function(textarea, instance) {}, + // /** + // * Called after load() or save(). + // * Set focus to wysisyg editor. + // * + // * @param DOMElement textarea node + // * @param Object wysisyg instance (if was returned by "load" callback) + // * @return void + // */ + // focus : function(textarea, instance) {} + // /** + // * Called after dialog resized.. + // * + // * @param DOMElement textarea node + // * @param Object wysisyg instance (if was returned by "load" callback) + // * @param Object resize event object + // * @param Object data object + // * @return void + // */ + // resize : function(textarea, instance, event, data) {} + // + // } + ], + // Character encodings of select box + encodings : ['Big5', 'Big5-HKSCS', 'Cp437', 'Cp737', 'Cp775', 'Cp850', 'Cp852', 'Cp855', 'Cp857', 'Cp858', + 'Cp862', 'Cp866', 'Cp874', 'EUC-CN', 'EUC-JP', 'EUC-KR', 'GB18030', 'ISO-2022-CN', 'ISO-2022-JP', 'ISO-2022-KR', + 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5', 'ISO-8859-6', 'ISO-8859-7', + 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-13', 'ISO-8859-15', 'KOI8-R', 'KOI8-U', 'Shift-JIS', + 'Windows-1250', 'Windows-1251', 'Windows-1252', 'Windows-1253', 'Windows-1254', 'Windows-1257'], + // options for extra editors + extraOptions : { + // upload command options + uploadOpts : {}, + // TUI Image Editor's options + tuiImgEditOpts : { + // Path prefix of icon-a.svg, icon-b.svg, icon-c.svg and icon-d.svg in the Theme. + // `iconsPath` MUST follow the same origin policy. + iconsPath : void(0), // default is "./img/tui-" + // Theme object + theme : {} + }, + // Pixo image editor constructor options - https://pixoeditor.com/ + // Require 'apikey' to enable it + pixo: { + apikey: '' + }, + // Browsing manager URL for CKEditor, TinyMCE + // Uses self location with the empty value or not defined. + //managerUrl : 'elfinder.html' + managerUrl : null, + // CKEditor editor options + ckeditor: {}, + // CKEditor 5 editor options + ckeditor5: { + // builds mode - 'classic', 'inline', 'balloon', 'balloon-block' or 'decoupled-document' + mode: 'decoupled-document' + }, + // TinyMCE editor options + tinymce : {}, + // Setting for Online-Convert.com + onlineConvert : { + maxSize : 100, // (MB) Max 100MB on free account + showLink : true // It must be enabled with free account + } + } + }, + fullscreen : { + // fullscreen mode 'screen'(When the browser supports it) or 'window' + mode: 'screen' // 'screen' or 'window' + }, + search : { + // Incremental search from the current view + incsearch : { + enable : true, // is enable true or false + minlen : 1, // minimum number of characters + wait : 500 // wait milliseconds + }, + // Additional search types + searchTypes : { + // "SearchMime" is implemented in default + SearchMime : { // The key is search type that send to the connector + name : 'btnMime', // Button text to be processed in i18n() + title : 'searchMime',// Button title to be processed in i18n() + incsearch : 'mime' // Incremental search target filed name of the file object + // Or Callable function + /* incsearch function example + function(queryObject, cwdHashes, elFinderInstance) { + var q = queryObject.val; + var regex = queryObject.regex; + var matchedHashes = $.grep(cwdHashes, function(hash) { + var file = elFinderInstance.file(hash); + return (file && file.mime && file.mime.match(regex))? true : false; + }); + return matchedHashes; + } + */ + } + } + }, + // "info" command options. + info : { + // If the URL of the Directory is null, + // it is assumed that the link destination is a URL to open the folder in elFinder + nullUrlDirLinkSelf : true, + // Information items to be hidden by default + // These name are 'size', 'aliasfor', 'path', 'link', 'dim', 'modify', 'perms', 'locked', 'owner', 'group', 'perm' and your custom info items label + hideItems : [], + // Maximum file size (byte) to get file contents hash (md5, sha256 ...) + showHashMaxsize : 104857600, // 100 MB + // Array of hash algorisms to show on info dialog + // These name are 'md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'sha3-224', 'sha3-256', 'sha3-384', 'sha3-512', 'shake128' and 'shake256' + showHashAlgorisms : ['md5', 'sha256'], + // Options for fm.getContentsHashes() + showHashOpts : { + shake128len : 256, + shake256len : 512 + }, + custom : { + // /** + // * Example of custom info `desc` + // */ + // desc : { + // /** + // * Lable (require) + // * It is filtered by the `fm.i18n()` + // * + // * @type String + // */ + // label : 'Description', + // + // /** + // * Template (require) + // * `{id}` is replaced in dialog.id + // * + // * @type String + // */ + // tpl : '
', + // + // /** + // * Restricts to mimetypes (optional) + // * Exact match or category match + // * + // * @type Array + // */ + // mimes : ['text', 'image/jpeg', 'directory'], + // + // /** + // * Restricts to file.hash (optional) + // * + // * @ type Regex + // */ + // hashRegex : /^l\d+_/, + // + // /** + // * Request that asks for the description and sets the field (optional) + // * + // * @type Function + // */ + // action : function(file, fm, dialog) { + // fm.request({ + // data : { cmd : 'desc', target: file.hash }, + // preventDefault: true, + // }) + // .fail(function() { + // dialog.find('div.elfinder-info-desc').html(fm.i18n('unknown')); + // }) + // .done(function(data) { + // dialog.find('div.elfinder-info-desc').html(data.desc); + // }); + // } + // } + } + }, + mkdir: { + // Enable automatic switching function ["New Folder" / "Into New Folder"] of toolbar buttton + intoNewFolderToolbtn: false + }, + resize: { + // defalt status of snap to 8px grid of the jpeg image ("enable" or "disable") + grid8px : 'disable', + // Preset size array [width, height] + presetSize : [[320, 240], [400, 400], [640, 480], [800,600]], + // File size (bytes) threshold when using the `dim` command for obtain the image size necessary to start editing + getDimThreshold : 204800, + // File size (bytes) to request to get substitute image (400px) with the `dim` command + dimSubImgSize : 307200 + }, + rm: { + // If trash is valid, items moves immediately to the trash holder without confirm. + quickTrash : true, + // Maximum wait seconds when checking the number of items to into the trash + infoCheckWait : 10, + // Maximum number of items that can be placed into the Trash at one time + toTrashMaxItems : 1000 + }, + paste : { + moveConfirm : false // Display confirmation dialog when moving items + }, + help : { + // Tabs to show + view : ['about', 'shortcuts', 'help', 'integrations', 'debug'], + // HTML source URL of the heip tab + helpSource : '' + }, + preference : { + // dialog width + width: 600, + // dialog height + height: 400, + // tabs setting see preference.js : build() + categories: null, + // preference setting see preference.js : build() + prefs: null, + // language setting see preference.js : build() + langs: null, + // Command list of action when select file + // Array value are 'Command Name' or 'Command Name1/CommandName2...' + selectActions : ['open', 'edit/download', 'resize/edit/download', 'download', 'quicklook'] + } + }, + + /** + * Disabled commands relationship + * + * @type Object + */ + disabledCmdsRels : { + 'get' : ['edit'], + 'rm' : ['cut', 'empty'], + 'file&url=' : ['download', 'zipdl'] // file command and volume options url is empty + }, + + /** + * Callback for prepare boot up + * + * - The this object in the function is an elFinder node + * - The first parameter is elFinder Instance + * - The second parameter is an object of other parameters + * For now it can use `dfrdsBeforeBootup` Array + * + * @type Function + * @default null + * @return void + */ + bootCallback : null, + + /** + * Callback for "getfile" commands. + * Required to use elFinder with WYSIWYG editors etc.. + * + * @type Function + * @default null (command not active) + */ + getFileCallback : null, + + /** + * Default directory view. icons/list + * + * @type String + * @default "icons" + */ + defaultView : 'icons', + + /** + * Hash of default directory path to open + * + * NOTE: This setting will be disabled if the target folder is specified in location.hash. + * + * If you want to find the hash in Javascript + * can be obtained with the following code. (In the case of a standard hashing method) + * + * var volumeId = 'l1_'; // volume id + * var path = 'path/to/target'; // without root path + * //var path = 'path\\to\\target'; // use \ on windows server + * var hash = volumeId + btoa(path).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '.').replace(/\.+$/, ''); + * + * @type String + * @default "" + */ + startPathHash : '', + + /** + * Emit a sound when a file is deleted + * Sounds are in sounds/ folder + * + * @type Boolean + * @default true + */ + sound : true, + + /** + * UI plugins to load. + * Current dir ui and dialogs loads always. + * Here set not required plugins as folders tree/toolbar/statusbar etc. + * + * @type Array + * @default ['toolbar', 'places', 'tree', 'path', 'stat'] + * @full ['toolbar', 'places', 'tree', 'path', 'stat'] + */ + ui : ['toolbar', 'places', 'tree', 'path', 'stat'], + + /** + * Some UI plugins options. + * @type Object + */ + uiOptions : { + // toolbar configuration + toolbar : [ + ['home', 'back', 'forward', 'up', 'reload'], + ['netmount'], + ['mkdir', 'mkfile', 'upload'], + ['open', 'download', 'getfile'], + ['undo', 'redo'], + ['copy', 'cut', 'paste', 'rm', 'empty', 'hide'], + ['duplicate', 'rename', 'edit', 'resize', 'chmod'], + ['selectall', 'selectnone', 'selectinvert'], + ['quicklook', 'info'], + ['extract', 'archive'], + ['search'], + ['view', 'sort'], + ['preference', 'help'], + ['fullscreen'] + ], + // toolbar extra options + toolbarExtra : { + // also displays the text label on the button (true / false / 'none') + displayTextLabel: false, + // Exclude `displayTextLabel` setting UA type + labelExcludeUA: ['Mobile'], + // auto hide on initial open + autoHideUA: ['Mobile'], + // Initial setting value of hide button in toolbar setting + defaultHides: ['home', 'reload'], + // show Preference button ('none', 'auto', 'always') + // If you do not include 'preference' in the context menu you should specify 'auto' or 'always' + showPreferenceButton: 'none', + // show Preference button into contextmenu of the toolbar (true / false) + preferenceInContextmenu: true + }, + // directories tree options + tree : { + // set path info to attr title + attrTitle : true, + // expand current root on init + openRootOnLoad : true, + // expand current work directory on open + openCwdOnOpen : true, + // auto loading current directory parents and do expand their node. + syncTree : true, + // Maximum number of display of each child trees + // The tree of directories with children exceeding this number will be split + subTreeMax : 100, + // Numbar of max connctions of subdirs request + subdirsMaxConn : 2, + // Number of max simultaneous processing directory of subdirs + subdirsAtOnce : 5, + // Durations of each animations + durations : { + slideUpDown : 'fast', + autoScroll : 'fast' + } + // , + // /** + // * Add CSS class name to navbar directories (optional) + // * see: https://github.com/Studio-42/elFinder/pull/1061, + // * https://github.com/Studio-42/elFinder/issues/1231 + // * + // * @type Function + // */ + // getClass: function(dir) { + // // e.g. This adds the directory's name (lowercase) with prefix as a CSS class + // return 'elfinder-tree-' + dir.name.replace(/[ "]/g, '').toLowerCase(); + // } + }, + // navbar options + navbar : { + minWidth : 150, + maxWidth : 500, + // auto hide on initial open + autoHideUA: [] // e.g. ['Mobile'] + }, + navdock : { + // disabled navdock ui + disabled : false, + // percentage of initial maximum height to work zone + initMaxHeight : '50%', + // percentage of maximum height to work zone by user resize action + maxHeight : '90%' + }, + cwd : { + // display parent folder with ".." name :) + oldSchool : false, + + // fm.UA types array to show item select checkboxes e.g. ['All'] or ['Mobile'] etc. default: ['Touch'] + showSelectCheckboxUA : ['Touch'], + + // Enable dragout by dragstart with Alt key or Shift key + metakeyDragout : true, + + // file info columns displayed + listView : { + // name is always displayed, cols are ordered + // e.g. ['perm', 'date', 'size', 'kind', 'owner', 'group', 'mode'] + // mode: 'mode'(by `fileModeStyle` setting), 'modestr'(rwxr-xr-x) , 'modeoct'(755), 'modeboth'(rwxr-xr-x (755)) + // 'owner', 'group' and 'mode', It's necessary set volume driver option "statOwner" to `true` + // for custom, characters that can be used in the name is `a-z0-9_` + columns : ['perm', 'date', 'size', 'kind'], + // override this if you want custom columns name + // example + // columnsCustomName : { + // date : 'Last modification', + // kind : 'Mime type' + // } + columnsCustomName : {}, + // fixed list header colmun + fixedHeader : true + }, + + // icons view setting + iconsView : { + // default icon size (0-3 in default CSS (cwd.css - elfinder-cwd-size[number])) + size: 0, + // number of maximum size (3 in default CSS (cwd.css - elfinder-cwd-size[number])) + // uses in preference.js + sizeMax: 3, + // Name of each size + sizeNames: { + 0: 'viewSmall', + 1: 'viewMedium', + 2: 'viewLarge', + 3: 'viewExtraLarge' + } + }, + + // /** + // * Add CSS class name to cwd directories (optional) + // * see: https://github.com/Studio-42/elFinder/pull/1061, + // * https://github.com/Studio-42/elFinder/issues/1231 + // * + // * @type Function + // */ + // , + // getClass: function(file) { + // // e.g. This adds the directory's name (lowercase) with prefix as a CSS class + // return 'elfinder-cwd-' + file.name.replace(/[ "]/g, '').toLowerCase(); + //} + + //, + //// Template placeholders replacement rules for overwrite. see ui/cwd.js replacement + //replacement : { + // tooltip : function(f, fm) { + // var list = fm.viewType == 'list', // current view type + // query = fm.searchStatus.state == 2, // is in search results + // title = fm.formatDate(f) + (f.size > 0 ? ' ('+fm.formatSize(f.size)+')' : ''), + // info = ''; + // if (query && f.path) { + // info = fm.escape(f.path.replace(/\/[^\/]*$/, '')); + // } else { + // info = f.tooltip? fm.escape(f.tooltip).replace(/\r/g, ' ') : ''; + // } + // if (list) { + // info += (info? ' ' : '') + fm.escape(f.name); + // } + // return info? info + ' ' + title : title; + // } + //} + }, + path : { + // Move to head of work zone without UI navbar + toWorkzoneWithoutNavbar : true + }, + dialog : { + // Enable to auto focusing on mouse over in the target form element + focusOnMouseOver : true + }, + toast : { + animate : { + // to show + showMethod: 'fadeIn', // fadeIn, slideDown, and show are built into jQuery + showDuration: 300, // milliseconds + showEasing: 'swing', // swing and linear are built into jQuery + // timeout to hide + timeOut: 3000, + // to hide + hideMethod: 'fadeOut', + hideDuration: 1500, + hideEasing: 'swing' + } + } + }, + + /** + * MIME regex of send HTTP header "Content-Disposition: inline" or allow preview in quicklook + * This option will overwrite by connector configuration + * + * @type String + * @default '^(?:(?:image|video|audio)|text/plain|application/pdf$)' + * @example + * dispInlineRegex : '.', // is allow inline of all of MIME types + * dispInlineRegex : '$^', // is not allow inline of all of MIME types + */ + dispInlineRegex : '^(?:(?:image|video|audio)|application/(?:x-mpegURL|dash\+xml)|(?:text/plain|application/pdf)$)', + + /** + * Display only required files by types + * + * @type Array + * @default [] + * @example + * onlyMimes : ["image"] - display all images + * onlyMimes : ["image/png", "application/x-shockwave-flash"] - display png and flash + */ + onlyMimes : [], + + /** + * Custom files sort rules. + * All default rules (name/size/kind/date/perm/mode/owner/group) set in elFinder._sortRules + * + * @type {Object} + * @example + * sortRules : { + * name : function(file1, file2) { return file1.name.toLowerCase().localeCompare(file2.name.toLowerCase()); } + * } + */ + sortRules : {}, + + /** + * Default sort type. + * + * @type {String} + */ + sortType : 'name', + + /** + * Default sort order. + * + * @type {String} + * @default "asc" + */ + sortOrder : 'asc', + + /** + * Display folders first? + * + * @type {Boolean} + * @default true + */ + sortStickFolders : true, + + /** + * Sort also applies to the treeview (null: disable this feature) + * + * @type Boolean|null + * @default false + */ + sortAlsoTreeview : false, + + /** + * If true - elFinder will formating dates itself, + * otherwise - backend date will be used. + * + * @type Boolean + */ + clientFormatDate : true, + + /** + * Show UTC dates. + * Required set clientFormatDate to true + * + * @type Boolean + */ + UTCDate : false, + + /** + * File modification datetime format. + * Value from selected language data is used by default. + * Set format here to overwrite it. + * + * @type String + * @default "" + */ + dateFormat : '', + + /** + * File modification datetime format in form "Yesterday 12:23:01". + * Value from selected language data is used by default. + * Set format here to overwrite it. + * Use $1 for "Today"/"Yesterday" placeholder + * + * @type String + * @default "" + * @example "$1 H:m:i" + */ + fancyDateFormat : '', + + /** + * Style of file mode at cwd-list, info dialog + * 'string' (ex. rwxr-xr-x) or 'octal' (ex. 755) or 'both' (ex. rwxr-xr-x (755)) + * + * @type {String} + * @default 'both' + */ + fileModeStyle : 'both', + + /** + * elFinder width + * + * @type String|Number + * @default "auto" + */ + width : 'auto', + + /** + * elFinder node height + * Number: pixcel or String: Number + "%" + * + * @type Number | String + * @default 400 + */ + height : 400, + + /** + * Do not resize the elFinder node itself on resize parent node + * Specify `true` when controlling with CSS such as Flexbox + * + * @type Boolean + * @default false + */ + noResizeBySelf : false, + + /** + * Base node object or selector + * Element which is the reference of the height percentage + * + * @type Object|String + * @default null | $(window) (if height is percentage) + **/ + heightBase : null, + + /** + * Make elFinder resizable if jquery ui resizable available + * + * @type Boolean + * @default true + */ + resizable : true, + + /** + * Timeout before open notifications dialogs + * + * @type Number + * @default 500 (.5 sec) + */ + notifyDelay : 500, + + /** + * Position CSS, Width of notifications dialogs + * + * @type Object + * @default {position: {}, width : null} - Apply CSS definition + * position: CSS object | null (null: position center & middle) + */ + notifyDialog : {position : {}, width : null, canClose : false, hiddens : ['open']}, + + /** + * Dialog contained in the elFinder node + * + * @type Boolean + * @default false + */ + dialogContained : false, + + /** + * Allow shortcuts + * + * @type Boolean + * @default true + */ + allowShortcuts : true, + + /** + * Remeber last opened dir to open it after reload or in next session + * + * @type Boolean + * @default true + */ + rememberLastDir : true, + + /** + * Clear historys(elFinder) on reload(not browser) function + * Historys was cleared on Reload function on elFinder 2.0 (value is true) + * + * @type Boolean + * @default false + */ + reloadClearHistory : false, + + /** + * Use browser native history with supported browsers + * + * @type Boolean + * @default true + */ + useBrowserHistory : true, + + /** + * Lazy load config. + * How many files display at once? + * + * @type Number + * @default 50 + */ + showFiles : 50, + + /** + * Lazy load config. + * Distance in px to cwd bottom edge to start display files + * + * @type Number + * @default 50 + */ + showThreshold : 50, + + /** + * Additional rule to valid new file name. + * By default not allowed empty names or '..' + * This setting does not have a sense of security. + * + * @type false|RegExp|function + * @default false + * @example + * disable names with spaces: + * validName : /^[^\s]+$/, + */ + validName : false, + + /** + * Additional rule to filtering for browsing. + * This setting does not have a sense of security. + * + * The object `this` is elFinder instance object in this function + * + * @type false|RegExp|function + * @default false + * @example + * show only png and jpg files: + * fileFilter : /.*\.(png|jpg)$/i, + * + * show only image type files: + * fileFilter : function(file) { return file.mime && file.mime.match(/^image\//i); }, + */ + fileFilter : false, + + /** + * Backup name suffix. + * + * @type String + * @default "~" + */ + backupSuffix : '~', + + /** + * Sync content interval + * + * @type Number + * @default 0 (do not sync) + */ + sync : 0, + + /** + * Sync start on load if sync value >= 1000 + * + * @type Bool + * @default true + */ + syncStart : true, + + /** + * How many thumbnails create in one request + * + * @type Number + * @default 5 + */ + loadTmbs : 5, + + /** + * Cookie option for browsersdoes not suppot localStorage + * + * @type Object + */ + cookie : { + expires : 30, + domain : '', + path : '/', + secure : false, + samesite : 'lax' + }, + + /** + * Contextmenu config + * + * @type Object + */ + contextmenu : { + // navbarfolder menu + navbar : ['open', 'opennew', 'download', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', '|', 'archive', '|', 'places', 'info', 'chmod', 'netunmount'], + // current directory menu + cwd : ['undo', 'redo', '|', 'back', 'up', 'reload', '|', 'upload', 'mkdir', 'mkfile', 'paste', '|', 'empty', 'hide', '|', 'view', 'sort', 'selectall', 'colwidth', '|', 'places', 'info', 'chmod', 'netunmount', '|', 'fullscreen', '|', 'preference'], + // current directory file menu + files : ['getfile', '|' ,'open', 'opennew', 'download', 'opendir', 'quicklook', '|', 'upload', 'mkdir', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', 'empty', 'hide', '|', 'rename', 'edit', 'resize', '|', 'archive', 'extract', '|', 'selectall', 'selectinvert', '|', 'places', 'info', 'chmod', 'netunmount'] + }, + + /** + * elFinder node enable always + * This value will set to `true` if has elFinder node only + * + * @type Bool + * @default false + */ + enableAlways : false, + + /** + * elFinder node enable by mouse over + * + * @type Bool + * @default true + */ + enableByMouseOver : true, + + /** + * Show window close confirm dialog + * Value is which state to show + * 'hasNotifyDialog', 'editingFile', 'hasSelectedItem' and 'hasClipboardData' + * + * @type Array + * @default ['hasNotifyDialog', 'editingFile'] + */ + windowCloseConfirm : ['hasNotifyDialog', 'editingFile'], + + /** + * Function decoding 'raw' string converted to unicode + * It is used instead of fm.decodeRawString(str) + * + * @type Null|Function + */ + rawStringDecoder : typeof Encoding === 'object' && $.isFunction(Encoding.convert)? function(str) { + return Encoding.convert(str, { + to: 'UNICODE', + type: 'string' + }); + } : null, + + /** + * Debug config + * + * @type Array|String('auto')|Boolean(true|false) + */ + debug : ['error', 'warning', 'event-destroy'], + + /** + * Show toast messeges of backend warning (if found data `debug.backendErrors` in backend results) + * + * @type Boolean|Object (toast options) + */ + toastBackendWarn : true +}; \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/elfinder/templates/elfinder.html b/modules/vulnerabilities/unix/http/elfinder/templates/elfinder.html new file mode 100644 index 000000000..470386f76 --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/templates/elfinder.html @@ -0,0 +1,73 @@ + + + + + + + elFinder 2.1.x source version with PHP connector + + + + + + + + + +
+ + + diff --git a/modules/vulnerabilities/unix/http/elfinder/templates/encoding.min.js b/modules/vulnerabilities/unix/http/elfinder/templates/encoding.min.js new file mode 100644 index 000000000..59118672d --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/templates/encoding.min.js @@ -0,0 +1,8 @@ +/*! + * encoding-japanese v2.0.0 - Convert or detect character encoding in JavaScript + * Copyright (c) 2012 polygonplanet + * https://github.com/polygonplanet/encoding.js + * @license MIT + */ +!function(n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Encoding=n()}(function(){return function r(o,i,l){function f(e,n){if(!i[e]){if(!o[e]){var t="function"==typeof require&&require;if(!n&&t)return t(e,!0);if(u)return u(e,!0);throw(n=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",n}t=i[e]={exports:{}},o[e][0].call(t.exports,function(n){return f(o[e][1][n]||n)},t,t.exports,r,o,i,l)}return i[e].exports}for(var u="function"==typeof require&&require,n=0;n>6&3,o=128|63&t,i[i.length]=239,i[i.length]=255&r,i[i.length]=255&o):128<=e?(r=e<<1,(t=n[++l])<159?(r-=r<319?225:97,t-=126>16&255),i[i.length]=o>>8&255,i[i.length]=255&o)):i[i.length]=255&n[l];return i}function o(n){a.init_JIS_TO_UTF8_TABLE();for(var e,t,r,o,i,l=[],f=0,u=n&&n.length;f>6&3,r=128|63&r,l[l.length]=239,l[l.length]=255&t,l[l.length]=255&r):143===e?(t=n[++f]-128,r=n[++f]-128,void 0===(i=c.JISX0212_TO_UTF8_TABLE[o=(t<<8)+r])?l[l.length]=a.FALLBACK_CHARACTER:(i<65535||(l[l.length]=i>>16&255),l[l.length]=i>>8&255,l[l.length]=255&i)):128<=e?(o=(e-128<<8)+(n[++f]-128),void 0===(i=c.JIS_TO_UTF8_TABLE[o])?l[l.length]=a.FALLBACK_CHARACTER:(i<65535||(l[l.length]=i>>16&255),l[l.length]=i>>8&255,l[l.length]=255&i)):l[l.length]=255&n[f];return l}function i(n){a.init_JIS_TO_UTF8_TABLE();for(var e,t,r,o,i=[],l=0,f=0,u=n&&n.length;f>16&255),i[i.length]=o>>8&255,i[i.length]=255&o)):2===l?(e=188|(t=n[f]+64)>>6&3,t=128|63&t,i[i.length]=239,i[i.length]=255&e,i[i.length]=255&t):3===l?(r=(n[f]<<8)+n[++f],void 0===(o=c.JISX0212_TO_UTF8_TABLE[r])?i[i.length]=a.FALLBACK_CHARACTER:(o<65535||(i[i.length]=o>>16&255),i[i.length]=o>>8&255,i[i.length]=255&o)):i[i.length]=255&n[f]}return i}function l(n,e){for(var t,r,o,i=[],l=0,f=n&&n.length,u=e&&e.fallback;l>8)?((o>>=1)<47?o+=113:o-=79,t+=95>=1)<=47?o+=112:o-=80,t+=126),i[i.length]=255&o,i[i.length]=255&t)):i[i.length]=255&n[l];return i}function f(n,e){for(var t,r,o,i=[],l=0,f=n&&n.length,u=e&&e.fallback;l>8)-128&255,i[i.length]=(255&o)-128&255):(65536>8)-128&255,i[i.length]=(255&o)-128&255))):i[i.length]=255&n[l];return i}function h(n,e){for(var t,r,o,i=[],l=0,f=n&&n.length,u=0,g=e&&e.fallback,h=[27,40,66,27,36,66,27,40,73,27,36,40,68];u>8&255,i[i.length]=255&o):(65536>8&255),i[i.length]=255&o));return 0!==l&&(i[i.length]=h[0],i[i.length]=h[1],i[i.length]=h[2]),i}function T(n){for(var e,t,r=[],o=0,i=n&&n.length;o>6&31,r[r.length]=128|63&e):e<65536?(r[r.length]=224|e>>12&15,r[r.length]=128|e>>6&63,r[r.length]=128|63&e):e<2097152&&(r[r.length]=240|e>>18&15,r[r.length]=128|e>>12&63,r[r.length]=128|e>>6&63,r[r.length]=128|63&e);return r}function s(n,e){for(var t,r,o,i=[],l=0,f=n&&n.length,u=e&&e.ignoreSurrogatePair;l>4)&&t<=7?o=r:12==t||13==t?o=(31&r)<<6|63&n[l++]:14==t?o=(15&r)<<12|(63&n[l++])<<6|63&n[l++]:15==t&&(o=(7&r)<<18|(63&n[l++])<<12|(63&n[l++])<<6|63&n[l++]),o<=65535||u?i[i.length]=o:(i[i.length]=55296+((o-=65536)>>10),i[i.length]=o%1024+56320);return i}function A(n,e){var t;if(e&&e.bom){var r,e=e.bom,o="B"===(e=g.isString(e)?e:"BE").charAt(0).toUpperCase()?(r=[254,255],E(n)):(r=[255,254],_(n));(t=[])[0]=r[0],t[1]=r[1];for(var i=0,l=o.length;i>8&255,t[t.length]=255&e);return t}function _(n){for(var e,t=[],r=0,o=n&&n.length;r>8&255);return t}function U(n){var e,t,r=[],o=0,i=n&&n.length;for(2<=i&&(254===n[0]&&255===n[1]||255===n[0]&&254===n[1])&&(o=2);o>=1)<47?e+=113:e-=79,t+=95>=1)<=47?e+=112:e-=80,t+=126),r[r.length]=255&e,r[r.length]=255&t):r[r.length]=2===o?n[i]+128&255:3===o?a.FALLBACK_CHARACTER:255&n[i]}return r},t.JISToEUCJP=function(n){for(var e=[],t=0,r=n&&n.length,o=0;o>=1)+(e<111?49:113),t-=223>=1)+(e<=111?48:112),t-=2),r[r.length]=255&e,r[r.length]=255&t):r[r.length]=142===e?255&n[++i]:255&e;return r},t.SJISToUTF8=r,t.EUCJPToUTF8=o,t.JISToUTF8=i,t.UTF8ToSJIS=l,t.UTF8ToEUCJP=f,t.UTF8ToJIS=h,t.UNICODEToUTF8=T,t.UTF8ToUNICODE=s,t.UNICODEToUTF16=A,t.UNICODEToUTF16BE=E,t.UNICODEToUTF16LE=_,t.UTF16BEToUNICODE=U,t.UTF16LEToUNICODE=S,t.UTF16ToUNICODE=F,t.UTF16ToUTF16BE=function(n){for(var e,t,r=[],o=0,i=n&&n.length,l=!1,f=!0;o>4&15],r[r.length]=t[15&e]))}return u.codeToString_fast(r)},urlDecode:function(n){for(var e,t=[],r=0,o=n&&n.length;rh.APPLY_BUFFER_SIZE&&(h.APPLY_BUFFER_SIZE_OK=!0),t}catch(n){h.APPLY_BUFFER_SIZE_OK=!1}}return s(n)}function s(n){for(var e,t="",r=n&&n.length,o=0;oh.APPLY_BUFFER_SIZE&&(h.APPLY_BUFFER_SIZE_OK=!0);continue}catch(n){h.APPLY_BUFFER_SIZE_OK=!1}return A(n)}t+=i.apply(null,e)}return t}function A(n){for(var e="",t=n&&n.length,r=0;r>2],l[l.length]=E[(3&e)<<4],l[l.length]=U,l[l.length]=U;break}if(t=n[i++],i==o){l[l.length]=E[e>>2],l[l.length]=E[(3&e)<<4|(240&t)>>4],l[l.length]=E[(15&t)<<2],l[l.length]=U;break}r=n[i++],l[l.length]=E[e>>2],l[l.length]=E[(3&e)<<4|(240&t)>>4],l[l.length]=E[(15&t)<<2|(192&r)>>6],l[l.length]=E[63&r]}return T(l)},t.base64decode=function(n){for(var e,t,r,o,i=n&&n.length,l=0,f=[];l>4;do{if(61==(r=255&n.charCodeAt(l++)))return f}while(r=_[r],l>2;do{if(61==(o=255&n.charCodeAt(l++)))return f}while(o=_[o],l .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-draggable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable { + position: relative; +} +.ui-resizable-handle { + position: absolute; + font-size: 0.1px; + display: block; + -ms-touch-action: none; + touch-action: none; +} +.ui-resizable-disabled .ui-resizable-handle, +.ui-resizable-autohide .ui-resizable-handle { + display: none; +} +.ui-resizable-n { + cursor: n-resize; + height: 7px; + width: 100%; + top: -5px; + left: 0; +} +.ui-resizable-s { + cursor: s-resize; + height: 7px; + width: 100%; + bottom: -5px; + left: 0; +} +.ui-resizable-e { + cursor: e-resize; + width: 7px; + right: -5px; + top: 0; + height: 100%; +} +.ui-resizable-w { + cursor: w-resize; + width: 7px; + left: -5px; + top: 0; + height: 100%; +} +.ui-resizable-se { + cursor: se-resize; + width: 12px; + height: 12px; + right: 1px; + bottom: 1px; +} +.ui-resizable-sw { + cursor: sw-resize; + width: 9px; + height: 9px; + left: -5px; + bottom: -5px; +} +.ui-resizable-nw { + cursor: nw-resize; + width: 9px; + height: 9px; + left: -5px; + top: -5px; +} +.ui-resizable-ne { + cursor: ne-resize; + width: 9px; + height: 9px; + right: -5px; + top: -5px; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); + height: 100%; + -ms-filter: "alpha(opacity=25)"; /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectable { + -ms-touch-action: none; + touch-action: none; +} +.ui-selectable-helper { + position: absolute; + z-index: 100; + border: 1px dotted black; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: pointer; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-sortable-handle { + -ms-touch-action: none; + touch-action: none; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Arial,Helvetica,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #c5c5c5; +} +.ui-widget-content { + border: 1px solid #dddddd; + background: #ffffff; + color: #333333; +} +.ui-widget-content a { + color: #333333; +} +.ui-widget-header { + border: 1px solid #dddddd; + background: #e9e9e9; + color: #333333; + font-weight: bold; +} +.ui-widget-header a { + color: #333333; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #c5c5c5; + background: #f6f6f6; + font-weight: normal; + color: #454545; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #454545; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #cccccc; + background: #ededed; + font-weight: normal; + color: #2b2b2b; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #2b2b2b; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #003eff; + background: #007fff; + font-weight: normal; + color: #ffffff; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #003eff; + background-color: #ffffff; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #ffffff; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #dad55e; + background: #fffa90; + color: #777620; +} +.ui-state-checked { + border: 1px solid #dad55e; + background: #fffa90; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #777620; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #f1a899; + background: #fddfdf; + color: #5f3f3f; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #5f3f3f; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #5f3f3f; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + -ms-filter: "alpha(opacity=70)"; /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + -ms-filter: "alpha(opacity=35)"; /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + -ms-filter: "alpha(opacity=35)"; /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_444444_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_555555_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_ffffff_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_777620_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cc0000_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_777777_256x240.png"); +} + +/* positioning */ +/* Three classes needed to override `.ui-button:hover .ui-icon` */ +.ui-icon-blank.ui-icon-blank.ui-icon-blank { + background-image: none; +} +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 3px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 3px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .003; + -ms-filter: Alpha(Opacity=.3); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: 0px 0px 5px #666666; + box-shadow: 0px 0px 5px #666666; +} diff --git a/modules/vulnerabilities/unix/http/elfinder/templates/jquery-ui.min.js b/modules/vulnerabilities/unix/http/elfinder/templates/jquery-ui.min.js new file mode 100644 index 000000000..50b036f4d --- /dev/null +++ b/modules/vulnerabilities/unix/http/elfinder/templates/jquery-ui.min.js @@ -0,0 +1,6 @@ +/*! jQuery UI - v1.13.2 - 2022-07-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(V){"use strict";V.ui=V.ui||{};V.ui.version="1.13.2";var n,i=0,a=Array.prototype.hasOwnProperty,r=Array.prototype.slice;V.cleanData=(n=V.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=V._data(i,"events"))&&e.remove&&V(i).triggerHandler("remove");n(t)}),V.widget=function(t,i,e){var s,n,o,a={},r=t.split(".")[0],l=r+"-"+(t=t.split(".")[1]);return e||(e=i,i=V.Widget),Array.isArray(e)&&(e=V.extend.apply(null,[{}].concat(e))),V.expr.pseudos[l.toLowerCase()]=function(t){return!!V.data(t,l)},V[r]=V[r]||{},s=V[r][t],n=V[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},V.extend(n,s,{version:e.version,_proto:V.extend({},e),_childConstructors:[]}),(o=new i).options=V.widget.extend({},o.options),V.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=V.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(V.each(s._childConstructors,function(t,e){var i=e.prototype;V.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),V.widget.bridge(t,n),n},V.widget.extend=function(t){for(var e,i,s=r.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=V(e||this.defaultElement||this)[0],this.element=V(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=V(),this.hoverable=V(),this.focusable=V(),this.classesElementLookup={},e!==this&&(V.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=V(e.style?e.ownerDocument:e.document||e),this.window=V(this.document[0].defaultView||this.document[0].parentWindow)),this.options=V.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:V.noop,_create:V.noop,_init:V.noop,destroy:function(){var i=this;this._destroy(),V.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:V.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return V.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=V.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return V("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(k(s),k(n))?o.important="horizontal":o.important="vertical",u.using.call(this,t,o)}),a.offset(V.extend(h,{using:t}))})},V.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,a=s-o,r=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0")[0],w=d.each;function P(t){return null==t?t+"":"object"==typeof t?p[e.call(t)]||"object":typeof t}function M(t,e,i){var s=v[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:Math.min(s.max,Math.max(0,t)))}function S(s){var n=m(),o=n._rgba=[];return s=s.toLowerCase(),w(g,function(t,e){var i=e.re.exec(s),i=i&&e.parse(i),e=e.space||"rgba";if(i)return i=n[e](i),n[_[e].cache]=i[_[e].cache],o=n._rgba=i._rgba,!1}),o.length?("0,0,0,0"===o.join()&&d.extend(o,B.transparent),n):B[s]}function H(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}y.style.cssText="background-color:rgba(1,1,1,.5)",b.rgba=-1o.mod/2?s+=o.mod:s-n>o.mod/2&&(s-=o.mod)),l[i]=M((n-s)*a+s,e)))}),this[e](l)},blend:function(t){if(1===this._rgba[3])return this;var e=this._rgba.slice(),i=e.pop(),s=m(t)._rgba;return m(d.map(e,function(t,e){return(1-i)*s[e]+i*t}))},toRgbaString:function(){var t="rgba(",e=d.map(this._rgba,function(t,e){return null!=t?t:2").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:i.width(),height:i.height()},n=document.activeElement;try{n.id}catch(t){n=document.body}return i.wrap(t),i[0]!==n&&!V.contains(i[0],n)||V(n).trigger("focus"),t=i.parent(),"static"===i.css("position")?(t.css({position:"relative"}),i.css({position:"relative"})):(V.extend(s,{position:i.css("position"),zIndex:i.css("z-index")}),V.each(["top","left","bottom","right"],function(t,e){s[e]=i.css(e),isNaN(parseInt(s[e],10))&&(s[e]="auto")}),i.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),i.css(e),t.css(s).show()},removeWrapper:function(t){var e=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),t[0]!==e&&!V.contains(t[0],e)||V(e).trigger("focus")),t}}),V.extend(V.effects,{version:"1.13.2",define:function(t,e,i){return i||(i=e,e="effect"),V.effects.effect[t]=i,V.effects.effect[t].mode=e,i},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,e="vertical"!==i?(e||100)/100:1;return{height:t.height()*e,width:t.width()*s,outerHeight:t.outerHeight()*e,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();1").insertAfter(t).css({display:/^(inline|ruby)/.test(t.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:t.css("marginTop"),marginBottom:t.css("marginBottom"),marginLeft:t.css("marginLeft"),marginRight:t.css("marginRight"),float:t.css("float")}).outerWidth(t.outerWidth()).outerHeight(t.outerHeight()).addClass("ui-effects-placeholder"),t.data(j+"placeholder",e)),t.css({position:i,left:s.left,top:s.top}),e},removePlaceholder:function(t){var e=j+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(t){V.effects.restoreStyle(t),V.effects.removePlaceholder(t)},setTransition:function(s,t,n,o){return o=o||{},V.each(t,function(t,e){var i=s.cssUnit(e);0");l.appendTo("body").addClass(t.className).css({top:s.top-a,left:s.left-r,height:i.innerHeight(),width:i.innerWidth(),position:n?"fixed":"absolute"}).animate(o,t.duration,t.easing,function(){l.remove(),"function"==typeof e&&e()})}}),V.fx.step.clip=function(t){t.clipInit||(t.start=V(t.elem).cssClip(),"string"==typeof t.end&&(t.end=G(t.end,t.elem)),t.clipInit=!0),V(t.elem).cssClip({top:t.pos*(t.end.top-t.start.top)+t.start.top,right:t.pos*(t.end.right-t.start.right)+t.start.right,bottom:t.pos*(t.end.bottom-t.start.bottom)+t.start.bottom,left:t.pos*(t.end.left-t.start.left)+t.start.left})},Y={},V.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,t){Y[t]=function(t){return Math.pow(t,e+2)}}),V.extend(Y,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),V.each(Y,function(t,e){V.easing["easeIn"+t]=e,V.easing["easeOut"+t]=function(t){return 1-e(1-t)},V.easing["easeInOut"+t]=function(t){return t<.5?e(2*t)/2:1-e(-2*t+2)/2}});y=V.effects,V.effects.define("blind","hide",function(t,e){var i={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=V(this),n=t.direction||"up",o=s.cssClip(),a={clip:V.extend({},o)},r=V.effects.createPlaceholder(s);a.clip[i[n][0]]=a.clip[i[n][1]],"show"===t.mode&&(s.cssClip(a.clip),r&&r.css(V.effects.clipToBox(a)),a.clip=o),r&&r.animate(V.effects.clipToBox(a),t.duration,t.easing),s.animate(a,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("bounce",function(t,e){var i,s,n=V(this),o=t.mode,a="hide"===o,r="show"===o,l=t.direction||"up",h=t.distance,c=t.times||5,o=2*c+(r||a?1:0),u=t.duration/o,d=t.easing,p="up"===l||"down"===l?"top":"left",f="up"===l||"left"===l,g=0,t=n.queue().length;for(V.effects.createPlaceholder(n),l=n.css(p),h=h||n["top"==p?"outerHeight":"outerWidth"]()/3,r&&((s={opacity:1})[p]=l,n.css("opacity",0).css(p,f?2*-h:2*h).animate(s,u,d)),a&&(h/=Math.pow(2,c-1)),(s={})[p]=l;g").css({position:"absolute",visibility:"visible",left:-s*p,top:-i*f}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:p,height:f,left:n+(u?a*p:0),top:o+(u?r*f:0),opacity:u?0:1}).animate({left:n+(u?0:a*p),top:o+(u?0:r*f),opacity:u?1:0},t.duration||500,t.easing,m)}),V.effects.define("fade","toggle",function(t,e){var i="show"===t.mode;V(this).css("opacity",i?0:1).animate({opacity:i?1:0},{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("fold","hide",function(e,t){var i=V(this),s=e.mode,n="show"===s,o="hide"===s,a=e.size||15,r=/([0-9]+)%/.exec(a),l=!!e.horizFirst?["right","bottom"]:["bottom","right"],h=e.duration/2,c=V.effects.createPlaceholder(i),u=i.cssClip(),d={clip:V.extend({},u)},p={clip:V.extend({},u)},f=[u[l[0]],u[l[1]]],s=i.queue().length;r&&(a=parseInt(r[1],10)/100*f[o?0:1]),d.clip[l[0]]=a,p.clip[l[0]]=a,p.clip[l[1]]=0,n&&(i.cssClip(p.clip),c&&c.css(V.effects.clipToBox(p)),p.clip=u),i.queue(function(t){c&&c.animate(V.effects.clipToBox(d),h,e.easing).animate(V.effects.clipToBox(p),h,e.easing),t()}).animate(d,h,e.easing).animate(p,h,e.easing).queue(t),V.effects.unshift(i,s,4)}),V.effects.define("highlight","show",function(t,e){var i=V(this),s={backgroundColor:i.css("backgroundColor")};"hide"===t.mode&&(s.opacity=0),V.effects.saveStyle(i),i.css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(s,{queue:!1,duration:t.duration,easing:t.easing,complete:e})}),V.effects.define("size",function(s,e){var n,i=V(this),t=["fontSize"],o=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],a=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],r=s.mode,l="effect"!==r,h=s.scale||"both",c=s.origin||["middle","center"],u=i.css("position"),d=i.position(),p=V.effects.scaledDimensions(i),f=s.from||p,g=s.to||V.effects.scaledDimensions(i,0);V.effects.createPlaceholder(i),"show"===r&&(r=f,f=g,g=r),n={from:{y:f.height/p.height,x:f.width/p.width},to:{y:g.height/p.height,x:g.width/p.width}},"box"!==h&&"both"!==h||(n.from.y!==n.to.y&&(f=V.effects.setTransition(i,o,n.from.y,f),g=V.effects.setTransition(i,o,n.to.y,g)),n.from.x!==n.to.x&&(f=V.effects.setTransition(i,a,n.from.x,f),g=V.effects.setTransition(i,a,n.to.x,g))),"content"!==h&&"both"!==h||n.from.y!==n.to.y&&(f=V.effects.setTransition(i,t,n.from.y,f),g=V.effects.setTransition(i,t,n.to.y,g)),c&&(c=V.effects.getBaseline(c,p),f.top=(p.outerHeight-f.outerHeight)*c.y+d.top,f.left=(p.outerWidth-f.outerWidth)*c.x+d.left,g.top=(p.outerHeight-g.outerHeight)*c.y+d.top,g.left=(p.outerWidth-g.outerWidth)*c.x+d.left),delete f.outerHeight,delete f.outerWidth,i.css(f),"content"!==h&&"both"!==h||(o=o.concat(["marginTop","marginBottom"]).concat(t),a=a.concat(["marginLeft","marginRight"]),i.find("*[width]").each(function(){var t=V(this),e=V.effects.scaledDimensions(t),i={height:e.height*n.from.y,width:e.width*n.from.x,outerHeight:e.outerHeight*n.from.y,outerWidth:e.outerWidth*n.from.x},e={height:e.height*n.to.y,width:e.width*n.to.x,outerHeight:e.height*n.to.y,outerWidth:e.width*n.to.x};n.from.y!==n.to.y&&(i=V.effects.setTransition(t,o,n.from.y,i),e=V.effects.setTransition(t,o,n.to.y,e)),n.from.x!==n.to.x&&(i=V.effects.setTransition(t,a,n.from.x,i),e=V.effects.setTransition(t,a,n.to.x,e)),l&&V.effects.saveStyle(t),t.css(i),t.animate(e,s.duration,s.easing,function(){l&&V.effects.restoreStyle(t)})})),i.animate(g,{queue:!1,duration:s.duration,easing:s.easing,complete:function(){var t=i.offset();0===g.opacity&&i.css("opacity",f.opacity),l||(i.css("position","static"===u?"relative":u).offset(t),V.effects.saveStyle(i)),e()}})}),V.effects.define("scale",function(t,e){var i=V(this),s=t.mode,s=parseInt(t.percent,10)||(0===parseInt(t.percent,10)||"effect"!==s?0:100),s=V.extend(!0,{from:V.effects.scaledDimensions(i),to:V.effects.scaledDimensions(i,s,t.direction||"both"),origin:t.origin||["middle","center"]},t);t.fade&&(s.from.opacity=1,s.to.opacity=0),V.effects.effect.size.call(this,s,e)}),V.effects.define("puff","hide",function(t,e){t=V.extend(!0,{},t,{fade:!0,percent:parseInt(t.percent,10)||150});V.effects.effect.scale.call(this,t,e)}),V.effects.define("pulsate","show",function(t,e){var i=V(this),s=t.mode,n="show"===s,o=2*(t.times||5)+(n||"hide"===s?1:0),a=t.duration/o,r=0,l=1,s=i.queue().length;for(!n&&i.is(":visible")||(i.css("opacity",0).show(),r=1);l li > :first-child").add(t.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=V(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),t.collapsible||!1!==t.active&&null!=t.active||(t.active=0),this._processPanels(),t.active<0&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():V()}},_createIcons:function(){var t,e=this.options.icons;e&&(t=V(""),this._addClass(t,"ui-accordion-header-icon","ui-icon "+e.header),t.prependTo(this.headers),t=this.active.children(".ui-accordion-header-icon"),this._removeClass(t,e.header)._addClass(t,null,e.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var e=V.ui.keyCode,i=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case e.RIGHT:case e.DOWN:n=this.headers[(s+1)%i];break;case e.LEFT:case e.UP:n=this.headers[(s-1+i)%i];break;case e.SPACE:case e.ENTER:this._eventHandler(t);break;case e.HOME:n=this.headers[0];break;case e.END:n=this.headers[i-1]}n&&(V(t.target).attr("tabIndex",-1),V(n).attr("tabIndex",0),V(n).trigger("focus"),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===V.ui.keyCode.UP&&t.ctrlKey&&V(t.currentTarget).prev().trigger("focus")},refresh:function(){var t=this.options;this._processPanels(),!1===t.active&&!0===t.collapsible||!this.headers.length?(t.active=!1,this.active=V()):!1===t.active?this._activate(0):this.active.length&&!V.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=V()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var i,t=this.options,e=t.heightStyle,s=this.element.parent();this.active=this._findActive(t.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var t=V(this),e=t.uniqueId().attr("id"),i=t.next(),s=i.uniqueId().attr("id");t.attr("aria-controls",s),i.attr("aria-labelledby",e)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(t.event),"fill"===e?(i=s.height(),this.element.siblings(":visible").each(function(){var t=V(this),e=t.css("position");"absolute"!==e&&"fixed"!==e&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=V(this).outerHeight(!0)}),this.headers.next().each(function(){V(this).height(Math.max(0,i-V(this).innerHeight()+V(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.headers.next().each(function(){var t=V(this).is(":visible");t||V(this).show(),i=Math.max(i,V(this).css("height","").height()),t||V(this).hide()}).height(i))},_activate:function(t){t=this._findActive(t)[0];t!==this.active[0]&&(t=t||this.active[0],this._eventHandler({target:t,currentTarget:t,preventDefault:V.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):V()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&V.each(t.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var e=this.options,i=this.active,s=V(t.currentTarget),n=s[0]===i[0],o=n&&e.collapsible,a=o?V():s.next(),r=i.next(),a={oldHeader:i,oldPanel:r,newHeader:o?V():s,newPanel:a};t.preventDefault(),n&&!e.collapsible||!1===this._trigger("beforeActivate",t,a)||(e.active=!o&&this.headers.index(s),this.active=n?V():s,this._toggle(a),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),e.icons&&(i=i.children(".ui-accordion-header-icon"),this._removeClass(i,null,e.icons.activeHeader)._addClass(i,null,e.icons.header)),n||(this._removeClass(s,"ui-accordion-header-collapsed")._addClass(s,"ui-accordion-header-active","ui-state-active"),e.icons&&(n=s.children(".ui-accordion-header-icon"),this._removeClass(n,null,e.icons.header)._addClass(n,null,e.icons.activeHeader)),this._addClass(s.next(),"ui-accordion-content-active")))},_toggle:function(t){var e=t.newPanel,i=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=e,this.prevHide=i,this.options.animate?this._animate(e,i,t):(i.hide(),e.show(),this._toggleComplete(t)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),e.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):e.length&&this.headers.filter(function(){return 0===parseInt(V(this).attr("tabIndex"),10)}).attr("tabIndex",-1),e.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,i,e){var s,n,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!i.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=V(t.target),i=V(V.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){V.contains(this.element[0],V.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=V(t.target).closest(".ui-menu-item"),i=V(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=V(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case V.ui.keyCode.PAGE_UP:this.previousPage(t);break;case V.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case V.ui.keyCode.HOME:this._move("first","first",t);break;case V.ui.keyCode.END:this._move("last","last",t);break;case V.ui.keyCode.UP:this.previous(t);break;case V.ui.keyCode.DOWN:this.next(t);break;case V.ui.keyCode.LEFT:this.collapse(t);break;case V.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case V.ui.keyCode.ENTER:case V.ui.keyCode.SPACE:this._activate(t);break;case V.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=V(this),e=t.prev(),i=V("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=V(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!V.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(V.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(V.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=V.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=V("