HTML File Directory Listing Script
HTML File Directory Listing Script
DOCTYPE html>
<html i18n-values="dir:textdirection;lang:language">
<head>
<meta charset="utf-8">
<meta name="google" value="notranslate">
<script>
function addRow(name, url, isdir,
size, size_string, date_modified, date_modified_string) {
if (name == ".")
return;
var root = [Link];
if ([Link](-1) !== "/")
root += "/";
var
var
var
var
tbody = [Link]("tbody");
row = [Link]("tr");
file_cell = [Link]("td");
link = [Link]("a");
Wrty0QLKhdZPxmgGcDo8ejn+c/6eiK9poz15Kw7Dr/vN/z6W7q++091/AQYA5mZ8GYJ9K0AAAAAASUVO
RK5CYII= ") left top no-repeat;
}
[Link] {
background : url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYA
AAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmlJREFUeNpsU0toU0EU
PfPysx/tTxuDH9SCWhUDooIbd7oRUUTMouqi2iIoCO6lceHWhegy4EJFinWjrlQUpVm0IIoFpVDEIthm
0dpikpf3ZuZ6Z94nrXhhMjM3c8895977BBHB2PznK8WPtDgyWH5q77cPH8PpdXuhpQT4ifR9u5sfJb1b
mw6VivahATDrxcRZ2njfoaMv+2j7mLDn93MPiNRMvGbL18L9IpF8h9/TN+EYkMffSiOXJ5+hkD+PdqcL
pICWHOHc2CC+LEyA/K+cKQMnlQHJX8wqYG3MAJy88Wa4OLDvEqAEOpJd0LxHIMdHBziowSwVlF8D6Qai
cK01krw/JynwcKoEwZczewroTvZirlKJs5CqQ5CG8pb57FnJUA0LYCXMX5fibd+p8LWDDemcPZbzQyjv
H+Ki1TlIciElA7ghwLKV4kRZstt2sANWRjYTAGzuP2hXZFpJ/GsxgGJ0ox1aoFWsDXyyxqCs26+ydmag
FN/rRjymJ1898bzGzmQE0HCZpmk5A0RFIv8Pn0WYPsiu6t/Rsj6PauVTwffTSzGAGZhUG2F06hEc9ibS
7OPMNp6ErYFlKavo7MkhmTqCxZ/jwzGA9Hx82H2BZSw1NTN9Gx8ycHkajU/7M+jInsDC7DiaEmo1bNl1
AMr9ASFgqVu9MCTIzoGUimXVAnnaN0PdBBDCCYbEtMk6wkpQwIG0sn0PQIUF4GsTwLSIFKNqF6DVrQq+
IWVrQDxAYQC/1SsYOI4pOxKZrfifiUSbDUisif7XlpGIPufXd/uvdvZm760M0no1FZcnrzUdjw7au3vu
/BVgAFLXeuTxhTXVAAAAAElFTkSuQmCC ") left top no-repeat;
}
html[dir=rtl] a {
background-position-x: right;
}
#listingParsingErrorBox {
border: 1px solid black;
background: #fae691;
padding: 10px;
display: none;
}
</style>
<title id="title"></title>
</head>
<body>
<div id="listingParsingErrorBox" i18n-values=".innerHTML:listingParsingErrorBoxT
ext"></div>
<span id="parentDirText" style="display:none" i18n-content="parentDirText"></spa
n>
<h1 id="header" i18n-content="header"></h1>
<table>
<thead>
<tr class="header" id="theader">
<th i18n-content="headerName" onclick="javascript:sortTable(0);"></th>
<th class="detailsColumn" i18n-content="headerSize" onclick="javascript:so
rtTable(1);"></th>
<th class="detailsColumn" i18n-content="headerDateModified" onclick="javas
cript:sortTable(2);"></th>
</tr>
</thead>
<tbody id="tbody">
</tbody>
</table>
</body>
</html>
<script>// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @fileoverview This file defines a singleton which provides access to all data
* that is available as soon as the page's resources are loaded (before DOM
* content has finished loading). This data includes both localized strings and
* any data that is important to have ready from a very early stage (e.g. things
* that must be displayed right away).
*/
/** @type {!LoadTimeData} */ var loadTimeData;
// Expose this type globally as a temporary work around until
// [Link] is fixed.
/** @constructor */
function LoadTimeData() {}
(function() {
'use strict';
[Link] = {
/**
* Sets the backing object.
*
* Note that there is no getter for |data_| to discourage abuse of the form:
*
*
var value = [Link]()['key'];
*
* @param {Object} value The de-serialized page data.
*/
set data(value) {
expect(!this.data_, 'Re-setting data.');
this.data_ = value;
},
/**
* Returns a JsEvalContext for |data_|.
* @returns {JsEvalContext}
*/
createJsEvalContext: function() {
return new JsEvalContext(this.data_);
},
/**
* @param {string} id An ID of a value that might exist.
* @return {boolean} True if |id| is a key in the dictionary.
*/
valueExists: function(id) {
return id in this.data_;
},
/**
* Fetches a value, expecting that it exists.
* @param {string} id The key that identifies the desired value.
* @return {*} The corresponding value.
*/
getValue: function(id) {
expect(this.data_, 'No data. Did you remember to include [Link]?');
var value = this.data_[id];
expect(typeof value != 'undefined', 'Could not find value for ' + id);
return value;
},
/**
* As above, but also makes sure that the value is a string.
* @param {string} id The key that identifies the desired string.
* @return {string} The corresponding string value.
*/
getString: function(id) {
var value = [Link](id);
expectIsType(id, value, 'string');
return /** @type {string} */ (value);
},
/**
* Returns a formatted localized string where $1 to $9 are replaced by the
* second to the tenth argument.
* @param {string} id The ID of the string we want.
* @param {...(string|number)} var_args The extra values to include in the
*
formatted output.
* @return {string} The formatted string.
*/
getStringF: function(id, var_args) {
var value = [Link](id);
if (!value)
return '';
var varArgs = arguments;
return [Link](/\$[$1-9]/g, function(m) {
return m == '$$' ? '$' : varArgs[m[1]];
});
},
/**
* As above, but also makes sure that the value is a boolean.
* @param {string} id The key that identifies the desired boolean.
* @return {boolean} The corresponding boolean value.
*/
getBoolean: function(id) {
var value = [Link](id);
expectIsType(id, value, 'boolean');
return /** @type {boolean} */ (value);
},
/**
* As above, but also makes sure that the value is an integer.
* @param {string} id The key that identifies the desired number.
* @return {number} The corresponding number value.
*/
getInteger: function(id) {
var value = [Link](id);
expectIsType(id, value, 'number');
expect(value == [Link](value), 'Number isn\'t integer: ' + value);
return /** @type {number} */ (value);
},
/**
* Override values in loadTimeData with the values found in |replacements|.
* @param {Object} replacements The dictionary object of keys to replace.
*/
overrideValues: function(replacements) {
expect(typeof replacements == 'object',
'Replacements must be a dictionary object.');
for (var key in replacements) {
this.data_[key] = replacements[key];
}
}
};
/**
* Checks condition, displays error message if expectation fails.
* @param {*} condition The condition to check for truthiness.
* @param {string} message The message to display if the check fails.
*/
function expect(condition, message) {
if (!condition) {
[Link]('Unexpected condition on ' + [Link] + ': ' +
message);
}
}
/**
* Checks that the given value has the given type.
* @param {string} id The id of the value (only used for error message).
* @param {*} value The value to check the type on.
* @param {string} type The type we expect |value| to be.
*/
function expectIsType(id, value, type) {
expect(typeof value == type, '[' + value + '] (' + id +
') is not a ' + type);
}
expect(!loadTimeData, 'should only include this file once');
loadTimeData = new LoadTimeData;
})();
</script><script>[Link] = {"header":"Index of LOCATION","headerDateMo
dified":"Date Modified","headerName":"Name","headerSize":"Size","language":"en",
"listingParsingErrorBoxText":"Oh, no! This server is sending data Google Chrome
can't understand. Please \u003Ca href=\"[Link]
/entry\">report a bug\u003C/a>, and include the \u003Ca href=\"LOCATION\">raw li
sting\u003C/a>.","parentDirText":"[parent directory]","textdirection":"ltr"};</s
cript><script>// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// // Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/** @typedef {Document|DocumentFragment|Element} */
var ProcessingRoot;
/**
* @fileoverview This is a simple template engine inspired by JsTemplates
* optimized for i18n.
*
* It currently supports three handlers:
*
* * i18n-content which sets the textContent of the element.
*
*
<span i18n-content="myContent"></span>
*
* * i18n-options which generates <option> elements for a <select>.
*
*
<select i18n-options="myOptionList"></select>
*
* * i18n-values is a list of attribute-value or property-value pairs.
*
Properties are prefixed with a '.' and can contain nested properties.
*
*
<span i18n-values="title:myTitle;.[Link]:fontSize"></span>
*
* This file is a copy of i18n_template.js, with minor tweaks to support using
* load_time_data.js. It should replace i18n_template.js eventually.
*/
var i18nTemplate = (function() {
/**
* This provides the handlers for the templating engine. The key is used as
* the attribute name and the value is the function that gets called for every
* single node that has this attribute.
* @type {!Object}
*/
var handlers = {
/**
* This handler sets the textContent of the element.
* @param {!HTMLElement} element The node to modify.
* @param {string} key The name of the value in |data|.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set<ProcessingRoot>} visited
*/
'i18n-content': function(element, key, data, visited) {
[Link] = [Link](key);
},
/**
* This handler adds options to a <select> element.
* @param {!HTMLElement} select The node to modify.
* @param {string} key The name of the value in |data|. It should
*
identify an array of values to initialize an <option>. Each value,
*
if a pair, represents [content, value]. Otherwise, it should be a
*
content string with no value.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set<ProcessingRoot>} visited
*/
'i18n-options': function(select, key, data, visited) {
var options = [Link](key);
[Link](function(optionData) {
var option = typeof optionData == 'string' ?
new Option(optionData) :
new Option(optionData[1], optionData[0]);
[Link](option);
});
},
/**
* This is used to set HTML attributes and DOM properties. The syntax is:
* attributename:key;
* .domProperty:key;
* .[Link]:key
* @param {!HTMLElement} element The node to modify.
* @param {string} attributeAndKeys The path of the attribute to modify
*
followed by a colon, and the name of the value in |data|.
*
Multiple attribute/key pairs may be separated by semicolons.
* @param {!LoadTimeData} data The data source to draw from.
* @param {!Set<ProcessingRoot>} visited
*/
'i18n-values': function(element, attributeAndKeys, data, visited) {
var parts = [Link](/\s/g, '').split(/;/);
[Link](function(part) {
if (!part)
return;
var attributeAndKeyPair = [Link](/^([^:]+):(.+)$/);
if (!attributeAndKeyPair)
throw new Error('malformed i18n-values: ' + attributeAndKeys);
var propName = attributeAndKeyPair[1];
var propExpr = attributeAndKeyPair[2];
var value = [Link](propExpr);
// Allow a property of the form '.[Link]' to assign a value into
// [Link].
if (propName[0] == '.') {
var path = [Link](1).split('.');
var targetObject = element;
while (targetObject && [Link] > 1) {
targetObject = targetObject[[Link]()];
}
if (targetObject) {
targetObject[path] = value;
// In case we set innerHTML (ignoring others) we need to recursively
// check the content.
if (path == 'innerHTML') {
for (var i = 0; i < [Link]; ++i) {
processWithoutCycles([Link][i], data, visited, false);
}
}
}
} else {
[Link](propName, /** @type {string} */(value));
}
});
}
};
var prefixes = [''];
// Only look through shadow DOM when it's supported. As of April 2015, iOS
// Chrome doesn't support shadow DOM.
if ([Link])
[Link]('* /deep/ ');
var attributeNames = [Link](handlers);
var selector = [Link](function(prefix) {
processed[i].setAttribute('i18n-processed', '');
}
}
}
}
/**
* Run through various [i18n-*] attributes and populate.
* @param {!Element} element
* @param {!LoadTimeData} data
* @param {!Set<ProcessingRoot>} visited
*/
function processElement(element, data, visited) {
for (var i = 0; i < [Link]; i++) {
var name = attributeNames[i];
var attribute = [Link](name);
if (attribute != null)
handlers[name](element, attribute, data, visited);
}
}
return {
process: process
};
}());
[Link](document, loadTimeData);
</script><script>start("/_2016/05/Market Analyst Professional v8.1.0.154 + Gann
and Astronomical Tool Modules, (May 2016), $3000 + $2495, ([Link])/");</sc
ript>
<script>addRow("..","..",0,0,"0 B",0,"");</script>
<script>addRow("Crack","Crack",1,0,"0 B",1463652480,"5/19/16, 3:38:00 PM");</scr
ipt>
<script>addRow("[Link]","[Link]",0,6043,"5.9 kB",1463653380,"5
/19/16, 3:53:00 PM");</script>
<script>addRow("[Link]","[Link]",0,2441598,"2.3 MB",1463547360,"5/18/1
6, 10:26:00 AM");</script>
<script>addRow("MA8LicEmu","MA8LicEmu",1,0,"0 B",1463652600,"5/19/16, 3:40:00 PM
");</script>
<script>addRow("Market Analyst Getting [Link]","Market%20Analyst%20Getting%
[Link]",0,14242038,"13.6 MB",1463548980,"5/18/16, 10:53:00 AM");</script>
<script>addRow("Screenshots","Screenshots",1,0,"0 B",1464127440,"5/25/16, 3:34:0
0 AM");</script>
<script>addRow("[Link]","[Link]",0,96770976,"92.3 MB",1463335440,"5/15/16,
11:34:00 PM");</script>