├── .babelrc ├── .gitattributes ├── .github └── issue_template.md ├── .gitignore ├── Dockerfile ├── LICENSE ├── README.md ├── archiveIndexes └── .gitkeep ├── archives ├── .gitkeep ├── collections │ └── default │ │ ├── archive │ │ └── .gitkeep │ │ ├── indexes │ │ ├── .gitkeep │ │ ├── all.cdxj │ │ └── index.cdxj │ │ ├── metadata.yaml │ │ ├── static │ │ └── .gitkeep │ │ └── templates │ │ └── .gitkeep ├── static │ ├── default_banner.js │ ├── flowplayer │ │ ├── flowplayer-3.2.18.swf │ │ ├── flowplayer.audio-3.2.11.swf │ │ ├── flowplayer.controls-3.2.16.swf │ │ ├── flowplayer.pseudostreaming-3.2.13.swf │ │ └── toolbox.flashembed.js │ ├── scroll-webkit.css │ ├── vidrw.js │ ├── wb.css │ ├── wb.js │ ├── wb_frame.js │ └── wombat.js └── templates │ ├── banner.html │ ├── collinfo.json │ ├── error.html │ ├── frame_insert.html │ ├── head_insert.html │ ├── index.html │ ├── not_found.html │ ├── proxy_cert_download.html │ ├── proxy_select.html │ ├── query.html │ └── search.html ├── bootstrap.sh ├── build-binary.js ├── build ├── Info.plist ├── dmgbuild_settings.py ├── icons │ ├── archive.icns │ ├── famNah.png │ ├── famYes.png │ ├── herirtixWAILLogo.psd │ ├── heritrixLogo_64.png │ ├── openWaybackLogo_64.png │ ├── openWaybackLogo_64.psd │ ├── openWaybackWAILLogo.psd │ ├── whale.ico │ ├── whaleLogo_64.png │ ├── whale_1024.icns │ ├── whale_1024.ico │ ├── whale_1024.png │ ├── whale_128.png │ ├── whale_256.png │ ├── whale_32.png │ ├── whale_512.png │ └── whale_64.png └── version.txt ├── buildResources ├── linux │ └── icon.png ├── osx │ ├── Extended-Info.plist │ ├── archive.icns │ └── whale.icns └── winLinux │ └── mLogo_animated.gif ├── bundledApps ├── heritrix.bat ├── heritrix │ ├── LICENSE.txt │ ├── README.txt │ ├── bin │ │ ├── arcreader │ │ ├── arcreader.cmd │ │ ├── dependencies.xsl │ │ ├── extractor │ │ ├── extractor.cmd │ │ ├── foreground_heritrix │ │ ├── foreground_heritrix.cmd │ │ ├── heritrix │ │ ├── heritrix.cmd │ │ ├── hoppath.pl │ │ ├── htmlextractor │ │ ├── htmlextractor.cmd │ │ ├── make_reports.pl │ │ ├── manifest_bundle.pl │ │ └── xdocToTxt.xsl │ ├── conf │ │ ├── heritrix.cacerts │ │ ├── jobs │ │ │ └── .gitignore │ │ └── logging.properties │ ├── extras │ │ └── pagerank │ │ │ ├── GenGraph.java │ │ │ ├── PageRank.java │ │ │ ├── README.txt │ │ │ ├── assignUrlIndex.pl │ │ │ ├── pageRankSetup.pl │ │ │ └── run-pr.sh │ ├── jobs │ │ └── .gitignore │ └── lib │ │ ├── ant-1.7.1.jar │ │ ├── ant-launcher-1.7.1.jar │ │ ├── ant.LICENSE │ │ ├── ant.NOTICE │ │ ├── aopalliance-1.0.jar │ │ ├── archive-overlay-commons-httpclient-3.1.jar │ │ ├── bsh-2.0b5.jar │ │ ├── bsh.LICENSE │ │ ├── com.noelios.restlet-1.1.10.jar │ │ ├── com.noelios.restlet.ext.jetty-1.1.10.jar │ │ ├── commons-cli-1.1.jar │ │ ├── commons-cli.LICENSE │ │ ├── commons-cli.NOTICE │ │ ├── commons-codec-1.6.jar │ │ ├── commons-codec.LICENSE │ │ ├── commons-codec.NOTICE │ │ ├── commons-collections-3.1.jar │ │ ├── commons-el.LICENSE │ │ ├── commons-el.NOTICE │ │ ├── commons-io-1.4.jar │ │ ├── commons-io.LICENSE │ │ ├── commons-io.NOTICE │ │ ├── commons-lang-2.6.jar │ │ ├── commons-lang.LICENSE │ │ ├── commons-lang.NOTICE │ │ ├── commons-logging-1.0.4.jar │ │ ├── commons-logging.LICENSE │ │ ├── commons-net-2.0.jar │ │ ├── commons-net.LICENSE │ │ ├── commons-net.NOTICE │ │ ├── dnsjava-2.0.3.README │ │ ├── dnsjava-2.0.3.jar │ │ ├── fastutil-5.0.7.LICENSE │ │ ├── fastutil-5.0.7.jar │ │ ├── freemarker-2.3.19.jar │ │ ├── groovy-all-1.6.3.jar │ │ ├── guava-r08.jar │ │ ├── heritrix-commons-3.2.0.jar │ │ ├── heritrix-engine-3.2.0.jar │ │ ├── heritrix-modules-3.2.0.jar │ │ ├── htmlparser-1.6.jar │ │ ├── httpcore-4.3.jar │ │ ├── ia-web-commons-1.0-20131207.033010-102.jar │ │ ├── itext-1.3.jar │ │ ├── itext.LICENSE │ │ ├── jasper.LICENSE │ │ ├── javaswf-CVS-SNAPSHOT-1.jar │ │ ├── javaswf.LICENSE │ │ ├── je-3.2.44.LICENSE │ │ ├── je-4.1.6.jar │ │ ├── jericho-html-2.3.LICENSE │ │ ├── jericho-html-2.6.1.jar │ │ ├── jets3t-0.5.0.LICENSE │ │ ├── jets3t-0.5.0.jar │ │ ├── jetty-6.1.26.jar │ │ ├── jetty-ajp-6.1.11.jar │ │ ├── jetty-sslengine-6.1.26.jar │ │ ├── jetty-util-6.1.26.jar │ │ ├── jetty.LICENSE │ │ ├── jline-0.9.94.jar │ │ ├── jna-3.2.3.jar │ │ ├── joda-time-1.6.jar │ │ ├── json-20090211.jar │ │ ├── junit-3.8.2.jar │ │ ├── junit.LICENSE.HTML │ │ ├── juniversalchardet-1.0.3.jar │ │ ├── kryo-1.01.jar │ │ ├── libidn-1.15.jar │ │ ├── libidn.LICENSE │ │ ├── mg4j-1.0.1.LICENSE │ │ ├── mg4j-1.0.1.jar │ │ ├── minlog-1.2.jar │ │ ├── org.restlet-1.1.10.jar │ │ ├── oro-2.0.8.LICENSE │ │ ├── poi-2.5.1-final-20040804.jar │ │ ├── poi-scratchpad-2.5.1-final-20040804.jar │ │ ├── poi.LICENSE │ │ ├── poi.NOTICE │ │ ├── reflectasm-0.8.jar │ │ ├── servlet-4.1.34.LICENSE │ │ ├── servlet-api-2.5-20081211.jar │ │ ├── spring-aop-3.0.5.RELEASE.jar │ │ ├── spring-asm-3.0.5.RELEASE.jar │ │ ├── spring-beans-3.0.5.RELEASE.jar │ │ ├── spring-context-3.0.5.RELEASE.jar │ │ ├── spring-core-3.0.5.RELEASE.jar │ │ └── spring-expression-3.0.5.RELEASE.jar ├── html │ ├── css │ │ ├── bootstrap.min.css │ │ └── style.css │ ├── frames.html │ ├── img │ │ ├── glyphicons-halflings-white.png │ │ └── glyphicons-halflings.png │ ├── js │ │ ├── bootstrap.min.js │ │ ├── jquery-ui.custom.min.js │ │ ├── jquery.dynatree.min.js │ │ ├── jquery.min.js │ │ └── script.js │ ├── list.html │ └── skin │ │ ├── icons-rtl.gif │ │ ├── icons.gif │ │ ├── loading.gif │ │ ├── ui.dynatree.css │ │ ├── vline-rtl.gif │ │ └── vline.gif ├── jwat-tools │ ├── e.out │ ├── env.cmd │ ├── env.sh │ ├── i.out │ ├── jwattools.cmd │ ├── jwattools.sh │ ├── jwattools_debug.cmd │ ├── jwattools_debug.sh │ ├── jwattools_debug_suspended.cmd │ ├── jwattools_debug_suspended.sh │ ├── lib │ │ ├── jna-3.2.7.jar │ │ ├── jwat-arc-1.0.4.jar │ │ ├── jwat-archive-1.0.4.jar │ │ ├── jwat-archive-common-1.0.4.jar │ │ ├── jwat-common-1.0.4.jar │ │ ├── jwat-gzip-1.0.4.jar │ │ ├── jwat-tools-0.6.2.jar │ │ └── jwat-warc-1.0.4.jar │ └── v.out ├── moveCollections.sh └── runH.sh ├── config ├── .gitkeep ├── archive.json └── archives.json ├── coreData └── database │ └── .gitkeep ├── crawler-beans-win.cxml ├── crawler-beans.cxml ├── crawler-beans_bk.cxml ├── depDifWinRest.txt ├── doElectron.sh ├── images ├── frontpage.png ├── wail-advanced.png ├── wailFront.png ├── wailHome.png ├── wail_0.2016.03.16_advanced.png ├── wail_0.2016.03.16_basic.png └── wiki │ ├── Misc.png │ ├── Services.png │ ├── Settings.png │ ├── Wail-Front.png │ ├── Wail-SideBar.png │ ├── heritrix.png │ ├── newCrawl.png │ └── wayback.png ├── it.json ├── mayby-gitattributes ├── package.json ├── runMemgator.sh ├── runTest.sh ├── sharedUtil ├── constants.js ├── index.js ├── pather.js ├── serviceDaemon.js └── viewWatcher.js ├── support ├── adhoc.keystore ├── catalina_service.bat ├── catalina_start.bat └── catalina_stop.bat ├── temp ├── .babelrc └── package.json ├── tests ├── helpers │ ├── dbChecker.js │ ├── exspectedUiValues.js │ ├── loadSettings.js │ ├── mockSettings.js │ └── wailApp.js ├── screenshots │ └── linux │ │ └── archiveConfig.png ├── test.js ├── testArchiveManager │ ├── settings.json │ └── testArchiveManager.js ├── testServiceMan │ ├── settings.json │ └── testServiceManager.js ├── testSettings │ └── settings.json ├── testWail.js └── testWailCreatedDirs.js ├── timemaps └── .gitkeep ├── tools ├── builder.js ├── cd.js ├── core-dev-server.js ├── debugSpectron.js ├── downloadExternals.js ├── downloadExternals2.js ├── downloadOpenJDK.js ├── installModules.js ├── makepywbwin.js ├── moveJDKMemgator.js ├── noImportMoveJdkMemgator.js ├── polyfilMomentTimer.js ├── test-xml.js ├── testNightmare.js ├── transformOldDb.js ├── ui-dev-server.js └── wailBuildTest.js ├── twitterDump └── .gitkeep ├── wail-archiver ├── electronArchiver.js ├── electronRequestMonitor.js ├── electronWARCGenerator.js ├── index.js ├── pageEvals │ ├── bigExtLookUp.js │ ├── helpers.js │ └── index.js ├── utils │ ├── archiverError.js │ ├── getResBodyElectron.js │ ├── index.js │ └── isEmptyPlainObject.js ├── warcFields.js └── warcWriterBase.js ├── wail-core ├── autoIndexer │ ├── autoIndexer.js │ └── colIndexer.js ├── constants │ └── index.js ├── db │ ├── colSeedDb.js │ ├── colSeedDb2.js │ ├── dataStore.js │ ├── db.js │ └── dbErrors.js ├── errors │ └── index.js ├── fs │ ├── directorySize.js │ ├── fsePromise.js │ ├── index.js │ ├── pathExists.js │ └── pathIs.js ├── globalStrings │ ├── archiving.js │ ├── index.js │ ├── ipcChannels.js │ └── uiActions.js ├── index.js ├── managers │ ├── appManager.js │ ├── appManager2.js │ ├── archiveMan.js │ ├── archiveMan_bk.js │ ├── archiveManager.js │ ├── heritrix │ │ ├── aCrawlMonitor.js │ │ ├── crawlManager.js │ │ ├── crawlStatsMonitor.js │ │ └── heritrixRequestManager.js │ ├── index.js │ ├── loadState.js │ ├── oauthTwitter.js │ ├── serviceManager │ │ ├── errors │ │ │ └── index.js │ │ ├── index.js │ │ └── processControlers │ │ │ ├── heritrixProcessController.js │ │ │ ├── index.js │ │ │ ├── processStates.js │ │ │ └── waybackProcessController.js │ ├── serviceManager2.js │ ├── serviceManager3.js │ ├── settingsManValues.js │ ├── settingsManager.js │ ├── twitterSignInMan.js │ └── windowManager.js ├── pywb │ └── index.js ├── remoteSettings │ └── index.js ├── requests │ ├── heritrixRequests.js │ ├── index.js │ └── requestTypes.js ├── services │ └── wayback.js ├── string │ ├── index.js │ └── lodashStringMethods.js ├── util │ ├── childProcHelpers.js │ ├── colCrawlInfo.js │ ├── collectionsUtils.js │ ├── completeAssign.js │ ├── contextMenu.js │ ├── crawlInfo.js │ ├── crawlRunInfo.js │ ├── fsHelpers.js │ ├── getCrawStats.js │ ├── getOErrorMessage.js │ ├── index.js │ ├── logger.js │ ├── moveStartingCol.js │ ├── nedb.js │ ├── pather.js │ ├── runInfo.js │ ├── serviceManHelpers.js │ ├── setMethods.js │ ├── viewWatcher.js │ ├── warcUtils.js │ └── yaml.js └── window │ └── index.js ├── wail-twitter ├── archive │ ├── archive.js │ ├── archiveComponent.js │ ├── archive_new.js │ ├── capturedRequest.js │ ├── debuggerUtil.js │ ├── extractLinks.js │ ├── inject.js │ ├── injectArchive.js │ ├── netInterceptor.js │ ├── networkMonitor.js │ ├── node-uuid.js │ ├── resource.js │ ├── responseBodyGetter.js │ ├── responseHeaderString.js │ ├── util.js │ ├── warcFields.js │ ├── warcWriter.js │ ├── warcWriter_new.js │ ├── wcRequestMonitor.js │ └── webRequestCaptures.js ├── extractors │ ├── extractor.js │ ├── hashTagExtractor.js │ └── timelineExtractor.js ├── index.html ├── loginWindow │ ├── actions │ │ └── index.js │ ├── components │ │ ├── LoadingLogin.js │ │ ├── LoginControls │ │ │ ├── LoginControlTitleButtons.js │ │ │ └── index.js │ │ ├── LoginWebview.js │ │ └── index.js │ ├── constants │ │ ├── buttons.js │ │ └── index.js │ ├── containers │ │ ├── LoadingOrControl.js │ │ └── Login.js │ ├── epics │ │ ├── index.js │ │ └── webviewEpic.js │ ├── index.js │ ├── init.js │ ├── middleware │ │ ├── index.js │ │ ├── ipc.js │ │ └── webview.js │ ├── newTwitterSignIn.html │ ├── reducers │ │ └── index.js │ └── store │ │ ├── configureStore.dev.js │ │ ├── configureStore.prod.js │ │ └── index.js ├── monitor │ ├── tasks │ │ ├── index.js │ │ ├── monitorTask.js │ │ ├── textSearch.js │ │ └── userTimeline.js │ └── twitterMonitor.js ├── twitter-monitor-main.js ├── twitterClient.js └── vendor │ ├── moment-plugins.js │ ├── moment-round.js │ ├── moment-timer.js │ └── moment-twitter.js ├── wail-ui ├── actions │ ├── addSeedFromFs.js │ ├── archival.js │ ├── changeLocation.js │ ├── collections.js │ ├── editor-actions.js │ ├── header.js │ ├── heritrix.js │ ├── index.js │ ├── notification-actions.js │ ├── requests.js │ ├── services.js │ ├── twitter.js │ ├── util-actions.js │ └── wailCrawl.js ├── background │ ├── accessibility.html │ ├── archiver.html │ ├── archives.html │ ├── crawls.html │ ├── indexer.html │ ├── jobs.html │ ├── js │ │ ├── accessibility.js │ │ ├── archiver.js │ │ ├── archives.js │ │ ├── crawls.js │ │ ├── indexer.js │ │ ├── jobs.js │ │ ├── managers.js │ │ ├── requestDaemon.js │ │ └── twitterM.js │ ├── managers.html │ ├── requestDaemon.html │ └── twitterMonitor.html ├── bunyanshim.js ├── childWindows │ ├── newCrawl │ │ ├── crawlDepth.js │ │ ├── crawlUrlItem.js │ │ ├── crawlUrlList.js │ │ ├── crawlUrlsDispatcher.js │ │ ├── crawlUrlsStore.js │ │ ├── enterCrawlUrls.js │ │ ├── footer.js │ │ ├── header.js │ │ ├── layout.js │ │ ├── newCrawl.html │ │ ├── newCrawl.js │ │ ├── newCrawlDialog.js │ │ └── selectCollection.js │ ├── settings │ │ ├── fileChooser.js │ │ ├── fsLocationChooser.js │ │ ├── heritrixSettings.js │ │ ├── numberPicker.js │ │ ├── settingHardReset.js │ │ ├── settingsForm.js │ │ ├── settingsW.html │ │ ├── settingsW.js │ │ ├── stringChanger.js │ │ ├── userPasswordChanger.js │ │ ├── wailSettings.js │ │ └── waybackSettings.js │ ├── timemapStats │ │ ├── timemapStats.html │ │ └── timemapStats.js │ └── twitterLogin.html ├── components │ ├── collections │ │ ├── addToCollection │ │ │ ├── fromFs │ │ │ │ ├── addFromFs.js │ │ │ │ ├── addFromFsHeader.js │ │ │ │ ├── configureFormPage.js │ │ │ │ ├── displayInvalidMessage.js │ │ │ │ ├── errorList.js │ │ │ │ ├── seedFormEntry.js │ │ │ │ ├── seedList.js │ │ │ │ ├── seedListFormPage.js │ │ │ │ ├── seedName.js │ │ │ │ └── selectSeed.js │ │ │ ├── fromLiveWeb │ │ │ │ ├── archiveUrlForm.js │ │ │ │ ├── checkResults.js │ │ │ │ ├── checkSeed.js │ │ │ │ ├── colAddSeedHeader.js │ │ │ │ └── validate.js │ │ │ └── index.js │ │ ├── selectCollection │ │ │ ├── collectionCard │ │ │ │ ├── collectionCardBody.js │ │ │ │ ├── collectionCardHeader.js │ │ │ │ ├── index.js │ │ │ │ └── noCollectionMatches.js │ │ │ ├── filterCollection.js │ │ │ ├── filterSelectCol.js │ │ │ ├── index.js │ │ │ ├── search │ │ │ │ ├── OrderBy.js │ │ │ │ └── index.js │ │ │ ├── selectCol.js │ │ │ ├── selectColHeader.js │ │ │ ├── selectColList.js │ │ │ └── selectColTable.js │ │ ├── viewArchiveConfiguration │ │ │ ├── archiveConfigTable.js │ │ │ ├── index.js │ │ │ └── viewArchiveConfigHeader.js │ │ └── viewCollection │ │ │ ├── addSeedFab.js │ │ │ ├── collectionViewHeader.js │ │ │ ├── index.js │ │ │ ├── mementoCard │ │ │ ├── index.js │ │ │ ├── mementoCardActions.js │ │ │ ├── mementoCardBody.js │ │ │ ├── mementoCardEmpty.js │ │ │ └── mementoCardHeader.js │ │ │ ├── seedTable.js │ │ │ └── seedTable2.js │ ├── dialogs │ │ ├── editMetaData.js │ │ ├── newCollection.js │ │ └── newCollectionForm │ │ │ └── index.js │ ├── editor │ │ ├── editor-popup.js │ │ ├── editor.js │ │ ├── style.css │ │ └── textEditor.js │ ├── heritrix │ │ ├── hJobItemContainer.js │ │ ├── heritrixActionIcon.js │ │ ├── heritrixActionMenu.js │ │ ├── heritrixInlineStyles.js │ │ ├── heritrixJobItem.js │ │ ├── heritrixToolBar.js │ │ └── index.js │ ├── informational │ │ ├── notifications.js │ │ └── wailClosing.js │ ├── layout │ │ ├── crawlingIndicator.js │ │ ├── dynamicHeader.js │ │ ├── dynamicHeaderRoute.js │ │ ├── footer.js │ │ ├── header │ │ │ ├── dynamicAppBar.js │ │ │ ├── index.js │ │ │ ├── wailAppBar.js │ │ │ └── wailAppDrawer.js │ │ ├── location │ │ │ ├── addFromFsLocation.js │ │ │ ├── addSeedLocation.js │ │ │ ├── collectionViewLocation.js │ │ │ ├── index.js │ │ │ ├── linkStyle.js │ │ │ ├── locationSeparator.js │ │ │ ├── staticLocation.js │ │ │ └── viewArchiveConfigLocation.js │ │ └── locationButtons │ │ │ ├── addSeedButtons.js │ │ │ ├── addSeedIconMenu.js │ │ │ ├── index.js │ │ │ ├── linkStyle.js │ │ │ └── selectCollectionButtons.js │ ├── miscellaneous │ │ ├── eventLog.js │ │ ├── logViewer.js │ │ └── miscToolBar.js │ ├── serviceStatus │ │ └── index.js │ ├── sortDirection │ │ ├── sortDirection.js │ │ ├── sortHeader.js │ │ └── sortIndicator.js │ ├── styles │ │ └── styles.js │ ├── twitter │ │ ├── archiveConfig │ │ │ ├── ArchiveTwitterForm │ │ │ │ ├── ASearchTerm.js │ │ │ │ ├── InputName.js │ │ │ │ ├── LookForTerm.js │ │ │ │ ├── MonitorTime.js │ │ │ │ ├── OptionalFields.js │ │ │ │ ├── OptionalSearchTerms.js │ │ │ │ ├── RequiredFields.js │ │ │ │ ├── SearchTermList.js │ │ │ │ ├── SelectForCol.js │ │ │ │ ├── index.js │ │ │ │ └── validate.js │ │ │ ├── aTwitterUser.js │ │ │ ├── hashTags.js │ │ │ ├── index.js │ │ │ ├── shared │ │ │ │ ├── forColAndLength.js │ │ │ │ └── radioButtonSelector.js │ │ │ ├── textSearch │ │ │ │ ├── ASearchTerm.js │ │ │ │ ├── SearchTermList.js │ │ │ │ ├── searchTerms.js │ │ │ │ ├── userBasic.js │ │ │ │ └── validate.js │ │ │ ├── timeValues.js │ │ │ ├── twitterUser │ │ │ │ ├── maybeHashTags.js │ │ │ │ ├── userBasic.js │ │ │ │ └── validate.js │ │ │ ├── twitterUserTextSearch.js │ │ │ ├── untilTime.js │ │ │ └── userNameTF.js │ │ ├── archiveTwitter.js │ │ ├── fromFriends │ │ │ ├── archiveFromFriends.js │ │ │ ├── friendList.js │ │ │ └── friendListItem.js │ │ ├── index.js │ │ ├── signIn.js │ │ └── signInOrArchive.js │ ├── utilComponents │ │ ├── Search.js │ │ ├── ToolTip.js │ │ ├── checkBock.js │ │ ├── contextMenu.js │ │ ├── inlineEdit.js │ │ ├── myAutoSizer.js │ │ ├── searchInput.js │ │ └── trcToolTip.js │ └── wailCrawls │ │ ├── NoWailCrawlJobs.js │ │ ├── WailCrawlJob.js │ │ └── index.js ├── constants │ ├── acronyms.js │ ├── uiStrings.js │ └── wail-constants.js ├── containers │ ├── collectionAddSeed.js │ ├── collectionAddSeedFs.js │ ├── collectionView.js │ ├── heritrixView.js │ ├── joyRider.js │ ├── layout.js │ ├── miscellaneous.js │ ├── selectColContainer.js │ ├── serviceStats.js │ ├── twitterSignIn.js │ ├── twitterView.js │ ├── viewArchiveConfig.js │ ├── wail.js │ └── wailCrawlView.js ├── css │ └── wail.css ├── historySync.js ├── icons │ ├── crawling.png │ ├── crawling2.svg │ ├── heritrix.gif │ ├── linux │ │ ├── icon.png │ │ ├── whale_1024.png │ │ ├── whale_256.png │ │ ├── whale_32.png │ │ ├── whale_512.png │ │ └── whale_64.png │ ├── mLogo_animated.gif │ ├── memento.ico │ ├── openWB.png │ ├── whale.icns │ ├── whale.ico │ └── whale_256.png ├── loadingScreens │ ├── actions │ │ └── index.js │ ├── constants │ │ └── index.js │ ├── epics │ │ └── index.js │ ├── firstTime │ │ ├── components │ │ │ ├── javaCheck │ │ │ │ ├── checkReports │ │ │ │ │ ├── index.js │ │ │ │ │ ├── javaCheckDone.js │ │ │ │ │ ├── javaCheckNotDone.js │ │ │ │ │ └── notJStepOrIs.js │ │ │ │ ├── downloadJDk │ │ │ │ │ ├── askDownload.js │ │ │ │ │ ├── downloadDarwinJdk.js │ │ │ │ │ ├── downloadFinished.js │ │ │ │ │ ├── index.js │ │ │ │ │ ├── jdkInstallError.js │ │ │ │ │ └── startJdkInstall.js │ │ │ │ ├── index.js │ │ │ │ ├── javaCheckContents.js │ │ │ │ └── javaCheckStep.js │ │ │ ├── osCheck │ │ │ │ ├── index.js │ │ │ │ ├── osCheckContents.js │ │ │ │ ├── osCheckDone.js │ │ │ │ ├── osCheckNotDone.js │ │ │ │ └── osCheckStep.js │ │ │ ├── progress │ │ │ │ ├── index.js │ │ │ │ ├── progressCard.js │ │ │ │ ├── progressMessage.js │ │ │ │ └── progressSteps.js │ │ │ ├── serviceCheck │ │ │ │ ├── serviceCheckMessage.js │ │ │ │ └── serviceCheckStep.js │ │ │ └── uiState │ │ │ │ ├── uiStateMessages.js │ │ │ │ └── uiStateStep.js │ │ ├── containers │ │ │ ├── firstTime.js │ │ │ └── layout.js │ │ ├── icons │ │ │ ├── whale.ico │ │ │ ├── whale_256.png │ │ │ └── whale_64.png │ │ ├── loadingScreen.html │ │ └── loadingScreen.js │ ├── middleware │ │ └── index.js │ ├── notFirstTime │ │ ├── components │ │ │ ├── progress │ │ │ │ ├── index.js │ │ │ │ ├── progressMessage.js │ │ │ │ └── progressSteps.js │ │ │ ├── serviceCheck │ │ │ │ ├── serviceCheckMessage.js │ │ │ │ └── serviceCheckStep.js │ │ │ └── uiState │ │ │ │ ├── uiStateMessages.js │ │ │ │ └── uiStateStep.js │ │ ├── containers │ │ │ ├── layout.js │ │ │ └── notFirstTime.js │ │ ├── icons │ │ │ ├── whale.ico │ │ │ ├── whale_256.png │ │ │ └── whale_64.png │ │ ├── loadingScreen.html │ │ └── notFirstLoad.js │ ├── records │ │ └── index.js │ ├── reducers │ │ ├── firstTime │ │ │ ├── index.js │ │ │ ├── javaCheck.js │ │ │ ├── jdkDl.js │ │ │ ├── jdkInstall.js │ │ │ └── osCheck.js │ │ ├── notFirstTime │ │ │ └── index.js │ │ └── shared │ │ │ ├── loadingStep.js │ │ │ ├── services.js │ │ │ └── uiState.js │ ├── shared │ │ ├── checkStepContents │ │ │ ├── checkStepContent.js │ │ │ └── index.js │ │ ├── checkStepLabels │ │ │ ├── checkStepLabel.js │ │ │ ├── checkStepWarningLabel.js │ │ │ └── index.js │ │ └── header │ │ │ └── index.js │ └── store │ │ ├── firstTime │ │ ├── configureStore.dev.js │ │ ├── configureStore.prod.js │ │ └── index.js │ │ └── notFirstTime │ │ ├── configureStore.dev.js │ │ ├── configureStore.prod.js │ │ └── index.js ├── logger │ └── logger.js ├── menu │ ├── contextMenu.js │ └── mainMenu.js ├── middleware │ ├── heritrixRequestHandler.js │ ├── index.js │ ├── ipc.js │ └── requestHandler.js ├── records │ ├── collection.js │ ├── crawlInfoRecord.js │ ├── runInfoRecord.js │ ├── serviceStatus.js │ └── wailCrawl.js ├── reducers │ ├── checkUrl.js │ ├── closing.js │ ├── collectionReducer.js │ ├── crawlJobIds.js │ ├── crawlToCollection.js │ ├── crawls.js │ ├── fsSeeds.js │ ├── header.js │ ├── index.js │ ├── requests.js │ ├── router.js │ ├── routing.js │ ├── runningCrawls.js │ ├── serviceStatuses.js │ ├── twitter.js │ └── wailCrawl.js ├── routes │ ├── index.js │ └── routeNames.js ├── settings │ └── settings.js ├── setupTestHook.js ├── stores │ ├── configureStore.dev.js │ ├── configureStore.js │ └── configureStore.prod.js ├── ui-main.js ├── util │ ├── checkSeed.js │ ├── fuzzyFilter.js │ ├── momentSort.js │ ├── recomposeHelpers.js │ ├── ringBuffer.js │ └── setPropsIfDev.js ├── vendor │ └── detectElementResize.js ├── wail.html ├── wail.js └── windowCloseHandler.js ├── wailPollyfil.js ├── webpackConfigs ├── core │ ├── webpack.config.js │ └── webpack.config.production.js ├── deving │ └── webpack.config.js ├── test │ ├── webpack.config.electron.js │ ├── webpack.config.production.js │ └── webpack.config.ui.js └── ui │ ├── webpack.config.electron.js │ ├── webpack.config.js │ └── webpack.config.production.js ├── windowsNukeDir.bat └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": [ 3 | [ 4 | "transform-decorators-legacy", 5 | "transform-object-rest-spread", 6 | { 7 | "useBuiltIns": true 8 | } 9 | ], 10 | "transform-export-extensions", 11 | "transform-es2015-modules-commonjs" 12 | ], 13 | "env": { 14 | "development": { 15 | "plugins":[ 16 | "transform-export-extensions" 17 | ], 18 | "presets": [ 19 | [ 20 | "env", 21 | { 22 | "targets": { 23 | "electron": "1.8.1" 24 | }, 25 | "useBuiltIns": true, 26 | "include": [ 27 | "syntax-trailing-function-commas" 28 | ], 29 | "exclude": [ 30 | "transform-async-to-generator", 31 | "web.timers", 32 | "web.immediate" 33 | ] 34 | } 35 | ] 36 | ] 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /.github/issue_template.md: -------------------------------------------------------------------------------- 1 | ### Are you submitting a **bug report** or a **feature request**? 2 | 3 | 4 | 5 | ### What is the current behavior? 6 | 7 | 8 | 9 | ### What is the expected behavior? 10 | 11 | 12 | ### What's your environment? 13 | 14 | 15 | 16 | ### Other information 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Wintel binary 2 | *.exe 3 | 4 | # Mac binary 5 | *.app 6 | 7 | #ignore build remnants 8 | build/* 9 | !build/icons* 10 | !build/version.txt 11 | !build/Info.plist 12 | bundledApps/waybackConfigWriter.pyc 13 | bundledApps/openjdk 14 | WAIL.spec 15 | *.db 16 | # Mac meta 17 | .DS_Store 18 | 19 | *.pid 20 | *.keystore 21 | 22 | waillogs 23 | memgators 24 | node_modules/ 25 | 26 | newbinaries 27 | 28 | src/public 29 | src/public/* 30 | 31 | .idea 32 | 33 | creds.json 34 | 35 | build 36 | 37 | #bundledApps/heritrix-3.2.0/ 38 | bundledApps/heritrix-3.3.0/ 39 | 40 | wayback.xml 41 | heritrix_out.log 42 | electron/build/dist 43 | 44 | npm-debug.* 45 | 46 | release 47 | zips 48 | 49 | 50 | *.map 51 | 52 | electron-main.js* 53 | 54 | backUp 55 | dist 56 | 57 | wail-config 58 | 59 | testBuild 60 | 61 | chromDLogs -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu 2 | MAINTAINER John Berlin 3 | 4 | RUN apt-get update && apt-get install -y libgtk2.0-0 libgconf-2-4 libasound2 libxtst6 libxss1 libnss3 xvfb libcanberra-gtk* firefox 5 | 6 | RUN groupadd wail && useradd -m -g wail wail 7 | 8 | ADD . /wail 9 | ADD settings.json /home/wail/.config/wail/wail-settings/ 10 | 11 | RUN chown -R wail:wail /home/wail /wail 12 | 13 | ENV JAVA_HOME=/wail/resources/app/bundledApps/openjdk 14 | 15 | USER wail 16 | 17 | CMD ["/wail/wail"] 18 | -------------------------------------------------------------------------------- /archiveIndexes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archiveIndexes/.gitkeep -------------------------------------------------------------------------------- /archives/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/.gitkeep -------------------------------------------------------------------------------- /archives/collections/default/archive/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/collections/default/archive/.gitkeep -------------------------------------------------------------------------------- /archives/collections/default/indexes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/collections/default/indexes/.gitkeep -------------------------------------------------------------------------------- /archives/collections/default/indexes/all.cdxj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/collections/default/indexes/all.cdxj -------------------------------------------------------------------------------- /archives/collections/default/indexes/index.cdxj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/collections/default/indexes/index.cdxj -------------------------------------------------------------------------------- /archives/collections/default/metadata.yaml: -------------------------------------------------------------------------------- 1 | description: Default Collection 2 | title: Default 3 | -------------------------------------------------------------------------------- /archives/collections/default/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/collections/default/static/.gitkeep -------------------------------------------------------------------------------- /archives/collections/default/templates/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/collections/default/templates/.gitkeep -------------------------------------------------------------------------------- /archives/static/flowplayer/flowplayer-3.2.18.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/static/flowplayer/flowplayer-3.2.18.swf -------------------------------------------------------------------------------- /archives/static/flowplayer/flowplayer.audio-3.2.11.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/static/flowplayer/flowplayer.audio-3.2.11.swf -------------------------------------------------------------------------------- /archives/static/flowplayer/flowplayer.controls-3.2.16.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/static/flowplayer/flowplayer.controls-3.2.16.swf -------------------------------------------------------------------------------- /archives/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/archives/static/flowplayer/flowplayer.pseudostreaming-3.2.13.swf -------------------------------------------------------------------------------- /archives/templates/banner.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /archives/templates/collinfo.json: -------------------------------------------------------------------------------- 1 | [ 2 | {% for route in routes %} 3 | {% if route | is_wb_handler %} 4 | {{ ',' if notfirst else '' }} 5 | { 6 | "id": "{{ route.path }}", 7 | "name": "{{ route.user_metadata.title if route.user_metadata.title else route.path }}", 8 | "timegate": "{{ host }}/{{route.path}}/", 9 | "timemap": "{{ host }}/{{route.path}}/timemap/*/" 10 | 11 | } 12 | {% set notfirst = true %} 13 | {% endif %} 14 | {% endfor %} 15 | ] 16 | -------------------------------------------------------------------------------- /archives/templates/proxy_cert_download.html: -------------------------------------------------------------------------------- 1 |

HTTPS Certificate For PyWb Web Archive Replay

2 | {% if not available %} 3 |

Sorry, HTTPS support is not configured for this proxy. However, the proxy should work in HTTP mode.

4 | 5 | {% else %} 6 |

Download for all platforms except Windows (or Firefox on Windows):

7 |

Download Certificate (All except Windows)

8 | 9 |

(If you see the Already Installed message, then no further action is necessary and you may start browsing!

10 | 11 |

Download for Windows platforms (except if using Firefox. For Firefox, use the above download, even on Windows):

12 |

Download Certificate (Window Only)

13 | {% endif %} 14 | -------------------------------------------------------------------------------- /archives/templates/proxy_select.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |

Pywb Proxy Collection Selector

4 | {% if coll %} 5 |

6 | Current collection is: {{ coll }} 7 |

8 | {% else %} 9 |

You have attempted to load the url {{ url }}, but there are multiple collections available.

10 | {% endif %} 11 | 12 |

Please select which collection you would like to use (You will be redirected back to {{ url }}): 13 |

14 | 15 | 22 | 23 |

(Once selected, you will not be prompted again, however you can return to this page to switch collections.)

24 | 25 | 26 | -------------------------------------------------------------------------------- /bootstrap.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cwd=$(pwd) 4 | release="$cwd/release/*" 5 | 6 | echo "running npm install" 7 | npm install 8 | 9 | echo "downloading the openjdk and memgator for current os" 10 | npm run-script download-externals 11 | 12 | if [ ! -z "$1" -a "$1" = "build" ]; then 13 | rm -rf ${release} 14 | echo "building for current os" 15 | npm run-script package 16 | fi 17 | -------------------------------------------------------------------------------- /build/icons/archive.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/archive.icns -------------------------------------------------------------------------------- /build/icons/famNah.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/famNah.png -------------------------------------------------------------------------------- /build/icons/famYes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/famYes.png -------------------------------------------------------------------------------- /build/icons/herirtixWAILLogo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/herirtixWAILLogo.psd -------------------------------------------------------------------------------- /build/icons/heritrixLogo_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/heritrixLogo_64.png -------------------------------------------------------------------------------- /build/icons/openWaybackLogo_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/openWaybackLogo_64.png -------------------------------------------------------------------------------- /build/icons/openWaybackLogo_64.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/openWaybackLogo_64.psd -------------------------------------------------------------------------------- /build/icons/openWaybackWAILLogo.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/openWaybackWAILLogo.psd -------------------------------------------------------------------------------- /build/icons/whale.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale.ico -------------------------------------------------------------------------------- /build/icons/whaleLogo_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whaleLogo_64.png -------------------------------------------------------------------------------- /build/icons/whale_1024.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_1024.icns -------------------------------------------------------------------------------- /build/icons/whale_1024.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_1024.ico -------------------------------------------------------------------------------- /build/icons/whale_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_1024.png -------------------------------------------------------------------------------- /build/icons/whale_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_128.png -------------------------------------------------------------------------------- /build/icons/whale_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_256.png -------------------------------------------------------------------------------- /build/icons/whale_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_32.png -------------------------------------------------------------------------------- /build/icons/whale_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_512.png -------------------------------------------------------------------------------- /build/icons/whale_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/build/icons/whale_64.png -------------------------------------------------------------------------------- /buildResources/linux/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/buildResources/linux/icon.png -------------------------------------------------------------------------------- /buildResources/osx/archive.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/buildResources/osx/archive.icns -------------------------------------------------------------------------------- /buildResources/osx/whale.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/buildResources/osx/whale.icns -------------------------------------------------------------------------------- /buildResources/winLinux/mLogo_animated.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/buildResources/winLinux/mLogo_animated.gif -------------------------------------------------------------------------------- /bundledApps/heritrix.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | set here=%cd% 3 | set JAVA_HOME=%here%\openjdk 4 | set JRE_HOME=%here%\openjdk\jre 5 | set HERITRIX_HOME=%here%\heritrix 6 | set start=%here%\heritrix\bin\heritrix.cmd 7 | 8 | 9 | echo starting %* 10 | 11 | %start% %* -------------------------------------------------------------------------------- /bundledApps/heritrix/bin/arcreader: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ## 3 | ## This script runs the arcreader main. 4 | ## 5 | ## Optional environment variables 6 | ## 7 | ## JAVA_HOME Point at a JDK install to use. 8 | ## 9 | ## HERITRIX_HOME Pointer to your heritrix install. If not present, we 10 | ## make an educated guess based of position relative to this 11 | ## script. 12 | ## 13 | ## JAVA_OPTS Java runtime options. 14 | PRG="$0" 15 | while [ -h "$PRG" ]; do 16 | ls=`ls -ld "$PRG"` 17 | link=`expr "$ls" : '.*-> \(.*\)$'` 18 | if expr "$link" : '.*/.*' > /dev/null; then 19 | PRG="$link" 20 | else 21 | PRG=`dirname "$PRG"`/"$link" 22 | fi 23 | done 24 | PRGDIR=`dirname "$PRG"` 25 | 26 | # Set HERITRIX_HOME. 27 | if [ -z "$HERITRIX_HOME" ] 28 | then 29 | HERITRIX_HOME=`cd "$PRGDIR/.." ; pwd` 30 | fi 31 | 32 | FOREGROUND='true' CLASS_MAIN='org.archive.io.arc.ARCReader' JMX_OFF='off' \ 33 | $HERITRIX_HOME/bin/heritrix $@ 34 | -------------------------------------------------------------------------------- /bundledApps/heritrix/bin/arcreader.cmd: -------------------------------------------------------------------------------- 1 | :: This is the Windows version of the extractor shell script 2 | :: Caveats, see heritrix.cmd 3 | :: 4 | :: This script runs the arcreader main. 5 | :: 6 | :: Optional environment variables 7 | :: 8 | :: JAVA_HOME Point at a JDK install to use. 9 | :: 10 | :: HERITRIX_HOME Pointer to your heritrix install. If not present, we 11 | :: make an educated guess based of position relative to this 12 | :: script. 13 | :: 14 | :: JAVA_OPTS Java runtime options. 15 | @echo off 16 | 17 | set PRGDIR=%~p0 18 | 19 | if "%PRGDIR%"=="~p0" ( 20 | cmd /E:ON /F:ON /V:ON /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 21 | goto:eof 22 | ) 23 | 24 | :: unset JMX_OFF afterwards if it wasn't set before 25 | :: Won't work if script is aborted with Ctrl+C... 26 | if not defined JMX_OFF set UNSET_JMX_OFF=true 27 | set JMX_OFF=off 28 | set CLASS_MAIN=org.archive.io.arc.ARCReader 29 | call "%PRGDIR%\foreground_heritrix.cmd" %* 30 | set CLASS_MAIN= 31 | if not defined UNSET_JMX_OFF goto:eof 32 | set JMX_OFF= 33 | set UNSET_JMX_OFF= 34 | 35 | :eof -------------------------------------------------------------------------------- /bundledApps/heritrix/bin/extractor: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ## 3 | ## This script runs the org.archive.crawler.extractor.ExtractorTool main. 4 | ## Pass '--help' to get usage message. 5 | ## 6 | ## Optional environment variables 7 | ## 8 | ## JAVA_HOME Point at a JDK install to use. 9 | ## 10 | ## HERITRIX_HOME Pointer to your heritrix install. If not present, we 11 | ## make an educated guess based of position relative to this 12 | ## script. 13 | ## 14 | ## JAVA_OPTS Java runtime options. 15 | PRG="$0" 16 | while [ -h "$PRG" ]; do 17 | ls=`ls -ld "$PRG"` 18 | link=`expr "$ls" : '.*-> \(.*\)$'` 19 | if expr "$link" : '.*/.*' > /dev/null; then 20 | PRG="$link" 21 | else 22 | PRG=`dirname "$PRG"`/"$link" 23 | fi 24 | done 25 | PRGDIR=`dirname "$PRG"` 26 | 27 | # Set HERITRIX_HOME. 28 | if [ -z "$HERITRIX_HOME" ] 29 | then 30 | HERITRIX_HOME=`cd "$PRGDIR/.." ; pwd` 31 | fi 32 | 33 | FOREGROUND='true', \ 34 | CLASS_MAIN='org.archive.crawler.extractor.ExtractorTool' \ 35 | $HERITRIX_HOME/bin/heritrix $@ 36 | -------------------------------------------------------------------------------- /bundledApps/heritrix/bin/extractor.cmd: -------------------------------------------------------------------------------- 1 | :: This is the Windows version of the extractor shell script 2 | :: Caveats, see heritrix.cmd 3 | :: 4 | :: This script runs the org.archive.crawler.extractor.ExtractorTool main. 5 | :: Pass '--help' to get usage message. 6 | :: 7 | :: Optional environment variables 8 | :: 9 | :: JAVA_HOME Point at a JDK install to use. 10 | :: 11 | :: HERITRIX_HOME Pointer to your heritrix install. If not present, we 12 | :: make an educated guess based of position relative to this 13 | :: script. 14 | :: 15 | :: JAVA_OPTS Java runtime options. 16 | @echo off 17 | 18 | set PRGDIR=%~p0 19 | 20 | if "%PRGDIR%"=="~p0" ( 21 | cmd /E:ON /F:ON /V:ON /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 22 | goto:eof 23 | ) 24 | 25 | set CLASS_MAIN=org.archive.crawler.extractor.ExtractorTool 26 | call "%PRGDIR%\foreground_heritrix.cmd" %* 27 | set CLASS_MAIN= 28 | 29 | :eof -------------------------------------------------------------------------------- /bundledApps/heritrix/bin/htmlextractor: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ## 3 | ## This script runs the org.archive.crawler.extractor.ExtractorHTMLTest main. 4 | ## 5 | ## Optional environment variables 6 | ## 7 | ## JAVA_HOME Point at a JDK install to use. 8 | ## 9 | ## HERITRIX_HOME Pointer to your heritrix install. If not present, we 10 | ## make an educated guess based of position relative to this 11 | ## script. 12 | ## 13 | ## JAVA_OPTS Java runtime options. 14 | PRG="$0" 15 | while [ -h "$PRG" ]; do 16 | ls=`ls -ld "$PRG"` 17 | link=`expr "$ls" : '.*-> \(.*\)$'` 18 | if expr "$link" : '.*/.*' > /dev/null; then 19 | PRG="$link" 20 | else 21 | PRG=`dirname "$PRG"`/"$link" 22 | fi 23 | done 24 | PRGDIR=`dirname "$PRG"` 25 | 26 | # Set HERITRIX_HOME. 27 | if [ -z "$HERITRIX_HOME" ] 28 | then 29 | HERITRIX_HOME=`cd "$PRGDIR/.." ; pwd` 30 | fi 31 | 32 | FOREGROUND='true', \ 33 | CLASS_MAIN='org.archive.crawler.extractor.ExtractorHTMLTest' \ 34 | $HERITRIX_HOME/bin/heritrix $@ 35 | -------------------------------------------------------------------------------- /bundledApps/heritrix/bin/htmlextractor.cmd: -------------------------------------------------------------------------------- 1 | :: This is the Windows version of the extractor shell script 2 | :: Caveats, see heritrix.cmd 3 | :: 4 | :: This script runs the org.archive.crawler.extractor.ExtractorHTMLTest main. 5 | :: 6 | :: Optional environment variables 7 | :: 8 | :: JAVA_HOME Point at a JDK install to use. 9 | :: 10 | :: HERITRIX_HOME Pointer to your heritrix install. If not present, we 11 | :: make an educated guess based of position relative to this 12 | :: script. 13 | :: 14 | :: JAVA_OPTS Java runtime options. 15 | @echo off 16 | 17 | set PRGDIR=%~p0 18 | 19 | if "%PRGDIR%"=="~p0" ( 20 | cmd /E:ON /F:ON /V:ON /c %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 21 | goto:eof 22 | ) 23 | 24 | 25 | set CLASS_MAIN=org.archive.crawler.extractor.ExtractorHTMLTest 26 | call "%PRGDIR%\foreground_heritrix.cmd" %* 27 | set CLASS_MAIN= 28 | 29 | :eof 30 | -------------------------------------------------------------------------------- /bundledApps/heritrix/conf/heritrix.cacerts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/conf/heritrix.cacerts -------------------------------------------------------------------------------- /bundledApps/heritrix/conf/jobs/.gitignore: -------------------------------------------------------------------------------- 1 | see http://stackoverflow.com/questions/115983/how-do-i-add-an-empty-directory-to-a-git-repository 2 | -------------------------------------------------------------------------------- /bundledApps/heritrix/conf/logging.properties: -------------------------------------------------------------------------------- 1 | # Recommended logging configuration for Heritrix 2 | 3 | # Default global logging level: only WARNINGs or higher from most code.. 4 | .level = WARNING 5 | # ...and even less from the too-chatty-with-WARNINGs HttpClient library... 6 | org.apache.commons.httpclient.level = SEVERE 7 | org.restlet.Component.LogFilter.level = SEVERE 8 | org.mortbay.log.level = SEVERE 9 | # ...but INFO for our classes, which reserve FINE/FINER/FINEST for bulk/trivia... 10 | org.archive.level = INFO 11 | 12 | # Basic logging setup; to console (and thus usually heritrix_out.log), all levels 13 | handlers = java.util.logging.ConsoleHandler 14 | java.util.logging.ConsoleHandler.level = ALL 15 | java.util.logging.ConsoleHandler.formatter= org.archive.util.OneLineSimpleLogger 16 | -------------------------------------------------------------------------------- /bundledApps/heritrix/extras/pagerank/README.txt: -------------------------------------------------------------------------------- 1 | This directory contains utility classes and scripts which can be used, together 2 | with other tools like Hadoop, to perform an offline PageRank-calculation of a 3 | crawl's revealed link graph. 4 | 5 | For more information, visit: 6 | http://webteam.archive.org/confluence/display/Heritrix/Offline+PageRank+Analysis+Notes. 7 | 8 | Note that the Java files in this directory are modifications of Hadoop 9 | example code, and are thus published under the Apache license. -------------------------------------------------------------------------------- /bundledApps/heritrix/extras/pagerank/assignUrlIndex.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | $prev = ""; 4 | $index = -1; 5 | while() { 6 | $line = $_; 7 | chomp($line); 8 | ($from,$to) = split(/ /,$line); 9 | 10 | if($from ne $prev) { 11 | ++$index; 12 | } 13 | 14 | print "$index\t$from\t$to\n"; 15 | $prev = $from; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /bundledApps/heritrix/extras/pagerank/pageRankSetup.pl: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env perl 2 | 3 | while() { 4 | $line = $_; 5 | chomp($line); 6 | 7 | ($fromUrl,@toUrls) = split(/\t/,$line); 8 | 9 | $toUrlString = "O:"; 10 | $toUrlString.= join ",",@toUrls; 11 | 12 | print "$fromUrl\t1\t$toUrlString\n"; 13 | } 14 | 15 | -------------------------------------------------------------------------------- /bundledApps/heritrix/extras/pagerank/run-pr.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | #assuming normalized input 4 | 5 | lines=`cat input/* | wc -l`; 6 | 7 | for f in `seq 1 20`; do 8 | sh bin/hadoop jar hadoop-0.14.3-examples.jar pageRank input output 9 | 10 | rm input/* 11 | 12 | total=`cat output/* | cut -f2 | ~vinay/tools/sum_col`; 13 | cat output/* | ~vinay/tools/normalizePageRank.pl $total $lines > input/data.pr.$f 14 | 15 | #mv output/* input/ 16 | 17 | rm -rf output/ 18 | 19 | done 20 | -------------------------------------------------------------------------------- /bundledApps/heritrix/jobs/.gitignore: -------------------------------------------------------------------------------- 1 | see http://stackoverflow.com/questions/115983/how-do-i-add-an-empty-directory-to-a-git-repository 2 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/ant-1.7.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/ant-1.7.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/ant-launcher-1.7.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/ant-launcher-1.7.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/ant.NOTICE: -------------------------------------------------------------------------------- 1 | ========================================================================= 2 | == NOTICE file corresponding to the section 4 d of == 3 | == the Apache License, Version 2.0, == 4 | == in this case for the Apache Ant distribution. == 5 | ========================================================================= 6 | 7 | This product includes software developed by 8 | The Apache Software Foundation (http://www.apache.org/). 9 | 10 | This product includes also software developed by : 11 | - the W3C consortium (http://www.w3c.org) , 12 | - the SAX project (http://www.saxproject.org) 13 | 14 | Please read the different LICENSE files present in the root directory of 15 | this distribution. 16 | 17 | The names "Ant" and "Apache Software Foundation" must not be used to 18 | endorse or promote products derived from this software without prior 19 | written permission. For written permission, please contact 20 | apache@apache.org. -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/aopalliance-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/aopalliance-1.0.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/archive-overlay-commons-httpclient-3.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/archive-overlay-commons-httpclient-3.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/bsh-2.0b5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/bsh-2.0b5.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/com.noelios.restlet-1.1.10.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/com.noelios.restlet-1.1.10.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/com.noelios.restlet.ext.jetty-1.1.10.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/com.noelios.restlet.ext.jetty-1.1.10.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-cli-1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-cli-1.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-cli.NOTICE: -------------------------------------------------------------------------------- 1 | Apache Commons CLI 2 | Copyright 2002-2006 The Apache Software Foundation 3 | 4 | This product includes software developed by 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-codec-1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-codec-1.6.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-codec.NOTICE: -------------------------------------------------------------------------------- 1 | Apache Commons Codec 2 | Copyright 2001-2007 The Apache Software Foundation 3 | 4 | This product includes software developed by 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-collections-3.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-collections-3.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-el.NOTICE: -------------------------------------------------------------------------------- 1 | Apache Jakarta Commons EL 2 | Copyright 1999-2006 The Apache Software Foundation 3 | 4 | This product includes software developed by 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-io-1.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-io-1.4.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-io.NOTICE: -------------------------------------------------------------------------------- 1 | Apache Commons IO 2 | Copyright 2002-2008 The Apache Software Foundation 3 | 4 | This product includes software developed by 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-lang-2.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-lang-2.6.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-lang.NOTICE: -------------------------------------------------------------------------------- 1 | Apache Commons Lang 2 | Copyright 2001-2008 The Apache Software Foundation 3 | 4 | This product includes software developed by 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-logging-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-logging-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-net-2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/commons-net-2.0.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/commons-net.NOTICE: -------------------------------------------------------------------------------- 1 | Apache Commons Net 2 | Copyright 2001-2006 The Apache Software Foundation 3 | 4 | This product includes software developed by 5 | The Apache Software Foundation (http://www.apache.org/). 6 | -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/dnsjava-2.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/dnsjava-2.0.3.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/fastutil-5.0.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/fastutil-5.0.7.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/freemarker-2.3.19.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/freemarker-2.3.19.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/groovy-all-1.6.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/groovy-all-1.6.3.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/guava-r08.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/guava-r08.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/heritrix-commons-3.2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/heritrix-commons-3.2.0.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/heritrix-engine-3.2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/heritrix-engine-3.2.0.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/heritrix-modules-3.2.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/heritrix-modules-3.2.0.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/htmlparser-1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/htmlparser-1.6.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/httpcore-4.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/httpcore-4.3.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/ia-web-commons-1.0-20131207.033010-102.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/ia-web-commons-1.0-20131207.033010-102.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/itext-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/itext-1.3.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/javaswf-CVS-SNAPSHOT-1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/javaswf-CVS-SNAPSHOT-1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/je-4.1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/je-4.1.6.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jericho-html-2.3.LICENSE: -------------------------------------------------------------------------------- 1 | From http://jerichohtml.sourceforge.net/doc/index.html 2 | 3 | Jericho HTML Parser 4 | 5 | Jericho HTML Parser is a simple but powerful java library allowing 6 | analysis and manipulation of parts of an HTML document, including 7 | some common server-side tags, while reproducing verbatim any 8 | unrecognised or invalid HTML. It also provides high-level HTML form 9 | manipulation functions. 10 | 11 | It is an open source library released under both the Eclipse Public 12 | License (EPL) [http://www.eclipse.org/legal/epl-v10.html] and GNU 13 | Lesser General Public License (LGPL) 14 | [http://www.gnu.org/copyleft/lesser.html]. You are therefore free to 15 | use it in commercial applications subject to the terms detailed in 16 | either one of these licence documents. -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jericho-html-2.6.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jericho-html-2.6.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jets3t-0.5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jets3t-0.5.0.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jetty-6.1.26.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jetty-6.1.26.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jetty-ajp-6.1.11.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jetty-ajp-6.1.11.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jetty-sslengine-6.1.26.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jetty-sslengine-6.1.26.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jetty-util-6.1.26.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jetty-util-6.1.26.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jline-0.9.94.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jline-0.9.94.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/jna-3.2.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/jna-3.2.3.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/joda-time-1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/joda-time-1.6.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/json-20090211.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/json-20090211.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/junit-3.8.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/junit-3.8.2.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/juniversalchardet-1.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/juniversalchardet-1.0.3.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/kryo-1.01.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/kryo-1.01.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/libidn-1.15.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/libidn-1.15.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/mg4j-1.0.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/mg4j-1.0.1.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/minlog-1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/minlog-1.2.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/org.restlet-1.1.10.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/org.restlet-1.1.10.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/poi-2.5.1-final-20040804.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/poi-2.5.1-final-20040804.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/poi-scratchpad-2.5.1-final-20040804.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/poi-scratchpad-2.5.1-final-20040804.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/reflectasm-0.8.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/reflectasm-0.8.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/servlet-api-2.5-20081211.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/servlet-api-2.5-20081211.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/spring-aop-3.0.5.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/spring-aop-3.0.5.RELEASE.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/spring-asm-3.0.5.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/spring-asm-3.0.5.RELEASE.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/spring-beans-3.0.5.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/spring-beans-3.0.5.RELEASE.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/spring-context-3.0.5.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/spring-context-3.0.5.RELEASE.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/spring-core-3.0.5.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/spring-core-3.0.5.RELEASE.jar -------------------------------------------------------------------------------- /bundledApps/heritrix/lib/spring-expression-3.0.5.RELEASE.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/heritrix/lib/spring-expression-3.0.5.RELEASE.jar -------------------------------------------------------------------------------- /bundledApps/html/frames.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | WARC viewer 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /bundledApps/html/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /bundledApps/html/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /bundledApps/html/skin/icons-rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/skin/icons-rtl.gif -------------------------------------------------------------------------------- /bundledApps/html/skin/icons.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/skin/icons.gif -------------------------------------------------------------------------------- /bundledApps/html/skin/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/skin/loading.gif -------------------------------------------------------------------------------- /bundledApps/html/skin/vline-rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/skin/vline-rtl.gif -------------------------------------------------------------------------------- /bundledApps/html/skin/vline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/html/skin/vline.gif -------------------------------------------------------------------------------- /bundledApps/jwat-tools/e.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/e.out -------------------------------------------------------------------------------- /bundledApps/jwat-tools/env.cmd: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | REM If JAVA_HOME is not set, use java.exe in execution path 3 | if "%JAVA_HOME%" == "" ( 4 | set JAVA=java 5 | ) else ( 6 | set JAVA="%JAVA_HOME%\bin\java" 7 | ) 8 | 9 | REM JWATTOOLS_HOME must point to home directory of JWAT-Tools install. 10 | SET JWATTOOLS_HOME=%~dp0 11 | 12 | REM CP must contain a semicolon-separated list of JARs used by JWAT-Tools. 13 | SET CP=%JWATTOOLS_HOME% 14 | FOR /R %JWATTOOLS_HOME%/lib %%a in (*.jar) DO CALL :AddToPath %%a 15 | REM ECHO %CP% 16 | GOTO :EOF 17 | 18 | :AddToPath 19 | SET CP=%CP%;%1 20 | GOTO :EOF 21 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/env.sh: -------------------------------------------------------------------------------- 1 | # If JAVA_HOME is not set, use the java in the execution path 2 | if [ ${JAVA_HOME} ] ; then 3 | JAVA="$JAVA_HOME/bin/java" 4 | else 5 | JAVA=java 6 | fi 7 | 8 | # JWATTOOLS_HOME must point to home directory of JWAT-Tools install. 9 | PRG="$0" 10 | 11 | # need this for relative symlinks 12 | while [ -h "$PRG" ] ; do 13 | ls=`ls -ld "$PRG"` 14 | link=`expr "$ls" : '.*-> \(.*\)$'` 15 | if expr "$link" : '/.*' > /dev/null; then 16 | PRG="$link" 17 | else 18 | PRG="`dirname "$PRG"`/$link" 19 | fi 20 | done 21 | 22 | JWATTOOLS_HOME=`dirname "$PRG"` 23 | 24 | # make it fully qualified 25 | JWATTOOLS_HOME=`cd "$JWATTOOLS_HOME" && pwd` 26 | 27 | # CP must contain a colon-separated list of resources used by JWAT-Tools. 28 | CP=$JWATTOOLS_HOME/ 29 | for i in `ls ${JWATTOOLS_HOME}/lib/*.jar` 30 | do 31 | CP=${CP}:${i} 32 | done 33 | #echo $CP 34 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/i.out: -------------------------------------------------------------------------------- 1 | # 2 | # Job summary 3 | # 4 | GZip files: 0 5 | + Arc: 0 6 | + Warc: 0 7 | Arc files: 0 8 | Warc files: 1 9 | Errors: 0 10 | Warnings: 0 11 | RuntimeErr: 0 12 | Skipped: 0 13 | Time: 00:00:01 (1224 ms.) 14 | TotalBytes: 18.7 kb 15 | AvgBytes: 18.7 kb/s 16 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/jwattools.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enableextensions 3 | 4 | call %~dp0\env.cmd 5 | 6 | if "%JAVA_OPTS%" == "" ( 7 | rem -XX:PermSize=64M -XX:MaxPermSize=256M 8 | set JAVA_OPTS=-Xms256m -Xmx1024m 9 | ) 10 | 11 | %JAVA% %JAVA_OPTS% -cp "%CP%" org.jwat.tools.JWATTools %* 12 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/jwattools.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ProgDir=`dirname "$0"` 3 | . "${ProgDir}/env.sh" 4 | 5 | if [ -z "${JAVA_OPTS}" ]; then 6 | # -XX:PermSize=64M -XX:MaxPermSize=256M 7 | JAVA_OPTS="-Xms256m -Xmx1024m" 8 | fi 9 | 10 | "${JAVA}" ${JAVA_OPTS} -cp "$CP" org.jwat.tools.JWATTools "$@" 11 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/jwattools_debug.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enableextensions 3 | 4 | call %~dp0\env.cmd 5 | 6 | if "%JAVA_DEBUG_OPTS%" == "" ( 7 | set JAVA_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 8 | ) 9 | 10 | if "%JAVA_OPTS%" == "" ( 11 | rem -XX:PermSize=64M -XX:MaxPermSize=256M 12 | set JAVA_OPTS=-Xms256m -Xmx1024m 13 | ) 14 | 15 | %JAVA% %JAVA_DEBUG_OPTS% %JAVA_OPTS% -cp "%CP%" org.jwat.tools.JWATTools %* 16 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/jwattools_debug.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ProgDir=`dirname "$0"` 3 | . "${ProgDir}/env.sh" 4 | 5 | if [ -z "${JAVA_DEBUG_OPTS}" ]; then 6 | JAVA_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044" 7 | fi 8 | 9 | if [ -z "${JAVA_OPTS}" ]; then 10 | # -XX:PermSize=64M -XX:MaxPermSize=256M 11 | JAVA_OPTS="-Xms256m -Xmx1024m" 12 | fi 13 | 14 | "${JAVA}" ${JAVA_DEBUG_OPTS} ${JAVA_OPTS} -cp "$CP" org.jwat.tools.JWATTools "$@" 15 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/jwattools_debug_suspended.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | setlocal enableextensions 3 | 4 | call %~dp0\env.cmd 5 | 6 | if "%JAVA_DEBUG_OPTS%" == "" ( 7 | set JAVA_DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044 8 | ) 9 | 10 | if "%JAVA_OPTS%" == "" ( 11 | rem -XX:PermSize=64M -XX:MaxPermSize=256M 12 | set JAVA_OPTS=-Xms256m -Xmx1024m 13 | ) 14 | 15 | %JAVA% %JAVA_DEBUG_OPTS% %JAVA_OPTS% -cp "%CP%" org.jwat.tools.JWATTools %* 16 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/jwattools_debug_suspended.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ProgDir=`dirname "$0"` 3 | . "${ProgDir}/env.sh" 4 | 5 | if [ -z "${JAVA_DEBUG_OPTS}" ]; then 6 | JAVA_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1044" 7 | fi 8 | 9 | if [ -z "${JAVA_OPTS}" ]; then 10 | # -XX:PermSize=64M -XX:MaxPermSize=256M 11 | JAVA_OPTS="-Xms256m -Xmx1024m" 12 | fi 13 | 14 | "${JAVA}" ${JAVA_DEBUG_OPTS} ${JAVA_OPTS} -cp "$CP" org.jwat.tools.JWATTools "$@" 15 | -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jna-3.2.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jna-3.2.7.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-arc-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-arc-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-archive-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-archive-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-archive-common-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-archive-common-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-common-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-common-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-gzip-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-gzip-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-tools-0.6.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-tools-0.6.2.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/lib/jwat-warc-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/bundledApps/jwat-tools/lib/jwat-warc-1.0.4.jar -------------------------------------------------------------------------------- /bundledApps/jwat-tools/v.out: -------------------------------------------------------------------------------- 1 | # 2 | # Summary of '/Users/machawk1/Downloads/20160112194311908.warc' 3 | # 4 | Warc.isValid: true 5 | Warc.Records: 7 6 | Warc.Errors: 0 7 | Warc.Warnings: 0 8 | # 9 | # Job summary 10 | # 11 | GZip files: 0 12 | + Arc: 0 13 | + Warc: 0 14 | Arc files: 0 15 | Warc files: 1 16 | Errors: 0 17 | Warnings: 0 18 | RuntimeErr: 0 19 | Skipped: 0 20 | Time: 00:00:01 (1224 ms.) 21 | TotalBytes: 18.7 kb 22 | AvgBytes: 18.7 kb/s 23 | -------------------------------------------------------------------------------- /bundledApps/moveCollections.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ ! -d "$1" ]; then 4 | echo $1 5 | fi -------------------------------------------------------------------------------- /bundledApps/runH.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | CWD=$(pwd) 4 | export JAVA_HOME="${CWD}/openjdk" 5 | export JRE_HOME="${CWD}/openjdk/jre" 6 | export HERITRIX_HOME="${CWD}/heritrix" 7 | 8 | START="${HERITRIX_HOME}/bin/heritrix" 9 | 10 | $START -a lorem:ipsum --jobs-dir /home/john/Documents/WAIL_Managed_Crawls -------------------------------------------------------------------------------- /config/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/config/.gitkeep -------------------------------------------------------------------------------- /config/archive.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "WAIL", 4 | "name": "Web Archive Integration Layer", 5 | "timemap": "http://localhost:8080/wayback/timemap/link/", 6 | "timegate": "http://localhost:8080/wayback/" 7 | } 8 | ] -------------------------------------------------------------------------------- /coreData/database/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/coreData/database/.gitkeep -------------------------------------------------------------------------------- /depDifWinRest.txt: -------------------------------------------------------------------------------- 1 | babel-preset-env: 2 | win: 1.1.1 3 | rest: 1.1.4 -------------------------------------------------------------------------------- /doElectron.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | base=$(pwd) 4 | 5 | bs="$base/bootstrap.sh" 6 | release="$base/release/*" 7 | 8 | if [ ! -x "$bs" ]; then 9 | chmod +x ${bs} 10 | fi 11 | 12 | if [ ! -z "$1" ]; then 13 | echo $1 14 | if [[ $1 == *"build"* ]]; then 15 | echo cleaning the release directory 16 | rm -rf ${release} 17 | fi 18 | 19 | if [[ $1 == *"package"* ]]; then 20 | echo cleaning the release directory 21 | rm -rf ${release} 22 | fi 23 | 24 | if [ "$1" = "install-start" ]; then 25 | echo "npm install && npm run-script start-dev" 26 | npm install 27 | npm run-script start-dev 28 | elif [ "$1" = "bootstrap" ]; then 29 | echo running bootstrap.sh 30 | ${bs} 31 | elif [ "$1" = "bootstrap-build" ]; then 32 | echo running bootstrap.sh 33 | ${bs} build 34 | else 35 | echo "npm run-script $1" 36 | npm run-script $1 37 | fi 38 | fi 39 | -------------------------------------------------------------------------------- /images/frontpage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/frontpage.png -------------------------------------------------------------------------------- /images/wail-advanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wail-advanced.png -------------------------------------------------------------------------------- /images/wailFront.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wailFront.png -------------------------------------------------------------------------------- /images/wailHome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wailHome.png -------------------------------------------------------------------------------- /images/wail_0.2016.03.16_advanced.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wail_0.2016.03.16_advanced.png -------------------------------------------------------------------------------- /images/wail_0.2016.03.16_basic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wail_0.2016.03.16_basic.png -------------------------------------------------------------------------------- /images/wiki/Misc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/Misc.png -------------------------------------------------------------------------------- /images/wiki/Services.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/Services.png -------------------------------------------------------------------------------- /images/wiki/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/Settings.png -------------------------------------------------------------------------------- /images/wiki/Wail-Front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/Wail-Front.png -------------------------------------------------------------------------------- /images/wiki/Wail-SideBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/Wail-SideBar.png -------------------------------------------------------------------------------- /images/wiki/heritrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/heritrix.png -------------------------------------------------------------------------------- /images/wiki/newCrawl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/newCrawl.png -------------------------------------------------------------------------------- /images/wiki/wayback.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/images/wiki/wayback.png -------------------------------------------------------------------------------- /runMemgator.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ./memgators/memgator-linux-amd64 -p 3031 -a config/archives.json server -------------------------------------------------------------------------------- /runTest.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | here=$(pwd) 4 | testDir=${here}/tests 5 | ava="node --harmony --harmony_async_await ./node_modules/.bin/ava --verbose" 6 | 7 | ${ava} ${testDir}/$1 -------------------------------------------------------------------------------- /sharedUtil/index.js: -------------------------------------------------------------------------------- 1 | import Pather from './pather' 2 | import ViewWatcher from './viewWatcher' 3 | import createServiceDaemon from './serviceDaemon' 4 | import {default as wailConsts} from './constants' 5 | 6 | exports.Pather = Pather 7 | exports.ViewWatcher = ViewWatcher 8 | exports.createServiceDaemon = createServiceDaemon 9 | exports.wailConsts = wailConsts 10 | -------------------------------------------------------------------------------- /sharedUtil/viewWatcher.js: -------------------------------------------------------------------------------- 1 | import EventEmitter from 'eventemitter3' 2 | 3 | class _ViewWatcher extends EventEmitter { 4 | view (from, viewing) { 5 | this.emit(`${from}-view`, viewing) 6 | } 7 | } 8 | 9 | const ViewWatcher = new _ViewWatcher() 10 | 11 | export default ViewWatcher 12 | -------------------------------------------------------------------------------- /support/adhoc.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/support/adhoc.keystore -------------------------------------------------------------------------------- /temp/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "stage-0","node6", "react"], 3 | "plugins": [ 4 | "transform-runtime", 5 | "add-module-exports", 6 | "babel-plugin-transform-decorators-legacy", 7 | "react-html-attrs", 8 | "transform-class-properties", 9 | "react-html-attrs" 10 | ], 11 | "env": { 12 | "development": { 13 | "presets": ["react-hmre"] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /tests/helpers/loadSettings.js: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import ElectronSettings from 'electron-settings' 3 | 4 | const loadSettings = () => { 5 | const plat = process.platform 6 | let configDirPath 7 | if (plat === 'linux') { 8 | configDirPath = path.join(process.env['HOME'], '.config/WAIL/wail-settings') 9 | } else if (plat === 'darwin') { 10 | configDirPath = plat.join(process.env['HOME'], 'Library/Application\\ Support/WAIL/wail-settings') 11 | } 12 | return new ElectronSettings({configDirPath}) 13 | } 14 | 15 | export default loadSettings 16 | -------------------------------------------------------------------------------- /tests/helpers/mockSettings.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs-extra' 2 | import kph from 'key-path-helpers' 3 | import path from 'path' 4 | 5 | export default class MockSettings { 6 | constructor () { 7 | this._settingsCache = null 8 | } 9 | 10 | configure (pathToSettings) { 11 | this._settingsCache = fs.readJsonSync(pathToSettings) 12 | } 13 | 14 | get (what) { 15 | if (typeof what === 'string') { 16 | return kph.getValueAtKeyPath(this._settingsCache, what) 17 | } 18 | return this._settingsCache 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /tests/screenshots/linux/archiveConfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/tests/screenshots/linux/archiveConfig.png -------------------------------------------------------------------------------- /tests/test.js: -------------------------------------------------------------------------------- 1 | import test from 'ava' 2 | import { Observable } from 'rxjs' 3 | 4 | test('observe', t => { 5 | t.plan(3) 6 | return Observable.of(1, 2, 3, 4, 5, 6) 7 | .filter(n => { 8 | // Only even numbers 9 | return n % 2 === 0 10 | }) 11 | .map(() => t.pass()) 12 | }) 13 | -------------------------------------------------------------------------------- /tests/testArchiveManager/testArchiveManager.js: -------------------------------------------------------------------------------- 1 | import test from 'ava' 2 | import Promise from 'bluebird' 3 | import Path from 'path' 4 | import tSettings from '../helpers/mockSettings' 5 | import ArchiveManager from '../../wail-core/managers/archiveManager' 6 | 7 | const cwd = process.cwd() 8 | let settings = new tSettings() 9 | let aMan, notifs 10 | 11 | test.before('test setup', t => { 12 | console.log(cwd) 13 | settings.configure() 14 | aMan = new ArchiveManager(settings) 15 | notifs = aMan.subscribeToNotifications((notif) => { 16 | console.log(notif) 17 | }) 18 | }) 19 | 20 | test('the archive manager should be able to get all collections', async t => { 21 | 22 | }) 23 | -------------------------------------------------------------------------------- /timemaps/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/timemaps/.gitkeep -------------------------------------------------------------------------------- /tools/builder.js: -------------------------------------------------------------------------------- 1 | const webpack = require('webpack') 2 | 3 | process.on('message', ({who, path}) => { 4 | console.log(who, path) 5 | const config = require(path) 6 | webpack(config, (err, stats) => { 7 | if (err) { 8 | process.send({who, wasError: true, stats}) 9 | } else { 10 | process.send({who, wasError: false, stats}) 11 | } 12 | }) 13 | }) -------------------------------------------------------------------------------- /tools/core-dev-server.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/tools/core-dev-server.js -------------------------------------------------------------------------------- /tools/installModules.js: -------------------------------------------------------------------------------- 1 | import "babel-polyfill" 2 | import fs from 'fs-extra' 3 | import path from 'path' 4 | import cp from 'child_process' 5 | 6 | 7 | const areBoostrappingNode = false 8 | let bstrapPath = '' 9 | 10 | let modules = [ 11 | path.resolve(__dirname, '../wail-core'), 12 | path.resolve(__dirname, '../wail-ui') 13 | ] 14 | 15 | 16 | modules.forEach( m => { 17 | fs.stat(path.join(m,'package.json'),(err, stat) => { 18 | if(err) { 19 | console.log('it does not exist',err) 20 | } else { 21 | console.log(stat) 22 | cp.spawn('npm',['i'],{ env: process.env, cwd: m, stdio: 'inherit' }) 23 | } 24 | }) 25 | }) 26 | 27 | -------------------------------------------------------------------------------- /tools/makepywbwin.js: -------------------------------------------------------------------------------- 1 | const request = require('request') 2 | const reqProg = require('request-progress') 3 | const fs = require('fs-extra') 4 | const Promise = require('bluebird') 5 | 6 | const ensureDir = dir => new Promise((resolve,reject) => { 7 | fs.ensureDir(dir,err => { 8 | if (err) { 9 | reject(err) 10 | } else { 11 | resolve() 12 | } 13 | }) 14 | }) -------------------------------------------------------------------------------- /twitterDump/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/twitterDump/.gitkeep -------------------------------------------------------------------------------- /wail-archiver/utils/archiverError.js: -------------------------------------------------------------------------------- 1 | export default class ArchiverError extends Error { 2 | constructor (dError) { 3 | super() 4 | this.dErorr = dError 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /wail-archiver/utils/getResBodyElectron.js: -------------------------------------------------------------------------------- 1 | import Promise from 'bluebird' 2 | import isEmpty from 'lodash/isEmpty' 3 | import ArchiverError from './archiverError' 4 | 5 | function getResBodyElectron (requestId, wcDebugger) { 6 | return new Promise((resolve, reject) => { 7 | wcDebugger.sendCommand('Network.getResponseBody', {requestId}, (error, body) => { 8 | if (!isEmpty(error)) { 9 | reject(new ArchiverError(error)) 10 | } else { 11 | resolve(body) 12 | } 13 | }) 14 | }) 15 | } 16 | 17 | module.exports = getResBodyElectron 18 | -------------------------------------------------------------------------------- /wail-archiver/utils/index.js: -------------------------------------------------------------------------------- 1 | export isEmptyPlainObject from './isEmptyPlainObject' 2 | export getResBodyElectron from './getResBodyElectron' 3 | -------------------------------------------------------------------------------- /wail-archiver/utils/isEmptyPlainObject.js: -------------------------------------------------------------------------------- 1 | import isEmpty from 'lodash/isEmpty' 2 | /** 3 | * @desc Test to see if a ``plain object`` is empty 4 | * @param {Object?} object 5 | * @return {boolean} 6 | */ 7 | export default function isEmptyPlainObject (object) { 8 | if (object === null || object === undefined) { 9 | return true 10 | } 11 | return isEmpty(object) 12 | } 13 | -------------------------------------------------------------------------------- /wail-core/errors/index.js: -------------------------------------------------------------------------------- 1 | export class NullStatsError extends Error { 2 | constructor (message) { 3 | super(message) 4 | Object.defineProperty(this, 'name', { 5 | value: this.constructor.name 6 | }) 7 | this.message = message 8 | Error.captureStackTrace(this, NullStatsError) 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /wail-core/fs/fsePromise.js: -------------------------------------------------------------------------------- 1 | import Promise from 'bluebird' 2 | import * as fs from 'fs-extra' 3 | 4 | const skip = ['watch', 'watchFile', 'unwatchFile', 'createReadStream', 'createWriteStream'] 5 | 6 | export default Promise.promisifyAll(fs, { 7 | filter (name, func, target, passesDefaultFilter) { 8 | if (name.slice(-4) === 'Sync') return false 9 | if (skip.indexOf(name) !== -1) return false 10 | if (name.match(/^[A-Z]/)) return false 11 | return passesDefaultFilter 12 | } 13 | }) 14 | -------------------------------------------------------------------------------- /wail-core/fs/index.js: -------------------------------------------------------------------------------- 1 | import chokidar from 'chokidar' 2 | import walk from 'klaw' 3 | import fs from 'fs-extra' 4 | import directorySize from './directorySize' 5 | import pathExists from './pathExists' 6 | import pathIs from './pathIs' 7 | import completeAssign from '../util/completeAssign' 8 | 9 | const base = { 10 | walk, 11 | chokidarWatch: chokidar.watch, 12 | FSWatcher: chokidar.FSWatcher 13 | } 14 | 15 | export default completeAssign(base, fs, directorySize, pathExists, pathIs) 16 | -------------------------------------------------------------------------------- /wail-core/globalStrings/archiving.js: -------------------------------------------------------------------------------- 1 | export default { 2 | // configs 3 | HERITRIX_DEPTH_1: 'h1', 4 | HERITRIX_DEPTH_2: 'h2', 5 | HERITRIX_DEPTH_3: 'h3', 6 | HERITRIX_CUSTOM: 'hc', 7 | PAGE_ONLY: 'po', 8 | PAGE_SAME_DOMAIN: 'psd', 9 | PAGE_ALL_LINKS: 'pal', 10 | po: 'Page Only', 11 | psd: 'Page + Same Domain Links', 12 | pal: 'Page + All Links' 13 | } 14 | -------------------------------------------------------------------------------- /wail-core/globalStrings/index.js: -------------------------------------------------------------------------------- 1 | export archiving from './archiving' 2 | export ipcChannels from './ipcChannels' 3 | export uiActions from './uiActions' 4 | -------------------------------------------------------------------------------- /wail-core/globalStrings/ipcChannels.js: -------------------------------------------------------------------------------- 1 | export default { 2 | ARCHIVE_WITH_WAIL: 'archive-uri-r', 3 | ARCHIVE_WITH_HERITRIX: 'makeHeritrixJobConf', 4 | ADD_WARC_TO_COLL_WAIL_ARCHIVED: 'add-warcs-to-col-wcreate', 5 | WAIL_CRAWL_UPDATE: 'wail-crawl-update', 6 | LOG_ERROR_WITH_NOTIFICATION: 'log-error-display-message', 7 | GOT_ALL_COLLECTIONS: 'got-all-collections', 8 | CRAWL_TO_COLLECTION: 'crawl-to-collection', 9 | CREATED_COLLECTION: 'created-collection', 10 | ADDED_WARCS_TO_COL: 'added-warcs-to-col', 11 | GOT_ALL_RUNS: 'got-all-runs', 12 | MADE_HERITRIX_JOBCONF: 'made-heritrix-jobconf', 13 | CRAWLJOB_STATUS_UPDATE: 'crawljob-status-update', 14 | CRAWLJOB_CONFIGURE_DIALOGUE: 'crawljob-configure-dialogue', 15 | SERVICE_STARTED: 'service-started', 16 | SERVICE_KILLED: 'service-killed', 17 | RESTARTED_WAYBACK: 'restarted-wayback', 18 | HANDLED_REQUEST: 'handled-request' 19 | } 20 | -------------------------------------------------------------------------------- /wail-core/globalStrings/uiActions.js: -------------------------------------------------------------------------------- 1 | const uiActions = { 2 | WAIL_CRAWL_START: 'wail-crawl-started', 3 | WAIL_CRAWL_FINISHED: 'wail-crawl-finished', 4 | WAIL_CRAWL_TRACK: 'wail-crawl-track', 5 | WAIL_CRAWL_Q_INCREASE: 'wail-crawlq-increase', 6 | WAIL_CRAWL_Q_DECREASE: 'wail-crawlq-decrease' 7 | } 8 | uiActions.wailCrawlReducerFilter = [uiActions.WAIL_CRAWL_START, uiActions.WAIL_CRAWL_TRACK, uiActions.WAIL_CRAWL_FINISHED, uiActions.WAIL_CRAWL_Q_INCREASE, uiActions.WAIL_CRAWL_Q_DECREASE] 9 | 10 | export default uiActions 11 | -------------------------------------------------------------------------------- /wail-core/index.js: -------------------------------------------------------------------------------- 1 | export { 2 | ColCrawlInfo, 3 | CrawlInfo, 4 | Pather, 5 | RunInfo, 6 | ViewWatcher 7 | } from './util' 8 | 9 | export { 10 | ArchiveManager, 11 | CrawlManager, 12 | ServiceManager, 13 | SettingsManager 14 | } from './managers' 15 | 16 | export { 17 | default as constants 18 | } from './constants' 19 | 20 | export { 21 | NullStatsError 22 | } from './errors' 23 | -------------------------------------------------------------------------------- /wail-core/managers/index.js: -------------------------------------------------------------------------------- 1 | export AppManager from './appManager' 2 | export ArchiveManager from './archiveManager' 3 | export CrawlManager from './heritrix/crawlManager' 4 | export CrawlStatsMonitor from './heritrix/crawlStatsMonitor' 5 | export ServiceManager from './serviceManager' 6 | export SettingsManager from './settingsManager' 7 | export WindowManager from './windowManager' 8 | -------------------------------------------------------------------------------- /wail-core/managers/serviceManager/processControlers/index.js: -------------------------------------------------------------------------------- 1 | export HeritrixProcessController from './heritrixProcessController' 2 | export WaybakProcessController from './waybackProcessController' 3 | export processStates from './processStates' 4 | -------------------------------------------------------------------------------- /wail-core/managers/serviceManager/processControlers/processStates.js: -------------------------------------------------------------------------------- 1 | import keyMirror from 'keymirror' 2 | 3 | const processStates = keyMirror({ 4 | starting: null, 5 | started: null, 6 | start_error: null, 7 | do_restart: null, 8 | restarting: null, 9 | restarting_killed: null, 10 | start_error_unexpected: null, 11 | start_error_port_used: null, 12 | start_error_main_not_found: null, 13 | not_started: null, 14 | user_initiated_stop: null, 15 | could_not_kill: null, 16 | process_error: null 17 | }) 18 | 19 | export default processStates 20 | -------------------------------------------------------------------------------- /wail-core/remoteSettings/index.js: -------------------------------------------------------------------------------- 1 | import kph from 'key-path-helpers' 2 | import * as fs from 'fs-extra' 3 | import path from 'path' 4 | import { remote, ipcRenderer as ipc } from 'electron' 5 | 6 | export default class RemoteSettings { 7 | constructor () { 8 | this._settingsDir = remote.getGlobal('settingsDir') 9 | this._settingsCache = null 10 | } 11 | 12 | configure () { 13 | this._settingsCache = fs.readJsonSync(path.join(this._settingsDir, 'settings.json')) 14 | ipc.on('repopulate-settings-cache', () => { 15 | this._repopulateCache() 16 | }) 17 | } 18 | 19 | _repopulateCache () { 20 | this._settingsCache = fs.readJsonSync(path.join(this._settingsDir, 'settings.json')) 21 | } 22 | 23 | get (what) { 24 | if (typeof what === 'string') { 25 | return kph.getValueAtKeyPath(this._settingsCache, what) 26 | } 27 | return this._settingsCache 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /wail-core/requests/index.js: -------------------------------------------------------------------------------- 1 | export { 2 | TerminateAndRestartJob, 3 | BuildJobRequest, 4 | LaunchJobRequest, 5 | TeardownJobRequest, 6 | TerminateJobRequest, 7 | JobLifeCycle, 8 | RescanJobDirRequest, 9 | BuildLaunchJob, 10 | StopJob 11 | } from './heritrixRequests' 12 | -------------------------------------------------------------------------------- /wail-core/services/wayback.js: -------------------------------------------------------------------------------- 1 | import cp from 'child_process' 2 | import isRunning from 'is-running' 3 | import Promise from 'bluebird' 4 | 5 | class WaybackService { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /wail-core/util/childProcHelpers.js: -------------------------------------------------------------------------------- 1 | import cp from 'child_process' 2 | import Promise from 'bluebird' 3 | 4 | class ExecuteError extends Error { 5 | constructor (oError, stdout, stderr) { 6 | super(`ExecuteError[${where}]`) 7 | Object.defineProperty(this, 'name', { 8 | value: this.constructor.name 9 | }) 10 | this.oError = oError 11 | this.stdout = stdout 12 | this.stderr = stderr 13 | Error.captureStackTrace(this, ExecuteError) 14 | } 15 | } 16 | 17 | export function execute (ex, opts, outputTransform) { 18 | return new Promise((resolve, reject) => { 19 | cp.exec(ex, opts, (error, stdout, stderr) => { 20 | if (error) { 21 | reject(new ExecuteError(error, stdout, stderr)) 22 | } else { 23 | if (outputTransform) { 24 | resolve(outputTransform(stdout, stderr)) 25 | } else { 26 | resolve({stdout, stderr}) 27 | } 28 | } 29 | }) 30 | }) 31 | } 32 | -------------------------------------------------------------------------------- /wail-core/util/colCrawlInfo.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment' 2 | 3 | export default class ColCrawlInfo { 4 | constructor (crawlInfo) { 5 | this.timestamp = moment(crawlInfo.jobId) 6 | this.path = crawlInfo.path 7 | this.urls = crawlInfo.urls 8 | } 9 | 10 | compare (ri) { 11 | if (this.timestamp.isBefore(ri.timestamp)) { 12 | return 1 13 | } 14 | 15 | if (this.timestamp.isAfter(ri.timestamp)) { 16 | return -1 17 | } 18 | 19 | return 0 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /wail-core/util/completeAssign.js: -------------------------------------------------------------------------------- 1 | function completeAssign (target, ...sources) { 2 | sources.forEach(source => { 3 | let descriptors = Object.keys(source).reduce((descriptors, key) => { 4 | descriptors[key] = Object.getOwnPropertyDescriptor(source, key) 5 | return descriptors 6 | }, {}) 7 | // by default, Object.assign copies enumerable Symbols too 8 | Object.getOwnPropertySymbols(source).forEach(sym => { 9 | let descriptor = Object.getOwnPropertyDescriptor(source, sym) 10 | if (descriptor.enumerable) { 11 | descriptors[sym] = descriptor 12 | } 13 | }) 14 | Object.defineProperties(target, descriptors) 15 | }) 16 | return target 17 | } 18 | 19 | export default completeAssign 20 | -------------------------------------------------------------------------------- /wail-core/util/index.js: -------------------------------------------------------------------------------- 1 | export CrawlInfo from './crawlInfo' 2 | export ColCrawlInfo from './colCrawlInfo' 3 | export ContextMenu from './contextMenu' 4 | export getCrawlStats from './getCrawStats' 5 | export Pather from './pather' 6 | export RunInfo from './runInfo' 7 | export ViewWatcher from './viewWatcher' 8 | 9 | // exports.Pather = Pather 10 | // exports.ViewWatcher = ViewWatcher 11 | -------------------------------------------------------------------------------- /wail-core/util/logger.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-core/util/logger.js -------------------------------------------------------------------------------- /wail-core/util/pather.js: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | 3 | export default class Pather { 4 | constructor (base) { 5 | this.base = base 6 | } 7 | 8 | joinWBase () { 9 | if (arguments.length === 0) { 10 | return path.join() 11 | } else { 12 | return path.join(this.base, ...arguments) 13 | } 14 | } 15 | 16 | join () { 17 | return path.join(...arguments) 18 | } 19 | 20 | normalizeJoinWBase () { 21 | if (arguments.length === 0) { 22 | return path.join() 23 | } else { 24 | return path.normalize(this.joinWBase(...arguments)) 25 | } 26 | } 27 | 28 | normalizeJoin () { 29 | if (arguments.length === 0) { 30 | return path.join() 31 | } else { 32 | return path.normalize(path.join(...arguments)) 33 | } 34 | } 35 | 36 | baseName (what) { 37 | return path.basename(what) 38 | } 39 | 40 | baseNameNoExt (what, ext) { 41 | return path.basename(what, ext) 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /wail-core/util/setMethods.js: -------------------------------------------------------------------------------- 1 | Set.prototype.isSuperset = function (subset) { 2 | for (let elem of subset) { 3 | if (!this.has(elem)) { 4 | return false 5 | } 6 | } 7 | return true 8 | } 9 | 10 | Set.prototype.union = function (setB) { 11 | const union = new Set(this) 12 | for (let elem of setB) { 13 | union.add(elem) 14 | } 15 | return union 16 | } 17 | 18 | Set.prototype.intersection = function (setB) { 19 | const intersection = new Set() 20 | for (let elem of setB) { 21 | if (this.has(elem)) { 22 | intersection.add(elem) 23 | } 24 | } 25 | return intersection 26 | } 27 | 28 | Set.prototype.difference = function (setB) { 29 | const difference = new Set(this) 30 | for (let elem of setB) { 31 | difference.delete(elem) 32 | } 33 | return difference 34 | } 35 | -------------------------------------------------------------------------------- /wail-core/util/viewWatcher.js: -------------------------------------------------------------------------------- 1 | import EventEmitter from 'eventemitter3' 2 | 3 | class _ViewWatcher extends EventEmitter { 4 | view (from, viewing) { 5 | this.emit(`${from}-view`, viewing) 6 | } 7 | 8 | selected (from, selected) { 9 | this.emit(`${from}-selected`, selected) 10 | } 11 | 12 | createCollection () { 13 | this.emit('newCollection') 14 | } 15 | 16 | closeCreateCollection () { 17 | this.emit('closeNewCollection') 18 | } 19 | 20 | editMdata (editMe) { 21 | this.emit('editMetadata', editMe) 22 | } 23 | } 24 | 25 | const ViewWatcher = window.vw = new _ViewWatcher() 26 | 27 | export default ViewWatcher 28 | -------------------------------------------------------------------------------- /wail-twitter/archive/injectArchive.js: -------------------------------------------------------------------------------- 1 | class InjectArchive { 2 | constructor () { 3 | console.log('creating') 4 | let { ipcRenderer, remote } = require('electron') 5 | this.ipc = ipcRenderer 6 | this.log = console.log.bind(console) 7 | this.remote = remote 8 | this.url = 'about:blank' 9 | this.webContents = null 10 | this.stopLoadingTimer = null 11 | this.processLoaded = this.processLoaded.bind(this) 12 | console.log(window.location.href) 13 | } 14 | 15 | processLoaded () { 16 | if (window.location.href !== 'about:blank') { 17 | // console.log(this.url) 18 | let wc = this.remote.getCurrentWebContents() 19 | wc.on('did-stop-loading', () => { 20 | this.log('did-stop-loading') 21 | clearTimeout(this.stopLoadingTimer) 22 | this.stopLoadingTimer = setTimeout(() => { 23 | this.ipc.sendToHost('injected-archive', 'did-finish-load') 24 | }, 3000) 25 | }) 26 | } 27 | } 28 | } 29 | 30 | module.exports = InjectArchive 31 | -------------------------------------------------------------------------------- /wail-twitter/archive/responseBodyGetter.js: -------------------------------------------------------------------------------- 1 | const EventEmitter = require('eventemitter3') 2 | 3 | class ResponseBodyGetter extends EventEmitter { 4 | constructor () { 5 | super() 6 | } 7 | 8 | getBody (debug, forUrl) { 9 | debug.sendCommand('Network.getResponseBody', { requestId: forUrl.requestId }, (err, result) => { 10 | this.emit('got-body', { url: forUrl.url, err: err, result: result }) 11 | }) 12 | } 13 | } 14 | 15 | module.exports = ResponseBodyGetter 16 | -------------------------------------------------------------------------------- /wail-twitter/archive/responseHeaderString.js: -------------------------------------------------------------------------------- 1 | const _ = require('lodash') 2 | 3 | const headerStringHelper = (s, pair) => { 4 | if (Array.isArray(pair[1])) { 5 | return s + pair[1].reduce((ss, val) => ss + `${pair[0]}: ${val}\r\n`, '') 6 | } 7 | return s + `${pair[0]}: ${pair[1]}\r\n` 8 | } 9 | 10 | const stringifyHeaders = headers => _ 11 | .sortBy(_.toPairs(headers), [0]) 12 | .reduce((s, hpair) => headerStringHelper(s, hpair), '') 13 | 14 | const responseHeaderString = (headers, statusLine) => `${statusLine}\r\n${stringifyHeaders(headers)}` 15 | 16 | module.exports = responseHeaderString 17 | -------------------------------------------------------------------------------- /wail-twitter/archive/util.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash' 2 | 3 | const mapper = it => { 4 | if (_.isObject(it)) { 5 | return clonner(_.omitBy(it, _.isFunction), mapper) 6 | } else { 7 | return it 8 | } 9 | } 10 | 11 | const wcMapper = (it, key) => { 12 | if (_.isObject(it)) { 13 | if (key === 'responseHeaders') { 14 | return _.mapValues(_.omitBy(it, _.isFunction), v => { 15 | if (_.isArray(v) && v.length == 1) { 16 | return v[ 0 ] 17 | } else { 18 | return v 19 | } 20 | }) 21 | } 22 | return _.omitBy(it, _.isFunction) 23 | } else { 24 | return it 25 | } 26 | } 27 | 28 | export const clonner = it => _.mapValues(_.omitBy(it, _.isFunction), mapper) 29 | export const cloneWC = it => _.mapValues(_.omitBy(it, _.isFunction), wcMapper) 30 | -------------------------------------------------------------------------------- /wail-twitter/archive/webRequestCaptures.js: -------------------------------------------------------------------------------- 1 | const S = require('string') 2 | const capturers = resourceManager => ({ 3 | beforeSendHead: (dets, cb) => { 4 | if (dets.resourceType !== 'mainFrame' || dets.resourceType !== 'subframe') { 5 | resourceManager.add('beforeSend', dets) 6 | } 7 | cb({ cancel: false, requestHeaders: dets.requestHeaders }) 8 | }, 9 | receiveHead: (dets, cb) => { 10 | if (dets.resourceType !== 'mainFrame' || dets.resourceType !== 'subframe') { 11 | resourceManager.add('receiveHead', dets) 12 | } 13 | cb({ cancel: false, requestHeaders: dets.requestHeaders }) 14 | }, 15 | beforeRedirect: dets => { 16 | if (dets.resourceType !== 'mainFrame' || dets.resourceType !== 'subframe') { 17 | resourceManager.add('beforeRedirect', dets) 18 | } 19 | }, 20 | onComplete (dets) { 21 | if (dets.resourceType !== 'mainFrame' || dets.resourceType !== 'subframe') { 22 | resourceManager.add('complete', dets) 23 | } 24 | } 25 | }) 26 | 27 | module.exports = capturers 28 | -------------------------------------------------------------------------------- /wail-twitter/extractors/extractor.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment' 2 | 3 | const fromTwitterDate = (date) => moment(date, 'dd MMM DD HH:mm:ss ZZ YYYY', 'en') 4 | 5 | export default class Extractor { 6 | constructor () { 7 | this.now = moment() 8 | } 9 | 10 | shouldExtract (tweet) { 11 | return true 12 | } 13 | 14 | tweetIsAfterStart (tweet) { 15 | return fromTwitterDate(tweet.created_at).isSameOrAfter(this.now) 16 | } 17 | 18 | extract (tweet) { 19 | return `https://twitter.com/${tweet.user.screen_name}/status/${tweet.id_str}` 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /wail-twitter/extractors/hashTagExtractor.js: -------------------------------------------------------------------------------- 1 | import Extractor from './extractor' 2 | import _ from 'lodash' 3 | 4 | const htMap = ht => { 5 | if (ht.startsWith('#')) { 6 | return [ht, ht.substr(1)] 7 | } 8 | return ht 9 | } 10 | 11 | export default class HashTagExtractor extends Extractor { 12 | constructor (hashTags) { 13 | super() 14 | this.hashTags = new Set(_.flatMap(hashTags, htMap)) 15 | } 16 | 17 | shouldExtract (tweet) { 18 | let tweetHTS = new Set(tweet.entities.hashtags.map(ht => ht.text)) 19 | if (tweetHTS.size > 0) { 20 | return this.hashTags.intersection(tweetHTS).size > 0 && this.tweetIsAfterStart(tweet) 21 | } else { 22 | return false 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /wail-twitter/extractors/timelineExtractor.js: -------------------------------------------------------------------------------- 1 | import Extractor from './extractor' 2 | 3 | export default class TlExtractor extends Extractor { 4 | shouldExtract (tweet) { 5 | return this.tweetIsAfterStart(tweet) 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/components/LoadingLogin.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import pure from 'recompose/pure' 3 | import CircularProgress from 'material-ui/CircularProgress' 4 | 5 | function LoadingLogin () { 6 | return ( 7 |
8 | 9 |
10 | ) 11 | } 12 | 13 | export default pure(LoadingLogin) 14 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/components/LoginWebview.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import ReactDOM from 'react-dom' 3 | import PropTypes from 'prop-types' 4 | import { gotContainerRef } from '../actions' 5 | 6 | export default class LoginWebview extends Component { 7 | static contextTypes = { 8 | store: PropTypes.object.isRequired 9 | } 10 | 11 | constructor (...args) { 12 | super(...args) 13 | this.containerRef = null 14 | this.getContainerRef = this.getContainerRef.bind(this) 15 | } 16 | 17 | getContainerRef (containterRef) { 18 | this.containerRef = containterRef 19 | } 20 | 21 | shouldComponentUpdate (nextProps, nextState, nextContext) { 22 | return false 23 | } 24 | 25 | componentDidMount () { 26 | const container = ReactDOM.findDOMNode(this.containerRef) 27 | this.context.store.dispatch(gotContainerRef(container)) 28 | } 29 | 30 | render () { 31 | return ( 32 |
33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/components/index.js: -------------------------------------------------------------------------------- 1 | export LoginControl from './LoginControls' 2 | export LoadingLogin from './LoadingLogin' 3 | export LoginWebview from './LoginWebview' 4 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/constants/buttons.js: -------------------------------------------------------------------------------- 1 | import keymirror from 'keymirror' 2 | 3 | export default keymirror({ 4 | JUST_MESSAGE: null, 5 | BACK_BUTTON: null, 6 | RETURN_SIGNIN: null 7 | }) 8 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/constants/index.js: -------------------------------------------------------------------------------- 1 | import keymirror from 'keymirror' 2 | 3 | export default keymirror({ 4 | LOGIN_BAD_UNPW: null, 5 | WENT_BACK_TO_LOGIN: null, 6 | WBV_READY: null, 7 | WBV_LOAD_FAILED: null, 8 | GOT_CONTAINER_REF: null, 9 | CLIENT_TOKEN_ERROR: null, 10 | GOT_CLIENT_TOKENS: null, 11 | NO_OTHER_NAV: null, 12 | CANCELLED_LOGIN: null, 13 | NOOP: null, 14 | GOTO_LOGIN_INDEX: null, 15 | LOGED_IN: null 16 | }) 17 | 18 | export buttons from './buttons' 19 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/containers/LoadingOrControl.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { connect } from 'react-redux' 3 | import LoadingLogin from '../components/LoadingLogin' 4 | import LoadingControl from '../components/LoginControls' 5 | 6 | function stateToProps (state) { 7 | return {webview: state.get('webview')} 8 | } 9 | 10 | class LoadingOrControl extends Component { 11 | shouldComponentUpdate (nextProps, nextState, nextContext) { 12 | return this.props.webview !== nextProps.webview 13 | } 14 | 15 | render () { 16 | let webview = this.props.webview 17 | return ( 18 | webview.get('ready') ? ( 19 | 20 | ) : ( 21 | 22 | ) 23 | ) 24 | } 25 | } 26 | 27 | export default connect(stateToProps)(LoadingOrControl) 28 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/containers/Login.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import getMuiTheme from 'material-ui/styles/getMuiTheme' 3 | import lightBaseTheme from 'material-ui/styles/baseThemes/lightBaseTheme' 4 | import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider' 5 | import { Provider } from 'react-redux' 6 | import configureStore from '../store/index' 7 | import LoginWebview from '../components/LoginWebview' 8 | import LoadingOrControl from './LoadingOrControl' 9 | 10 | const store = configureStore() 11 | 12 | const muiTheme = getMuiTheme(lightBaseTheme) 13 | 14 | export default function LogIn () { 15 | return ( 16 | 17 | 18 |
19 | 20 | 21 |
22 |
23 |
24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/epics/index.js: -------------------------------------------------------------------------------- 1 | import gotWebviewEpic from './webviewEpic' 2 | 3 | export default gotWebviewEpic 4 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/epics/webviewEpic.js: -------------------------------------------------------------------------------- 1 | import { startLoginProcess } from '../actions' 2 | import constz from '../constants' 3 | 4 | export default function gotWebviewEpic (action$) { 5 | return action$.ofType(constz.GOT_CONTAINER_REF) 6 | .mergeMap(startLoginProcess) 7 | } 8 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/index.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import React from 'react' 3 | import injectTapEventPlugin from 'react-tap-event-plugin' 4 | import { render } from 'react-dom' 5 | import LogIn from './containers/Login' 6 | // sms.install({ 7 | // environment: 'node' 8 | // }) 9 | 10 | injectTapEventPlugin() 11 | 12 | render(, document.getElementById('loginControl')) 13 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/middleware/index.js: -------------------------------------------------------------------------------- 1 | export ipc from './ipc' 2 | export webviewMiddleware from './webview' 3 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/middleware/ipc.js: -------------------------------------------------------------------------------- 1 | import createIpc from 'redux-electron-ipc' 2 | 3 | export default createIpc({}) 4 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/middleware/webview.js: -------------------------------------------------------------------------------- 1 | import { send } from 'redux-electron-ipc' 2 | import { closeWindow, gotSigninKeys } from '../actions' 3 | import constz from '../constants' 4 | 5 | const webviewMiddleware = store => next => action => { 6 | console.log(action, action.type === constz.GOT_CLIENT_TOKENS) 7 | if (action.type === constz.GOT_CLIENT_TOKENS) { 8 | gotSigninKeys(action.tokens) 9 | } else if (action.type === constz.CANCELLED_LOGIN) { 10 | closeWindow() 11 | } else { 12 | return next(action) 13 | } 14 | } 15 | 16 | export default webviewMiddleware 17 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/store/configureStore.prod.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import { createEpicMiddleware } from 'redux-observable' 4 | import Immutable from 'immutable' 5 | import webviewMiddleware from '../middleware/webview' 6 | import ipc from '../middleware/ipc' 7 | import loginEpic from '../epics/webviewEpic' 8 | import rootReducer from '../reducers' 9 | 10 | const epicMiddleware = createEpicMiddleware(loginEpic) 11 | 12 | export default function configureStore () { 13 | return createStore( 14 | rootReducer, 15 | Immutable.Map(), 16 | applyMiddleware(thunk, ipc, epicMiddleware, webviewMiddleware) 17 | ) 18 | } 19 | -------------------------------------------------------------------------------- /wail-twitter/loginWindow/store/index.js: -------------------------------------------------------------------------------- 1 | if (process.env.NODE_ENV === 'production') { 2 | module.exports = require('./configureStore.prod.js') 3 | } else { 4 | module.exports = require('./configureStore.dev.js') 5 | } 6 | -------------------------------------------------------------------------------- /wail-twitter/monitor/tasks/index.js: -------------------------------------------------------------------------------- 1 | import UserTimeLine from './userTimeline' 2 | import TextSearch from './textSearch' 3 | import TimeLineExtractor from '../../extractors/timelineExtractor' 4 | import HashTagExtractor from '../../extractors/hashTagExtractor' 5 | 6 | const makeExtractor = extractor => { 7 | switch (extractor.type) { 8 | case 'TimeLine': 9 | return new TimeLineExtractor() 10 | case 'HashTags': 11 | return new HashTagExtractor(extractor.hts) 12 | } 13 | } 14 | 15 | const makeTask = (config, twitterClient) => { 16 | switch (config.taskType) { 17 | case 'UserTimeLine': 18 | return new UserTimeLine({ 19 | twitterClient, 20 | ...config 21 | }) 22 | case 'TextSearch': 23 | return new TextSearch({ 24 | twitterClient, 25 | ...config 26 | }) 27 | } 28 | } 29 | 30 | export default makeTask 31 | -------------------------------------------------------------------------------- /wail-twitter/monitor/tasks/monitorTask.js: -------------------------------------------------------------------------------- 1 | import EventEmitter from 'eventemitter3' 2 | import moment from 'moment' 3 | 4 | export default class MonitorTask extends EventEmitter { 5 | constructor (dur) { 6 | super() 7 | this.stopWhen = moment().add(dur.val, dur.what).startOf('minute') 8 | this.task = null 9 | } 10 | 11 | poll () { 12 | 13 | } 14 | 15 | wasError (error) { 16 | this.task.cancel() 17 | this.emit('error', error) 18 | } 19 | 20 | checkForStop () { 21 | if (moment().isSameOrAfter(this.stopWhen)) { 22 | this.stop() 23 | } 24 | } 25 | 26 | start (scheduler, rule = '*/5 * * * *') { 27 | this.task = scheduler.scheduleJob(rule, () => { 28 | this.poll() 29 | }) 30 | } 31 | 32 | stop () { 33 | if (this.task) { 34 | this.task.cancel() 35 | } 36 | this.emit('done') 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /wail-twitter/monitor/tasks/userTimeline.js: -------------------------------------------------------------------------------- 1 | import MonitorTask from './monitorTask' 2 | 3 | export default class UserTimeLineTask extends MonitorTask { 4 | constructor ({twitterClient, account, dur}) { 5 | super(dur) 6 | this.twitterClient = twitterClient 7 | this.account = account 8 | } 9 | 10 | poll () { 11 | this.emit('archiveTimeline', this.account) 12 | this.checkForStop() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /wail-twitter/twitter-monitor-main.js: -------------------------------------------------------------------------------- 1 | const menubar = require('menubar') 2 | const { ipcMain } = require('electron') 3 | const path = require('path') 4 | app.commandLine.appendSwitch('js-flags', '--harmony') 5 | 6 | const options = { 7 | dir: __dirname, 8 | icon: path.join(__dirname, 'whale.png'), 9 | tooltip: 'WAIL', 10 | width: 500 11 | } 12 | const monitorMBar = menubar(options) 13 | 14 | monitorMBar.on('ready', () => { 15 | if (process.env.NODE_ENV === 'development') { 16 | let installExtension = require('electron-devtools-installer') 17 | try { 18 | installExtension.default(installExtension[ 'REACT_DEVELOPER_TOOLS' ]) 19 | } catch (e) { 20 | console.error(e) 21 | } 22 | } 23 | }) 24 | -------------------------------------------------------------------------------- /wail-twitter/vendor/moment-plugins.js: -------------------------------------------------------------------------------- 1 | const moment = require('moment') 2 | require('moment-round') 3 | require('moment-twitter') 4 | require('twix') 5 | require('./moment-twitter') 6 | 7 | module.exports = moment -------------------------------------------------------------------------------- /wail-ui/actions/archival.js: -------------------------------------------------------------------------------- 1 | import wc from '../constants/wail-constants' 2 | import {CheckUrlEvents} from '../constants/wail-constants' 3 | const { 4 | CHECK_URL, 5 | CHECKING_URL, 6 | CHECKING_DONE, 7 | CHECKING_DONE_ERROR, 8 | RESET_CHECK_MESSAGE 9 | } = CheckUrlEvents 10 | const { 11 | EMPTY_URL, 12 | HAS_VAILD_URI 13 | } = wc.EventTypes 14 | 15 | export const checkDone = (result) => ({ 16 | type: CHECKING_DONE, 17 | result 18 | }) 19 | 20 | export const checkDoneError = (result) => ({ 21 | type: CHECKING_DONE_ERROR, 22 | result 23 | }) 24 | 25 | export const checkingUrl = (message) => ({ 26 | type: CHECKING_URL, 27 | message 28 | }) 29 | 30 | export const checkUrl = url => ({ 31 | type: CHECK_URL, 32 | url 33 | }) 34 | 35 | export const resetCheckMessage = () => ({ 36 | type: RESET_CHECK_MESSAGE 37 | }) 38 | 39 | export const updateArchiveUrl = url => { 40 | return { 41 | type: HAS_VAILD_URI, 42 | url 43 | } 44 | } 45 | 46 | export const emptyUrl = () => { 47 | return { 48 | type: EMPTY_URL, 49 | url: '' 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /wail-ui/actions/changeLocation.js: -------------------------------------------------------------------------------- 1 | import {push} from 'react-router-redux' 2 | import {LocationChange} from '../constants/wail-constants' 3 | 4 | const changeLocation = (to) => { 5 | if (to === '/twitter') { 6 | return { 7 | type: LocationChange.CHECK_TWITTER 8 | } 9 | } else { 10 | return push(to) 11 | } 12 | } 13 | 14 | export default changeLocation 15 | -------------------------------------------------------------------------------- /wail-ui/actions/editor-actions.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs-extra' 2 | // import EditorDispatcher from '../dispatchers/editorDispatcher' 3 | // import wc from '../constants/wail-constants' 4 | 5 | export function fetchCode () { 6 | EditorDispatcher.dispatch({ 7 | type: wc.EventTypes.FETCH_CODE 8 | }) 9 | } 10 | 11 | export function readCode (path) { 12 | /* 13 | fs.readFileAsync(path,'utf8') 14 | .then(cb) 15 | .catch(error=>console.log(`error loading file ${path}`,error)) 16 | */ 17 | return fs.readFileSync(path, 'utf8') 18 | } 19 | 20 | export function saveCode (path, text, errorHandler) { 21 | fs.writeFile(path, text, 'utf8', errorHandler) 22 | } 23 | -------------------------------------------------------------------------------- /wail-ui/actions/header.js: -------------------------------------------------------------------------------- 1 | import {Header} from '../constants/wail-constants' 2 | 3 | export const openClose = open => ({ 4 | type: Header.HEADER_OPEN_CLOSE, 5 | open 6 | }) 7 | 8 | export const locationChange = location => ({ 9 | type: Header.HEADER_LOCATION, 10 | location 11 | }) 12 | 13 | export const toggle = () => ({ type: Header.HEADER_TOGGLE }) 14 | -------------------------------------------------------------------------------- /wail-ui/actions/index.js: -------------------------------------------------------------------------------- 1 | export * as archiveActions from './archival' 2 | export * as collectionActions from './collections' 3 | export * as crawlActions from './heritrix' 4 | export * as serviceActions from './services' 5 | export * as notificationActions from './notification-actions' 6 | export changeLocation from './changeLocation' 7 | -------------------------------------------------------------------------------- /wail-ui/actions/twitter.js: -------------------------------------------------------------------------------- 1 | import {Twitter} from '../constants/wail-constants' 2 | import {push} from 'react-router-redux' 3 | 4 | // this is a thunk 5 | const signedIntoTwitter = () => ({ 6 | type: Twitter.SIGNED_IN 7 | }) 8 | 9 | export default signedIntoTwitter 10 | -------------------------------------------------------------------------------- /wail-ui/actions/util-actions.js: -------------------------------------------------------------------------------- 1 | import cp from 'child_process' 2 | import {shell} from 'electron' 3 | 4 | export function openFSLocation (itemPath) { 5 | if (process.platform === 'darwin') { 6 | cp.exec(`open ${itemPath}`) 7 | } else { 8 | shell.openItem(itemPath) 9 | } 10 | } 11 | 12 | export function openUrlInBrowser (uri) { 13 | shell.openExternal(uri) 14 | } 15 | -------------------------------------------------------------------------------- /wail-ui/actions/wailCrawl.js: -------------------------------------------------------------------------------- 1 | import { uiActions } from '../../wail-core/globalStrings' 2 | import { ipcRenderer } from 'electron' 3 | 4 | export function wailCrawlUpdate (e, update) { 5 | return update 6 | } 7 | 8 | export function trackWailCrawl (crawl) { 9 | console.log(crawl) 10 | return { 11 | type: uiActions.WAIL_CRAWL_TRACK, 12 | crawl 13 | } 14 | } 15 | 16 | export function justReIndexCol (col) { 17 | ipcRenderer.send('reindex-collection', {col}) 18 | } 19 | -------------------------------------------------------------------------------- /wail-ui/background/accessibility.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 13 | 14 | 15 |

Accessibility Monitoring

16 | 17 | -------------------------------------------------------------------------------- /wail-ui/background/archiver.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Archiver 6 | 26 | 27 | 28 |
29 | 30 |
31 | 42 | 43 | -------------------------------------------------------------------------------- /wail-ui/background/archives.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Archive Manager 6 | 8 | 9 | 15 | 16 | 17 | 28 | 29 | -------------------------------------------------------------------------------- /wail-ui/background/crawls.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Crawl Manager 6 | 8 | 9 | 15 | 16 | 17 | 28 | 29 | -------------------------------------------------------------------------------- /wail-ui/background/indexer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 13 | 14 | 15 |

Indexer Service

16 | 17 | -------------------------------------------------------------------------------- /wail-ui/background/jobs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 13 | 14 | 15 |

Jobs Monitor

16 | 17 | -------------------------------------------------------------------------------- /wail-ui/background/js/archiver.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import '../../../wail-core/util/setMethods' 3 | import React from 'react' 4 | import {render} from 'react-dom' 5 | import ArchiveComponent from '../../../wail-archiver' 6 | 7 | render(, document.getElementById('archiverMount')) 8 | -------------------------------------------------------------------------------- /wail-ui/background/js/twitterM.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import '../../../wail-core/util/setMethods' 3 | import TwitterMonitor from '../../../wail-twitter/monitor/twitterMonitor' 4 | import {remote, ipcRenderer as ipc} from 'electron' 5 | 6 | const twitterMonitor = window.tm = new TwitterMonitor() 7 | 8 | ipc.on('monitor-twitter-account', (e, config) => { 9 | twitterMonitor.watchTwitter(config) 10 | }) 11 | -------------------------------------------------------------------------------- /wail-ui/background/managers.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Managers 6 | 8 | 9 | 15 | 16 | 17 | 24 | 25 | -------------------------------------------------------------------------------- /wail-ui/background/requestDaemon.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Request Daemon 6 | 7 | 8 |

Request Daemon

9 | 20 | 21 | -------------------------------------------------------------------------------- /wail-ui/background/twitterMonitor.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TwitterMonitor 6 | 7 | 8 |

TwitterMonitor

9 | 20 | 21 | -------------------------------------------------------------------------------- /wail-ui/bunyanshim.js: -------------------------------------------------------------------------------- 1 | // This is an empty shim for things that should be not be included in webpack 2 | -------------------------------------------------------------------------------- /wail-ui/childWindows/newCrawl/crawlUrlsDispatcher.js: -------------------------------------------------------------------------------- 1 | 2 | // use of a variable here allows us to attach our dispatchers to the window 3 | // if desired 4 | const UrlSeedDispatcher = {} 5 | 6 | export default UrlSeedDispatcher 7 | -------------------------------------------------------------------------------- /wail-ui/childWindows/newCrawl/header.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | import AppBar from 'material-ui/AppBar' 3 | 4 | export default class Header extends Component { 5 | shouldComponentUpdate (nextProps, nextState, nextContext) { 6 | return false 7 | } 8 | 9 | render () { 10 | return ( 11 | 16 | ) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /wail-ui/childWindows/newCrawl/newCrawl.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import React from 'react' 3 | import ReactDOM from 'react-dom' 4 | import injectTapEventPlugin from 'react-tap-event-plugin' 5 | import Layout from './layout' 6 | import '../../css/wail.css' 7 | 8 | window.React = React 9 | 10 | injectTapEventPlugin() 11 | 12 | ReactDOM.render( 13 | , 14 | document.getElementById('newCrawl')) 15 | -------------------------------------------------------------------------------- /wail-ui/childWindows/newCrawl/newCrawlDialog.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | import EnterCrawlUrls from './enterCrawlUrls' 3 | import CrawlDepth from './crawlDepth' 4 | import CrawlUrlList from './crawlUrlList' 5 | import SellectCollection from './selectCollection' 6 | 7 | export default class NewCrawlDialog extends Component { 8 | render () { 9 | console.log(window.__args__) 10 | return ( 11 |
12 | 13 | 14 | 15 | 16 |
17 | ) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /wail-ui/childWindows/settings/settingsW.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Settings 6 | 8 | 9 | 15 | 16 | 17 |
18 | 19 |
20 | 21 | 28 | -------------------------------------------------------------------------------- /wail-ui/childWindows/settings/settingsW.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import React from 'react' 3 | import ReactDOM from 'react-dom' 4 | import injectTapEventPlugin from 'react-tap-event-plugin' 5 | import SettingsForm from './settingsForm' 6 | 7 | window.React = React 8 | 9 | injectTapEventPlugin() 10 | 11 | ReactDOM.render( 12 | , 13 | document.getElementById('settings')) 14 | -------------------------------------------------------------------------------- /wail-ui/childWindows/settings/waybackSettings.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import {ipcRenderer, remote} from 'electron' 4 | import {ListItem} from 'material-ui/List' 5 | import NumberPicker from './numberPicker' 6 | import Avatar from 'material-ui/Avatar' 7 | 8 | export default class WaybackSettings extends Component { 9 | static propTypes = { 10 | settings: PropTypes.object.isRequired 11 | } 12 | 13 | render () { 14 | return ( 15 | } 17 | primaryText='Wayback' 18 | primaryTogglesNestedList 19 | nestedItems={ 20 | [ 21 | 25 | ] 26 | } 27 | /> 28 | ) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /wail-ui/childWindows/timemapStats/timemapStats.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Timemap Stats 6 | 8 | 9 | 15 | 16 | 17 |
18 | 19 |
20 | 27 | 28 | -------------------------------------------------------------------------------- /wail-ui/components/collections/addToCollection/fromFs/addFromFsHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import CardTitle from 'material-ui/Card/CardTitle' 3 | import { namedPure } from '../../../../util/recomposeHelpers' 4 | import acronmys from '../../../../constants/acronyms' 5 | 6 | const enhance = namedPure('AddFromFSHeader') 7 | 8 | const AddFromFSHeader = () => ( 9 | 10 | ) 11 | 12 | export default enhance(AddFromFSHeader) 13 | -------------------------------------------------------------------------------- /wail-ui/components/collections/addToCollection/fromFs/seedList.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import configureFormPage from './configureFormPage' 4 | 5 | const SeedList = ({warcSeeds, onSubmit}) => ( 6 |
7 | {warcSeeds.length > 0 && configureFormPage(onSubmit, warcSeeds)} 8 | {warcSeeds.length <= 0 &&

No Seeds To Add

} 9 |
10 | ) 11 | 12 | SeedList.propTypes = { 13 | warcSeeds: PropTypes.array.isRequired, 14 | onSubmit: PropTypes.func.isRequired 15 | } 16 | 17 | export default SeedList 18 | -------------------------------------------------------------------------------- /wail-ui/components/collections/addToCollection/fromFs/seedName.js: -------------------------------------------------------------------------------- 1 | import path from 'path' 2 | import S from 'string' 3 | 4 | const theSwapper = S('') 5 | 6 | const seedName = name => { 7 | // if (name.indexOf('.warc') > 0) { 8 | // return path.basename(name, '.warc') 9 | // } 10 | // return path.basename(name, '.arc') 11 | return theSwapper.setValue(name).strip('.').s 12 | } 13 | 14 | export default seedName 15 | -------------------------------------------------------------------------------- /wail-ui/components/collections/addToCollection/fromFs/selectSeed.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import SeedList from './seedList' 4 | import DisplayInvalidMessage from './displayInvalidMessage' 5 | 6 | const SelectSeed = ({onSubmit, checkingDone, warcSeeds, hadErrors}) => { 7 | let errorsLen = hadErrors.length 8 | let renderComponent 9 | if (errorsLen > 0) { 10 | renderComponent = 11 | } else { 12 | renderComponent = 13 | } 14 | return (renderComponent) 15 | } 16 | 17 | SelectSeed.propTypes = { 18 | checkingDone: PropTypes.bool.isRequired, 19 | hadErrors: PropTypes.array.isRequired, 20 | onSubmit: PropTypes.func.isRequired, 21 | warcSeeds: PropTypes.array.isRequired 22 | } 23 | 24 | export default SelectSeed 25 | -------------------------------------------------------------------------------- /wail-ui/components/collections/addToCollection/fromLiveWeb/validate.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by john on 11/30/16. 3 | */ 4 | -------------------------------------------------------------------------------- /wail-ui/components/collections/addToCollection/index.js: -------------------------------------------------------------------------------- 1 | export CollAddSeedHeader from './fromLiveWeb/colAddSeedHeader' 2 | export ArchiveForm from './fromLiveWeb/archiveUrlForm' 3 | export CheckSeed from './fromLiveWeb/checkSeed' 4 | export AddFromFsHeader from './fromFs/addFromFsHeader' 5 | export AddFromFs from './fromFs/addFromFs' 6 | -------------------------------------------------------------------------------- /wail-ui/components/collections/selectCollection/collectionCard/noCollectionMatches.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import Card from 'material-ui/Card/Card' 4 | import CardText from 'material-ui/Card/CardText' 5 | import { collectionCard } from '../../../../constants/uiStrings' 6 | 7 | function NoCollectionMatches ({search}) { 8 | return ( 9 | 10 | 11 | {collectionCard.noCollNamed(search)} 12 | 13 | 14 | ) 15 | } 16 | 17 | NoCollectionMatches.propTypes = { 18 | search: PropTypes.string.isRequired 19 | } 20 | 21 | export default NoCollectionMatches 22 | -------------------------------------------------------------------------------- /wail-ui/components/collections/selectCollection/index.js: -------------------------------------------------------------------------------- 1 | export SelectColHeader from './selectColHeader' 2 | export FilterSelectCol from './filterSelectCol' 3 | -------------------------------------------------------------------------------- /wail-ui/components/collections/selectCollection/selectColHeader.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import Flexbox from 'flexbox-react' 4 | import FlatButton from 'material-ui/FlatButton' 5 | import ViewWatcher from '../../../../wail-core/util/viewWatcher' 6 | import CardTitle from 'material-ui/Card/CardTitle' 7 | 8 | const SelectColHeader = () => ( 9 | 15 | 18 | ViewWatcher.createCollection()} 23 | /> 24 | 25 | ) 26 | 27 | export default SelectColHeader 28 | -------------------------------------------------------------------------------- /wail-ui/components/collections/viewArchiveConfiguration/index.js: -------------------------------------------------------------------------------- 1 | export ArchiveConfigTable from './archiveConfigTable' 2 | export ViewArchiveConfigHeader from './viewArchiveConfigHeader' 3 | -------------------------------------------------------------------------------- /wail-ui/components/collections/viewArchiveConfiguration/viewArchiveConfigHeader.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { CardTitle } from 'material-ui/Card' 4 | import { Link, IndexLink } from 'react-router' 5 | 6 | const ViewArchiveConfigHeader = ({viewingCol}, context) => { 7 | const {primary1Color} = context.muiTheme.baseTheme.palette 8 | const linkStyle = { 9 | color: primary1Color, 10 | textDecoration: 'none' 11 | } 12 | const title = Collections > {viewingCol} > Archive Configuration 15 | 16 | return ( 17 | 20 | ) 21 | } 22 | 23 | ViewArchiveConfigHeader.contextTypes = { 24 | muiTheme: PropTypes.object.isRequired 25 | } 26 | 27 | ViewArchiveConfigHeader.propTypes = { 28 | viewingCol: PropTypes.string.isRequired 29 | } 30 | 31 | export default ViewArchiveConfigHeader 32 | -------------------------------------------------------------------------------- /wail-ui/components/collections/viewCollection/addSeedFab.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Link } from 'react-router-dom' 4 | import Add from 'material-ui/svg-icons/content/add' 5 | import FloatingActionButton from 'material-ui/FloatingActionButton' 6 | 7 | const AddSeedFab = ({viewingCol, fabStyle}) => ( 8 | 9 | 10 | 11 | 12 | 13 | ) 14 | 15 | AddSeedFab.propTypes = { 16 | viewingCol: PropTypes.string.isRequired, 17 | fabStyle: PropTypes.object 18 | } 19 | 20 | AddSeedFab.defaultProps = { 21 | fabStyle: { 22 | right: 0, 23 | position: 'fixed', 24 | bottom: 5 25 | } 26 | } 27 | 28 | export default AddSeedFab 29 | -------------------------------------------------------------------------------- /wail-ui/components/collections/viewCollection/mementoCard/mementoCardActions.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import FlatButton from 'material-ui/FlatButton' 4 | import CardActions from 'material-ui/Card/CardActions' 5 | import { namedUpdateKeys } from '../../../../util/recomposeHelpers' 6 | 7 | const enhance = namedUpdateKeys('MementoCardActions', ['url', 'viewingCol', 'openInWb']) 8 | 9 | const MementoCardActions = ({url, viewingCol, openInWb}) => ( 10 | 11 | 16 | 17 | ) 18 | 19 | MementoCardActions.propTypes = { 20 | url: PropTypes.string.isRequired, 21 | viewingCol: PropTypes.string.isRequired, 22 | openInWb: PropTypes.func.isRequired 23 | } 24 | 25 | export default enhance(MementoCardActions) 26 | -------------------------------------------------------------------------------- /wail-ui/components/collections/viewCollection/mementoCard/mementoCardEmpty.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Link } from 'react-router-dom' 4 | import Card from 'material-ui/Card/Card' 5 | import CardTitle from 'material-ui/Card/CardTitle' 6 | import { namedUpdateKeys } from '../../../../util/recomposeHelpers' 7 | import { dynamicRouteResolvers as drr } from '../../../../routes/routeNames' 8 | 9 | const enhance = namedUpdateKeys('MementoCardEmpty', ['viewingCol']) 10 | 11 | const MementoCardEmpty = ({ viewingCol }) => ( 12 | 13 | 14 | 18 | 19 | 20 | ) 21 | 22 | MementoCardEmpty.propTypes = { 23 | viewingCol: PropTypes.string.isRequired 24 | } 25 | 26 | export default enhance(MementoCardEmpty) 27 | -------------------------------------------------------------------------------- /wail-ui/components/editor/style.css: -------------------------------------------------------------------------------- 1 | .editor { 2 | position: relative; 3 | 4 | } -------------------------------------------------------------------------------- /wail-ui/components/heritrix/heritrixActionIcon.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { grey400 } from 'material-ui/styles/colors' 3 | import IconButton from 'material-ui/IconButton' 4 | import MoreVertIcon from 'material-ui/svg-icons/navigation/more-vert' 5 | import pure from 'recompose/pure' 6 | 7 | const HeritrixActionIcon = ({jobId}) => ( 8 | 12 | 13 | 14 | ) 15 | 16 | export default pure(HeritrixActionIcon) 17 | -------------------------------------------------------------------------------- /wail-ui/components/informational/wailClosing.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import Dialog from 'material-ui/Dialog' 4 | import {Map} from 'immutable' 5 | import { connect } from 'react-redux' 6 | 7 | const stateToProps = state => ({closing: state.get('closing')}) 8 | 9 | class WailClosing extends Component { 10 | static propTypes = { 11 | closing: PropTypes.instanceOf(Map) 12 | } 13 | 14 | shouldComponentUpdate (nextProps, nextState, nextContext) { 15 | return this.props.closing !== nextProps.closing 16 | } 17 | 18 | render () { 19 | return ( 20 | 24 | WAIL is shutting down 25 | 26 | ) 27 | } 28 | } 29 | 30 | export default connect(stateToProps)(WailClosing) 31 | -------------------------------------------------------------------------------- /wail-ui/components/layout/crawlingIndicator.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import IconButton from 'material-ui/IconButton' 4 | import Info from 'material-ui/svg-icons/action/info' 5 | import { connect } from 'react-redux' 6 | import onlyUpdateForKeys from 'recompose/onlyUpdateForKeys' 7 | 8 | const stateToProps = state => ({ 9 | crawlIconVisible: state.get('runningCrawls') > 0 ? 'visible' : 'hidden' 10 | }) 11 | 12 | const enhance = onlyUpdateForKeys(['crawlIconVisible']) 13 | 14 | const CrawlingIndicator = enhance(({crawlIconVisible}) => ( 15 | 20 | 21 | 22 | )) 23 | 24 | CrawlingIndicator.propTypes = { 25 | crawlIconVisible: PropTypes.string.isRequired 26 | } 27 | 28 | export default connect(stateToProps)(CrawlingIndicator) 29 | -------------------------------------------------------------------------------- /wail-ui/components/layout/footer.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { namedPure } from '../../util/recomposeHelpers' 3 | import Notifications from '../informational/notifications' 4 | import NewCollection from '../dialogs/newCollection' 5 | import EditMetadata from '../dialogs/editMetaData' 6 | 7 | const enhance = namedPure('Footer') 8 | const Footer = enhance(() => ( 9 |
10 | 11 | 12 | 13 |
14 | )) 15 | 16 | export default Footer 17 | -------------------------------------------------------------------------------- /wail-ui/components/layout/header/dynamicAppBar.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import AppBar from 'material-ui/AppBar' 4 | 5 | const style = {marginTop: 0, paddingBottom: 0, paddingTop: 0, height: 55} 6 | const withLineHeight = {...style, lineHeight: '55px'} 7 | 8 | const DynamicAppBar = ({leftIconTouchTap, Location, IconRight}) => ( 9 | 19 | ) 20 | 21 | DynamicAppBar.propTypes = { 22 | leftIconTouchTap: PropTypes.func.isRequired, 23 | Location: PropTypes.element.isRequired, 24 | IconRight: PropTypes.element.isRequired 25 | } 26 | 27 | export default DynamicAppBar 28 | -------------------------------------------------------------------------------- /wail-ui/components/layout/location/collectionViewLocation.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Link } from 'react-router-dom' 4 | import routeNames from '../../../routes/routeNames' 5 | import LocationSeparator from './locationSeparator' 6 | import linkStyle from './linkStyle' 7 | import { general } from '../../../constants/uiStrings' 8 | 9 | const CollectionViewLocation = ({match}) => ( 10 | {general.collections} { 12 | } {match.params.col} 13 | ) 14 | 15 | export default CollectionViewLocation 16 | -------------------------------------------------------------------------------- /wail-ui/components/layout/location/index.js: -------------------------------------------------------------------------------- 1 | export CollectionViewLocation from './collectionViewLocation' 2 | export StaticLocation from './staticLocation' 3 | export AddSeedLocation from './addSeedLocation' 4 | export AddFromFsLocation from './addFromFsLocation' 5 | export ViewArchiveConfigHeader from './viewArchiveConfigLocation' 6 | -------------------------------------------------------------------------------- /wail-ui/components/layout/location/linkStyle.js: -------------------------------------------------------------------------------- 1 | import { amber500 } from 'material-ui/styles/colors' 2 | 3 | export default {color: amber500, textDecoration: 'none'} 4 | -------------------------------------------------------------------------------- /wail-ui/components/layout/location/locationSeparator.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {darkWhite as theColor} from 'material-ui/styles/colors' 3 | import {namedPure} from '../../../util/recomposeHelpers' 4 | 5 | const enhance = namedPure('LocationSeparator') 6 | 7 | const LocationSeparator = () => ( 8 | > 9 | ) 10 | 11 | export default enhance(LocationSeparator) 12 | -------------------------------------------------------------------------------- /wail-ui/components/layout/location/staticLocation.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import onlyUpdateForKeys from 'recompose/onlyUpdateForKeys' 4 | 5 | const StaticLocation = ({theLocation}, {muiTheme: {appBar}}) => ( 6 |

{theLocation}

23 | ) 24 | 25 | StaticLocation.contextTypes = { 26 | muiTheme: PropTypes.object.isRequired 27 | } 28 | 29 | StaticLocation.propTypes = { 30 | theLocation: PropTypes.string.isRequired 31 | } 32 | 33 | export default onlyUpdateForKeys(['theLocation'])(StaticLocation) 34 | -------------------------------------------------------------------------------- /wail-ui/components/layout/location/viewArchiveConfigLocation.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Link } from 'react-router-dom' 3 | import LocationSeparator from './locationSeparator' 4 | import routeNames, { dynamicRouteResolvers as drr } from '../../../routes/routeNames' 5 | import linkStyle from './linkStyle' 6 | 7 | const ViewArchiveConfigHeader = ({match}) => ( 8 | 9 | Collections {} 10 | {match.params.col} {} 11 | Archive Configuration 12 | 13 | ) 14 | 15 | export default ViewArchiveConfigHeader 16 | -------------------------------------------------------------------------------- /wail-ui/components/layout/locationButtons/addSeedButtons.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import Flexbox from 'flexbox-react' 4 | import AddSeedIconMenu from './addSeedIconMenu' 5 | 6 | const CollectionViewButtons = ({CrawlIndicator, match}) => ( 7 | 13 | {CrawlIndicator} 14 | 15 | 16 | ) 17 | 18 | CollectionViewButtons.propTypes = { 19 | CrawlIndicator: PropTypes.element.isRequired, 20 | match: PropTypes.object.isRequired 21 | } 22 | export default CollectionViewButtons 23 | -------------------------------------------------------------------------------- /wail-ui/components/layout/locationButtons/index.js: -------------------------------------------------------------------------------- 1 | export SelectCollectionButtons from './selectCollectionButtons' 2 | export AddSeedButtons from './addSeedButtons' 3 | -------------------------------------------------------------------------------- /wail-ui/components/layout/locationButtons/linkStyle.js: -------------------------------------------------------------------------------- 1 | export default (color) => ({color, textDecoration: 'none'}) 2 | -------------------------------------------------------------------------------- /wail-ui/components/miscellaneous/eventLog.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { namedPure } from '../../util/recomposeHelpers' 3 | import LogViewer from './logViewer' 4 | import MyAutoSizer from '../utilComponents/myAutoSizer' 5 | 6 | const enhance = namedPure('EventLog') 7 | 8 | const EventLog = enhance(() => ( 9 | 10 | {({height}) => ( 11 | 12 | )} 13 | 14 | )) 15 | 16 | export default EventLog 17 | -------------------------------------------------------------------------------- /wail-ui/components/sortDirection/sortDirection.js: -------------------------------------------------------------------------------- 1 | const SortDirection = { 2 | ASC: 'asc', 3 | DESC: 'desc' 4 | } 5 | export default SortDirection 6 | -------------------------------------------------------------------------------- /wail-ui/components/sortDirection/sortIndicator.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import SortDirection from './sortDirection' 4 | import cn from 'classnames' 5 | 6 | const SortIndicator = ({ sortDirection }) => { 7 | const classNames = cn('sortHeader', { 8 | 'sortHeader--ASC': sortDirection === SortDirection.ASC, 9 | 'sortHeader--DESC': sortDirection === SortDirection.DESC 10 | }) 11 | return ( 12 | 18 | {sortDirection === SortDirection.ASC 19 | ? 20 | : 21 | } 22 | 23 | 24 | ) 25 | } 26 | 27 | SortIndicator.propTypes = { 28 | sortDirection: PropTypes.oneOf([ SortDirection.ASC, SortDirection.DESC ]) 29 | } 30 | 31 | export default SortIndicator 32 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/ArchiveTwitterForm/InputName.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Field } from 'redux-form/immutable' 3 | import { TextField } from 'redux-form-material-ui' 4 | import pure from 'recompose/pure' 5 | 6 | function InputName () { 7 | return ( 8 | 14 | ) 15 | } 16 | 17 | export default pure(InputName) 18 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/ArchiveTwitterForm/LookForTerm.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import { CardActions } from 'material-ui/Card' 4 | import FlatButton from 'material-ui/FlatButton' 5 | import { Form, FieldArray, reduxForm } from 'redux-form/immutable' 6 | import CardHeader from 'material-ui/Card/CardHeader' 7 | import pure from 'recompose/pure' 8 | import SearchTermList from './SearchTermList' 9 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/ArchiveTwitterForm/MonitorTime.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Field } from 'redux-form/immutable' 3 | import { SelectField } from 'redux-form-material-ui' 4 | import pure from 'recompose/pure' 5 | 6 | export default function MonitorTime ({times}) { 7 | return ( 8 | 17 | {times} 18 | 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/ArchiveTwitterForm/OptionalSearchTerms.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import pure from 'recompose/pure' 3 | import { FieldArray } from 'redux-form/immutable' 4 | import SearchTermList from './SearchTermList' 5 | 6 | function OptionalSearchTerms () { 7 | return ( 8 | 9 | ) 10 | } 11 | 12 | export default pure(OptionalSearchTerms) 13 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/ArchiveTwitterForm/SelectForCol.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { Field } from 'redux-form/immutable' 3 | import { SelectField } from 'redux-form-material-ui' 4 | 5 | export default class SelectForCol extends Component { 6 | shouldComponentUpdate (nextProps, nextState, nextContext) { 7 | return this.props.cols !== nextProps.cols 8 | } 9 | 10 | render () { 11 | const {cols} = this.props 12 | return ( 13 | 22 | {cols} 23 | 24 | ) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/ArchiveTwitterForm/validate.js: -------------------------------------------------------------------------------- 1 | import timeValues from '../timeValues' 2 | 3 | export default function validate (values) { 4 | const errors = {} 5 | let length = values.get('length') 6 | if (!length) { 7 | errors.length = 'Until Time Is Required' 8 | } else { 9 | if (!timeValues.values[ length ]) { 10 | errors.length = 'Must Choose Until Time' 11 | log('empty') 12 | } 13 | } 14 | 15 | let sname = values.get('screenName') 16 | if (!sname || sname === '') { 17 | errors.screenName = 'Screen Name Required' 18 | } 19 | 20 | if (!values.get('forCol')) { 21 | errors.forCol = 'Collection Required' 22 | } 23 | 24 | return errors 25 | } 26 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/twitterUser/validate.js: -------------------------------------------------------------------------------- 1 | import timeValues from '../timeValues' 2 | import S from 'string' 3 | const log = ::console.log 4 | 5 | export default function validate (values) { 6 | // log('validate', values.toJS()) 7 | const errors = {} 8 | let length = values.get('length') 9 | if (!length) { 10 | console.log('no length') 11 | errors.length = 'Must Choose Time Unit' 12 | } else { 13 | if (!timeValues.values[ length ]) { 14 | errors.length = 'Must Choose Time Unit' 15 | log('empty') 16 | } 17 | } 18 | 19 | if (!values.get('screenName')) { 20 | errors.screenName = 'Screen Name Required' 21 | } 22 | 23 | if (!values.get('forCol')) { 24 | errors.forCol = 'Collection Required' 25 | } 26 | 27 | return errors 28 | } 29 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/archiveConfig/userNameTF.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import TextField from 'material-ui/TextField' 4 | 5 | export default class UserNameTF extends Component { 6 | static propTypes = { 7 | onBlur: PropTypes.func.isRequired 8 | } 9 | 10 | constructor (props) { 11 | super(props) 12 | this.state = { 13 | uname: '' 14 | } 15 | } 16 | 17 | onChange (event) { 18 | this.setState({ 19 | uname: event.target.value 20 | }) 21 | } 22 | 23 | render () { 24 | return ( 25 | this.props.onBlur(this.state.uname)} 32 | /> 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/index.js: -------------------------------------------------------------------------------- 1 | export ArchiveFromFriend from './fromFriends/archiveFromFriends' 2 | -------------------------------------------------------------------------------- /wail-ui/components/twitter/signInOrArchive.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import Immutable from 'immutable' 4 | import {connect} from 'react-redux' 5 | import SignIn from './signIn' 6 | import ArchiveTwitter from './archiveTwitter' 7 | 8 | const stateToProp = state => ({ 9 | twitter: state.get('twitter') 10 | }) 11 | 12 | class SignInOrArchive extends Component { 13 | static propTypes = { 14 | twitter: PropTypes.instanceOf(Immutable.Map).isRequired 15 | } 16 | 17 | render () { 18 | return ( 19 |
20 | {!this.props.twitter.get('userSignedIn') && } 21 | {this.props.twitter.get('userSignedIn') && } 22 |
23 | ) 24 | } 25 | } 26 | 27 | export default connect(stateToProp)(SignInOrArchive) 28 | -------------------------------------------------------------------------------- /wail-ui/components/utilComponents/checkBock.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import Checkbox from 'material-ui/Checkbox' 4 | 5 | export default class CheckBox extends Component { 6 | static propTypes = { 7 | cboxKey: PropTypes.string, 8 | onCheck: PropTypes.func.isRequired, 9 | checked: PropTypes.bool.isRequired 10 | } 11 | 12 | static defaultProps = { 13 | cboxKey: 'AdvancedCheckBox', 14 | checked: false 15 | } 16 | 17 | constructor (props) { 18 | super(props) 19 | this.state = { 20 | checked: props.checked 21 | } 22 | } 23 | 24 | render () { 25 | return ( 26 | { 30 | this.setState({ checked }, () => { 31 | this.props.onCheck(checked) 32 | }) 33 | }} 34 | /> 35 | ) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /wail-ui/components/utilComponents/inlineEdit.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React, { Component } from 'react' 3 | import TextField from 'material-ui/TextField' 4 | 5 | export default class InlineEdit extends Component { 6 | 7 | } 8 | -------------------------------------------------------------------------------- /wail-ui/components/wailCrawls/NoWailCrawlJobs.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Card from 'material-ui/Card/Card' 3 | import CardTitle from 'material-ui/Card/CardTitle' 4 | import CardText from 'material-ui/Card/CardText' 5 | import { Link } from 'react-router-dom' 6 | import routeNames from '../../routes/routeNames' 7 | 8 | export default function NoWailCrawlJobs () { 9 | return ( 10 | 11 | 12 | 16 | 17 | Why Not Choose A Collection And Start One? 18 | 19 | 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /wail-ui/constants/acronyms.js: -------------------------------------------------------------------------------- 1 | export default { 2 | url: 'URL', 3 | urls: 'URLs', 4 | oneOrMoreUrls: 'URL(s)', 5 | urir: 'URI-R', 6 | urim: 'URI-M', 7 | ui: 'UI', 8 | warc: 'WARC', 9 | warcOrArc: '(W)ARC', 10 | warcOrArcs: '(W)ARCs', 11 | fileName: 'Filename', 12 | wail: 'WAIL', 13 | wailWarcreate: 'WAIL-WARCreate', 14 | jdk: 'JDK', 15 | macOs: 'MacOS' 16 | } 17 | -------------------------------------------------------------------------------- /wail-ui/containers/collectionAddSeed.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Card } from 'material-ui/Card' 3 | import { CollAddSeedHeader, ArchiveForm, CheckSeed } from '../components/collections/addToCollection' 4 | 5 | const CollectionAddSeed = ({match, history, location}) => ( 6 |
7 | 8 | 9 | 10 | 11 |
12 | ) 13 | 14 | export default CollectionAddSeed 15 | -------------------------------------------------------------------------------- /wail-ui/containers/collectionAddSeedFs.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { AddFromFsHeader, AddFromFs } from '../components/collections/addToCollection' 3 | 4 | const CollectionAddSeedFs = ({ match, history, location }) => ( 5 |
6 | 7 | 8 |
9 | ) 10 | 11 | export default CollectionAddSeedFs 12 | -------------------------------------------------------------------------------- /wail-ui/containers/collectionView.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ViewCollection from '../components/collections/viewCollection' 3 | 4 | const CollectionView = ({ match, history, location }) => ( 5 |
6 | 7 |
8 | ) 9 | 10 | export default CollectionView 11 | -------------------------------------------------------------------------------- /wail-ui/containers/heritrixView.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { namedPure } from '../util/recomposeHelpers' 3 | import HeritrixToolBar from '../components/heritrix/heritrixToolBar' 4 | import Heritrix2 from '../components/heritrix' 5 | 6 | const enhance = namedPure('HeritrixView') 7 | 8 | const HeritrixView = enhance(() => ( 9 |
10 | 11 | 12 |
13 | )) 14 | 15 | export default HeritrixView 16 | -------------------------------------------------------------------------------- /wail-ui/containers/layout.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Layout = ({ children }) => (children) 4 | 5 | export default Layout 6 | -------------------------------------------------------------------------------- /wail-ui/containers/miscellaneous.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Card, CardHeader, CardMedia } from 'material-ui/Card' 3 | import { namedPure } from '../util/recomposeHelpers' 4 | import EventLog from '../components/miscellaneous/eventLog' 5 | import MiscToolBar from '../components/miscellaneous/miscToolBar' 6 | 7 | const enhance = namedPure('Misc') 8 | 9 | const Misc = enhance(() => ( 10 |
11 |
12 | 13 | 17 | 18 | 19 | 20 | 21 | 22 |
23 |
24 | )) 25 | 26 | export default Misc 27 | -------------------------------------------------------------------------------- /wail-ui/containers/selectColContainer.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { namedPure } from '../util/recomposeHelpers' 3 | import { FilterSelectCol } from '../components/collections/selectCollection' 4 | 5 | const enhance = namedPure('SelectColContainer') 6 | 7 | const SelectColContainer = () => ( 8 |
9 | 10 |
11 | ) 12 | 13 | export default enhance(SelectColContainer) 14 | -------------------------------------------------------------------------------- /wail-ui/containers/serviceStats.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ServiceStatus from '../components/serviceStatus' 3 | 4 | const ServiceStats = () => ( 5 |
6 |
7 | 8 |
9 |
10 | ) 11 | 12 | export default ServiceStats 13 | -------------------------------------------------------------------------------- /wail-ui/containers/twitterView.js: -------------------------------------------------------------------------------- 1 | import PropTypes from 'prop-types' 2 | import React from 'react' 3 | import { Redirect } from 'react-router-dom' 4 | import pure from 'recompose/pure' 5 | import routeNames from '../routes/routeNames' 6 | import ArchiveTwitter from '../components/twitter/archiveConfig' 7 | 8 | const TwitterView = (_, { store }) => ( 9 | store.getState().get('twitter').get('userSignedIn') ? ( 10 | 11 | ) : ( 12 | 13 | ) 14 | ) 15 | 16 | TwitterView.contextTypes = { 17 | store: PropTypes.object 18 | } 19 | 20 | export default pure(TwitterView) 21 | -------------------------------------------------------------------------------- /wail-ui/containers/viewArchiveConfig.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { ArchiveConfigTable, ViewArchiveConfigHeader } from '../components/collections/viewArchiveConfiguration' 3 | 4 | const ViewArchiveConfig = ({ match, history, location }) => ( 5 |
6 | 7 | 8 |
9 | ) 10 | 11 | export default ViewArchiveConfig 12 | -------------------------------------------------------------------------------- /wail-ui/containers/wailCrawlView.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { namedPure } from '../util/recomposeHelpers' 3 | import WailCrawls from '../components/wailCrawls' 4 | 5 | const enhance = namedPure('WailCrawlView') 6 | 7 | function WailCrawlView () { 8 | return ( 9 |
10 | 11 |
12 | ) 13 | } 14 | 15 | export default enhance(WailCrawlView) 16 | -------------------------------------------------------------------------------- /wail-ui/historySync.js: -------------------------------------------------------------------------------- 1 | import { syncHistoryWithStore } from 'react-router-redux' 2 | import { is } from 'immutable' 3 | 4 | const createSelectLocationState = () => { 5 | let prevRoutingState, prevRoutingStateJS 6 | return (state) => { 7 | const routingState = state.get('routing') 8 | if (!is(prevRoutingState, routingState)) { 9 | prevRoutingState = routingState 10 | prevRoutingStateJS = routingState.toJS() 11 | } 12 | return prevRoutingStateJS 13 | } 14 | } 15 | 16 | const makeSyncedHistory = (hashHistory, store) => 17 | syncHistoryWithStore(hashHistory, store, { 18 | selectLocationState: createSelectLocationState() 19 | }) 20 | 21 | export default makeSyncedHistory 22 | -------------------------------------------------------------------------------- /wail-ui/icons/crawling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/crawling.png -------------------------------------------------------------------------------- /wail-ui/icons/heritrix.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/heritrix.gif -------------------------------------------------------------------------------- /wail-ui/icons/linux/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/linux/icon.png -------------------------------------------------------------------------------- /wail-ui/icons/linux/whale_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/linux/whale_1024.png -------------------------------------------------------------------------------- /wail-ui/icons/linux/whale_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/linux/whale_256.png -------------------------------------------------------------------------------- /wail-ui/icons/linux/whale_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/linux/whale_32.png -------------------------------------------------------------------------------- /wail-ui/icons/linux/whale_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/linux/whale_512.png -------------------------------------------------------------------------------- /wail-ui/icons/linux/whale_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/linux/whale_64.png -------------------------------------------------------------------------------- /wail-ui/icons/mLogo_animated.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/mLogo_animated.gif -------------------------------------------------------------------------------- /wail-ui/icons/memento.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/memento.ico -------------------------------------------------------------------------------- /wail-ui/icons/openWB.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/openWB.png -------------------------------------------------------------------------------- /wail-ui/icons/whale.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/whale.icns -------------------------------------------------------------------------------- /wail-ui/icons/whale.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/whale.ico -------------------------------------------------------------------------------- /wail-ui/icons/whale_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/icons/whale_256.png -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/javaCheck/checkReports/index.js: -------------------------------------------------------------------------------- 1 | export NotJStepOrIs from './notJStepOrIs' 2 | export JavaCheckDone from './javaCheckDone' 3 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/javaCheck/checkReports/javaCheckNotDone.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { branch, renderComponent } from 'recompose' 3 | import { CheckStepContent } from '../../../../shared/checkStepContents' 4 | 5 | const JavaCheckNotDoneDarwin = () => ( 6 | 7 |

8 | Usage of Heritrix on MacOS
9 | Requires JDK 1.7 to be installed 10 |

11 |
12 | ) 13 | 14 | const displayWhich = shouldDisplay => 15 | branch( 16 | props => shouldDisplay(props), 17 | renderComponent(JavaCheckNotDoneDarwin) 18 | ) 19 | 20 | const enhance = displayWhich(props => process.platform === 'darwin') 21 | 22 | const JavaCheckNotDone = enhance(() => ( 23 | 24 |

Heritrix Requires Java For Usage

25 |
26 | )) 27 | 28 | export default JavaCheckNotDone 29 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/javaCheck/checkReports/notJStepOrIs.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { compose, branch, onlyUpdateForKeys, renderComponent, setDisplayName } from 'recompose' 4 | import { CheckStepContent } from '../../../../shared/checkStepContents' 5 | import JavaCheckNotDone from './javaCheckNotDone' 6 | 7 | const NotJavaStep = () => ( 8 | 9 |

Depends On OS Check

10 |
11 | ) 12 | 13 | const displayWhich = shouldDisplay => 14 | branch( 15 | props => shouldDisplay(props), 16 | renderComponent(NotJavaStep) 17 | ) 18 | 19 | const enhance = compose( 20 | setDisplayName('JavaCheckNotDone'), 21 | onlyUpdateForKeys(['step']), 22 | displayWhich(props => props.step === 0 || props.step > 1) 23 | ) 24 | 25 | const NotJStepOrIs = props => ( 26 | 27 | ) 28 | 29 | NotJStepOrIs.propTypes = { 30 | step: PropTypes.number.isRequired 31 | } 32 | 33 | export default enhance(NotJStepOrIs) 34 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/javaCheck/downloadJDk/downloadFinished.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Map } from 'immutable' 4 | import { branch, renderComponent } from 'recompose' 5 | import { CheckStepContent } from '../../../../shared/checkStepContents' 6 | import StartJdkInstall from './startJdkInstall' 7 | import {firstTimeLoading as ftl} from '../../../../../constants/uiStrings' 8 | 9 | const displayWhich = shouldDisplay => 10 | branch( 11 | props => shouldDisplay(props), 12 | renderComponent(StartJdkInstall) 13 | ) 14 | 15 | const enhance = displayWhich(props => !props.jdkInstall.get('wasError')) 16 | 17 | const DownloadFinished = ({jdkInstall}) => ( 18 | 19 |

{ftl.jdkDlInitiatingError}

20 |
21 |

{jdkInstall.get('stderr')}

22 |
23 | ) 24 | 25 | DownloadFinished.propTypes = { 26 | jdkInstall: PropTypes.instanceOf(Map).isRequired, 27 | startInstall: PropTypes.func.isRequired 28 | } 29 | 30 | export default enhance(DownloadFinished) 31 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/javaCheck/downloadJDk/jdkInstallError.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/firstTime/components/javaCheck/downloadJDk/jdkInstallError.js -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/javaCheck/index.js: -------------------------------------------------------------------------------- 1 | export JavaCheckContents from './javaCheckContents' 2 | export JavaCheckStep from './javaCheckStep' 3 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/osCheck/index.js: -------------------------------------------------------------------------------- 1 | export OsCheckStep from './osCheckStep' 2 | export OsCheckContents from './osCheckContents' 3 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/osCheck/osCheckContents.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { compose, branch, onlyUpdateForKeys, renderComponent, setDisplayName } from 'recompose' 4 | import { OsCheckRecord } from '../../../records' 5 | import OsCheckNotDone from './osCheckNotDone' 6 | import OsCheckDone from './osCheckDone' 7 | 8 | const displayWhich = shouldDisplay => 9 | branch( 10 | props => shouldDisplay(props), 11 | renderComponent(OsCheckNotDone) 12 | ) 13 | 14 | const enhance = compose( 15 | setDisplayName('OsCheckContents'), 16 | onlyUpdateForKeys(['osCheckRec']), 17 | displayWhich(props => !props.osCheckRec.get('checkDone')) 18 | ) 19 | 20 | const OsCheckContents = enhance(({osCheckRec}) => ( 21 | 22 | )) 23 | 24 | OsCheckContents.propTypes = { 25 | osCheckRec: PropTypes.instanceOf(OsCheckRecord).isRequired 26 | } 27 | 28 | export default OsCheckContents 29 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/osCheck/osCheckDone.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { OsCheckRecord } from '../../../records' 4 | import { CheckStepContent } from '../../../shared/checkStepContents' 5 | import { firstTimeLoading as ftl } from '../../../../constants/uiStrings' 6 | 7 | const OsCheckDone = ({osCheckRec}) => ( 8 | 9 |

{ftl.osCheckDone(osCheckRec.get('os'), osCheckRec.get('arch'))}

10 |
11 | ) 12 | 13 | OsCheckDone.propTypes = { 14 | osCheckRec: PropTypes.instanceOf(OsCheckRecord).isRequired 15 | } 16 | 17 | export default OsCheckDone 18 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/osCheck/osCheckNotDone.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { namedPure } from '../../../../util/recomposeHelpers' 3 | import { CheckStepContent } from '../../../shared/checkStepContents' 4 | import {firstTimeLoading as ftl} from '../../../../constants/uiStrings' 5 | 6 | const OsCheckNotDone = () => ( 7 | 8 |

{ftl.forWailSetup}

9 |
10 | ) 11 | 12 | export default namedPure('OsCheckNotDone')(OsCheckNotDone) 13 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/progress/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { compose, setDisplayName, onlyUpdateForKeys } from 'recompose' 4 | import { connect } from 'react-redux' 5 | import CardMedia from 'material-ui/Card/CardMedia' 6 | import CardText from 'material-ui/Card/CardText' 7 | import ProgressSteps from './progressSteps' 8 | import ProgressMessage from './progressMessage' 9 | 10 | const stateToProps = state => ({ 11 | step: state.get('loadingStep') 12 | }) 13 | 14 | const enhance = compose(setDisplayName('Progress'), onlyUpdateForKeys(['step'])) 15 | 16 | const Progress = ({step}) => ( 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | ) 26 | 27 | Progress.propTypes = { 28 | step: PropTypes.number.isRequired 29 | } 30 | 31 | export default connect(stateToProps)(enhance(Progress)) 32 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/progress/progressCard.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { namedPure } from '../../../../util/recomposeHelpers' 3 | import { Card, CardHeader, CardMedia } from 'material-ui/Card' 4 | import ProgressSteps from './progressSteps' 5 | import {firstTimeLoading as ftl} from '../../../../constants/uiStrings' 6 | 7 | const enhance = namedPure('ProgressStepsCard') 8 | 9 | const ProgressCard = () => ( 10 |
11 | 14 | 15 | 16 | 17 |
18 | ) 19 | 20 | export default enhance(ProgressCard) 21 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/components/uiState/uiStateMessages.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { onlyUpdateForKeys } from 'recompose' 4 | import { UIStateRecord } from '../../../records' 5 | import { CheckStepContent } from '../../../shared/checkStepContents' 6 | 7 | const enhance = onlyUpdateForKeys(['uiStateRec']) 8 | 9 | const UIStateMessage = ({uiStateRec}) => ( 10 | 11 |

{uiStateRec.archiveMessage()}
{uiStateRec.crawlMessage()}

12 |
13 | ) 14 | 15 | UIStateMessage.propTypes = { 16 | uiStateRec: PropTypes.instanceOf(UIStateRecord).isRequired 17 | } 18 | 19 | export default enhance(UIStateMessage) 20 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/containers/firstTime.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { Provider } from 'react-redux' 4 | import { darkBlack, lightBlue900, blue500, cyan700, white } from 'material-ui/styles/colors' 5 | import getMuiTheme from 'material-ui/styles/getMuiTheme' 6 | import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider' 7 | import Layout from './layout' 8 | 9 | const wailTheme = getMuiTheme({ 10 | palette: { 11 | primary1Color: cyan700, 12 | primary2Color: blue500 13 | }, 14 | tabs: { 15 | backgroundColor: white, 16 | textColor: darkBlack, 17 | selectedTextColor: lightBlue900 18 | }, 19 | inkBar: { 20 | backgroundColor: lightBlue900 21 | }, 22 | userAgent: false 23 | }) 24 | 25 | const FirstTime = ({store}) => ( 26 | 27 | 28 | 29 | 30 | 31 | ) 32 | 33 | FirstTime.propTypes = { 34 | store: PropTypes.object.isRequired 35 | } 36 | 37 | export default FirstTime 38 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/icons/whale.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/firstTime/icons/whale.ico -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/icons/whale_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/firstTime/icons/whale_256.png -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/icons/whale_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/firstTime/icons/whale_64.png -------------------------------------------------------------------------------- /wail-ui/loadingScreens/firstTime/loadingScreen.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import 'react-flex/index.css' 3 | import '../../css/wail.css' 4 | import React from 'react' 5 | import { render } from 'react-dom' 6 | import injectTapEventPlugin from 'react-tap-event-plugin' 7 | import FirstTime from './containers/firstTime' 8 | import configureStore from '../store/firstTime' 9 | window.React = React 10 | 11 | injectTapEventPlugin() 12 | 13 | const store = configureStore() 14 | 15 | render(, document.getElementById('loading')) 16 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/middleware/index.js: -------------------------------------------------------------------------------- 1 | import createIpc from 'redux-electron-ipc' 2 | import { createEpicMiddleware } from 'redux-observable' 3 | import rootEpic from '../epics' 4 | import { INITIAL_LOAD } from '../constants' 5 | 6 | const epic = createEpicMiddleware(rootEpic) 7 | const ipc = createIpc({ 8 | 'initial-load': (e, whichOne) => ({ 9 | type: INITIAL_LOAD.HAVE_UI_STATE, 10 | whichOne 11 | }) 12 | }) 13 | 14 | export { 15 | epic, 16 | ipc 17 | } 18 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/components/progress/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { onlyUpdateForKeys } from 'recompose' 4 | import { connect } from 'react-redux' 5 | import { CardMedia, CardText } from 'material-ui/Card' 6 | import ProgressSteps from './progressSteps' 7 | import ProgressMessage from './progressMessage' 8 | 9 | const stateToProps = state => ({ 10 | step: state.get('loadingStep') 11 | }) 12 | 13 | const enhance = onlyUpdateForKeys(['step']) 14 | 15 | const Progress = ({step}) => ( 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | ) 25 | 26 | Progress.propTypes = { 27 | step: PropTypes.number.isRequired 28 | } 29 | 30 | export default connect(stateToProps)(enhance(Progress)) 31 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/components/progress/progressSteps.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { connect } from 'react-redux' 4 | import { Step, Stepper } from 'material-ui/Stepper' 5 | import { onlyUpdateForKeys } from 'recompose' 6 | import { setProps } from '../../../../util/recomposeHelpers' 7 | import ServiceStep from '../serviceCheck/serviceCheckStep' 8 | import UIStateStep from '../uiState/uiStateStep' 9 | 10 | const stateToProps = state => ({ 11 | step: state.get('loadingStep') 12 | }) 13 | 14 | const propTypes = { 15 | step: PropTypes.number.isRequired 16 | } 17 | 18 | const enhance = setProps(propTypes, onlyUpdateForKeys(['step'])) 19 | 20 | const ProgressSteps = enhance(({step}) => ( 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | )) 30 | 31 | export default connect(stateToProps)(ProgressSteps) 32 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/components/uiState/uiStateMessages.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import { onlyUpdateForKeys } from 'recompose' 4 | import { UIStateRecord } from '../../../records' 5 | import { CheckStepContent } from '../../../shared/checkStepContents' 6 | 7 | const enhance = onlyUpdateForKeys(['uiStateRec']) 8 | 9 | const UIStateMessage = enhance(({uiStateRec}) => ( 10 | 11 |

{uiStateRec.archiveMessage()}
{uiStateRec.crawlMessage()}

12 |
13 | )) 14 | 15 | UIStateMessage.propTypes = { 16 | uiStateRec: PropTypes.instanceOf(UIStateRecord).isRequired 17 | } 18 | 19 | export default UIStateMessage 20 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/icons/whale.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/notFirstTime/icons/whale.ico -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/icons/whale_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/notFirstTime/icons/whale_256.png -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/icons/whale_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/N0taN3rd/wail/36edc9265f99e923ffbcc211981c1f0cfcef250f/wail-ui/loadingScreens/notFirstTime/icons/whale_64.png -------------------------------------------------------------------------------- /wail-ui/loadingScreens/notFirstTime/notFirstLoad.js: -------------------------------------------------------------------------------- 1 | import 'babel-polyfill' 2 | import 'react-flex/index.css' 3 | import '../../css/wail.css' 4 | import React from 'react' 5 | import { render } from 'react-dom' 6 | import injectTapEventPlugin from 'react-tap-event-plugin' 7 | import NotFirstTime from './containers/notFirstTime' 8 | import configureStore from '../store/notFirstTime' 9 | 10 | window.React = React 11 | 12 | injectTapEventPlugin() 13 | 14 | const store = configureStore() 15 | 16 | render(, document.getElementById('loading')) 17 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/firstTime/javaCheck.js: -------------------------------------------------------------------------------- 1 | import { JavaCheckRecord } from '../../records' 2 | import { JAVA_CHECK } from '../../constants' 3 | 4 | const {CHECKED_JAVA} = JAVA_CHECK 5 | 6 | const javaCheck = (state = new JavaCheckRecord(), action) => { 7 | if (action.type === CHECKED_JAVA) { 8 | return state.updateFromAction(action) 9 | } else { 10 | return state 11 | } 12 | } 13 | 14 | export default javaCheck 15 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/firstTime/jdkDl.js: -------------------------------------------------------------------------------- 1 | import { JdkDlRecord } from '../../records' 2 | import { JDK_DOWNLOAD } from '../../constants' 3 | 4 | const {DL_JDK_PROGRESS, DL_JDK_ERROR, DL_JDK_FINISHED, DL_JDK, DL_JDK_STARTED} = JDK_DOWNLOAD 5 | 6 | const jdkDl = (state = new JdkDlRecord(), action) => { 7 | switch (action.type) { 8 | case DL_JDK_STARTED: 9 | return state.started() 10 | case DL_JDK_PROGRESS: 11 | return state.progressUpdate(action.stats) 12 | case DL_JDK_FINISHED: 13 | return state.finishedNoError() 14 | case DL_JDK_ERROR: 15 | return state.finishedError() 16 | default: 17 | return state 18 | } 19 | } 20 | 21 | export default jdkDl 22 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/firstTime/jdkInstall.js: -------------------------------------------------------------------------------- 1 | import Immutable from 'immutable' 2 | import { JDK_INSTALL } from '../../constants' 3 | 4 | const {INSTALL_PROCESS_ERROR, START_INSTALL} = JDK_INSTALL 5 | 6 | const defaultState = Immutable.Map({ 7 | started: false, 8 | wasError: false, 9 | error: null, 10 | where: '', 11 | stderr: '' 12 | }) 13 | 14 | const jdkInstall = (state = defaultState, action) => { 15 | console.log(action) 16 | switch (action.type) { 17 | case INSTALL_PROCESS_ERROR: 18 | return state.merge({wasError: true, ...action.report}) 19 | case START_INSTALL: 20 | return state.set('started', true) 21 | default: 22 | return state 23 | } 24 | } 25 | 26 | export default jdkInstall 27 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/firstTime/osCheck.js: -------------------------------------------------------------------------------- 1 | import { OsCheckRecord } from '../../records' 2 | import { OS_CHECK } from '../../constants' 3 | 4 | const {CHECKED_OS} = OS_CHECK 5 | 6 | const osCheck = (state = new OsCheckRecord(), action) => { 7 | if (action.type === CHECKED_OS) { 8 | return state.updateFromAction(action) 9 | } else { 10 | return state 11 | } 12 | } 13 | 14 | export default osCheck 15 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/notFirstTime/index.js: -------------------------------------------------------------------------------- 1 | import { combineReducers } from 'redux-immutable' 2 | import { filterActions } from 'redux-ignore' 3 | import { STEP, SERVICES, INITIAL_LOAD } from '../../constants' 4 | import loadingStep from '../shared/loadingStep' 5 | import services from '../shared/services' 6 | import uiState from '../shared/uiState' 7 | 8 | const rootReducer = combineReducers({ 9 | loadingStep: filterActions(loadingStep, Object.values(STEP)), 10 | services: filterActions(services, Object.values(SERVICES)), 11 | uiState: filterActions(uiState, Object.values(INITIAL_LOAD)) 12 | }) 13 | 14 | export default rootReducer 15 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/shared/loadingStep.js: -------------------------------------------------------------------------------- 1 | import { STEP } from '../../constants' 2 | 3 | const {NEXT_LOADING_STEP, PREV_LOADING_STEP} = STEP 4 | 5 | const loadingStep = (state = 0, action) => { 6 | if (action.type === NEXT_LOADING_STEP) { 7 | return state + 1 8 | } else if (action.type === PREV_LOADING_STEP) { 9 | let ns = state - 1 10 | return ns >= 0 ? ns : 0 11 | } else { 12 | return state 13 | } 14 | } 15 | 16 | export default loadingStep 17 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/shared/services.js: -------------------------------------------------------------------------------- 1 | import { SSRecord } from '../../records' 2 | import { SERVICES } from '../../constants' 3 | 4 | const { 5 | HERITRIX_STARTED, 6 | HERITRIX_STARTED_ERROR, 7 | WAYBACK_STARTED, 8 | WAYBACK_STARTED_ERROR 9 | } = SERVICES 10 | 11 | const services = (state = new SSRecord(), action) => { 12 | switch (action.type) { 13 | case HERITRIX_STARTED: 14 | return state.heritrixStarted() 15 | case HERITRIX_STARTED_ERROR: 16 | return state.heritrixStartedError(action.errorReport) 17 | case WAYBACK_STARTED: 18 | return state.waybackStarted() 19 | case WAYBACK_STARTED_ERROR: 20 | return state.waybackStartedError(action.errorReport) 21 | default: 22 | return state 23 | } 24 | } 25 | 26 | export default services 27 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/reducers/shared/uiState.js: -------------------------------------------------------------------------------- 1 | import { INITIAL_LOAD } from '../../constants' 2 | import { UIStateRecord } from '../../records' 3 | 4 | const uiState = (state = new UIStateRecord(), action) => { 5 | switch (action.type) { 6 | case INITIAL_LOAD.HAVE_UI_STATE: 7 | return state.progress(action) 8 | default: 9 | return state 10 | } 11 | } 12 | 13 | export default uiState 14 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/shared/checkStepContents/checkStepContent.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | 4 | const getStyles = (last, context) => { 5 | const styles = { 6 | root: { 7 | marginTop: -14, 8 | marginLeft: 14 + 11, // padding + 1/2 icon 9 | paddingLeft: 24 - 11 + 8, 10 | paddingRight: 16, 11 | overflow: 'hidden' 12 | } 13 | } 14 | if (!last) { 15 | styles.root.borderLeft = `1px solid ${context.muiTheme.stepper.connectorLineColor}` 16 | } 17 | return styles 18 | } 19 | 20 | const CheckStepContent = ({last, children}, context) => { 21 | const {muiTheme: {prepareStyles}} = context 22 | const styles = getStyles(last, context) 23 | return ( 24 |
25 |
26 | {children} 27 |
28 |
29 | ) 30 | } 31 | 32 | CheckStepContent.contextTypes = { 33 | muiTheme: PropTypes.object.isRequired, 34 | stepper: PropTypes.object 35 | } 36 | 37 | export default CheckStepContent 38 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/shared/checkStepContents/index.js: -------------------------------------------------------------------------------- 1 | export CheckStepContent from './checkStepContent' 2 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/shared/checkStepLabels/checkStepLabel.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import StepLabel from 'material-ui/Stepper/StepLabel' 4 | 5 | const CheckStepLabel = ({ownProps, check, label, lid}) => { 6 | check() 7 | return ( 8 | {label} 9 | ) 10 | } 11 | 12 | CheckStepLabel.propTypes = { 13 | ownProps: PropTypes.object.isRequired, 14 | lid: PropTypes.string.isRequired, 15 | check: PropTypes.func.isRequired, 16 | label: PropTypes.string.isRequired 17 | } 18 | 19 | export default CheckStepLabel 20 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/shared/checkStepLabels/checkStepWarningLabel.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import StepLabel from 'material-ui/Stepper/StepLabel' 4 | import WarningIcon from 'material-ui/svg-icons/alert/warning' 5 | import { red500 } from 'material-ui/styles/colors' 6 | 7 | const CheckStepWarningLabel = ({ownProps, label}) => ( 8 | } 10 | style={{color: red500}} 11 | > 12 | {label} 13 | 14 | ) 15 | 16 | CheckStepWarningLabel.propTypes = { 17 | ownProps: PropTypes.object.isRequired, 18 | label: PropTypes.string.isRequired 19 | } 20 | 21 | export default CheckStepWarningLabel 22 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/shared/checkStepLabels/index.js: -------------------------------------------------------------------------------- 1 | export CheckStepLabel from './checkStepLabel' 2 | export CheckStepWarningLabel from './checkStepWarningLabel' 3 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/shared/header/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import PropTypes from 'prop-types' 3 | import AppBar from 'material-ui/AppBar' 4 | import Avatar from 'material-ui/Avatar' 5 | import onlyUpdateForKeys from 'recompose/onlyUpdateForKeys' 6 | 7 | const enhance = onlyUpdateForKeys(['title']) 8 | 9 | const Header = ({title}) => ( 10 | } 12 | title={title} 13 | /> 14 | ) 15 | 16 | Header.propTypes = { 17 | title: PropTypes.string.isRequired 18 | } 19 | 20 | export default enhance(Header) 21 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/store/firstTime/configureStore.dev.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, compose } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import promiseMiddleware from 'redux-promise' 4 | import rootReducer from '../../reducers/firstTime' 5 | import * as actionCreators from '../../actions' 6 | import { epic, ipc } from '../../middleware' 7 | 8 | const configureStore = () => { 9 | const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ 10 | actionCreators 11 | }) || compose 12 | const store = createStore( 13 | rootReducer, 14 | composeEnhancers( 15 | applyMiddleware(thunk, promiseMiddleware, epic, ipc) 16 | ) 17 | ) 18 | 19 | if (module.hot) { 20 | // Enable Webpack hot module replacement for reducers 21 | module.hot.accept('../../reducers/firstTime', () => { 22 | store.replaceReducer(require('../../reducers/firstTime/index')) 23 | }) 24 | } 25 | 26 | return store 27 | } 28 | 29 | export default configureStore 30 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/store/firstTime/configureStore.prod.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import promiseMiddleware from 'redux-promise' 4 | import rootReducer from '../../reducers/firstTime' 5 | import { epic, ipc } from '../../middleware' 6 | 7 | const configureStore = () => createStore(rootReducer, 8 | applyMiddleware(thunk, promiseMiddleware, epic, ipc) 9 | ) 10 | 11 | export default configureStore 12 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/store/firstTime/index.js: -------------------------------------------------------------------------------- 1 | if (process.env.NODE_ENV === 'production') { 2 | module.exports = require('./configureStore.prod.js') 3 | } else { 4 | module.exports = require('./configureStore.dev.js') 5 | } 6 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/store/notFirstTime/configureStore.dev.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, compose } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import promiseMiddleware from 'redux-promise' 4 | import rootReducer from '../../reducers/firstTime' 5 | import * as actionCreators from '../../actions' 6 | import { ipc } from '../../middleware' 7 | 8 | const configureStore = () => { 9 | const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ 10 | actionCreators 11 | }) || compose 12 | const store = createStore( 13 | rootReducer, 14 | composeEnhancers( 15 | applyMiddleware(thunk, promiseMiddleware, ipc) 16 | ) 17 | ) 18 | 19 | if (module.hot) { 20 | // Enable Webpack hot module replacement for reducers 21 | module.hot.accept('../../reducers/notFirstTime', () => { 22 | store.replaceReducer(require('../../reducers/notFirstTime/index')) 23 | }) 24 | } 25 | 26 | return store 27 | } 28 | 29 | export default configureStore 30 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/store/notFirstTime/configureStore.prod.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import promiseMiddleware from 'redux-promise' 4 | import rootReducer from '../../reducers/notFirstTime' 5 | import { ipc } from '../../middleware' 6 | 7 | const configureStore = () => createStore(rootReducer, 8 | applyMiddleware(thunk, promiseMiddleware, ipc) 9 | ) 10 | 11 | export default configureStore 12 | -------------------------------------------------------------------------------- /wail-ui/loadingScreens/store/notFirstTime/index.js: -------------------------------------------------------------------------------- 1 | if (process.env.NODE_ENV === 'production') { 2 | module.exports = require('./configureStore.prod.js') 3 | } else { 4 | module.exports = require('./configureStore.dev.js') 5 | } 6 | -------------------------------------------------------------------------------- /wail-ui/logger/logger.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs-extra' 2 | import autobind from 'autobind-decorator' 3 | import moment from 'moment' 4 | import os from 'os' 5 | 6 | export default class logger { 7 | constructor (options) { 8 | this.path = options.path 9 | this.endline = os.EOL 10 | fs.ensureFileSync(this.path) 11 | this.fileStream = fs.createWriteStream(this.path, { flags: 'a' }) 12 | } 13 | 14 | @autobind 15 | info (msg) { 16 | let date = moment().format('MM/DD/YYYY hh:mm:ssa') 17 | let lmsg = `[${date}] [info] ${msg}${this.endline}` 18 | this.fileStream.write(lmsg) 19 | } 20 | 21 | @autobind 22 | error (msg) { 23 | let date = moment().format('MM/DD/YYYY hh:mm:ssa') 24 | let lmsg = `[${date}] [error] ${msg}${this.endline}` 25 | this.fileStream.write(lmsg) 26 | } 27 | 28 | @autobind 29 | cleanUp () { 30 | this.fileStream.end() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /wail-ui/middleware/index.js: -------------------------------------------------------------------------------- 1 | import ipc from './ipc' 2 | import heritrixRequestHandler from './heritrixRequestHandler' 3 | import requestHandler from './requestHandler' 4 | 5 | export { 6 | ipc, 7 | heritrixRequestHandler, 8 | requestHandler 9 | } 10 | -------------------------------------------------------------------------------- /wail-ui/middleware/requestHandler.js: -------------------------------------------------------------------------------- 1 | import checkSeed from '../util/checkSeed' 2 | import { checkDone, checkDoneError, checkingUrl } from '../actions/archival' 3 | import { CheckUrlEvents, EventTypes, LocationChange, AddSeedFromFsEvents } from '../constants/wail-constants' 4 | import heritrixRequestHandler from './heritrixRequestHandler' 5 | 6 | const { CHECK_URL } = CheckUrlEvents 7 | 8 | // curried the living daylights out of this 9 | const requestHandler = store => next => action => { 10 | switch (action.type) { 11 | case CHECK_URL: 12 | next(checkingUrl('Checking...')) 13 | return checkSeed(action.url) 14 | .then(results => { 15 | return next(checkDone(results)) 16 | }) 17 | .catch(errorReport => { 18 | return next(checkDone(errorReport)) 19 | }) 20 | default: 21 | return heritrixRequestHandler(store, next, action) 22 | } 23 | } 24 | 25 | export default requestHandler 26 | -------------------------------------------------------------------------------- /wail-ui/records/collection.js: -------------------------------------------------------------------------------- 1 | import Immutable from 'immutable' 2 | import ColCrawlInfo from '../../wail-core/util/colCrawlInfo' 3 | 4 | const CRecord = Immutable.Record({ 5 | indexes: '', 6 | archive: '', 7 | hasRunningCrawl: false, 8 | colpath: '', 9 | colName: '', 10 | numArchives: 0, 11 | metadata: Immutable.Map(), 12 | seeds: Immutable.List() 13 | }) 14 | 15 | const makeCollectionRecord = col => { 16 | let { crawls } = col 17 | col.metadata = Immutable.fromJS(col.metadata) 18 | } 19 | 20 | export default class Collection extends CRecord { 21 | static fromJS (col) { 22 | let { crawls } = col 23 | crawls = crawls.map(r => new ColCrawlInfo(r)) 24 | crawls.sort((r1, r2) => r1.compare(r2)) 25 | col.crawls = Immutable.List(crawls) 26 | col.metadata = Immutable.fromJS(col.metadata) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /wail-ui/records/runInfoRecord.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment' 2 | import Immutable from 'immutable' 3 | 4 | const RunRecord = Immutable.Record({ 5 | started: false, 6 | jobId: 0, 7 | ending: false, 8 | ended: true, 9 | timestamp: 0, 10 | tsMoment: moment(), 11 | discovered: 0, 12 | queued: 0, 13 | downloaded: 0 14 | }) 15 | 16 | export default class RunInfoRecord extends RunRecord { 17 | updateStats (stats) { 18 | if (stats.warcs) { 19 | delete stats.warcs 20 | } 21 | stats.tsMoment = moment(stats.timestamp) 22 | stats.jobId = this.get('jobId') 23 | return this.merge(stats) 24 | } 25 | 26 | status () { 27 | if (this.ending && !this.get('ended')) { 28 | return 'Ending' 29 | } 30 | return this.get('ended') ? 'Ended' : 'Running' 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /wail-ui/records/serviceStatus.js: -------------------------------------------------------------------------------- 1 | import { Record } from 'immutable' 2 | 3 | export default class ServiceStats extends Record({heritrix: true, wayback: true}) { 4 | updateHeritrix (update) { 5 | return this.set('heritrix', update) 6 | } 7 | 8 | heritrixStatus () { 9 | return this.get('heritrix') ? 'Running' : 'X' 10 | } 11 | 12 | updateWayback (update) { 13 | return this.set('wayback', update) 14 | } 15 | 16 | waybackRestarting () { 17 | return this.set('wayback', false) 18 | } 19 | 20 | waybackStatus () { 21 | return this.get('wayback') ? 'Running' : 'X' 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /wail-ui/reducers/checkUrl.js: -------------------------------------------------------------------------------- 1 | import { Map } from 'immutable' 2 | import { CheckUrlEvents } from '../constants/wail-constants' 3 | const { 4 | CHECKING_URL, 5 | CHECKING_DONE, 6 | CHECKING_DONE_ERROR, 7 | RESET_CHECK_MESSAGE 8 | } = CheckUrlEvents 9 | 10 | const checkUrl = (state = Map({message: '', checkingDone: false, result: {}}), action) => { 11 | console.log('checkUrl Reducer', action) 12 | switch (action.type) { 13 | case CHECKING_URL: 14 | return state.withMutations(map => map.set('checkingDone', false).set('message', action.message)) 15 | case CHECKING_DONE: 16 | return state.withMutations(map => 17 | map.set('message', '').set('checkingDone', true).set('result', action.result) 18 | ) 19 | case RESET_CHECK_MESSAGE: 20 | return state.withMutations(map => map.set('message', '').set('checkingDone', false).set('result', {})) 21 | default: 22 | return state 23 | } 24 | } 25 | 26 | export default checkUrl 27 | -------------------------------------------------------------------------------- /wail-ui/reducers/closing.js: -------------------------------------------------------------------------------- 1 | import Immutable from 'immutable' 2 | import { Closing } from '../constants/wail-constants' 3 | 4 | const {CLOSING, CLOSING_MESSAGE} = Closing 5 | 6 | const closing = (state = Immutable.Map({isClosing: false, messages: []}), action) => { 7 | switch (action.type) { 8 | case CLOSING: 9 | return state.set('isClosing', true) 10 | case CLOSING_MESSAGE: 11 | return state.set('messages', state.get('messages').push(action.message)) 12 | default: 13 | return state 14 | } 15 | } 16 | 17 | export default closing 18 | -------------------------------------------------------------------------------- /wail-ui/reducers/crawlJobIds.js: -------------------------------------------------------------------------------- 1 | import { List } from 'immutable' 2 | import { CrawlEvents } from '../constants/wail-constants' 3 | 4 | const {GOT_ALL_RUNS} = CrawlEvents 5 | 6 | const crawlJobIds = (state = List(), action) => { 7 | console.log('in crawls reducer', action) 8 | switch (action.type) { 9 | case GOT_ALL_RUNS: 10 | let {allRuns} = action 11 | if ((allRuns || []).length > 0) { 12 | window.logger.debug(`intial job state load ${allRuns.length} jobs`) 13 | return state.merge(allRuns.map(r => r.jobId)) 14 | } else { 15 | window.logger.debug('there was no runs in the db') 16 | return state 17 | } 18 | default: 19 | return state 20 | } 21 | } 22 | 23 | export default crawlJobIds 24 | -------------------------------------------------------------------------------- /wail-ui/reducers/crawlToCollection.js: -------------------------------------------------------------------------------- 1 | import {List} from 'immutable' 2 | 3 | export default (state = List(), action) => { 4 | console.log('in collection names reducer', action) 5 | switch (action.type) { 6 | case 'got-all-collections': 7 | return state.merge(action.cols.map(col => col.colName)) 8 | case 'created-collection': 9 | return state.push(action.col.colName) 10 | default: 11 | return state 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /wail-ui/reducers/header.js: -------------------------------------------------------------------------------- 1 | import Immutable from 'immutable' 2 | import {Header} from '../constants/wail-constants' 3 | 4 | const { HEADER_OPEN_CLOSE, HEADER_LOCATION, HEADER_TOGGLE } = Header 5 | 6 | export default (state = Immutable.Map({ location: 'WAIL', open: false }), action) => { 7 | switch (action.type) { 8 | case HEADER_LOCATION: 9 | return state.withMutations(map => map.set('location', action.location).set('open', false)) 10 | case HEADER_OPEN_CLOSE: 11 | return state.set('open', action.open) 12 | case HEADER_TOGGLE: 13 | return state.set('open', !state.get('open')) 14 | default: 15 | return state 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /wail-ui/reducers/router.js: -------------------------------------------------------------------------------- 1 | import Immutable from 'immutable' 2 | import {LOCATION_CHANGE, CALL_HISTORY_METHOD} from 'react-router-redux' 3 | 4 | const initialState = Immutable.fromJS({ 5 | locationBeforeTransitions: '' 6 | }) 7 | 8 | export default (state = initialState, { type, payload }) => { 9 | if (type === LOCATION_CHANGE) { 10 | console.log(LOCATION_CHANGE, payload) 11 | return state.merge({ locationBeforeTransitions: payload }) 12 | } else { 13 | console.log(type, payload) 14 | } 15 | return state 16 | } 17 | -------------------------------------------------------------------------------- /wail-ui/reducers/routing.js: -------------------------------------------------------------------------------- 1 | import Immutable from 'immutable' 2 | import { 3 | LOCATION_CHANGE 4 | } from 'react-router-redux' 5 | 6 | const initialState = Immutable.fromJS({ 7 | locationBeforeTransitions: null 8 | }) 9 | 10 | export default (state = initialState, action) => { 11 | if (action.type === LOCATION_CHANGE) { 12 | let loc = action.payload.pathname 13 | if (action.payload.pathname !== '/') { 14 | if (loc[0] === '/') { loc = loc.substr(1) } 15 | } 16 | return state.merge({ 17 | locationBeforeTransitions: action.payload, 18 | loc 19 | }) 20 | } 21 | 22 | return state 23 | } 24 | -------------------------------------------------------------------------------- /wail-ui/reducers/runningCrawls.js: -------------------------------------------------------------------------------- 1 | import { RunningCrawlCounter } from '../constants/wail-constants' 2 | 3 | const runningCrawls = (state = 0, action) => { 4 | switch (action.type) { 5 | case RunningCrawlCounter.INCREMENT: 6 | return state + 1 7 | case RunningCrawlCounter.DECREMENT: 8 | return state > 0 ? state - 1 : 0 9 | default: 10 | return state 11 | } 12 | } 13 | 14 | export default runningCrawls 15 | -------------------------------------------------------------------------------- /wail-ui/reducers/serviceStatuses.js: -------------------------------------------------------------------------------- 1 | import ServiceStats from '../records/serviceStatus' 2 | import { ServiceEvents } from '../constants/wail-constants' 3 | 4 | const {HERITRIX_STATUS_UPDATE, WAYBACK_STATUS_UPDATE, WAYBACK_RESTART} = ServiceEvents 5 | 6 | const serviceStatuses = (state = new ServiceStats(), action) => { 7 | switch (action.type) { 8 | case HERITRIX_STATUS_UPDATE: 9 | return state.updateHeritrix(action.status) 10 | case WAYBACK_STATUS_UPDATE: 11 | return state.updateWayback(action.status) 12 | case WAYBACK_RESTART: 13 | return state.waybackRestarting() 14 | default: 15 | return state 16 | } 17 | } 18 | 19 | export default serviceStatuses 20 | -------------------------------------------------------------------------------- /wail-ui/reducers/twitter.js: -------------------------------------------------------------------------------- 1 | import { Map } from 'immutable' 2 | import { remote } from 'electron' 3 | import { Twitter } from '../constants/wail-constants' 4 | const settings = remote.getGlobal('settings') 5 | 6 | const twitter = (state = Map({userSignedIn: settings.get('twitter.userSignedIn')}), action) => { 7 | switch (action.type) { 8 | case Twitter.SIGNED_IN: 9 | return state.set('userSignedIn', true) 10 | default: 11 | return state 12 | } 13 | } 14 | 15 | export default twitter 16 | -------------------------------------------------------------------------------- /wail-ui/reducers/wailCrawl.js: -------------------------------------------------------------------------------- 1 | import { uiActions } from '../../wail-core/globalStrings' 2 | import WCrawlsRecord from '../records/wailCrawl' 3 | 4 | export default function wailCrawlsReducer (state = new WCrawlsRecord(), action) { 5 | switch (action.type) { 6 | case uiActions.WAIL_CRAWL_TRACK: 7 | return state.track(action.crawl) 8 | case uiActions.WAIL_CRAWL_START: 9 | return state.started(action.update) 10 | case uiActions.WAIL_CRAWL_Q_INCREASE: 11 | return state.qIncrease(action.update) 12 | case uiActions.WAIL_CRAWL_FINISHED: 13 | return state.aCrawlFinished(action.update) 14 | default: 15 | return state 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /wail-ui/routes/routeNames.js: -------------------------------------------------------------------------------- 1 | const routeNames = { 2 | selectCol: '/', 3 | viewCollection: '/collections/:col', 4 | addSeed: '/addSeed/:col', 5 | addSeedFs: '/addFsSeed/:col', 6 | viewArchiveConfig: '/viewArchiveConfig/:col', 7 | heritrix: '/heritrix', 8 | misc: '/misc', 9 | services: '/services', 10 | twitter: '/twitter', 11 | twitterSignIn: '/twitter-signin', 12 | wailCrawls: '/wailCrawls' 13 | } 14 | 15 | export const dynamicRouteResolvers = { 16 | viewCollection (col) { 17 | return `/collections/${col}` 18 | }, 19 | addSeed (col) { 20 | return `/addSeed/${col}` 21 | }, 22 | addSeedFs (col) { 23 | return `/addFsSeed/${col}` 24 | }, 25 | viewArchiveConfig (col) { 26 | return `/viewArchiveConfig/${col}` 27 | } 28 | } 29 | 30 | export default routeNames 31 | -------------------------------------------------------------------------------- /wail-ui/stores/configureStore.dev.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, compose } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import promiseMiddleware from 'redux-promise' 4 | import { ipc, requestHandler } from '../middleware' 5 | import rootReducer from '../reducers' 6 | import { Map } from 'immutable' 7 | import * as actionCreators from '../actions/index' 8 | 9 | const configureStore = () => { 10 | const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({ 11 | actionCreators 12 | }) || compose 13 | const store = createStore( 14 | rootReducer, 15 | Map(), 16 | composeEnhancers( 17 | applyMiddleware(thunk, promiseMiddleware, requestHandler, ipc) 18 | ) 19 | ) 20 | 21 | if (module.hot) { 22 | // Enable Webpack hot module replacement for reducers 23 | module.hot.accept('../reducers', () => { 24 | store.replaceReducer(require('../reducers')) 25 | }) 26 | } 27 | 28 | return store 29 | } 30 | 31 | export default configureStore 32 | -------------------------------------------------------------------------------- /wail-ui/stores/configureStore.js: -------------------------------------------------------------------------------- 1 | if (process.env.NODE_ENV === 'production') { 2 | module.exports = require('./configureStore.prod.js') 3 | } else { 4 | module.exports = require('./configureStore.dev.js') 5 | } 6 | -------------------------------------------------------------------------------- /wail-ui/stores/configureStore.prod.js: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware, compose } from 'redux' 2 | import thunk from 'redux-thunk' 3 | import promiseMiddleware from 'redux-promise' 4 | import { Map } from 'immutable' 5 | import { ipc, requestHandler } from '../middleware' 6 | import rootReducer from '../reducers' 7 | 8 | const configureStore = () => createStore( 9 | rootReducer, 10 | Map(), 11 | applyMiddleware(thunk, promiseMiddleware, requestHandler, ipc) 12 | ) 13 | 14 | export default configureStore 15 | -------------------------------------------------------------------------------- /wail-ui/util/fuzzyFilter.js: -------------------------------------------------------------------------------- 1 | const fuzzyFilter = (searchText, key) => { 2 | const compareString = key.toLowerCase() 3 | searchText = searchText.toLowerCase() 4 | 5 | let searchTextIndex = 0 6 | for (let index = 0; index < key.length; index++) { 7 | if (compareString[ index ] === searchText[ searchTextIndex ]) { 8 | searchTextIndex += 1 9 | } 10 | } 11 | 12 | return searchTextIndex === searchText.length 13 | } 14 | export default fuzzyFilter 15 | -------------------------------------------------------------------------------- /wail-ui/util/momentSort.js: -------------------------------------------------------------------------------- 1 | import moment from 'moment' 2 | import _ from 'lodash/fp' 3 | 4 | const momentSort = (m1, m2) => { 5 | if (m1.isBefore(m2)) { 6 | return -1 7 | } else if (m1.isSame(m2)) { 8 | return 0 9 | } else { 10 | return 1 11 | } 12 | } 13 | 14 | const momentSortRev = (m1, m2) => { 15 | if (m1.isBefore(m2)) { 16 | return 1 17 | } else if (m1.isSame(m2)) { 18 | return 0 19 | } else { 20 | return -1 21 | } 22 | } 23 | 24 | export { 25 | momentSort, 26 | momentSortRev 27 | } 28 | -------------------------------------------------------------------------------- /wail-ui/util/setPropsIfDev.js: -------------------------------------------------------------------------------- 1 | import { setPropTypes, compose } from 'recompose' 2 | import curry from 'lodash/curry' 3 | 4 | export function setPropsRecompose (props, ...funcs) { 5 | if (process.NODE_ENV !== 'production') { 6 | return compose(...funcs, setPropTypes(props)) 7 | } 8 | return compose(...funcs) 9 | } 10 | 11 | export function setProps (props, Component) { 12 | if (process.NODE_ENV !== 'production') { 13 | console.log('setting props') 14 | Component.propTypes = props 15 | } 16 | return Component 17 | } 18 | 19 | export function setPropsCurried (props) { 20 | return curry(setProps)(props) 21 | } 22 | -------------------------------------------------------------------------------- /wail-ui/windowCloseHandler.js: -------------------------------------------------------------------------------- 1 | import { remote } from 'electron' 2 | import { Closing } from './constants/wail-constants' 3 | import { launchWebUI } from './actions/heritrix' 4 | 5 | const windowCloseHandler = store => e => { 6 | const areCrawlsRunning = store.getState().get('runningCrawls') > 0 7 | if (areCrawlsRunning) { 8 | const opts = { 9 | type: 'question', 10 | title: 'Crawls Are Running', 11 | message: 'Closing WAIL will terminate the running crawl(s). If you wish to stop please manually stop the running crawls and then exit WAIL. Is this something you wish to do?', 12 | buttons: ['Yes', 'No'] 13 | } 14 | const shouldClose = remote.dialog.showMessageBox(remote.getCurrentWindow(), opts) 15 | if (shouldClose === 0) { 16 | launchWebUI() 17 | } 18 | e.preventDefault() 19 | e.returnValue = false 20 | return false 21 | } 22 | } 23 | 24 | export default windowCloseHandler 25 | -------------------------------------------------------------------------------- /windowsNukeDir.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | echo %1 3 | rmdir /s /q %1 4 | 5 | exit /B %errorlevel% --------------------------------------------------------------------------------