From fbbea7e8dfb490ffa67db117a402300fd0562100 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Sun, 10 Sep 2023 21:52:12 -0400 Subject: [PATCH 01/13] got base features added --- node_modules/.bin/mime | 12 ++ node_modules/.bin/mime.cmd | 17 ++ node_modules/.bin/mime.ps1 | 28 +++ node_modules/.package-lock.json | 18 ++ node_modules/mime/CHANGELOG.md | 296 ++++++++++++++++++++++++++++ node_modules/mime/LICENSE | 21 ++ node_modules/mime/Mime.js | 97 +++++++++ node_modules/mime/README.md | 187 ++++++++++++++++++ node_modules/mime/cli.js | 46 +++++ node_modules/mime/index.js | 4 + node_modules/mime/lite.js | 4 + node_modules/mime/package.json | 52 +++++ node_modules/mime/types/other.js | 1 + node_modules/mime/types/standard.js | 1 + package-lock.json | 23 +++ package.json | 2 +- public/css/main.css | 108 +++++++++- public/index.html | 96 ++++++++- public/js/display.js | 143 ++++++++++++++ public/js/main.js | 124 +++++++++++- server.improved.js | 160 +++++++++++++-- 21 files changed, 1414 insertions(+), 26 deletions(-) create mode 100644 node_modules/.bin/mime create mode 100644 node_modules/.bin/mime.cmd create mode 100644 node_modules/.bin/mime.ps1 create mode 100644 node_modules/.package-lock.json create mode 100644 node_modules/mime/CHANGELOG.md create mode 100644 node_modules/mime/LICENSE create mode 100644 node_modules/mime/Mime.js create mode 100644 node_modules/mime/README.md create mode 100644 node_modules/mime/cli.js create mode 100644 node_modules/mime/index.js create mode 100644 node_modules/mime/lite.js create mode 100644 node_modules/mime/package.json create mode 100644 node_modules/mime/types/other.js create mode 100644 node_modules/mime/types/standard.js create mode 100644 package-lock.json create mode 100644 public/js/display.js diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime new file mode 100644 index 00000000..0a62a1b1 --- /dev/null +++ b/node_modules/.bin/mime @@ -0,0 +1,12 @@ +#!/bin/sh +basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") + +case `uname` in + *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; +esac + +if [ -x "$basedir/node" ]; then + exec "$basedir/node" "$basedir/../mime/cli.js" "$@" +else + exec node "$basedir/../mime/cli.js" "$@" +fi diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd new file mode 100644 index 00000000..54491f12 --- /dev/null +++ b/node_modules/.bin/mime.cmd @@ -0,0 +1,17 @@ +@ECHO off +GOTO start +:find_dp0 +SET dp0=%~dp0 +EXIT /b +:start +SETLOCAL +CALL :find_dp0 + +IF EXIST "%dp0%\node.exe" ( + SET "_prog=%dp0%\node.exe" +) ELSE ( + SET "_prog=node" + SET PATHEXT=%PATHEXT:;.JS;=;% +) + +endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %* diff --git a/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1 new file mode 100644 index 00000000..2222f40b --- /dev/null +++ b/node_modules/.bin/mime.ps1 @@ -0,0 +1,28 @@ +#!/usr/bin/env pwsh +$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent + +$exe="" +if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { + # Fix case when both the Windows and Linux builds of Node + # are installed in the same directory + $exe=".exe" +} +$ret=0 +if (Test-Path "$basedir/node$exe") { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } else { + & "$basedir/node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} else { + # Support pipeline input + if ($MyInvocation.ExpectingInput) { + $input | & "node$exe" "$basedir/../mime/cli.js" $args + } else { + & "node$exe" "$basedir/../mime/cli.js" $args + } + $ret=$LASTEXITCODE +} +exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 00000000..a6a3f2fd --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,18 @@ +{ + "name": "cs-4241-a2-shortstack", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + } + } +} diff --git a/node_modules/mime/CHANGELOG.md b/node_modules/mime/CHANGELOG.md new file mode 100644 index 00000000..dd254310 --- /dev/null +++ b/node_modules/mime/CHANGELOG.md @@ -0,0 +1,296 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [2.6.0](https://github.com/broofa/mime/compare/v2.5.2...v2.6.0) (2021-11-02) + + +### Features + +* mime-db@1.50.0 ([cef0cc4](https://github.com/broofa/mime/commit/cef0cc484ff6d05ff1e12b54ca3e8b856fbc14d8)) + +### [2.5.2](https://github.com/broofa/mime/compare/v2.5.0...v2.5.2) (2021-02-17) + + +### Bug Fixes + +* update to mime-db@1.46.0, fixes [#253](https://github.com/broofa/mime/issues/253) ([f10e6aa](https://github.com/broofa/mime/commit/f10e6aa62e1356de7e2491d7fb4374c8dac65800)) + +## [2.5.0](https://github.com/broofa/mime/compare/v2.4.7...v2.5.0) (2021-01-16) + + +### Features + +* improved CLI ([#244](https://github.com/broofa/mime/issues/244)) ([c8a8356](https://github.com/broofa/mime/commit/c8a8356e3b27f3ef46b64b89b428fdb547b14d5f)) + +### [2.4.7](https://github.com/broofa/mime/compare/v2.4.6...v2.4.7) (2020-12-16) + + +### Bug Fixes + +* update to latest mime-db ([43b09ef](https://github.com/broofa/mime/commit/43b09eff0233eacc449af2b1f99a19ba9e104a44)) + +### [2.4.6](https://github.com/broofa/mime/compare/v2.4.5...v2.4.6) (2020-05-27) + + +### Bug Fixes + +* add cli.js to package.json files ([#237](https://github.com/broofa/mime/issues/237)) ([6c070bc](https://github.com/broofa/mime/commit/6c070bc298fa12a48e2ed126fbb9de641a1e7ebc)) + +### [2.4.5](https://github.com/broofa/mime/compare/v2.4.4...v2.4.5) (2020-05-01) + + +### Bug Fixes + +* fix [#236](https://github.com/broofa/mime/issues/236) ([7f4ecd0](https://github.com/broofa/mime/commit/7f4ecd0d850ed22c9e3bfda2c11fc74e4dde12a7)) +* update to latest mime-db ([c5cb3f2](https://github.com/broofa/mime/commit/c5cb3f2ab8b07642a066efbde1142af1b90c927b)) + +### [2.4.4](https://github.com/broofa/mime/compare/v2.4.3...v2.4.4) (2019-06-07) + + + +### [2.4.3](https://github.com/broofa/mime/compare/v2.4.2...v2.4.3) (2019-05-15) + + + +### [2.4.2](https://github.com/broofa/mime/compare/v2.4.1...v2.4.2) (2019-04-07) + + +### Bug Fixes + +* don't use arrow function introduced in 2.4.1 ([2e00b5c](https://github.com/broofa/mime/commit/2e00b5c)) + + + +### [2.4.1](https://github.com/broofa/mime/compare/v2.4.0...v2.4.1) (2019-04-03) + + +### Bug Fixes + +* update MDN and mime-db types ([3e567a9](https://github.com/broofa/mime/commit/3e567a9)) + + + +# [2.4.0](https://github.com/broofa/mime/compare/v2.3.1...v2.4.0) (2018-11-26) + + +### Features + +* Bind exported methods ([9d2a7b8](https://github.com/broofa/mime/commit/9d2a7b8)) +* update to mime-db@1.37.0 ([49e6e41](https://github.com/broofa/mime/commit/49e6e41)) + + + +### [2.3.1](https://github.com/broofa/mime/compare/v2.3.0...v2.3.1) (2018-04-11) + + +### Bug Fixes + +* fix [#198](https://github.com/broofa/mime/issues/198) ([25ca180](https://github.com/broofa/mime/commit/25ca180)) + + + +# [2.3.0](https://github.com/broofa/mime/compare/v2.2.2...v2.3.0) (2018-04-11) + + +### Bug Fixes + +* fix [#192](https://github.com/broofa/mime/issues/192) ([5c35df6](https://github.com/broofa/mime/commit/5c35df6)) + + +### Features + +* add travis-ci testing ([d64160f](https://github.com/broofa/mime/commit/d64160f)) + + + +### [2.2.2](https://github.com/broofa/mime/compare/v2.2.1...v2.2.2) (2018-03-30) + + +### Bug Fixes + +* update types files to mime-db@1.32.0 ([85aac16](https://github.com/broofa/mime/commit/85aac16)) + + +### [2.2.1](https://github.com/broofa/mime/compare/v2.2.0...v2.2.1) (2018-03-30) + + +### Bug Fixes + +* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([b5c83fb](https://github.com/broofa/mime/commit/b5c83fb)) + + + +# [2.2.0](https://github.com/broofa/mime/compare/v2.1.0...v2.2.0) (2018-01-04) + + +### Features + +* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([10f82ac](https://github.com/broofa/mime/commit/10f82ac)) + + + +# [2.1.0](https://github.com/broofa/mime/compare/v2.0.5...v2.1.0) (2017-12-22) + + +### Features + +* Upgrade to mime-db@1.32.0. Fixes [#185](https://github.com/broofa/mime/issues/185) ([3f775ba](https://github.com/broofa/mime/commit/3f775ba)) + + + +### [2.0.5](https://github.com/broofa/mime/compare/v2.0.1...v2.0.5) (2017-12-22) + + +### Bug Fixes + +* ES5 support (back to node v0.4) ([f14ccb6](https://github.com/broofa/mime/commit/f14ccb6)) + + + +# Changelog + +### v2.0.4 (24/11/2017) +- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/mime/issues/182) +- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/mime/issues/181) + +--- + +## v1.5.0 (22/11/2017) +- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/mime/issues/179) +- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/mime/issues/178) +- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/mime/issues/176) +- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/mime/issues/175) +- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/mime/issues/167) + +--- + +### v2.0.3 (25/09/2017) +*No changelog for this release.* + +--- + +### v1.4.1 (25/09/2017) +- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/mime/issues/172) + +--- + +### v2.0.2 (15/09/2017) +- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/mime/issues/165) +- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/mime/issues/164) +- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/mime/issues/163) +- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/mime/issues/162) +- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/mime/issues/161) +- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/mime/issues/160) +- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/mime/issues/152) +- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/mime/issues/139) +- [**V2**] reset mime-types [#124](https://github.com/broofa/mime/issues/124) +- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/mime/issues/113) + +--- + +### v2.0.1 (14/09/2017) +- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/mime/issues/171) +- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/mime/issues/170) + +--- + +## v2.0.0 (12/09/2017) +- [**closed**] woff and woff2 [#168](https://github.com/broofa/mime/issues/168) + +--- + +## v1.4.0 (28/08/2017) +- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/mime/issues/159) +- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/mime/issues/158) +- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/mime/issues/157) +- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/mime/issues/147) +- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/mime/issues/135) +- [**closed**] requested features [#131](https://github.com/broofa/mime/issues/131) +- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/mime/issues/129) +- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/mime/issues/120) +- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/mime/issues/118) +- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/mime/issues/108) +- [**closed**] don't make default_type global [#78](https://github.com/broofa/mime/issues/78) +- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/mime/issues/74) + +--- + +### v1.3.6 (11/05/2017) +- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/mime/issues/154) +- [**closed**] Error while installing mime [#153](https://github.com/broofa/mime/issues/153) +- [**closed**] application/manifest+json [#149](https://github.com/broofa/mime/issues/149) +- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/mime/issues/141) +- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/mime/issues/140) +- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/mime/issues/130) +- [**closed**] how to support plist? [#126](https://github.com/broofa/mime/issues/126) +- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/mime/issues/123) +- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/mime/issues/121) +- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/mime/issues/117) + +--- + +### v1.3.4 (06/02/2015) +*No changelog for this release.* + +--- + +### v1.3.3 (06/02/2015) +*No changelog for this release.* + +--- + +### v1.3.1 (05/02/2015) +- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/mime/issues/111) +- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/mime/issues/110) +- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/mime/issues/94) +- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/mime/issues/77) + +--- + +## v1.3.0 (05/02/2015) +- [**closed**] Add common name? [#114](https://github.com/broofa/mime/issues/114) +- [**closed**] application/x-yaml [#104](https://github.com/broofa/mime/issues/104) +- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/mime/issues/102) +- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/mime/issues/99) +- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/mime/issues/98) +- [**closed**] collaborators [#88](https://github.com/broofa/mime/issues/88) +- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/mime/issues/87) +- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/mime/issues/86) +- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/mime/issues/81) +- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/mime/issues/68) + +--- + +### v1.2.11 (15/08/2013) +- [**closed**] Update mime.types [#65](https://github.com/broofa/mime/issues/65) +- [**closed**] Publish a new version [#63](https://github.com/broofa/mime/issues/63) +- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/mime/issues/55) +- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/mime/issues/52) + +--- + +### v1.2.10 (25/07/2013) +- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/mime/issues/62) +- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/mime/issues/51) + +--- + +### v1.2.9 (17/01/2013) +- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/mime/issues/49) +- [**closed**] Please add semicolon [#46](https://github.com/broofa/mime/issues/46) +- [**closed**] parse full mime types [#43](https://github.com/broofa/mime/issues/43) + +--- + +### v1.2.8 (10/01/2013) +- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/mime/issues/47) +- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/mime/issues/45) + +--- + +### v1.2.7 (19/10/2012) +- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/mime/issues/41) +- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/mime/issues/36) +- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/mime/issues/30) +- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/mime/issues/27) diff --git a/node_modules/mime/LICENSE b/node_modules/mime/LICENSE new file mode 100644 index 00000000..d3f46f7e --- /dev/null +++ b/node_modules/mime/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2010 Benjamin Thomas, Robert Kieffer + +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. diff --git a/node_modules/mime/Mime.js b/node_modules/mime/Mime.js new file mode 100644 index 00000000..969a66e4 --- /dev/null +++ b/node_modules/mime/Mime.js @@ -0,0 +1,97 @@ +'use strict'; + +/** + * @param typeMap [Object] Map of MIME type -> Array[extensions] + * @param ... + */ +function Mime() { + this._types = Object.create(null); + this._extensions = Object.create(null); + + for (let i = 0; i < arguments.length; i++) { + this.define(arguments[i]); + } + + this.define = this.define.bind(this); + this.getType = this.getType.bind(this); + this.getExtension = this.getExtension.bind(this); +} + +/** + * Define mimetype -> extension mappings. Each key is a mime-type that maps + * to an array of extensions associated with the type. The first extension is + * used as the default extension for the type. + * + * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); + * + * If a type declares an extension that has already been defined, an error will + * be thrown. To suppress this error and force the extension to be associated + * with the new type, pass `force`=true. Alternatively, you may prefix the + * extension with "*" to map the type to extension, without mapping the + * extension to the type. + * + * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']}); + * + * + * @param map (Object) type definitions + * @param force (Boolean) if true, force overriding of existing definitions + */ +Mime.prototype.define = function(typeMap, force) { + for (let type in typeMap) { + let extensions = typeMap[type].map(function(t) { + return t.toLowerCase(); + }); + type = type.toLowerCase(); + + for (let i = 0; i < extensions.length; i++) { + const ext = extensions[i]; + + // '*' prefix = not the preferred type for this extension. So fixup the + // extension, and skip it. + if (ext[0] === '*') { + continue; + } + + if (!force && (ext in this._types)) { + throw new Error( + 'Attempt to change mapping for "' + ext + + '" extension from "' + this._types[ext] + '" to "' + type + + '". Pass `force=true` to allow this, otherwise remove "' + ext + + '" from the list of extensions for "' + type + '".' + ); + } + + this._types[ext] = type; + } + + // Use first extension as default + if (force || !this._extensions[type]) { + const ext = extensions[0]; + this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1); + } + } +}; + +/** + * Lookup a mime type based on extension + */ +Mime.prototype.getType = function(path) { + path = String(path); + let last = path.replace(/^.*[/\\]/, '').toLowerCase(); + let ext = last.replace(/^.*\./, '').toLowerCase(); + + let hasPath = last.length < path.length; + let hasDot = ext.length < last.length - 1; + + return (hasDot || !hasPath) && this._types[ext] || null; +}; + +/** + * Return file extension associated with a mime type + */ +Mime.prototype.getExtension = function(type) { + type = /^\s*([^;\s]*)/.test(type) && RegExp.$1; + return type && this._extensions[type.toLowerCase()] || null; +}; + +module.exports = Mime; diff --git a/node_modules/mime/README.md b/node_modules/mime/README.md new file mode 100644 index 00000000..b08316f2 --- /dev/null +++ b/node_modules/mime/README.md @@ -0,0 +1,187 @@ + +# Mime + +A comprehensive, compact MIME type module. + +[![Build Status](https://travis-ci.org/broofa/mime.svg?branch=master)](https://travis-ci.org/broofa/mime) + +## Version 2 Notes + +Version 2 is a breaking change from 1.x as the semver implies. Specifically: + +* `lookup()` renamed to `getType()` +* `extension()` renamed to `getExtension()` +* `charset()` and `load()` methods have been removed + +If you prefer the legacy version of this module please `npm install mime@^1`. Version 1 docs may be found [here](https://github.com/broofa/mime/tree/v1.4.0). + +## Install + +### NPM +``` +npm install mime +``` + +### Browser + +It is recommended that you use a bundler such as +[webpack](https://webpack.github.io/) or [browserify](http://browserify.org/) to +package your code. However, browser-ready versions are available via wzrd.in. +E.g. For the full version: + + + + +Or, for the `mime/lite` version: + + + + +## Quick Start + +For the full version (800+ MIME types, 1,000+ extensions): + +```javascript +const mime = require('mime'); + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getExtension('text/plain'); // ⇨ 'txt' +``` + +See [Mime API](#mime-api) below for API details. + +## Lite Version + +There is also a "lite" version of this module that omits vendor-specific +(`*/vnd.*`) and experimental (`*/x-*`) types. It weighs in at ~2.5KB, compared +to 8KB for the full version. To load the lite version: + +```javascript +const mime = require('mime/lite'); +``` + +## Mime .vs. mime-types .vs. mime-db modules + +For those of you wondering about the difference between these [popular] NPM modules, +here's a brief rundown ... + +[`mime-db`](https://github.com/jshttp/mime-db) is "the source of +truth" for MIME type information. It is not an API. Rather, it is a canonical +dataset of mime type definitions pulled from IANA, Apache, NGINX, and custom mappings +submitted by the Node.js community. + +[`mime-types`](https://github.com/jshttp/mime-types) is a thin +wrapper around mime-db that provides an API drop-in compatible(ish) with `mime @ < v1.3.6` API. + +`mime` is, as of v2, a self-contained module bundled with a pre-optimized version +of the `mime-db` dataset. It provides a simplified API with the following characteristics: + +* Intelligently resolved type conflicts (See [mime-score](https://github.com/broofa/mime-score) for details) +* Method naming consistent with industry best-practices +* Compact footprint. E.g. The minified+compressed sizes of the various modules: + +Module | Size +--- | --- +`mime-db` | 18 KB +`mime-types` | same as mime-db +`mime` | 8 KB +`mime/lite` | 2 KB + +## Mime API + +Both `require('mime')` and `require('mime/lite')` return instances of the MIME +class, documented below. + +Note: Inputs to this API are case-insensitive. Outputs (returned values) will +be lowercase. + +### new Mime(typeMap, ... more maps) + +Most users of this module will not need to create Mime instances directly. +However if you would like to create custom mappings, you may do so as follows +... + +```javascript +// Require Mime class +const Mime = require('mime/Mime'); + +// Define mime type -> extensions map +const typeMap = { + 'text/abc': ['abc', 'alpha', 'bet'], + 'text/def': ['leppard'] +}; + +// Create and use Mime instance +const myMime = new Mime(typeMap); +myMime.getType('abc'); // ⇨ 'text/abc' +myMime.getExtension('text/def'); // ⇨ 'leppard' +``` + +If more than one map argument is provided, each map is `define()`ed (see below), in order. + +### mime.getType(pathOrExtension) + +Get mime type for the given path or extension. E.g. + +```javascript +mime.getType('js'); // ⇨ 'application/javascript' +mime.getType('json'); // ⇨ 'application/json' + +mime.getType('txt'); // ⇨ 'text/plain' +mime.getType('dir/text.txt'); // ⇨ 'text/plain' +mime.getType('dir\\text.txt'); // ⇨ 'text/plain' +mime.getType('.text.txt'); // ⇨ 'text/plain' +mime.getType('.txt'); // ⇨ 'text/plain' +``` + +`null` is returned in cases where an extension is not detected or recognized + +```javascript +mime.getType('foo/txt'); // ⇨ null +mime.getType('bogus_type'); // ⇨ null +``` + +### mime.getExtension(type) +Get extension for the given mime type. Charset options (often included in +Content-Type headers) are ignored. + +```javascript +mime.getExtension('text/plain'); // ⇨ 'txt' +mime.getExtension('application/json'); // ⇨ 'json' +mime.getExtension('text/html; charset=utf8'); // ⇨ 'html' +``` + +### mime.define(typeMap[, force = false]) + +Define [more] type mappings. + +`typeMap` is a map of type -> extensions, as documented in `new Mime`, above. + +By default this method will throw an error if you try to map a type to an +extension that is already assigned to another type. Passing `true` for the +`force` argument will suppress this behavior (overriding any previous mapping). + +```javascript +mime.define({'text/x-abc': ['abc', 'abcd']}); + +mime.getType('abcd'); // ⇨ 'text/x-abc' +mime.getExtension('text/x-abc') // ⇨ 'abc' +``` + +## Command Line + + mime [path_or_extension] + +E.g. + + > mime scripts/jquery.js + application/javascript + +---- +Markdown generated from [src/README_js.md](src/README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js new file mode 100644 index 00000000..ab70a49c --- /dev/null +++ b/node_modules/mime/cli.js @@ -0,0 +1,46 @@ +#!/usr/bin/env node + +'use strict'; + +process.title = 'mime'; +let mime = require('.'); +let pkg = require('./package.json'); +let args = process.argv.splice(2); + +if (args.includes('--version') || args.includes('-v') || args.includes('--v')) { + console.log(pkg.version); + process.exit(0); +} else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) { + console.log(pkg.name); + process.exit(0); +} else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) { + console.log(pkg.name + ' - ' + pkg.description + '\n'); + console.log(`Usage: + + mime [flags] [path_or_extension] + + Flags: + --help, -h Show this message + --version, -v Display the version + --name, -n Print the name of the program + + Note: the command will exit after it executes if a command is specified + The path_or_extension is the path to the file or the extension of the file. + + Examples: + mime --help + mime --version + mime --name + mime -v + mime src/log.js + mime new.py + mime foo.sh + `); + process.exit(0); +} + +let file = args[0]; +let type = mime.getType(file); + +process.stdout.write(type + '\n'); + diff --git a/node_modules/mime/index.js b/node_modules/mime/index.js new file mode 100644 index 00000000..fadcf8d6 --- /dev/null +++ b/node_modules/mime/index.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard'), require('./types/other')); diff --git a/node_modules/mime/lite.js b/node_modules/mime/lite.js new file mode 100644 index 00000000..835cffb3 --- /dev/null +++ b/node_modules/mime/lite.js @@ -0,0 +1,4 @@ +'use strict'; + +let Mime = require('./Mime'); +module.exports = new Mime(require('./types/standard')); diff --git a/node_modules/mime/package.json b/node_modules/mime/package.json new file mode 100644 index 00000000..df7f369b --- /dev/null +++ b/node_modules/mime/package.json @@ -0,0 +1,52 @@ +{ + "author": { + "name": "Robert Kieffer", + "url": "http://github.com/broofa", + "email": "robert@broofa.com" + }, + "engines": { + "node": ">=4.0.0" + }, + "bin": { + "mime": "cli.js" + }, + "contributors": [], + "description": "A comprehensive library for mime-type mapping", + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "benchmark": "*", + "chalk": "4.1.2", + "eslint": "8.1.0", + "mime-db": "1.50.0", + "mime-score": "1.2.0", + "mime-types": "2.1.33", + "mocha": "9.1.3", + "runmd": "*", + "standard-version": "9.3.2" + }, + "files": [ + "index.js", + "lite.js", + "Mime.js", + "cli.js", + "/types" + ], + "scripts": { + "prepare": "node src/build.js && runmd --output README.md src/README_js.md", + "release": "standard-version", + "benchmark": "node src/benchmark.js", + "md": "runmd --watch --output README.md src/README_js.md", + "test": "mocha src/test.js" + }, + "keywords": [ + "util", + "mime" + ], + "name": "mime", + "repository": { + "url": "https://github.com/broofa/mime", + "type": "git" + }, + "version": "2.6.0" +} diff --git a/node_modules/mime/types/other.js b/node_modules/mime/types/other.js new file mode 100644 index 00000000..bb6a0353 --- /dev/null +++ b/node_modules/mime/types/other.js @@ -0,0 +1 @@ +module.exports = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}; \ No newline at end of file diff --git a/node_modules/mime/types/standard.js b/node_modules/mime/types/standard.js new file mode 100644 index 00000000..5ee9937e --- /dev/null +++ b/node_modules/mime/types/standard.js @@ -0,0 +1 @@ +module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..02714710 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,23 @@ +{ + "name": "cs-4241-a2-shortstack", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "mime": "^2.6.0" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + } + } +} diff --git a/package.json b/package.json index 988f135f..2fbe673f 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,6 @@ "start": "node server.improved.js" }, "dependencies": { - "mime": "^2.4.4" + "mime": "^2.6.0" } } diff --git a/public/css/main.css b/public/css/main.css index 7cf6207b..3aa0ec65 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -1,4 +1,110 @@ +@import url("https://fonts.googleapis.com/css2?family=Courier+Prime&display=swap"); body { - background:black; + margin: 0; + font-family: "Courier Prime", monospace; + background-color: #9E768F; +} + +body { + background:rgb(40, 40, 40); color:white; +} + +header { + text-align: center; +} + +main { + display: grid; +} + +main .column { + margin-left: 50px; + margin-right: 50px; + max-width: fit-content; + text-align: center; +} + +form { + border: 1px white solid; + max-width: fit-content; + text-align: center; + padding: 10px; + padding-bottom: 20px; +} + +.grid-container { + display: grid; + max-width: fit-content; +} + +.grid-item { + padding: 10px; +} + +.grid-item label :not(fieldset) { + padding-right: 5px; +} + +.grid-item .right { + float: right; + padding-left: 10px; +} + +.grid-item .left { + float: left; +} + +#leftContent { + grid-column: 1 / 2; +} + +#rightContent { + grid-column: 2 / 2; +} + +section { + text-align: center; +} + +article { + text-align: center; +} + +section article { + margin-bottom: 50px; +} + +td { + padding: 30px; +} + +tr:nth-child(odd) { + background-color: #40567a; +} +tr:nth-child(even) { + background-color: #4C8BF5; +} + +fieldset label { + padding-left: 15px; +} + +.warning { + color: red; +} + +.classDisplay h2 { + font-size: large; +} + +.classHeader { + padding: 10px +} + +#singleClassDisplay { + border: 1px solid white; + padding: 10px; + padding-left: 30px; + padding-right: 30px; } \ No newline at end of file diff --git a/public/index.html b/public/index.html index b6de0443..f9d99501 100644 --- a/public/index.html +++ b/public/index.html @@ -4,15 +4,101 @@ CS4241 Assignment 2 + + + - + -
- - -
+ +
+

College Schedule Maker

+
+ +
+ +
+
+

Enter New Class

+
+
+
+
+ + +

+
+
+ + +

+
+
+
+
+ + +

+
+
+ + +

+
+
+
+
+ Days of the Week + + + + + + + + + + + + + + +
+

+
+
+ + +
+
+
+

Remove A Class

+
+
+
+
+ Choose Class to Remove +
+ +
+
+
+
+
+
+ +
+
+
+
+

Current Schedule

+
+
+
+
+ diff --git a/public/js/display.js b/public/js/display.js new file mode 100644 index 00000000..e1fae598 --- /dev/null +++ b/public/js/display.js @@ -0,0 +1,143 @@ +function displayScheduleOld(table, data) { + // make the headers + var row = table.insertRow(-1); + Object.keys( data[0]).forEach(key => { + var headerCell = document.createElement("th"); + headerCell.innerHTML = key + row.appendChild(headerCell) + }); + + // display the data + data.forEach(obj => { + row = table.insertRow(-1); + for (const [key, val] of Object.entries(obj)) { + var cell = row.insertCell(-1) + if(key === 'Days') { + cell.innerHTML = Object.values(val).toString() + } else { + cell.innerHTML = val + } + } + }); +} + +function displaySchedule(data) { + // make the headers + + const daysOfWeek = { + Su: "Sunday", + M: "Monday", + T: "Tuesday", + W: "Wednesday", + Th: "Thursday", + F: "Friday", + Sa: "Saturday" + }; + + var table = document.getElementById('dataView2') + table.textContent = '' // clear the table + + // create the weekday headers + var row = table.insertRow(-1); + Object.keys(daysOfWeek).forEach(key => { + var headerCell = document.createElement("th"); + headerCell.innerHTML = daysOfWeek[key] + headerCell.name = key + headerCell.className = "displayHeader" + row.appendChild(headerCell) + }); + + // organize by day / time + const schedule = { + Su: [], + M: [], + T: [], + W: [], + Th: [], + F: [], + Sa: [] + }; + + + // organize the data by time and day + for(obj of data) { + Object.values(obj.Days).forEach( day => { + + // compare the times and then organize + let i = 0 + const start1 = new Date('1970-01-01T' + obj.StartTime + ":00") + for(obj2 of schedule[day]) { + const start2 = new Date('1970-01-01T' + obj2.StartTime + ":00") + if(start1 - start2 < 0) { + break; + } + i++ + } + const temp = schedule[day].slice(0, i) + temp.push(obj) + for(el of schedule[day].slice(i)) { + temp.push(el) + } + schedule[day] = temp + }); + } + + let day = 0 + Object.values(schedule).forEach( classes => { + let row = 1 + let r + for(c of classes) { + if(table.rows.length <= row) { + r = table.insertRow(-1) + Object.values(schedule).forEach(_ => r.insertCell(-1)) + } + table.rows[row].cells[day].appendChild(classDisplay(c)) + row++ + } + day++; + }) + + console.log(schedule) +} + +// display a singular class cell +function classDisplay(classObj) { + const box = document.createElement('div'); + box.className = 'classDisplay' + + const add = (tag, inner) => { + if(typeof inner === "undefined") { + box.appendChild(document.createElement('br')) + return box + } + const el = document.createElement(tag) + el.innerHTML = inner + box.appendChild(el) + } + + add('h2', classObj.Name) + add('p', classObj.code) + add('p', classObj.StartTime + " - " + classObj.EndTime) + add('p', classObj.Length + ` hour${classObj.Length === 1 ? '' : 's'}`) + + return box +} + +const showClass = () => { + const data = document.getElementById("classSelect").value + const display = document.getElementById("singleClassDisplay") + display.innerText = '' + if(typeof data === "undefined" || data === "") { + display.appendChild(document.createElement('br')) + let temp1 = document.createElement('p') + temp1.innerHTML = 'No Class' + display.appendChild(temp1) + let temp2 = document.createElement('p') + temp2.innerHTML = 'Selected' + display.appendChild(temp2) + display.appendChild(document.createElement('br')) + } else { + display.appendChild(classDisplay(JSON.parse(data))) + } + +} \ No newline at end of file diff --git a/public/js/main.js b/public/js/main.js index a569258f..6effc174 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -6,9 +6,30 @@ const submit = async function( event ) { // this was the original browser behavior and still // remains to this day event.preventDefault() + + const getDays = _ => { + var days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] + var selected = {} + days = days.map(day => document.getElementById(day)) + counter = 0 + days.forEach( el => { + if(el.checked) { + selected['pos' + counter++] = el.value + } + }) + return selected + }; - const input = document.querySelector( '#yourname' ), - json = { yourname: input.value }, + const Name = document.getElementById( 'className' ).value, + Code = document.getElementById( 'classCode' ).value, + StartTime = document.getElementById('startTime').value, + EndTime = document.getElementById('endTime').value, + Days = getDays(), + json = { Name, + Code, + StartTime, + EndTime, + Days }, body = JSON.stringify( json ) const response = await fetch( '/submit', { @@ -16,12 +37,105 @@ const submit = async function( event ) { body }) + const responseJSON = await response.json() + + console.log( 'submit - received:', JSON.stringify(responseJSON) ) + if('errors' in responseJSON) { // there has been an error + // show warning messages + for (const [key, val] of Object.entries(responseJSON)) { + const el = document.getElementById(key + 'Warning'); + if(typeof el !== 'undefined' && el !== null) { + if (val !== true) { // there is an error + el.innerHTML = val + } else { // no error + el.innerHTML = '' + } + } + } + } else { // remove all warning labels + const warnings = document.getElementsByClassName('warning') + for ( element of warnings) { + element.innerHTML = '' + } + } + + getAll() +} + +const getAll = async function getAll( ) { + // event.preventDefault(); // TODO: check if we always need this? not sure what this does + + const response = await fetch( '/getAll', { + method:'POST' + }) + + const data = await response.json(); + + console.log( 'getAll - received:', data ) + + displaySchedule(data) + + const classDropdown = document.getElementById("classSelect") + addClassesTo(classDropdown).then(showClass) +} + +const remove = async function( event ) { + // stop form submission from trying to load + // a new .html page for displaying results... + // this was the original browser behavior and still + // remains to this day + event.preventDefault() + + const body = JSON.stringify( document.getElementById('classSelect').value ) + + const response = await fetch( '/remove', { + method:'POST', + body + }) + const text = await response.text() - console.log( 'text:', text ) + if(text === 'success') { + console.log('sucessfully removed') + } else { + console.log('failed to remove') + } + + getAll() + +} + +const addClassesTo = async function ( dropdown ) { + const response = await fetch( '/getAll', { + method:'POST' + }) + + const data = await response.json() + + console.log('getAll - received: ', data) + + dropdown.textContent = '' // clears the dropdown + + selected = false + for(c of data) { + let opt = document.createElement('option') + opt.value = JSON.stringify(c) + opt.innerHTML = c.Name + if(!selected) { + opt.selected = "selected" + selected = true + } + dropdown.appendChild(opt) + } } window.onload = function() { - const button = document.querySelector("button"); - button.onclick = submit; + document.getElementById("submitAdd").onclick = submit; + document.getElementById("submitRemove").onclick = remove; + const classDropdown = document.getElementById("classSelect") + addClassesTo(classDropdown) + classDropdown.onclick = showClass + showClass() + + getAll(); } \ No newline at end of file diff --git a/server.improved.js b/server.improved.js index 9ac27fb8..77ef70a7 100644 --- a/server.improved.js +++ b/server.improved.js @@ -9,9 +9,12 @@ const http = require( 'http' ), port = 3000 const appdata = [ - { 'model': 'toyota', 'year': 1999, 'mpg': 23 }, - { 'model': 'honda', 'year': 2004, 'mpg': 30 }, - { 'model': 'ford', 'year': 1987, 'mpg': 14} + { 'Name': 'Webware', + 'Code': 'CS4241', + 'StartTime' : '12:00', + 'EndTime': '14:00', + 'Days': { 'pos0': 'M', 'pos1': 'Th' }, + 'Length': 2 }, ] const server = http.createServer( function( request,response ) { @@ -33,20 +36,111 @@ const handleGet = function( request, response ) { } const handlePost = function( request, response ) { - let dataString = '' - request.on( 'data', function( data ) { - dataString += data - }) - request.on( 'end', function() { - console.log( JSON.parse( dataString ) ) + if(request.url === '/submit') { + handleSubmit( request, response ) + } else if(request.url === '/getAll') { + handleGetAll( request, response ) + } else if(request.url === '/remove') { + handleRemove( request, response ) + } else { + console.log('FAIL - requested: ' + request.url) + } +} - // ... do something with the data here!!! +const handleGetAll = function(request, response) { + request.on( 'data', () => {}) + request.on( 'end', function() { + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + console.log('getAll - sending: ' + JSON.stringify(appdata)) + response.end(JSON.stringify(appdata)) + }) +} - response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) - response.end('test') - }) +const handleSubmit = function(request, response) { + let dataString = '' + + request.on( 'data', function( data ) { + dataString += data + }) + + request.on( 'end', function() { + console.log( 'submit - received: ' + JSON.parse( dataString ) ) + + json = JSON.parse( dataString ) + + // add data + // check has name, start time, end time, and 1 day associated + const error = validate(json); + + if(error.errors === false) { // no errors + + // calculate the derived field (length of class) + const start = new Date('1970-01-01T' + json.StartTime + ":00") + const end = new Date('1970-01-01T' + json.EndTime + ":00") + const msPerHour = 1000 * 60 * 60 + json['Length'] = Math.round(((end-start) / msPerHour) * 100) / 100 + + // add to the server data + appdata.push( + json + ) + + console.log('submit - new data: ' + JSON.stringify(appdata)) + + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end(JSON.stringify({})) + } else { // send back error message + console.log('submit - error: ' + JSON.stringify(error)) + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end( JSON.stringify(error) ) + } + }) +} + +const handleRemove = function(request, response) { + let dataString = '' + + request.on( 'data', function( data ) { + dataString += data + }) + + request.on( 'end', function() { + console.log( 'remove - received: ' + JSON.parse( dataString ) ) + + json = JSON.parse( dataString ) + + // find the data to remove + let i = 0; + const max = appdata.length + for(obj of appdata) { + if(JSON.stringify(obj) === json) { + const front = appdata.slice(0, i) + const back = appdata.slice(i+1) + const temp = front.concat(back) + while(appdata.length > 0) { + appdata.pop() + } + for(let j = 0; j < temp.length; j++) { + appdata.push(temp[j]) + } + + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end('success') + console.log('success') + break + } else { + i++ + } + } + + if(i >= max) { + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end('fail') + console.log('failed to remove') + } + }) } const sendFile = function( response, filename ) { @@ -71,4 +165,42 @@ const sendFile = function( response, filename ) { }) } -server.listen( process.env.PORT || port ) +const validate = data => { + error = { + errors: false, + className: true, + startTime: true, + endTime: true, + days: true + } + if(!(data.Name.length > 0) ) { + error.className = "Name required" + error.errors = true + } + if(!(data.StartTime.length > 0) ) { + error.startTime = "Start Time required" + error.errors = true + } + if(!(data.EndTime.length > 0) ) { + error.endTime = "End Time required" + error.errors = true + } + + const start = data.StartTime.split(':') + const end = data.EndTime.split(':') + if(start[0] > end[0]) { + error.startTime = "Start Time must be before End Time" + error.errors = true + } else if (start[0] == end[0] && start[1] > end[1]) { + error.startTime = "Start Time must be before End Time" + error.errors = true + } + + if(!(Object.keys(data.Days).length > 0)) { + error.days = "Must select at least one day" + error.errors = true + } + return error; +}; + +server.listen( process.env.PORT || port ) \ No newline at end of file From 8cda84fff82ba8e99ea13e92075f229bf22b7d47 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Sun, 10 Sep 2023 21:56:29 -0400 Subject: [PATCH 02/13] gitignore --- .gitignore | 1 + node_modules/.bin/mime | 12 -- node_modules/.bin/mime.cmd | 17 -- node_modules/.bin/mime.ps1 | 28 --- node_modules/.package-lock.json | 18 -- node_modules/mime/CHANGELOG.md | 296 ---------------------------- node_modules/mime/LICENSE | 21 -- node_modules/mime/Mime.js | 97 --------- node_modules/mime/README.md | 187 ------------------ node_modules/mime/cli.js | 46 ----- node_modules/mime/index.js | 4 - node_modules/mime/lite.js | 4 - node_modules/mime/package.json | 52 ----- node_modules/mime/types/other.js | 1 - node_modules/mime/types/standard.js | 1 - 15 files changed, 1 insertion(+), 784 deletions(-) create mode 100644 .gitignore delete mode 100644 node_modules/.bin/mime delete mode 100644 node_modules/.bin/mime.cmd delete mode 100644 node_modules/.bin/mime.ps1 delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/mime/CHANGELOG.md delete mode 100644 node_modules/mime/LICENSE delete mode 100644 node_modules/mime/Mime.js delete mode 100644 node_modules/mime/README.md delete mode 100644 node_modules/mime/cli.js delete mode 100644 node_modules/mime/index.js delete mode 100644 node_modules/mime/lite.js delete mode 100644 node_modules/mime/package.json delete mode 100644 node_modules/mime/types/other.js delete mode 100644 node_modules/mime/types/standard.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..b512c09d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime deleted file mode 100644 index 0a62a1b1..00000000 --- a/node_modules/.bin/mime +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')") - -case `uname` in - *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;; -esac - -if [ -x "$basedir/node" ]; then - exec "$basedir/node" "$basedir/../mime/cli.js" "$@" -else - exec node "$basedir/../mime/cli.js" "$@" -fi diff --git a/node_modules/.bin/mime.cmd b/node_modules/.bin/mime.cmd deleted file mode 100644 index 54491f12..00000000 --- a/node_modules/.bin/mime.cmd +++ /dev/null @@ -1,17 +0,0 @@ -@ECHO off -GOTO start -:find_dp0 -SET dp0=%~dp0 -EXIT /b -:start -SETLOCAL -CALL :find_dp0 - -IF EXIST "%dp0%\node.exe" ( - SET "_prog=%dp0%\node.exe" -) ELSE ( - SET "_prog=node" - SET PATHEXT=%PATHEXT:;.JS;=;% -) - -endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\mime\cli.js" %* diff --git a/node_modules/.bin/mime.ps1 b/node_modules/.bin/mime.ps1 deleted file mode 100644 index 2222f40b..00000000 --- a/node_modules/.bin/mime.ps1 +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env pwsh -$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent - -$exe="" -if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) { - # Fix case when both the Windows and Linux builds of Node - # are installed in the same directory - $exe=".exe" -} -$ret=0 -if (Test-Path "$basedir/node$exe") { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "$basedir/node$exe" "$basedir/../mime/cli.js" $args - } else { - & "$basedir/node$exe" "$basedir/../mime/cli.js" $args - } - $ret=$LASTEXITCODE -} else { - # Support pipeline input - if ($MyInvocation.ExpectingInput) { - $input | & "node$exe" "$basedir/../mime/cli.js" $args - } else { - & "node$exe" "$basedir/../mime/cli.js" $args - } - $ret=$LASTEXITCODE -} -exit $ret diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index a6a3f2fd..00000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "cs-4241-a2-shortstack", - "lockfileVersion": 3, - "requires": true, - "packages": { - "node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - } - } -} diff --git a/node_modules/mime/CHANGELOG.md b/node_modules/mime/CHANGELOG.md deleted file mode 100644 index dd254310..00000000 --- a/node_modules/mime/CHANGELOG.md +++ /dev/null @@ -1,296 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - -## [2.6.0](https://github.com/broofa/mime/compare/v2.5.2...v2.6.0) (2021-11-02) - - -### Features - -* mime-db@1.50.0 ([cef0cc4](https://github.com/broofa/mime/commit/cef0cc484ff6d05ff1e12b54ca3e8b856fbc14d8)) - -### [2.5.2](https://github.com/broofa/mime/compare/v2.5.0...v2.5.2) (2021-02-17) - - -### Bug Fixes - -* update to mime-db@1.46.0, fixes [#253](https://github.com/broofa/mime/issues/253) ([f10e6aa](https://github.com/broofa/mime/commit/f10e6aa62e1356de7e2491d7fb4374c8dac65800)) - -## [2.5.0](https://github.com/broofa/mime/compare/v2.4.7...v2.5.0) (2021-01-16) - - -### Features - -* improved CLI ([#244](https://github.com/broofa/mime/issues/244)) ([c8a8356](https://github.com/broofa/mime/commit/c8a8356e3b27f3ef46b64b89b428fdb547b14d5f)) - -### [2.4.7](https://github.com/broofa/mime/compare/v2.4.6...v2.4.7) (2020-12-16) - - -### Bug Fixes - -* update to latest mime-db ([43b09ef](https://github.com/broofa/mime/commit/43b09eff0233eacc449af2b1f99a19ba9e104a44)) - -### [2.4.6](https://github.com/broofa/mime/compare/v2.4.5...v2.4.6) (2020-05-27) - - -### Bug Fixes - -* add cli.js to package.json files ([#237](https://github.com/broofa/mime/issues/237)) ([6c070bc](https://github.com/broofa/mime/commit/6c070bc298fa12a48e2ed126fbb9de641a1e7ebc)) - -### [2.4.5](https://github.com/broofa/mime/compare/v2.4.4...v2.4.5) (2020-05-01) - - -### Bug Fixes - -* fix [#236](https://github.com/broofa/mime/issues/236) ([7f4ecd0](https://github.com/broofa/mime/commit/7f4ecd0d850ed22c9e3bfda2c11fc74e4dde12a7)) -* update to latest mime-db ([c5cb3f2](https://github.com/broofa/mime/commit/c5cb3f2ab8b07642a066efbde1142af1b90c927b)) - -### [2.4.4](https://github.com/broofa/mime/compare/v2.4.3...v2.4.4) (2019-06-07) - - - -### [2.4.3](https://github.com/broofa/mime/compare/v2.4.2...v2.4.3) (2019-05-15) - - - -### [2.4.2](https://github.com/broofa/mime/compare/v2.4.1...v2.4.2) (2019-04-07) - - -### Bug Fixes - -* don't use arrow function introduced in 2.4.1 ([2e00b5c](https://github.com/broofa/mime/commit/2e00b5c)) - - - -### [2.4.1](https://github.com/broofa/mime/compare/v2.4.0...v2.4.1) (2019-04-03) - - -### Bug Fixes - -* update MDN and mime-db types ([3e567a9](https://github.com/broofa/mime/commit/3e567a9)) - - - -# [2.4.0](https://github.com/broofa/mime/compare/v2.3.1...v2.4.0) (2018-11-26) - - -### Features - -* Bind exported methods ([9d2a7b8](https://github.com/broofa/mime/commit/9d2a7b8)) -* update to mime-db@1.37.0 ([49e6e41](https://github.com/broofa/mime/commit/49e6e41)) - - - -### [2.3.1](https://github.com/broofa/mime/compare/v2.3.0...v2.3.1) (2018-04-11) - - -### Bug Fixes - -* fix [#198](https://github.com/broofa/mime/issues/198) ([25ca180](https://github.com/broofa/mime/commit/25ca180)) - - - -# [2.3.0](https://github.com/broofa/mime/compare/v2.2.2...v2.3.0) (2018-04-11) - - -### Bug Fixes - -* fix [#192](https://github.com/broofa/mime/issues/192) ([5c35df6](https://github.com/broofa/mime/commit/5c35df6)) - - -### Features - -* add travis-ci testing ([d64160f](https://github.com/broofa/mime/commit/d64160f)) - - - -### [2.2.2](https://github.com/broofa/mime/compare/v2.2.1...v2.2.2) (2018-03-30) - - -### Bug Fixes - -* update types files to mime-db@1.32.0 ([85aac16](https://github.com/broofa/mime/commit/85aac16)) - - -### [2.2.1](https://github.com/broofa/mime/compare/v2.2.0...v2.2.1) (2018-03-30) - - -### Bug Fixes - -* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([b5c83fb](https://github.com/broofa/mime/commit/b5c83fb)) - - - -# [2.2.0](https://github.com/broofa/mime/compare/v2.1.0...v2.2.0) (2018-01-04) - - -### Features - -* Retain type->extension mappings for non-default types. Fixes [#180](https://github.com/broofa/mime/issues/180) ([10f82ac](https://github.com/broofa/mime/commit/10f82ac)) - - - -# [2.1.0](https://github.com/broofa/mime/compare/v2.0.5...v2.1.0) (2017-12-22) - - -### Features - -* Upgrade to mime-db@1.32.0. Fixes [#185](https://github.com/broofa/mime/issues/185) ([3f775ba](https://github.com/broofa/mime/commit/3f775ba)) - - - -### [2.0.5](https://github.com/broofa/mime/compare/v2.0.1...v2.0.5) (2017-12-22) - - -### Bug Fixes - -* ES5 support (back to node v0.4) ([f14ccb6](https://github.com/broofa/mime/commit/f14ccb6)) - - - -# Changelog - -### v2.0.4 (24/11/2017) -- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/mime/issues/182) -- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/mime/issues/181) - ---- - -## v1.5.0 (22/11/2017) -- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/mime/issues/179) -- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/mime/issues/178) -- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/mime/issues/176) -- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/mime/issues/175) -- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/mime/issues/167) - ---- - -### v2.0.3 (25/09/2017) -*No changelog for this release.* - ---- - -### v1.4.1 (25/09/2017) -- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/mime/issues/172) - ---- - -### v2.0.2 (15/09/2017) -- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/mime/issues/165) -- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/mime/issues/164) -- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/mime/issues/163) -- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/mime/issues/162) -- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/mime/issues/161) -- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/mime/issues/160) -- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/mime/issues/152) -- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/mime/issues/139) -- [**V2**] reset mime-types [#124](https://github.com/broofa/mime/issues/124) -- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/mime/issues/113) - ---- - -### v2.0.1 (14/09/2017) -- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/mime/issues/171) -- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/mime/issues/170) - ---- - -## v2.0.0 (12/09/2017) -- [**closed**] woff and woff2 [#168](https://github.com/broofa/mime/issues/168) - ---- - -## v1.4.0 (28/08/2017) -- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/mime/issues/159) -- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/mime/issues/158) -- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/mime/issues/157) -- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/mime/issues/147) -- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/mime/issues/135) -- [**closed**] requested features [#131](https://github.com/broofa/mime/issues/131) -- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/mime/issues/129) -- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/mime/issues/120) -- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/mime/issues/118) -- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/mime/issues/108) -- [**closed**] don't make default_type global [#78](https://github.com/broofa/mime/issues/78) -- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/mime/issues/74) - ---- - -### v1.3.6 (11/05/2017) -- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/mime/issues/154) -- [**closed**] Error while installing mime [#153](https://github.com/broofa/mime/issues/153) -- [**closed**] application/manifest+json [#149](https://github.com/broofa/mime/issues/149) -- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/mime/issues/141) -- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/mime/issues/140) -- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/mime/issues/130) -- [**closed**] how to support plist? [#126](https://github.com/broofa/mime/issues/126) -- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/mime/issues/123) -- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/mime/issues/121) -- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/mime/issues/117) - ---- - -### v1.3.4 (06/02/2015) -*No changelog for this release.* - ---- - -### v1.3.3 (06/02/2015) -*No changelog for this release.* - ---- - -### v1.3.1 (05/02/2015) -- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/mime/issues/111) -- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/mime/issues/110) -- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/mime/issues/94) -- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/mime/issues/77) - ---- - -## v1.3.0 (05/02/2015) -- [**closed**] Add common name? [#114](https://github.com/broofa/mime/issues/114) -- [**closed**] application/x-yaml [#104](https://github.com/broofa/mime/issues/104) -- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/mime/issues/102) -- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/mime/issues/99) -- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/mime/issues/98) -- [**closed**] collaborators [#88](https://github.com/broofa/mime/issues/88) -- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/mime/issues/87) -- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/mime/issues/86) -- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/mime/issues/81) -- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/mime/issues/68) - ---- - -### v1.2.11 (15/08/2013) -- [**closed**] Update mime.types [#65](https://github.com/broofa/mime/issues/65) -- [**closed**] Publish a new version [#63](https://github.com/broofa/mime/issues/63) -- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/mime/issues/55) -- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/mime/issues/52) - ---- - -### v1.2.10 (25/07/2013) -- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/mime/issues/62) -- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/mime/issues/51) - ---- - -### v1.2.9 (17/01/2013) -- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/mime/issues/49) -- [**closed**] Please add semicolon [#46](https://github.com/broofa/mime/issues/46) -- [**closed**] parse full mime types [#43](https://github.com/broofa/mime/issues/43) - ---- - -### v1.2.8 (10/01/2013) -- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/mime/issues/47) -- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/mime/issues/45) - ---- - -### v1.2.7 (19/10/2012) -- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/mime/issues/41) -- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/mime/issues/36) -- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/mime/issues/30) -- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/mime/issues/27) diff --git a/node_modules/mime/LICENSE b/node_modules/mime/LICENSE deleted file mode 100644 index d3f46f7e..00000000 --- a/node_modules/mime/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -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. diff --git a/node_modules/mime/Mime.js b/node_modules/mime/Mime.js deleted file mode 100644 index 969a66e4..00000000 --- a/node_modules/mime/Mime.js +++ /dev/null @@ -1,97 +0,0 @@ -'use strict'; - -/** - * @param typeMap [Object] Map of MIME type -> Array[extensions] - * @param ... - */ -function Mime() { - this._types = Object.create(null); - this._extensions = Object.create(null); - - for (let i = 0; i < arguments.length; i++) { - this.define(arguments[i]); - } - - this.define = this.define.bind(this); - this.getType = this.getType.bind(this); - this.getExtension = this.getExtension.bind(this); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * If a type declares an extension that has already been defined, an error will - * be thrown. To suppress this error and force the extension to be associated - * with the new type, pass `force`=true. Alternatively, you may prefix the - * extension with "*" to map the type to extension, without mapping the - * extension to the type. - * - * e.g. mime.define({'audio/wav', ['wav']}, {'audio/x-wav', ['*wav']}); - * - * - * @param map (Object) type definitions - * @param force (Boolean) if true, force overriding of existing definitions - */ -Mime.prototype.define = function(typeMap, force) { - for (let type in typeMap) { - let extensions = typeMap[type].map(function(t) { - return t.toLowerCase(); - }); - type = type.toLowerCase(); - - for (let i = 0; i < extensions.length; i++) { - const ext = extensions[i]; - - // '*' prefix = not the preferred type for this extension. So fixup the - // extension, and skip it. - if (ext[0] === '*') { - continue; - } - - if (!force && (ext in this._types)) { - throw new Error( - 'Attempt to change mapping for "' + ext + - '" extension from "' + this._types[ext] + '" to "' + type + - '". Pass `force=true` to allow this, otherwise remove "' + ext + - '" from the list of extensions for "' + type + '".' - ); - } - - this._types[ext] = type; - } - - // Use first extension as default - if (force || !this._extensions[type]) { - const ext = extensions[0]; - this._extensions[type] = (ext[0] !== '*') ? ext : ext.substr(1); - } - } -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.getType = function(path) { - path = String(path); - let last = path.replace(/^.*[/\\]/, '').toLowerCase(); - let ext = last.replace(/^.*\./, '').toLowerCase(); - - let hasPath = last.length < path.length; - let hasDot = ext.length < last.length - 1; - - return (hasDot || !hasPath) && this._types[ext] || null; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.getExtension = function(type) { - type = /^\s*([^;\s]*)/.test(type) && RegExp.$1; - return type && this._extensions[type.toLowerCase()] || null; -}; - -module.exports = Mime; diff --git a/node_modules/mime/README.md b/node_modules/mime/README.md deleted file mode 100644 index b08316f2..00000000 --- a/node_modules/mime/README.md +++ /dev/null @@ -1,187 +0,0 @@ - -# Mime - -A comprehensive, compact MIME type module. - -[![Build Status](https://travis-ci.org/broofa/mime.svg?branch=master)](https://travis-ci.org/broofa/mime) - -## Version 2 Notes - -Version 2 is a breaking change from 1.x as the semver implies. Specifically: - -* `lookup()` renamed to `getType()` -* `extension()` renamed to `getExtension()` -* `charset()` and `load()` methods have been removed - -If you prefer the legacy version of this module please `npm install mime@^1`. Version 1 docs may be found [here](https://github.com/broofa/mime/tree/v1.4.0). - -## Install - -### NPM -``` -npm install mime -``` - -### Browser - -It is recommended that you use a bundler such as -[webpack](https://webpack.github.io/) or [browserify](http://browserify.org/) to -package your code. However, browser-ready versions are available via wzrd.in. -E.g. For the full version: - - - - -Or, for the `mime/lite` version: - - - - -## Quick Start - -For the full version (800+ MIME types, 1,000+ extensions): - -```javascript -const mime = require('mime'); - -mime.getType('txt'); // ⇨ 'text/plain' -mime.getExtension('text/plain'); // ⇨ 'txt' -``` - -See [Mime API](#mime-api) below for API details. - -## Lite Version - -There is also a "lite" version of this module that omits vendor-specific -(`*/vnd.*`) and experimental (`*/x-*`) types. It weighs in at ~2.5KB, compared -to 8KB for the full version. To load the lite version: - -```javascript -const mime = require('mime/lite'); -``` - -## Mime .vs. mime-types .vs. mime-db modules - -For those of you wondering about the difference between these [popular] NPM modules, -here's a brief rundown ... - -[`mime-db`](https://github.com/jshttp/mime-db) is "the source of -truth" for MIME type information. It is not an API. Rather, it is a canonical -dataset of mime type definitions pulled from IANA, Apache, NGINX, and custom mappings -submitted by the Node.js community. - -[`mime-types`](https://github.com/jshttp/mime-types) is a thin -wrapper around mime-db that provides an API drop-in compatible(ish) with `mime @ < v1.3.6` API. - -`mime` is, as of v2, a self-contained module bundled with a pre-optimized version -of the `mime-db` dataset. It provides a simplified API with the following characteristics: - -* Intelligently resolved type conflicts (See [mime-score](https://github.com/broofa/mime-score) for details) -* Method naming consistent with industry best-practices -* Compact footprint. E.g. The minified+compressed sizes of the various modules: - -Module | Size ---- | --- -`mime-db` | 18 KB -`mime-types` | same as mime-db -`mime` | 8 KB -`mime/lite` | 2 KB - -## Mime API - -Both `require('mime')` and `require('mime/lite')` return instances of the MIME -class, documented below. - -Note: Inputs to this API are case-insensitive. Outputs (returned values) will -be lowercase. - -### new Mime(typeMap, ... more maps) - -Most users of this module will not need to create Mime instances directly. -However if you would like to create custom mappings, you may do so as follows -... - -```javascript -// Require Mime class -const Mime = require('mime/Mime'); - -// Define mime type -> extensions map -const typeMap = { - 'text/abc': ['abc', 'alpha', 'bet'], - 'text/def': ['leppard'] -}; - -// Create and use Mime instance -const myMime = new Mime(typeMap); -myMime.getType('abc'); // ⇨ 'text/abc' -myMime.getExtension('text/def'); // ⇨ 'leppard' -``` - -If more than one map argument is provided, each map is `define()`ed (see below), in order. - -### mime.getType(pathOrExtension) - -Get mime type for the given path or extension. E.g. - -```javascript -mime.getType('js'); // ⇨ 'application/javascript' -mime.getType('json'); // ⇨ 'application/json' - -mime.getType('txt'); // ⇨ 'text/plain' -mime.getType('dir/text.txt'); // ⇨ 'text/plain' -mime.getType('dir\\text.txt'); // ⇨ 'text/plain' -mime.getType('.text.txt'); // ⇨ 'text/plain' -mime.getType('.txt'); // ⇨ 'text/plain' -``` - -`null` is returned in cases where an extension is not detected or recognized - -```javascript -mime.getType('foo/txt'); // ⇨ null -mime.getType('bogus_type'); // ⇨ null -``` - -### mime.getExtension(type) -Get extension for the given mime type. Charset options (often included in -Content-Type headers) are ignored. - -```javascript -mime.getExtension('text/plain'); // ⇨ 'txt' -mime.getExtension('application/json'); // ⇨ 'json' -mime.getExtension('text/html; charset=utf8'); // ⇨ 'html' -``` - -### mime.define(typeMap[, force = false]) - -Define [more] type mappings. - -`typeMap` is a map of type -> extensions, as documented in `new Mime`, above. - -By default this method will throw an error if you try to map a type to an -extension that is already assigned to another type. Passing `true` for the -`force` argument will suppress this behavior (overriding any previous mapping). - -```javascript -mime.define({'text/x-abc': ['abc', 'abcd']}); - -mime.getType('abcd'); // ⇨ 'text/x-abc' -mime.getExtension('text/x-abc') // ⇨ 'abc' -``` - -## Command Line - - mime [path_or_extension] - -E.g. - - > mime scripts/jquery.js - application/javascript - ----- -Markdown generated from [src/README_js.md](src/README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js deleted file mode 100644 index ab70a49c..00000000 --- a/node_modules/mime/cli.js +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -process.title = 'mime'; -let mime = require('.'); -let pkg = require('./package.json'); -let args = process.argv.splice(2); - -if (args.includes('--version') || args.includes('-v') || args.includes('--v')) { - console.log(pkg.version); - process.exit(0); -} else if (args.includes('--name') || args.includes('-n') || args.includes('--n')) { - console.log(pkg.name); - process.exit(0); -} else if (args.includes('--help') || args.includes('-h') || args.includes('--h')) { - console.log(pkg.name + ' - ' + pkg.description + '\n'); - console.log(`Usage: - - mime [flags] [path_or_extension] - - Flags: - --help, -h Show this message - --version, -v Display the version - --name, -n Print the name of the program - - Note: the command will exit after it executes if a command is specified - The path_or_extension is the path to the file or the extension of the file. - - Examples: - mime --help - mime --version - mime --name - mime -v - mime src/log.js - mime new.py - mime foo.sh - `); - process.exit(0); -} - -let file = args[0]; -let type = mime.getType(file); - -process.stdout.write(type + '\n'); - diff --git a/node_modules/mime/index.js b/node_modules/mime/index.js deleted file mode 100644 index fadcf8d6..00000000 --- a/node_modules/mime/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -let Mime = require('./Mime'); -module.exports = new Mime(require('./types/standard'), require('./types/other')); diff --git a/node_modules/mime/lite.js b/node_modules/mime/lite.js deleted file mode 100644 index 835cffb3..00000000 --- a/node_modules/mime/lite.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; - -let Mime = require('./Mime'); -module.exports = new Mime(require('./types/standard')); diff --git a/node_modules/mime/package.json b/node_modules/mime/package.json deleted file mode 100644 index df7f369b..00000000 --- a/node_modules/mime/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "url": "http://github.com/broofa", - "email": "robert@broofa.com" - }, - "engines": { - "node": ">=4.0.0" - }, - "bin": { - "mime": "cli.js" - }, - "contributors": [], - "description": "A comprehensive library for mime-type mapping", - "license": "MIT", - "dependencies": {}, - "devDependencies": { - "benchmark": "*", - "chalk": "4.1.2", - "eslint": "8.1.0", - "mime-db": "1.50.0", - "mime-score": "1.2.0", - "mime-types": "2.1.33", - "mocha": "9.1.3", - "runmd": "*", - "standard-version": "9.3.2" - }, - "files": [ - "index.js", - "lite.js", - "Mime.js", - "cli.js", - "/types" - ], - "scripts": { - "prepare": "node src/build.js && runmd --output README.md src/README_js.md", - "release": "standard-version", - "benchmark": "node src/benchmark.js", - "md": "runmd --watch --output README.md src/README_js.md", - "test": "mocha src/test.js" - }, - "keywords": [ - "util", - "mime" - ], - "name": "mime", - "repository": { - "url": "https://github.com/broofa/mime", - "type": "git" - }, - "version": "2.6.0" -} diff --git a/node_modules/mime/types/other.js b/node_modules/mime/types/other.js deleted file mode 100644 index bb6a0353..00000000 --- a/node_modules/mime/types/other.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {"application/prs.cww":["cww"],"application/vnd.1000minds.decision-model+xml":["1km"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.keynote":["key"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.numbers":["numbers"],"application/vnd.apple.pages":["pages"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.balsamiq.bmml+xml":["bmml"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.citationstyles.style+xml":["csl"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dbf":["dbf"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mapbox-vector-tile":["mvt"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["*stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.ac+xml":["*ac"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openblox.game+xml":["obgx"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openstreetmap.data+xml":["osm"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.rar":["rar"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.software602.filler.form+xml":["fo"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.syncml.dmddf+xml":["ddf"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":["*dmg"],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":["*bdoc"],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["*deb","udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":["*iso"],"application/x-iwork-keynote-sffkey":["*key"],"application/x-iwork-numbers-sffnumbers":["*numbers"],"application/x-iwork-pages-sffpages":["*pages"],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-keepass2":["kdbx"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":["*exe"],"application/x-msdownload":["*exe","*dll","com","bat","*msi"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["*wmf","*wmz","*emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":["*prc","*pdb"],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["*rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["*obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["*xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":["*m4a"],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":["*ra"],"audio/x-wav":["*wav"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"image/prs.btif":["btif"],"image/prs.pti":["pti"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.airzip.accelerator.azv":["azv"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":["*sub"],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.microsoft.icon":["ico"],"image/vnd.ms-dds":["dds"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.pco.b16":["b16"],"image/vnd.tencent.tap":["tap"],"image/vnd.valve.source.texture":["vtf"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/vnd.zbrush.pcx":["pcx"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["*ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":["*bmp"],"image/x-pcx":["*pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/vnd.wfa.wsc":["wsc"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.opengex":["ogex"],"model/vnd.parasolid.transmit.binary":["x_b"],"model/vnd.parasolid.transmit.text":["x_t"],"model/vnd.sap.vds":["vds"],"model/vnd.usdz+zip":["usdz"],"model/vnd.valve.source.compiled-map":["bsp"],"model/vnd.vtu":["vtu"],"text/prs.lines.tag":["dsc"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":["*org"],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]}; \ No newline at end of file diff --git a/node_modules/mime/types/standard.js b/node_modules/mime/types/standard.js deleted file mode 100644 index 5ee9937e..00000000 --- a/node_modules/mime/types/standard.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = {"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]}; \ No newline at end of file From cd536541fb4dca34679026cee3d4d9cbc9e4d4f9 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Sun, 10 Sep 2023 22:04:27 -0400 Subject: [PATCH 03/13] fixing favicon --- public/index.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/public/index.html b/public/index.html index f9d99501..4454e260 100644 --- a/public/index.html +++ b/public/index.html @@ -8,9 +8,7 @@ - - - + From dad761263808e284ecda5d3c17f6b889276f4fa0 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Sun, 10 Sep 2023 22:07:36 -0400 Subject: [PATCH 04/13] fix --- public/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/index.html b/public/index.html index 4454e260..385cb3ea 100644 --- a/public/index.html +++ b/public/index.html @@ -6,8 +6,8 @@ - - + + From 71ed49f73236e66257a289e6bc6df70aae50f388 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Mon, 11 Sep 2023 01:32:21 -0400 Subject: [PATCH 05/13] finished baseline requirements and technical achievements --- README.md | 133 +++++++++++++++++------------------------- package.json | 6 +- public/css/main.css | 14 ++--- public/index.html | 65 ++++++++++++++++++++- public/js/display.js | 5 +- public/js/main.js | 134 +++++++++++++++++++++++++++++++++++-------- server.improved.js | 79 +++++++++++++++++++++---- 7 files changed, 307 insertions(+), 129 deletions(-) diff --git a/README.md b/README.md index 493995c1..2f2cec59 100644 --- a/README.md +++ b/README.md @@ -1,100 +1,75 @@ +Thea Caplan + Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js === - Due: September 11th, by 11:59 AM. +=== -This assignment aims to introduce you to creating a prototype two-tiered web application. -Your application will include the use of HTML, CSS, JavaScript, and Node.js functionality, with active communication between the client and the server over the life of a user session. +## College Schedule Maker +This application is a class schedule maker that allows users to input their classes and view a table representation of the class schedule by day. Users can add, remove, and modify classes as desired. It is a single-page application that shows the current status of the server (stored data) at all times. CSS grid positioning was used to format the application. -Baseline Requirements ---- +The application includes the use of HTML, CSS, JavaScript, and Node.js functionality, with active communication between the client and the server over the life of a user session. -There is a large range of application areas and possibilities that meet these baseline requirements. -Try to make your application do something useful! A todo list, storing / retrieving high scores for a very simple game... have a little fun with it. +My tabular dataset: +An object array of class information, where each class has: +1. Name (required) +2. Class Code (optional) +3. Start Time (required) +4. End Time (required) +5. Days the class meets (at least 1 required) +6. Length of the class (derived) -Your application is required to implement the following functionalities: - -- a `Server` which not only serves files, but also maintains a tabular dataset with 3 or more fields related to your application -- a `Results` functionality which shows the entire dataset residing in the server's memory -- a `Form/Entry` functionality which allows a user to add or delete data items residing in the server's memory -- a `Server Logic` which, upon receiving new or modified "incoming" data, includes and uses a function that adds at least one additional derived field to this incoming data before integrating it with the existing dataset -- the `Derived field` for a new row of data must be computed based on fields already existing in the row. -For example, a `todo` dataset with `task`, `priority`, and `creation_date` may generate a new field `deadline` by looking at `creation_date` and `priority` +## Technical Achievements +**Created a Single-Page App**: The application is a one page application where the dataset stored in the server is updated in real time whenever a change is made to the dataset (submitting, removing, or modifying data) + +**Modification Of Data Enabled**: Along with adding and removing data from the server, users are allowed to modify existing data through the modification form. + +## Design/Evaluation Achievements +**Think-Aloud Protocol**: Ran ___ think-aloud(s) to test the design of the website. +- Prompt: Add 2 of your classes to the schedule, then modify 1 class to have class on a Sunday. +Student 1: +1. Last Name: +2. Problems: +3. Surprising Comments: +4. Changes based on feedback: +Student 2: +1. Last Name: +2. Problems: +3. Surprising Comments: +4. Changes based on feedback: + +## Baseline Requirements +--- +- a `Server` (ADDED) +- a `Results` functionality (ADDED) +- a `Form/Entry` functionality (ADDED) +- a `Server Logic` (ADDED) +- the `Derived field` (ADDED) Your application is required to demonstrate the use of the following concepts: HTML: -- One or more [HTML Forms](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms), with any combination of form tags appropriate for the user input portion of the application -- A results page displaying all data currently available on the server. You will most likely use a `` tag for this, but `
    ` or `
      ` could also work and might be simpler to work with. Alternatively, you can create a single-page app (see Technical Acheivements) but this is not a requirement. -- All pages should [validate](https://validator.w3.org) -- If your app contains multple pages, they should all be accessible from the homepage (index.html) +- One or more [HTML Forms](https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms) (ADDED (3 forms for adding, removal, and modifying) (text, time, select, and checkbox inputs)) +- A results page displaying all data currently available on the server. (ADDED (single page app - data showed in table)) +- All pages should [validate](https://validator.w3.org) (PAGE VALIDATES) +- If your app contains multple pages, they should all be accessible from the homepage (index.html) (NOT INCLUDED - using a single page application - no navigation neccessary) CSS: - CSS styling of the primary visual elements in the application + The forms are boxed in and organized to be readable. + The data table that shows all the information in the dataset is colored with alternating row colors for readability. - Various CSS Selector functionality must be demonstrated: - - Element selectors - - ID selectors - - Class selectors + - Element selectors (body, header, main, td, fieldset label, section, article, h3, h2) + - ID selectors (singleClassDisplay, leftContent, rightContent) + - Class selectors (grid-item, grid-container, left, right, column) - CSS positioning and styling of the primary visual elements in the application: - - Use of either a CSS grid or flexbox for layout - - Rules defining fonts for all text used; no default fonts! Be sure to use a web safe font or a font from a web service like [Google Fonts](http://fonts.google.com/) + - Use of either a CSS grid or flexbox for layout (ADDED - using grid) + - Rules defining fonts for all text used; no default fonts! (ADDED - using courier) -- CSS defined in a maintainable, readable form, in external stylesheets +- CSS defined in a maintainable, readable form, in external stylesheets (1 CSS file) JavaScript: -- At minimum, a small amount of front-end JavaScript to get / fetch data from the server; a sample is provided in this repository. +- front-end JavaScript to get / fetch data from the server (ADDED) Node.js: -- An HTTP Server that delivers all necessary files and data for the application, and also creates the required `Derived Fields` in your data. -A starting point is provided in this repository. - -Deliverables ---- - -Do the following to complete this assignment and acheive a base grade of 85%: - -1. Fork the starting project code (make sure to fork the 2023 repo!). This repo contains some starter code that may be used or discarded as needed. -2. Implement your project with the above requirements. -3. Test your project to make sure that when someone goes to your main page, it displays correctly. -4. Deploy your project to Glitch, and fill in the appropriate fields in your package.json file. -5. Ensure that your project has the proper naming scheme `a2-yourGithubUsername` so we can find it. -6. Modify the README to the specifications below, and delete all of the instructions originally found in this README. -7. Create and submit a Pull Request to the original repo. Label the pull request as follows: a2-gitusername-firstname-lastname - -Acheivements ---- - -Below are suggested technical and design achievements. You can use these to help boost your grade up to an A and customize the assignment to your personal interests. These are recommended acheivements, but feel free to create/implement your own... just make sure you thoroughly describe what you did in your README and why it was challenging. ALL ACHIEVEMENTS MUST BE DESCRIBED IN YOUR README IN ORDER TO GET CREDIT FOR THEM. Remember, the highest grade you can get on any individual assignment is a 100%. - -*Technical* -- (5 points) Create a single-page app that both provides a form for users to submit data and always shows the current state of the server-side data. To put it another way, when the user submits data, the server should respond sending back the updated data (including the derived field calculated on the server) and the client should then update its data display. - -- (5 points) In addition to a form enabling adding and deleting data on the server, also add the ability to modify existing data. - -*Design/UX* -- (5 points per person, with a max of 10 points) Test your user interface with other students in the class. Define a specific task for them to complete (ideally something short that takes <10 minutes), and then use the [think-aloud protocol](https://en.wikipedia.org/wiki/Think_aloud_protocol) to obtain feedback on your design (talk-aloud is also fine). Important considerations when designing your study: - -1. Make sure you start the study by clearly stating the task that you expect your user to accomplish. -2. You shouldn't provide any verbal instructions on how to use your interface / accomplish the task you give them. Make sure that your interface is clear enough that users can figure it out without any instruction, or provide text instructions from within the interface itself. -3. If users get stuck to the point where they give up, you can then provde instruction so that the study can continue, but make sure to discuss this in your README. You won't lose any points for this... all feedback is good feedback! - -You'll need to use sometype of collaborative software that will enable you both to see the test subject's screen and listen to their voice as they describe their thoughts, or conduct the studies in person. After completing each study, briefly (one to two sentences for each question) address the following in your README: - -1. Provide the last name of each student you conduct the evaluation with. -2. What problems did the user have with your design? -3. What comments did they make that surprised you? -4. What would you change about the interface based on their feedback? - -*You do not need to actually make changes based on their feedback*. This acheivement is designed to help gain experience testing user interfaces. If you run two user studies, you should answer two sets of questions. - -Sample Readme (delete the above when you're ready to submit, and modify the below so with your links and descriptions) ---- - -## Your Web Application Title -Include a very brief summary of your project here. Be sure to include the CSS positioning technique you used, and any required instructions to use your application. - -## Technical Achievements -- **Tech Achievement 1**: Using a combination of... - -### Design/Evaluation Achievements -- **Design Achievement 1**: +- An HTTP Server that delivers all necessary files and data for the application, and also creates the required `Derived Fields` in your data. (ADDED) \ No newline at end of file diff --git a/package.json b/package.json index 2fbe673f..bd2219a5 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "", + "name": "a2_assignment", "version": "", - "description": "", - "author": "", + "description": "College Schedule Maker", + "author": "Thea Caplan", "scripts": { "start": "node server.improved.js" }, diff --git a/public/css/main.css b/public/css/main.css index 3aa0ec65..f1b3c62f 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -31,6 +31,8 @@ form { text-align: center; padding: 10px; padding-bottom: 20px; + text-align: center; + display: inline-block; } .grid-container { @@ -63,14 +65,6 @@ form { grid-column: 2 / 2; } -section { - text-align: center; -} - -article { - text-align: center; -} - section article { margin-bottom: 50px; } @@ -95,6 +89,10 @@ fieldset label { } .classDisplay h2 { + font-size: larger; +} + +.classDisplay h3 { font-size: large; } diff --git a/public/index.html b/public/index.html index 385cb3ea..115e173d 100644 --- a/public/index.html +++ b/public/index.html @@ -6,8 +6,8 @@ + - @@ -19,8 +19,9 @@

      College Schedule Maker

      +

      Forms

      -

      Enter New Class

      +

      Enter New Class

      @@ -73,7 +74,7 @@

      Enter New Class

      -

      Remove A Class

      +

      Remove A Class

      @@ -90,6 +91,64 @@

      Remove A Class

      +
      +

      Modify a Class

      +
      +
      +
      + Choose Class to Remove +
      + +
      +
      +
      + + +

      +
      +
      + + +

      +
      +
      +
      +
      + + +

      +
      +
      + + +

      +
      +
      +
      +
      + Days of the Week + + + + + + + + + + + + + + +
      +

      +
      +
      + + + +

      Current Schedule

      diff --git a/public/js/display.js b/public/js/display.js index e1fae598..72667d07 100644 --- a/public/js/display.js +++ b/public/js/display.js @@ -106,7 +106,7 @@ function classDisplay(classObj) { box.className = 'classDisplay' const add = (tag, inner) => { - if(typeof inner === "undefined") { + if(inner === "") { box.appendChild(document.createElement('br')) return box } @@ -116,8 +116,9 @@ function classDisplay(classObj) { } add('h2', classObj.Name) - add('p', classObj.code) + add('p', classObj.Code) add('p', classObj.StartTime + " - " + classObj.EndTime) + add('p', Object.values(classObj.Days).toString()) add('p', classObj.Length + ` hour${classObj.Length === 1 ? '' : 's'}`) return box diff --git a/public/js/main.js b/public/js/main.js index 6effc174..a0b57f0e 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -6,25 +6,12 @@ const submit = async function( event ) { // this was the original browser behavior and still // remains to this day event.preventDefault() - - const getDays = _ => { - var days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] - var selected = {} - days = days.map(day => document.getElementById(day)) - counter = 0 - days.forEach( el => { - if(el.checked) { - selected['pos' + counter++] = el.value - } - }) - return selected - }; const Name = document.getElementById( 'className' ).value, Code = document.getElementById( 'classCode' ).value, StartTime = document.getElementById('startTime').value, EndTime = document.getElementById('endTime').value, - Days = getDays(), + Days = getDays(''), json = { Name, Code, StartTime, @@ -39,7 +26,7 @@ const submit = async function( event ) { const responseJSON = await response.json() - console.log( 'submit - received:', JSON.stringify(responseJSON) ) + // console.log( 'submit - received:', JSON.stringify(responseJSON) ) if('errors' in responseJSON) { // there has been an error // show warning messages for (const [key, val] of Object.entries(responseJSON)) { @@ -71,12 +58,12 @@ const getAll = async function getAll( ) { const data = await response.json(); - console.log( 'getAll - received:', data ) + // console.log( 'getAll - received:', data ) displaySchedule(data) - const classDropdown = document.getElementById("classSelect") - addClassesTo(classDropdown).then(showClass) + addClassesTo(document.getElementById("classSelect")).then(showClass) + addClassesTo(document.getElementById("classModifySelect")).then(loadClass) } const remove = async function( event ) { @@ -105,6 +92,78 @@ const remove = async function( event ) { } +const modify = async function( event ) { + // stop form submission from trying to load + // a new .html page for displaying results... + // this was the original browser behavior and still + // remains to this day + event.preventDefault() + + const prev = document.getElementById('classModifySelect').value, + Name = document.getElementById( 'className2' ).value, + Code = document.getElementById( 'classCode2' ).value, + StartTime = document.getElementById('startTime2').value, + EndTime = document.getElementById('endTime2').value, + Days = getDays('2'), + json = { prev, + 'new': { Name, + Code, + StartTime, + EndTime, + Days }, + } + body = JSON.stringify( json ) + + const response = await fetch( '/modify', { + method:'POST', + body + }) + + const responseJSON = await response.json() + + if('errors' in responseJSON) { // there has been an error + // show warning messages + for (const [key, val] of Object.entries(responseJSON)) { + const el = document.getElementById(key + '2Warning'); + if(typeof el !== 'undefined' && el !== null) { + if (val !== true) { // there is an error + el.innerHTML = val + } else { // no error + el.innerHTML = '' + } + } + } + } else { // remove all warning labels + const warnings = document.getElementsByClassName('warning') + for ( element of warnings) { + element.innerHTML = '' + } + } + + getAll() + + getAll() +} + +const getDays = (id) => { + var days = ['monday' + id, + 'tuesday' + id, + 'wednesday' + id, + 'thursday' + id, + 'friday' + id, + 'saturday' + id, + 'sunday' + id] + var selected = {} + days = days.map(day => document.getElementById(day)) + counter = 0 + days.forEach( el => { + if(el.checked) { + selected['pos' + counter++] = el.value + } + }) + return selected +}; + const addClassesTo = async function ( dropdown ) { const response = await fetch( '/getAll', { method:'POST' @@ -112,7 +171,7 @@ const addClassesTo = async function ( dropdown ) { const data = await response.json() - console.log('getAll - received: ', data) + // console.log('getAll - received: ', data) dropdown.textContent = '' // clears the dropdown @@ -129,13 +188,40 @@ const addClassesTo = async function ( dropdown ) { } } +const loadClass = function ( ) { + + const dropdown = document.getElementById('classModifySelect') + const data = JSON.parse(dropdown.value) + document.getElementById('className2').value = data.Name + document.getElementById('classCode2').value = data.Code + document.getElementById('startTime2').value = data.StartTime + document.getElementById('endTime2').value = data.EndTime + const days = ['monday2', 'tuesday2', 'wednesday2', 'thursday2', 'friday2', 'saturday2', 'sunday2'] + for(day of days) { + document.getElementById(day).checked = "" + } + Object.values(data.Days).forEach( day => { + switch(day) { + case 'M': document.getElementById('monday2').checked = "checked"; break; + case 'T': document.getElementById('tuesday2').checked = "checked"; break; + case 'W': document.getElementById('wednesday2').checked = "checked"; break; + case 'Th': document.getElementById('thursday2').checked = "checked"; break; + case 'F': document.getElementById('friday2').checked = "checked"; break; + case 'Sa': document.getElementById('saturday2').checked = "checked"; break; + case 'Su': document.getElementById('sunday2').checked = "checked"; break; + } + }) +} + window.onload = function() { document.getElementById("submitAdd").onclick = submit; document.getElementById("submitRemove").onclick = remove; - const classDropdown = document.getElementById("classSelect") - addClassesTo(classDropdown) - classDropdown.onclick = showClass - showClass() - + document.getElementById("submitModify").onclick = modify; + const removeDropdown = document.getElementById("classSelect") + const modifyDropdown = document.getElementById("classModifySelect") + addClassesTo(removeDropdown) + removeDropdown.onclick = showClass + addClassesTo(modifyDropdown) + modifyDropdown.onclick = loadClass getAll(); } \ No newline at end of file diff --git a/server.improved.js b/server.improved.js index 77ef70a7..3e72a768 100644 --- a/server.improved.js +++ b/server.improved.js @@ -44,6 +44,8 @@ const handlePost = function( request, response ) { handleGetAll( request, response ) } else if(request.url === '/remove') { handleRemove( request, response ) + } else if(request.url === '/modify') { + handleModify( request, response ) } else { console.log('FAIL - requested: ' + request.url) } @@ -53,7 +55,7 @@ const handleGetAll = function(request, response) { request.on( 'data', () => {}) request.on( 'end', function() { response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) - console.log('getAll - sending: ' + JSON.stringify(appdata)) + // console.log('getAll - sending: ' + JSON.stringify(appdata)) response.end(JSON.stringify(appdata)) }) } @@ -66,7 +68,7 @@ const handleSubmit = function(request, response) { }) request.on( 'end', function() { - console.log( 'submit - received: ' + JSON.parse( dataString ) ) + // console.log( 'submit - received: ' + JSON.parse( dataString ) ) json = JSON.parse( dataString ) @@ -77,22 +79,19 @@ const handleSubmit = function(request, response) { if(error.errors === false) { // no errors // calculate the derived field (length of class) - const start = new Date('1970-01-01T' + json.StartTime + ":00") - const end = new Date('1970-01-01T' + json.EndTime + ":00") - const msPerHour = 1000 * 60 * 60 - json['Length'] = Math.round(((end-start) / msPerHour) * 100) / 100 + json['Length'] = calcDerivedLength(json.StartTime, json.EndTime) // add to the server data appdata.push( json ) - console.log('submit - new data: ' + JSON.stringify(appdata)) + // console.log('submit - new data: ' + JSON.stringify(appdata)) response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) response.end(JSON.stringify({})) } else { // send back error message - console.log('submit - error: ' + JSON.stringify(error)) + // console.log('submit - error: ' + JSON.stringify(error)) response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) response.end( JSON.stringify(error) ) } @@ -107,7 +106,7 @@ const handleRemove = function(request, response) { }) request.on( 'end', function() { - console.log( 'remove - received: ' + JSON.parse( dataString ) ) + // console.log( 'remove - received: ' + JSON.parse( dataString ) ) json = JSON.parse( dataString ) @@ -128,7 +127,7 @@ const handleRemove = function(request, response) { response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) response.end('success') - console.log('success') + console.log('remove - success') break } else { i++ @@ -143,6 +142,58 @@ const handleRemove = function(request, response) { }) } +const handleModify = function(request, response) { + let dataString = '' + + request.on( 'data', function( data ) { + dataString += data + }) + + request.on( 'end', function() { + console.log( 'modify - received: ' + dataString ) + + json = JSON.parse( dataString ) + + prev = json.prev + data = json.new + + // validate the new values + const error = validate(data); + + if(error.errors === false) { + // find the data to modify + let i = 0; + const max = appdata.length + for(obj of appdata) { + if(JSON.stringify(obj) === prev) { + + obj.Name = data.Name + obj.Code = data.Code + obj.StartTime = data.StartTime + obj.EndTime = data.EndTime + obj.Length = calcDerivedLength(data.StartTime, data.EndTime) + + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end(JSON.stringify({})) + console.log('modify - success') + break + } else { + i++ + } + } + if(i >= max) { + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end(JSON.stringify(error)) + console.log('failed to modify') + } + } else { // send back error message + console.log('modify - error: ' + JSON.stringify(error)) + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end( JSON.stringify(error) ) + } + }) +} + const sendFile = function( response, filename ) { const type = mime.getType( filename ) @@ -203,4 +254,12 @@ const validate = data => { return error; }; +const calcDerivedLength = (start, end) => { + // calculate the derived field (length of class) + const s = new Date('1970-01-01T' + start + ":00") + const e = new Date('1970-01-01T' + end + ":00") + const msPerHour = 1000 * 60 * 60 + return Math.round(((e-s) / msPerHour) * 100) / 100 +} + server.listen( process.env.PORT || port ) \ No newline at end of file From 4d67feeacac14f4c15c774c336c63af1049ca783 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Mon, 11 Sep 2023 01:38:20 -0400 Subject: [PATCH 06/13] added link --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2f2cec59..00638b69 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ Thea Caplan +Link: https://a2-tcaplan.glitch.me Assignment 2 - Short Stack: Basic Two-tier Web Application using HTML/CSS/JS and Node.js === From b20a81e6c12eb7d647e14db3c298518ce16a3452 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Mon, 11 Sep 2023 11:27:49 -0400 Subject: [PATCH 07/13] fixing formatting --- public/css/main.css | 5 +---- public/index.html | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/public/css/main.css b/public/css/main.css index f1b3c62f..23d4a7bf 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -2,10 +2,6 @@ body { margin: 0; font-family: "Courier Prime", monospace; - background-color: #9E768F; -} - -body { background:rgb(40, 40, 40); color:white; } @@ -55,6 +51,7 @@ form { .grid-item .left { float: left; + padding-left: 10px; } #leftContent { diff --git a/public/index.html b/public/index.html index 115e173d..e926c8bc 100644 --- a/public/index.html +++ b/public/index.html @@ -3,10 +3,10 @@ CS4241 Assignment 2 - - + + @@ -27,24 +27,24 @@

      Enter New Class

      - +

      - +

      - +

      - +

      @@ -103,24 +103,24 @@

      Modify a Class

      - +

      - +

      - +

      - +

      From c10a78517c47dd959f1714e11d6e5823f27fd608 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Mon, 11 Sep 2023 12:39:12 -0400 Subject: [PATCH 08/13] reformatted to have forms on top --- public/css/main.css | 25 ++++- public/index.html | 251 ++++++++++++++++++++++--------------------- public/js/display.js | 44 +++----- public/js/main.js | 49 +++++---- server.improved.js | 72 +++++++------ 5 files changed, 236 insertions(+), 205 deletions(-) diff --git a/public/css/main.css b/public/css/main.css index 23d4a7bf..49fe316b 100644 --- a/public/css/main.css +++ b/public/css/main.css @@ -34,6 +34,7 @@ form { .grid-container { display: grid; max-width: fit-content; + text-align: center; } .grid-item { @@ -44,6 +45,11 @@ form { padding-right: 5px; } +.grid-row { + display: grid; + text-align: center; +} + .grid-item .right { float: right; padding-left: 10px; @@ -58,11 +64,15 @@ form { grid-column: 1 / 2; } +#middleContent { + grid-column: 2 / 3; +} + #rightContent { - grid-column: 2 / 2; + grid-column: 3 / 3; } -section article { +.classForm { margin-bottom: 50px; } @@ -102,4 +112,15 @@ fieldset label { padding: 10px; padding-left: 30px; padding-right: 30px; +} + +/* Schedule Display */ + +#dataView { + margin: 0 auto; + margin-bottom: 50px; +} + +#dataView th { + padding: 5px 5px 10px 10px; } \ No newline at end of file diff --git a/public/index.html b/public/index.html index e926c8bc..c73dceba 100644 --- a/public/index.html +++ b/public/index.html @@ -4,7 +4,9 @@ CS4241 Assignment 2 - + + + @@ -17,144 +19,147 @@

      College Schedule Maker

      - -
      -

      Forms

      -
      -

      Enter New Class

      -
      -
      -
      -
      - - -

      -
      -
      - - -

      +
      +
      +
      +

      Enter New Class

      + +
      +
      +
      + + +

      +
      +
      + + +

      +
      -
      -
      -
      - - -

      +
      +
      + + +

      +
      +
      + + +

      +
      -
      - - -

      +
      +
      + Days of the Week + + + + + + + + + + + + + + +
      +

      -
      -
      - Days of the Week - - - - - - - - - - - - - - -
      -

      -
      -
      - - - -
      -
      -

      Remove A Class

      -
      -
      -
      -
      + + + +
      +
      +
      +
      +

      Remove A Class

      +
      +
      +
      Choose Class to Remove
      -
      -
      +
      +
      +
      -
      - - -
      -
      -

      Modify a Class

      -
      -
      -
      - Choose Class to Remove -
      - -
      -
      -
      - - -

      + + +
      +
      +
      +
      +

      Modify a Class

      +
      +
      +
      + Choose Class to Remove +
      + +

      -
      - - -

      +
      +
      + + +

      +
      +
      + + +

      +
      -
      -
      -
      - - -

      +
      +
      + + +

      +
      +
      + + +

      +
      -
      - - -

      +
      +
      + Days of the Week + + + + + + + + + + + + + + +
      +

      -
      -
      - Days of the Week - - - - - - - - - - - - - - -
      -

      -
      -
      - - - -
      -
      -
      + + + + + + +

      Current Schedule

      -
-
- +
+ diff --git a/public/js/display.js b/public/js/display.js index 72667d07..dd85dc27 100644 --- a/public/js/display.js +++ b/public/js/display.js @@ -1,29 +1,5 @@ -function displayScheduleOld(table, data) { - // make the headers - var row = table.insertRow(-1); - Object.keys( data[0]).forEach(key => { - var headerCell = document.createElement("th"); - headerCell.innerHTML = key - row.appendChild(headerCell) - }); - - // display the data - data.forEach(obj => { - row = table.insertRow(-1); - for (const [key, val] of Object.entries(obj)) { - var cell = row.insertCell(-1) - if(key === 'Days') { - cell.innerHTML = Object.values(val).toString() - } else { - cell.innerHTML = val - } - } - }); -} - function displaySchedule(data) { // make the headers - const daysOfWeek = { Su: "Sunday", M: "Monday", @@ -34,7 +10,7 @@ function displaySchedule(data) { Sa: "Saturday" }; - var table = document.getElementById('dataView2') + var table = document.getElementById('dataView') table.textContent = '' // clear the table // create the weekday headers @@ -97,11 +73,11 @@ function displaySchedule(data) { day++; }) - console.log(schedule) + // console.log(schedule) } // display a singular class cell -function classDisplay(classObj) { +function classDisplay(classObj, showDay=false) { const box = document.createElement('div'); box.className = 'classDisplay' @@ -118,7 +94,9 @@ function classDisplay(classObj) { add('h2', classObj.Name) add('p', classObj.Code) add('p', classObj.StartTime + " - " + classObj.EndTime) - add('p', Object.values(classObj.Days).toString()) + if(showDay) { + add('p', Object.values(classObj.Days).toString()) + } add('p', classObj.Length + ` hour${classObj.Length === 1 ? '' : 's'}`) return box @@ -127,7 +105,13 @@ function classDisplay(classObj) { const showClass = () => { const data = document.getElementById("classSelect").value const display = document.getElementById("singleClassDisplay") - display.innerText = '' + display.innerText = "" + + // re-add the legend + const legend = document.createElement('legend') + legend.innerHTML = "Class to Remove" + display.appendChild(legend) + if(typeof data === "undefined" || data === "") { display.appendChild(document.createElement('br')) let temp1 = document.createElement('p') @@ -138,7 +122,7 @@ const showClass = () => { display.appendChild(temp2) display.appendChild(document.createElement('br')) } else { - display.appendChild(classDisplay(JSON.parse(data))) + display.appendChild(classDisplay(JSON.parse(data), true)) } } \ No newline at end of file diff --git a/public/js/main.js b/public/js/main.js index a0b57f0e..b55eb3cd 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -191,26 +191,37 @@ const addClassesTo = async function ( dropdown ) { const loadClass = function ( ) { const dropdown = document.getElementById('classModifySelect') - const data = JSON.parse(dropdown.value) - document.getElementById('className2').value = data.Name - document.getElementById('classCode2').value = data.Code - document.getElementById('startTime2').value = data.StartTime - document.getElementById('endTime2').value = data.EndTime - const days = ['monday2', 'tuesday2', 'wednesday2', 'thursday2', 'friday2', 'saturday2', 'sunday2'] - for(day of days) { - document.getElementById(day).checked = "" - } - Object.values(data.Days).forEach( day => { - switch(day) { - case 'M': document.getElementById('monday2').checked = "checked"; break; - case 'T': document.getElementById('tuesday2').checked = "checked"; break; - case 'W': document.getElementById('wednesday2').checked = "checked"; break; - case 'Th': document.getElementById('thursday2').checked = "checked"; break; - case 'F': document.getElementById('friday2').checked = "checked"; break; - case 'Sa': document.getElementById('saturday2').checked = "checked"; break; - case 'Su': document.getElementById('sunday2').checked = "checked"; break; + if(dropdown.value == "") { + document.getElementById('className2').value = "" + document.getElementById('classCode2').value = "" + document.getElementById('startTime2').value = "" + document.getElementById('endTime2').value = "" + const days = ['monday2', 'tuesday2', 'wednesday2', 'thursday2', 'friday2', 'saturday2', 'sunday2'] + for(day of days) { + document.getElementById(day).checked = "" } - }) + } else { + const data = JSON.parse(dropdown.value) + document.getElementById('className2').value = data.Name + document.getElementById('classCode2').value = data.Code + document.getElementById('startTime2').value = data.StartTime + document.getElementById('endTime2').value = data.EndTime + const days = ['monday2', 'tuesday2', 'wednesday2', 'thursday2', 'friday2', 'saturday2', 'sunday2'] + for(day of days) { + document.getElementById(day).checked = "" + } + Object.values(data.Days).forEach( day => { + switch(day) { + case 'M': document.getElementById('monday2').checked = "checked"; break; + case 'T': document.getElementById('tuesday2').checked = "checked"; break; + case 'W': document.getElementById('wednesday2').checked = "checked"; break; + case 'Th': document.getElementById('thursday2').checked = "checked"; break; + case 'F': document.getElementById('friday2').checked = "checked"; break; + case 'Sa': document.getElementById('saturday2').checked = "checked"; break; + case 'Su': document.getElementById('sunday2').checked = "checked"; break; + } + }) + } } window.onload = function() { diff --git a/server.improved.js b/server.improved.js index 3e72a768..daf68c49 100644 --- a/server.improved.js +++ b/server.improved.js @@ -150,46 +150,56 @@ const handleModify = function(request, response) { }) request.on( 'end', function() { - console.log( 'modify - received: ' + dataString ) + // console.log( 'modify - received: ' + dataString ) json = JSON.parse( dataString ) prev = json.prev data = json.new - // validate the new values - const error = validate(data); - - if(error.errors === false) { - // find the data to modify - let i = 0; - const max = appdata.length - for(obj of appdata) { - if(JSON.stringify(obj) === prev) { - - obj.Name = data.Name - obj.Code = data.Code - obj.StartTime = data.StartTime - obj.EndTime = data.EndTime - obj.Length = calcDerivedLength(data.StartTime, data.EndTime) - - response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) - response.end(JSON.stringify({})) - console.log('modify - success') - break - } else { - i++ - } - } - if(i >= max) { - response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) - response.end(JSON.stringify(error)) - console.log('failed to modify') + if(prev === "") { // no classes to modify + const error = { + 'errors': true, + 'classModifySelect': "No Classes To Modify", } - } else { // send back error message - console.log('modify - error: ' + JSON.stringify(error)) + // console.log('modify - error: ' + JSON.stringify(error)) response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) response.end( JSON.stringify(error) ) + } else { + // validate the new values + const error = validate(data); + + if(error.errors === false) { + // find the data to modify + let i = 0; + const max = appdata.length + for(obj of appdata) { + if(JSON.stringify(obj) === prev) { + + obj.Name = data.Name + obj.Code = data.Code + obj.StartTime = data.StartTime + obj.EndTime = data.EndTime + obj.Length = calcDerivedLength(data.StartTime, data.EndTime) + + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end(JSON.stringify({})) + console.log('modify - success') + break + } else { + i++ + } + } + if(i >= max) { + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end(JSON.stringify(error)) + console.log('failed to modify') + } + } else { // send back error message + // console.log('modify - error: ' + JSON.stringify(error)) + response.writeHead( 200, "OK", {'Content-Type': 'text/plain' }) + response.end( JSON.stringify(error) ) + } } }) } From 0e58925c5891b17c96a2ba45565a4990cf5cd292 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Tue, 12 Sep 2023 11:01:00 -0400 Subject: [PATCH 09/13] final html changes --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 00638b69..4cb82371 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ This application is a class schedule maker that allows users to input their clas The application includes the use of HTML, CSS, JavaScript, and Node.js functionality, with active communication between the client and the server over the life of a user session. +**IMPORTANT NOTE**: Application was developed using Firefox. During playtesting, Chrome occasionally caused lagging not seen in Firefox during or after development. + My tabular dataset: An object array of class information, where each class has: 1. Name (required) @@ -26,13 +28,13 @@ An object array of class information, where each class has: **Modification Of Data Enabled**: Along with adding and removing data from the server, users are allowed to modify existing data through the modification form. ## Design/Evaluation Achievements -**Think-Aloud Protocol**: Ran ___ think-aloud(s) to test the design of the website. +**Think-Aloud Protocol**: Ran 1 think-aloud(s) to test the design of the website. - Prompt: Add 2 of your classes to the schedule, then modify 1 class to have class on a Sunday. Student 1: -1. Last Name: -2. Problems: -3. Surprising Comments: -4. Changes based on feedback: +1. Last Name: Logan +2. Problems: Didn't see the classes in the schedule before adding, so having 2 classes with the same name was confusing. +3. Surprising Comments: Liked the words at the box line for labeling +4. Changes based on feedback: Expected the classes to be organized positionally by time rather than just sorted. (Would have implemented with more time :( )) Student 2: 1. Last Name: 2. Problems: From ea7a5a0f88b04198200f6dc1f6675cd2e4a9dc43 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Tue, 12 Sep 2023 11:16:09 -0400 Subject: [PATCH 10/13] readme update and bug fix --- README.md | 14 ++++++-------- public/js/main.js | 4 ++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 4cb82371..3555071e 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,6 @@ This application is a class schedule maker that allows users to input their clas The application includes the use of HTML, CSS, JavaScript, and Node.js functionality, with active communication between the client and the server over the life of a user session. -**IMPORTANT NOTE**: Application was developed using Firefox. During playtesting, Chrome occasionally caused lagging not seen in Firefox during or after development. - My tabular dataset: An object array of class information, where each class has: 1. Name (required) @@ -28,18 +26,18 @@ An object array of class information, where each class has: **Modification Of Data Enabled**: Along with adding and removing data from the server, users are allowed to modify existing data through the modification form. ## Design/Evaluation Achievements -**Think-Aloud Protocol**: Ran 1 think-aloud(s) to test the design of the website. +**Think-Aloud Protocol**: Ran 2 think-alouds to test the design of the website. - Prompt: Add 2 of your classes to the schedule, then modify 1 class to have class on a Sunday. Student 1: 1. Last Name: Logan 2. Problems: Didn't see the classes in the schedule before adding, so having 2 classes with the same name was confusing. 3. Surprising Comments: Liked the words at the box line for labeling 4. Changes based on feedback: Expected the classes to be organized positionally by time rather than just sorted. (Would have implemented with more time :( )) -Student 2: -1. Last Name: -2. Problems: -3. Surprising Comments: -4. Changes based on feedback: +Student 2: +1. Last Name: Chang +2. Problems: The dropdowns needed a second click to update the data shown. (Using Chrome) +3. Surprising Comments: Liked the labels, described the form layouts as intuitive +4. Changes based on feedback: Figure out the bug on Chrome and fix it :( ## Baseline Requirements --- diff --git a/public/js/main.js b/public/js/main.js index b55eb3cd..56e1f048 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -231,8 +231,8 @@ window.onload = function() { const removeDropdown = document.getElementById("classSelect") const modifyDropdown = document.getElementById("classModifySelect") addClassesTo(removeDropdown) - removeDropdown.onclick = showClass + removeDropdown.onchange = showClass addClassesTo(modifyDropdown) - modifyDropdown.onclick = loadClass + modifyDropdown.onchange = loadClass getAll(); } \ No newline at end of file From c3b1e4e0d8cde64632ea6f7e4f5de679b9677b33 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Tue, 12 Sep 2023 11:19:55 -0400 Subject: [PATCH 11/13] tiny typo spotted --- public/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/index.html b/public/index.html index c73dceba..f78f501f 100644 --- a/public/index.html +++ b/public/index.html @@ -100,7 +100,7 @@

Modify a Class

- Choose Class to Remove + Choose Class to Modify

From 4c4c435838b5eb56a5a3df418aa3dc17daa8ecc5 Mon Sep 17 00:00:00 2001 From: taccat3 Date: Tue, 12 Sep 2023 11:23:59 -0400 Subject: [PATCH 12/13] readme change --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3555071e..a6d9827c 100644 --- a/README.md +++ b/README.md @@ -27,12 +27,15 @@ An object array of class information, where each class has: ## Design/Evaluation Achievements **Think-Aloud Protocol**: Ran 2 think-alouds to test the design of the website. -- Prompt: Add 2 of your classes to the schedule, then modify 1 class to have class on a Sunday. + +Prompt: Add 2 of your classes to the schedule, then modify 1 class to have class on a Sunday. + Student 1: 1. Last Name: Logan 2. Problems: Didn't see the classes in the schedule before adding, so having 2 classes with the same name was confusing. 3. Surprising Comments: Liked the words at the box line for labeling 4. Changes based on feedback: Expected the classes to be organized positionally by time rather than just sorted. (Would have implemented with more time :( )) + Student 2: 1. Last Name: Chang 2. Problems: The dropdowns needed a second click to update the data shown. (Using Chrome) From 3f1c1c67b598dc19ac520149aaaea343b0e8e45c Mon Sep 17 00:00:00 2001 From: taccat3 Date: Tue, 12 Sep 2023 11:26:20 -0400 Subject: [PATCH 13/13] readme change --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a6d9827c..6340ccfc 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,13 @@ Student 1: 1. Last Name: Logan 2. Problems: Didn't see the classes in the schedule before adding, so having 2 classes with the same name was confusing. 3. Surprising Comments: Liked the words at the box line for labeling -4. Changes based on feedback: Expected the classes to be organized positionally by time rather than just sorted. (Would have implemented with more time :( )) +4. Changes based on feedback: Expected the classes to be organized positionally by time rather than just sorted. (Would have implemented with more time :( ) Student 2: 1. Last Name: Chang -2. Problems: The dropdowns needed a second click to update the data shown. (Using Chrome) +2. Problems: The dropdowns needed a second click to update the data shown. (Bug fixed in final submission) 3. Surprising Comments: Liked the labels, described the form layouts as intuitive -4. Changes based on feedback: Figure out the bug on Chrome and fix it :( +4. Changes based on feedback: Fix the dropdown second click bug. (Bug was only noticed when using arrow keys, fixed in final submission) ## Baseline Requirements ---