├── .babelrc ├── .eslintignore ├── .eslintrc.json ├── .github └── workflows │ └── node.js.yml ├── .gitignore ├── Account.jsx ├── ArchiveBase.js ├── CHANGELOG.md ├── LICENSE ├── Nav.js ├── README.md ├── ReactSupport.js ├── Util.js ├── archive.html ├── archive.js ├── archive_files.txt ├── archivelogowhiteonblack.png ├── archivesw.html ├── components ├── AlbumTheatre.jsx ├── AudioVideo.jsx ├── BookReaderWrapper.jsx ├── CherModal.jsx ├── DetailsPage.jsx ├── Home.jsx ├── Page.jsx ├── RadioPlayerController.js ├── RelatedItemsWrapper.jsx ├── SaveModal.jsx ├── SearchPage.jsx ├── SettingsComponent.jsx ├── TheatreControls.jsx ├── Theatres.jsx └── optionSelect │ ├── optionSelect.js │ └── optionSelect.less ├── contributors.txt ├── dist ├── archive.html ├── archivesw.html ├── bookreader │ ├── BookReader │ ├── BookReader-ia.css │ ├── BookReaderHelpers.js │ ├── BookReaderJSIA.js │ ├── LendingFlow.js │ └── static │ │ ├── pd-daisy.svg │ │ └── preview-800x1200.png ├── bootloader.html ├── components │ └── manage │ │ ├── ManageItems.js │ │ ├── manage.css │ │ └── manage.js ├── dweb-archive-bundle.js ├── dweb-archive-bundle.js.map ├── dweb-archive-styles.css ├── epubreader ├── favicon.ico ├── images │ ├── 911-close-window-icon-off.png │ ├── 911-close-window-icon-on.png │ ├── Broken_document.png │ ├── WaybackLogoSmall.png │ ├── archivelogo207x207notext.jpg │ ├── archivelogo246x246.jpg │ ├── baseline-fast_rewind-24px.svg │ ├── baseline-home-24px.svg │ ├── baseline-pause-24px.svg │ ├── baseline-play_arrow-24px.svg │ ├── baseline-update-24px.svg │ ├── black.png │ ├── cc │ │ ├── by.png │ │ ├── cc.png │ │ ├── nc.png │ │ ├── nd.png │ │ ├── publicdomain.png │ │ ├── sa.png │ │ └── zero.png │ ├── feedback.svg │ ├── footer.png │ ├── gift.png │ ├── go-button-gateway.gif │ ├── llama-icon.png │ ├── loading.gif │ ├── notfound.png │ ├── noun_Ladybug_1869205.svg │ ├── noun_Ladybug_1869205_red.svg │ ├── palm-leaf-wiki-logo.png │ ├── search-saved.png │ ├── settings.svg │ └── tv2op70.png ├── includes │ ├── archive.css │ ├── archive.js │ ├── archive.js.map │ ├── archive.min.css │ ├── archive.min.js │ ├── archive.min.js.map │ ├── asc.gif │ ├── bg.gif │ ├── bootstrap.min.js │ ├── build │ │ ├── js │ │ │ ├── play8.min.js │ │ │ ├── play8.min.js.map │ │ │ ├── playset.min.js │ │ │ ├── playset.min.js.map │ │ │ ├── polyfill.min.js │ │ │ └── polyfill.min.js.map │ │ └── npm │ │ │ └── bootstrap │ │ │ └── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ └── glyphicons-halflings-regular.woff │ ├── desc.gif │ ├── fonts │ │ ├── Iconochive-Regular.eot │ │ ├── Iconochive-Regular.svg │ │ ├── Iconochive-Regular.ttf │ │ ├── Iconochive-Regular.woff │ │ ├── steppum fo rotsap flipped.otf │ │ └── steppum fo rotsap.otf │ ├── jquery-1.10.2.min.js │ ├── jquery-1.10.2.min.map │ ├── jquery-ui │ │ └── images │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png │ └── node_modules │ │ └── react │ │ └── dist │ │ └── react.js ├── jw │ └── 8 │ │ └── jwplayer.core.controls.html5.js ├── languages │ ├── english.json │ ├── french.json │ ├── german.json │ ├── hindi.json │ ├── indonesian.json │ ├── italian.json │ ├── japanese.json │ ├── marathi.json │ ├── myanmar.json │ ├── portugese.json │ └── spanish.json ├── package.json └── upload │ └── images │ └── tree │ └── loading.gif ├── docs ├── archive_architecture.md └── archive_architecture_ipfs.md ├── dweb-archive-styles.css ├── ia-components ├── README.md ├── dweb-index.js ├── sandbox │ ├── AnchorDetails.jsx │ ├── bookreader-component │ │ └── bookreader-wrapper-main.jsx │ ├── details │ │ ├── AnchorDownload.jsx │ │ ├── AnchorSearch.jsx │ │ ├── Carousel.jsx │ │ ├── CrawlConfig.js │ │ ├── DetailsActionButtons.jsx │ │ ├── DetailsCollectionList.jsx │ │ ├── DetailsDownloadOptions.jsx │ │ ├── DetailsMetadata.jsx │ │ ├── DetailsReviews.jsx │ │ ├── Download.jsx │ │ ├── Image.jsx │ │ ├── ModalGo.jsx │ │ ├── NavWrap.jsx │ │ ├── Search.jsx │ │ └── Tabby.jsx │ ├── languages │ │ ├── Languages.jsx │ │ ├── google │ │ │ ├── _.txt │ │ │ ├── _metadata.txt │ │ │ ├── english.txt │ │ │ ├── english_metadata.txt │ │ │ ├── french.txt │ │ │ ├── french_metadata.txt │ │ │ ├── german.txt │ │ │ ├── german_metadata.txt │ │ │ ├── hindi.txt │ │ │ ├── hindi_metadata.txt │ │ │ ├── indonesian.txt │ │ │ ├── indonesian_metadata.txt │ │ │ ├── italian.txt │ │ │ ├── italian_metadata.txt │ │ │ ├── japanese.txt │ │ │ ├── japanese_metadata.txt │ │ │ ├── marathi.txt │ │ │ ├── marathi_metadata.txt │ │ │ ├── myanmar.txt │ │ │ ├── myanmar_metadata.txt │ │ │ ├── portugese.txt │ │ │ ├── portugese_metadata.txt │ │ │ ├── spanish.txt │ │ │ └── spanish_metadata.txt │ │ ├── json │ │ │ ├── english.json │ │ │ ├── french.json │ │ │ ├── german.json │ │ │ ├── hindi.json │ │ │ ├── indonesian.json │ │ │ ├── italian.json │ │ │ ├── japanese.json │ │ │ ├── marathi.json │ │ │ ├── myanmar.json │ │ │ ├── portugese.json │ │ │ └── spanish.json │ │ ├── languagebuild.js │ │ └── manual │ │ │ ├── english.json │ │ │ ├── french.json │ │ │ ├── german.json │ │ │ ├── hindi.json │ │ │ ├── indonesian.json │ │ │ ├── italian.json │ │ │ ├── japanese.json │ │ │ ├── marathi.json │ │ │ ├── myanmar.json │ │ │ ├── portugese.json │ │ │ └── spanish.json │ └── tiles │ │ ├── RelatedItems.jsx │ │ ├── TileComponent.jsx │ │ └── TileGrid.jsx └── util.js ├── images ├── Broken_document.png ├── archivelogo207x207notext.jpg ├── archivelogo246x246.jpg ├── baseline-fast_rewind-24px.svg ├── baseline-home-24px.svg ├── baseline-pause-24px.svg ├── baseline-play_arrow-24px.svg ├── baseline-update-24px.svg ├── feedback.svg └── palm-leaf-wiki-logo.png ├── includes ├── archive.css ├── archive.js ├── archive.js.map ├── archive.min.css ├── archive.min.js ├── archive.min.js.map ├── package.json ├── src │ ├── fonts │ │ └── Iconochive.less │ ├── js │ │ ├── archive.js │ │ └── setUpCopyableTexts.js │ └── less │ │ ├── archive.less │ │ ├── bootstrap │ │ ├── bootstrap.less │ │ └── variables.less │ │ ├── jquery-ui │ │ ├── README.md │ │ ├── jquery-ui.less │ │ ├── jquery-ui.min.css │ │ └── theme.css │ │ ├── partials │ │ ├── accordion.less │ │ ├── banners.less │ │ ├── base.less │ │ ├── choice-fieldset.less │ │ ├── colors.less │ │ ├── copyable-text.less │ │ ├── cryptocurrency-logo.less │ │ ├── cryptocurrency-options.less │ │ ├── dark.less │ │ ├── dev_tray.less │ │ ├── directory-listing-table.less │ │ ├── disability-eligibility.less │ │ ├── donate-cryptocurrency.less │ │ ├── donate.less │ │ ├── donate │ │ │ └── modals.less │ │ ├── download-directory-listing.less │ │ ├── elements.less │ │ ├── facets.less │ │ ├── fts-message.less │ │ ├── grid-tiles.less │ │ ├── hero.less │ │ ├── icons.less │ │ ├── item-create.less │ │ ├── item-details-about.less │ │ ├── item-details-archive-info.less │ │ ├── item-details-metadata.less │ │ ├── item-download-options.less │ │ ├── item-edit-status.less │ │ ├── item-stats-summary.less │ │ ├── item-upload-info.less │ │ ├── layouts.less │ │ ├── loading-message.less │ │ ├── login-signup.less │ │ ├── news-stories.less │ │ ├── qr-code.less │ │ ├── related-items.less │ │ ├── related-music.less │ │ ├── rotato.less │ │ ├── search-autocomplete.less │ │ ├── search-options.less │ │ ├── search-results-page.less │ │ ├── shapes.less │ │ ├── signup-form.less │ │ ├── simple-filter-form.less │ │ ├── simple-lists-admin.less │ │ ├── simple-page-navigation-controls.less │ │ ├── simple-text-form.less │ │ ├── social-sharing-links.less │ │ ├── sponsorship.less │ │ ├── stats-graph.less │ │ ├── stats-table.less │ │ ├── table-with-actions.less │ │ ├── transitions.less │ │ ├── typography.less │ │ ├── universal-access.less │ │ ├── whole-earth-web-archive.less │ │ └── wikipedia-summary.less │ │ └── tv.less ├── webpack.common.js ├── webpack.dev.js ├── webpack.prod.js └── yarn.lock ├── package.json ├── util └── throttler.js ├── webpack.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/env", { 5 | "targets": { 6 | "node": "current" 7 | } 8 | } 9 | ], 10 | "@babel/preset-react" 11 | ], 12 | "plugins": [ 13 | "@babel/plugin-proposal-class-properties", 14 | "@babel/plugin-proposal-object-rest-spread", 15 | [ 16 | "@babel/plugin-transform-runtime", 17 | { 18 | "regenerator": true 19 | } 20 | ] 21 | ] 22 | } -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | package.json 2 | lerna.json 3 | /.git 4 | packages/*/node_modules 5 | packages/*/lib 6 | packages/*/dist 7 | packages/*/build 8 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "browser": true, 4 | "jest/globals": true 5 | }, 6 | "extends": "airbnb", 7 | "plugins": [ 8 | "babel", 9 | "eslint-plugin-import", 10 | "eslint-plugin-react", 11 | "jest", 12 | "jsx-a11y" 13 | ], 14 | "rules": { 15 | "arrow-parens": 0, 16 | "babel/semi": 2, 17 | "camelcase": 1, 18 | "class-methods-use-this": 1, 19 | "comma-dangle": 0, 20 | "implicit-arrow-linebreak": 1, 21 | "import/no-extraneous-dependencies": [ 22 | "error", { 23 | "devDependencies": ["**/*.test.js", "**/*.stories.js"], 24 | "optionalDependencies": false, 25 | "peerDependencies": false 26 | } 27 | ], 28 | "import/prefer-default-export": 0, 29 | "indent": 1, 30 | "jsx-a11y/label-has-associated-control": 2, 31 | "jsx-a11y/label-has-for": 0, 32 | "max-len": 0, 33 | "no-else-return": 0, 34 | "no-multi-assign": 0, 35 | "no-param-reassign": 1, 36 | "no-plusplus": 0, 37 | "no-return-assign": 1, 38 | "no-underscore-dangle": 0, 39 | "no-nested-ternary": 0, 40 | "no-unused-vars": 1, 41 | "object-curly-newline": 0, 42 | "operator-linebreak": 1, 43 | "prefer-destructuring": 0, 44 | "prefer-object-spread": 0, 45 | "prefer-template": 0, 46 | "quote-props": 1, 47 | "react/destructuring-assignment": 0, 48 | "react/jsx-closing-bracket-location": 1, 49 | "react/jsx-filename-extension": [ 50 | 1, { 51 | "extensions": [".js", ".jsx"] 52 | } 53 | ], 54 | "react/jsx-first-prop-new-line": 0, 55 | "react/jsx-indent": 1, 56 | "react/jsx-indent-props": 1, 57 | "react/jsx-max-props-per-line": 0, 58 | "react/jsx-one-expression-per-line": 1, 59 | "react/jsx-wrap-multilines": 1, 60 | "react/no-multi-comp": 0, 61 | "react/no-unused-state": 1, 62 | "react/prefer-stateless-function": 1, 63 | "react/prop-types": 0, 64 | "semi": 2 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | # xloem modified this workflow to change npm to yarn, and reduce tests performed 5 | 6 | name: Node.js CI 7 | 8 | on: 9 | push: 10 | branches: [ master ] 11 | pull_request: 12 | branches: [ master ] 13 | 14 | jobs: 15 | build: 16 | 17 | runs-on: ubuntu-latest 18 | 19 | strategy: 20 | matrix: 21 | node-version: [10.x, 12.x, 14.x, 15.x] 22 | # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ 23 | 24 | steps: 25 | - uses: actions/checkout@v2 26 | - name: Use Node.js ${{ matrix.node-version }} 27 | uses: actions/setup-node@v1 28 | with: 29 | node-version: ${{ matrix.node-version }} 30 | - run: yarn install 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /includes/node_modules 3 | dist/bookreader/BookReader 4 | dist/epubreader 5 | dist/dweb-transports-bundle.js 6 | dist/dweb-objects-bundle.js 7 | *.swp 8 | /includes/package-lock.json 9 | yarn-error.log 10 | .idea 11 | web_modules 12 | dist/node_modules 13 | yarn.lock 14 | -------------------------------------------------------------------------------- /ArchiveBase.js: -------------------------------------------------------------------------------- 1 | import { stringify } from '@stratumn/canonicaljson'; 2 | // Other Archive Repos 3 | import { ArchiveItem } from '@internetarchive/dweb-archivecontroller'; 4 | // This repo 5 | import React from 'react'; 6 | import ReactDOM from 'react-dom'; 7 | import {AJS_on_dom_loaded} from './Util'; 8 | import {Page} from "./components/Page"; 9 | 10 | 11 | 12 | // See other almost DUPLICATEDCODE#003 (iaux and dweb-archive) 13 | function _onefield(key, value) { 14 | return Array.isArray(value) 15 | ? value.map(v => _onefield(key, v)).join(' OR ') 16 | // This next line uses stringify instead of toString() because we want '"abc"' and '1' i.e. quotes if its a string 17 | : (`${key}:${stringify(value)}`); 18 | } 19 | 20 | function queryFrom(query) { 21 | // Turn query as object into a viable query string for a Url (but not yet urlencoded) 22 | return Object.entries(query).map(kv => _onefield(kv[0], kv[1])).join(' AND '); // k1:v1 AND k2:v2 23 | } 24 | // End of DUPLICATEDCODE#0003 25 | const searchConfig = { 26 | rows: 30, // How many to retrieve per page, smaller numbers load quicker, but then scroll down will have to get next page 27 | }; 28 | 29 | export default class ArchiveBase extends ArchiveItem { 30 | /** 31 | * Subclass of ArchiveItem that can also handle a search and other parameterisation of display 32 | * Fields: 33 | * 34 | */ 35 | constructor({ and='', download=false, identifier = undefined, message=undefined, metaapi = undefined, noCache=false, page=1, 36 | query=undefined, rows=searchConfig.rows, sort=[]}={}) { 37 | super({identifier, metaapi, sort}); 38 | this.and = and; 39 | this.download = download; // True if want download directory 40 | this.noCache= noCache; 41 | this.page = page; 42 | this.query = (typeof(query) === "object") 43 | ? queryFrom(query) // form { creator: "Foo bar" ... } 44 | : query ; // Note this should be an UNUUENCODED query or an object 45 | this.rows= rows; 46 | this.state = {}; // This will be automatic when moves to React 47 | this.message = message; 48 | } 49 | 50 | } 51 | 52 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # dweb-archive 2 | User Interface to access the archive from the browser. 3 | Builds on dweb-transports and typically (currently) loaded from dweb-transport 4 | 5 | ## Background 6 | This library is part of a general project at the Internet Archive (archive.org) 7 | to support the decentralized web. 8 | 9 | ## Goals 10 | * to allow unmodified browsers to access the Internet Archive's millions of items 11 | * to support as many of the IA's features as possible, adding them iteratively 12 | * to use decentralized platforms for as many features as possible, without sacrificing functionality 13 | * to avoid single points of failure where possible 14 | 15 | ## Installation 16 | 17 | Please see the installation instructions in the 18 | [dweb-mirror repo](https://github.com/internetarchive/dweb-mirror) 19 | They are much more recent than the ones below. 20 | 21 | ### All cases 22 | ``` 23 | git clone https://git@github.com/internetarchive/dweb-archive.git 24 | cd dweb-archive 25 | 26 | # install the dependencies including IPFS & WebTorrent and dweb-transports 27 | npm install 28 | ``` 29 | ### Installation for testing in a browser 30 | 31 | Do the "All Case install above" 32 | 33 | Install a simple http-server, this may require sudo depending on permissions 34 | ``` 35 | npm run setuphttp 36 | npm install -g http-server` 37 | cd dist 38 | http-server 39 | ``` 40 | Now open a browser page. 41 | 42 | Note: Firefox works better than Chrome for local usage as Chrome limits cross-origin 43 | http to 6 streams and we need to implement a limited http pool to fix this. 44 | 45 | `open "http://localhost:8080/archive.html"` 46 | 47 | To test with limited transports, for example HTTP only, add the transport parameter. 48 | 49 | `open "http://localhost:8080/archive.html?transport=HTTP"` 50 | 51 | To test against dweb-mirror you can pass a parameter e.g. 52 | 53 | `open "http://localhost:8080/archive.html?mirror=localhost:4244&transport=HTTP"` 54 | 55 | 56 | ### Node Installation to work on this repo 57 | Note that the only reason to do this would be to work on the code, 58 | 59 | Do the "All Case install above" 60 | 61 | Build (webpack) the bundles and copy needed files to dist/ 62 | `webpack --mode development` 63 | 64 | ## See related: 65 | 66 | * [Archive.org](https://dweb.archive.org) bootstrap into the Archive's page 67 | 68 | ### Repos: 69 | * *dweb-transports:* Common API to underlying transports (http, webtorrent, ipfs, yjs) 70 | * *dweb-archive:* Decentralized Archive webpage and bootstrapping 71 | * *dweb-transport:* Original Repo, still has some half-complete projects 72 | * *dweb-archivecontroller:* Object model for archive, includes routing table 73 | 74 | ## Directory structure here 75 | ##### Directories 76 | * components - React components used by the UI (see also ia-components) 77 | * dist - all that is needed to run the UI - this is also in its own npm package. 78 | * docs - should be some documentation, but its a bit out of date 79 | * ia-components - More React components, these are dual purpose, they don't depend on Dweb 80 | * images - extra images used (there are also ones in dist/images copied from archive.org) 81 | * includes - files copied over from internet archive, where we build the CSS and JS 82 | * node_modules - installed from the dependencies in package.json by `yarn install` 83 | * util - just has throttler.js and to be honest I can't remember why its off on its own 84 | * web_modules - compiled by pix for web components (radio-player is the only one, but that has dependencies) 85 | ##### Files 86 | * archive.html - main file for displaying archive (detail or search) pages 87 | * archive.js - top level for creating archive-bundle.js 88 | * dweb-archive-styles.css - CSS styles for dweb, note that it uses standard archive styles in includes/archive.css for most 89 | * LICENSE - standard GNU Affero licence 90 | * webpack.config.js - defines bundling, and in particular which files are needed for the distribution 91 | * ... some more TODO documentation 92 | 93 | ## Class hierarchy 94 | * ArchiveFile - represents a single file 95 | * ArchiveItem - represents data structures for an item (a directory of files) 96 | * ArchiveBase - Subclass ArchiveItem to add functionality specific to this UI 97 | * ArchiveMember - represents a listing for an item (e.g. in a search) 98 | * React.Component - Standard React class used for building components 99 | * Lots of stand-alone components 100 | * AVDWeb - Adds functionality common to adding content to media tags 101 | * AudioDweb, VideoDweb 102 | * Nav - common class for navigation structures (mostly at the top of the page) also maps item types to classes 103 | -------------------------------------------------------------------------------- /archive.js: -------------------------------------------------------------------------------- 1 | var Nav = require('./Nav').default; 2 | const { getImageURI } = require('./ReactSupport') 3 | var DwebTransports = require('@internetarchive/dweb-transports'); //Also sets window.DwebTransports 4 | window.DwebArchive = { Nav, getImageURI }; 5 | window.Nav = Nav; // So HTML can find it 6 | -------------------------------------------------------------------------------- /archive_files.txt: -------------------------------------------------------------------------------- 1 | /bookreader/BookReader-ia.css 2 | /bookreader/BookReaderHelpers.js 3 | /bookreader/BookReaderJSIA.js 4 | /bookreader/LendingFlow.js 5 | /bookreader/static/pd-daisy.svg 6 | /bookreader/static/preview-800x1200.png 7 | /components/manage/ManageItems.js 8 | /components/manage/manage.css 9 | /components/manage/manage.js 10 | /favicon.ico 11 | /images/911-close-window-icon-off.png 12 | /images/911-close-window-icon-on.png 13 | /images/WaybackLogoSmall.png 14 | /images/black.png 15 | /images/cc/by.png 16 | /images/cc/cc.png 17 | /images/cc/nc.png 18 | /images/cc/nd.png 19 | /images/cc/publicdomain.png 20 | /images/cc/sa.png 21 | /images/cc/zero.png 22 | /images/footer.png 23 | /images/gift.png 24 | /images/go-button-gateway.gif 25 | /images/llama-icon.png 26 | /images/loading.gif 27 | /images/notfound.png 28 | /images/search-saved.png 29 | /images/settings.svg 30 | /images/tv2op70.png 31 | /includes/asc.gif 32 | /includes/bg.gif 33 | /includes/bootstrap.min.js 34 | /includes/build/js/play8.min.js 35 | /includes/build/js/play8.min.js.map 36 | /includes/build/js/playset.min.js 37 | /includes/build/js/playset.min.js.map 38 | /includes/build/js/polyfill.min.js 39 | /includes/build/js/polyfill.min.js.map 40 | /includes/desc.gif 41 | /includes/fonts/Iconochive-Regular.eot 42 | /includes/fonts/Iconochive-Regular.svg 43 | /includes/fonts/Iconochive-Regular.ttf 44 | /includes/fonts/Iconochive-Regular.woff 45 | /includes/fonts/steppum fo rotsap flipped.otf 46 | /includes/fonts/steppum fo rotsap.otf 47 | /includes/jquery-1.10.2.min.js 48 | /includes/jquery-1.10.2.min.map 49 | /includes/build/npm/bootstrap/fonts/glyphicons-halflings-regular.eot 50 | /includes/build/npm/bootstrap/fonts/glyphicons-halflings-regular.woff 51 | /includes/build/npm/bootstrap/fonts/glyphicons-halflings-regular.ttf 52 | /includes/build/npm/bootstrap/fonts/glyphicons-halflings-regular.svg 53 | /includes/jquery-ui/images/ui-bg_glass_75_e6e6e6_1x400.png 54 | /includes/jquery-ui/images/ui-bg_highlight-soft_75_cccccc_1x100.png 55 | /jw/8/jwplayer.core.controls.html5.js 56 | /upload/images/tree/loading.gif 57 | -------------------------------------------------------------------------------- /archivelogowhiteonblack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/internetarchive/dweb-archive/af48eefbdfd5ecb509bd5cb715b8e9bfa1d90808/archivelogowhiteonblack.png -------------------------------------------------------------------------------- /archivesw.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |34 |
Last modified | --*/} 39 |Size | 40 ||
---|---|---|
45 | |
55 | 56 | | 57 | |
63 | |
75 | {/* --TODO-DIR handle directory here as foo/ --*/}
76 | {/* --00-Apr-0000 00:00{--TODO-DIR handle date from mtime | --*/} 77 |78 | {f.size} 79 | {/* --TODO-DIR should be "-" for directory--*/} 80 | | 81 |