pax_global_header00006660000000000000000000000064124135442550014517gustar00rootroot0000000000000052 comment=ac94303941ffa08f13b9a73d10de5355a59f0dd2 serve-index-1.4.0/000077500000000000000000000000001241354425500137525ustar00rootroot00000000000000serve-index-1.4.0/.gitignore000066400000000000000000000000441241354425500157400ustar00rootroot00000000000000coverage node_modules npm-debug.log serve-index-1.4.0/.travis.yml000066400000000000000000000003711241354425500160640ustar00rootroot00000000000000language: node_js node_js: - "0.8" - "0.10" - "0.11" matrix: allow_failures: - node_js: "0.11" fast_finish: true script: "npm run-script test-travis" after_script: "npm install coveralls@2.10.0 && cat ./coverage/lcov.info | coveralls" serve-index-1.4.0/HISTORY.md000066400000000000000000000032401241354425500154340ustar00rootroot000000000000001.4.0 / 2014-10-03 ================== * Add `dir` argument to `filter` function * Support using tokens multiple times 1.3.1 / 2014-10-01 ================== * Fix incorrect 403 on Windows and Node.js 0.11 * deps: accepts@~1.1.1 - deps: mime-types@~2.0.2 - deps: negotiator@0.4.8 1.3.0 / 2014-09-20 ================== * Add icon for mkv files * Lookup icon by mime type for greater icon support 1.2.1 / 2014-09-05 ================== * deps: accepts@~1.1.0 * deps: debug@~2.0.0 1.2.0 / 2014-08-25 ================== * Add `debug` messages * Resolve relative paths at middleware setup 1.1.6 / 2014-08-10 ================== * Fix URL parsing * deps: parseurl@~1.3.0 1.1.5 / 2014-07-27 ================== * Fix Content-Length calculation for multi-byte file names * deps: accepts@~1.0.7 - deps: negotiator@0.4.7 1.1.4 / 2014-06-20 ================== * deps: accepts@~1.0.5 1.1.3 / 2014-06-20 ================== * deps: accepts@~1.0.4 - use `mime-types` 1.1.2 / 2014-06-19 ================== * deps: batch@0.5.1 1.1.1 / 2014-06-11 ================== * deps: accepts@1.0.3 1.1.0 / 2014-05-29 ================== * Fix content negotiation when no `Accept` header * Properly support all HTTP methods * Support vanilla node.js http servers * Treat `ENAMETOOLONG` as code 414 * Use accepts for negotiation 1.0.3 / 2014-05-20 ================== * Fix error from non-statable files in HTML view 1.0.2 / 2014-04-28 ================== * Add `stylesheet` option * deps: negotiator@0.4.3 1.0.1 / 2014-03-05 ================== * deps: negotiator@0.4.2 1.0.0 / 2014-03-05 ================== * Genesis from connect serve-index-1.4.0/LICENSE000066400000000000000000000022401241354425500147550ustar00rootroot00000000000000(The MIT License) Copyright (c) 2010 Sencha Inc. Copyright (c) 2011 LearnBoost Copyright (c) 2011 TJ Holowaychuk Copyright (c) 2014 Douglas Christopher Wilson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. serve-index-1.4.0/README.md000066400000000000000000000071311241354425500152330ustar00rootroot00000000000000# serve-index [![NPM Version][npm-image]][npm-url] [![NPM Downloads][downloads-image]][downloads-url] [![Build Status][travis-image]][travis-url] [![Test Coverage][coveralls-image]][coveralls-url] [![Gittip][gittip-image]][gittip-url] Serves pages that contain directory listings for a given path. ## Install ```sh $ npm install serve-index ``` ## API ```js var serveIndex = require('serve-index') ``` ### serveIndex(path, options) Returns middlware that serves an index of the directory in the given `path`. The `path` is based off the `req.url` value, so a `req.url` of `'/some/dir` with a `path` of `'public'` will look at `'public/some/dir'`. If you are using something like `express`, you can change the URL "base" with `app.use` (see the express example). #### Options Serve index accepts these properties in the options object. ##### filter Apply this filter function to files. Defaults to `false`. The `filter` function is called for each file, with the signature `filter(filename, index, files, dir)` where `filename` is the name of the file, `index` is the array index, `files` is the array of files and `dir` is the absolute path the file is located (and thus, the directory the listing is for). ##### hidden Display hidden (dot) files. Defaults to `false`. ##### icons Display icons. Defaults to `false`. ##### stylesheet Optional path to a CSS stylesheet. Defaults to a built-in stylesheet. ##### template Optional path to an HTML template. Defaults to a built-in template. The following tokens are replaced in templates: * `{directory}` with the name of the directory. * `{files}` with the HTML of an unordered list of file links. * `{linked-path}` with the HTML of a link to the directory. * `{style}` with the specified stylesheet and embedded images. ##### view Display mode. `tiles` and `details` are available. Defaults to `tiles`. ## Examples ### Serve directory indexes with vanilla node.js http server ```js var finalhandler = require('finalhandler') var http = require('http') var serveIndex = require('serve-index') var serveStatic = require('serve-static') // Serve directory indexes for public/ftp folder (with icons) var index = serveIndex('public/ftp', {'icons': true}) // Serve up public/ftp folder files var serve = serveStatic('public/ftp') // Create server var server = http.createServer(function onRequest(req, res){ var done = finalhandler(req, res) serve(req, res, function onNext(err) { if (err) return done(err) index(req, res, done) }) }) // Listen server.listen(3000) ``` ### Serve directory indexes with express ```js var express = require('express') var serveIndex = require('serve-index') var app = express() // Serve URLs like /ftp/thing as public/ftp/thing app.use('/ftp', serveIndex('public/ftp', {'icons': true})) app.listen() ``` ## License [MIT](LICENSE). The [Silk](http://www.famfamfam.com/lab/icons/silk/) icons are created by/copyright of [FAMFAMFAM](http://www.famfamfam.com/). [npm-image]: https://img.shields.io/npm/v/serve-index.svg?style=flat [npm-url]: https://npmjs.org/package/serve-index [travis-image]: https://img.shields.io/travis/expressjs/serve-index.svg?style=flat [travis-url]: https://travis-ci.org/expressjs/serve-index [coveralls-image]: https://img.shields.io/coveralls/expressjs/serve-index.svg?style=flat [coveralls-url]: https://coveralls.io/r/expressjs/serve-index?branch=master [downloads-image]: https://img.shields.io/npm/dm/serve-index.svg?style=flat [downloads-url]: https://npmjs.org/package/serve-index [gittip-image]: https://img.shields.io/gittip/dougwilson.svg?style=flat [gittip-url]: https://www.gittip.com/dougwilson/ serve-index-1.4.0/index.js000066400000000000000000000346121241354425500154250ustar00rootroot00000000000000 /*! * serve-index * Copyright(c) 2011 Sencha Inc. * Copyright(c) 2011 TJ Holowaychuk * Copyright(c) 2014 Douglas Christopher Wilson * MIT Licensed */ // TODO: arrow key navigation // TODO: make icons extensible /** * Module dependencies. */ var accepts = require('accepts'); var debug = require('debug')('serve-index'); var http = require('http') , fs = require('fs') , path = require('path') , normalize = path.normalize , sep = path.sep , extname = path.extname , join = path.join; var Batch = require('batch'); var mime = require('mime-types'); var parseUrl = require('parseurl'); var resolve = require('path').resolve; /*! * Icon cache. */ var cache = {}; /*! * Default template. */ var defaultTemplate = join(__dirname, 'public', 'directory.html'); /*! * Stylesheet. */ var defaultStylesheet = join(__dirname, 'public', 'style.css'); /** * Media types and the map for content negotiation. */ var mediaTypes = [ 'text/html', 'text/plain', 'application/json' ]; var mediaType = { 'text/html': 'html', 'text/plain': 'plain', 'application/json': 'json' }; /** * Serve directory listings with the given `root` path. * * See Readme.md for documentation of options. * * @param {String} path * @param {Object} options * @return {Function} middleware * @api public */ exports = module.exports = function serveIndex(root, options){ options = options || {}; // root required if (!root) throw new TypeError('serveIndex() root path required'); // resolve root to absolute and normalize root = resolve(root); root = normalize(root + sep); var hidden = options.hidden , icons = options.icons , view = options.view || 'tiles' , filter = options.filter , template = options.template || defaultTemplate , stylesheet = options.stylesheet || defaultStylesheet; return function serveIndex(req, res, next) { if (req.method !== 'GET' && req.method !== 'HEAD') { res.statusCode = 'OPTIONS' === req.method ? 200 : 405; res.setHeader('Allow', 'GET, HEAD, OPTIONS'); res.end(); return; } // parse URLs var url = parseUrl(req); var originalUrl = parseUrl.original(req); var dir = decodeURIComponent(url.pathname); var originalDir = decodeURIComponent(originalUrl.pathname); // join / normalize from root dir var path = normalize(join(root, dir)); // null byte(s), bad request if (~path.indexOf('\0')) return next(createError(400)); // malicious path if ((path + sep).substr(0, root.length) !== root) { debug('malicious path "%s"', path); return next(createError(403)); } // determine ".." display var showUp = normalize(resolve(path) + sep) !== root; // check if we have a directory debug('stat "%s"', path); fs.stat(path, function(err, stat){ if (err && err.code === 'ENOENT') { return next(); } if (err) { err.status = err.code === 'ENAMETOOLONG' ? 414 : 500; return next(err); } if (!stat.isDirectory()) return next(); // fetch files debug('readdir "%s"', path); fs.readdir(path, function(err, files){ if (err) return next(err); if (!hidden) files = removeHidden(files); if (filter) files = files.filter(function(filename, index, list) { return filter(filename, index, list, path); }); files.sort(); // content-negotiation var accept = accepts(req); var type = accept.types(mediaTypes); // not acceptable if (!type) return next(createError(406)); exports[mediaType[type]](req, res, files, next, originalDir, showUp, icons, path, view, template, stylesheet); }); }); }; }; /** * Respond with text/html. */ exports.html = function(req, res, files, next, dir, showUp, icons, path, view, template, stylesheet){ fs.readFile(template, 'utf8', function(err, str){ if (err) return next(err); fs.readFile(stylesheet, 'utf8', function(err, style){ if (err) return next(err); stat(path, files, function(err, stats){ if (err) return next(err); files = files.map(function(file, i){ return { name: file, stat: stats[i] }; }); files.sort(fileSort); if (showUp) files.unshift({ name: '..' }); str = str .replace(/\{style\}/g, style.concat(iconStyle(files, icons))) .replace(/\{files\}/g, html(files, dir, icons, view)) .replace(/\{directory\}/g, dir) .replace(/\{linked-path\}/g, htmlPath(dir)); var buf = new Buffer(str, 'utf8'); res.setHeader('Content-Type', 'text/html; charset=utf-8'); res.setHeader('Content-Length', buf.length); res.end(buf); }); }); }); }; /** * Respond with application/json. */ exports.json = function(req, res, files){ var body = JSON.stringify(files); var buf = new Buffer(body, 'utf8'); res.setHeader('Content-Type', 'application/json; charset=utf-8'); res.setHeader('Content-Length', buf.length); res.end(buf); }; /** * Respond with text/plain. */ exports.plain = function(req, res, files){ var body = files.join('\n') + '\n'; var buf = new Buffer(body, 'utf8'); res.setHeader('Content-Type', 'text/plain; charset=utf-8'); res.setHeader('Content-Length', buf.length); res.end(buf); }; /** * Generate an `Error` from the given status `code` * and optional `msg`. * * @param {Number} code * @param {String} msg * @return {Error} * @api private */ function createError(code, msg) { var err = new Error(msg || http.STATUS_CODES[code]); err.status = code; return err; }; /** * Sort function for with directories first. */ function fileSort(a, b) { return Number(b.stat && b.stat.isDirectory()) - Number(a.stat && a.stat.isDirectory()) || String(a.name).toLocaleLowerCase().localeCompare(String(b.name).toLocaleLowerCase()); } /** * Map html `dir`, returning a linked path. */ function htmlPath(dir) { var curr = []; return dir.split('/').map(function(part){ curr.push(encodeURIComponent(part)); return part ? '' + part + '' : ''; }).join(' / '); } /** * Get the icon data for the file name. */ function iconLookup(filename) { var ext = extname(filename); // try by extension if (icons[ext]) { return { className: 'icon-' + ext.substring(1), fileName: icons[ext] }; } var mimetype = mime.lookup(ext); // default if no mime type if (mimetype === false) { return { className: 'icon-default', fileName: icons.default }; } // try by mime type if (icons[mimetype]) { return { className: 'icon-' + mimetype.replace('/', '-'), fileName: icons[mimetype] }; } var suffix = mimetype.split('+')[1]; if (suffix && icons['+' + suffix]) { return { className: 'icon-' + suffix, fileName: icons['+' + suffix] }; } var type = mimetype.split('/')[0]; // try by type only if (icons[type]) { return { className: 'icon-' + type, fileName: icons[type] }; } return { className: 'icon-default', fileName: icons.default }; } /** * Load icon images, return css string. */ function iconStyle (files, useIcons) { if (!useIcons) return ''; var className; var i; var iconName; var list = []; var rules = {}; var selector; var selectors = {}; var style = ''; for (i = 0; i < files.length; i++) { var file = files[i]; var isDir = '..' == file.name || (file.stat && file.stat.isDirectory()); var icon = isDir ? { className: 'icon-directory', fileName: icons.folder } : iconLookup(file.name); var iconName = icon.fileName; selector = '#files .' + icon.className + ' .name'; if (!rules[iconName]) { rules[iconName] = 'background-image: url(data:image/png;base64,' + load(iconName) + ');' selectors[iconName] = []; list.push(iconName); } if (selectors[iconName].indexOf(selector) === -1) { selectors[iconName].push(selector); } } for (i = 0; i < list.length; i++) { iconName = list[i]; style += selectors[iconName].join(',\n') + ' {\n ' + rules[iconName] + '\n}\n'; } return style; } /** * Map html `files`, returning an html unordered list. */ function html(files, dir, useIcons, view) { return ''; } /** * Load and cache the given `icon`. * * @param {String} icon * @return {String} * @api private */ function load(icon) { if (cache[icon]) return cache[icon]; return cache[icon] = fs.readFileSync(__dirname + '/public/icons/' + icon, 'base64'); } /** * Normalizes the path separator from system separator * to URL separator, aka `/`. * * @param {String} path * @return {String} * @api private */ function normalizeSlashes(path) { return path.split(sep).join('/'); }; /** * Filter "hidden" `files`, aka files * beginning with a `.`. * * @param {Array} files * @return {Array} * @api private */ function removeHidden(files) { return files.filter(function(file){ return '.' != file[0]; }); } /** * Stat all files and return array of stat * in same order. */ function stat(dir, files, cb) { var batch = new Batch(); batch.concurrency(10); files.forEach(function(file){ batch.push(function(done){ fs.stat(join(dir, file), function(err, stat){ if (err && err.code !== 'ENOENT') return done(err); // pass ENOENT as null stat, not error done(null, stat || null); }); }); }); batch.end(cb); } /** * Icon map. */ var icons = { // base icons 'default': 'page_white.png', 'folder': 'folder.png', // generic mime type icons 'image': 'image.png', 'text': 'page_white_text.png', 'video': 'film.png', // generic mime suffix icons '+json': 'page_white_code.png', '+xml': 'page_white_code.png', '+zip': 'box.png', // specific mime type icons 'application/font-woff': 'font.png', 'application/javascript': 'page_white_code_red.png', 'application/json': 'page_white_code.png', 'application/msword': 'page_white_word.png', 'application/pdf': 'page_white_acrobat.png', 'application/postscript': 'page_white_vector.png', 'application/rtf': 'page_white_word.png', 'application/vnd.ms-excel': 'page_white_excel.png', 'application/vnd.ms-powerpoint': 'page_white_powerpoint.png', 'application/vnd.oasis.opendocument.presentation': 'page_white_powerpoint.png', 'application/vnd.oasis.opendocument.spreadsheet': 'page_white_excel.png', 'application/vnd.oasis.opendocument.text': 'page_white_word.png', 'application/x-7z-compressed': 'box.png', 'application/x-sh': 'application_xp_terminal.png', 'application/x-font-ttf': 'font.png', 'application/x-msaccess': 'page_white_database.png', 'application/x-shockwave-flash': 'page_white_flash.png', 'application/x-sql': 'page_white_database.png', 'application/x-tar': 'box.png', 'application/x-xz': 'box.png', 'application/xml': 'page_white_code.png', 'application/zip': 'box.png', 'image/svg+xml': 'page_white_vector.png', 'text/css': 'page_white_code.png', 'text/html': 'page_white_code.png', 'text/less': 'page_white_code.png', // other, extension-specific icons '.accdb': 'page_white_database.png', '.apk': 'box.png', '.app': 'application_xp.png', '.as': 'page_white_actionscript.png', '.asp': 'page_white_code.png', '.aspx': 'page_white_code.png', '.bat': 'application_xp_terminal.png', '.bz2': 'box.png', '.c': 'page_white_c.png', '.cab': 'box.png', '.cfm': 'page_white_coldfusion.png', '.clj': 'page_white_code.png', '.cc': 'page_white_cplusplus.png', '.cgi': 'application_xp_terminal.png', '.cpp': 'page_white_cplusplus.png', '.cs': 'page_white_csharp.png', '.db': 'page_white_database.png', '.dbf': 'page_white_database.png', '.deb': 'box.png', '.dll': 'page_white_gear.png', '.dmg': 'drive.png', '.docx': 'page_white_word.png', '.erb': 'page_white_ruby.png', '.exe': 'application_xp.png', '.fnt': 'font.png', '.gam': 'controller.png', '.gz': 'box.png', '.h': 'page_white_h.png', '.ini': 'page_white_gear.png', '.iso': 'cd.png', '.jar': 'box.png', '.java': 'page_white_cup.png', '.jsp': 'page_white_cup.png', '.lua': 'page_white_code.png', '.lz': 'box.png', '.lzma': 'box.png', '.m': 'page_white_code.png', '.map': 'map.png', '.msi': 'box.png', '.mv4': 'film.png', '.otf': 'font.png', '.pdb': 'page_white_database.png', '.php': 'page_white_php.png', '.pl': 'page_white_code.png', '.pkg': 'box.png', '.pptx': 'page_white_powerpoint.png', '.psd': 'page_white_picture.png', '.py': 'page_white_code.png', '.rar': 'box.png', '.rb': 'page_white_ruby.png', '.rm': 'film.png', '.rom': 'controller.png', '.rpm': 'box.png', '.sass': 'page_white_code.png', '.sav': 'controller.png', '.scss': 'page_white_code.png', '.srt': 'page_white_text.png', '.tbz2': 'box.png', '.tgz': 'box.png', '.tlz': 'box.png', '.vb': 'page_white_code.png', '.vbs': 'page_white_code.png', '.xcf': 'page_white_picture.png', '.xlsx': 'page_white_excel.png', '.yaws': 'page_white_code.png' }; serve-index-1.4.0/package.json000066400000000000000000000016441241354425500162450ustar00rootroot00000000000000{ "name": "serve-index", "description": "Serve directory listings", "version": "1.4.0", "author": "Douglas Christopher Wilson ", "license": "MIT", "repository": "expressjs/serve-index", "dependencies": { "accepts": "~1.1.1", "batch": "0.5.1", "debug": "~2.0.0", "mime-types": "~2.0.1", "parseurl": "~1.3.0" }, "devDependencies": { "istanbul": "0.3.2", "mocha": "~1.21.1", "should": "~4.0.0", "supertest": "~0.14.0" }, "files": [ "public/", "LICENSE", "HISTORY.md", "index.js" ], "engines": { "node": ">= 0.8.0" }, "scripts": { "test": "mocha --reporter spec --bail --check-leaks test/", "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" } } serve-index-1.4.0/public/000077500000000000000000000000001241354425500152305ustar00rootroot00000000000000serve-index-1.4.0/public/directory.html000066400000000000000000000042411241354425500201230ustar00rootroot00000000000000 listing directory {directory}

{linked-path}

{files}
serve-index-1.4.0/public/icons/000077500000000000000000000000001241354425500163435ustar00rootroot00000000000000serve-index-1.4.0/public/icons/application_xp.png000066400000000000000000000006521241354425500220660ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<Q -wB&)I l d.IVDM!Դ65f*FA 'ղ= #P$9,a97p 58+ɄQ\ՊQ9]}BP9lMqg&!8r@kVk3c:<$ρU+a/Q߄01IENDB`serve-index-1.4.0/public/icons/cd.png000066400000000000000000000012411241354425500174350ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<3IDAT8˅[nPԍtG2J*H\BC1` 4BLű wTEϜlZ[Gd l "J-Mu9"mٖ>/у I |O1&'`6|W"+4$K h\F¾<z!oc/.N1g*CxϤLa1IAK PIי?d)0آ& G&#q3.#l6eS}3{ ҈NKHa2cxSM2GQG.;wEo/ !^̀裰&? w WU, $,!Kr+xEC4 B*:3r#l2&$^D6F \@>ἅo oAR]$(8Vs)f@Z_Q 9 ^#R\~$.Y)ۛGy2etS*e:+wߦu .IENDB`serve-index-1.4.0/public/icons/controller.png000066400000000000000000000012321241354425500212320ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<,IDAT8˝͋Ra*Z Zh) ~`~;~P &FG*";)o: 3^x.ܗ=T p@"=tgvA|YVdk4 -Z}P(b\T*GRirL&C'ɧ +Htp821_P ߏŶHDjeƯZ-0a,<[oOs  ͦr'‹ŷ0z`>rh`l?s X,`ZqB85;gi{u: UdQ锫nRJ%R=`2@6t: d1_Z,^g$ Px\Yhr1TUHRy F wVT4Bh4zG#z{2lh)JS:rmS@0N*F"NH&fP(̕`^()0 6oOqn6|Zm0ŧIENDB`serve-index-1.4.0/public/icons/drive.png000066400000000000000000000005321241354425500201620ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(ϥ=JA^{@3o0x O  dFSeнVPI׌}`XkD #5a5ϑɓym;w+CSf5|8#Z{Y_Ԇ`%ܦ^So>1JH$sABY"Dő fEIܐH`Nٿ]?0!HgZ/6LIENDB`serve-index-1.4.0/public/icons/film.png000066400000000000000000000012151241354425500177770ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˥OhAn RK%JzQAP4 KOyd^*DQT4"RKmNZIcgotד ?v7aZ`|j8q\yR И}>9[TbۢY3CG:1AN0]efB8pA'/h|GWMa:h(⋐R.{!2I{ =p?q4Ot\"M'gS m9?hubָnlÁ1ҫ Rb=`g\9niܦ5ZFͦ7~ynHt*s)^d+Gt?`_A`Sw37Sk#`ƿ#Sk؅逅%Q~9Nf X Y5ͳASdhhJ ܻPjbKq[myzkd@lhZpwIΚbX(d>_M2hYVhrЂIENDB`serve-index-1.4.0/public/icons/folder.png000066400000000000000000000011721241354425500203250ustar00rootroot00000000000000PNG  IHDR(-SgAMA akPLTE\ڮ4ڤ5ګ6ژ5ڟ5Dhگ6ڳ6ڦ7ޔڪ6گ5ګ5ڡ6Ԕ0Orvtvښ6yzٴ4ܓ;]&Ҁ؆,Έޑ^ӅՁIi.llksl9j۶cq%iAȔhu@%Ґ ]H Bv̓ڈ_S%Ґ;69Host wEƄx ]*f"".\00CLoF]W-Hh^Y{we0Ewa8V IENDB`serve-index-1.4.0/public/icons/map.png000066400000000000000000000014441241354425500176310ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATˏuיve jWMhbċ79jz'AjD1&#cT δ3/;ƙգQ ?9%4r>@jdA]7ZQKl|R_\L?skk[vw{(Ficfi ۆODvoIr[$BqA1dcIb2Iy*983oY߳WgvŤ<7iE q%r!@0%h4_:٬HdԬyjZdBA S ˆ=cm+{ L5-#V8bDAy^Hp44^ILT&TA@w9_^ͷସ:`_F֖䚨8THyǍYî'O]y<+F1`ma5n~JצMNw^;`_bנ;q}AKn*ubڹW]ؼ\S "9J7j[mdeji:}y1]yݾ[Vvv{ҴALBCϲIȴе=͉/QL|f,+UUU!Z 8B4-DH5U%yw;^1l:?k6IENDB`serve-index-1.4.0/public/icons/page.png000066400000000000000000000011731241354425500177670ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe< IDATs>{SG3;1Ј.bc#61lIAKD"$X$ TDyUIޥwO69DBכY}o*>'o{t:& ﱋoGgpfS=3Og~jUiִe[ǫ;kҏxOT$4ls1 w}؝>``ʨ2*c*u˽=v̝* D)ke{Oy,0CB0(4;.ݓ3*J 4 PC%# 0C/$4 I2O!E6k3tGBT%`YCam)6Ӱl0C/щ*ER4\g ˲ZW7{谆$$|ṵu/ٮ+Jt(ʅt% }6q2=V}.vDžw}z᷶/ bPfvf`džY:LI@A JD(JΜ#w o^7=  BFh}RBdq\ֆX=)jCL5QB ZBP!AD6&:@ч,!dLP Z]ABP$)H ~bԜ/G&FdHВ:}soUkZq7+qj^a(d4'?/g:x#m;+ǽgvf}7->hgߞ1+qkKENݯ_4K'S5 XcZ*JJ#~0[@jӲ^~18--&;T߶řlw^~p=,+2tD] "(669]f߅I@A JD(JwɆ^߹V7=  BFh}RBd4jcS1Xe }O$hɍ#N}ྦྷ3K?}bB8L A##=}-`xU6o_ qu]ђ>郖[6༮ akrԋoZ%Wλ1G_4\::]*,/_w4E+;}V IL}oG)g$[?/`/} -%nQP`IENDB`serve-index-1.4.0/public/icons/page_edit.png000066400000000000000000000014471241354425500210000ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATOhuyw9ge&"2&A:uVt.AA]9롢H낆 Ҋ?/}_'֏ jC E#m*Ưi)LYUھ}ظxq`u#RkRJj4$! dD!iOn9C/im&N{ A DJD)u\~'ו:nһaK A I"%wyĖU־zRWO؄wRD(SHIF^5{/rYAib`=vVS"eնizu[{s^?y׳-g Dlb BDPA6[P ((AP"%Bi_^ݙ:Z4|^D㻏N3',_fGf}'rs(3Ǐl'(sw|i|0"6\ښ)kZeMYk5Kmdw+ROIENDB`serve-index-1.4.0/public/icons/page_excel.png000066400000000000000000000014611241354425500211470ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATMUU{ S# r -MRTڄK EaBD!ѢH!jM dI ecyw9}_9[,G?ȁ)v|8\|؞!w&}%1YB g.^w⊿Mw{OA b19䤮N™VQ:.xWv!9碯H("E dp36(>ԎgS5Be㏻|o~+UФںeKZUݝ齓WU%N[;?~S'S۲njvG2j|ӎ4mm-5Dl yаEwSA^nw\[ּoxhD_EBM'{_Ld`ݢ kwZ2+ 2Jn.]Mq璻M&㐲*2e5&7nzZjrGGTW?VK&y p!mo~r`@Tß_C*Rd uuzp;0V'"cfkD@@x 8Ԛ{yшˡܪowFw_w./,7_t?=S ϋ)fʊE~jήO::5I`.;þX;\fY])V.T (xg8`O­ U|v *`hwLs; k'M}9CP ^ (( 08 w\OE5 BIp>Yt@#tDBK,b+[ޅ*Ϝk"򤢭((((”4LIENDB`serve-index-1.4.0/public/icons/page_gear.png000066400000000000000000000015011241354425500207600ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATMhe~|ϗHF!E^ "<:tAt)."#{@"R+Tmn9=>`E^t!HD.XN7owtY^_amiqP " \5qCoOuLO߆r謫rJ$Dn3-_˵(K|v҂:#S'LH,X=0^4+$ȉ\%WOku}ɛO.UuT/C A]$9+:#g,̖RfmgT6ANY(DM]s A H@ы&G.XQ]:Zȡ6-J 0qի4}VeŊç ܫ՞={zj(%DA=}588ۺuLMMͫOv:)4ABS8eRrYvo+˖-޽{%‡JBI옘PU~VG)ZI.]ry5ۍa[Y /|!k֬oKfJcccҪ}v)1H\nB+]khh133… z{{UanYݱƗ:por 6=94,76)"luhW{.v FFFz}r"s/0Wjk;vUIENDB`serve-index-1.4.0/public/icons/page_go.png000066400000000000000000000014131241354425500204510ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATKVeΙGm$d7fe"EIѢUPmMv"ڹ+6.v]2»68fޞ'2Ӷw>>1J 1d+y M}xώ@d>8z77-%' 䍡'tfȞsBiѶYۿA>K3n:9?SϾ?|~@D,f)F m "P㩕lX $%(JD(Mߌ{=4|vH2 !d'% YSc-I"DJ6QJ 6R! (D(J0҄8ώn6@ڑIE"3JDh溡UJ_jMIv+Π\\}A }OR]kګ֭҅`O{hvfz灐j:}/а6w1?Gf[^߳rbĆEM\;&^3.\٣y:gZZsЋc{5ҭnc l7fZOGd|rS??p`Yκ,/`x ^{(&Orv<-Doz)"H9@HsS_]}rm aS/IENDB`serve-index-1.4.0/public/icons/page_green.png000066400000000000000000000011551241354425500211470ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT?s~~TI!!bF ,H8b1a5l NQB b`^8MA~y*޿\)(0kJiΆIH q~{СMкOgԪ(2X2s,}O>};x3o}~Wtܠ$SjbjLEMa8y޿ww>JҪ*m*u=g6=W|vjz :@B(%UZ4\1mfj"jAƚ6hT*J VZJZ $@10PHZ(} )Be  @)zcԊe 02FHd#W?9Wi!Gc{sގl6IENDB`serve-index-1.4.0/public/icons/page_key.png000066400000000000000000000014411241354425500206350ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT_swΙ2-!I(vaŅ\p"nȕ;qjf$!q眝>NYoN=0|i\ZsЉo:5c>~'k ?~K=ܷsp;,{,F4SybFoݓ^~~ЍmqCʅmy}#sthno?N#=ƙ?IENDB`serve-index-1.4.0/public/icons/page_lightning.png000066400000000000000000000015071241354425500220330ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATKhU9ߙ[&IzPR5 Ġ.Z+fƅFp!" BwݹЅp!`ml%hSm &:|3}' 'Zr;&*pȈf }붷޺xf$.~63ynH!ڝٟ[,vtf|!};dd("qbk}^zW84-Ɗd(%,D8rljrR\4l&LJ}/}ݨ^N5Xe7˛9cR`##\<赬Tv|KN/~rḲ6R >GJ8a .[&07|Y?K6F+Qtp}Χ[|U{ @_W#2Qt"`Πk!9!&p;9Bp\}ѫK $aNі$N? =;"@]0?c|5$#IENDB`serve-index-1.4.0/public/icons/page_link.png000066400000000000000000000014761241354425500210120ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT_he}o;ͣ-cZFTV$D"QWfPB$hn $`EA $DНT7e )ѝMIlsyRD/ 6vd-@ [?7Ǐ鿙wܱ"rڇsN˂JlW4u}믳'hC Jjٹ(vNϓ,ڢ(͌OigH)-2uTv[`ddDNINININI֍V-xd8y;U} PDPW$I}=,Rl!չ 5DSB $! Qe%)2))$@*@R/ "J "䌒U $B5"`}۹?x!SW[NK;|]C~14;X۬W#ֈY/mnn˗6UוVj(P"1]Ҟ]sN{ ZWu))ׯ7iK.l^o~c׮]6l`۶mnV7K6jKytuth\z5M077'bʕ+5t{jk_|v4O|ԋci .h4VZeddDĉSɩao'X^^},KF3s;ݴ(,?)n/Vkz̖0F[v`IENDB`serve-index-1.4.0/public/icons/page_paintbrush.png000066400000000000000000000014551241354425500222310ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATKeZYL ( Z).$"ZDTAD(Tavݴ215o3x9?ĝ>d%lBdUWSqڱm}OG/%% ҉v~wg/ohKkGfٯ5% +ì.] ݾb^Xuԛ/޼vX2{rr2i^ BDP%#~ v$(RJD dS]y6>?KGO̵ο,.W1޶;d"]wWEuVei-Cp-^}1[|nm{hg?67[1 ila}>:2΍鏍uivC;?Ҥ[6OD:ƹM/&}8\vN^|b:bq.k-RX$bq\7My| CgsQAT}%E$;z+ &M&j#EdLE)E&ԱjcDKCGW:.0a@f UM&kHТb(\ޞNOڷ*kNT x/?ݍp,2JQ Pwwrnܢ AQJdYZ?5I83IENDB`serve-index-1.4.0/public/icons/page_red.png000066400000000000000000000012011241354425500206110ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATs>מ*v"6iD @"DLb5Dh2HDDIY$⥪ ;ހ:dNf0`* Աrvc€P00QeTUF1鞣9Q^}NfzfyT52Ol3t5{ѽy,0CB0(4[FI jFA֒$` t"DY# !@R*̃ 0ڬ!M6AiX0C/щo"W*Ҁ |` ˲ZWw{4*% *qpk3,{Kw׍o -*5bG/k/0t_od }g ;Jow]W*?!y!!IENDB`serve-index-1.4.0/public/icons/page_refresh.png000066400000000000000000000015321241354425500215040ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATmheu?9|b*VI+R$he!A!AeSB?D-!}r$sJZf6u;<}]~ǽoJu۝X)Au|;3SyrѝuN  cL^UYR>^.>i|ĉ)DSB0Yx3S<{Zp"̒|9D@(Jy+gmsK#@N'%¿U,̘N&%x3 Ѹ1\0 ia5Y~ /0`6︯~ /mGMQT*n/\ifo" `Y &%KMWCdJg0 03\bN-gN{)nMW GX𪆙aXw3Pポl[+9'9ȹOW|TAS_q:v\O `/ #!M |4Yxi-۷ȟ!DbU; {K6-X:E"W+_!T-{! ,BW׵݋7dپִhfmwܙ+"h!E}ȓ``&19ky&w%ńevqIENDB`serve-index-1.4.0/public/icons/page_save.png000066400000000000000000000014061241354425500210040ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATMVe78bDfai*QT@h妍P;]B@hQTP6Rd%XAT(T0sxM(a6/AV]-_cgNʞ| #[/?_8s|qmibGm)%deUץOl]z^té̦m "PmYܻٶ'׵s3@I JD(J.][s} ÷h&L8)me4ZkR6DE'.X?갳a+k>+4;uʚ/~{=ov:_ >rIqԎL*2V#nt+"֜LI)IFءjMFn VnaG5^n(#e?y?Wu\%2dzjnl-[6әF:;=2?9oՑUXU/F/ˮIENDB`serve-index-1.4.0/public/icons/page_white.png000066400000000000000000000004461241354425500211710ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(u[ E&}O(@_֖9a.і?v9\ bBWҴJ/\Y+DIO)n,T(pbeF8D`ñ_9υN8s]蔊d!4i/&~b%BB *t!ЕBiU| Qd&d+3D iνs9U0Oƨq es]>G99|>BIuE  ÀT $q( &]05wLӄiHӈb\d:X`6߸TUE</)X@;mknD"3}@3GH(,˕+!::? C=!QE8/0/a fyHBؒP/HvAmn)+/ 8ĿB"nƆ@Z[)j~Uh^N3QOR6]n^SݑI1Oc c4esKxCA fw5>VD{; XL" uS 2dƻ07>,D<G6iBFYUs0uOcR dB8V(}X u WmY$Hn1) t|?>76'@XG"r9-y8]"L?y[ӿحYQIENDB`serve-index-1.4.0/public/icons/page_white_add.png000066400000000000000000000010001241354425500217640ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˕KP[8V"Apj[JS,889U`(ZRǜKSӷpr/wk`PkRYeUѣ+J^7 >,4E(R.C&A<X,I ,#P.QVJ dY$ (JKthD |dkf&6:Fk96J*Ȳ)=0t:q A#Z&r!.Bo8 ذwٛ4_q`ST»ʼn-_Z?^D(z }=~H@ a\a0m4e5eE0<#̕"&`AGya{4)l}O/!&RIENDB`serve-index-1.4.0/public/icons/page_white_c.png000066400000000000000000000011131241354425500214630ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍKK` I]t^RYU8LV7*ځʠ0^tJEQT*RIS&~S/\'+PBaTA9㣓s TUEP/OJ%b18N8DQ P5GnGXD B(_-W|@لjE\bt<(~|}ܝBXqVx!! R<eɡf÷.0f9.D.d,]]@r4v邛S=P4 zO48J ܢZJ!'rrg}鬪;2QTh4Ղs^WV# K@NSj3^f<H5sƎ *'麾1]PsVY9]<@IENDB`serve-index-1.4.0/public/icons/page_white_cd.png000066400000000000000000000012321241354425500216310ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<,IDAT8ˍ_kPg?dGJ:bE/du@ .ZA7 ԭеf]6iҦi=?9ڬ <9yw ^)p rC q4^D"sÒa$ 4:6$Izh4H $f6V>O+xiB(vidY˲6b%;v#B6}T$HeEZfyH'4<ֈnI@&px}Y7QEᕈx*TEviPCՃf#:"]y?TU=,+|BbGEbro5 ӱ 0Q Xxߨ~ٚWPu&O3<r #̭EG"|g.6\l-x2 V/H@5tFGs5^[.>O/@86-*:/E@0  ~+g"n-dqc3s̝GqFnC9A?\l.]D\cn?/ 8FNq$ɷAIP0Hɦi²,0iDQdAJ|mTU&2t]$ILPT@IMIP[5AJ(Je%6O(~0[dāa(*yUtOлM̾_ ^I P%4UUoVNcc_E{v_B|NuXתA"*kfB"_0-K?6љc.oal7.`Z:g|)bbܬ*āG å2Da.a2A$tCʘ?IENDB`serve-index-1.4.0/public/icons/page_white_code_red.png000066400000000000000000000011131241354425500230050ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍOkAk//9ւG/"!GE Ԇ4M[ҮD!@??='%n6I97&.<,̻ggޙ0GdER%: 6Gf!h6@ }xn$ijiIC "qބ1X~v=dCp (9mSKR=I AuA@z)㨙t:INjSX h@ fBp]yKo$*&K*h/C=!5_=Fo8ܶo'^޼W+a %!v泈{pMW?33eJG\:=8+˝ U$58j{$QPxJ@|~z_U_SEw8\2%Hҿ9n3ւ?lPHۄBތ`$)t~{Ff:IENDB`serve-index-1.4.0/public/icons/page_white_coldfusion.png000066400000000000000000000011201241354425500234040ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍ_OPo?}"Je&^xO h ?WqdR0BvvsԕnM~iӞwz `E +Cr!eY8=G<7 Pՠ*J $@V%ό4 rY &xd2Kn(K^cIn-#׊jUV`x~ nO+'.+ GZLf?}Y(y,{0?h3}㹋b^_ ~n7/!0 V&4|.:&dɔ[#B?X%N5[å@gTP|{±FL۶%ea(Y1*xFU7 vqs4hʳ)YG)ZE}/ܣ ~p0 Xr܆?V^֫TIENDB`serve-index-1.4.0/public/icons/page_white_compressed.png000066400000000000000000000013241241354425500234110ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<fIDAT8˅MKQ̼3NNba`TB65M_jS֢HD~V̌;眧699p澹g""a r8r$9'8edd hiMWUjT*R*d~~^s2;;+ gP<(ӛf拉Š5@ZMkn) B`ll5ޑ:_Z $hBCC(MfXk\>*tv33G͓/39v >!2eB8\($Yazeӵ @&JQ`ZceEl\&- 81hQJ67f7wn  u[^?1֓5BPJ`iVP+~|&V:͙k1sK]>#JXm\_MeKsf\O?Ż:|5K*DMrp{*KQkΉxzɗxiWz/M0YYZZTٜbN: Τ#6 /ֵH^0dA#~9NXF~{TB|v9IENDB`serve-index-1.4.0/public/icons/page_white_copy.png000066400000000000000000000004651241354425500222240ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(uMn0E9GBꂫtP kBH$4]8&瑟J&ѨF%@ds3W$q&гݨyFz\MMIENDB`serve-index-1.4.0/public/icons/page_white_cplusplus.png000066400000000000000000000011551241354425500233010ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍkQū]w%R.ZV (HWJەJQqFnHSBmPA7 EII$wdFځüown0vAq\ j6[V !$$ Zbٶ 4*Ȳ QcHt}a$uaY4MzH6 !C2s*2s fjq8]wX59q}=5QP  RqZ^}GV T*6(峋]z?.h}۩QVۀY7YCƓ ʴ3\7xMR x!copBpcrWIvpTJ3@ɼsX^sxC"K1ѫ+8s|)0S7q^˫6Yu6^;Xlv:lWW{sE[10+G{ fg]> @/A0Αh{=ҧIENDB`serve-index-1.4.0/public/icons/page_white_csharp.png000066400000000000000000000012741241354425500225310ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<NIDAT8ˍkAƫ@"G_,>X, 5Rx Mچ4i4!RTkђ ňmsivlS?g6&3f9sQHE4%)ZVh6ۭV DaXLJ0@͒$\.wU,!2 I` wQ=PVQ噪T*P(8PT@/Zm nyL9re5QwWQ ,[99nn=79ؗ1琀20¸8_#m6c,j|zo ZgcOMGqv23Lȳr8xb2M#Mϲ08&0j p.[0"CLa!L0V>m; ,JOG#:dgfqн98zcC3Õ5&A(a%f,f0\,' e<j/LEQW Wmm,Hɼ N# U\&f5F!@#_/bH -e/~A/\;1%{~ A;wD['V~.mIENDB`serve-index-1.4.0/public/icons/page_white_cup.png000066400000000000000000000011771241354425500220420ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍkSQk .Wq:΍݋\!X%Ym7A.B"Đ@@9y!SyϱyMb|ws{{7l.lrݚ`k:rEyh4wu6cH$3 h4XRՠje  jM4E$A8F0d4" & hNGb2|l6zjKU*q\..}-_?o3 >,i6Vgшp>G.çOm5~}Byt:3f9'L\ەinh4eIRÁrZ.C"q*b(Db/N~ /J铠nl6|6q@RŽL& ڥHB$z=*>'5RyWb1hZ, Bp:Z! NOBKXVgd h >=Yp*%h2#kM\:{F`kIENDB`serve-index-1.4.0/public/icons/page_white_database.png000066400000000000000000000011031241354425500230040ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍj"AMbV 22/bP$jlu!q'FkN.\ qƺd]GSUg\Vvv;LNNb\xXrTN4 RnqT$e2u!sL&` [zш5 )h4H$`6`0Izŵ ojPi&(p'N|'mjZT(  Є  kal6eR0l4!ptipgj*R$*ff<Fc:fsyx^ :߱Q%Xr,!@(>Oqf tׇ|p;*Ji vqD"sNh:x/xO_OW7On )sy9 xΦ_K<IENDB`serve-index-1.4.0/public/icons/page_white_delete.png000066400000000000000000000010301241354425500225010ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˕;KBaգnBCMMBh("Zڂ38PC.(8TK 4u∷=^#~y Qa$CCUM`$)Y**r`rZ%Hl6 QR)$ aY |!ϣP(O" L"Ȃ\.:v˒6H@t:h4Rm&&kީoX,&W"BwA+/hP;4 $ Ţ< ['^f2~^PH!9Ǜ݄)^׻lV|fN_: iCϾ4fmQP6qd/*2[|VG sl"2}ݜ 9 GdO 56mkIz]˥a T _#>U)ےIENDB`serve-index-1.4.0/public/icons/page_white_dvd.png000066400000000000000000000011761241354425500220270ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍn@EKJCQo<%A  U%R0uT!DI\mdlǹ߯f΀ME~g:X!6tk=.9[Z,1 \u:Z-TU1M>υ8[|T*!N#L"Buz=mضTr9O&yJfo$Sр$It:婜.m$N80,3|!Db( Fa78vcq5jױ_ %D?(z{/=xq\B.Ç!d-@ 6#^8rΏ`6 ,48݃kt~AZۻX% #?y"CupXIENDB`serve-index-1.4.0/public/icons/page_white_edit.png000066400000000000000000000011521241354425500221710ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍKSaWEDBԅЍ}a? P3B ]t +$aA IX^ns\[sKp;;gɦps6qt w`԰U]|^)JrL+:Nsb&\.u,Ld2iIYBӗ)v>)iR(D4E!J߰EYyZ,ǽM!a*?fH>>ƧG9Q7&h޳|}+ n $jcM}w+U;}92XͶ$jxw?Y=“g~Z\-32L>vEdi/ e{;^D tT߈]v5Jh.Az{G߀WN_}$GbBpIij&{-aI?@>L'n "$>Z ?zL^IENDB`serve-index-1.4.0/public/icons/page_white_excel.png000066400000000000000000000012271241354425500223470ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<)IDAT8ˍOHTQ;D:L&DD)-7AQZb3c8o޻6T|;)@)H>WP E5ȿv4QR$rY^^E1‚!jpWֲ9'u8'8+Xpaq$a#ˍ epW6R) d\/-$4E%Ȥq"91R)֎&-JC4cyZZʋ~>|4¼Мf5W Š}hb0|3Y=jK<~ ~TT$՚F021LW'$d0(}m+gHliZÞ>Ͼ珄Q "(p5 }iap!i|gVSMƘbsrZ^P8kmp֮VV]:{L`/G*_>IENDB`serve-index-1.4.0/public/icons/page_white_find.png000066400000000000000000000012441241354425500221660ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<6IDAT8ˍkaW@%t\# &jPɉlkhkE$XZl:2X#0Z/v]=zgh/\/sx$d3I]L_ @\VFcl9^VH+@JbR$(! sH, pzZG5e~`px CKT*( fH$P.AEo3nqϺf@s?AΈsx4y$FLL[alb #ZLҚ`w=[h0J*,//$CS:枾qt!4?eB 2.qKLp,Fl<NzZCH`U}mCx lo?&Hԍ0Xyu8䪣_ nö;: /@RQ5 !+L&AN4a6oamPP,%0 Pl6{i>8vn* r T*If paμ_[13 \.Nr=am'HBPJ==9z/bBk&AmO #a͔7826Qe sX@]Ȁ|ės4}"UDOށ~y-BW {iJlx&U@?oqQ6>ǘ]MnMGsSv/IENDB`serve-index-1.4.0/public/icons/page_white_freehand.png000066400000000000000000000011771241354425500230270ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍkSaƛ8bAcJE':tp!KEpiC6iC6چބ4779Mz sxbM,v}`aY:<;' sلiuj5e)JzH|'T*5IX<l7([X E'y4x-ɣZh%>r_s wG]C@d0hLKW1x@ӠD9"N49pd< )M+$EY5Y;_!oƐ\HIENDB`serve-index-1.4.0/public/icons/page_white_get.png000066400000000000000000000010041241354425500220170ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˕MKQM!Z M [.PladdFqѢ@ ms5?0ssaka`0%0Xl4f# %Hj ۔J% iYJ :$$ Z $ORX,"A@D"Y# (P.f{ZjD!`m7;JdA7j UB jfB z.υ$ĿT C] (@Np>]P8c6 #֍+ޥ/>?>/'nqgջ7lQ+LGՂAsXzߋkf껰Ȇij}/bg<7G!Z#ɠlrs`%Co4tQЛ1IENDB`serve-index-1.4.0/public/icons/page_white_go.png000066400000000000000000000011441241354425500216520ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˕KQ(RJ}B.FSkJ7-"RQUPFQHP4UĂTJqBJB^s֯ h1so0|ܠTXPD"o<?J$(9z,T !I|><vl6 S-!#WJ P(zhsB~8s-%8@w%jFI{Hj-8Pb\kD="#XrѿK:-?JǗs+zڍ>viQ|,;-=|z;֚1s[x w߱DZeoqoq5fnC}RX <-A.ӷQ5W @Y2dU,OiI1v M(5y@( lYPR49T}vsIENDB`serve-index-1.4.0/public/icons/page_white_h.png000066400000000000000000000011331241354425500214720ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍKKPǵ|R7B7nD0BR:  tDG) υ}hT&1ɤyg{n%H =w9pid41!ȋJUVk`$i(* y|ض 4*(L&#$ar= (X,\.7.,˂i\l6W ZRRj- /$8t]I(xb$5i1Ëxa+BW"m}m= s;&fs&L,$T 0x_Y /iZ+@ZE%̈́DF_yW*>S{'.,VH/H/t&5.}fް/ "P%<";8ZZ$#L>hn2 ˲4 JBT*AmOa`T*9ht:CvduryW;hzAUUȲЬ0D~fzyx2q쾑_s(e'`kPx|~qQp8$X64Z联07?a篃ub? KХ!S7aaw\Wl9N4ogcXI˽~޽͗!ayj <׏}Ƚk0V#O Gg cLkpXyݳ^=t$\ݹ[SG'b'n5UMu+IENDB`serve-index-1.4.0/public/icons/page_white_lightning.png000066400000000000000000000012351241354425500232310ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe</IDAT8ˍkQ;tWh+A[>t& 5*&BPEiAX-Z[-i4iiLf&yf?zijZ}s.@|[U mΕJr %Ղ&6 i: EQ <`0H*u;ڳӐ8/>>B XZ$ PA _\OD'd P (O BMKl&Tɳq6c 9?i/f(>Idqܒ@߿13v}h0~v!jr^Qil,/ Q+qhs~wM0?8q awqDr3L> =#[P^ߜ@jG!N"o(lGwurT 74r|6Z) Ҳ!gbyǐxh R"Wڐ|qT= WS#_1eo]Ku)K#+Edҋɿ:*A=a+կ _ZMHyBIENDB`serve-index-1.4.0/public/icons/page_white_link.png000066400000000000000000000011461241354425500222040ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˕;bA Y5DQl3ED1QEM|  тo~gl8v%$l|`zdz>1IFr:+l6p8~T*uqGڰn\.!Fl6O2 X`X`<ߴԷd2'z%NB~L\B@  AH˕Jh\HN{ k2 ,8.:_CfczVp8 łD"AnpbB@kZTUZ-4  pp:Vh`4hN1&jo3syz|lhP.Q,NrxbR]vJ_d2Wv̞l8T*\.wbt?JOB >IENDB`serve-index-1.4.0/public/icons/page_white_magnify.png000066400000000000000000000010521241354425500226750ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍIK@C7/= ŋIm\ E*q[A\jU64S:_4U1 dg2..1TR!gi n{\b ):cr9d2qK( <7 0P('i,%E^%! (*JgRM j|NwmWIRNdY[PW #N;fP 5&1_/L}~`7 ]cVi3$QA4)°+E8! _j8C=L=pUU^X}Lwr }u=RY8yƂ8]cw!6iMwֶwA}LL6xG)>_o$qp-7Z7ZIENDB`serve-index-1.4.0/public/icons/page_white_medal.png000066400000000000000000000013021241354425500223230ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<TIDAT8˅KTQ?8O3J@Z[7]HX B~mF A@EBE.*(yj8E{| O (z{"z7u8H=­fx qG^(6pΑ)B-VVV/ 2~rF8)t^BJ!a233sssKk*1G:HbMR7uR,J)-L&C.cvvv֘Q9x!ω>iVRA҃U5u")ym}/.::;fdit8[uwZ[)R T3@f"sÏOoɏ^myhY0XE\w)]:z ]m|R ΋6N$IZ)>tZ6.0ܨ~XXҡ3IENDB`serve-index-1.4.0/public/icons/page_white_office.png000066400000000000000000000014131241354425500224770ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍKSQGg$TCaYQhEHY eIŌ( !)Ji~1  _p]~1uv{wv݋~;^.|~:rPr)y`+eS.Mi8=dJlgKy1WuĦ,!# BEx^&yIa2s;O*~ PU@$B!ߒoDzr\>~! ^FZD#D72gcV~YB B|ܢe/.Yf@;'&:m<»+*#ƽx NȓbȽ-PF:y_pCSDIfȲ(-ㅙwi!QcBd&"|ªBI 4q: b(0Ua-y OU- >RJ4ȟaoKd5 J;y2zo{ h WDa.u6FfP`ea7W؝.@&w<:OjntuN~a(=+h  D@?5&H[}4~eJ/wi ]@__ 8O pIENDB`serve-index-1.4.0/public/icons/page_white_paint.png000066400000000000000000000012601241354425500223570ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<BIDAT8ˍOA/8&b&('ś1$41PK($DiP)VmR i~l62s=3ym6mAA8`t]VTB5}8NG5 ]4,2EE<#JrLnopon MӐ硨E$It zþ٫11YApBNXde\.L&c `>{(Qc~S0'[BnDy iF}]uLKxCSQ "肞}ԗ xҾPg5,Xj,p")W$@&K :0D$ OayW.M;' bDp8ES~|8$a0/*mav_C_Yx ӈ=)Hcxn=\[L"ŮP(Pn?@k.u>CK(ZlfZ_ [4S9 G_Ѝ턍JA#lco, ~Nč3IENDB`serve-index-1.4.0/public/icons/page_white_paintbrush.png000066400000000000000000000011521241354425500234230ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍkQ.qEǪuƝ+7Ս.,؅E[(XhUS@P/DH(}aEJؚF8ɴ${.$1sf F?cTՔdb|P(lvVJBdhh4 EQDe8.&Z+Ёt:l6˯D"@,C8T*z.iÊn (l@ qD"Oъ:xWk3 SF)"t q٨؁:tO])b*02GsPī޳;OME`!;E\p˝(8TAZоfMkD8 ˞)x>*vo_֗n,@(q5f]=(;^Ĩg&}>y(r5<Ρ7@׃%{}SxߧIlX@~!/\bfIENDB`serve-index-1.4.0/public/icons/page_white_paste.png000066400000000000000000000011541241354425500223620ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8u;hTQ{qF%ш ]*k_r]!IJ+!A X)6.I@Hv̙#Ks3qf7ƣhpBnrzGkt۟'xl-71u4W̌`f,^g7ocKi~ *47`m85{!1Hs 94`"L̜E`hwvZ=ι`40UT=V{k!h<[YY;vscDqADޓ)Je5cjZ}"T<&  isEQ I*0cA1QT EQ?ONNt!`YUE%`jX#w"2}D1 -d3!A=zgPXυ-NτBɷozxa{{;K'B]89pd0sa,IENDB`serve-index-1.4.0/public/icons/page_white_php.png000066400000000000000000000010321241354425500220300ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍKKQ [զ}mJ"&zl4EiE$nfԔytϭwsO8\?:FjRh5MP(d%Ś,(P(DÖ,C&TU0 IE*T*?8Gl qRe4d)5!I n,@<&ѫ'< v3DW8/P.m;>%X߸ w(6A6&f2Ek*lƳ 0A |{-XV0Jpl$|=HD7A=@J&ֱb(:w~⭞)IENDB`serve-index-1.4.0/public/icons/page_white_picture.png000066400000000000000000000012121241354425500227140ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍOSasZbMJPAqh$?p1ͅفфEcTĄE +h^n8Pj$7ssDUPUz&4mcVSU26ƸvNVFCժZku{{[&2ëRxNFb8xMq2Ygeek^,uq ˟^AVBP(ʏ]>mDzM;7,!a03i&"a= q_R xa`_|~vM,|NIENDB`serve-index-1.4.0/public/icons/page_white_put.png000066400000000000000000000010131241354425500220500ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˕KKaE"!hQAIe1- J \ jBA Rh-\HhA(::ۜ309g822P h0,0@ YU8.U**rv%@C\.eki$ID"Qx$tI@ Ţx',RѨ(0 #JZ 2 bXKKՙBL}KqP(YL*y$jfB\HB-*vױ}o9 ӭBT%h (L<ѧǨvdx:ٿ {Њ7'\;TS;s`ۄ#\0?vaV2+:.ŷw - ZeR:ؕߓֱ+(\ҴphIENDB`serve-index-1.4.0/public/icons/page_white_ruby.png000066400000000000000000000011621241354425500222260ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍOOABHV&&$$ Hmr3 "'. I?v f~̼N0*#bVB  6Y%qA?7MضaժT* H_u]x'FeYuZMDQ.jɝ(} KK/ZX;SwO\IԄdQgo_A?mVh<\y0:|+PUDkk@ vI`cf&ߒj:ss('S݇iA9|a :8}d{,# _0M#hdd.ghf*E9 ctn"rN .'׽B~F'!pXXqw>k%Q"42&ۙ}\MvlwqI)Yz;B I|"a7& <6vjIENDB`serve-index-1.4.0/public/icons/page_white_stack.png000066400000000000000000000004751241354425500223600ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(uM 0FG=RP3:E#qC("ڟ9i y0x4! TBA}LkZ݉6G 7(L{P  أoX#bxG @)yxp0—X,X <4i0Hȧ<.m{b4O:a"נJF@zt 7uNxx?,?X.YwIENDB`serve-index-1.4.0/public/icons/page_white_star.png000066400000000000000000000010651241354425500222200ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍKQX?Tpib$Kq.JEMQ .J7dMq)n}7""hq E|5{ofDt0y7瞙;`$R | 97}߿ $#|!: If۶8NnNz Z l6aN, ih(뺠rw l:v#QZJRVon.,;O{74ώA( nurNZ/w8vX:! 8Ovy|<\c /qW,1-`Nc&6Yo4*D#1z N#h!D@B `@'F6~'z*B DF25bd@%|<[SYu(1hp 4M6.V3u]T \ n1| I P35}te}(U\;r̶12Qka& }\Ž^h]cCrkު6eŦTěnePB*z*,H;s=v7m|rx΁ ~P%S!ӂIENDB`serve-index-1.4.0/public/icons/page_white_text.png000066400000000000000000000005261241354425500222340ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT1nSAǞ4A(ISp.KPp"QA7%1Ӣ;+Z######DWk=C?|Xj9昇SekMs9NNVG@kD)4hn.Q@nJ)1]:;1@ T:ti:I$fM-+g]^LvIENDB`serve-index-1.4.0/public/icons/page_white_text_width.png000066400000000000000000000004731241354425500234340ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(υM 0'ZqJ[A=q/ ܺtc+Z[t|I[l?pF\ 5n`˸X(C»˻zoÛV})&vl'Ɖ@Xz{{`aJ8ސwxqˌl43-yK7w0;#v Cx͏ڍO9I Rhoˤ/&wl{u:oѤbuIENDB`serve-index-1.4.0/public/icons/page_white_vector.png000066400000000000000000000012041241354425500225440ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8˅OoQšF.ąw5{;w~ao 1!EBZ W@iպP Q a@0Ϳz|wZȔ:ټ{\I|ׄVVBK3bȶ#qHh4BU2O&Vh@efO9i`P(@4u(hI&ǐy骥R MlUl6ϴf2, Jw-s#7$i1@d`0Ϟ#!ˑ,Z֚-@U kraeSDode0=XzZ,f_G|Zq-3,h!S٫YO$WZlv-`s^5-*f⼙8 p-Bҩ bNL^y/]04q `IENDB`serve-index-1.4.0/public/icons/page_white_visualstudio.png000066400000000000000000000012761241354425500240060ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<PIDAT8ˍoHqǗ8 -7FDhBȔJ0ތeь\zFQ"‘V ^ LbcsMvw]Om~Щ(IQj*"Ac:$If2C9yT,)p*˲y$HD,$A%U<A 0( x\p!>$'ޖ = kneTM,nɒOz 㗏D\d V\o|gܣx$S6YT?@ s7v"nFZch a$D xg%zEL@R²D6,3a{O邠g̹z xxK`/a20AUAxGf5@.y}4N A cV0m +m/{ʊ<Ď!Wǝ>ؚ0T  f`J).]*Pか?? ^~V Z!Z03 ^`!F 7HLgYkAy~eX`=aѶH`V%XyIENDB`serve-index-1.4.0/public/icons/page_white_width.png000066400000000000000000000004651241354425500223710ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(υA0E֕n\xqob♼ Rw(gIu2U5S6VXʲJ6YhlOe<Ƥj56S&5n2 ,be %,r[;zֳ X`<ƐdzB7|!A/n2=VY ro vZdIENDB`serve-index-1.4.0/public/icons/page_white_word.png000066400000000000000000000012131241354425500222150ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT8ˍkQ}ɢ7.ĤScR+SY`+"6_F,]fǽ3Y7Q[̜{cTci`p7UTȅ,˺eY,tii50XUC`,˸~^NG[lH{B7zuNB ACZ(VVV,..y2ȡln !qo?"7L$qڗ]biJED!P\IИ ',hTiJ$Vb{+k]Bh|^p6(9xId_ {,s.Fi$*Zs# `sJr$S1ڃ ™On,q [1Ts?> ,ܨx)} y6>ۘAT5# 3fK!Up4J19Jsq@8#:/nyIENDB`serve-index-1.4.0/public/icons/page_white_world.png000066400000000000000000000013361241354425500223770ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<pIDAT8ˍORaǭ#+/ڢ2+u6SQHeUV"5LKsa ž=)>;}{+PB!B%xV> P*/(kkkd2dx+++$CpB'W3N: Ӌɻz,,H$DXA6V)ZD+ ި`O`<{+:quLI[鐨nW )^}[)GcAt[1مh4$  `FaгKv/jlq{>OIRl=bضdF؀$O?9 q * v~L#:fE|w}@og!qی:>Q!1r+l-<ǘPy͎C*;Ιpz+T@ M?a_p C/zNWfƀ 6wAEܠ c|y5FNԡ2Hw'(AFle7>ųI\H"^LiEn5ۙ`t;'%G ;-?|f'(XtK2,B*t:!.2 èT*pݐ$ @Xl%4B`0EQx`ۑH$`Xx%'#NS'IXVޞIN[CȲh4ʳ*l65M4'v/O!c{+d2FdʇB$M,mߟuD~؊kXyLFD03o/] ]ǧ_Unk0py*tw<~kFUT,m@_"g7J%\_^q9c!6 S4BsY@mZm5rqF OźXIENDB`serve-index-1.4.0/public/icons/page_white_zip.png000066400000000000000000000006021241354425500220450ustar00rootroot00000000000000PNG  IHDR7gAMA7tEXtSoftwareAdobe ImageReadyqe<IDAT(]MJ+"/$BׂQBT)"Vt D*ǦI% $117 tAȎ&鰲Or/7"olܐ_jPCMU5(M_Ǚr L[nIENDB`serve-index-1.4.0/public/icons/page_word.png000066400000000000000000000014111241354425500210150ustar00rootroot00000000000000PNG  IHDRagAMA7tEXtSoftwareAdobe ImageReadyqe<IDATMUeιuqIWh"(²l6Ԧ(Eh]dlآEhSZQ34%-glc{9_O^n!HDєk]މ# Co~ 4TGz?+gO[ÑԐ[WgrJ$F4Ψn,kl_~ͯg} CJi""nu2uTɮ=s6mϠE3}ܱ3Ӷ̮sDשmzxֱz/fL9~i0(4WPM,4zMꇕp׮O^J~'9W8}Z3t7;)PFՌl0ݫg.yn|nsTlrb1xɵHwg?? -ynos Ha>чJ&b]% K93ԣtP,/My"`gGi#cZR/me GDA8Hݝ)®:Һ-,f.޺Fe-)(>$Vй*8 *&Œ%V; ٞqHO\s/^シyDCM EVygD@mZ qbwvA(Y9s:TD+SM5.n[hh(KhI;D +I+k6!A@ι;FQx- 1IENDB`serve-index-1.4.0/public/style.css000066400000000000000000000110001241354425500170720ustar00rootroot00000000000000* { margin: 0; padding: 0; outline: 0; } body { padding: 80px 100px; font: 13px "Helvetica Neue", "Lucida Grande", "Arial"; background: #ECE9E9 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ECE9E9)); background: #ECE9E9 -moz-linear-gradient(top, #fff, #ECE9E9); background-repeat: no-repeat; color: #555; -webkit-font-smoothing: antialiased; } h1, h2, h3 { font-size: 22px; color: #343434; } h1 em, h2 em { padding: 0 5px; font-weight: normal; } h1 { font-size: 60px; } h2 { margin-top: 10px; } h3 { margin: 5px 0 10px 0; padding-bottom: 5px; border-bottom: 1px solid #eee; font-size: 18px; } ul li { list-style: none; } ul li:hover { cursor: pointer; color: #2e2e2e; } ul li .path { padding-left: 5px; font-weight: bold; } ul li .line { padding-right: 5px; font-style: italic; } ul li:first-child .path { padding-left: 0; } p { line-height: 1.5; } a { color: #555; text-decoration: none; } a:hover { color: #303030; } #stacktrace { margin-top: 15px; } .directory h1 { margin-bottom: 15px; font-size: 18px; } ul#files { width: 100%; height: 100%; overflow: hidden; } ul#files li { float: left; width: 30%; line-height: 25px; margin: 1px; } ul#files li a { display: block; height: 25px; border: 1px solid transparent; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; overflow: hidden; white-space: nowrap; } ul#files li a:focus, ul#files li a:hover { background: rgba(255,255,255,0.65); border: 1px solid #ececec; } ul#files li a.highlight { -webkit-transition: background .4s ease-in-out; background: #ffff4f; border-color: #E9DC51; } #search { display: block; position: fixed; top: 20px; right: 20px; width: 90px; -webkit-transition: width ease 0.2s, opacity ease 0.4s; -moz-transition: width ease 0.2s, opacity ease 0.4s; -webkit-border-radius: 32px; -moz-border-radius: 32px; -webkit-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); -moz-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); -webkit-font-smoothing: antialiased; text-align: left; font: 13px "Helvetica Neue", Arial, sans-serif; padding: 4px 10px; border: none; background: transparent; margin-bottom: 0; outline: none; opacity: 0.7; color: #888; } #search:focus { width: 120px; opacity: 1.0; } /*views*/ #files span { display: inline-block; overflow: hidden; text-overflow: ellipsis; text-indent: 10px; } #files .name { background-repeat: no-repeat; } #files .icon .name { text-indent: 28px; } /*tiles*/ .view-tiles .name { width: 100%; background-position: 8px 5px; } .view-tiles .size, .view-tiles .date { display: none; } /*details*/ ul#files.view-details li { float: none; display: block; width: 90%; } ul#files.view-details li.header { height: 25px; background: #000; color: #fff; font-weight: bold; } .view-details .header { border-radius: 5px; } .view-details .name { width: 60%; background-position: 8px 5px; } .view-details .size { width: 10%; } .view-details .date { width: 30%; } .view-details .size, .view-details .date { text-align: right; direction: rtl; } /*mobile*/ @media (max-width: 768px) { body { font-size: 13px; line-height: 16px; padding: 0; } #search { position: static; width: 100%; font-size: 2em; line-height: 1.8em; text-indent: 10px; border: 0; border-radius: 0; padding: 10px 0; margin: 0; } #search:focus { width: 100%; border: 0; opacity: 1; } .directory h1 { font-size: 2em; line-height: 1.5em; color: #fff; background: #000; padding: 15px 10px; margin: 0; } ul#files { border-top: 1px solid #cacaca; } ul#files li { float: none; width: auto !important; display: block; border-bottom: 1px solid #cacaca; font-size: 2em; line-height: 1.2em; text-indent: 0; margin: 0; } ul#files li:nth-child(odd) { background: #e0e0e0; } ul#files li a { height: auto; border: 0; border-radius: 0; padding: 15px 10px; } ul#files li a:focus, ul#files li a:hover { border: 0; } #files .header, #files .size, #files .date { display: none !important; } #files .name { float: none; display: inline-block; width: 100%; text-indent: 0; background-position: 0 0; } #files .icon .name { text-indent: 41px; } } serve-index-1.4.0/test/000077500000000000000000000000001241354425500147315ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/000077500000000000000000000000001241354425500166025ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/#directory/000077500000000000000000000000001241354425500206515ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/#directory/index.html000066400000000000000000000000271241354425500226450ustar00rootroot00000000000000

tobi, loki, jane

serve-index-1.4.0/test/fixtures/.hidden000066400000000000000000000000131241354425500200300ustar00rootroot00000000000000I am hiddenserve-index-1.4.0/test/fixtures/collect/000077500000000000000000000000001241354425500202275ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample000066400000000000000000000000001241354425500214210ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.jpg000066400000000000000000000000001241354425500222000ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.mp4000066400000000000000000000000001241354425500221200ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.pdf000066400000000000000000000000001241354425500221710ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.qfx000066400000000000000000000000001241354425500222160ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.rdf000066400000000000000000000000001241354425500221730ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.txt000066400000000000000000000000001241354425500222370ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/collect/sample.xlsx000066400000000000000000000000001241354425500224160ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/file #1.txt000066400000000000000000000000101241354425500204350ustar00rootroot00000000000000#1 file!serve-index-1.4.0/test/fixtures/foo bar000066400000000000000000000000031241354425500200260ustar00rootroot00000000000000bazserve-index-1.4.0/test/fixtures/g# %3 o %2525 %37 dir/000077500000000000000000000000001241354425500211435ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/g# %3 o %2525 %37 dir/empty.txt000066400000000000000000000000001241354425500230300ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/nums000066400000000000000000000000111241354425500174770ustar00rootroot00000000000000123456789serve-index-1.4.0/test/fixtures/todo.txt000066400000000000000000000000131241354425500203020ustar00rootroot00000000000000- groceriesserve-index-1.4.0/test/fixtures/users/000077500000000000000000000000001241354425500177435ustar00rootroot00000000000000serve-index-1.4.0/test/fixtures/users/index.html000066400000000000000000000000271241354425500217370ustar00rootroot00000000000000

tobi, loki, jane

serve-index-1.4.0/test/fixtures/users/tobi.txt000066400000000000000000000000061241354425500214350ustar00rootroot00000000000000ferretserve-index-1.4.0/test/fixtures/さくら.txt000066400000000000000000000000001241354425500223420ustar00rootroot00000000000000serve-index-1.4.0/test/shared/000077500000000000000000000000001241354425500161775ustar00rootroot00000000000000serve-index-1.4.0/test/shared/index.js000066400000000000000000000010451241354425500176440ustar00rootroot00000000000000 var bytes = require('bytes'); exports['default request body'] = function(app){ it('should default to {}', function(done){ app.request() .post('/') .end(function(res){ res.body.should.equal('{}'); done(); }) }) }; exports['limit body to'] = function(size, type, app){ it('should accept a limit option', function(done){ app.request() .post('/') .set('Content-Length', bytes(size) + 1) .set('Content-Type', type) .end(function(res){ res.should.have.status(413); done(); }) }) }serve-index-1.4.0/test/shared/styles.css000066400000000000000000000000311241354425500202260ustar00rootroot00000000000000body { color: #00ff00; }serve-index-1.4.0/test/shared/template.html000066400000000000000000000004721241354425500207030ustar00rootroot00000000000000 listing directory {directory}

This is the test template

directory {directory}

{linked-path}

{files}
serve-index-1.4.0/test/test.js000066400000000000000000000406751241354425500162620ustar00rootroot00000000000000 var http = require('http'); var fs = require('fs'); var path = require('path'); var request = require('supertest'); var should = require('should'); var serveIndex = require('..'); var fixtures = path.join(__dirname, '/fixtures'); var relative = path.relative(process.cwd(), fixtures); var skipRelative = ~relative.indexOf('..') || path.resolve(relative) === relative; describe('serveIndex(root)', function () { it('should require root', function () { serveIndex.should.throw(/root path required/) }) it('should serve text/html without Accept header', function (done) { var server = createServer() request(server) .get('/') .expect('Content-Type', 'text/html; charset=utf-8') .expect(200, done) }) it('should serve a directory index', function (done) { var server = createServer() request(server) .get('/') .expect(200, /todo\.txt/, done) }) it('should work with HEAD requests', function (done) { var server = createServer() request(server) .head('/') .expect(200, '', done) }) it('should work with OPTIONS requests', function (done) { var server = createServer() request(server) .options('/') .expect('Allow', 'GET, HEAD, OPTIONS') .expect(200, done) }) it('should deny POST requests', function (done) { var server = createServer() request(server) .post('/') .expect(405, done) }) it('should deny path will NULL byte', function (done) { var server = createServer() request(server) .get('/%00') .expect(400, done) }) it('should deny path outside root', function (done) { var server = createServer() request(server) .get('/../') .expect(403, done) }) it('should skip non-existent paths', function (done) { var server = createServer() request(server) .get('/bogus') .expect(404, 'Not Found', done) }) it('should treat an ENAMETOOLONG as a 414', function (done) { var path = Array(11000).join('foobar') var server = createServer() request(server) .get('/' + path) .expect(414, done) }) it('should skip non-directories', function (done) { var server = createServer() request(server) .get('/nums') .expect(404, 'Not Found', done) }) describe('when given Accept: header', function () { describe('when Accept: application/json is given', function () { it('should respond with json', function (done) { var server = createServer() request(server) .get('/') .set('Accept', 'application/json') .expect('Content-Type', /json/) .expect(/g# %3 o %2525 %37 dir/) .expect(/users/) .expect(/file #1\.txt/) .expect(/nums/) .expect(/todo\.txt/) .expect(/さくら\.txt/) .expect(200, done) }); }); describe('when Accept: text/html is given', function () { it('should respond with html', function (done) { var server = createServer() request(server) .get('/') .set('Accept', 'text/html') .expect(200) .expect('Content-Type', 'text/html; charset=utf-8') .expect(/