{"version":3,"sources":["lib/jquery.signalR.min.js","signalr/hubs.js","util/constants.js","util/util.js","util/reports.js","util/user.js","util/subscription.js","util/status.js","util/options.js","actions/global.js","util/browser.js","util/common.js","util/compare.js","util/comparisonCount.js","util/signalr.js","components/ErrorBoundary.js","util/messages.js","components/Status.js","components/comparison/ComparisonAnimation.js","components/comparison/OutputFrame.js","components/AdContainer.js","components/AdBlockMessage.js","components/Footer.js","components/ConsentFooter.js","components/TopButton.js","components/dialogs/WhyRegisterDialog.js","components/users/LoginDialog.js","components/dialogs/ConfirmDeleteReportDialog.js","components/dialogs/RenameReportDialog.js","components/users/SavedReportsDialog.js","components/users/RegisterConfirmDialog.js","util/validation.js","components/options/OptionsCheckbox.js","components/options/OptionsTextfield.js","components/options/CompareOptions.js","components/options/OptionsCheckboxTextfield.js","components/options/ResultsOptions.js","components/options/ColorPicker.js","components/options/ColorPickerCheckbox.js","components/options/ColorOptions.js","components/options/DraggableCheckbox.js","components/options/PluginOptions.js","components/dialogs/DeleteProfileDialog.js","components/dialogs/RecomparePromptDialog.js","components/dialogs/SaveProfileDialog.js","components/dialogs/WordWrapWarningDialog.js","components/dialogs/OptionsDialog.js","components/dialogs/AboutDialog.js","components/FeatureComparisonPane.js","components/dialogs/WhyPremiumDialog.js","components/CheckoutButton.js","components/dialogs/CheckoutDialog.js","components/dialogs/ChangePasswordDialog.js","components/dialogs/ChangePasswordForResetDialog.js","components/dialogs/ConfirmCancelSubscriptionDialog.js","components/dialogs/ManagePremiumSubscriptionDialog.js","components/dialogs/TermsOfServiceDialog.js","util/mail.js","components/dialogs/ContactDialog.js","components/dialogs/StoreResultsDialog.js","components/dialogs/ActivationDialog.js","components/dialogs/ChangeLogDialog.js","components/users/UserMenuButton.js","containers/TitleBar.js","containers/ComparisonTabs.js","components/comparison/TextInputPane.js","components/comparison/CompareButton.js","components/comparison/DocTypeSelector.js","containers/CompareClips.js","components/comparison/FileInput.js","containers/CompareFiles.js","components/comparison/UrlInput.js","containers/CompareUrls.js","containers/CompareFolders.js","containers/Samples.js","containers/App.js","themes/personal.js","containers/ConnectedThemeProvider.js","store/defaultGlobalState.js","reducers/index.js","reducers/global.js","reducers/version.js","store/configureStore.js","index.js","diffnow.png","comparing-loader.gif","grippy.png","lib/modernizr.js","edp-small.png"],"names":["n","t","i","a","match","b","k","u","this","r","tryBuffer","state","signalR","connectionState","connecting","push","drain","connected","length","shift","clear","f","nojQuery","noTransportOnInit","errorOnNegotiate","stoppedWhileLoading","stoppedWhileNegotiating","errorParsingNegotiateResponse","errorDuringStartRequest","stoppedDuringStartRequest","errorParsingStartResponse","invalidStartResponse","protocolIncompatible","sendFailed","parseFailed","longPollFailed","eventSourceFailedToConnect","eventSourceError","webSocketClosed","pingServerFailedInvalidResponse","pingServerFailed","pingServerFailedStatusCode","pingServerFailedParse","noConnectionTransport","webSocketsInvalidState","reconnectTimeout","reconnectWindowTimeout","Error","h","o","document","readyState","e","c","onStart","onStarting","onReceived","onError","onConnectionSlow","onReconnecting","onReconnect","onStateChanged","onDisconnect","s","triggerHandler","oldState","newState","l","_","keepAliveData","activated","transport","supportsKeepAlive","fn","init","defaultContentType","ieVersion","navigator","appName","exec","userAgent","parseFloat","error","source","context","transportError","name","format","arguments","replace","firefoxMajorVersion","parseInt","configurePingInterval","config","pingIntervalId","pingInterval","setInterval","transports","_logic","pingServer","fail","events","resources","ajaxDefaults","processData","timeout","async","global","cache","changeState","isDisconnecting","disconnected","reconnecting","hub","start","on","load","prototype","url","qs","lastError","connectingMessageBuffer","lastMessageAt","Date","getTime","lastActiveAt","beatInterval","beatHandle","totalTransportConnectTimeout","logging","_parseResponse","json","parse","_originalJson","JSON","isCrossDomain","trim","location","indexOf","createElement","href","protocol","host","ajaxDataType","contentType","clientProtocol","reconnectDelay","transportConnectTimeout","disconnectTimeout","reconnectWindow","keepAliveWarnAt","d","g","v","waitForPageLoad","jsonp","y","_deferral","Deferred","type","extend","callback","isArray","log","splice","toString","w","promise","resolve","configuredStopReconnectingTimeout","stop","setTimeout","stateChanged","clearTimeout","p","baseUrl","wsProtocol","withCredentials","support","cors","bind","call","initHandler","reject","monitorKeepAlive","startHeartbeat","message","negotiateRequest","prepareQueryString","ajax","success","appRelativeUrl","Url","id","ConnectionId","token","ConnectionToken","webSocketServerUrl","WebSocketServerUrl","pollTimeout","ConnectionTimeout","DisconnectTimeout","TransportConnectTimeout","KeepAliveTimeout","timeoutWarning","ProtocolVersion","each","TryWebSockets","inArray","deferredStartHandler","starting","send","received","connectionSlow","reconnected","unbind","clearInterval","abort","stopMonitoringKeepAlive","messageId","groupsToken","console","toTimeString","debug","noConflict","connection","window","jQuery","lostConnection","userNotified","startRequested","startCompleted","connectionStopped","initReceived","transportFailed","transportTimeoutHandle","tryAbortStartRequest","ajaxStart","data","xhrFields","dataType","addQs","Response","status","encodeURIComponent","param","charAt","getUrl","Math","floor","random","maximizePersistentResponse","MessageId","C","Messages","M","Initialized","S","ShouldReconnect","T","LongPollDelay","L","GroupsToken","G","updateGroups","stringifySend","stringify","ajaxSend","triggerReceived","ajaxAbort","startRequest","tryInitialize","processMessages","markLastMessage","monitoring","reconnectKeepAliveUpdate","markActive","verifyLastActive","isConnectedOrReconnecting","ensureReconnectingState","clearReconnectTimeout","reconnect","handleParseFailure","foreverFrame","count","connections","webSockets","socket","WebSocket","onopen","onclose","wasClean","reason","onmessage","isEmptyObject","close","reconnectAttemptTimeoutHandle","serverSentEvents","timeOut","eventSource","EventSource","Message","OPEN","addEventListener","eventPhase","CLOSED","setAttribute","prevent","body","appendChild","removeChild","cancel","iframeClearThreshold","documentElement","attachEvent","src","frame","frameId","onSuccess","receive","frameMessageCount","contentWindow","contentDocument","firstChild","execCommand","parentNode","getConnection","started","longPolling","noop","reconnectTimeoutId","pollXhr","pollTimeoutId","tt","onprogress","responseText","min","pow","hasOwnProperty","isFunction","invocationCallbacks","invocationCallbackId","method","scope","E","useDefaultPath","hubName","callbackMap","constructor","hasSubscriptions","toLowerCase","apply","off","invoke","makeArray","slice","H","A","I","_maximizeHubResponse","State","Progress","notifyWith","Data","progressjQueryVersionLogged","jquery","StackTrace","IsHubException","ErrorData","rejectWith","resolveWith","Result","R","P","Id","D","proxies","_maximizeClientHubInvocation","Method","Hub","Args","_registerSubscribedHubs","_subscribedToHubs","createHubProxy","hubConnection","version","$","makeProxyCallback","registerHubProxies","instance","shouldSubscribe","key","memberKey","memberValue","subscriptionMethod","client","createHubProxies","server","sendStatus","sessionId","merge","DIFFNOW_URL","process","REACT_APP_ENV","DIFFNOW_API_URL","optionsLabels","ica","ils","ico","iwa","iwl","iwt","iwc","ibl","ibe","ilm","ilr","ipm","icr","fbc","hrz","vws","sli","lcl","www","optionsTooltips","html","xmlf","xmlc","jsnf","jsnc","sort","inis","pe32","plugins","label","docTypes","bas","bat","cs","css","for","java","js","lisp","pas","perl","php","py","rb","sql","tcl","tex","xml","UTIL_URL","getConfiguration","axios","get","response","getChangeLog","then","changeLog","err","REPORTS_URL","getSavedReports","sessionToken","reports","unrollReport","shortUrl","deleteUserReport","post","result","renameUserReport","newTitle","storeResults","duration","title","reportId","shortUrlIndex","getReportMetadata","report","getReport","durationKey","generateReportUrl","queryParameters","queryString","USERS_URL","checkIfLoggedIn","login","email","password","emailAddress","user","register","mailingList","logout","changePassword","passwordOld","passwordNew","resetPassword","changePasswordForReset","confirmationKey","addNewSubscription","subscriptionToken","plan","getPremiumStatus","cancelSubscription","reactivateSubscription","updatePaymentMethod","tokenId","truncatedPrefix","truncatedSuffixPremium","truncatedSuffixNonPremium","tips","tipsWindows","tipsMacLinux","getRandomTip","platformTips","includes","platform","concat","OPTIONS_URL","getUniqueOptions","defaultOptions","userOptions","keys","Object","filter","pick","getOptionsProfiles","optionsProfiles","getCurrentUserOptions","optionsJson","getDefaultOptions","getUserOptionsByName","optionsName","setUserOptions","deleteUserOptionsByName","setCurrentProfile","ReactGA","currentLocation","setStatus","payload","setReport","setCollapsedTabIndex","collapsedTabIndex","inBrowser","undefined","env","JEST_WORKER_ID","logAnalytics","pathname","set","page","pageview","areAdsInvisible","adsLoaded","getOS","os","test","canUseExamDiff","examDiffProUrl","referrer","toDateString","date","dateObject","toLocaleDateString","toLocaleTimeString","require","initialize","isPremium","comparisonLimit","configuration","comparisonCountLimitNotLoggedInMax","monthlyComparisonCountLimitMax","maximumComparisons","useMonthlyComparisonLimits","Infinity","canUserCompare","comparisonCount","UPLOAD_URL","COMPARE_URL","uploadFile","file","index","formData","FormData","append","size","postOptions","headers","output","uploadedFileName","handleComparisonError","compareClips","comparisonPayload","compareFiles","compareUrls","executePostComparisonActions","compareProps","pageIndex","onSetCollapsedTabIndex","onSetLastComparedTabIndex","history","SUCCESS_MESSAGE_DELAY_MS","setUpComparisonCounter","onSetComparisonCount","comparisonStartDate","localStorage","getItem","isComparisonCountExpired","resetComparisonCounter","setComparisonCount","bumpComparisonCounter","newComparisonCount","newComparisonStartDate","setItem","expirationLimit","comparisonsUsedStatus","comparisonCountLimitNotLoggedInWarning","monthlyComparisonCountLimitWarning","warningLimit","maxLimit","limitTypeDescriptor","comparisonLimitReachedStatus","secondaryAdditionalMessage","additionalMessage","reconnectSignalR","ErrorBoundary","errorInfo","setState","style","marginLeft","fontSize","marginBottom","textDecoration","cursor","onClick","props","openContactDialog","children","React","replaceOpenWhyPremium","rawStatus","openWhyPremiumDialog","isString","sourceMatch","reactStringReplace","replaceOpenOptions","openOptionsDialog","replaceTags","statusWithoutOpenOptions","statusWithoutATag","hrefMatch","target","rel","replaceATag","Array","map","Status","color","theme","palette","backgroundColor","messageFormatted","icon","rightIcon","removeTip","display","alignItems","padding","marginTop","justifyContent","Component","withTheme","ComparisonAnimation","flexDirection","comparingLoader","alt","width","margin","marginRight","OutputFrame","isReportReady","nightModeEnabled","logEvent","open","fontFamily","edpLogoSmall","height","border","AdContainer","adsbygoogle","position","hideAdContainer","borderRadius","overflow","top","left","fontWeight","className","data-ad-client","data-ad-slot","adSlotId","AdBlockMessage","minHeight","Footer","openTermsOfServiceDialog","openChangeLogDialog","ConsentFooter","isDismissed","openTosDialog","dismiss","bottom","boxSizing","TopButton","operation","noMarginRight","tooltip","disabled","mustBeLoggedIn","rightElement","hideIcon","classes","data-tip","data-for","variant","buttonBorder","withStyles","WhyRegisterDialog","closeDialog","onClose","paper","dialogPaper","maxWidth","LoginDialog","isWhyRegisterDialogOpen","mailerChecked","handleClose","onUserLogin","onUserRegister","openRegisterConfirmDialog","errorMessage","handleKeyPress","charCode","submitDisabled","handleSubmit","handleClickSwitchMode","handleClickWhyRegister","closeWhyRegisterDialog","handleClickForgotPassword","handleChangeEmail","value","handleChangePassword","handleChangeMailerChecked","checked","fields","reduce","base","field","onKeyPress","onChange","isPasswordTooShort","helperText","control","right","renderLoginForm","renderFormSwitcher","notEmpty","root","zIndex","reportTitle","deleteReport","RenameReportDialog","handleChange","event","renameReport","newReportTitle","content","defaultValue","textField","SavedReportsDialog","savedReports","selectedShortUrl","selectedReportTitle","confirmDeleteReportDialogOpen","renameReportDialogOpen","openReport","prevState","savedReport","YourlsKeyword","assign","Title","openConfirmDeleteReportDialog","openRenameReportDialog","renderSavedReports","styles","iconColumn","GenerationTimeString","ExpirationTime","ExpirationTimeString","actionIcon","prevProps","onSetStatus","maxHeight","overflowY","textAlign","iconColor","RegisterConfirmDialog","validateRange","rangeString","validateValue","input","returnValue","validateBrackets","validateNumericValue","isNaN","Number","split","forEach","range","rangeSplit","validationError","firstNum","secondNum","validateRegex","regexString","RegExp","validateNumber","numberString","OptionsCheckbox","option","columns","setOption","Label","multiline","formControlLabelRoot","checkBoxRoot","primary","optionsText","isNil","optionsBody","optionsGroupHeader","checkboxGroup","checkboxTextField","mustBePremiumContainer","mustBePremiumIcon","mustBePremiumText","mustBePremiumLink","options","optionsGroup","data-html","OptionsCheckboxTextfield","checkboxOption","smallCheckbox","mediumCheckbox","largeCheckbox","radioButton","ColorPicker","handleClick","displayColorPicker","next","optionKey","nextColor","rgb","swatch","popover","cover","triangle","background","boxShadow","colorValues","ColorPickerCheckbox","ColorOptions","renderTableRowHeader","colSpan","rowHeader","renderTableRow","borderlessCell","bc","tc","cornerCell","paddingBottom","paddingTop","DraggableCheckbox","item","dragHandle","commonProps","innerStyles","grippyImage","pluginBlocker","premiumStar","sortedPlugins","sortBy","plugin","list","itemKey","template","onMoveEnd","newPlugins","newPlugin","container","DeleteProfileDialog","onProfileDelete","closeDeleteProfileDialog","profileToDelete","onRecompare","SaveProfileDialog","profileName","onProfileSaveAs","closeSaveProfileDialog","actions","isEmpty","WordWrapWarningDialog","onForceWordWrap","onKeepIgnoreOptions","OptionsDialog","saveAndCloseDialog","newOptions","shouldPromptToRecompare","onSaveNewOptions","selectedProfile","toggleRecomparePrompt","onResetNewOptions","openSaveProfileDialog","saveProfileDialogOpen","isOpen","recompareDialogOpen","saveProfileAs","profile","selectProfile","onProfileSelect","setNewOption","renderId","resetOptions","resetAllOptions","onDeleteClick","deleteProfileDialogOpen","forceWordWrap","keepIgnoreOptions","selectedTab","tabClasses","wrapper","tabWrapper","tabRoot","selected","tabSelected","titleBar","newTab","indicatorColor","tabsRoot","shouldShowWordWrapWarning","currentProfile","find","options_name","uww","tab","profileOptions","profileOptionsHeader","htmlFor","inputProps","profilesList","optionsDialog","titleBarColor","borderBottom","tabsIndicator","textTransform","opacity","AboutDialog","fontStandard","fontPremium","featureRow","featureContents","featureSeparator","pricing","premiumPricingContainer","premiumPricingOption","flex","premiumPricingSeparator","premiumPricingHighlighted","premiumPricingUnhighlighted","premium","features","classNames","feature","dangerouslySetInnerHTML","__html","WhyPremiumDialog","openCheckoutDialog","examDiffUrl","standardFeatures","maxSizeKB","premiumFeatures","maxSizePremiumKB","getFeatures","dialogContent","edpFooterContainer","edpFooter","buttonWithMargin","CheckoutButton","isPaymentMethodUpdate","subscriptionType","onCheckout","panelLabel","description","amount","currency","stripeKey","billingAddress","triggerEvent","CheckoutDialog","selectedPriceModel","termsOfServiceChecked","selectPriceModel","handleChangeTOSChecked","onSubscribe","openTermsOfService","price","component","focused","formLabel","radioControl","disclaimerText","termsOfServiceForm","checkBoxContainer","checkBox","termsOfServiceText","termsOfServiceLink","premiumSource","disclaimerTextColor","ChangePasswordDialog","oldPassword","newPassword","newPasswordConfirm","resetState","validateNewPassword","fullWidth","ChangePasswordForResetDialog","handleResetPassword","cancelButton","text","ManagePremiumSubscriptionDialog","isCancelled","currentPeriodStart","currentPeriodEnd","cardLastFour","cardBrand","showPaymentMethodUpdateToast","loadingError","isPremiumStatusLoading","isConfirmDialogOpen","handleCancelSubscription","cancelSubscriptionStatus","handleReactivateSubscription","reactivateSubscriptionStatus","handlePaymentMethodUpdate","updatePaymentMethodStatus","handleOpenConfirmDialog","handleCloseConfirmDialog","handleClosePaymentMethodUpdateToast","subscriptionStatus","subscription","PlanName","IsCancelled","CurrentPeriodStart","CurrentPeriodEnd","CardLastFour","CardBrand","parseDate","sectionHeader","paragraph","sectionDivider","active","inactive","outlined","help","progressContainer","anchorOrigin","vertical","horizontal","autoHideDuration","action","aria-label","borderColor","TermsOfServiceDialog","MAIL_URL","sendMail","fromName","replyTo","subject","findOut","ContactDialog","sendContactMail","noValidate","autoComplete","rows","StoreResultsDialog","loading","shareLink","currentTitle","defaultTitle","firstTitle","secondTitle","durationString","fullShareLink","origin","ActivationDialog","ChangeLogDialog","versionChanges","versionChangesIndex","changes","changesIndex","premiumOnly","textColor","labelStyle","iconLeft","topButton","TitleBar","userOpen","userAnchorEl","profilesOpen","profilesAnchorEl","openProfilesMenu","preventDefault","currentTarget","closeProfilesMenu","openUserMenu","closeUserMenu","handleClickChangePassword","openChangePasswordDialog","handleClickManagePremiumSubscription","openManagePremiumSubscriptionDialog","handleToggleNightMode","toggleNightMode","handleClickLogout","onUserLogout","redirectToClassicDiffNow","userMenu","matches","buttonList","buttonContainer","large","openSavedReportsDialog","aria-owns","aria-haspopup","anchorEl","TransitionComponent","Fade","small","openLoginDialog","selectedProfileColor","unselectedProfileColor","data-place","NavLink","to","diffnowLogo","logo","getPremiumButton","hoverColor","queries","medium","outer","buttonText","tabCount","tabIndices","samples","ComparisonTabs","tabIdxFromUrl","onChangeTab","newTabIndex","currentTabPath","setCurrentTab","handleTabPress","tabIndex","lastComparedTabIndex","getTabRootClass","tabRootMinimized","tabBorder","join","getTabLabelContainerClass","textInputLabelContainer","fileUploadLabelContainer","urlsLabelContainer","foldersLabelContainer","samplesLabelContainer","getTabClass","hideText","textColorInherit","tabTextColorInherit","labelContainer","hiddenTextLabelContainer","tabLabel","indicator","Link","getDerivedStateFromProps","tabName","unselected","borderLeft","paddingRight","paddingLeft","TextInputPane","onChangeTitle","clip","onChangeClip","clipBackground","placeholder","InputProps","rowsMax","textArea","clearButton","CompareButton","edpLogoLarge","DocTypeSelector","docType","onSelect","shrink","displayEmpty","CompareClips","onCompare","getComparisonPayload","clientId","firstClip","secondClip","title1","title2","clip1","clip2","clipType","darkMode","selectDocType","isValidCompareState","in","visibility","newClip","withRouter","connect","firstClipTitle","secondClipTitle","FileInput","dropzoneActive","onUpload","fileName","statusComponent","disableClick","onDragEnter","onDragLeave","onDrop","files","CompareFiles","setFileStatus","filename","setFirstFileStatus","setSecondFileStatus","firstFileStatus","firstFileName","secondFileStatus","secondFileName","fileSizeKB","round","onUploadSuccess","onUploadError","handleFileTooLarge","tooLargeError","onSetFirstFile","onSetSecondFile","firstFileUploadedName","secondFileUploadedName","onUploadFirstFile","onUploadSecondFile","uploadedFileName1","originalFileName1","uploadedFileName2","originalFileName2","isUploadDisabled","isCompareDisabled","contents","topLabel","bottomLabel","compareButtonContainer","dispatch","newCollapsedTabIndex","UrlInput","hintText","CompareUrls","componentDidMount","executeComparisonFromUrlParams","componentDidUpdate","isUndefined","params","search","url1","url2","demo","firstUrl","secondUrl","typeAndCompareDemoUrls","enterAndCompareUrls","isValidUrl","firstUrlError","secondUrlError","isValidState","CompareFolders","DEMO_URL","heading","Samples","renderSampleButton","divider","flexWrap","DIFFNOW_SIGNALR_URL","App","activationConfirmationMessage","changePasswordConfirmationKey","changePasswordEmailAddress","currentTab","isConsentFooterDismissed","currentVersion","lastComparisonPayload","isLoginDialogOpen","isRegisterConfirmDialogOpen","registerConfirmDialogEmail","isSavedReportsDialogOpen","isOptionsDialogOpen","isAboutDialogOpen","isWhyPremiumDialogOpen","isCheckoutDialogOpen","isChangePasswordDialogOpen","isManagePremiumSubscriptionDialogOpen","isTermsOfServiceDialogOpen","isContactDialogOpen","isStoreResultsDialogOpen","isActivationDialogOpen","isChangePasswordForResetDialogOpen","isChangeLogDialogOpen","onAppStart","uuidv4","setUpConsentFooter","setUpTheme","checkForActivation","checkForChangePassword","checkForChangeLog","setUpSignalR","loginResponse","identify","amplitude","Identify","setOnce","getInstance","checkPath","setUpConfigurationVariables","onSetClientId","configurationData","onSetConfiguration","diffnowHub","sendMessage","isTruncated","onSetTruncatedStatus","onSetReportReady","decodeURIComponent","truncatedSuffix","hideStatusAfterDelay","delay","onSetTheme","redirectToLastViewedPage","startsWith","toggleDialog","lastViewedTab","redirectToCompareClips","reportShortUrl","handleReportSuccess","reportMetadata","creationTime","expirationTimeString","onSetReport","storedCurrentVersion","sortedVersions","changesA","changesB","compareVersions","newestVersion","markChangeLogViewed","IsLoggedIn","onLoggedIn","EmailAddress","IsPremium","setUserId","setUserProperties","user_email","user_is_premium","loadUserOptions","onLoggedOut","clearUserProperties","onSetDefaultOptions","onSetOptions","onSetOptionsProfiles","current_profile","onSubscribeUser","startComparison","newComparisonPayload","onSetClipTitles","onSetClips","onSetDocType","onSetFileTitles","onSetUrls","onSetUrlTitles","getTitleFromUrl","substring","lastIndexOf","useQueue","adBlockDetected","compareFn","examDiffUri","onCompareSuccess","onCompareError","onSetReportId","onSetExamDiffUri","getSelectedOptionsProfiles","prevProfile","getDeletedOptionsProfiles","deletedProfile","optionsProfile","newProfiles","newTheme","getDescriptionContent","dialogState","otherState","renderReportOperations","hideLabels","reportData","download","Helmet","onSetPremiumSource","dialogs","smallNoReport","smallWithReport","optionsLoaded","showAdBlockHiddenMessage","topBar","Switch","Route","path","render","isComparing","setOptions","onSetNewOption","firstFileTitle","secondFileTitle","firstUrlTitle","secondUrlTitle","newLastComparedTabIndex","newOption","truncatedStatus","lightTheme","createMuiTheme","appBar","typography","light","main","dark","contrastText","secondary","default","tip","info","overrides","MuiButton","contained","MuiTableCell","head","darkTheme","MuiPaper","MuiTypography","body1","MuiInputLabel","MuiInput","borderBottomColor","underline","MuiMenuItem","textPrimary","containedPrimary","containedSecondary","outlinedPrimary","MuiCheckbox","colorPrimary","MuiFormControlLabel","MuiRadio","ConnectedThemeProvider","muiTheme","defaultState","rootReducer","combineReducers","createBrowserHistory","store","initialState","createLogger","predicate","getState","middleware","thunk","routerMiddleware","composedEnhancers","compose","applyMiddleware","createStore","configureStore","Modernizr","es5","flexbox","localstorage","isBrowserUnsupported","amplitudeInstance","apiKey","getElementById","module","exports","is","testRunner","tests","aliases","Boolean","setClasses","docElement","_config","classPrefix","isSVG","baseVal","enableJSClass","enableClasses","contains","createElementNS","cssToDOM","toUpperCase","fnBind","testDOMProps","domToCSS","computedStyle","getComputedStyle","getPropertyValue","currentStyle","getBody","fake","injectElementWithStyles","styleSheet","cssText","createTextNode","offsetHeight","nativeTestProps","CSS","supports","testProps","mStyle","modElem","testPropsAll","cssomPrefixes","domPrefixes","testAllProps","ModernizrProto","_version","usePrefixes","_q","addTest","addAsyncTest","Map","Set","WeakMap","WeakSet","nodeName","every","some","reduceRight","now","toISOString","toJSON","Function","create","getPrototypeOf","getOwnPropertyNames","isSealed","isFrozen","isExtensible","getOwnPropertyDescriptor","defineProperty","defineProperties","seal","freeze","preventExtensions","String","obj","stringAccess","getter","setter","reservedWords","zeroWidthChars","eval","ignore","es5array","es5date","es5function","es5object","strictmode","es5string","es5syntax","es5undefined","removeItem","omPrefixes","_cssomPrefixes","_domPrefixes","elem","unshift"],"mappings":"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","file":"static/js/main.1b943c23.chunk.js","sourcesContent":["/* eslint-disable */\n\n/*!\n * ASP.NET SignalR JavaScript Library v2.2.2\n * http://signalr.net/\n *\n * Copyright (c) .NET Foundation. All rights reserved.\n * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.\n *\n */\n(function(n,t,i){function w(t,i){var u,f;if(n.isArray(t)){for(u=t.length-1;u>=0;u--)f=t[u],n.type(f)===\"string\"&&r.transports[f]||(i.log(\"Invalid transport: \"+f+\", removing it from the transports list.\"),t.splice(u,1));t.length===0&&(i.log(\"No transports remain within the specified transport array.\"),t=null)}else if(r.transports[t]||t===\"auto\"){if(t===\"auto\"&&r._.ieVersion<=8)return[\"longPolling\"]}else i.log(\"Invalid transport: \"+t.toString()+\".\"),t=null;return t}function b(n){return n===\"http:\"?80:n===\"https:\"?443:void 0}function a(n,t){return t.match(/:\\d+$/)?t:t+\":\"+b(n)}function k(t,i){var u=this,r=[];u.tryBuffer=function(i){return t.state===n.signalR.connectionState.connecting?(r.push(i),!0):!1};u.drain=function(){if(t.state===n.signalR.connectionState.connected)while(r.length>0)i(r.shift())};u.clear=function(){r=[]}}var f={nojQuery:\"jQuery was not found. Please ensure jQuery is referenced before the SignalR client JavaScript file.\",noTransportOnInit:\"No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.\",errorOnNegotiate:\"Error during negotiation request.\",stoppedWhileLoading:\"The connection was stopped during page load.\",stoppedWhileNegotiating:\"The connection was stopped during the negotiate request.\",errorParsingNegotiateResponse:\"Error parsing negotiate response.\",errorDuringStartRequest:\"Error during start request. Stopping the connection.\",stoppedDuringStartRequest:\"The connection was stopped during the start request.\",errorParsingStartResponse:\"Error parsing start response: '{0}'. Stopping the connection.\",invalidStartResponse:\"Invalid start response: '{0}'. Stopping the connection.\",protocolIncompatible:\"You are using a version of the client that isn't compatible with the server. Client version {0}, server version {1}.\",sendFailed:\"Send failed.\",parseFailed:\"Failed at parsing response: {0}\",longPollFailed:\"Long polling request failed.\",eventSourceFailedToConnect:\"EventSource failed to connect.\",eventSourceError:\"Error raised by EventSource\",webSocketClosed:\"WebSocket closed.\",pingServerFailedInvalidResponse:\"Invalid ping response when pinging server: '{0}'.\",pingServerFailed:\"Failed to ping server.\",pingServerFailedStatusCode:\"Failed to ping server. Server responded with status code {0}, stopping the connection.\",pingServerFailedParse:\"Failed to parse ping server response, stopping the connection.\",noConnectionTransport:\"Connection is in an invalid state, there is no transport active.\",webSocketsInvalidState:\"The Web Socket transport is in an invalid state, transitioning into reconnecting.\",reconnectTimeout:\"Couldn't reconnect within the configured timeout of {0} ms, disconnecting.\",reconnectWindowTimeout:\"The client has been inactive since {0} and it has exceeded the inactivity timeout of {1} ms. Stopping the connection.\"};if(typeof n!=\"function\")throw new Error(f.nojQuery);var r,h,o=t.document.readyState===\"complete\",e=n(t),c=\"__Negotiate Aborted__\",u={onStart:\"onStart\",onStarting:\"onStarting\",onReceived:\"onReceived\",onError:\"onError\",onConnectionSlow:\"onConnectionSlow\",onReconnecting:\"onReconnecting\",onReconnect:\"onReconnect\",onStateChanged:\"onStateChanged\",onDisconnect:\"onDisconnect\"},v=function(n,i){if(i!==!1){var r;typeof t.console!=\"undefined\"&&(r=\"[\"+(new Date).toTimeString()+\"] SignalR: \"+n,t.console.debug?t.console.debug(r):t.console.log&&t.console.log(r))}},s=function(t,i,r){return i===t.state?(t.state=r,n(t).triggerHandler(u.onStateChanged,[{oldState:i,newState:r}]),!0):!1},y=function(n){return n.state===r.connectionState.disconnected},l=function(n){return n._.keepAliveData.activated&&n.transport.supportsKeepAlive(n)},p=function(i){var f,e;i._.configuredStopReconnectingTimeout||(e=function(t){var i=r._.format(r.resources.reconnectTimeout,t.disconnectTimeout);t.log(i);n(t).triggerHandler(u.onError,[r._.error(i,\"TimeoutException\")]);t.stop(!1,!1)},i.reconnecting(function(){var n=this;n.state===r.connectionState.reconnecting&&(f=t.setTimeout(function(){e(n)},n.disconnectTimeout))}),i.stateChanged(function(n){n.oldState===r.connectionState.reconnecting&&t.clearTimeout(f)}),i._.configuredStopReconnectingTimeout=!0)};if(r=function(n,t,i){return new r.fn.init(n,t,i)},r._={defaultContentType:\"application/x-www-form-urlencoded; charset=UTF-8\",ieVersion:function(){var i,n;return t.navigator.appName===\"Microsoft Internet Explorer\"&&(n=/MSIE ([0-9]+\\.[0-9]+)/.exec(t.navigator.userAgent),n&&(i=t.parseFloat(n[1]))),i}(),error:function(n,t,i){var r=new Error(n);return r.source=t,typeof i!=\"undefined\"&&(r.context=i),r},transportError:function(n,t,r,u){var f=this.error(n,r,u);return f.transport=t?t.name:i,f},format:function(){for(var t=arguments[0],n=0;n<\\/script>.\");}},typeof e.on==\"function\")e.on(\"load\",function(){o=!0});else e.load(function(){o=!0});r.fn=r.prototype={init:function(t,i,r){var f=n(this);this.url=t;this.qs=i;this.lastError=null;this._={keepAliveData:{},connectingMessageBuffer:new k(this,function(n){f.triggerHandler(u.onReceived,[n])}),lastMessageAt:(new Date).getTime(),lastActiveAt:(new Date).getTime(),beatInterval:5e3,beatHandle:null,totalTransportConnectTimeout:0};typeof r==\"boolean\"&&(this.logging=r)},_parseResponse:function(n){var t=this;return n?typeof n==\"string\"?t.json.parse(n):n:n},_originalJson:t.JSON,json:t.JSON,isCrossDomain:function(i,r){var u;return(i=n.trim(i),r=r||t.location,i.indexOf(\"http\")!==0)?!1:(u=t.document.createElement(\"a\"),u.href=i,u.protocol+a(u.protocol,u.host)!==r.protocol+a(r.protocol,r.host))},ajaxDataType:\"text\",contentType:\"application/json; charset=UTF-8\",logging:!1,state:r.connectionState.disconnected,clientProtocol:\"1.5\",reconnectDelay:2e3,transportConnectTimeout:0,disconnectTimeout:3e4,reconnectWindow:3e4,keepAliveWarnAt:2/3,start:function(i,h){var a=this,v={pingInterval:3e5,waitForPageLoad:!0,transport:\"auto\",jsonp:!1},d,y=a._deferral||n.Deferred(),b=t.document.createElement(\"a\"),k,g;if(a.lastError=null,a._deferral=y,!a.json)throw new Error(\"SignalR: No JSON parser found. Please ensure json2.js is referenced before the SignalR.js file if you need to support clients without native JSON parsing support, e.g. IE<8.\");if(n.type(i)===\"function\"?h=i:n.type(i)===\"object\"&&(n.extend(v,i),n.type(v.callback)===\"function\"&&(h=v.callback)),v.transport=w(v.transport,a),!v.transport)throw new Error(\"SignalR: Invalid transport(s) specified, aborting start.\");return(a._.config=v,!o&&v.waitForPageLoad===!0)?(a._.deferredStartHandler=function(){a.start(i,h)},e.bind(\"load\",a._.deferredStartHandler),y.promise()):a.state===r.connectionState.connecting?y.promise():s(a,r.connectionState.disconnected,r.connectionState.connecting)===!1?(y.resolve(a),y.promise()):(p(a),b.href=a.url,b.protocol&&b.protocol!==\":\"?(a.protocol=b.protocol,a.host=b.host):(a.protocol=t.document.location.protocol,a.host=b.host||t.document.location.host),a.baseUrl=a.protocol+\"//\"+a.host,a.wsProtocol=a.protocol===\"https:\"?\"wss://\":\"ws://\",v.transport===\"auto\"&&v.jsonp===!0&&(v.transport=\"longPolling\"),a.url.indexOf(\"//\")===0&&(a.url=t.location.protocol+a.url,a.log(\"Protocol relative URL detected, normalizing it to '\"+a.url+\"'.\")),this.isCrossDomain(a.url)&&(a.log(\"Auto detected cross domain url.\"),v.transport===\"auto\"&&(v.transport=[\"webSockets\",\"serverSentEvents\",\"longPolling\"]),typeof v.withCredentials==\"undefined\"&&(v.withCredentials=!0),v.jsonp||(v.jsonp=!n.support.cors,v.jsonp&&a.log(\"Using jsonp because this browser doesn't support CORS.\")),a.contentType=r._.defaultContentType),a.withCredentials=v.withCredentials,a.ajaxDataType=v.jsonp?\"jsonp\":\"text\",n(a).bind(u.onStart,function(){n.type(h)===\"function\"&&h.call(a);y.resolve(a)}),a._.initHandler=r.transports._logic.initHandler(a),d=function(i,o){var c=r._.error(f.noTransportOnInit);if(o=o||0,o>=i.length){o===0?a.log(\"No transports supported by the server were selected.\"):o===1?a.log(\"No fallback transports were selected.\"):a.log(\"Fallback transports exhausted.\");n(a).triggerHandler(u.onError,[c]);y.reject(c);a.stop();return}if(a.state!==r.connectionState.disconnected){var p=i[o],h=r.transports[p],v=function(){d(i,o+1)};a.transport=h;try{a._.initHandler.start(h,function(){var i=r._.firefoxMajorVersion(t.navigator.userAgent)>=11,f=!!a.withCredentials&&i;a.log(\"The start request succeeded. Transitioning to the connected state.\");l(a)&&r.transports._logic.monitorKeepAlive(a);r.transports._logic.startHeartbeat(a);r._.configurePingInterval(a);s(a,r.connectionState.connecting,r.connectionState.connected)||a.log(\"WARNING! The connection was not in the connecting state.\");a._.connectingMessageBuffer.drain();n(a).triggerHandler(u.onStart);e.bind(\"unload\",function(){a.log(\"Window unloading, stopping the connection.\");a.stop(f)});i&&e.bind(\"beforeunload\",function(){t.setTimeout(function(){a.stop(f)},0)})},v)}catch(w){a.log(h.name+\" transport threw '\"+w.message+\"' when attempting to start.\");v()}}},k=a.url+\"/negotiate\",g=function(t,i){var e=r._.error(f.errorOnNegotiate,t,i._.negotiateRequest);n(i).triggerHandler(u.onError,e);y.reject(e);i.stop()},n(a).triggerHandler(u.onStarting),k=r.transports._logic.prepareQueryString(a,k),a.log(\"Negotiating with '\"+k+\"'.\"),a._.negotiateRequest=r.transports._logic.ajax(a,{url:k,error:function(n,t){t!==c?g(n,a):y.reject(r._.error(f.stoppedWhileNegotiating,null,a._.negotiateRequest))},success:function(t){var i,e,h,o=[],s=[];try{i=a._parseResponse(t)}catch(c){g(r._.error(f.errorParsingNegotiateResponse,c),a);return}if(e=a._.keepAliveData,a.appRelativeUrl=i.Url,a.id=i.ConnectionId,a.token=i.ConnectionToken,a.webSocketServerUrl=i.WebSocketServerUrl,a._.pollTimeout=i.ConnectionTimeout*1e3+1e4,a.disconnectTimeout=i.DisconnectTimeout*1e3,a._.totalTransportConnectTimeout=a.transportConnectTimeout+i.TransportConnectTimeout*1e3,i.KeepAliveTimeout?(e.activated=!0,e.timeout=i.KeepAliveTimeout*1e3,e.timeoutWarning=e.timeout*a.keepAliveWarnAt,a._.beatInterval=(e.timeout-e.timeoutWarning)/3):e.activated=!1,a.reconnectWindow=a.disconnectTimeout+(e.timeout||0),!i.ProtocolVersion||i.ProtocolVersion!==a.clientProtocol){h=r._.error(r._.format(f.protocolIncompatible,a.clientProtocol,i.ProtocolVersion));n(a).triggerHandler(u.onError,[h]);y.reject(h);return}n.each(r.transports,function(n){if(n.indexOf(\"_\")===0||n===\"webSockets\"&&!i.TryWebSockets)return!0;s.push(n)});n.isArray(v.transport)?n.each(v.transport,function(t,i){n.inArray(i,s)>=0&&o.push(i)}):v.transport===\"auto\"?o=s:n.inArray(v.transport,s)>=0&&o.push(v.transport);d(o)}}),y.promise())},starting:function(t){var i=this;return n(i).bind(u.onStarting,function(){t.call(i)}),i},send:function(n){var t=this;if(t.state===r.connectionState.disconnected)throw new Error(\"SignalR: Connection must be started before data can be sent. Call .start() before .send()\");if(t.state===r.connectionState.connecting)throw new Error(\"SignalR: Connection has not been fully initialized. Use .start().done() or .start().fail() to run logic after the connection has started.\");return t.transport.send(t,n),t},received:function(t){var i=this;return n(i).bind(u.onReceived,function(n,r){t.call(i,r)}),i},stateChanged:function(t){var i=this;return n(i).bind(u.onStateChanged,function(n,r){t.call(i,r)}),i},error:function(t){var i=this;return n(i).bind(u.onError,function(n,r,u){i.lastError=r;t.call(i,r,u)}),i},disconnected:function(t){var i=this;return n(i).bind(u.onDisconnect,function(){t.call(i)}),i},connectionSlow:function(t){var i=this;return n(i).bind(u.onConnectionSlow,function(){t.call(i)}),i},reconnecting:function(t){var i=this;return n(i).bind(u.onReconnecting,function(){t.call(i)}),i},reconnected:function(t){var i=this;return n(i).bind(u.onReconnect,function(){t.call(i)}),i},stop:function(i,h){var a=this,v=a._deferral;if(a._.deferredStartHandler&&e.unbind(\"load\",a._.deferredStartHandler),delete a._.config,delete a._.deferredStartHandler,!o&&(!a._.config||a._.config.waitForPageLoad===!0)){a.log(\"Stopping connection prior to negotiate.\");v&&v.reject(r._.error(f.stoppedWhileLoading));return}if(a.state!==r.connectionState.disconnected)return a.log(\"Stopping connection.\"),t.clearTimeout(a._.beatHandle),t.clearInterval(a._.pingIntervalId),a.transport&&(a.transport.stop(a),h!==!1&&a.transport.abort(a,i),l(a)&&r.transports._logic.stopMonitoringKeepAlive(a),a.transport=null),a._.negotiateRequest&&(a._.negotiateRequest.abort(c),delete a._.negotiateRequest),a._.initHandler&&a._.initHandler.stop(),delete a._deferral,delete a.messageId,delete a.groupsToken,delete a.id,delete a._.pingIntervalId,delete a._.lastMessageAt,delete a._.lastActiveAt,a._.connectingMessageBuffer.clear(),n(a).unbind(u.onStart),s(a,a.state,r.connectionState.disconnected),n(a).triggerHandler(u.onDisconnect),a},log:function(n){v(n,this.logging)}};r.fn.init.prototype=r.fn;r.noConflict=function(){return n.connection===r&&(n.connection=h),r};n.connection&&(h=n.connection);n.connection=n.signalR=r})(window.jQuery,window),function(n,t,i){function s(n){n._.keepAliveData.monitoring&&l(n);u.markActive(n)&&(n._.beatHandle=t.setTimeout(function(){s(n)},n._.beatInterval))}function l(t){var i=t._.keepAliveData,u;t.state===r.connectionState.connected&&(u=(new Date).getTime()-t._.lastMessageAt,u>=i.timeout?(t.log(\"Keep alive timed out. Notifying transport that connection has been lost.\"),t.transport.lostConnection(t)):u>=i.timeoutWarning?i.userNotified||(t.log(\"Keep alive has been missed, connection may be dead/slow.\"),n(t).triggerHandler(f.onConnectionSlow),i.userNotified=!0):i.userNotified=!1)}function e(n,t){var i=n.url+t;return n.transport&&(i+=\"?transport=\"+n.transport.name),u.prepareQueryString(n,i)}function h(n){this.connection=n;this.startRequested=!1;this.startCompleted=!1;this.connectionStopped=!1}var r=n.signalR,f=n.signalR.events,c=n.signalR.changeState,o=\"__Start Aborted__\",u;r.transports={};h.prototype={start:function(n,r,u){var f=this,e=f.connection,o=!1;if(f.startRequested||f.connectionStopped){e.log(\"WARNING! \"+n.name+\" transport cannot be started. Initialization ongoing or completed.\");return}e.log(n.name+\" transport starting.\");n.start(e,function(){o||f.initReceived(n,r)},function(t){return o||(o=!0,f.transportFailed(n,t,u)),!f.startCompleted||f.connectionStopped});f.transportTimeoutHandle=t.setTimeout(function(){o||(o=!0,e.log(n.name+\" transport timed out when trying to connect.\"),f.transportFailed(n,i,u))},e._.totalTransportConnectTimeout)},stop:function(){this.connectionStopped=!0;t.clearTimeout(this.transportTimeoutHandle);r.transports._logic.tryAbortStartRequest(this.connection)},initReceived:function(n,i){var u=this,f=u.connection;if(u.startRequested){f.log(\"WARNING! The client received multiple init messages.\");return}u.connectionStopped||(u.startRequested=!0,t.clearTimeout(u.transportTimeoutHandle),f.log(n.name+\" transport connected. Initiating start request.\"),r.transports._logic.ajaxStart(f,function(){u.startCompleted=!0;i()}))},transportFailed:function(i,u,e){var o=this.connection,h=o._deferral,s;this.connectionStopped||(t.clearTimeout(this.transportTimeoutHandle),this.startRequested?this.startCompleted||(s=r._.error(r.resources.errorDuringStartRequest,u),o.log(i.name+\" transport failed during the start request. Stopping the connection.\"),n(o).triggerHandler(f.onError,[s]),h&&h.reject(s),o.stop()):(i.stop(o),o.log(i.name+\" transport failed to connect. Attempting to fall back.\"),e()))}};u=r.transports._logic={ajax:function(t,i){return n.ajax(n.extend(!0,{},n.signalR.ajaxDefaults,{type:\"GET\",data:{},xhrFields:{withCredentials:t.withCredentials},contentType:t.contentType,dataType:t.ajaxDataType},i))},pingServer:function(t){var e,f,i=n.Deferred();return t.transport?(e=t.url+\"/ping\",e=u.addQs(e,t.qs),f=u.ajax(t,{url:e,success:function(n){var u;try{u=t._parseResponse(n)}catch(e){i.reject(r._.transportError(r.resources.pingServerFailedParse,t.transport,e,f));t.stop();return}u.Response===\"pong\"?i.resolve():i.reject(r._.transportError(r._.format(r.resources.pingServerFailedInvalidResponse,n),t.transport,null,f))},error:function(n){n.status===401||n.status===403?(i.reject(r._.transportError(r._.format(r.resources.pingServerFailedStatusCode,n.status),t.transport,n,f)),t.stop()):i.reject(r._.transportError(r.resources.pingServerFailed,t.transport,n,f))}})):i.reject(r._.transportError(r.resources.noConnectionTransport,t.transport)),i.promise()},prepareQueryString:function(n,i){var r;return r=u.addQs(i,\"clientProtocol=\"+n.clientProtocol),r=u.addQs(r,n.qs),n.token&&(r+=\"&connectionToken=\"+t.encodeURIComponent(n.token)),n.data&&(r+=\"&connectionData=\"+t.encodeURIComponent(n.data)),r},addQs:function(t,i){var r=t.indexOf(\"?\")!==-1?\"&\":\"?\",u;if(!i)return t;if(typeof i==\"object\")return t+r+n.param(i);if(typeof i==\"string\")return u=i.charAt(0),(u===\"?\"||u===\"&\")&&(r=\"\"),t+r+i;throw new Error(\"Query string property must be either a string or object.\");},getUrl:function(n,i,r,f,e){var h=i===\"webSockets\"?\"\":n.baseUrl,o=h+n.appRelativeUrl,s=\"transport=\"+i;return!e&&n.groupsToken&&(s+=\"&groupsToken=\"+t.encodeURIComponent(n.groupsToken)),r?(o+=f?\"/poll\":\"/reconnect\",!e&&n.messageId&&(s+=\"&messageId=\"+t.encodeURIComponent(n.messageId))):o+=\"/connect\",o+=\"?\"+s,o=u.prepareQueryString(n,o),e||(o+=\"&tid=\"+Math.floor(Math.random()*11)),o},maximizePersistentResponse:function(n){return{MessageId:n.C,Messages:n.M,Initialized:typeof n.S!=\"undefined\"?!0:!1,ShouldReconnect:typeof n.T!=\"undefined\"?!0:!1,LongPollDelay:n.L,GroupsToken:n.G}},updateGroups:function(n,t){t&&(n.groupsToken=t)},stringifySend:function(n,t){return typeof t==\"string\"||typeof t==\"undefined\"||t===null?t:n.json.stringify(t)},ajaxSend:function(t,i){var h=u.stringifySend(t,i),c=e(t,\"/send\"),o,s=function(t,u){n(u).triggerHandler(f.onError,[r._.transportError(r.resources.sendFailed,u.transport,t,o),i])};return o=u.ajax(t,{url:c,type:t.ajaxDataType===\"jsonp\"?\"GET\":\"POST\",contentType:r._.defaultContentType,data:{data:h},success:function(n){var i;if(n){try{i=t._parseResponse(n)}catch(r){s(r,t);t.stop();return}u.triggerReceived(t,i)}},error:function(n,i){i!==\"abort\"&&i!==\"parsererror\"&&s(n,t)}})},ajaxAbort:function(n,t){if(typeof n.transport!=\"undefined\"){t=typeof t==\"undefined\"?!0:t;var i=e(n,\"/abort\");u.ajax(n,{url:i,async:t,timeout:1e3,type:\"POST\"});n.log(\"Fired ajax abort async = \"+t+\".\")}},ajaxStart:function(t,i){var h=function(n){var i=t._deferral;i&&i.reject(n)},s=function(i){t.log(\"The start request failed. Stopping the connection.\");n(t).triggerHandler(f.onError,[i]);h(i);t.stop()};t._.startRequest=u.ajax(t,{url:e(t,\"/start\"),success:function(n,u,f){var e;try{e=t._parseResponse(n)}catch(o){s(r._.error(r._.format(r.resources.errorParsingStartResponse,n),o,f));return}e.Response===\"started\"?i():s(r._.error(r._.format(r.resources.invalidStartResponse,n),null,f))},error:function(n,i,u){i!==o?s(r._.error(r.resources.errorDuringStartRequest,u,n)):(t.log(\"The start request aborted because connection.stop() was called.\"),h(r._.error(r.resources.stoppedDuringStartRequest,null,n)))}})},tryAbortStartRequest:function(n){n._.startRequest&&(n._.startRequest.abort(o),delete n._.startRequest)},tryInitialize:function(n,t,i){t.Initialized&&i?i():t.Initialized&&n.log(\"WARNING! The client received an init message after reconnecting.\")},triggerReceived:function(t,i){t._.connectingMessageBuffer.tryBuffer(i)||n(t).triggerHandler(f.onReceived,[i])},processMessages:function(t,i,r){var f;u.markLastMessage(t);i&&(f=u.maximizePersistentResponse(i),u.updateGroups(t,f.GroupsToken),f.MessageId&&(t.messageId=f.MessageId),f.Messages&&(n.each(f.Messages,function(n,i){u.triggerReceived(t,i)}),u.tryInitialize(t,f,r)))},monitorKeepAlive:function(t){var i=t._.keepAliveData;i.monitoring?t.log(\"Tried to monitor keep alive but it's already being monitored.\"):(i.monitoring=!0,u.markLastMessage(t),t._.keepAliveData.reconnectKeepAliveUpdate=function(){u.markLastMessage(t)},n(t).bind(f.onReconnect,t._.keepAliveData.reconnectKeepAliveUpdate),t.log(\"Now monitoring keep alive with a warning timeout of \"+i.timeoutWarning+\", keep alive timeout of \"+i.timeout+\" and disconnecting timeout of \"+t.disconnectTimeout))},stopMonitoringKeepAlive:function(t){var i=t._.keepAliveData;i.monitoring&&(i.monitoring=!1,n(t).unbind(f.onReconnect,t._.keepAliveData.reconnectKeepAliveUpdate),t._.keepAliveData={},t.log(\"Stopping the monitoring of the keep alive.\"))},startHeartbeat:function(n){n._.lastActiveAt=(new Date).getTime();s(n)},markLastMessage:function(n){n._.lastMessageAt=(new Date).getTime()},markActive:function(n){return u.verifyLastActive(n)?(n._.lastActiveAt=(new Date).getTime(),!0):!1},isConnectedOrReconnecting:function(n){return n.state===r.connectionState.connected||n.state===r.connectionState.reconnecting},ensureReconnectingState:function(t){return c(t,r.connectionState.connected,r.connectionState.reconnecting)===!0&&n(t).triggerHandler(f.onReconnecting),t.state===r.connectionState.reconnecting},clearReconnectTimeout:function(n){n&&n._.reconnectTimeout&&(t.clearTimeout(n._.reconnectTimeout),delete n._.reconnectTimeout)},verifyLastActive:function(t){if((new Date).getTime()-t._.lastActiveAt>=t.reconnectWindow){var i=r._.format(r.resources.reconnectWindowTimeout,new Date(t._.lastActiveAt),t.reconnectWindow);return t.log(i),n(t).triggerHandler(f.onError,[r._.error(i,\"TimeoutException\")]),t.stop(!1,!1),!1}return!0},reconnect:function(n,i){var f=r.transports[i];if(u.isConnectedOrReconnecting(n)&&!n._.reconnectTimeout){if(!u.verifyLastActive(n))return;n._.reconnectTimeout=t.setTimeout(function(){u.verifyLastActive(n)&&(f.stop(n),u.ensureReconnectingState(n)&&(n.log(i+\" reconnecting.\"),f.start(n)))},n.reconnectDelay)}},handleParseFailure:function(t,i,u,e,o){var s=r._.transportError(r._.format(r.resources.parseFailed,i),t.transport,u,o);e&&e(s)?t.log(\"Failed to parse server response while attempting to connect.\"):(n(t).triggerHandler(f.onError,[s]),t.stop())},initHandler:function(n){return new h(n)},foreverFrame:{count:0,connections:{}}}}(window.jQuery,window),function(n,t){var r=n.signalR,u=n.signalR.events,f=n.signalR.changeState,i=r.transports._logic;r.transports.webSockets={name:\"webSockets\",supportsKeepAlive:function(){return!0},send:function(t,f){var e=i.stringifySend(t,f);try{t.socket.send(e)}catch(o){n(t).triggerHandler(u.onError,[r._.transportError(r.resources.webSocketsInvalidState,t.transport,o,t.socket),f])}},start:function(e,o,s){var h,c=!1,l=this,a=!o,v=n(e);if(!t.WebSocket){s();return}e.socket||(h=e.webSocketServerUrl?e.webSocketServerUrl:e.wsProtocol+e.host,h+=i.getUrl(e,this.name,a),e.log(\"Connecting to websocket endpoint '\"+h+\"'.\"),e.socket=new t.WebSocket(h),e.socket.onopen=function(){c=!0;e.log(\"Websocket opened.\");i.clearReconnectTimeout(e);f(e,r.connectionState.reconnecting,r.connectionState.connected)===!0&&v.triggerHandler(u.onReconnect)},e.socket.onclose=function(t){var i;this===e.socket&&(c&&typeof t.wasClean!=\"undefined\"&&t.wasClean===!1?(i=r._.transportError(r.resources.webSocketClosed,e.transport,t),e.log(\"Unclean disconnect from websocket: \"+(t.reason||\"[no reason given].\"))):e.log(\"Websocket closed.\"),s&&s(i)||(i&&n(e).triggerHandler(u.onError,[i]),l.reconnect(e)))},e.socket.onmessage=function(t){var r;try{r=e._parseResponse(t.data)}catch(u){i.handleParseFailure(e,t.data,u,s,t);return}r&&(n.isEmptyObject(r)||r.M?i.processMessages(e,r,o):i.triggerReceived(e,r))})},reconnect:function(n){i.reconnect(n,this.name)},lostConnection:function(n){this.reconnect(n)},stop:function(n){i.clearReconnectTimeout(n);n.socket&&(n.log(\"Closing the Websocket.\"),n.socket.close(),n.socket=null)},abort:function(n,t){i.ajaxAbort(n,t)}}}(window.jQuery,window),function(n,t){var i=n.signalR,u=n.signalR.events,e=n.signalR.changeState,r=i.transports._logic,f=function(n){t.clearTimeout(n._.reconnectAttemptTimeoutHandle);delete n._.reconnectAttemptTimeoutHandle};i.transports.serverSentEvents={name:\"serverSentEvents\",supportsKeepAlive:function(){return!0},timeOut:3e3,start:function(o,s,h){var c=this,l=!1,a=n(o),v=!s,y;if(o.eventSource&&(o.log(\"The connection already has an event source. Stopping it.\"),o.stop()),!t.EventSource){h&&(o.log(\"This browser doesn't support SSE.\"),h());return}y=r.getUrl(o,this.name,v);try{o.log(\"Attempting to connect to SSE endpoint '\"+y+\"'.\");o.eventSource=new t.EventSource(y,{withCredentials:o.withCredentials})}catch(p){o.log(\"EventSource failed trying to connect with error \"+p.Message+\".\");h?h():(a.triggerHandler(u.onError,[i._.transportError(i.resources.eventSourceFailedToConnect,o.transport,p)]),v&&c.reconnect(o));return}v&&(o._.reconnectAttemptTimeoutHandle=t.setTimeout(function(){l===!1&&o.eventSource.readyState!==t.EventSource.OPEN&&c.reconnect(o)},c.timeOut));o.eventSource.addEventListener(\"open\",function(){o.log(\"EventSource connected.\");f(o);r.clearReconnectTimeout(o);l===!1&&(l=!0,e(o,i.connectionState.reconnecting,i.connectionState.connected)===!0&&a.triggerHandler(u.onReconnect))},!1);o.eventSource.addEventListener(\"message\",function(n){var t;if(n.data!==\"initialized\"){try{t=o._parseResponse(n.data)}catch(i){r.handleParseFailure(o,n.data,i,h,n);return}r.processMessages(o,t,s)}},!1);o.eventSource.addEventListener(\"error\",function(n){var r=i._.transportError(i.resources.eventSourceError,o.transport,n);this===o.eventSource&&(h&&h(r)||(o.log(\"EventSource readyState: \"+o.eventSource.readyState+\".\"),n.eventPhase===t.EventSource.CLOSED?(o.log(\"EventSource reconnecting due to the server connection ending.\"),c.reconnect(o)):(o.log(\"EventSource error.\"),a.triggerHandler(u.onError,[r]))))},!1)},reconnect:function(n){r.reconnect(n,this.name)},lostConnection:function(n){this.reconnect(n)},send:function(n,t){r.ajaxSend(n,t)},stop:function(n){f(n);r.clearReconnectTimeout(n);n&&n.eventSource&&(n.log(\"EventSource calling close().\"),n.eventSource.close(),n.eventSource=null,delete n.eventSource)},abort:function(n,t){r.ajaxAbort(n,t)}}}(window.jQuery,window),function(n,t){var r=n.signalR,e=n.signalR.events,o=n.signalR.changeState,i=r.transports._logic,u=function(){var n=t.document.createElement(\"iframe\");return n.setAttribute(\"style\",\"position:absolute;top:0;left:0;width:0;height:0;visibility:hidden;\"),n},f=function(){var i=null,f=1e3,n=0;return{prevent:function(){r._.ieVersion<=8&&(n===0&&(i=t.setInterval(function(){var n=u();t.document.body.appendChild(n);t.document.body.removeChild(n);n=null},f)),n++)},cancel:function(){n===1&&t.clearInterval(i);n>0&&n--}}}();r.transports.foreverFrame={name:\"foreverFrame\",supportsKeepAlive:function(){return!0},iframeClearThreshold:50,start:function(n,r,e){var l=this,s=i.foreverFrame.count+=1,h,o=u(),c=function(){n.log(\"Forever frame iframe finished loading and is no longer receiving messages.\");e&&e()||l.reconnect(n)};if(t.EventSource){e&&(n.log(\"Forever Frame is not supported by SignalR on browsers with SSE support.\"),e());return}o.setAttribute(\"data-signalr-connection-id\",n.id);f.prevent();h=i.getUrl(n,this.name);h+=\"&frameId=\"+s;t.document.documentElement.appendChild(o);n.log(\"Binding to iframe's load event.\");o.addEventListener?o.addEventListener(\"load\",c,!1):o.attachEvent&&o.attachEvent(\"onload\",c);o.src=h;i.foreverFrame.connections[s]=n;n.frame=o;n.frameId=s;r&&(n.onSuccess=function(){n.log(\"Iframe transport started.\");r()})},reconnect:function(n){var r=this;i.isConnectedOrReconnecting(n)&&i.verifyLastActive(n)&&t.setTimeout(function(){if(i.verifyLastActive(n)&&n.frame&&i.ensureReconnectingState(n)){var u=n.frame,t=i.getUrl(n,r.name,!0)+\"&frameId=\"+n.frameId;n.log(\"Updating iframe src to '\"+t+\"'.\");u.src=t}},n.reconnectDelay)},lostConnection:function(n){this.reconnect(n)},send:function(n,t){i.ajaxSend(n,t)},receive:function(t,u){var f,e,o;if(t.json!==t._originalJson&&(u=t._originalJson.stringify(u)),o=t._parseResponse(u),i.processMessages(t,o,t.onSuccess),t.state===n.signalR.connectionState.connected&&(t.frameMessageCount=(t.frameMessageCount||0)+1,t.frameMessageCount>r.transports.foreverFrame.iframeClearThreshold&&(t.frameMessageCount=0,f=t.frame.contentWindow||t.frame.contentDocument,f&&f.document&&f.document.body)))for(e=f.document.body;e.firstChild;)e.removeChild(e.firstChild)},stop:function(n){var r=null;if(f.cancel(),n.frame){if(n.frame.stop)n.frame.stop();else try{r=n.frame.contentWindow||n.frame.contentDocument;r.document&&r.document.execCommand&&r.document.execCommand(\"Stop\")}catch(u){n.log(\"Error occurred when stopping foreverFrame transport. Message = \"+u.message+\".\")}n.frame.parentNode===t.document.documentElement&&t.document.documentElement.removeChild(n.frame);delete i.foreverFrame.connections[n.frameId];n.frame=null;n.frameId=null;delete n.frame;delete n.frameId;delete n.onSuccess;delete n.frameMessageCount;n.log(\"Stopping forever frame.\")}},abort:function(n,t){i.ajaxAbort(n,t)},getConnection:function(n){return i.foreverFrame.connections[n]},started:function(t){o(t,r.connectionState.reconnecting,r.connectionState.connected)===!0&&n(t).triggerHandler(e.onReconnect)}}}(window.jQuery,window),function(n,t){var r=n.signalR,u=n.signalR.events,e=n.signalR.changeState,f=n.signalR.isDisconnecting,i=r.transports._logic;r.transports.longPolling={name:\"longPolling\",supportsKeepAlive:function(){return!1},reconnectDelay:3e3,start:function(o,s,h){var a=this,v=function(){v=n.noop;o.log(\"LongPolling connected.\");s?s():o.log(\"WARNING! The client received an init message after reconnecting.\")},y=function(n){return h(n)?(o.log(\"LongPolling failed to connect.\"),!0):!1},c=o._,l=0,p=function(i){t.clearTimeout(c.reconnectTimeoutId);c.reconnectTimeoutId=null;e(i,r.connectionState.reconnecting,r.connectionState.connected)===!0&&(i.log(\"Raising the reconnect event\"),n(i).triggerHandler(u.onReconnect))},w=36e5;o.pollXhr&&(o.log(\"Polling xhr requests already exists, aborting.\"),o.stop());o.messageId=null;c.reconnectTimeoutId=null;c.pollTimeoutId=t.setTimeout(function(){(function e(s,h){var g=s.messageId,nt=g===null,k=!nt,tt=!h,d=i.getUrl(s,a.name,k,tt,!0),b={};(s.messageId&&(b.messageId=s.messageId),s.groupsToken&&(b.groupsToken=s.groupsToken),f(s)!==!0)&&(o.log(\"Opening long polling request to '\"+d+\"'.\"),s.pollXhr=i.ajax(o,{xhrFields:{onprogress:function(){i.markLastMessage(o)}},url:d,type:\"POST\",contentType:r._.defaultContentType,data:b,timeout:o._.pollTimeout,success:function(r){var h,w=0,u,a;o.log(\"Long poll complete.\");l=0;try{h=o._parseResponse(r)}catch(b){i.handleParseFailure(s,r,b,y,s.pollXhr);return}(c.reconnectTimeoutId!==null&&p(s),h&&(u=i.maximizePersistentResponse(h)),i.processMessages(s,h,v),u&&n.type(u.LongPollDelay)===\"number\"&&(w=u.LongPollDelay),f(s)!==!0)&&(a=u&&u.ShouldReconnect,!a||i.ensureReconnectingState(s))&&(w>0?c.pollTimeoutId=t.setTimeout(function(){e(s,a)},w):e(s,a))},error:function(f,h){var v=r._.transportError(r.resources.longPollFailed,o.transport,f,s.pollXhr);if(t.clearTimeout(c.reconnectTimeoutId),c.reconnectTimeoutId=null,h===\"abort\"){o.log(\"Aborted xhr request.\");return}if(!y(v)){if(l++,o.state!==r.connectionState.reconnecting&&(o.log(\"An error occurred using longPolling. Status = \"+h+\". Response = \"+f.responseText+\".\"),n(s).triggerHandler(u.onError,[v])),(o.state===r.connectionState.connected||o.state===r.connectionState.reconnecting)&&!i.verifyLastActive(o))return;if(!i.ensureReconnectingState(s))return;c.pollTimeoutId=t.setTimeout(function(){e(s,!0)},a.reconnectDelay)}}}),k&&h===!0&&(c.reconnectTimeoutId=t.setTimeout(function(){p(s)},Math.min(1e3*(Math.pow(2,l)-1),w))))})(o)},250)},lostConnection:function(n){n.pollXhr&&n.pollXhr.abort(\"lostConnection\")},send:function(n,t){i.ajaxSend(n,t)},stop:function(n){t.clearTimeout(n._.pollTimeoutId);t.clearTimeout(n._.reconnectTimeoutId);delete n._.pollTimeoutId;delete n._.reconnectTimeoutId;n.pollXhr&&(n.pollXhr.abort(),n.pollXhr=null,delete n.pollXhr)},abort:function(n,t){i.ajaxAbort(n,t)}}}(window.jQuery,window),function(n){function r(n){return n+e}function s(n,t,i){for(var f=n.length,u=[],r=0;r\n/// \n(function ($, window) {\n /// \n if (typeof ($.signalR) !== \"function\") {\n throw new Error(\"SignalR: SignalR is not loaded. Please ensure jquery.signalR-x.js is referenced before ~/signalr/js.\");\n }\n\n var signalR = $.signalR;\n\n function makeProxyCallback(hub, callback) {\n return function () {\n // Call the client hub method\n callback.apply(hub, $.makeArray(arguments));\n };\n }\n\n function registerHubProxies(instance, shouldSubscribe) {\n var key, hub, memberKey, memberValue, subscriptionMethod;\n\n for (key in instance) {\n if (instance.hasOwnProperty(key)) {\n hub = instance[key];\n\n if (!(hub.hubName)) {\n // Not a client hub\n continue;\n }\n\n if (shouldSubscribe) {\n // We want to subscribe to the hub events\n subscriptionMethod = hub.on;\n } else {\n // We want to unsubscribe from the hub events\n subscriptionMethod = hub.off;\n }\n\n // Loop through all members on the hub and find client hub functions to subscribe/unsubscribe\n for (memberKey in hub.client) {\n if (hub.client.hasOwnProperty(memberKey)) {\n memberValue = hub.client[memberKey];\n\n if (!$.isFunction(memberValue)) {\n // Not a client hub function\n continue;\n }\n\n subscriptionMethod.call(hub, memberKey, makeProxyCallback(hub, memberValue));\n }\n }\n }\n }\n }\n\n $.hubConnection.prototype.createHubProxies = function () {\n var proxies = {};\n this.starting(function () {\n // Register the hub proxies as subscribed\n // (instance, shouldSubscribe)\n registerHubProxies(proxies, true);\n\n this._registerSubscribedHubs();\n }).disconnected(function () {\n // Unsubscribe all hub proxies when we \"disconnect\". This is to ensure that we do not re-add functional call backs.\n // (instance, shouldSubscribe)\n registerHubProxies(proxies, false);\n });\n\n proxies['diffnowHub'] = this.createHubProxy('diffnowHub'); \n proxies['diffnowHub'].client = { };\n proxies['diffnowHub'].server = {\n sendStatus: function (sessionId, type, message) {\n return proxies['diffnowHub'].invoke.apply(proxies['diffnowHub'], $.merge([\"SendStatus\"], $.makeArray(arguments)));\n }\n };\n\n return proxies;\n };\n\n signalR.hub = $.hubConnection(\"/diffnow/signalr\", { useDefaultPath: false });\n $.extend(signalR, signalR.hub.createHubProxies());\n\n}(window.jQuery, window));","export let DIFFNOW_URL = '';\nif (process.env.REACT_APP_ENV === 'remote') {\n DIFFNOW_URL = 'https://diffnow.com';\n} else if (process.env.REACT_APP_ENV === 'local') {\n DIFFNOW_URL = 'http://localhost/DiffNowApplication';\n}\nexport const DIFFNOW_API_URL = `${DIFFNOW_URL}/api`;\n\nexport const SUCCESS_MESSAGE_DELAY_MS = 1000;\nexport const COMPARE_PANE_TRANSITION_MS = 250;\n\nexport const IS_CURRENT_PROFILE = 1;\n\nexport const COMPARE_CLIPS = 0;\nexport const COMPARE_FILES = 1;\nexport const COMPARE_URLS = 2;\n\nexport const optionsLabels = {\n ica: 'Case',\n ils: 'Linebreak styles',\n ico: 'Comments',\n iwa: 'All',\n iwl: 'Leading',\n iwt: 'Trailing',\n iwc: 'Changes in amount',\n ibl: 'All blank lines',\n ibe: 'Blank lines at the end of a file',\n ilm: 'Lines matching regular expression',\n ilr: 'Line ranges',\n ipm: 'Parts matching regular expression',\n icr: 'Column ranges',\n fbc: 'Force binary comparison',\n\n hrz: 'Split results vertically',\n vws: 'Show white space',\n sli: 'Show line inspector',\n lcl: 'Line count limit (0 = no limit)',\n www: 'Word wrap width'\n};\n\nexport const optionsTooltips = {\n ils: 'Ignore linebreak styles: CRLF (DOS/Windows) vs. LF (Unix) vs. CR (Mac).',\n 'ignore-whitespace':\n 'Ignore white space in lines:' +\n '
    ' +\n '
  • All space/tab characters
  • ' +\n '
  • Only leading space/tabs
  • ' +\n '
  • Only trailing space/tabs
  • ' +\n '
  • Only changes in amount of space/tabs (e.g. 2 spaces are considered same as 3 tabs).
  • ' +\n '
',\n ilr:\n 'Use a comma-separated list of inclusive ranges, each of which is either a number or
' +\n 'a pair of dash-separatednumbers. You can also prefix a range with \"1:\" or \"2:\" to apply
' +\n 'it only to the first or to the second file. Numbers in square brackets count from the
' +\n 'end of the file. Examples: 1-6 or 1:1-6,2:12,20-[6],[1].',\n icr:\n 'Use a comma-separated list of ranges, following the rules for defining ranges of ignored
' +\n 'lines above. You can also prefix a range with \"1:\" or \"2:\" to apply it only to the first or to the
' +\n 'second file. Numbers in square brackets count from the end of the line. Examples: 1-6 or
' +\n '1:1-6,2:12,20-[6],[1].',\n fbc: 'Compare all files as binary and show the results in HEX format.',\n sli:\n 'Show the line inspector, a panel that sits underneath the
' +\n 'comparison panes and displays the currently selected line
' +\n 'and the matching line in the opposite pane, one on top of the other.',\n lcl:\n 'This feature helps limit diff report sizes, as most modern browsers
' +\n 'cannot handle incredibly large reports. Note that you can drastically
' +\n 'reduce report size by selecting \"Show only differences\" on this page.',\n html: '\"Beautifies\" an HTML file by adding hierarchical indentation.',\n xmlf: '\"Beautifies\" an XML file by adding hierarchical indentation.',\n xmlc:\n 'Converts an XML file into its canonical form, following the Canonical
' +\n 'XML W3C Standard Recommendation. Canonicalization makes two XML files
' +\n \"consistently structured, which helps to compare them. It's also recommended
\" +\n 'that you use the Format plugin (see below) along with this for hierarchical
' +\n 'indentation of XML files.',\n jsnf: '\"Beautifies\" a JSON file through consistent indentation.',\n jsnc: 'Canonicalizes JSON by outputting the fields of each object with the keys in sorted order.',\n sort: 'This plug-in is useful when compared files represent unsorted lists.',\n inis:\n 'Alphabetically sorts all sections and entries in each section, as well as separating sections with a blank line for clarity.',\n pe32: 'Allows comparing Windows executable files by dumping them to text.'\n};\n\nexport const plugins = [\n {\n label: 'HTML Format (*.html)',\n key: 'html'\n },\n {\n label: 'XML Format (*.xml)',\n key: 'xmlf'\n },\n {\n label: 'XML Canonicalize (*.xml)',\n key: 'xmlc'\n },\n {\n label: 'JSON Format (*.json)',\n key: 'jsnf'\n },\n {\n label: 'JSON Canonicalize (*.json)',\n key: 'jsnc'\n },\n {\n label: 'Sort (*.*)',\n key: 'sort'\n },\n {\n label: 'INI Sorter (*.ini,*.reg)',\n key: 'inis'\n },\n {\n label: 'Dump PE32 (*.exe,*.dll)',\n key: 'pe32'\n }\n];\n\nexport const defaultOptions = {\n ica: false, // Ignore Case\n ils: true, // Ignore Linebreak Styles\n ico: false, // Ignore Comments\n iwa: true, // Ignore Whitespace All\n iwl: false, // Ignore Whitespace Leading\n iwt: false, // Ignore Whitespace Trailing\n iwc: false, // Ignore Whitespace Changes\n ibl: true, // Ignore All Blank Lines\n ibe: false, // Ignore Blank End\n ilm: '', // Ignore Lines Matching\n ilr: '', // Ignore Line Ranges\n ipm: '', // Ignore Parts Matching\n icr: '', // Ignore Column Ranges\n fbc: false, // Force Binary Comparison\n\n hrz: true, // Vertical Split\n uvf: 0, // View Filter\n sli: true, // Show Line Inspector\n vws: false, // View White Space\n lcl: 2000, // Line Count Limit\n uww: false, // Use Word Wrap\n www: 80, // Word Wrap Width\n det: 1, // Detail Level\n\n ice: {\n // Identical Items\n tc: '0, 0, 0',\n bc: '255, 255, 255',\n u: false,\n s: false\n },\n ace: {\n // Added Items\n tc: '128, 0, 0',\n bc: '192, 192, 192',\n u: false,\n s: false\n },\n dce: {\n // Deleted Items\n tc: '0, 0, 255',\n bc: '224, 224, 224',\n u: false,\n s: false\n },\n cce: {\n // Changed Items\n tc: '64, 32, 0',\n bc: '242, 242, 198',\n u: false,\n s: false\n },\n ccc: {\n // Changed Text in Changed Lines\n tc: '255, 15, 135',\n bc: '224, 224, 224',\n u: false,\n s: false\n },\n gce: {\n // Ignored Text\n tc: '0, 128, 0',\n bc: '240, 240, 240',\n u: false,\n s: false\n },\n nce: {\n // Newer Items\n tc: '128, 0, 128',\n bc: '166, 202, 240',\n u: false,\n s: false\n },\n oce: {\n // Older Items\n tc: '255, 0, 0',\n bc: '192, 220, 192',\n u: false,\n s: false\n },\n html: false, // HTML Format\n xmlf: false, // XML Format\n xmlc: false, // XML Canonicalize\n jsnf: false, // JSON Format\n jsnc: false, // JSON Canonicalize\n sort: false, // Sort\n inis: false, // INI Sorter\n pe32: false, // Dump PE32\n html_n: 0, // HTML Format Index\n xmlf_n: 1, // XML Format Index\n xmlc_n: 2, // XML Canonicalize Index\n jsnf_n: 3, // JSON Format Index\n jsnc_n: 4, // JSON Canonicalize Inde\n sort_n: 5, // Sort Index\n inis_n: 6, // INI Sorter Index\n pe32_n: 7 // Dump PE32 Index\n};\n\nexport const getFeatures = configuration => ({\n standardFeatures: [\n configuration.useMonthlyComparisonLimits\n ? `${configuration.monthlyComparisonCountLimitMax} comparisons a month`\n : `${configuration.comparisonCountLimitNotLoggedInMax} comparisons a day`,\n 'Standard comparison queue priority',\n 'Reports savable for up to 1 year',\n 'Ads',\n `${configuration.maxSizeKB} KB file size limit`,\n '2000 line diff report limit',\n 'Single options profile',\n 'No word wrap',\n 'Basic ignore options',\n 'No forcing of binary comparison',\n 'No plug-in support'\n ],\n premiumFeatures: [\n 'Unlimited comparisons',\n 'High comparison queue priority',\n 'Reports savable indefinitely',\n 'No ads',\n `${configuration.maxSizePremiumKB} KB file size limit`,\n 'Unlimited diff report size',\n 'Multiple options profiles',\n 'Customizable word wrap',\n 'Advanced ignore options',\n 'Ability to force of binary comparison',\n 'Support for 8 advanced plug-ins'\n ]\n});\n\nexport const docTypes = {\n '': 'Auto Detect',\n bas: 'Basic / Visual Basic',\n bat: 'Batch',\n c: 'C / C++',\n cs: 'C#',\n css: 'CSS',\n for: 'Fortran',\n html: 'HTML',\n java: 'Java',\n js: 'JavaScript',\n json: 'JSON',\n lisp: 'Lisp / Common Lisp',\n pas: 'Pascal / Delphi',\n perl: 'Perl',\n php: 'PHP',\n py: 'Python',\n rb: 'Ruby',\n sql: 'SQL / MySQL',\n tcl: 'TCL',\n tex: 'TeX / LaTeX',\n xml: 'XML'\n};\n\nexport const DONATE_URL = 'https://www.paypal.me/diffnow';\nexport const PRESTOSOFT_URL = 'https://www.prestosoft.com';\n\nexport const SIGNALR_STATUS = {\n CONNECTING: 0,\n CONNECTED: 1,\n RECONNECTING: 2,\n DISCONNECTED: 4\n};\n\nexport const AMPLITUDE_KEY = '5d5bffda7e32c4292b3248d1ef502186';\n","import axios from 'axios';\n\nimport { DIFFNOW_API_URL } from './constants';\n\nconst UTIL_URL = `${DIFFNOW_API_URL}/util`;\n\nexport async function getConfiguration() {\n try {\n const response = await axios.get(`${UTIL_URL}/getConfiguration`);\n return response.data;\n } catch (e) {\n console.error(e);\n return {};\n }\n}\n\nexport function getChangeLog(onSuccess, onError) {\n axios\n .get(`${UTIL_URL}/getChangeLog`)\n .then(response => {\n onSuccess(response.data.changeLog);\n })\n .catch(err => {\n if (err.response) {\n onError(err.response.data);\n } else {\n onError(err.message);\n }\n });\n}\n","import axios from 'axios';\nimport queryString from 'query-string';\n\nimport { DIFFNOW_API_URL } from './constants';\n\nconst REPORTS_URL = `${DIFFNOW_API_URL}/reports`;\n\nexport async function getSavedReports(sessionToken) {\n try {\n const response = await axios.get(`${REPORTS_URL}/getUserReports?sessionToken=${sessionToken}`);\n return response.data.reports;\n } catch (err) {\n if (err.response) {\n throw err.response.data.error;\n } else {\n throw err.message;\n }\n }\n}\n\nexport async function unrollReport(shortUrl) {\n try {\n return (await axios.get(`${REPORTS_URL}/unrollReport?shortUrl=${shortUrl}`)).data;\n } catch (error) {\n if (error.response) {\n throw new Error(error.response.data);\n } else {\n throw new Error(error.message);\n }\n }\n}\n\nexport function deleteUserReport(shortUrl, sessionToken, onSuccess, onError) {\n axios\n .post(`${REPORTS_URL}/deleteUserReport`, {\n sessionToken: sessionToken,\n shortUrl: shortUrl\n })\n .then(response => {\n onSuccess(response.data.result);\n })\n .catch(err => {\n if (err.response) {\n onError(err.response.data);\n } else {\n onError(err.message);\n }\n });\n}\n\nexport function renameUserReport(shortUrl, newTitle, sessionToken, onSuccess, onError) {\n axios\n .post(`${REPORTS_URL}/renameUserReport`, {\n shortUrl,\n newTitle,\n sessionToken\n })\n .then(response => {\n onSuccess(response.data.result);\n })\n .catch(err => {\n if (err.response) {\n onError(err.response.data.error);\n } else {\n onError(err.message);\n }\n });\n}\n\nexport function storeResults(duration, title, reportId, sessionToken, onSuccess, onError) {\n axios\n .post(`${REPORTS_URL}/storeResults`, {\n duration,\n title,\n reportId,\n sessionToken\n })\n .then(response => {\n onSuccess(response.data.shortUrlIndex);\n })\n .catch(err => {\n if (err.response) {\n onError(err.response.data.error);\n } else {\n onError(err.message);\n }\n });\n}\n\nexport function getReportMetadata(shortUrl, onSuccess, onError) {\n axios\n .get(`${REPORTS_URL}/getReportMetadata?shortUrl=${shortUrl}`)\n .then(response => {\n onSuccess(response.data.report);\n })\n .catch(err => {\n if (err.response) {\n onError(err.response.data.error);\n } else {\n onError(err.message);\n }\n });\n}\n\nexport async function getReport(reportId, durationKey) {\n return (await axios.get(generateReportUrl(reportId, durationKey))).data;\n}\n\nexport function generateReportUrl(reportId, durationKey = '') {\n const queryParameters = queryString.stringify({ reportId, durationKey });\n return `${REPORTS_URL}/getReport?${queryParameters}`;\n}\n","import axios from 'axios';\nimport noop from 'lodash/noop';\n\nimport { DIFFNOW_API_URL } from './constants';\n\nconst USERS_URL = `${DIFFNOW_API_URL}/user`;\n\nexport async function checkIfLoggedIn(sessionToken) {\n return axios.get(`${USERS_URL}/checkIfLoggedIn?sessionToken=${sessionToken}`).catch(err => {\n noop();\n });\n}\n\nexport function login(email, password, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/login`, {\n emailAddress: email,\n password: password\n })\n .then(response => onSuccess(response.data.user, response.data.sessionToken))\n .catch(err => {\n if (err.response) {\n onError(`Error: ${err.response.data.message}`);\n } else {\n onError(`Error: ${err.message}`);\n }\n });\n}\n\nexport function register(email, password, mailingList, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/register`, {\n emailAddress: email,\n password: password,\n mailingList: mailingList.toString()\n })\n .then(response => {\n onSuccess(email);\n })\n .catch(err => {\n if (err.response) {\n onError(`Error: ${err.response.data.error}`);\n } else {\n onError(`Error: ${err.message}`);\n }\n });\n}\n\nexport function logout(sessionToken, onSuccess) {\n axios\n .post(`${USERS_URL}/logout`, {\n sessionToken: sessionToken\n })\n .then(response => {\n onSuccess();\n })\n .catch(err => {\n noop();\n });\n}\n\nexport function changePassword(sessionToken, passwordOld, passwordNew, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/changePassword`, { sessionToken, passwordOld, passwordNew })\n .then(response => {\n onSuccess();\n })\n .catch(err => {\n if (err.response) {\n onError(`Error: ${err.response.data.error}`);\n } else {\n onError(`Error: ${err.message}`);\n }\n });\n}\n\nexport function resetPassword(emailAddress, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/resetPassword`, { emailAddress })\n .then(response => {\n onSuccess();\n })\n .catch(err => {\n if (err.response) {\n onError(`Error: ${err.response.data.error}`);\n } else {\n onError(`Error: ${err.message}`);\n }\n });\n}\n\nexport function changePasswordForReset(\n emailAddress,\n confirmationKey,\n passwordNew,\n onSuccess,\n onError\n) {\n axios\n .post(`${USERS_URL}/changePasswordForReset`, { emailAddress, confirmationKey, passwordNew })\n .then(response => {\n onSuccess();\n })\n .catch(err => {\n if (err.response) {\n onError(`Error: ${err.response.data.error}`);\n } else {\n onError(`Error: ${err.message}`);\n }\n });\n}\n","import axios from 'axios';\n\nimport { DIFFNOW_API_URL } from './constants';\n\nconst USERS_URL = `${DIFFNOW_API_URL}/subscription`;\n\nexport function addNewSubscription(\n sessionToken,\n subscriptionToken,\n plan,\n source,\n onSuccess,\n onError\n) {\n axios\n .post(`${USERS_URL}/addNewSubscription`, {\n sessionToken,\n subscriptionToken,\n plan,\n source\n })\n .then(response => onSuccess())\n .catch(err => {\n if (err.response) {\n onError({ error: `Error: ${err.response.data}` });\n } else {\n onError({ error: `Error: ${err.message}` });\n }\n });\n}\n\nexport async function getPremiumStatus(sessionToken) {\n try {\n const response = await axios.get(`${USERS_URL}/getPremiumStatus?sessionToken=${sessionToken}`);\n return response.data;\n } catch (err) {\n if (err.response) {\n throw err.response.data.error;\n } else {\n throw err.message;\n }\n }\n}\n\nexport function cancelSubscription(sessionToken, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/cancelSubscription`, {\n sessionToken\n })\n .then(response => onSuccess(response.data))\n .catch(err => {\n if (err.response) {\n onError(err.response.data.error);\n } else {\n onError(err.message);\n }\n });\n}\n\nexport function reactivateSubscription(sessionToken, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/reactivateSubscription`, {\n sessionToken\n })\n .then(response => onSuccess(response.data))\n .catch(err => {\n if (err.response) {\n onError(err.response.data.error);\n } else {\n onError(err.message);\n }\n });\n}\n\nexport function updatePaymentMethod(sessionToken, tokenId, onSuccess, onError) {\n axios\n .post(`${USERS_URL}/updateCard`, {\n sessionToken,\n tokenId\n })\n .then(response => onSuccess(response.data))\n .catch(err => {\n if (err.response) {\n onError(err.response.data.error);\n } else {\n onError(err.message);\n }\n });\n}\n","import includes from 'lodash/includes';\n\nexport const truncatedPrefix =\n 'Note: Due to the large size of the comparison report, only the first ';\nexport const truncatedSuffixPremium =\n ' lines are being shown, based on your settings in Options | Results.';\nexport const truncatedSuffixNonPremium =\n ' lines are being shown. To see the full comparison results, please use ExamDiff Pro to compare these files. You can also adjust the limit if you are a premium user.';\nexport const tips = [\n 'DiffNow lets you compare ZIP and RAR archives, and displays the results as directories.',\n 'You can use DiffNow to compare Word, Excel, PowerPoint, and PDF documents! DiffNow will automatically extract text from these documents.',\n \"Don't like the default color scheme? You can fully customize every color in the comparison results from the Options panel. You can permanently store your color preferences by registering for an account.\",\n 'DiffNow can perform syntax highlighting for more than 20 popular programming and markup languages. You can also choose to ignore comments in the Options panel.',\n 'By default, DiffNow ignores all whitespace (including blank lines). You can customize this in the Options panel.',\n 'If you sign up for a DiffNow account, you can access all of your shared reports at any time.',\n 'DiffNow uses fuzzy matching to intelligently align lines that are similar but not identical.',\n 'DiffNow uses all of the comparison plug-ins in the ExamDiff Pro plug-in library.',\n 'DiffNow offers full Unicode support.',\n 'Premium users of DiffNow can create multiple Options profiles.',\n 'Premium users of DiffNow can compare files up to 8 MB in size.',\n 'Ads do not show up for premium users of DiffNow',\n 'Premium users of DiffNow can create diff reports of any size.',\n 'Premium users of DiffNow can use regular expressions to ignore compared texts.'\n];\nexport const tipsWindows = [\n 'Like DiffNow but want to be able to compare directories too? Try ExamDiff Pro.',\n 'DiffNow is powered by ExamDiff Pro. The downloadable version of ExamDiff Pro offers many more features, including three-way merge, directory comparison, and moved block detection.',\n 'ExamDiff Pro can compare different kinds of inputs, such as local files against URLs, URLs against clipboard contents etc.'\n];\nexport const tipsMacLinux = [\n 'You can compare files via DiffNow from the command line using diffnow-cli.'\n];\n\nexport const adBlockMessage =\n 'DiffNow is largely supported by advertising income. Please whitelist diffnow.com in your Adblock settings or consider a premium subscription to get more functionality, get rid of ads, and support our service.';\n\nexport function getRandomTip() {\n let platformTips = tips;\n\n if (includes(navigator.platform, 'Win')) {\n platformTips = platformTips.concat(tipsWindows);\n } else if (includes(navigator.platform, 'Mac') || includes(navigator.platform, 'Linux')) {\n platformTips = platformTips.concat(tipsMacLinux);\n }\n\n return platformTips[Math.floor(Math.random() * platformTips.length)];\n}\n","import axios from 'axios';\nimport noop from 'lodash/noop';\nimport pick from 'lodash/pick';\n\nimport { DIFFNOW_API_URL } from './constants';\n\nconst OPTIONS_URL = `${DIFFNOW_API_URL}/userOptions`;\n\nexport function getUniqueOptions(defaultOptions, userOptions) {\n const keys = Object.keys(userOptions).filter(key => userOptions[key] !== defaultOptions[key]);\n return pick(userOptions, keys);\n}\n\nexport function getOptionsProfiles(sessionToken, onSuccess) {\n axios\n .get(`${OPTIONS_URL}/getOptionsProfiles?sessionToken=${sessionToken}`)\n .then(response => {\n onSuccess(response.data.optionsProfiles);\n })\n .catch(err => {\n noop();\n });\n}\n\nexport function getCurrentUserOptions(sessionToken, onSuccess) {\n axios\n .get(`${OPTIONS_URL}/getCurrentUserOptions?sessionToken=${sessionToken}`)\n .then(response => {\n onSuccess(JSON.parse(response.data.optionsJson));\n })\n .catch(err => {\n onSuccess({});\n });\n}\n\nexport function getDefaultOptions(sessionToken, onSuccess) {\n axios\n .get(`${OPTIONS_URL}/getDefaultOptions?sessionToken=${sessionToken}`)\n .then(response => {\n onSuccess(JSON.parse(response.data.optionsJson));\n })\n .catch(err => {\n onSuccess({});\n });\n}\n\nexport function getUserOptionsByName(sessionToken, optionsName, onSuccess) {\n axios\n .get(\n `${OPTIONS_URL}/getUserOptionsByName?sessionToken=${sessionToken}&optionsName=${optionsName}`\n )\n .then(response => {\n onSuccess(JSON.parse(response.data.optionsJson));\n })\n .catch(err => {\n noop();\n });\n}\n\nexport function setUserOptions(sessionToken, optionsJson, defaultOptions, onSuccess) {\n axios\n .post(`${OPTIONS_URL}/setUserOptions`, {\n sessionToken: sessionToken,\n optionsJson: getUniqueOptions(defaultOptions, optionsJson)\n })\n .then(response => {\n onSuccess(optionsJson);\n })\n .catch(err => {\n noop();\n });\n}\n\nexport function deleteUserOptionsByName(sessionToken, optionsName, onSuccess) {\n axios\n .post(`${OPTIONS_URL}/deleteUserOptionsByName`, {\n sessionToken: sessionToken,\n optionsName: optionsName\n })\n .then(response => {\n onSuccess(optionsName);\n })\n .catch(err => {\n noop();\n });\n}\n\nexport function setCurrentProfile(sessionToken, optionsName, onSuccess) {\n axios\n .post(`${OPTIONS_URL}/setCurrentProfile`, {\n sessionToken: sessionToken,\n optionsName: optionsName\n })\n .then(response => {\n onSuccess(optionsName);\n })\n .catch(err => {\n noop();\n });\n}\n","export const LOGGED_IN = 'LOGGED_IN';\nexport const LOGGED_OUT = 'LOGGED_OUT';\nexport const SUBSCRIBE_USER = 'SUBSCRIBE_USER';\nexport const RE_RENDER = 'RE_RENDER';\nexport const SET_STATUS = 'SET_STATUS';\nexport const SET_REPORT = 'SET_REPORT';\nexport const SET_EXAMDIFF_URI = 'SET_EXAMDIFF_URI';\nexport const SET_CLIP_TITLES = 'SET_CLIP_TITLES';\nexport const SET_FILE_TITLES = 'SET_FILE_TITLES';\nexport const SET_URL_TITLES = 'SET_URL_TITLES';\nexport const SET_CLIPS = 'SET_CLIPS';\nexport const SET_DOC_TYPE = 'SET_DOC_TYPE';\nexport const SET_CLIENT_ID = 'SET_CLIENT_ID';\nexport const SET_OPTIONS_PROFILES = 'SET_OPTIONS_PROFILES';\nexport const SET_OPTIONS = 'SET_OPTIONS';\nexport const SET_NEW_OPTION = 'SET_NEW_OPTION';\nexport const SAVE_NEW_OPTIONS = 'SAVE_NEW_OPTIONS';\nexport const RESET_NEW_OPTIONS = 'RESET_NEW_OPTIONS';\nexport const SET_DEFAULT_OPTIONS = 'SET_DEFAULT_OPTIONS';\nexport const SET_TRUNCATED_STATUS = 'SET_TRUNCATED_STATUS';\nexport const SET_COMPARISON_COUNT = 'SET_COMPARISON_COUNT';\nexport const SET_CONFIGURATION = 'SET_CONFIGURATION';\nexport const SET_URLS = 'SET_URLS';\nexport const SET_FIRST_FILE = 'SET_FIRST_FILE';\nexport const SET_SECOND_FILE = 'SET_SECOND_FILE';\nexport const SET_LAST_COMPARED_TAB_INDEX = 'SET_LAST_COMPARED_TAB_INDEX';\nexport const SET_COLLAPSED_TAB_INDEX = 'SET_COLLAPSED_TAB_INDEX';\nexport const SET_THEME = 'SET_THEME';\nexport const SET_PREMIUM_SOURCE = 'SET_PREMIUM_SOURCE';\nexport const SET_REPORT_READY = 'SET_REPORT_READY';\n\nexport function loggedIn(user) {\n return {\n type: LOGGED_IN,\n payload: { user }\n };\n}\n\nexport function loggedOut() {\n return {\n type: LOGGED_OUT\n };\n}\n\nexport function subscribeUser() {\n return {\n type: SUBSCRIBE_USER\n };\n}\n\nexport function rerender() {\n return {\n type: RE_RENDER\n };\n}\n\nexport function setStatus(status) {\n return {\n type: SET_STATUS,\n payload: { status }\n };\n}\n\nexport function setReport(reportId, durationKey) {\n return {\n type: SET_REPORT,\n payload: { reportId, durationKey }\n };\n}\n\nexport function setExamDiffUri(examDiffUri) {\n return {\n type: SET_EXAMDIFF_URI,\n payload: { examDiffUri }\n };\n}\n\nexport function setClipTitles(firstClipTitle, secondClipTitle) {\n return {\n type: SET_CLIP_TITLES,\n payload: { firstClipTitle, secondClipTitle }\n };\n}\n\nexport function setFileTitles(firstFileTitle, secondFileTitle) {\n return {\n type: SET_FILE_TITLES,\n payload: { firstFileTitle, secondFileTitle }\n };\n}\n\nexport function setUrlTitles(firstUrlTitle, secondUrlTitle) {\n return {\n type: SET_URL_TITLES,\n payload: { firstUrlTitle, secondUrlTitle }\n };\n}\n\nexport function setClips(firstClip, secondClip) {\n return {\n type: SET_CLIPS,\n payload: { firstClip, secondClip }\n };\n}\n\nexport function setDocType(docType) {\n return {\n type: SET_DOC_TYPE,\n payload: { docType }\n };\n}\n\nexport function setClientId(clientId) {\n return {\n type: SET_CLIENT_ID,\n payload: { clientId }\n };\n}\n\nexport function setOptionsProfiles(optionsProfiles) {\n return {\n type: SET_OPTIONS_PROFILES,\n payload: { optionsProfiles }\n };\n}\n\nexport function setOptions(options) {\n return {\n type: SET_OPTIONS,\n payload: { options }\n };\n}\n\nexport function setNewOption(newOption) {\n return {\n type: SET_NEW_OPTION,\n payload: { newOption }\n };\n}\n\nexport function saveNewOptions() {\n return {\n type: SAVE_NEW_OPTIONS\n };\n}\n\nexport function resetNewOptions() {\n return {\n type: RESET_NEW_OPTIONS\n };\n}\n\nexport function setDefaultOptions(defaultOptions) {\n return {\n type: SET_DEFAULT_OPTIONS,\n payload: { defaultOptions }\n };\n}\n\nexport function setTruncatedStatus(truncatedStatus) {\n return {\n type: SET_TRUNCATED_STATUS,\n payload: { isTruncated: truncatedStatus }\n };\n}\n\nexport function setComparisonCount(newComparisonCount, newComparisonStartDate) {\n return {\n type: SET_COMPARISON_COUNT,\n payload: { newComparisonCount, newComparisonStartDate }\n };\n}\n\nexport function setConfiguration(configuration) {\n return {\n type: SET_CONFIGURATION,\n payload: { configuration }\n };\n}\n\nexport function setUrls(firstUrl, secondUrl) {\n return {\n type: SET_URLS,\n payload: { firstUrl, secondUrl }\n };\n}\n\nexport function setFirstFile(firstFileStatus, firstFileName, firstFileUploadedName) {\n return {\n type: SET_FIRST_FILE,\n payload: { firstFileStatus, firstFileName, firstFileUploadedName }\n };\n}\n\nexport function setSecondFile(secondFileStatus, secondFileName, secondFileUploadedName) {\n return {\n type: SET_SECOND_FILE,\n payload: { secondFileStatus, secondFileName, secondFileUploadedName }\n };\n}\n\nexport function setLastComparedTabIndex(lastComparedTabIndex) {\n return {\n type: SET_LAST_COMPARED_TAB_INDEX,\n payload: { lastComparedTabIndex }\n };\n}\n\nexport function setCollapsedTabIndex(collapsedTabIndex) {\n return {\n type: SET_COLLAPSED_TAB_INDEX,\n payload: { collapsedTabIndex }\n };\n}\n\nexport function setTheme(theme) {\n return {\n type: SET_THEME,\n payload: { theme }\n };\n}\n\nexport function setPremiumSource(premiumSource) {\n return {\n type: SET_PREMIUM_SOURCE,\n payload: { premiumSource }\n };\n}\n\nexport function setReportReady(isReportReady) {\n return {\n type: SET_REPORT_READY,\n payload: { isReportReady }\n };\n}\n","let ReactGA, currentLocation;\nif (inBrowser()) {\n ReactGA = require('react-ga');\n ReactGA.initialize('UA-363598-3');\n}\n\nexport function inBrowser() {\n return !(\n typeof document === 'undefined' ||\n (window.process && window.process.title.includes('node')) ||\n (window.process && window.process.title.includes('test')) ||\n (window.process && window.process.env.JEST_WORKER_ID !== undefined)\n );\n}\n\nexport function logAnalytics() {\n if (inBrowser() && window.location.pathname !== currentLocation) {\n currentLocation = window.location.pathname;\n ReactGA.set({ page: currentLocation });\n ReactGA.pageview(currentLocation);\n }\n}\n\nexport function transformHistory(history, func) {\n if (history && history.location) {\n const currentPath = history.location.pathname;\n const newPath = func(currentPath === '/' ? '/compareClips' : currentPath);\n history.push(newPath);\n }\n}\n\nexport function getHash(history) {\n return history && history.location.hash.split('#')[1];\n}\n\nexport function setHash(history, hash) {\n transformHistory(history, path => `${path}#${hash}`);\n}\n\nexport function areAdsInvisible() {\n return !window.adsLoaded;\n}\n\n// https://stackoverflow.com/a/38241481\nexport function getOS() {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = platform;\n\n if (macosPlatforms.includes(platform)) {\n os = 'Mac OS';\n } else if (iosPlatforms.includes(platform)) {\n os = 'iOS';\n } else if (windowsPlatforms.includes(platform)) {\n os = 'Windows';\n } else if (/Android/.test(userAgent)) {\n os = 'Android';\n } else if (/Linux/.test(platform)) {\n os = 'Linux';\n }\n\n return os;\n}\n\nexport function canUseExamDiff() {\n return getOS() === 'Windows';\n}\n","import { inBrowser } from './browser';\n\nexport function id() {\n return Math.random()\n .toString(36)\n .slice(2, 16);\n}\n\nexport function examDiffProUrl(referrer) {\n return `https://www.prestosoft.com/edp_examdiffpro.asp?ref=${referrer}`;\n}\n\nexport function toDateString(date) {\n const dateObject = new Date(date);\n return `${dateObject.toLocaleDateString()} ${dateObject.toLocaleTimeString()}`;\n}\n\nexport const isPremium = user => !!(user && user.isPremium);\n\nexport function comparisonLimit(user, configuration) {\n const {\n comparisonCountLimitNotLoggedInMax,\n monthlyComparisonCountLimitMax,\n useMonthlyComparisonLimits\n } = configuration;\n const maximumComparisons = useMonthlyComparisonLimits\n ? monthlyComparisonCountLimitMax\n : comparisonCountLimitNotLoggedInMax;\n\n if (isPremium(user)) {\n return Infinity;\n } else {\n return maximumComparisons;\n }\n}\n\nexport function canUserCompare(comparisonCount, user, configuration) {\n return comparisonCount < comparisonLimit(user, configuration);\n}\n\nexport function isBrowserUnsupported() {\n require('../lib/modernizr.js'); // eslint-disable-line\n const { Modernizr } = window;\n return inBrowser() && !(Modernizr.es5 && Modernizr.flexbox && Modernizr.localstorage);\n}\n\nexport const sleep = async ms => new Promise(resolve => setTimeout(resolve, ms));\n","import axios from 'axios';\n\nimport { DIFFNOW_API_URL, SUCCESS_MESSAGE_DELAY_MS, COMPARE_PANE_TRANSITION_MS } from './constants';\n\nconst UPLOAD_URL = `${DIFFNOW_API_URL}/upload/uploadFile`;\nconst COMPARE_URL = `${DIFFNOW_API_URL}/compare`;\n\nexport async function uploadFile(file, index, sessionToken) {\n const formData = new FormData();\n formData.append('file', file);\n formData.append('index', index);\n formData.append('fileSize', file.size);\n formData.append('sessionToken', sessionToken);\n\n const postOptions = {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n };\n\n try {\n const { output } = (await axios.post(UPLOAD_URL, formData, postOptions)).data;\n return { uploadedFileName: output };\n } catch (error) {\n handleComparisonError(error);\n }\n}\n\nexport async function compareClips(comparisonPayload) {\n try {\n return (await axios.post(`${COMPARE_URL}/compareClips`, comparisonPayload)).data;\n } catch (error) {\n handleComparisonError(error);\n }\n}\n\nexport async function compareFiles(comparisonPayload) {\n try {\n return (await axios.post(`${COMPARE_URL}/compareFiles`, comparisonPayload)).data;\n } catch (error) {\n handleComparisonError(error);\n }\n}\n\nexport async function compareUrls(comparisonPayload) {\n try {\n return (await axios.post(`${COMPARE_URL}/compareUrls`, comparisonPayload)).data;\n } catch (error) {\n handleComparisonError(error);\n }\n}\n\nexport function executePostComparisonActions(compareProps, pageIndex) {\n setTimeout(() => {\n compareProps.onSetCollapsedTabIndex(pageIndex);\n compareProps.onSetLastComparedTabIndex(pageIndex);\n }, SUCCESS_MESSAGE_DELAY_MS);\n\n setTimeout(() => {\n compareProps.history.push('/report');\n }, SUCCESS_MESSAGE_DELAY_MS + COMPARE_PANE_TRANSITION_MS);\n}\n\nfunction handleComparisonError(error) {\n if (error.response) {\n throw new Error(error.response.data.output);\n } else {\n throw new Error(error.message);\n }\n}\n","import { isPremium, comparisonLimit } from './common';\n\nexport function setUpComparisonCounter(onSetComparisonCount, configuration) {\n let comparisonCount = 0;\n let comparisonStartDate = undefined;\n\n try {\n comparisonCount = JSON.parse(window.localStorage.getItem('diffNowComparisonCount'));\n comparisonStartDate = new Date(window.localStorage.getItem('diffNowComparisonStartDate'));\n } catch (e) {\n // Fall back to default values\n }\n\n if (comparisonCount && comparisonStartDate) {\n if (isComparisonCountExpired(comparisonStartDate, configuration)) {\n resetComparisonCounter(onSetComparisonCount);\n } else {\n onSetComparisonCount(comparisonCount, comparisonStartDate);\n }\n } else {\n resetComparisonCounter(onSetComparisonCount);\n }\n}\n\nexport function resetComparisonCounter(onSetComparisonCount) {\n setComparisonCount(0, null, onSetComparisonCount);\n}\n\nexport function bumpComparisonCounter({\n comparisonCount,\n comparisonStartDate,\n onSetComparisonCount,\n configuration,\n user\n}) {\n if (!isPremium(user)) {\n if (comparisonCount && comparisonStartDate) {\n if (isComparisonCountExpired(comparisonStartDate, configuration)) {\n setComparisonCount(1, new Date(), onSetComparisonCount);\n } else {\n setComparisonCount(comparisonCount + 1, comparisonStartDate, onSetComparisonCount);\n }\n } else {\n setComparisonCount(1, new Date(), onSetComparisonCount);\n }\n }\n}\n\nexport function setComparisonCount(\n newComparisonCount,\n newComparisonStartDate,\n onSetComparisonCount\n) {\n onSetComparisonCount(newComparisonCount, newComparisonStartDate);\n\n try {\n window.localStorage.setItem('diffNowComparisonCount', newComparisonCount);\n window.localStorage.setItem('diffNowComparisonStartDate', newComparisonStartDate);\n } catch (e) {\n // Fall back to default values\n }\n}\n\nexport function isComparisonCountExpired(comparisonStartDate, configuration) {\n const { useMonthlyComparisonLimits } = configuration;\n const MS_IN_A_DAY = 86400000;\n const MS_IN_A_MONTH = 30 * MS_IN_A_DAY;\n\n const expirationLimit = useMonthlyComparisonLimits ? MS_IN_A_MONTH : MS_IN_A_DAY;\n\n const currentTime = new Date();\n return currentTime - comparisonStartDate > expirationLimit;\n}\n\nexport function comparisonsUsedStatus(comparisonCount, user, configuration) {\n const {\n comparisonCountLimitNotLoggedInWarning,\n comparisonCountLimitNotLoggedInMax,\n monthlyComparisonCountLimitWarning,\n monthlyComparisonCountLimitMax,\n useMonthlyComparisonLimits\n } = configuration;\n\n const warningLimit = useMonthlyComparisonLimits\n ? monthlyComparisonCountLimitWarning\n : comparisonCountLimitNotLoggedInWarning;\n const maxLimit = useMonthlyComparisonLimits\n ? monthlyComparisonCountLimitMax\n : comparisonCountLimitNotLoggedInMax;\n const limitTypeDescriptor = useMonthlyComparisonLimits ? 'monthly' : 'daily';\n const userNotLoggedInOrNotPremium = !user || !isPremium(user);\n\n if (userNotLoggedInOrNotPremium && comparisonCount >= warningLimit) {\n return {\n message: `You have used ${comparisonCount} of your ${maxLimit} ${limitTypeDescriptor} comparisons. Premium users can make an unlimited number of comparisons.`,\n type: 'info'\n };\n } else {\n return { message: null, type: null };\n }\n}\n\nexport function comparisonLimitReachedStatus(user, configuration) {\n const secondaryAdditionalMessage = configuration.useMonthlyComparisonLimits\n ? 'Sign up for DiffNow Premium to unlock unlimited comparisons.'\n : 'Register for free to increase your comparison limit to 15 or sign up for DiffNow Premium to unlock unlimited comparisons.';\n const additionalMessage = user\n ? 'Sign up for DiffNow Premium to unlock unlimited comparisons.'\n : secondaryAdditionalMessage;\n const limitTypeDescriptor = configuration.useMonthlyComparisonLimits ? 'monthly' : 'daily';\n\n return {\n message: `You have hit your ${limitTypeDescriptor} comparison limit of ${comparisonLimit(\n user,\n configuration\n )}. ${additionalMessage}`,\n type: 'error'\n };\n}\n","import $ from 'jquery';\n\nexport const reconnectSignalR = async () => {\n await $.connection.hub.stop();\n await $.connection.hub.start();\n};\n","import * as React from 'react';\nimport { arrayOf, element, func, oneOfType } from 'prop-types';\n\nexport default class ErrorBoundary extends React.Component {\n static propTypes = {\n children: oneOfType([element, arrayOf(element)]),\n openContactDialog: func\n };\n\n state = {\n error: null\n };\n\n componentDidCatch(error, errorInfo) {\n this.setState({ error });\n }\n\n render() {\n if (this.state.error) {\n return (\n
\n

Oops!

\n

\n Something went wrong on our server. We{\"'\"}re working to resolve the issue, and you can\n help by{' '}\n \n submitting an error report\n \n .\n

\n
\n );\n }\n return this.props.children;\n }\n}\n","import React from 'react';\nimport reactStringReplace from 'react-string-replace';\nimport isString from 'lodash/isString';\n\nconst replaceOpenWhyPremium = (rawStatus, openWhyPremiumDialog) => {\n if (!isString(rawStatus) || !rawStatus.includes('(.*?)<\\/OpenWhyPremium>/);\n const source = sourceMatch && sourceMatch[1];\n\n return reactStringReplace(\n rawStatus,\n /(.*?)<\\/OpenWhyPremium>/,\n (match, i) => (\n openWhyPremiumDialog(source)} key={i}>\n {match}\n \n )\n );\n};\n\nconst replaceOpenOptions = (rawStatus, openOptionsDialog) => {\n if (!isString(rawStatus) || !rawStatus.includes('(.*?)<\\/OpenOptions>/, (match, i) => (\n \n {match}\n \n ));\n};\n\nconst replaceATag = rawStatus => {\n if (!isString(rawStatus) || !rawStatus.includes('(.*?)<\\/a>/);\n const href = hrefMatch && hrefMatch[1];\n\n return reactStringReplace(rawStatus, /(.*?)<\\/a>/, (match, i) => (\n \n {match}\n \n ));\n};\n\nexport const replaceTags = (rawStatus, openWhyPremiumDialog, openOptionsDialog) => {\n const statusWithoutATag = replaceATag(rawStatus);\n\n let statusWithoutOpenOptions;\n if (Array.isArray(statusWithoutATag)) {\n statusWithoutOpenOptions = statusWithoutATag.map(status =>\n replaceOpenOptions(status, openOptionsDialog)\n );\n } else {\n statusWithoutOpenOptions = replaceOpenOptions(statusWithoutATag, openOptionsDialog);\n }\n\n let statusWithoutOpenWhyPremium;\n if (Array.isArray(statusWithoutOpenOptions)) {\n statusWithoutOpenWhyPremium = statusWithoutOpenOptions.map(status =>\n replaceOpenWhyPremium(status, openWhyPremiumDialog)\n );\n } else {\n statusWithoutOpenWhyPremium = replaceOpenWhyPremium(\n statusWithoutOpenOptions,\n openWhyPremiumDialog\n );\n }\n\n return statusWithoutOpenWhyPremium;\n};\n","import React, { Component } from 'react';\nimport { string, func, object } from 'prop-types';\nimport { withTheme } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport Icon from '@material-ui/core/Icon';\n\nimport { replaceTags } from '../util/messages';\n\nclass Status extends Component {\n static propTypes = {\n message: string,\n type: string,\n removeTip: func,\n theme: object,\n openWhyPremiumDialog: func,\n openOptionsDialog: func\n };\n\n state = {\n type: null,\n message: null\n };\n\n render() {\n const message = this.state.message || this.props.message;\n const type = this.state.type || this.props.type;\n\n const color = type && this.props.theme.palette.status[type].color;\n const backgroundColor = type && this.props.theme.palette.status[type].backgroundColor;\n let messageFormatted = (\n \n {replaceTags(message, this.props.openWhyPremiumDialog, this.props.openOptionsDialog)}\n \n );\n let icon = null;\n let rightIcon = null;\n\n if (type === 'error') {\n icon = error;\n } else if (type === 'success') {\n icon = check;\n } else if (type === 'tip') {\n icon = info;\n messageFormatted = (\n \n Did you know? \n \n {replaceTags(message, this.props.openWhyPremiumDialog, this.props.openOptionsDialog)}\n \n \n );\n rightIcon = (\n \n clear\n \n );\n } else if (type === 'info') {\n icon = info;\n }\n\n return (\n \n \n {icon}\n
\n {messageFormatted}\n
\n \n {rightIcon}\n \n );\n }\n}\n\nexport default withTheme()(Status);\n","import React from 'react';\nimport Typography from '@material-ui/core/Typography';\n\nimport comparingLoader from '../../comparing-loader.gif';\n\nconst ComparisonAnimation = () => (\n \n
\n \"\"\n
\n
\n
Files
\n
ExamDiff Pro
\n
DiffNow
\n
\n
\n);\n\nexport default ComparisonAnimation;\n","import React from 'react';\nimport { string, bool } from 'prop-types';\nimport { Amplitude } from '@amplitude/react-amplitude';\nimport Paper from '@material-ui/core/Paper';\n\nimport edpLogoSmall from '../../edp-small.png';\nimport { generateReportUrl } from '../../util/reports';\nimport { examDiffProUrl } from '../../util/common';\n\nconst OutputFrame = ({ reportId, durationKey, isReportReady, nightModeEnabled }) => (\n \n {({ logEvent }) => (\n <>\n {\n logEvent('CLICKED_RESULTS_GENERATED_BY_EXAMDIFF_PRO');\n window.open(examDiffProUrl('diffnow-generated-by'), '_blank');\n }}\n style={{\n display: reportId && isReportReady ? 'flex' : 'none',\n marginTop: 20,\n color: nightModeEnabled ? '#ffffff' : '#000000',\n backgroundColor: nightModeEnabled ? '#0d47a1' : '#ffee58',\n fontFamily: '\"Open Sans\", Roboto, sans-serif',\n padding: 10,\n fontSize: 14,\n cursor: 'pointer'\n }}\n >\n \"ExamDiff\n \n Comparison results generated by ExamDiff Pro, a powerful all-in-one file and folder\n comparison Windows desktop application. Click this banner to learn more!\n \n \n \n {isReportReady && (\n \n )}\n \n \n )}\n \n);\n\nOutputFrame.propTypes = {\n reportId: string,\n durationKey: string,\n isReportReady: bool,\n nightModeEnabled: bool\n};\n\nexport default OutputFrame;\n","import React from 'react';\nimport { bool, string } from 'prop-types';\n\nclass AdContainer extends React.Component {\n componentDidMount() {\n if (window) {\n (window.adsbygoogle = window.adsbygoogle || []).push({});\n }\n }\n\n render() {\n return (\n \n \n ADVERTISEMENT\n \n \n \n );\n }\n}\n\nAdContainer.propTypes = {\n adSlotId: string,\n hideAdContainer: bool\n};\n\nexport default AdContainer;\n","import React from 'react';\nimport { func } from 'prop-types';\nimport noop from 'lodash/noop';\nimport Paper from '@material-ui/core/Paper';\n\nimport { adBlockMessage } from '../util/status';\nimport { replaceTags } from '../util/messages';\n\nconst AdBlockMessage = ({ openWhyPremiumDialog }) => (\n \n \n {replaceTags(adBlockMessage, openWhyPremiumDialog, noop)}\n \n \n);\n\nAdBlockMessage.propTypes = {\n openWhyPremiumDialog: func\n};\n\nexport default AdBlockMessage;\n","import React from 'react';\nimport { func } from 'prop-types';\n\nimport { DONATE_URL, PRESTOSOFT_URL } from '../util/constants';\n\nconst Footer = ({ openTermsOfServiceDialog, openContactDialog, openChangeLogDialog }) => (\n \n
Copyright © 2011-2023
\n \n PrestoSoft LLC.\n \n
All rights reserved.
\n \n Terms of Service\n \n
.
\n \n Contact us\n \n
.
\n \n Changelog\n \n
.
\n \n Donate\n \n
.
\n \n);\n\nFooter.propTypes = {\n openTermsOfServiceDialog: func,\n openContactDialog: func,\n openChangeLogDialog: func\n};\n\nexport default Footer;\n","import React from 'react';\nimport { bool, func } from 'prop-types';\nimport Icon from '@material-ui/core/Icon';\n\nconst ConsentFooter = ({ isDismissed, openTosDialog, dismiss }) => (\n \n
\n \n This site uses cookies to deliver our services and to allow for analysis of how people use\n our website in order to improve your experience and our services. By using our site, you\n acknowledge that you have read and understand our \n \n \n Terms of Service\n \n .\n
\n \n clear\n \n \n);\n\nConsentFooter.propTypes = {\n isDismissed: bool,\n openTosDialog: func,\n dismiss: func\n};\n\nexport default ConsentFooter;\n","import React, { Component, Fragment } from 'react';\nimport { string, element, func, bool, object } from 'prop-types';\nimport ReactTooltip from 'react-tooltip';\nimport { withTheme, withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Icon from '@material-ui/core/Icon';\n\nconst styles = {\n label: {\n height: 24\n }\n};\n\nclass TopButton extends Component {\n static propTypes = {\n label: string,\n icon: string,\n operation: func,\n noMarginRight: bool,\n tooltip: string,\n disabled: bool,\n mustBeLoggedIn: bool,\n theme: object,\n rightElement: element,\n hideIcon: bool,\n classes: object\n };\n\n render() {\n const {\n label,\n icon,\n operation,\n noMarginRight,\n tooltip,\n disabled,\n mustBeLoggedIn,\n theme,\n rightElement,\n hideIcon,\n classes\n } = this.props;\n\n return (\n \n {((mustBeLoggedIn && disabled) || tooltip) && (\n \n )}\n \n \n {!hideIcon && {icon}}\n {label}\n {rightElement ? rightElement : null}\n \n \n \n );\n }\n}\n\nexport default withTheme()(withStyles(styles)(TopButton));\n","import React, { Component } from 'react';\nimport { bool, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxWidth: 500,\n width: 500\n }\n};\n\nclass WhyRegisterDialog extends Component {\n static propTypes = {\n open: bool,\n closeDialog: func,\n classes: object\n };\n\n render() {\n const { open, closeDialog, classes } = this.props;\n\n return (\n \n Why Register?\n \n
\n If you use DiffNow regularly, registering for an account can be useful for several\n reasons:\n
\n
\n
    \n
  • \n You can save and share diff reports, as well as being able to manage your saved diff\n reports.\n
  • \n
  • \n Your options are tied to your account, so you only have to change them once rather\n than every time you visit DiffNow.\n
  • \n
\n
\n
\n Registration only takes a minute and is of course completely free. We are also planning\n on adding more features to user accounts in the future, such as more advanced comparison\n options. Be sure to let us know if you have any feature suggestions using the Feedback\n link on the left side.\n
\n
\n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(WhyRegisterDialog);\n","/* eslint no-restricted-globals: [\"off\", \"location\"] */\nimport React, { Component, Fragment } from 'react';\nimport { bool, object, func } from 'prop-types';\nimport { withStyles } from '@material-ui/core';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nimport { login, register, resetPassword } from '../../util/user';\nimport WhyRegisterDialog from '../dialogs/WhyRegisterDialog';\n\nconst styles = {\n dialogPaper: {\n width: 500,\n maxWidth: 500\n }\n};\n\nclass LoginDialog extends Component {\n static propTypes = {\n open: bool,\n closeDialog: func,\n onUserLogin: func,\n openRegisterConfirmDialog: func,\n classes: object\n };\n\n state = {\n error: null,\n register: false,\n email: '',\n password: '',\n isWhyRegisterDialogOpen: false,\n mailerChecked: false\n };\n\n get isPasswordTooShort() {\n return this.state.password.length < 6;\n }\n\n get submitDisabled() {\n return !this.notEmpty([this.state.email, this.state.password]) || this.isPasswordTooShort;\n }\n\n handleClose = () => {\n this.props.closeDialog();\n this.setState({ register: false });\n };\n\n onUserLogin = (user, sessionToken) => {\n this.props.onUserLogin(user, sessionToken);\n this.setState({ error: null });\n this.handleClose();\n };\n\n onUserRegister = email => {\n this.props.openRegisterConfirmDialog(email);\n this.setState({ error: null });\n this.handleClose();\n };\n\n register = (email, password) => {\n register(email, password, this.state.mailerChecked, this.onUserRegister, errorMessage => {\n this.setState({ error: errorMessage });\n });\n };\n\n login = (email, password) => {\n login(email, password, this.onUserLogin, errorMessage => {\n this.setState({ error: errorMessage });\n });\n };\n\n resetPassword = email => {\n resetPassword(\n email,\n () => {\n this.setState({ error: `Password reset email sent to ${email}.` });\n },\n error => {\n this.setState({ error: error });\n }\n );\n };\n\n handleKeyPress = t => {\n if (t.charCode === 13 && !this.submitDisabled) {\n this.handleSubmit();\n }\n };\n\n handleClickSwitchMode = () => {\n this.setState(state => ({ register: !state.register }));\n };\n\n handleClickWhyRegister = () => {\n this.setState({ isWhyRegisterDialogOpen: true });\n };\n\n closeWhyRegisterDialog = () => {\n this.setState({ isWhyRegisterDialogOpen: false });\n };\n\n handleClickForgotPassword = () => {\n this.resetPassword(this.state.email);\n };\n\n handleChangeEmail = e => {\n this.setState({ email: e.target.value });\n };\n\n handleChangePassword = e => {\n this.setState({ password: e.target.value });\n };\n\n handleSubmit = () => {\n if (this.state.register) {\n this.register(this.state.email, this.state.password);\n } else {\n this.login(this.state.email, this.state.password);\n }\n };\n\n handleChangeMailerChecked = e => {\n this.setState({ mailerChecked: e.target.checked });\n };\n\n notEmpty(fields) {\n return fields.reduce((base, field) => base && field !== '', true);\n }\n\n renderLoginForm() {\n return (\n
\n \n \n {this.state.register && (\n \n \n }\n />\n \n You will receive no more than one email a year. PrestoSoft does not share or sell your\n personal information.\n
\n \n )}\n {this.state.error && (\n
{this.state.error}
\n )}\n \n );\n }\n\n renderFormSwitcher() {\n return (\n
\n \n {this.state.register ? 'Have an account?' : \"Don't have an account?\"}\n \n {this.state.register ? 'Login' : 'Register'}\n \n {!this.state.register && (\n \n [Why?]\n \n )}\n \n
\n );\n }\n\n render() {\n const { open, classes } = this.props;\n\n return (\n \n \n {this.state.register ? 'Register' : 'Login'}\n \n {this.renderLoginForm()}\n {this.renderFormSwitcher()}\n \n \n \n {!this.state.register && (\n \n Forgot Password?\n \n )}\n \n {this.state.register ? 'Register' : 'Login'}\n \n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(LoginDialog);\n","import React from 'react';\nimport { string, func, bool, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n root: {\n zIndex: 1500\n }\n};\n\nconst ConfirmDeleteReportDialog = ({\n shortUrl,\n reportTitle,\n deleteReport,\n handleClose,\n open,\n classes\n}) => (\n \n Confirm Delete Report\n \n {`Are you sure you want to delete \"${reportTitle}\"`}?\n \n \n \n {\n deleteReport(shortUrl);\n handleClose();\n }}\n >\n Delete\n \n \n \n);\n\nConfirmDeleteReportDialog.propTypes = {\n shortUrl: string,\n reportTitle: string,\n deleteReport: func,\n handleClose: func,\n open: bool,\n classes: object\n};\n\nexport default withStyles(styles)(ConfirmDeleteReportDialog);\n","import React, { Component } from 'react';\nimport { string, func, bool, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport TextField from '@material-ui/core/TextField';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n root: {\n zIndex: 1500\n },\n textField: {\n width: '100%'\n },\n content: {\n width: 300\n },\n error: {\n fontSize: 12,\n marginTop: 10,\n color: 'red'\n }\n};\n\nclass RenameReportDialog extends Component {\n state = {\n newTitle: undefined,\n error: undefined\n };\n\n handleChange = event => {\n this.setState({\n newTitle: event.target.value\n });\n };\n\n handleClose = () => {\n this.setState({ newTitle: undefined, error: undefined });\n this.props.handleClose();\n };\n\n renameReport = (shortUrl, newReportTitle) => {\n this.props.renameReport(\n shortUrl,\n newReportTitle,\n () => {\n this.handleClose();\n },\n error => {\n this.setState({ error });\n }\n );\n };\n\n render() {\n const { shortUrl, reportTitle, open, classes } = this.props;\n\n return (\n \n Rename Report\n \n \n {this.state.error &&
{this.state.error}
}\n
\n \n \n {\n this.renameReport(shortUrl, this.state.newTitle || reportTitle);\n }}\n >\n Rename\n \n \n
\n );\n }\n}\n\nRenameReportDialog.propTypes = {\n shortUrl: string,\n reportTitle: string,\n renameReport: func,\n handleClose: func,\n open: bool,\n classes: object\n};\n\nexport default withStyles(styles)(RenameReportDialog);\n","/* eslint no-restricted-globals: [\"off\", \"location\"] */\nimport React, { Component, Fragment } from 'react';\nimport { string, bool, func, object } from 'prop-types';\nimport reject from 'lodash/reject';\nimport { withStyles, withTheme } from '@material-ui/core';\nimport Icon from '@material-ui/core/Icon';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport { getSavedReports, deleteUserReport, renameUserReport } from '../../util/reports';\nimport { toDateString } from '../../util/common';\nimport ConfirmDeleteReportDialog from '../dialogs/ConfirmDeleteReportDialog';\nimport RenameReportDialog from '../dialogs/RenameReportDialog';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 400,\n width: 750,\n maxWidth: 750,\n overflowY: 'auto'\n }\n};\n\nclass SavedReportsDialog extends Component {\n state = {\n savedReports: [],\n selectedShortUrl: null,\n selectedReportTitle: null,\n confirmDeleteReportDialogOpen: false,\n renameReportDialogOpen: false\n };\n\n static propTypes = {\n open: bool,\n closeDialog: func,\n onSetStatus: func,\n sessionToken: string,\n classes: object,\n theme: object\n };\n\n async componentDidUpdate(prevProps) {\n const { open, closeDialog, sessionToken } = this.props;\n\n if (open !== prevProps.open) {\n if (open) {\n try {\n const savedReports = await getSavedReports(sessionToken);\n this.setState({ savedReports });\n } catch (error) {\n closeDialog();\n this.props.onSetStatus({\n type: 'error',\n message: `Failed to load saved reports: ${error}`\n });\n }\n } else {\n this.setState({ savedReports: [] });\n }\n }\n }\n\n openReport = shortUrl => {\n window.open(`/report/${shortUrl}`, '_blank');\n };\n\n deleteReport = shortUrl => {\n deleteUserReport(\n shortUrl,\n this.props.sessionToken,\n () => {\n this.setState(prevState => ({\n savedReports: reject(prevState.savedReports, ['YourlsKeyword', shortUrl])\n }));\n },\n console.error\n );\n };\n\n renameReport = (shortUrl, newReportTitle, onSuccess, onError) => {\n renameUserReport(\n shortUrl,\n newReportTitle,\n this.props.sessionToken,\n () => {\n this.setState(prevState => ({\n savedReports: prevState.savedReports.map(savedReport => {\n if (savedReport.YourlsKeyword === shortUrl) {\n return Object.assign({}, savedReport, { Title: newReportTitle });\n } else {\n return savedReport;\n }\n })\n }));\n onSuccess();\n },\n onError\n );\n };\n\n openConfirmDeleteReportDialog = (shortUrl, reportTitle) => {\n this.setState({\n selectedReportTitle: reportTitle,\n selectedShortUrl: shortUrl,\n confirmDeleteReportDialogOpen: true\n });\n };\n\n openRenameReportDialog = (shortUrl, reportTitle) => {\n this.setState({\n selectedReportTitle: reportTitle,\n selectedShortUrl: shortUrl,\n renameReportDialogOpen: true\n });\n };\n\n renderSavedReports = () => (\n \n \n \n Report\n Comparison Time\n Expiration Time\n \n Open\n \n \n Delete\n \n \n Rename\n \n \n \n \n {this.state.savedReports.map((report, index) => (\n \n {report.Title}\n {toDateString(report.GenerationTimeString)}\n \n {report.ExpirationTime === null ? 'Never' : toDateString(report.ExpirationTimeString)}\n \n \n this.openReport(report.YourlsKeyword)}\n style={this.styles.actionIcon}\n >\n open_in_new\n \n \n \n \n this.openConfirmDeleteReportDialog(report.YourlsKeyword, report.Title)\n }\n style={this.styles.actionIcon}\n >\n delete\n \n \n \n this.openRenameReportDialog(report.YourlsKeyword, report.Title)}\n style={this.styles.actionIcon}\n >\n edit\n \n \n \n ))}\n \n
\n );\n\n get styles() {\n return {\n iconColumn: {\n width: 60,\n boxSizing: 'border-box',\n textAlign: 'center'\n },\n actionIcon: {\n cursor: 'pointer',\n color: this.props.theme.palette.iconColor\n }\n };\n }\n\n render() {\n const { open, closeDialog, classes } = this.props;\n\n return (\n \n \n Your Saved Reports\n \n
\n {this.renderSavedReports()}\n
\n
\n \n \n \n
\n \n this.setState({\n confirmDeleteReportDialogOpen: false,\n selectedReportTitle: null,\n selectedShortUrl: null\n })\n }\n open={this.state.confirmDeleteReportDialogOpen}\n />\n \n this.setState({\n renameReportDialogOpen: false,\n selectedReportTitle: null,\n selectedShortUrl: null\n })\n }\n open={this.state.renameReportDialogOpen}\n />\n
\n );\n }\n}\n\nexport default withTheme()(withStyles(styles)(SavedReportsDialog));\n","import React, { Component } from 'react';\nimport { bool, string, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxWidth: 400,\n width: 400\n }\n};\n\nclass RegisterConfirmDialog extends Component {\n static propTypes = {\n open: bool,\n closeDialog: func,\n email: string,\n classes: object\n };\n\n render() {\n const { open, email, closeDialog, classes } = this.props;\n\n return (\n \n Registration Confirmation Sent\n An activation email has been sent to: {email}.\n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(RegisterConfirmDialog);\n","export function validateRange(rangeString) {\n function validateValue(input) {\n let returnValue = null;\n\n if (input.includes('[') || input.includes(']')) {\n returnValue = validateBrackets(input);\n if (returnValue !== null) {\n returnValue = validateNumericValue(input.replace(/\\[/g, '').replace(/\\]/g, ''));\n }\n } else {\n returnValue = validateNumericValue(input.replace(/\\[/g, '').replace(/\\]/g, ''));\n }\n\n return returnValue;\n }\n\n function validateNumericValue(input) {\n if (isNaN(Number(input))) {\n return `Error: ${input} is not a valid number`;\n } else {\n return null;\n }\n }\n\n function validateBrackets(input) {\n if (!(input[0] === '[' && input[input.length - 1] === ']')) {\n return `Error: ${input} includes invalid brackets`;\n } else {\n return null;\n }\n }\n\n if (rangeString.includes(' ')) {\n return 'Error: Ranges cannot contain whitespace';\n }\n\n let returnValue = null;\n rangeString.split(',').forEach(range => {\n if (range.includes(':')) {\n if (range.split(':')[0] !== '1' && range.split(':')[0] !== '2') {\n returnValue = 'Error: File indicator before \":\" must be either 1 or 2';\n }\n if (range.split(':')[1] === '') {\n returnValue = 'Error: Expecting range after \":\"';\n }\n range = range.split(':')[1];\n }\n\n const rangeSplit = range.split('-');\n let validationError = '';\n\n if ((rangeSplit.length === 1 || rangeSplit[1] === '') && range.includes('-')) {\n returnValue = 'Error: invalid number of arguments';\n } else if (rangeSplit.length === 1 && !range.includes('-')) {\n validationError = validateValue(rangeSplit[0]);\n if (validationError !== null) {\n returnValue = validationError;\n }\n } else {\n const firstNum = rangeSplit[0];\n const secondNum = rangeSplit[1];\n\n validationError = validateValue(firstNum);\n if (validationError !== null) {\n returnValue = validationError;\n }\n\n validationError = validateValue(secondNum);\n if (validationError !== null) {\n returnValue = validationError;\n }\n\n if (\n !firstNum.includes('[') &&\n !secondNum.includes('[') &&\n Number(firstNum) > Number(secondNum)\n ) {\n returnValue = `Error: ${firstNum} is greater than ${secondNum}`;\n } else if (\n firstNum.includes('[') &&\n secondNum.includes('[') &&\n Number(firstNum.replace(/[[\\]]/g, '')) < Number(secondNum.replace(/[[\\]]/g, ''))\n ) {\n returnValue = `Error: ${firstNum} is less than ${secondNum}`;\n }\n }\n });\n\n return returnValue;\n}\n\nexport function validateRegex(regexString) {\n try {\n new RegExp(regexString);\n return null;\n } catch (error) {\n return error.message;\n }\n}\n\nexport function validateNumber(numberString) {\n if (isNaN(numberString)) {\n return `Error: ${numberString} is not a number`;\n }\n\n if (numberString === '') {\n return 'Error: Input cannot be empty';\n }\n\n if (Number(numberString) < 0) {\n return `Error: ${numberString} is not a valid integer greater than or equal to 0`;\n }\n\n return null;\n}\n","import React, { Component } from 'react';\nimport { bool, string, number, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Icon from '@material-ui/core/Icon';\nimport ReactTooltip from 'react-tooltip';\n\nimport { optionsLabels, optionsTooltips } from '../../util/constants';\n\nconst styles = {\n checkBoxRoot: {\n width: 16,\n height: 16,\n margin: '8px 16px'\n }\n};\n\nclass OptionsCheckbox extends Component {\n static propTypes = {\n checked: bool,\n option: string,\n columns: number,\n setOption: func,\n disabled: bool,\n classes: object\n };\n\n render() {\n const { checked, option, columns, setOption, disabled, classes } = this.props;\n const Label = optionsTooltips[option] === undefined ? 'span' : 'u';\n\n return (\n
\n {optionsTooltips[option] && }\n {\n setOption(option, event.target.checked);\n }}\n />\n }\n label={\n \n }\n />\n {disabled && star}\n
\n );\n }\n}\n\nexport default withStyles(styles)(OptionsCheckbox);\n","import React, { Fragment } from 'react';\nimport PropTypes, { string, number, func, bool, object } from 'prop-types';\nimport { withTheme } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Icon from '@material-ui/core/Icon';\nimport ReactTooltip from 'react-tooltip';\nimport isNil from 'lodash/isNil';\n\nimport { optionsLabels, optionsTooltips } from '../../util/constants';\n\nconst OptionsTextfield = ({ value, option, setOption, disabled, error, theme }) => (\n \n \n \n {optionsLabels[option]}\n \n \n {optionsTooltips[option] && }\n setOption(option, e.target.value)}\n style={{ width: '50%' }}\n />\n {disabled && star}\n \n);\n\nOptionsTextfield.propTypes = {\n value: PropTypes.oneOfType([string, number]),\n option: string,\n setOption: func,\n disabled: bool,\n error: string,\n theme: object\n};\n\nexport default withTheme()(OptionsTextfield);\n","import React from 'react';\nimport { bool, object, func } from 'prop-types';\nimport { withTheme } from '@material-ui/core/styles';\nimport Icon from '@material-ui/core/Icon';\nimport ReactTooltip from 'react-tooltip';\n\nimport { optionsTooltips } from '../../util/constants';\nimport { validateRange, validateRegex } from '../../util/validation';\n\nimport OptionsCheckbox from './OptionsCheckbox';\nimport OptionsTextfield from './OptionsTextfield';\n\nconst CompareOptions = props => {\n const styles = {\n optionsBody: {\n padding: '10px 20px',\n height: 460,\n position: 'relative'\n },\n optionsGroupHeader: {\n fontSize: 14,\n marginTop: 8,\n marginBottom: 8,\n fontWeight: 700,\n color: props.theme.palette.primary.optionsText,\n display: 'inline-block'\n },\n checkboxGroup: {\n display: 'flex',\n height: 32\n },\n checkboxTextField: {\n display: 'flex',\n height: 32,\n alignItems: 'center'\n },\n mustBePremiumContainer: {\n alignItems: 'center',\n position: 'absolute',\n bottom: 0,\n right: 10\n },\n mustBePremiumIcon: {\n fontSize: 14,\n marginRight: 10\n },\n mustBePremiumText: {\n fontSize: 12\n },\n mustBePremiumLink: {\n textDecoration: 'underline',\n cursor: 'pointer'\n }\n };\n\n const { isPremium, options, setOption, openWhyPremiumDialog } = props;\n\n return (\n
\n
Ignore
\n
\n
\n \n \n \n
\n
\n \n \n Ignore whitespace in lines\n
\n
\n
\n \n \n \n \n
\n
\n
Ignore lines
\n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n
Ignore parts of each lines
\n
\n
\n \n
\n
\n \n
\n
\n
Binary comparison
\n
\n
\n \n
\n
\n\n \n star\n \n This feature is only available for \n \n premium\n \n  users.\n \n \n \n );\n};\n\nCompareOptions.propTypes = {\n isPremium: bool,\n options: object,\n setOption: func,\n openWhyPremiumDialog: func,\n theme: object\n};\n\nexport default withTheme()(CompareOptions);\n","import React, { Component, Fragment } from 'react';\nimport PropTypes, { bool, string, number, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport TextField from '@material-ui/core/TextField';\nimport Icon from '@material-ui/core/Icon';\n\nimport { optionsLabels } from '../../util/constants';\n\nconst styles = {\n checkBoxRoot: {\n width: 16,\n height: 16,\n margin: '8px 16px'\n }\n};\n\nclass OptionsCheckboxTextfield extends Component {\n static propTypes = {\n checked: bool,\n checkboxOption: string,\n value: PropTypes.oneOfType([string, number]),\n option: string,\n setOption: func,\n disabled: bool,\n error: string,\n classes: object\n };\n\n render() {\n const {\n checked,\n checkboxOption,\n value,\n option,\n setOption,\n disabled,\n error,\n classes\n } = this.props;\n\n return (\n \n {\n setOption(checkboxOption, event.target.checked);\n }}\n />\n }\n label={optionsLabels[option]}\n />\n setOption(option, e.target.value)}\n style={{ width: '50%' }}\n />\n {disabled && star}\n \n );\n }\n}\n\nexport default withStyles(styles)(OptionsCheckboxTextfield);\n","import React from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { withTheme } from '@material-ui/core/styles';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport Icon from '@material-ui/core/Icon';\n\nimport { validateNumber } from '../../util/validation';\n\nimport OptionsCheckbox from './OptionsCheckbox';\nimport OptionsTextfield from './OptionsTextfield';\nimport OptionsCheckboxTextfield from './OptionsCheckboxTextfield';\n\nconst ResultsOptions = props => {\n const styles = {\n optionsBody: {\n padding: 20,\n height: 460,\n position: 'relative'\n },\n optionsGroupHeader: {\n fontSize: 14,\n marginTop: 8,\n marginBottom: 8,\n fontWeight: 700,\n color: props.theme.palette.primary.optionsText\n },\n checkboxGroup: {\n display: 'flex',\n alignItems: 'center',\n height: 32\n },\n smallCheckbox: {\n width: '25%'\n },\n mediumCheckbox: {\n width: '50%'\n },\n largeCheckbox: {\n width: '75%'\n },\n radioButton: {\n marginBottom: 8\n },\n mustBePremiumContainer: {\n alignItems: 'center',\n position: 'absolute',\n bottom: 0,\n right: 10\n },\n mustBePremiumIcon: {\n fontSize: 14,\n marginRight: 10\n },\n mustBePremiumText: {\n fontSize: 12\n },\n mustBePremiumLink: {\n textDecoration: 'underline',\n cursor: 'pointer'\n }\n };\n\n const { options, setOption, isPremium, openWhyPremiumDialog } = props;\n\n return (\n
\n
Results
\n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n
\n
Word wrap
\n
\n
\n \n
\n
\n
Detail level for text file differences
\n
\n setOption('det', Number(e.target.value))}\n style={{ flexDirection: 'row' }}\n >\n }\n label=\"Lines\"\n />\n }\n label=\"Lines and words\"\n />\n }\n label=\"Lines and chars\"\n />\n \n
\n
Lines to show
\n
\n setOption('uvf', Number(e.target.value))}\n style={{ flexDirection: 'row' }}\n >\n }\n label=\"All lines\"\n />\n }\n label=\"Only different lines\"\n />\n }\n label=\"Only identical lines\"\n />\n \n
\n\n \n star\n \n This feature is only available for \n \n premium\n \n  users.\n \n
\n \n );\n};\n\nResultsOptions.propTypes = {\n isPremium: bool,\n options: object,\n setOption: func,\n openWhyPremiumDialog: func,\n theme: object\n};\n\nexport default withTheme()(ResultsOptions);\n","import React, { Component } from 'react';\nimport { string, object, func } from 'prop-types';\nimport { CompactPicker } from 'react-color';\n\nclass ColorPicker extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n displayColorPicker: false\n };\n }\n\n static propTypes = {\n option: object,\n color: string,\n optionKey: string,\n setOption: func\n };\n\n handleClick = () => {\n this.setState(prevState => ({\n displayColorPicker: !prevState.displayColorPicker\n }));\n };\n\n handleClose = () => {\n this.setState({\n displayColorPicker: false\n });\n };\n\n handleChange = next => {\n const { setOption, option, optionKey, color } = this.props;\n const nextColor = `${next.rgb.r}, ${next.rgb.g}, ${next.rgb.b}`;\n\n setOption(optionKey, Object.assign({}, option, { [color]: nextColor }));\n };\n\n get styles() {\n const { option, color } = this.props;\n\n return {\n color: {\n width: '36px',\n height: '14px',\n borderRadius: '2px',\n border: '1px solid #DDDDDD',\n background: `rgb(${option[color]})`\n },\n swatch: {\n padding: '5px',\n background: '#fff',\n borderRadius: '1px',\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n display: 'inline-block',\n cursor: 'pointer'\n },\n popover: {\n position: 'absolute',\n zIndex: '2'\n },\n cover: {\n position: 'fixed',\n top: '0px',\n right: '0px',\n bottom: '0px',\n left: '0px'\n }\n };\n }\n\n get color() {\n const { option, color } = this.props;\n const colorValues = option[color] ? option[color].split(', ') : [0, 0, 0];\n\n return {\n r: colorValues[0],\n g: colorValues[1],\n b: colorValues[2]\n };\n }\n\n render() {\n return (\n
\n
\n
\n
\n {this.state.displayColorPicker ? (\n
\n
\n \n
\n ) : null}\n
\n );\n }\n}\n\nexport default ColorPicker;\n","import React, { Component } from 'react';\nimport { object, string, func } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nconst styles = {\n checkBoxRoot: {\n width: 16,\n height: 16,\n margin: '8px 16px'\n }\n};\n\nclass ColorPickerCheckbox extends Component {\n static propTypes = {\n option: object,\n textDecoration: string,\n optionKey: string,\n setOption: func,\n classes: object\n };\n\n render() {\n const { option, textDecoration, optionKey, setOption, classes } = this.props;\n\n return (\n {\n setOption(\n optionKey,\n Object.assign({}, option, { [textDecoration]: event.target.checked })\n );\n }}\n />\n );\n }\n}\n\nexport default withStyles(styles)(ColorPickerCheckbox);\n","import React, { Component } from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Table from '@material-ui/core/Table';\nimport TableBody from '@material-ui/core/TableBody';\nimport TableCell from '@material-ui/core/TableCell';\nimport TableHead from '@material-ui/core/TableHead';\nimport TableRow from '@material-ui/core/TableRow';\n\nimport ColorPicker from './ColorPicker';\nimport ColorPickerCheckbox from './ColorPickerCheckbox';\n\nconst styles = theme => ({\n borderlessCell: {\n border: 0\n },\n rowHeader: {\n border: 0,\n color: theme.palette.primary.optionsText,\n padding: '8px 0 !important'\n },\n cornerCell: {\n width: 200,\n paddingBottom: '10px !important',\n paddingTop: '0 !important'\n }\n});\n\nclass ColorOptions extends Component {\n static propTypes = {\n options: object,\n setOption: func,\n classes: object,\n nightModeEnabled: bool\n };\n\n renderTableRowHeader = label => (\n \n \n {label}\n \n \n );\n\n renderTableRow = (optionKey, label) => {\n const { options, setOption, classes, nightModeEnabled } = this.props;\n optionKey = nightModeEnabled ? `${optionKey}_d` : optionKey;\n const option = options[optionKey];\n let textDecoration = 'none';\n\n if (option.u && option.s) {\n textDecoration = 'underline line-through';\n } else if (option.u) {\n textDecoration = 'underline';\n } else if (option.s) {\n textDecoration = 'line-through';\n }\n\n return (\n \n \n {`${label}: `}
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n };\n\n get styles() {\n return {\n optionsBody: {\n padding: 20,\n height: 460\n }\n };\n }\n\n render() {\n return (\n
\n \n \n \n \n Editing {this.props.nightModeEnabled ? 'Night Mode' : 'Standard'} Colors\n \n Text color\n \n Background color\n \n Underline\n Strikethrough\n \n \n \n {this.renderTableRowHeader('For file and archive comparison')}\n {this.renderTableRow('ice', 'Identical items')}\n {this.renderTableRow('ace', 'Added items')}\n {this.renderTableRow('dce', 'Deleted items')}\n {this.renderTableRow('cce', 'Changed items')}\n {this.renderTableRowHeader('For file comparison only')}\n {this.renderTableRow('ccc', 'Changed text in changed lines')}\n {this.renderTableRow('gce', 'Ignored text')}\n {this.renderTableRowHeader('For archive comparison only')}\n {this.renderTableRow('nce', 'Newer items')}\n {this.renderTableRow('oce', 'Older items')}\n \n
\n
\n );\n }\n}\n\nexport default withStyles(styles)(ColorOptions);\n","import React, { Component } from 'react';\nimport { object, func } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport ReactTooltip from 'react-tooltip';\n\nimport { optionsTooltips } from '../../util/constants';\nimport grippyImage from '../../grippy.png';\n\nconst styles = {\n formControlLabelRoot: {\n marginLeft: 0\n },\n checkBoxRoot: {\n width: 16,\n height: 16,\n margin: '8px 16px'\n }\n};\n\nclass DraggableCheckbox extends Component {\n static propTypes = {\n item: object,\n dragHandle: func,\n classes: object,\n commonProps: object\n };\n\n render() {\n const { item, dragHandle, classes, commonProps } = this.props;\n const { options, setOption, disabled } = commonProps;\n\n const innerStyles = {\n dragHandle: {\n cursor: 'move',\n width: 20,\n height: 16,\n background: `url(${grippyImage}) 30% 50% no-repeat no-repeat`\n }\n };\n\n return (\n
\n {dragHandle(
)}\n \n {\n setOption(item.key, event.target.checked);\n }}\n />\n }\n label={\n \n {item.label}\n \n }\n />\n
\n );\n }\n}\n\nexport default withStyles(styles)(DraggableCheckbox);\n","import React from 'react';\nimport { object, func, bool } from 'prop-types';\nimport { withTheme } from '@material-ui/core/styles';\nimport Icon from '@material-ui/core/Icon';\nimport DraggableList from 'react-draggable-list';\nimport sortBy from 'lodash/sortBy';\nimport forEach from 'lodash/forEach';\n\nimport { plugins } from '../../util/constants';\n\nimport DraggableCheckbox from './DraggableCheckbox';\n\nconst PluginOptions = ({ options, setOption, isPremium, openWhyPremiumDialog, theme }) => {\n const styles = {\n optionsBody: {\n padding: 20,\n height: 460,\n position: 'relative'\n },\n optionsGroupHeader: {\n fontSize: 14,\n marginBottom: 8,\n fontWeight: 700,\n color: theme.palette.primary.optionsText,\n display: 'flex',\n alignItems: 'center'\n },\n optionsGroup: {\n marginBottom: 8\n },\n pluginBlocker: {\n position: 'absolute',\n display: !isPremium ? 'block' : 'none',\n top: 0,\n right: 0,\n left: 0,\n height: 400,\n cursor: 'not-allowed',\n zIndex: 20\n },\n mustBePremiumContainer: {\n alignItems: 'center',\n position: 'absolute',\n bottom: 0,\n right: 10\n },\n premiumStar: {\n marginLeft: 5\n },\n mustBePremiumIcon: {\n fontSize: 14,\n marginRight: 10\n },\n mustBePremiumText: {\n fontSize: 12\n },\n mustBePremiumLink: {\n textDecoration: 'underline',\n cursor: 'pointer'\n }\n };\n\n const sortedPlugins = sortBy(plugins, plugin => options[`${plugin.key}_n`]);\n\n return (\n
\n
\n Arrange the plug-ins in your desired order of execution.\n {!isPremium && star}\n
\n
\n
\n {\n forEach(newPlugins, (newPlugin, index) => {\n setOption(`${newPlugin.key}_n`, index);\n });\n }}\n container={() => document.body}\n commonProps={{\n options: options,\n setOption: setOption,\n disabled: !isPremium\n }}\n />\n
\n\n \n star\n \n This feature is only available for \n \n premium\n \n  users.\n \n
\n
\n );\n};\n\nPluginOptions.propTypes = {\n isPremium: bool,\n options: object,\n setOption: func,\n openWhyPremiumDialog: func,\n theme: object\n};\n\nexport default withTheme()(PluginOptions);\n","import React, { Component } from 'react';\nimport { bool, func, string, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 400,\n width: 400\n }\n};\n\nclass DeleteProfileDialog extends Component {\n static propTypes = {\n open: bool,\n closeDeleteProfileDialog: func,\n onProfileDelete: func,\n profileToDelete: string,\n classes: object\n };\n\n render() {\n const {\n onProfileDelete,\n closeDeleteProfileDialog,\n profileToDelete,\n open,\n classes\n } = this.props;\n\n return (\n \n Delete Profile\n \n Are you sure you want to delete {profileToDelete}?\n \n \n \n Cancel\n \n {\n closeDeleteProfileDialog();\n onProfileDelete(profileToDelete);\n }}\n >\n OK\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(DeleteProfileDialog);\n","import React from 'react';\nimport { func, bool, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n root: {\n zIndex: 1500\n }\n};\n\nconst RecomparePromptDialog = ({ onRecompare, handleClose, open, classes }) => (\n \n Options Changed\n \n \n Some comparison options have changed. Would you like to re-compare now?\n \n \n \n \n {\n onRecompare();\n handleClose();\n }}\n >\n Yes\n \n \n \n);\n\nRecomparePromptDialog.propTypes = {\n onRecompare: func,\n handleClose: func,\n open: bool,\n classes: object\n};\n\nexport default withStyles(styles)(RecomparePromptDialog);\n","import React, { Component } from 'react';\nimport { bool, func, object } from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\n\nconst styles = {\n dialogPaper: {\n width: 400,\n maxWidth: 400\n }\n};\n\nclass SaveProfileDialog extends Component {\n state = {\n profileName: ''\n };\n\n static propTypes = {\n open: bool,\n closeSaveProfileDialog: func,\n onProfileSaveAs: func,\n classes: object\n };\n\n handleChange = e => {\n this.setState({\n profileName: e.target.value\n });\n };\n\n render() {\n const { onProfileSaveAs, closeSaveProfileDialog, open, classes } = this.props;\n const actions = [\n \n Cancel\n ,\n {\n closeSaveProfileDialog();\n onProfileSaveAs(this.state.profileName);\n }}\n disabled={isEmpty(this.state.profileName)}\n >\n Save\n \n ];\n\n return (\n \n Save Profile As\n \n \n \n {actions}\n \n );\n }\n}\n\nexport default withStyles(styles)(SaveProfileDialog);\n","import React, { Component } from 'react';\nimport { bool, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 380,\n width: 420\n }\n};\n\nclass WordWrapWarningDialog extends Component {\n static propTypes = {\n open: bool,\n onForceWordWrap: func,\n onKeepIgnoreOptions: func,\n classes: object\n };\n\n get actions() {\n const { onForceWordWrap, onKeepIgnoreOptions } = this.props;\n return (\n
\n \n \n
\n );\n }\n\n render() {\n const { open, classes } = this.props;\n return (\n \n \n The Word Wrap feature cannot be used together with Ignore options that use regular{' '}\n expressions to ignore line parts (Ignore Parts of Each Line and Ignore Comments). Do you\n want to enable Word Wrap and disable these Ignore options, or to enable the{' '}\n Ignore options, and disable Word Wrap?\n \n {this.actions}\n \n );\n }\n}\n\nexport default withStyles(styles)(WordWrapWarningDialog);\n","import React, { Component, Fragment } from 'react';\nimport { bool, func, string, array, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport Button from '@material-ui/core/Button';\nimport Icon from '@material-ui/core/Icon';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport find from 'lodash/find';\nimport ReactTooltip from 'react-tooltip';\n\nimport { setCurrentProfile, setUserOptions } from '../../util/options';\nimport CompareOptions from '../options/CompareOptions';\nimport ResultsOptions from '../options/ResultsOptions';\nimport ColorOptions from '../options/ColorOptions';\nimport PluginOptions from '../options/PluginOptions';\n\nimport DeleteProfileDialog from './DeleteProfileDialog';\nimport RecomparePromptDialog from './RecomparePromptDialog';\nimport SaveProfileDialog from './SaveProfileDialog';\nimport WordWrapWarningDialog from './WordWrapWarningDialog';\n\nconst styles = theme => ({\n dialogPaper: {\n maxHeight: 800,\n width: 840,\n maxWidth: 840,\n overflow: 'visible'\n },\n titleBar: {\n backgroundColor: theme.palette.optionsDialog.titleBarColor\n },\n tabWrapper: {\n display: 'flex',\n flexDirection: 'row'\n },\n tabsRoot: {\n borderBottom: '1px solid #e8e8e8'\n },\n tabsIndicator: {\n backgroundColor: '#1890ff'\n },\n tabRoot: {\n textTransform: 'initial',\n width: `${100 / 4}%`,\n height: 48,\n minHeight: 48,\n '&:hover': {\n color: '#40a9ff',\n opacity: 1\n },\n '&$tabSelected': {\n color: '#1890ff',\n fontWeight: 700\n },\n '&:focus': {\n color: '#40a9ff'\n }\n },\n tabSelected: {}\n});\n\nclass OptionsDialog extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n selectedTab: 0,\n renderId: 0,\n saveProfileDialogOpen: false,\n deleteProfileDialogOpen: false,\n recompareDialogOpen: false,\n profileToDelete: ''\n };\n }\n\n static propTypes = {\n open: bool,\n isPremium: bool,\n shouldPromptToRecompare: bool,\n closeDialog: func,\n sessionToken: string,\n optionsProfiles: array,\n options: object,\n newOptions: object,\n defaultOptions: object,\n classes: object,\n nightModeEnabled: bool,\n\n onProfileSelect: func,\n onProfileDelete: func,\n onProfileSaveAs: func,\n\n setNewOption: func,\n onSaveNewOptions: func,\n onResetNewOptions: func,\n onRecompare: func,\n openWhyPremiumDialog: func\n };\n\n saveAndCloseDialog = () => {\n const {\n defaultOptions,\n newOptions,\n options,\n sessionToken,\n shouldPromptToRecompare,\n onSaveNewOptions\n } = this.props;\n\n onSaveNewOptions();\n setUserOptions(\n sessionToken,\n Object.assign({ name: this.selectedProfile }, options, newOptions),\n defaultOptions\n );\n\n if (shouldPromptToRecompare && Object.keys(newOptions).length > 0) {\n this.toggleRecomparePrompt(true);\n }\n\n this.closeDialog();\n };\n\n closeDialog = () => {\n this.props.onResetNewOptions();\n this.props.closeDialog();\n };\n\n openSaveProfileDialog = () => {\n this.setState({\n saveProfileDialogOpen: true\n });\n };\n\n toggleRecomparePrompt = isOpen => {\n this.setState({\n recompareDialogOpen: isOpen\n });\n };\n\n saveProfileAs = profile => {\n this.props.onSaveNewOptions();\n setUserOptions(\n this.props.sessionToken,\n Object.assign({}, Object.assign({}, this.props.options, this.props.newOptions), {\n name: profile\n }),\n this.props.defaultOptions,\n () => {\n this.props.onProfileSaveAs(profile);\n }\n );\n };\n\n selectProfile = e => {\n setCurrentProfile(this.props.sessionToken, e.target.value, this.props.onProfileSelect);\n };\n\n setOption = (option, value) => {\n this.props.setNewOption({ [option]: value });\n this.setState(prevState => ({ renderId: prevState.renderId + 1 }));\n };\n\n resetOptions = options => {\n const { defaultOptions, setNewOption } = this.props;\n options.forEach(option => {\n setNewOption({ [option]: defaultOptions[option] });\n });\n this.setState(prevState => ({ renderId: prevState.renderId + 1 }));\n };\n\n resetAllOptions = () => {\n this.props.setNewOption(this.props.defaultOptions);\n };\n\n onDeleteClick = (e, profile) => {\n this.setState({\n deleteProfileDialogOpen: true,\n profileToDelete: profile\n });\n };\n\n forceWordWrap = () => {\n this.resetOptions(['ico', 'ipm', 'icr']);\n };\n\n keepIgnoreOptions = () => {\n this.resetOptions(['uww']);\n };\n\n get options() {\n return Object.assign({}, this.props.options, this.props.newOptions);\n }\n\n get selectedProfile() {\n const currentProfile = find(this.props.optionsProfiles, ['current_profile', 1]);\n return currentProfile ? currentProfile.options_name : 'Default Profile';\n }\n\n get profilesList() {\n const { optionsProfiles } = this.props;\n return optionsProfiles.map((profile, index) => (\n \n {profile.options_name !== 'Default Profile' ? (\n this.onDeleteClick(e, profile.options_name)}\n >\n close\n \n ) : (\n
\n )}\n {profile.options_name}\n \n ));\n }\n\n get shouldShowWordWrapWarning() {\n const { ico, ipm, icr, uww } = this.options;\n return uww && (ico || ipm || icr);\n }\n\n get styles() {\n return {\n actions: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n width: '100%'\n },\n tab: {\n flexDirection: 'row',\n height: 48\n },\n profileOptions: {\n display: 'flex',\n alignItems: 'center'\n },\n profileOptionsHeader: {\n fontWeight: 700\n }\n };\n }\n\n get actions() {\n return (\n
\n
\n {!this.props.isPremium && }\n \n \n Options Profile\n \n {this.profilesList}\n \n \n
\n \n Save As\n \n
\n
\n \n \n \n
\n
\n );\n }\n\n render() {\n const tabClasses = {\n wrapper: this.props.classes.tabWrapper,\n root: this.props.classes.tabRoot,\n selected: this.props.classes.tabSelected\n };\n\n return (\n \n \n Options\n \n this.setState({ selectedTab: newTab })}\n indicatorColor=\"primary\"\n classes={{ root: this.props.classes.tabsRoot }}\n >\n compare} classes={tabClasses} />\n assessment} classes={tabClasses} />\n color_lens} classes={tabClasses} />\n settings_input_component}\n classes={tabClasses}\n />\n \n {this.state.selectedTab === 0 && (\n \n )}\n {this.state.selectedTab === 1 && (\n \n )}\n {this.state.selectedTab === 2 && (\n \n )}\n {this.state.selectedTab === 3 && (\n \n )}\n \n {this.actions}\n \n\n {\n this.setState({ saveProfileDialogOpen: false });\n }}\n />\n {\n this.setState({ deleteProfileDialogOpen: false });\n }}\n />\n \n {\n this.toggleRecomparePrompt(false);\n }}\n onRecompare={this.props.onRecompare}\n />\n \n );\n }\n}\n\nexport default withStyles(styles)(OptionsDialog);\n","import React, { Component } from 'react';\nimport { bool, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 500,\n width: 500\n }\n};\n\nclass AboutDialog extends Component {\n static propTypes = {\n open: bool,\n closeDialog: func,\n configuration: object,\n openWhyPremiumDialog: func,\n classes: object\n };\n\n render() {\n const { open, closeDialog, configuration, openWhyPremiumDialog, classes } = this.props;\n\n return (\n \n {`DiffNow: Online Comparison Tool (v${configuration.version})`}\n \n
\n DiffNow lets you compare text files, documents, binary files, and archives up to 2048 KB\n (8192 KB for{' '}\n \n premium users\n \n ) in size. You can either upload the files you wish to compare or enter their URLs.\n Results are returned as an interactive HTML report.\n
\n
\n DiffNow is powered by{' '}\n \n ExamDiff Pro\n {' '}\n and uses all of the comparison plug-ins in the ExamDiff Pro{' '}\n plug-in library.\n
\n
\n All uploaded content and generated diff reports are securely encrypted using the DES-X\n symmetric-key encryption algorithm. All uploaded content is deleted immediately after\n comparison.\n
\n
\n If you are a premium user, you can always cancel subscription via the DiffNow user menu.\n You need to log into your account, click on your user name in the top right corner, then\n select Manage Premium Subscription, and from there click on Cancel Premium.\n
\n
\n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(AboutDialog);\n","import React from 'react';\nimport { bool, string, array, object } from 'prop-types';\nimport classNames from 'classnames';\nimport { withStyles } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\n\nconst styles = {\n paper: {\n width: 'calc(50% - 10px)'\n },\n title: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 90,\n fontSize: 32,\n fontWeight: 300,\n marginBottom: 10\n },\n fontStandard: {\n backgroundColor: '#EEEEEE',\n color: 'black'\n },\n fontPremium: {\n backgroundColor: '#64B5F6',\n color: 'white'\n },\n featureRow: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center'\n },\n featureContents: {\n padding: 12\n },\n featureSeparator: {\n backgroundColor: '#DDDDDD',\n height: 1,\n width: '90%'\n },\n pricing: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 64,\n fontWeight: 300,\n fontSize: 24,\n marginTop: 10\n },\n premiumPricingContainer: {\n display: 'flex',\n justifyContent: 'space-around',\n alignItems: 'center',\n width: '100%',\n height: '100%'\n },\n premiumPricingOption: {\n flex: 2,\n textAlign: 'center',\n position: 'relative',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n },\n premiumPricingSeparator: {\n backgroundColor: 'white',\n width: 1,\n height: '70%'\n },\n premiumPricingHighlighted: {\n padding: '5px 10px',\n borderRadius: 3,\n backgroundColor: '#42A5F5',\n boxShadow: '1px 1px 5px rgba(100, 100, 100, 0.2)'\n },\n premiumPricingUnhighlighted: {\n fontSize: 20\n }\n};\n\nconst FeatureComparisonPane = ({ classes, title, premium, features }) => (\n \n \n {title}\n
\n {features.map((feature, index) => (\n
\n
\n {index !== features.length - 1 ?
: null}\n
\n ))}\n \n {premium ? (\n
\n
\n
$19.99 / year
\n
\n
\n
\n $2.99 / month\n
\n
\n ) : (\n
FREE
\n )}\n
\n \n);\n\nFeatureComparisonPane.propTypes = {\n title: string,\n premium: bool,\n features: array,\n classes: object\n};\n\nexport default withStyles(styles)(FeatureComparisonPane);\n","import React, { Component, Fragment } from 'react';\nimport { bool, object, func } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Icon from '@material-ui/core/Icon';\nimport Button from '@material-ui/core/Button';\nimport ReactTooltip from 'react-tooltip';\n\nimport edpLogoSmall from '../../edp-small.png';\nimport { getFeatures } from '../../util/constants';\nimport { examDiffProUrl, isPremium } from '../../util/common';\nimport FeatureComparisonPane from '../FeatureComparisonPane';\n\nconst styles = {\n dialogPaper: {\n width: 800,\n maxWidth: 800,\n overflow: 'visible'\n },\n dialogContent: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n edpFooterContainer: {\n position: 'absolute',\n bottom: 15\n },\n edpFooter: {\n display: 'flex',\n alignItems: 'center'\n },\n buttonWithMargin: {\n marginLeft: 10\n }\n};\n\nclass WhyPremiumDialog extends Component {\n static propTypes = {\n open: bool,\n user: object,\n closeDialog: func,\n openCheckoutDialog: func,\n classes: object,\n configuration: object\n };\n\n render() {\n const { open, user, closeDialog, classes, openCheckoutDialog, configuration } = this.props;\n const examDiffUrl = examDiffProUrl('diffnow-why-premium');\n const features = getFeatures(configuration);\n\n return (\n \n Why Premium?\n \n
\n \n \n
\n
\n
\n \n Want infinitely more features? Try{' '}\n \n ExamDiff Pro\n \n \n \"ExamDiff\n
\n
\n
\n \n \n \n {!user && }\n \n \n {isPremium(user) ? 'Already Subscribed' : 'Buy Subscription'}\n shopping_cart\n \n
\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(WhyPremiumDialog);\n","import React from 'react';\nimport PropTypes, { string, func, bool } from 'prop-types';\nimport StripeCheckout from 'react-stripe-checkout';\n\nconst CheckoutButton = ({\n isPaymentMethodUpdate,\n subscriptionType,\n email,\n onCheckout,\n disabled,\n children\n}) => (\n \n {children}\n \n);\n\nCheckoutButton.propTypes = {\n isPaymentMethodUpdate: bool,\n subscriptionType: string,\n email: string,\n onCheckout: func,\n disabled: bool,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]).isRequired\n};\n\nexport default CheckoutButton;\n","import React, { Component } from 'react';\nimport { bool, object, func, string } from 'prop-types';\nimport { Amplitude } from '@amplitude/react-amplitude';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormLabel from '@material-ui/core/FormLabel';\nimport Typography from '@material-ui/core/Typography';\nimport Icon from '@material-ui/core/Icon';\nimport ReactTooltip from 'react-tooltip';\n\nimport CheckoutButton from '../CheckoutButton';\n\nconst styles = theme => ({\n dialogPaper: {\n width: 600,\n maxWidth: 600,\n overflow: 'visible'\n },\n formLabel: {\n marginBottom: 10\n },\n radioControl: {\n height: 40\n },\n checkBoxContainer: {\n marginRight: 0\n },\n checkBox: {\n height: 40\n },\n disclaimerText: {\n fontSize: 14,\n color: theme.palette.disclaimerTextColor,\n margin: '10px 0'\n },\n termsOfServiceForm: {\n display: 'flex',\n alignItems: 'center'\n },\n termsOfServiceText: {\n fontSize: 14,\n color: theme.palette.disclaimerTextColor\n },\n termsOfServiceLink: {\n cursor: 'pointer'\n }\n});\n\nclass CheckoutDialog extends Component {\n static propTypes = {\n open: bool,\n user: object,\n premiumSource: string,\n closeDialog: func,\n onSubscribe: func,\n openTermsOfService: func,\n classes: object\n };\n\n state = {\n selectedPriceModel: 'year',\n termsOfServiceChecked: false\n };\n\n selectPriceModel = event => {\n this.setState({ selectedPriceModel: event.target.value });\n };\n\n handleChangeTOSChecked = event => {\n this.setState({ termsOfServiceChecked: event.target.checked });\n };\n\n render() {\n const { open, user, closeDialog, onSubscribe, openTermsOfService, classes } = this.props;\n\n const date = new Date().toLocaleDateString();\n const price = this.state.selectedPriceModel === 'year' ? '$19.99 per year' : '$2.99 per month';\n\n return (\n \n Checkout\n \n \n \n Choose a subscription plan:\n \n \n }\n label=\"Yearly ($19.99 / year)\"\n className={classes.radioControl}\n />\n }\n label=\"Monthly ($2.99 / month)\"\n className={classes.radioControl}\n />\n \n \n
\n Your {`${this.state.selectedPriceModel}ly`} DiffNow Subscription will start\n on \n {date}. You will be billed {price} starting {date}.\n Your subscription will continue until you cancel it. You may cancel your subscription\n anytime by logging in to your account and navigating to the Manage Premium Subscription\n dialog from the user menu.\n
\n
\n \n }\n />\n
\n I agree to the above and the{' '}\n \n DiffNow Terms of Service\n \n
\n
\n
\n \n \n \n {({ logEvent }) => (\n {\n logEvent('PURCHASE_SUBSCRIPTION', {\n source: this.props.premiumSource,\n type: this.state.selectedPriceModel\n });\n onSubscribe(\n token,\n this.state.selectedPriceModel === 'year'\n ? 'diffnow-yearly-plan'\n : 'diffnow-monthly-plan-299',\n this.props.premiumSource\n );\n }}\n >\n {!(user ? user.email : '') && }\n \n \n Checkout\n shopping_cart\n \n
\n \n )}\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(CheckoutDialog);\n","import React, { Component } from 'react';\nimport { bool, func } from 'prop-types';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\n\nimport { changePassword } from '../../util/user';\n\nexport default class ChangePasswordDialog extends Component {\n state = {\n oldPassword: '',\n newPassword: '',\n newPasswordConfirm: '',\n error: null\n };\n\n static propTypes = {\n open: bool,\n closeDialog: func\n };\n\n resetState = () => {\n this.setState({\n oldPassword: '',\n newPassword: '',\n newPasswordConfirm: '',\n error: null\n });\n };\n\n handleChange = name => event => {\n this.setState(\n {\n [name]: event.target.value\n },\n this.validateNewPassword\n );\n };\n\n get isPasswordTooShort() {\n return this.state.newPassword.length < 6;\n }\n\n get submitDisabled() {\n return (\n this.isPasswordTooShort ||\n this.state.newPassword !== this.state.newPasswordConfirm ||\n !this.state.oldPassword\n );\n }\n\n validateNewPassword = () => {\n if (this.state.newPassword !== this.state.newPasswordConfirm) {\n this.setState({ error: 'Your passwords must match!' });\n } else {\n this.setState({ error: null });\n }\n };\n\n handleChangePassword = () => {\n const { oldPassword, newPassword } = this.state;\n const sessionToken = localStorage.getItem('diffNowSessionToken');\n\n changePassword(\n sessionToken,\n oldPassword,\n newPassword,\n () => {\n this.props.closeDialog();\n this.resetState();\n },\n error => {\n this.setState({ error: error });\n }\n );\n };\n\n render() {\n const { open, closeDialog } = this.props;\n\n return (\n \n Change Password\n \n \n \n \n {this.state.error && (\n
{this.state.error}
\n )}\n
\n \n {\n this.resetState();\n closeDialog();\n }}\n >\n Cancel\n \n \n Change Password\n \n \n
\n );\n }\n}\n","import React, { Component } from 'react';\nimport { bool, string, func } from 'prop-types';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Button from '@material-ui/core/Button';\n\nimport { changePasswordForReset } from '../../util/user';\n\nexport default class ChangePasswordForResetDialog extends Component {\n state = {\n newPassword: '',\n newPasswordConfirm: '',\n error: null\n };\n\n static propTypes = {\n open: bool,\n emailAddress: string,\n confirmationKey: string,\n closeDialog: func\n };\n\n resetState = () => {\n this.setState({\n newPassword: '',\n newPasswordConfirm: '',\n error: null\n });\n };\n\n handleChange = name => event => {\n this.setState(\n {\n [name]: event.target.value\n },\n this.validateNewPassword\n );\n };\n\n get isPasswordTooShort() {\n return this.state.newPassword.length < 6;\n }\n\n get submitDisabled() {\n return this.isPasswordTooShort || this.state.newPassword !== this.state.newPasswordConfirm;\n }\n\n validateNewPassword = () => {\n if (this.state.newPassword !== this.state.newPasswordConfirm) {\n this.setState({ error: 'Your passwords must match!' });\n } else {\n this.setState({ error: null });\n }\n };\n\n handleResetPassword = () => {\n const { newPassword } = this.state;\n const { emailAddress, confirmationKey } = this.props;\n\n changePasswordForReset(\n emailAddress,\n confirmationKey,\n newPassword,\n () => {\n this.props.closeDialog();\n this.resetState();\n },\n error => {\n this.setState({ error: error });\n }\n );\n };\n\n render() {\n const { open, closeDialog } = this.props;\n\n return (\n \n Reset Password\n \n \n \n {this.state.error && (\n
{this.state.error}
\n )}\n
\n \n {\n this.resetState();\n closeDialog();\n }}\n >\n Cancel\n \n \n Reset Password\n \n \n
\n );\n }\n}\n","import React from 'react';\nimport { func, bool, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n root: {\n zIndex: 1500\n },\n cancelButton: {\n color: '#ff1744'\n }\n};\n\nconst ConfirmCancelSubscriptionDialog = ({ cancelSubscription, handleClose, open, classes }) => (\n \n Confirm Cancel Subscription\n \n \n Are you sure you want to cancel your DiffNow Premium subscription? You can always reactivate\n your premium subscription in the Manage Premium Subscription dialog up until the\n expiration of your subscription.\n \n \n \n {\n cancelSubscription();\n handleClose();\n }}\n >\n Cancel Subscription\n \n \n \n \n);\n\nConfirmCancelSubscriptionDialog.propTypes = {\n cancelSubscription: func,\n handleClose: func,\n open: bool,\n classes: object\n};\n\nexport default withStyles(styles)(ConfirmCancelSubscriptionDialog);\n","import React, { Component, Fragment } from 'react';\nimport { bool, object, func } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport Icon from '@material-ui/core/Icon';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Divider from '@material-ui/core/Divider';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport {\n getPremiumStatus,\n cancelSubscription,\n reactivateSubscription,\n updatePaymentMethod\n} from '../../util/subscription';\nimport CheckoutButton from '../CheckoutButton';\n\nimport ConfirmCancelSubscriptionDialog from './ConfirmCancelSubscriptionDialog';\n\nconst styles = {\n progressContainer: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n height: 331\n },\n dialogPaper: {\n maxWidth: 725,\n width: 725\n },\n sectionHeader: {\n fontSize: 16,\n marginTop: 12,\n marginBottom: 12,\n color: '#777'\n },\n sectionDivider: {\n marginTop: 12\n },\n paragraph: {\n marginBottom: 5,\n marginLeft: 12,\n fontSize: 14,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center'\n },\n cancelButton: {\n borderColor: '#ff1744',\n color: '#ff1744'\n },\n cardBrand: {\n fontSize: 12,\n textTransform: 'capitalize'\n },\n active: {\n fontWeight: 'bold',\n color: 'red'\n },\n inactive: {\n fontWeight: 'bold',\n color: 'green'\n },\n help: {\n marginTop: 10,\n marginLeft: 12,\n fontSize: 12\n },\n loadingError: {\n color: 'red'\n },\n error: {\n fontSize: 12,\n marginTop: 10,\n color: 'red'\n }\n};\n\nclass ManagePremiumSubscriptionDialog extends Component {\n state = {\n plan: null,\n isCancelled: null,\n currentPeriodStart: null,\n currentPeriodEnd: null,\n cardLastFour: null,\n cardBrand: null,\n showPaymentMethodUpdateToast: false,\n error: null,\n loadingError: null,\n isPremiumStatusLoading: true,\n isConfirmDialogOpen: false\n };\n\n static propTypes = {\n open: bool,\n user: object,\n closeDialog: func,\n classes: object\n };\n\n async componentDidUpdate(prevProps) {\n const { open, user } = this.props;\n\n if (\n open &&\n user &&\n user.email &&\n (open !== prevProps.open || user.email !== prevProps.user.email)\n ) {\n const sessionToken = localStorage.getItem('diffNowSessionToken');\n\n try {\n this.setState({ isPremiumStatusLoading: true });\n\n const subscriptionStatus = await getPremiumStatus(sessionToken);\n if (subscriptionStatus.error) {\n this.setState({ loadingError: subscriptionStatus.error, isPremiumStatusLoading: false });\n } else {\n this.setState({\n plan: subscriptionStatus.subscription.PlanName,\n isCancelled: subscriptionStatus.subscription.IsCancelled,\n currentPeriodStart: subscriptionStatus.subscription.CurrentPeriodStart,\n currentPeriodEnd: subscriptionStatus.subscription.CurrentPeriodEnd,\n cardLastFour: subscriptionStatus.subscription.CardLastFour,\n cardBrand: subscriptionStatus.subscription.CardBrand,\n error: null,\n isPremiumStatusLoading: false\n });\n }\n } catch (error) {\n this.setState({ loadingError: error, isPremiumStatusLoading: false });\n }\n }\n }\n\n handleCancelSubscription = () => {\n const sessionToken = localStorage.getItem('diffNowSessionToken');\n\n cancelSubscription(\n sessionToken,\n cancelSubscriptionStatus => {\n if (cancelSubscriptionStatus.error) {\n this.setState({ error: cancelSubscriptionStatus.error });\n } else {\n this.setState({ isCancelled: true });\n }\n },\n error => {\n this.setState({ error: error });\n }\n );\n };\n\n handleReactivateSubscription = () => {\n const sessionToken = localStorage.getItem('diffNowSessionToken');\n\n reactivateSubscription(\n sessionToken,\n reactivateSubscriptionStatus => {\n if (reactivateSubscriptionStatus.error) {\n this.setState({ error: reactivateSubscriptionStatus.error });\n } else {\n this.setState({ isCancelled: false });\n }\n },\n error => {\n this.setState({ error: error });\n }\n );\n };\n\n handlePaymentMethodUpdate = tokenId => {\n const sessionToken = localStorage.getItem('diffNowSessionToken');\n\n updatePaymentMethod(\n sessionToken,\n tokenId,\n updatePaymentMethodStatus => {\n if (updatePaymentMethodStatus.error) {\n this.setState({ error: updatePaymentMethodStatus.error });\n } else {\n this.setState({ showPaymentMethodUpdateToast: true });\n this.props.closeDialog();\n }\n },\n error => {\n this.setState({ error: error });\n }\n );\n };\n\n handleOpenConfirmDialog = () => {\n this.setState({ isConfirmDialogOpen: true });\n };\n\n handleCloseConfirmDialog = () => {\n this.setState({ isConfirmDialogOpen: false });\n };\n\n handleClosePaymentMethodUpdateToast = () => {\n this.setState({ showPaymentMethodUpdateToast: false });\n };\n\n render() {\n const { open, user, closeDialog, classes } = this.props;\n const subscriptionPlans = {\n 'diffnow-yearly-plan': 'Yearly',\n 'diffnow-monthly-plan': 'Monthly',\n 'diffnow-monthly-plan-299': 'Monthly'\n };\n const parseDate = date => new Date(date).toLocaleDateString();\n\n const dialogContent = this.state.isPremiumStatusLoading ? (\n \n ) : (\n
\n
Your Subscription
\n\n
\n Current subscription plan: {subscriptionPlans[this.state.plan]}\n
\n\n
\n Current subscription period: {parseDate(this.state.currentPeriodStart)} -{' '}\n {parseDate(this.state.currentPeriodEnd)}\n
\n\n \n\n
Payment Information
\n\n
\n
\n Your current payment method is: \n \n ●●●● ●●●● ●●●● {this.state.cardLastFour}{' '}\n ({this.state.cardBrand})\n \n
\n\n
\n \n {({ logEvent }) => (\n {\n logEvent('UPDATE_PAYMENT_METHOD');\n this.handlePaymentMethodUpdate(token.id);\n }}\n >\n \n \n )}\n \n
\n
\n\n \n\n
Cancel Subscription
\n\n
\n
\n Your subscription is: \n \n {this.state.isCancelled ? 'Inactive' : 'Active'}\n \n
\n\n
\n \n {({ logEvent }) => (\n <>\n {this.state.loadingError ? null : this.state.isCancelled ? (\n {\n logEvent('REACTIVATE_SUBSCRIPTION');\n this.handleReactivateSubscription();\n }}\n >\n Reactivate Subscription\n \n ) : (\n {\n logEvent('CANCEL_SUBSCRIPTION');\n this.handleOpenConfirmDialog();\n }}\n >\n Cancel Subscription\n \n )}\n \n )}\n \n
\n
\n\n
\n {this.state.isCancelled ? (\n \n Reactivating your subscription will not alter your current subscription and will\n reinstate future recurring subscriptions.\n \n ) : (\n \n Cancelling your subscription will not end your current subscription period, but will\n stop future recurring payments and subscriptions. You can reactivate your subscription\n at any time.\n \n )}\n
\n
\n );\n\n return (\n \n \n Manage Premium Subscription\n\n \n {this.state.loadingError ? (\n
{this.state.loadingError}
\n ) : (\n dialogContent\n )}\n {this.state.error &&
{this.state.error}
}\n \n \n \n \n
\n\n \n\n Payment method updated successfully!}\n action={[\n \n close\n \n ]}\n />\n
\n );\n }\n}\n\nexport default withStyles(styles)(ManagePremiumSubscriptionDialog);\n","import React, { Component } from 'react';\nimport { bool, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 650,\n width: 650\n }\n};\n\nclass TermsOfServiceDialog extends Component {\n static propTypes = {\n open: bool,\n closeDialog: func,\n classes: object\n };\n\n render() {\n const { open, closeDialog, classes } = this.props;\n\n return (\n \n Terms of Service\n \n
\n At{' '}\n \n PrestoSoft LLC\n \n we value and protect your privacy. These Terms of Service explain how we collect, use,\n and protect information collected from users (each, a "User") of the\n www.diffnow.com website ("Site").\n
\n
\n How we use uploaded data\n
\n
\n As part of comparison, User may upload files or clipboard contents to the Site. We\n delete all uploaded data from the Site during file comparison or, if no comparison is\n subsequently performed, at the end of the browsing session. Comparison results are\n deleted from the Site at the end of the browsing session.\n
\n
\n We collect only the following information for quality assurance purposes: the names of\n the files or URLs compared by User and whether and when any errors occurred during\n comparison.\n
\n
\n The User shall not upload data of a sensitive nature as part of User{\"'\"}s interaction\n with the Site.\n
\n
\n If the User utilizes the Site to save comparison reports for future reuse, we do not\n share these reports with third parties. Only the User has the ability to view or share\n their reports. The user can also delete their saved reports at any point in time.\n
\n
\n How we use your email address\n
\n
\n We may use your email address to send announcements about new DiffNow features. We will\n not pass or sell your email address to third parties.\n
\n
\n Web browser cookies\n
\n
\n Our Site may use "cookies" to enhance User experience. User{\"'\"}s web browser\n places cookies on their hard drive for record-keeping purposes and sometimes to track\n information about them. User may choose to set their web browser to refuse cookies, or\n to alert you when cookies are being sent. If they do so, note that some parts of the\n Site may not function properly.\n
\n
\n How we protect your information\n
\n
\n We adopt appropriate data collection, storage and processing practices and security\n measures to protect against unauthorized access, alteration, disclosure or destruction\n of your personal information, username, password, transaction information and data\n stored on our Site.\n
\n
\n Sharing your personal information\n
\n
\n We do not sell, trade, or rent User{\"'\"}s personal identification information to others.\n
\n
\n Changes to these terms of service\n
\n
\n We have the discretion to update these terms of service at any time. We encourage Users\n to frequently check this page for any changes to stay informed about how we are helping\n to protect the personal information we collect. You acknowledge and agree that it is\n your responsibility to review this privacy policy periodically and become aware of\n modifications.\n
\n
\n Your acceptance of these terms\n
\n
\n By using this Site, you signify your acceptance of this policy. If you do not agree to\n this policy, please do not use our Site. Your continued use of the Site following the\n posting of changes to this policy will be deemed your acceptance of those changes.\n
\n
\n Contacting us\n
\n
\n If you have any questions about these Terms of Service, please contact us at:\n
\n
\n
PrestoSoft LLC
\n
P.O. Box 3611
\n
Thousand Oaks, CA 91359
\n
diffnow@prestosoft.com
\n
\n
This document was last updated in 2018.
\n
\n \n \n \n
\n );\n }\n}\n\nexport default withStyles(styles)(TermsOfServiceDialog);\n","import axios from 'axios';\n\nimport { DIFFNOW_API_URL } from './constants';\n\nconst MAIL_URL = `${DIFFNOW_API_URL}/mail`;\n\nexport function sendMail(name, fromName, replyTo, subject, message, findOut, onSuccess, onError) {\n axios\n .post(`${MAIL_URL}/sendMail`, {\n name: name,\n fromName: fromName,\n replyTo: replyTo,\n subject: subject,\n message: message,\n findOut: findOut\n })\n .then(response => {\n onSuccess(response.data.result);\n })\n .catch(err => {\n if (err.response) {\n onError(err.response.data.result);\n } else {\n onError(err.message);\n }\n });\n}\n","import React, { Component } from 'react';\nimport { bool, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\n\nimport { sendMail } from '../../util/mail';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 550,\n width: 550\n }\n};\n\nclass ContactDialog extends Component {\n state = {\n name: '',\n email: '',\n subject: '',\n message: '',\n findOut: '',\n error: null\n };\n\n static propTypes = {\n open: bool,\n closeDialog: func,\n classes: object\n };\n\n handleChange = name => event => {\n this.setState({\n [name]: event.target.value\n });\n };\n\n sendContactMail = () => {\n sendMail(\n this.state.name,\n this.state.name,\n this.state.email,\n this.state.subject,\n this.state.message,\n this.state.findOut,\n this.props.closeDialog,\n errorMessage => {\n this.setState({ error: errorMessage });\n }\n );\n };\n\n render() {\n const { open, closeDialog, classes } = this.props;\n const style = { width: '100%', marginBottom: 5 };\n const { error } = this.state;\n\n return (\n \n Contact Us\n \n
\n \n \n \n \n \n \n {error && (\n \n {error}\n
\n )}\n \n \n \n ,\n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(ContactDialog);\n","import React, { Component, Fragment } from 'react';\nimport { bool, func, string, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport TextField from '@material-ui/core/TextField';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Input from '@material-ui/core/Input';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Button from '@material-ui/core/Button';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport { storeResults } from '../../util/reports';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 550,\n width: 550\n }\n};\n\nclass StoreResultsDialog extends Component {\n state = {\n title: undefined,\n duration: 'week',\n loading: false,\n shareLink: '',\n error: null\n };\n\n static propTypes = {\n open: bool,\n reportId: string,\n firstTitle: string,\n secondTitle: string,\n user: object,\n closeDialog: func,\n classes: object\n };\n\n resetState = () => {\n this.setState({\n title: undefined,\n duration: 'week',\n loading: false,\n shareLink: '',\n error: null\n });\n };\n\n storeResults = () => {\n const { reportId, user } = this.props;\n const { title, duration } = this.state;\n const currentTitle = title || this.defaultTitle;\n\n this.setState({ loading: true });\n\n storeResults(\n duration,\n currentTitle,\n reportId,\n user.sessionToken,\n result => {\n this.setState({ shareLink: `/report/${result}`, loading: false });\n },\n error => {\n this.setState({ error: error, loading: false });\n }\n );\n };\n\n get defaultTitle() {\n const firstTitle = this.props.firstTitle === '' ? 'Clip 1' : this.props.firstTitle;\n const secondTitle = this.props.secondTitle === '' ? 'Clip 2' : this.props.secondTitle;\n return `${firstTitle} - ${secondTitle}`;\n }\n\n get actions() {\n const { closeDialog } = this.props;\n const { title, shareLink, loading } = this.state;\n\n if (shareLink) {\n return (\n {\n this.resetState();\n closeDialog();\n }}\n >\n OK\n \n );\n } else {\n return (\n \n {\n this.resetState();\n closeDialog();\n }}\n >\n Cancel\n \n \n {({ logEvent }) => (\n {\n logEvent('SAVE_REPORT', { duration: this.state.duration });\n this.storeResults();\n }}\n >\n Store\n \n )}\n \n \n );\n }\n }\n\n get body() {\n const { duration, shareLink, loading, error } = this.state;\n\n if (!shareLink && !loading) {\n return (\n
\n
\n Click the button below to store this comparison report on our servers and receive a\n permalink, so you can share it with colleagues. You can view all of your saved reports\n by using the Saved Reports command.\n
\n
\n this.setState({ title: e.target.value })}\n />\n \n \n Duration\n \n this.setState({ duration: e.target.value })}\n input={}\n >\n 1 hour\n 1 day\n 1 week\n 1 month\n 1 year\n forever\n \n \n
\n {error && (\n \n {error}\n
\n )}\n \n );\n } else if (loading) {\n return (\n
\n \n
\n );\n } else {\n const durationString = duration === 'forever' ? duration : `one ${duration}`;\n const fullShareLink = `${window.location.origin}${shareLink}`;\n\n return (\n
\n
{`Your comparison report will be stored for ${durationString}. Your unique report URL is:`}
\n \n
\n );\n }\n }\n\n render() {\n const { open, classes, closeDialog } = this.props;\n\n return (\n \n Share Results\n {this.body}\n {this.actions}\n \n );\n }\n}\n\nexport default withStyles(styles)(StoreResultsDialog);\n","import React, { Component } from 'react';\nimport { bool, string, func, object } from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\n\nconst styles = {\n dialogPaper: {\n maxWidth: 450,\n width: 450\n }\n};\n\nclass ActivationDialog extends Component {\n static propTypes = {\n open: bool,\n message: string,\n closeDialog: func,\n classes: object\n };\n\n render() {\n const { open, message, closeDialog, classes } = this.props;\n\n return (\n \n DiffNow Account Activation\n {message}\n \n \n \n \n );\n }\n}\n\nexport default withStyles(styles)(ActivationDialog);\n","import React, { Component, Fragment } from 'react';\nimport { bool, func, array, object } from 'prop-types';\nimport { withStyles, withTheme } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport Icon from '@material-ui/core/Icon';\n\nconst styles = {\n dialogPaper: {\n maxHeight: 600,\n width: 600\n }\n};\n\nclass ChangeLogDialog extends Component {\n static propTypes = {\n open: bool,\n closeDialog: func,\n changeLog: array,\n classes: object,\n theme: object\n };\n\n render() {\n const { open, closeDialog, changeLog, classes, theme } = this.props;\n\n return (\n \n \n What's New in DiffNow\n \n star =\n DiffNow Premium users only\n \n \n \n {changeLog.map((versionChanges, versionChangesIndex) => (\n \n
\n v{versionChanges.version} -{' '}\n {versionChanges.date}\n
\n
    \n {versionChanges.changes.map((changes, changesIndex) => (\n
  • \n \n {changes.premiumOnly && (\n star\n )}\n
  • \n ))}\n
\n
\n ))}\n
\n \n {\n closeDialog();\n }}\n >\n OK\n \n \n
\n );\n }\n}\n\nexport default withTheme()(withStyles(styles)(ChangeLogDialog));\n","import React from 'react';\nimport { string, func, object, bool } from 'prop-types';\nimport { withTheme } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Icon from '@material-ui/core/Icon';\n\nconst UserMenuButton = ({\n textColor,\n backgroundColor,\n label,\n action,\n icon,\n labelStyle,\n disabled,\n iconLeft,\n theme\n}) => (\n \n {iconLeft && {icon}}\n
{label}
\n {!iconLeft && {icon}}\n \n);\n\nUserMenuButton.propTypes = {\n textColor: string,\n backgroundColor: string,\n label: string,\n action: func,\n icon: string,\n labelStyle: object,\n disabled: bool,\n iconLeft: bool,\n theme: object\n};\n\nexport default withTheme()(UserMenuButton);\n","import React, { Component } from 'react';\nimport Media from 'react-media';\nimport { func, object, array } from 'prop-types';\nimport { NavLink } from 'react-router-dom';\nimport find from 'lodash/find';\nimport noop from 'lodash/noop';\nimport { withTheme } from '@material-ui/core/styles';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Icon from '@material-ui/core/Icon';\nimport Button from '@material-ui/core/Button';\nimport Fade from '@material-ui/core/Fade';\nimport ReactTooltip from 'react-tooltip';\n/* eslint-disable import/no-unassigned-import */\nimport 'whatwg-fetch';\n/* eslint-enable import/no-unassigned-import */\n\nimport { logout } from '../util/user';\nimport { setCurrentProfile } from '../util/options';\nimport { isPremium } from '../util/common';\nimport UserMenuButton from '../components/users/UserMenuButton';\nimport diffnowLogo from '../diffnow.png';\n\nclass TitleBar extends Component {\n static propTypes = {\n user: object,\n optionsProfiles: array,\n onUserLogout: func,\n onProfileSelect: func,\n toggleNightMode: func,\n openLoginDialog: func,\n openSavedReportsDialog: func,\n openWhyPremiumDialog: func,\n openChangePasswordDialog: func,\n openManagePremiumSubscriptionDialog: func,\n theme: object\n };\n\n state = {\n userOpen: false,\n userAnchorEl: null,\n profilesOpen: false,\n profilesAnchorEl: null\n };\n\n openProfilesMenu = event => {\n event.preventDefault();\n\n this.setState({\n profilesOpen: true,\n profilesAnchorEl: event.currentTarget\n });\n };\n\n closeProfilesMenu = () => {\n this.setState({ profilesOpen: false });\n };\n\n openUserMenu = event => {\n event.preventDefault();\n\n this.setState({\n userOpen: true,\n userAnchorEl: event.currentTarget\n });\n };\n\n closeUserMenu = () => {\n this.setState({ userOpen: false });\n };\n\n handleClickChangePassword = () => {\n this.props.openChangePasswordDialog();\n this.closeUserMenu();\n };\n\n handleClickManagePremiumSubscription = () => {\n this.props.openManagePremiumSubscriptionDialog();\n this.closeUserMenu();\n };\n\n handleToggleNightMode = () => {\n this.props.toggleNightMode();\n this.closeUserMenu();\n };\n\n handleClickLogout = () => {\n logout(this.props.user.sessionToken, this.props.onUserLogout);\n this.closeUserMenu();\n };\n\n selectProfile = profile => {\n setCurrentProfile(this.props.user.sessionToken, profile, this.props.onProfileSelect);\n this.closeProfilesMenu();\n };\n\n redirectToClassicDiffNow = () => {\n window.location.href = 'https://www.diffnow.com/v1';\n };\n\n get styles() {\n return {\n outer: {\n height: 64\n },\n logo: {\n marginTop: 10,\n height: '70%'\n },\n buttonList: {\n display: 'flex'\n },\n buttonContainer: {\n marginLeft: 10\n },\n getPremiumButton: {\n marginLeft: 20,\n display: 'flex',\n alignItems: 'center'\n },\n buttonText: {\n color: 'white'\n }\n };\n }\n\n optionsProfiles(matches) {\n const { optionsProfiles, user, theme } = this.props;\n\n const currentProfile = find(optionsProfiles, ['current_profile', 1]);\n const selectedProfile = currentProfile ? currentProfile.options_name : 'Default Profile';\n const profilesList = optionsProfiles.map((profile, index) => (\n this.selectProfile(profile.options_name)}\n >\n {profile.options_name}\n \n ));\n\n return (\n
\n {!isPremium(user) && }\n \n \n
\n \n {profilesList}\n \n \n );\n }\n\n userMenu = matches => {\n if (this.props.user) {\n return (\n
\n {this.optionsProfiles(matches)}\n
\n \n
\n
\n \n
\n
\n \n \n \n vpn_key\n Change Password\n \n {this.props.user.isPremium && (\n \n stars\n Manage Premium Subscription\n \n )}\n \n exit_to_app\n Logout\n \n \n
\n
\n );\n } else {\n return (\n
\n
\n \n
\n
\n \n
\n
\n );\n }\n };\n\n title(matches) {\n return (\n \n \n \"DiffNow\"\n \n {!isPremium(this.props.user) ? (\n
\n this.props.openWhyPremiumDialog('TITLE_BAR')}\n icon=\"star\"\n backgroundColor=\"#FFEE58\"\n hoverColor=\"#FFF176\"\n textColor=\"#444444\"\n />\n this.props.openWhyPremiumDialog('TITLE_BAR_WHY')}\n style={{ color: 'white', marginLeft: 10 }}\n >\n Why?\n \n
\n ) : null}\n \n );\n }\n\n render() {\n return (\n \n {matches => (\n
\n \n \n {this.title(matches)}\n {this.userMenu(matches)}\n \n \n
\n )}\n \n );\n }\n}\n\nexport default withTheme()(TitleBar);\n","import React, { Component } from 'react';\nimport Media from 'react-media';\nimport { func, number, object } from 'prop-types';\nimport isNil from 'lodash/isNil';\nimport { withStyles } from '@material-ui/core/styles';\nimport Tabs from '@material-ui/core/Tabs';\nimport Tab from '@material-ui/core/Tab';\nimport { Link } from 'react-router-dom';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport { canUseExamDiff } from '../util/browser';\n\nconst tabCount = canUseExamDiff() ? 5 : 4;\nconst styles = theme => ({\n tabWrapper: {\n display: 'flex',\n flexDirection: 'row'\n },\n tabsIndicator: {\n display: 'none'\n },\n tabRoot: {\n textTransform: 'initial',\n backgroundColor: theme.palette.tab.unselected,\n width: `${100 / tabCount}%`,\n height: 48,\n minHeight: 48,\n color: 'white',\n maxWidth: 'unset'\n },\n tabRootMinimized: {\n textTransform: 'initial',\n backgroundColor: theme.palette.tab.unselected,\n width: `${100 / tabCount}%`,\n height: 48,\n minHeight: 48,\n color: 'white',\n maxWidth: 'unset',\n boxShadow: 'inset 0px -5px #0D47A1'\n },\n tabBorder: {\n borderLeft: theme.palette.buttonBorder\n },\n tabLabel: {\n textTransform: 'uppercase'\n },\n tabSelected: {\n backgroundColor: theme.palette.tab.selected\n },\n tabTextColorInherit: {\n opacity: 1\n },\n hiddenTextLabelContainer: {\n paddingTop: 0,\n paddingBottom: 0,\n paddingRight: 0,\n paddingLeft: 0\n },\n textInputLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n '&:before': {\n fontFamily: '\"Material Icons\"',\n content: '\"textsms\"',\n fontSize: 24,\n marginRight: 24\n }\n },\n fileUploadLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n '&:before': {\n fontFamily: '\"Material Icons\"',\n content: '\"file_upload\"',\n fontSize: 24,\n marginRight: 24\n }\n },\n urlsLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n '&:before': {\n fontFamily: '\"Material Icons\"',\n content: '\"link\"',\n fontSize: 24,\n marginRight: 24\n }\n },\n foldersLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n '&:before': {\n fontFamily: '\"Material Icons\"',\n content: '\"folder\"',\n fontSize: 24,\n marginRight: 24\n }\n },\n samplesLabelContainer: {\n display: 'flex',\n alignItems: 'center',\n '&:before': {\n fontFamily: '\"Material Icons\"',\n content: '\"play_circle_filled\"',\n fontSize: 24,\n marginRight: 24\n }\n }\n});\n\nconst tabIndices = {\n 'compare-clips': 0,\n 'compare-files': 1,\n 'compare-urls': 2,\n samples: 3\n};\n\nif (canUseExamDiff()) {\n tabIndices['compare-folders'] = 3;\n tabIndices['samples'] = 4;\n}\n\nclass ComparisonTabs extends Component {\n state = {\n selectedTab: ComparisonTabs.tabIdxFromUrl()\n };\n\n static propTypes = {\n classes: object,\n lastComparedTabIndex: number,\n collapsedTabIndex: number,\n setCollapsedTabIndex: func,\n setCurrentTab: func\n };\n\n static getDerivedStateFromProps = (props, state) => ({\n ...state,\n selectedTab: ComparisonTabs.tabIdxFromUrl()\n });\n\n static tabIdxFromUrl = () => {\n const tabName = window.location.pathname.split('/')[1];\n return tabIndices[tabName];\n };\n\n onChangeTab = (event, newTabIndex) => {\n const sortedTabPaths = Object.keys(tabIndices).sort((a, b) => tabIndices[a] - tabIndices[b]);\n const currentTabPath = sortedTabPaths[newTabIndex];\n\n this.props.setCurrentTab(currentTabPath);\n this.setState({ selectedTab: newTabIndex });\n window.localStorage.setItem('diffNowLastViewedTab', `/${currentTabPath}`);\n };\n\n handleTabPress = tabIndex => {\n if (ComparisonTabs.tabIdxFromUrl() === tabIndex) {\n if (tabIndex === this.props.collapsedTabIndex) {\n this.props.setCollapsedTabIndex(null);\n } else {\n this.props.setCollapsedTabIndex(tabIndex);\n }\n } else if (this.props.collapsedTabIndex !== null) {\n this.props.setCollapsedTabIndex(ComparisonTabs.tabIdxFromUrl());\n }\n };\n\n render() {\n const { selectedTab } = this.state;\n const { collapsedTabIndex, lastComparedTabIndex, classes } = this.props;\n\n const getTabRootClass = tabIndex => {\n const classNames = [];\n\n if (tabIndex === lastComparedTabIndex) {\n classNames.push(classes.tabRootMinimized);\n } else {\n classNames.push(classes.tabRoot);\n }\n\n if (tabIndex > 0) {\n classNames.push(classes.tabBorder);\n }\n\n return classNames.join(' ');\n };\n\n const getTabLabelContainerClass = icon => {\n switch (icon) {\n case 'textInput':\n return classes.textInputLabelContainer;\n case 'fileUpload':\n return classes.fileUploadLabelContainer;\n case 'urls':\n return classes.urlsLabelContainer;\n case 'folders':\n return classes.foldersLabelContainer;\n case 'samples':\n return classes.samplesLabelContainer;\n default:\n return classes.textInputLabelContainer;\n }\n };\n\n const getTabClass = (icon, tabIndex, hideText) => ({\n wrapper: classes.tabWrapper,\n root: getTabRootClass(tabIndex),\n selected:\n tabIndex !== collapsedTabIndex && tabIndex === selectedTab ? classes.tabSelected : '',\n textColorInherit: classes.tabTextColorInherit,\n labelContainer: hideText ? classes.hiddenTextLabelContainer : getTabLabelContainerClass(icon),\n label: classes.tabLabel\n });\n\n return (\n \n {({ logEvent }) => (\n \n {matches => (\n \n this.handleTabPress(0)}\n component={Link}\n to=\"/compare-clips\"\n />\n this.handleTabPress(1)}\n component={Link}\n to=\"/compare-files\"\n />\n this.handleTabPress(2)}\n component={Link}\n to=\"/compare-urls\"\n />\n {canUseExamDiff() && (\n {\n logEvent('NAVIGATED_TO_FOLDERS_TAB');\n this.handleTabPress(3);\n }}\n component={Link}\n to=\"/compare-folders\"\n />\n )}\n this.handleTabPress(canUseExamDiff() ? 4 : 3)}\n component={Link}\n to=\"/samples\"\n />\n \n )}\n \n )}\n \n );\n }\n}\n\nexport default withStyles(styles)(ComparisonTabs);\n","import React, { Component } from 'react';\nimport { bool, func, object, string } from 'prop-types';\nimport { withStyles, withTheme } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport Paper from '@material-ui/core/Paper';\nimport IconButton from '@material-ui/core/IconButton';\nimport Icon from '@material-ui/core/Icon';\n\nconst styles = {\n textArea: {\n fontFamily: 'Roboto Mono'\n },\n title: {\n fontFamily: 'Roboto Mono'\n },\n clearButton: {\n position: 'absolute',\n top: 5,\n right: 0,\n padding: 0,\n width: 24,\n height: 24\n }\n};\n\nclass TextInputPane extends Component {\n static propTypes = {\n left: bool,\n onChangeTitle: func,\n onChangeClip: func,\n classes: object,\n title: string,\n clip: string,\n theme: object\n };\n\n render() {\n const { left, theme, onChangeTitle, title, classes, clip, onChangeClip } = this.props;\n\n return (\n \n \n onChangeTitle(e.target.value)}\n value={title}\n InputProps={{ classes: { root: classes.title } }}\n />\n \n \n
\n onChangeClip(e.target.value)}\n />\n onChangeClip('')}\n className={classes.clearButton}\n >\n clear\n \n
\n \n \n );\n }\n}\n\nexport default withTheme()(withStyles(styles)(TextInputPane));\n","import React from 'react';\nimport { bool, func } from 'prop-types';\nimport Button from '@material-ui/core/Button';\n\nimport edpLogoLarge from '../../edp-small.png';\n\nconst CompareButton = ({ disabled, onClick }) => (\n \n \n Compare\n \n);\n\nCompareButton.propTypes = {\n disabled: bool,\n onClick: func\n};\n\nexport default CompareButton;\n","import React from 'react';\nimport Media from 'react-media';\nimport { string, func } from 'prop-types';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\n\nimport { docTypes } from '../../util/constants';\n\nconst DocTypeSelector = ({ docType, onSelect }) => (\n \n {matches => (\n \n \n \n {matches.large ? 'Document Type' : 'Doc Type'}\n \n onSelect(e.target.value)}\n style={{ width: matches.large ? 200 : 100 }}\n inputProps={{\n id: 'doctype-picker'\n }}\n >\n {Object.keys(docTypes)\n .sort()\n .map((key, index) => (\n \n {docTypes[key]}\n \n ))}\n \n \n \n )}\n \n);\n\nDocTypeSelector.propTypes = {\n docType: string,\n onSelect: func\n};\n\nexport default DocTypeSelector;\n","import React, { Component } from 'react';\nimport { func, string, object, number } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\nimport Paper from '@material-ui/core/Paper';\nimport Collapse from '@material-ui/core/Collapse';\nimport isEmpty from 'lodash/isEmpty';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport { COMPARE_CLIPS, COMPARE_PANE_TRANSITION_MS } from '../util/constants';\nimport TextInputPane from '../components/comparison/TextInputPane';\nimport CompareButton from '../components/comparison/CompareButton';\nimport DocTypeSelector from '../components/comparison/DocTypeSelector';\n\nfunction mapStateToProps(state) {\n return {\n theme: state.global.theme,\n user: state.global.user,\n clientId: state.global.clientId,\n options: state.global.options,\n comparisonCount: state.global.comparisonCount,\n comparisonStartDate: state.global.comparisonStartDate,\n configuration: state.global.configuration,\n firstTitle: state.global.firstClipTitle,\n secondTitle: state.global.secondClipTitle,\n firstClip: state.global.firstClip,\n secondClip: state.global.secondClip,\n docType: state.global.docType,\n collapsedTabIndex: state.global.collapsedTabIndex\n };\n}\n\nexport class CompareClips extends Component {\n static propTypes = {\n theme: string,\n onCompare: func,\n onSetCollapsedTabIndex: func,\n clientId: string,\n options: object,\n user: object,\n firstTitle: string,\n secondTitle: string,\n firstClip: string,\n secondClip: string,\n docType: string,\n collapsedTabIndex: number,\n openWhyPremiumDialog: func\n };\n\n constructor(props) {\n super(props);\n\n const { firstTitle, firstClip, secondTitle, secondClip, docType } = this.props;\n\n this.state = { open: false, firstTitle, firstClip, secondTitle, secondClip, docType };\n }\n\n static getDerivedStateFromProps = (props, state) => ({\n ...state,\n open: props.collapsedTabIndex === null\n });\n\n componentDidMount() {\n this.props.onSetCollapsedTabIndex(null);\n }\n\n compareClips = async () => {\n this.props.onCompare(COMPARE_CLIPS, this.getComparisonPayload());\n };\n\n getComparisonPayload = () => {\n const { user, clientId, options, theme } = this.props;\n const { firstTitle, secondTitle, firstClip, secondClip, docType } = this.state;\n\n const sessionToken = user ? user.sessionToken : null;\n\n return {\n title1: firstTitle,\n title2: secondTitle,\n clip1: firstClip,\n clip2: secondClip,\n sessionId: clientId,\n sessionToken,\n optionsJson: options,\n clipType: docType,\n darkMode: theme === 'dark'\n };\n };\n\n selectDocType = docType => {\n this.setState({ docType });\n };\n\n isValidCompareState = () => !isEmpty(this.state.firstClip) && !isEmpty(this.state.secondClip);\n\n render() {\n const { openWhyPremiumDialog } = this.props;\n\n return (\n
\n \n \n \n this.setState({ firstTitle: newTitle })}\n onChangeClip={newClip => this.setState({ firstClip: newClip })}\n />\n this.setState({ secondTitle: newTitle })}\n onChangeClip={newClip => this.setState({ secondClip: newClip })}\n />\n
\n\n \n \n First 2048 KB will be compared (8192 KB for{' '}\n \n premium users\n \n )\n \n\n \n {({ logEvent }) => (\n {\n this.compareClips();\n logEvent('START_COMPARISON', { type: 'CLIPS' });\n }}\n />\n )}\n \n\n \n \n \n \n \n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps)(CompareClips));\n","import React, { Component, Fragment } from 'react';\nimport { string, func, bool } from 'prop-types';\nimport Dropzone from 'react-dropzone';\nimport Button from '@material-ui/core/Button';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Icon from '@material-ui/core/Icon';\n\nexport default class FileInput extends Component {\n state = {\n dropzoneActive: false\n };\n\n static propTypes = {\n label: string,\n onUpload: func,\n fileName: string,\n status: string,\n disabled: bool\n };\n\n render() {\n const { label, onUpload, fileName, status, disabled } = this.props;\n const { dropzoneActive } = this.state;\n\n let statusComponent = null;\n\n if (status === 'uploading') {\n statusComponent = ;\n } else if (status === 'uploaded') {\n statusComponent = check;\n } else if (status === 'error') {\n statusComponent = error;\n }\n\n return (\n this.setState({ dropzoneActive: true })}\n onDragLeave={() => this.setState({ dropzoneActive: false })}\n style={{ display: 'flex', alignItems: 'center', height: 50 }}\n onDrop={files => {\n onUpload(files[0]);\n this.setState({ dropzoneActive: false });\n }}\n >\n onUpload(e.target.files[0])}\n onClick={e => (e.target.value = null)}\n style={{ display: 'none' }}\n type=\"file\"\n />\n \n \n {label}\n \n \n \n {dropzoneActive ? (\n \n DROP FILE HERE\n \n ) : (\n \n
{statusComponent}
\n
{fileName}
\n
\n )}\n \n \n );\n }\n}\n","import React, { Component } from 'react';\nimport { func, string, object, number } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\nimport isEmpty from 'lodash/isEmpty';\nimport Paper from '@material-ui/core/Paper';\nimport Collapse from '@material-ui/core/Collapse';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport { COMPARE_FILES, COMPARE_PANE_TRANSITION_MS } from '../util/constants';\nimport { uploadFile } from '../util/compare';\nimport { isPremium } from '../util/common';\nimport * as actions from '../actions/global';\nimport FileInput from '../components/comparison/FileInput';\nimport CompareButton from '../components/comparison/CompareButton';\n\nfunction mapStateToProps(state) {\n return {\n theme: state.global.theme,\n user: state.global.user,\n clientId: state.global.clientId,\n options: state.global.options,\n comparisonCount: state.global.comparisonCount,\n comparisonStartDate: state.global.comparisonStartDate,\n configuration: state.global.configuration,\n firstFileStatus: state.global.firstFileStatus,\n firstFileName: state.global.firstFileName,\n firstFileUploadedName: state.global.firstFileUploadedName,\n secondFileStatus: state.global.secondFileStatus,\n secondFileName: state.global.secondFileName,\n secondFileUploadedName: state.global.secondFileUploadedName,\n collapsedTabIndex: state.global.collapsedTabIndex\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n onSetStatus(status) {\n dispatch(actions.setStatus(status));\n },\n onSetFirstFile(firstFileStatus, firstFileName, firstFileUploadedName) {\n dispatch(actions.setFirstFile(firstFileStatus, firstFileName, firstFileUploadedName));\n },\n onSetSecondFile(secondFileStatus, secondFileName, secondFileUploadedName) {\n dispatch(actions.setSecondFile(secondFileStatus, secondFileName, secondFileUploadedName));\n },\n onSetCollapsedTabIndex(newCollapsedTabIndex) {\n dispatch(actions.setCollapsedTabIndex(newCollapsedTabIndex));\n }\n };\n}\n\nexport class CompareFiles extends Component {\n static propTypes = {\n theme: string,\n clientId: string,\n onCompare: func,\n onSetStatus: func,\n onSetFirstFile: func,\n onSetSecondFile: func,\n onSetCollapsedTabIndex: func,\n options: object,\n user: object,\n configuration: object,\n firstFileStatus: string,\n firstFileName: string,\n firstFileUploadedName: string,\n secondFileStatus: string,\n secondFileName: string,\n secondFileUploadedName: string,\n collapsedTabIndex: number,\n openWhyPremiumDialog: func\n };\n\n constructor(props) {\n super(props);\n\n const {\n firstFileStatus,\n firstFileName,\n firstFileUploadedName,\n secondFileStatus,\n secondFileName,\n secondFileUploadedName\n } = this.props;\n\n this.state = {\n open: false,\n firstFileStatus,\n firstFileName,\n firstFileUploadedName,\n secondFileStatus,\n secondFileName,\n secondFileUploadedName\n };\n }\n\n static getDerivedStateFromProps = (props, state) => ({\n ...state,\n open: props.collapsedTabIndex === null\n });\n\n componentDidMount() {\n this.props.onSetCollapsedTabIndex(null);\n }\n\n setFileStatus = (status, index, filename) => {\n if (index === 0) {\n this.setFirstFileStatus(status, filename);\n } else {\n this.setSecondFileStatus(status, filename);\n }\n };\n\n setFirstFileStatus = (status, filename) => {\n this.setState(prevState => ({\n firstFileStatus: status,\n firstFileName: filename ? filename : prevState.firstFileName\n }));\n };\n\n setSecondFileStatus = (status, filename) => {\n this.setState(prevState => ({\n secondFileStatus: status,\n secondFileName: filename ? filename : prevState.secondFileName\n }));\n };\n\n uploadFile = async (file, index) => {\n const { user, configuration } = this.props;\n\n if (file === undefined) {\n return;\n }\n\n this.setFileStatus('uploading', index, file.name);\n\n const sessionToken = user ? user.sessionToken : null;\n const fileSizeKB = Math.round(file.size / 1024);\n const maxSizeKB = isPremium(user) ? configuration.maxSizePremiumKB : configuration.maxSizeKB;\n\n if (fileSizeKB <= maxSizeKB) {\n try {\n const { uploadedFileName } = await uploadFile(file, index, sessionToken);\n this.onUploadSuccess(file, uploadedFileName, index);\n } catch (error) {\n this.onUploadError(error);\n }\n } else {\n this.handleFileTooLarge(file.name, fileSizeKB, maxSizeKB, index);\n }\n };\n\n handleFileTooLarge = (fileName, fileSizeKB, maxSizeKB, index) => {\n const { user, configuration } = this.props;\n\n let tooLargeError = `Your file ${fileName} of size ${fileSizeKB} KB exceeds the max size of ${maxSizeKB} KB.`;\n\n if (!isPremium(user)) {\n tooLargeError = `${tooLargeError} Upgrade to DiffNow Premium to upload files of size up to ${\n configuration.maxSizePremiumKB\n } KB.`;\n }\n\n this.onUploadError(tooLargeError, index);\n };\n\n onUploadSuccess = (file, uploadedFileName, index) => {\n const { firstFileName, secondFileName } = this.state;\n const { onSetStatus, onSetFirstFile, onSetSecondFile } = this.props;\n\n this.setFileStatus('uploaded', index, null);\n onSetStatus({\n message: `Successfully uploaded ${index === 0 ? 'first' : 'second'} file (${\n file.name\n }) of size ${file.size} bytes`,\n type: 'info'\n });\n\n if (index === 0) {\n this.setState({ firstFileUploadedName: uploadedFileName });\n onSetFirstFile('uploaded', firstFileName, uploadedFileName);\n } else {\n this.setState({ secondFileUploadedName: uploadedFileName });\n onSetSecondFile('uploaded', secondFileName, uploadedFileName);\n }\n };\n\n onUploadError = (error, index) => {\n const { onSetStatus, onSetFirstFile, onSetSecondFile } = this.props;\n\n this.setFileStatus('error', index, null);\n onSetStatus({\n message: error,\n type: 'error'\n });\n\n if (index === 0) {\n onSetFirstFile('not-uploaded', '', '');\n } else {\n onSetSecondFile('not-uploaded', '', '');\n }\n };\n\n onUploadFirstFile = file => {\n this.uploadFile(file, 0);\n };\n\n onUploadSecondFile = file => {\n this.uploadFile(file, 1);\n };\n\n compareFiles = async () => {\n this.props.onCompare(COMPARE_FILES, this.getComparisonPayload());\n };\n\n getComparisonPayload = () => {\n const { user, clientId, options, theme } = this.props;\n const {\n firstFileName,\n firstFileUploadedName,\n secondFileName,\n secondFileUploadedName\n } = this.state;\n\n const sessionToken = user ? user.sessionToken : null;\n\n return {\n uploadedFileName1: firstFileUploadedName,\n originalFileName1: firstFileName,\n uploadedFileName2: secondFileUploadedName,\n originalFileName2: secondFileName,\n sessionId: clientId,\n sessionToken,\n optionsJson: options,\n darkMode: theme === 'dark'\n };\n };\n\n get styles() {\n return {\n outer: {\n padding: 20,\n paddingBottom: 12\n },\n contents: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: 168\n },\n topLabel: {\n fontSize: 14,\n color: '#777777'\n },\n bottomLabel: {\n fontSize: 12,\n color: '#999999'\n },\n compareButtonContainer: {\n position: 'relative',\n display: 'flex',\n marginTop: 15,\n justifyContent: 'center',\n height: 50\n }\n };\n }\n\n render() {\n const { openWhyPremiumDialog } = this.props;\n\n const isUploadDisabled = isEmpty(this.props.configuration);\n const isCompareDisabled =\n this.state.firstFileStatus !== 'uploaded' || this.state.secondFileStatus !== 'uploaded';\n\n return (\n
\n \n \n
\n
\n Select or drag-and-drop the files you want to compare below.\n
\n\n \n\n \n\n
\n 2048 KB limit (8192 KB for{' '}\n \n premium users\n \n )\n
\n
\n\n
\n \n {({ logEvent }) => (\n {\n this.compareFiles();\n logEvent('START_COMPARISON', { type: 'FILES' });\n }}\n />\n )}\n \n
\n \n
\n
\n );\n }\n}\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(CompareFiles)\n);\n","import React from 'react';\nimport { string, func } from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\n\nconst UrlInput = props => {\n const { id, value, hintText, onChange, error } = props;\n\n return (\n \n );\n};\n\nUrlInput.propTypes = {\n id: string,\n value: string,\n hintText: string,\n onChange: func,\n error: string\n};\n\nexport default UrlInput;\n","import React, { Component } from 'react';\nimport { func, string, object, number } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router';\nimport queryString from 'query-string';\nimport Paper from '@material-ui/core/Paper';\nimport Collapse from '@material-ui/core/Collapse';\nimport isEmpty from 'lodash/isEmpty';\nimport isUndefined from 'lodash/isUndefined';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport { COMPARE_URLS, COMPARE_PANE_TRANSITION_MS } from '../util/constants';\nimport CompareButton from '../components/comparison/CompareButton';\nimport UrlInput from '../components/comparison/UrlInput';\n\nfunction mapStateToProps(state) {\n return {\n theme: state.global.theme,\n user: state.global.user,\n clientId: state.global.clientId,\n options: state.global.options,\n comparisonCount: state.global.comparisonCount,\n comparisonStartDate: state.global.comparisonStartDate,\n configuration: state.global.configuration,\n firstUrl: state.global.firstUrl,\n secondUrl: state.global.secondUrl,\n collapsedTabIndex: state.global.collapsedTabIndex\n };\n}\n\nclass CompareUrls extends Component {\n static propTypes = {\n theme: string,\n clientId: string,\n onCompare: func,\n onSetCollapsedTabIndex: func,\n options: object,\n user: object,\n comparisonCount: number,\n configuration: object,\n firstUrl: string,\n secondUrl: string,\n collapsedTabIndex: number,\n openWhyPremiumDialog: func\n };\n\n constructor(props) {\n super(props);\n\n const { firstUrl, secondUrl } = this.props;\n\n this.state = { open: false, firstUrl, secondUrl };\n }\n\n static getDerivedStateFromProps = (props, state) => ({\n ...state,\n open: props.collapsedTabIndex === null\n });\n\n componentDidMount = () => {\n this.executeComparisonFromUrlParams();\n };\n\n componentDidUpdate = prevProps => {\n const { configuration, comparisonCount } = this.props;\n\n if (\n configuration !== prevProps.configuration ||\n (comparisonCount !== prevProps.comparisonCount && isUndefined(prevProps.comparisonCount))\n ) {\n this.executeComparisonFromUrlParams();\n }\n };\n\n executeComparisonFromUrlParams = () => {\n const { onSetCollapsedTabIndex, configuration, comparisonCount } = this.props;\n const params = queryString.parse(window.location.search);\n\n onSetCollapsedTabIndex(null);\n\n if (params.url1 && params.url2 && !isEmpty(configuration) && !isUndefined(comparisonCount)) {\n if (params.demo === '1') {\n this.setState({ firstUrl: '', secondUrl: '' }, () => {\n this.typeAndCompareDemoUrls(params.url1, params.url2);\n });\n } else {\n this.enterAndCompareUrls(params.url1, params.url2);\n }\n }\n };\n\n compareUrls = async () => {\n this.props.onCompare(COMPARE_URLS, this.getComparisonPayload());\n };\n\n getComparisonPayload = () => {\n const { user, clientId, options, theme } = this.props;\n const { firstUrl, secondUrl } = this.state;\n\n const sessionToken = user ? user.sessionToken : null;\n\n return {\n title1: firstUrl,\n title2: secondUrl,\n url1: firstUrl,\n url2: secondUrl,\n sessionId: clientId,\n sessionToken,\n optionsJson: options,\n darkMode: theme === 'dark'\n };\n };\n\n typeAndCompareDemoUrls = (url1, url2) => {\n setTimeout(() => {\n this.setState(\n ({ firstUrl, secondUrl }) => ({\n firstUrl: firstUrl + (url1[0] || ''),\n secondUrl: secondUrl + (url1.length ? '' : url2[0])\n }),\n () => {\n if (url1.length === 0 && url2.length === 1) {\n this.compareUrls();\n } else if (url1.length !== 0) {\n this.typeAndCompareDemoUrls(url1.slice(1), url2);\n } else {\n this.typeAndCompareDemoUrls(url1, url2.slice(1));\n }\n }\n );\n }, 20);\n };\n\n enterAndCompareUrls = (url1, url2) => {\n this.setState(\n {\n firstUrl: url1,\n secondUrl: url2\n },\n this.compareUrls\n );\n };\n\n isValidUrl = url => {\n const regExp = /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/;\n return regExp.test(url) || isEmpty(url);\n };\n\n get styles() {\n return {\n outer: {\n padding: 20,\n paddingBottom: 12\n },\n contents: {\n display: 'flex',\n flexDirection: 'column'\n },\n topLabel: {\n fontSize: 14,\n color: '#777777'\n },\n bottomLabel: {\n fontSize: 12,\n color: '#999999',\n marginTop: 16\n },\n compareButtonContainer: {\n position: 'relative',\n display: 'flex',\n marginTop: 15,\n justifyContent: 'center',\n height: 50\n }\n };\n }\n\n render() {\n const { firstUrl, secondUrl, open } = this.state;\n const { openWhyPremiumDialog } = this.props;\n\n const firstUrlError = this.isValidUrl(firstUrl) ? null : 'This URL is not valid.';\n const secondUrlError = this.isValidUrl(secondUrl) ? null : 'This URL is not valid.';\n const isValidState =\n !firstUrlError && !secondUrlError && !isEmpty(firstUrl) && !isEmpty(secondUrl);\n\n return (\n
\n \n \n
\n
Enter the URLs you want to compare below.
\n\n this.setState({ firstUrl: e.target.value })}\n />\n\n this.setState({ secondUrl: e.target.value })}\n />\n\n
\n First 2048 KB will be compared (8192 KB for{' '}\n \n premium users\n \n )\n
\n
\n\n
\n \n {({ logEvent }) => (\n {\n this.compareUrls();\n logEvent('START_COMPARISON', { type: 'URLS' });\n }}\n />\n )}\n \n
\n \n
\n
\n );\n }\n}\n\nexport default withRouter(connect(mapStateToProps)(CompareUrls));\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { func, number, object } from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { withTheme } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport Button from '@material-ui/core/Button';\nimport Collapse from '@material-ui/core/Collapse';\nimport Typography from '@material-ui/core/Typography';\n\nimport { COMPARE_PANE_TRANSITION_MS } from '../util/constants';\nimport { examDiffProUrl } from '../util/common';\nimport * as actions from '../actions/global';\n\nfunction mapStateToProps(state) {\n return {\n collapsedTabIndex: state.global.collapsedTabIndex\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n onSetCollapsedTabIndex(newCollapsedTabIndex) {\n dispatch(actions.setCollapsedTabIndex(newCollapsedTabIndex));\n }\n };\n}\n\nclass CompareFolders extends Component {\n static propTypes = {\n onSetCollapsedTabIndex: func,\n collapsedTabIndex: number,\n theme: object\n };\n\n constructor(props) {\n super(props);\n\n props.onSetCollapsedTabIndex(null);\n\n this.state = {\n open: false\n };\n }\n\n static getDerivedStateFromProps = (props, state) => ({\n ...state,\n open: props.collapsedTabIndex === null\n });\n\n componentDidMount() {\n this.props.onSetCollapsedTabIndex(null);\n }\n\n renderSampleButton(label, url1, url2) {\n const DEMO_URL = 'https://www.diffnow.com/demo/';\n\n return (\n \n {label}\n \n );\n }\n\n get styles() {\n return {\n outer: {\n padding: 20\n },\n contents: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: 216\n },\n buttonList: {\n display: 'flex'\n },\n heading: {\n fontSize: 24,\n marginBottom: 10,\n color: '#666'\n }\n };\n }\n\n render() {\n return (\n
\n \n \n
\n \n
How can I compare folders?
\n
\n DiffNow can only compare directories if they are\n \n uploaded as ZIP archives\n \n .\n
\n
\n If you would like to compare directories on your file system, use\n \n ExamDiff Pro\n \n , our desktop software, instead.\n
\n
\n
\n \n
\n
\n );\n }\n}\n\nexport default withTheme()(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(CompareFolders)\n);\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { func, number, object } from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { withTheme } from '@material-ui/core/styles';\nimport Paper from '@material-ui/core/Paper';\nimport Divider from '@material-ui/core/Divider';\nimport Button from '@material-ui/core/Button';\nimport Collapse from '@material-ui/core/Collapse';\nimport Typography from '@material-ui/core/Typography';\n\nimport { COMPARE_PANE_TRANSITION_MS } from '../util/constants';\nimport * as actions from '../actions/global';\n\nfunction mapStateToProps(state) {\n return {\n collapsedTabIndex: state.global.collapsedTabIndex\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n onSetCollapsedTabIndex(newCollapsedTabIndex) {\n dispatch(actions.setCollapsedTabIndex(newCollapsedTabIndex));\n }\n };\n}\n\nclass Samples extends Component {\n static propTypes = {\n onSetCollapsedTabIndex: func,\n collapsedTabIndex: number,\n theme: object\n };\n\n constructor(props) {\n super(props);\n\n props.onSetCollapsedTabIndex(null);\n\n this.state = {\n open: false\n };\n }\n\n static getDerivedStateFromProps = (props, state) => ({\n ...state,\n open: props.collapsedTabIndex === null\n });\n\n componentDidMount() {\n this.props.onSetCollapsedTabIndex(null);\n }\n\n renderSampleButton(label, url1, url2) {\n const DEMO_URL = 'https%3A%2F%2Fwww.diffnow.com%2Fdemo%2F';\n\n return (\n \n {label}\n \n );\n }\n\n get styles() {\n return {\n outer: {\n padding: 20\n },\n contents: {\n display: 'flex',\n flexDirection: 'column'\n },\n buttonList: {\n display: 'flex',\n flexWrap: 'wrap'\n },\n heading: {\n fontSize: 24,\n marginBottom: 10,\n color: '#666'\n },\n divider: {\n marginBottom: 10\n }\n };\n }\n\n render() {\n return (\n
\n \n \n
\n
\n {this.renderSampleButton('Plain Text', '1.txt', '2.txt')}\n {this.renderSampleButton('Word Documents', '1.doc', '2.doc')}\n {this.renderSampleButton('PDF Documents', '1.pdf', '2.pdf')}\n {this.renderSampleButton('C++', '1.cpp', '2.cpp')}\n {this.renderSampleButton('Python', '1.py', '2.py')}\n {this.renderSampleButton('C#', '1.cs', '2.cs')}\n {this.renderSampleButton('Go', '1.go', '2.go')}\n {this.renderSampleButton('HTML', '1.html', '2.html')}\n {this.renderSampleButton('JavaScript', 'lightbox1.js', 'lightbox2.js')}\n {this.renderSampleButton('Binary Files', '1.bin', '2.bin')}\n {this.renderSampleButton('ZIP Archives', '1.zip', '2.zip')}\n {this.renderSampleButton('Unicode', 'unicode1.txt', 'unicode2.txt')}\n
\n \n \n
What else can I do with DiffNow?
\n
DiffNow also lets you compare:
\n
    \n
  • Microsoft Office documents (doc, docx, xls, xlsx, ppt, pptx)
  • \n
  • Source code in C, C++, C#, Java, Perl, PHP, and other languages
  • \n
  • RAR, 7-zip and other archive formats
  • \n
\n
\n
\n \n
\n
\n );\n }\n}\n\nexport default withTheme()(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Samples)\n);\n","import React, { Component, Fragment } from 'react';\nimport Media from 'react-media';\nimport PropTypes, { object, number, func, string, array, bool } from 'prop-types';\nimport Helmet from 'react-helmet';\nimport $ from 'jquery';\nimport { connect } from 'react-redux';\nimport { Route, Switch, withRouter } from 'react-router';\nimport { v4 as uuidv4 } from 'uuid';\nimport map from 'lodash/map';\nimport merge from 'lodash/merge';\nimport isNil from 'lodash/isNil';\nimport download from 'downloadjs';\nimport Button from '@material-ui/core/Button';\nimport { withTheme } from '@material-ui/core/styles';\nimport queryString from 'query-string';\nimport compareVersions from 'compare-versions';\nimport amplitude from 'amplitude-js';\nimport { Amplitude } from '@amplitude/react-amplitude';\n\nimport { getConfiguration, getChangeLog } from '../util/util';\nimport { unrollReport, getReportMetadata, generateReportUrl, getReport } from '../util/reports';\nimport { checkIfLoggedIn } from '../util/user';\nimport { addNewSubscription } from '../util/subscription';\nimport {\n truncatedPrefix,\n truncatedSuffixPremium,\n truncatedSuffixNonPremium,\n getRandomTip\n} from '../util/status';\nimport {\n getOptionsProfiles,\n getCurrentUserOptions,\n getUserOptionsByName,\n setCurrentProfile,\n deleteUserOptionsByName,\n getDefaultOptions\n} from '../util/options';\nimport * as actions from '../actions/global';\nimport {\n DIFFNOW_URL,\n IS_CURRENT_PROFILE,\n SUCCESS_MESSAGE_DELAY_MS,\n COMPARE_CLIPS,\n COMPARE_FILES,\n COMPARE_URLS\n} from '../util/constants';\nimport { canUserCompare, examDiffProUrl, isPremium, toDateString } from '../util/common';\nimport { areAdsInvisible, logAnalytics, getOS, canUseExamDiff } from '../util/browser';\nimport {\n compareClips,\n compareFiles,\n compareUrls,\n executePostComparisonActions\n} from '../util/compare';\nimport {\n bumpComparisonCounter,\n comparisonLimitReachedStatus,\n setUpComparisonCounter,\n comparisonsUsedStatus\n} from '../util/comparisonCount';\nimport { reconnectSignalR } from '../util/signalr';\nimport edpLogoSmall from '../edp-small.png';\nimport ErrorBoundary from '../components/ErrorBoundary';\nimport Status from '../components/Status';\nimport ComparisonAnimation from '../components/comparison/ComparisonAnimation';\nimport OutputFrame from '../components/comparison/OutputFrame';\nimport AdContainer from '../components/AdContainer';\nimport AdBlockMessage from '../components/AdBlockMessage';\nimport Footer from '../components/Footer';\nimport ConsentFooter from '../components/ConsentFooter';\nimport TopButton from '../components/TopButton';\nimport LoginDialog from '../components/users/LoginDialog';\nimport SavedReportsDialog from '../components/users/SavedReportsDialog';\nimport RegisterConfirmDialog from '../components/users/RegisterConfirmDialog';\nimport OptionsDialog from '../components/dialogs/OptionsDialog';\nimport AboutDialog from '../components/dialogs/AboutDialog';\nimport WhyPremiumDialog from '../components/dialogs/WhyPremiumDialog';\nimport CheckoutDialog from '../components/dialogs/CheckoutDialog';\nimport ChangePasswordDialog from '../components/dialogs/ChangePasswordDialog';\nimport ChangePasswordForResetDialog from '../components/dialogs/ChangePasswordForResetDialog';\nimport ManagePremiumSubscriptionDialog from '../components/dialogs/ManagePremiumSubscriptionDialog';\nimport TermsOfServiceDialog from '../components/dialogs/TermsOfServiceDialog';\nimport ContactDialog from '../components/dialogs/ContactDialog';\nimport StoreResultsDialog from '../components/dialogs/StoreResultsDialog';\nimport ActivationDialog from '../components/dialogs/ActivationDialog';\nimport ChangeLogDialog from '../components/dialogs/ChangeLogDialog';\n\nimport TitleBar from './TitleBar';\nimport ComparisonTabs from './ComparisonTabs';\nimport CompareClips from './CompareClips';\nimport CompareFiles from './CompareFiles';\nimport CompareUrls from './CompareUrls';\nimport CompareFolders from './CompareFolders';\nimport Samples from './Samples';\n\nconst DIFFNOW_SIGNALR_URL = `${DIFFNOW_URL}/signalr`;\n\nfunction mapStateToProps(state) {\n return {\n nightModeEnabled: state.global.theme === 'dark',\n renderId: state.global.renderId,\n status: state.global.status,\n isComparing: state.global.isComparing,\n isTruncated: state.global.isTruncated,\n isReportReady: state.global.isReportReady,\n reportId: state.global.reportId,\n durationKey: state.global.durationKey,\n examDiffUri: state.global.examDiffUri,\n firstTitle: state.global.firstTitle,\n secondTitle: state.global.secondTitle,\n user: state.global.user,\n optionsProfiles: state.global.optionsProfiles,\n options: state.global.options,\n newOptions: state.global.newOptions,\n clientId: state.global.clientId,\n defaultOptions: state.global.defaultOptions,\n optionsLoaded: state.global.optionsLoaded,\n configuration: state.global.configuration,\n comparisonCount: state.global.comparisonCount,\n comparisonStartDate: state.global.comparisonStartDate,\n lastComparedTabIndex: state.global.lastComparedTabIndex,\n collapsedTabIndex: state.global.collapsedTabIndex,\n premiumSource: state.global.premiumSource\n };\n}\n\nfunction mapDispatchToProps(dispatch) {\n return {\n onLoggedIn(user) {\n dispatch(actions.loggedIn(user));\n },\n onLoggedOut() {\n dispatch(actions.loggedOut());\n },\n onSetClipTitles(firstTitle, secondTitle) {\n dispatch(actions.setClipTitles(firstTitle, secondTitle));\n },\n onSetClips(firstClip, secondClip) {\n dispatch(actions.setClips(firstClip, secondClip));\n },\n onSetDocType(docType) {\n dispatch(actions.setDocType(docType));\n },\n onSetFileTitles(firstTitle, secondTitle) {\n dispatch(actions.setFileTitles(firstTitle, secondTitle));\n },\n onSetUrls(firstUrl, secondUrl) {\n dispatch(actions.setUrls(firstUrl, secondUrl));\n },\n onSetUrlTitles(firstTitle, secondTitle) {\n dispatch(actions.setUrlTitles(firstTitle, secondTitle));\n },\n onSubscribeUser() {\n dispatch(actions.subscribeUser());\n },\n onSetStatus(status) {\n dispatch(actions.setStatus(status));\n },\n onSetReportId(reportId) {\n dispatch(actions.setReport(reportId, undefined));\n },\n onSetExamDiffUri(examDiffUri) {\n dispatch(actions.setExamDiffUri(examDiffUri));\n },\n onSetComparisonCount(newComparisonCount, newComparisonStartDate) {\n dispatch(actions.setComparisonCount(newComparisonCount, newComparisonStartDate));\n },\n onSetLastComparedTabIndex(newLastComparedTabIndex) {\n dispatch(actions.setLastComparedTabIndex(newLastComparedTabIndex));\n },\n onSetCollapsedTabIndex(newCollapsedTabIndex) {\n dispatch(actions.setCollapsedTabIndex(newCollapsedTabIndex));\n },\n onSetClientId(clientId) {\n dispatch(actions.setClientId(clientId));\n },\n onSetOptionsProfiles(optionsProfiles) {\n dispatch(actions.setOptionsProfiles(optionsProfiles));\n },\n onSetOptions(options) {\n dispatch(actions.setOptions(options));\n },\n onSetNewOption(newOption) {\n dispatch(actions.setNewOption(newOption));\n },\n onSaveNewOptions() {\n dispatch(actions.saveNewOptions());\n },\n onResetNewOptions() {\n dispatch(actions.resetNewOptions());\n },\n onSetDefaultOptions(defaultOptions) {\n dispatch(actions.setDefaultOptions(defaultOptions));\n },\n onSetTruncatedStatus(truncatedStatus) {\n dispatch(actions.setTruncatedStatus(truncatedStatus));\n },\n onSetConfiguration(configuration) {\n dispatch(actions.setConfiguration(configuration));\n },\n onSetReport(reportId, durationKey) {\n dispatch(actions.setReport(reportId, durationKey));\n },\n onSetTheme(newTheme) {\n dispatch(actions.setTheme(newTheme));\n },\n onSetPremiumSource(premiumSource) {\n dispatch(actions.setPremiumSource(premiumSource));\n },\n onSetReportReady(isReportReady) {\n dispatch(actions.setReportReady(isReportReady));\n }\n };\n}\n\nexport class App extends Component {\n static propTypes = {\n nightModeEnabled: bool,\n history: object,\n renderId: number, // eslint-disable-line react/no-unused-prop-types\n status: object,\n isComparing: bool,\n isTruncated: bool,\n isReportReady: bool,\n reportId: string,\n durationKey: string,\n examDiffUri: string,\n firstTitle: string,\n secondTitle: string,\n onLoggedIn: func,\n onLoggedOut: func,\n onSetClipTitles: func,\n onSetClips: func,\n onSetDocType: func,\n onSetFileTitles: func,\n onSetUrls: func,\n onSetUrlTitles: func,\n onSetExamDiffUri: func,\n onSubscribeUser: func,\n onSetStatus: func,\n onSetClientId: func,\n onSetOptionsProfiles: func,\n onSetOptions: func,\n onSetNewOption: func,\n onSaveNewOptions: func,\n onResetNewOptions: func,\n onSetDefaultOptions: func,\n onSetTruncatedStatus: func,\n onSetComparisonCount: func,\n onSetConfiguration: func,\n onSetCollapsedTabIndex: func,\n onSetReportId: func,\n onSetReport: func,\n onSetTheme: func,\n onSetPremiumSource: func,\n onSetReportReady: func,\n user: object,\n optionsProfiles: array,\n options: object,\n newOptions: object,\n defaultOptions: object,\n clientId: string,\n optionsLoaded: bool,\n configuration: object,\n comparisonCount: number,\n comparisonStartDate: PropTypes.instanceOf(Date),\n lastComparedTabIndex: number,\n collapsedTabIndex: number,\n premiumSource: string,\n theme: object\n };\n\n state = {\n loading: false,\n activationConfirmationMessage: '',\n changePasswordConfirmationKey: null,\n changePasswordEmailAddress: null,\n\n currentTab: 'compare-clips',\n\n areAdsInvisible: false,\n isConsentFooterDismissed: false,\n currentVersion: null,\n changeLog: [],\n\n lastComparisonPayload: null,\n\n isLoginDialogOpen: false,\n isRegisterConfirmDialogOpen: false,\n registerConfirmDialogEmail: '',\n isSavedReportsDialogOpen: false,\n isOptionsDialogOpen: false,\n isAboutDialogOpen: false,\n isWhyPremiumDialogOpen: false,\n isCheckoutDialogOpen: false,\n isChangePasswordDialogOpen: false,\n isManagePremiumSubscriptionDialogOpen: false,\n isTermsOfServiceDialogOpen: false,\n isContactDialogOpen: false,\n isStoreResultsDialogOpen: false,\n isActivationDialogOpen: false,\n isChangePasswordForResetDialogOpen: false,\n isChangeLogDialogOpen: false\n };\n\n componentDidMount() {\n this.onAppStart();\n }\n\n onAppStart = async () => {\n const clientId = uuidv4();\n\n this.setUpConsentFooter();\n this.setUpTheme();\n this.checkForActivation();\n this.checkForChangePassword();\n this.checkForChangeLog();\n this.setUpSignalR(clientId);\n\n const sessionToken = window.localStorage.getItem('diffNowSessionToken');\n if (sessionToken) {\n const loginResponse = await checkIfLoggedIn(sessionToken);\n this.onUserLogin(loginResponse.data.user, sessionToken);\n } else {\n this.onUserLogout(sessionToken, true);\n }\n\n const identify = new amplitude.Identify().setOnce('user_os', getOS());\n amplitude.getInstance().identify(identify);\n\n logAnalytics();\n this.checkPath();\n this.setUpConfigurationVariables();\n this.props.onSetClientId(clientId);\n this.props.onSetStatus({\n message: getRandomTip(),\n type: 'tip'\n });\n\n setInterval(() => {\n this.setState({ areAdsInvisible: areAdsInvisible() });\n }, 1000);\n };\n\n setUpConfigurationVariables = async () => {\n const configurationData = await getConfiguration();\n this.props.onSetConfiguration(configurationData);\n setUpComparisonCounter(this.props.onSetComparisonCount, configurationData);\n };\n\n setUpSignalR = clientId => {\n window.jQuery = $;\n require('../lib/jquery.signalR.min.js'); // eslint-disable-line\n require('../signalr/hubs.js'); // eslint-disable-line\n\n const connectionHub = $.connection.diffnowHub;\n\n connectionHub.client.sendMessage = (type, message) => {\n const {\n isTruncated,\n user,\n comparisonCount,\n configuration,\n onSetStatus,\n onSetTruncatedStatus,\n onSetReportReady\n } = this.props;\n\n if (message.includes('Truncating')) {\n onSetTruncatedStatus(true);\n } else if (message.includes('Comparing')) {\n onSetTruncatedStatus(false);\n }\n\n onSetStatus({\n message: decodeURIComponent(message),\n type: type.toLowerCase()\n });\n\n if (type === 'Success') {\n window.setTimeout(() => {\n onSetReportReady(true);\n onSetStatus({ message: null, type: null }); // Clear status first (this is important for some logic).\n\n if (isTruncated) {\n const truncatedSuffix = isPremium(user)\n ? truncatedSuffixPremium\n : truncatedSuffixNonPremium;\n onSetStatus({\n message: `${truncatedPrefix} ${this.props.options.lcl} ${truncatedSuffix}`,\n type: 'error'\n });\n } else {\n onSetStatus(comparisonsUsedStatus(comparisonCount, user, configuration));\n }\n }, SUCCESS_MESSAGE_DELAY_MS);\n }\n };\n\n $.connection.hub.url = DIFFNOW_SIGNALR_URL;\n $.connection.hub.qs = `sessionId=${clientId}`;\n $.connection.hub.start();\n };\n\n hideStatusAfterDelay = delay => {\n window.setTimeout(() => {\n this.props.onSetStatus({ message: null, type: null });\n }, delay);\n };\n\n setUpConsentFooter = () => {\n this.setState({\n isConsentFooterDismissed: JSON.parse(window.localStorage.getItem('diffNowFooterDismissed'))\n });\n };\n\n setUpTheme = () => {\n const theme = window.localStorage.getItem('diffNowTheme');\n this.props.onSetTheme(isNil(theme) ? 'light' : theme);\n };\n\n checkPath = () => {\n if (window.location.pathname === '/') {\n this.redirectToLastViewedPage();\n } else if (window.location.pathname.startsWith('/report')) {\n const reportId = window.location.pathname.split('/')[2];\n this.openReport(reportId);\n } else if (window.location.pathname.startsWith('/terms-of-service')) {\n this.redirectToLastViewedPage();\n this.toggleDialog('isTermsOfServiceDialogOpen');\n }\n\n this.setState({ currentTab: window.location.pathname.replace('/', '') });\n };\n\n redirectToLastViewedPage = () => {\n const lastViewedTab = window.localStorage.getItem('diffNowLastViewedTab');\n\n if (lastViewedTab) {\n this.setState({ currentTab: lastViewedTab.replace('/', '') });\n this.props.history.replace(`${lastViewedTab}${window.location.search}`);\n } else {\n this.setState({ currentTab: 'compare-clips' });\n this.redirectToCompareClips();\n }\n };\n\n openReport = async reportShortUrl => {\n if (reportShortUrl) {\n try {\n const { reportId, durationKey } = await unrollReport(reportShortUrl);\n this.handleReportSuccess(reportId, durationKey, reportShortUrl);\n } catch (error) {\n this.redirectToCompareClips();\n }\n } else {\n this.redirectToCompareClips();\n }\n };\n\n handleReportSuccess = async (reportId, durationKey, reportShortUrl) => {\n if (reportId !== 'not found') {\n getReportMetadata(\n reportShortUrl,\n reportMetadata => {\n const creationTime = toDateString(reportMetadata['GenerationTimeString']);\n const expirationTimeString =\n reportMetadata['ExpirationTime'] === null\n ? ''\n : `It expires on ${toDateString(reportMetadata['ExpirationTimeString'])}.`;\n const reportTitle = reportMetadata['Title'];\n\n this.props.onSetReportReady(true);\n this.props.onSetReport(reportId, durationKey);\n this.props.onSetStatus({\n message: `Report \"${reportTitle}\" was generated on ${creationTime}. ${expirationTimeString}`,\n type: 'info'\n });\n },\n error => {\n this.props.onSetStatus({\n message: error,\n type: 'error'\n });\n }\n );\n } else {\n this.redirectToCompareClips();\n }\n };\n\n redirectToCompareClips = () => {\n this.props.history.replace(`/compare-clips${window.location.search}`);\n };\n\n checkForActivation = () => {\n const params = queryString.parse(window.location.search);\n let message = null;\n\n if (params.activated && JSON.parse(params.activated)) {\n message =\n 'Congratulations! Your DiffNow account has been created. You can now log in with your email and password.';\n } else if (params.activated && !JSON.parse(params.activated)) {\n if (params.error) {\n message = `Error: ${\n params.error\n }. Please try again, or contact us if this problem persists`;\n } else {\n message =\n 'A bad confirmation key was given. Please try again, or contact us if this problem persists.';\n }\n }\n\n if (message) {\n this.setState({\n activationConfirmationMessage: message,\n isActivationDialogOpen: true\n });\n }\n };\n\n checkForChangePassword = () => {\n const params = queryString.parse(window.location.search);\n\n if (params.changePassword && JSON.parse(params.changePassword)) {\n this.setState({\n isChangePasswordForResetDialogOpen: true,\n changePasswordEmailAddress: params.emailAddress,\n changePasswordConfirmationKey: params.confirmationKey\n });\n }\n };\n\n checkForChangeLog = () => {\n const storedCurrentVersion = window.localStorage.getItem('diffNowCurrentVersion');\n\n getChangeLog(changeLog => {\n const sortedVersions = changeLog.sort((changesA, changesB) =>\n compareVersions(changesB.version, changesA.version)\n );\n const newestVersion = sortedVersions[0].version;\n\n this.setState({\n currentVersion: newestVersion,\n changeLog: sortedVersions\n });\n\n if (newestVersion !== storedCurrentVersion) {\n this.setState({\n isChangeLogDialogOpen: true\n });\n }\n }, console.error);\n };\n\n markChangeLogViewed = version => {\n window.localStorage.setItem('diffNowCurrentVersion', version);\n };\n\n /* USER HELPERS */\n\n onUserLogin = (user, sessionToken) => {\n if (user.IsLoggedIn) {\n this.props.onLoggedIn({\n email: user.EmailAddress,\n sessionToken: sessionToken,\n isPremium: user.IsPremium\n });\n\n amplitude.getInstance().setUserId(user.EmailAddress);\n amplitude.getInstance().setUserProperties({\n user_email: user.EmailAddress,\n user_is_premium: user.IsPremium\n });\n\n window.localStorage.setItem('diffNowSessionToken', sessionToken);\n\n this.loadUserOptions(sessionToken);\n } else {\n this.onUserLogout(sessionToken);\n }\n };\n\n onUserLogout = async sessionToken => {\n this.props.onLoggedOut();\n\n amplitude.getInstance().setUserId(null);\n amplitude.getInstance().clearUserProperties();\n\n getDefaultOptions(sessionToken, defaultOptions => {\n this.props.onSetDefaultOptions(defaultOptions);\n this.props.onSetOptions(defaultOptions);\n this.props.onSetOptionsProfiles([\n {\n options_name: 'Default Profile',\n current_profile: 1\n }\n ]);\n });\n };\n\n onSubscribe = (subscriptionToken, plan, source) => {\n const sessionToken = window.localStorage.getItem('diffNowSessionToken');\n addNewSubscription(\n sessionToken,\n subscriptionToken.id,\n plan,\n source,\n () => {\n this.props.onSubscribeUser();\n this.toggleDialog('isWhyPremiumDialogOpen');\n this.toggleDialog('isCheckoutDialogOpen');\n },\n console.error\n );\n };\n\n /* COMPARISON */\n\n onCompare = async (type, comparisonPayload) => {\n const { comparisonCount, user, configuration, onSetStatus } = this.props;\n\n await reconnectSignalR();\n\n if (canUserCompare(comparisonCount, user, configuration)) {\n this.startComparison(type, comparisonPayload);\n } else {\n onSetStatus(comparisonLimitReachedStatus(user, configuration));\n }\n };\n\n onRecompare = async () => {\n const {\n comparisonCount,\n user,\n configuration,\n onSetStatus,\n reportId,\n lastComparedTabIndex,\n options\n } = this.props;\n const { lastComparisonPayload } = this.state;\n\n if (reportId && lastComparisonPayload) {\n await reconnectSignalR();\n if (canUserCompare(comparisonCount, user, configuration)) {\n const newComparisonPayload = Object.assign({}, lastComparisonPayload, {\n optionsJson: options\n });\n this.startComparison(lastComparedTabIndex, newComparisonPayload);\n } else {\n onSetStatus(comparisonLimitReachedStatus(user, configuration));\n }\n }\n };\n\n startComparison = async (type, comparisonPayload) => {\n const {\n onSetClipTitles,\n onSetClips,\n onSetDocType,\n onSetFileTitles,\n onSetUrls,\n onSetUrlTitles,\n onSetReportReady\n } = this.props;\n\n this.setState({ lastComparisonPayload: comparisonPayload });\n\n if (type === COMPARE_CLIPS) {\n onSetClipTitles(comparisonPayload.title1, comparisonPayload.title2);\n onSetClips(comparisonPayload.clip1, comparisonPayload.clip2);\n onSetDocType(comparisonPayload.clipType);\n } else if (type === COMPARE_FILES) {\n onSetFileTitles(comparisonPayload.originalFileName1, comparisonPayload.originalFileName2);\n } else if (type === COMPARE_URLS) {\n const getTitleFromUrl = title => title.substring(title.lastIndexOf('/') + 1);\n\n onSetUrls(comparisonPayload.url1, comparisonPayload.url2);\n onSetUrlTitles(\n getTitleFromUrl(comparisonPayload.url1),\n getTitleFromUrl(comparisonPayload.url2)\n );\n }\n\n comparisonPayload.useQueue = true;\n comparisonPayload.adBlockDetected = areAdsInvisible();\n\n const compareFn = [compareClips, compareFiles, compareUrls][type];\n try {\n onSetReportReady(false);\n const { reportId, examDiffUri } = await compareFn(comparisonPayload);\n this.onCompareSuccess(type, reportId, examDiffUri);\n } catch (error) {\n this.onCompareError(error);\n }\n };\n\n onCompareSuccess = (type, reportId, examDiffUri) => {\n const { onSetReportId, onSetExamDiffUri } = this.props;\n\n onSetReportId(reportId);\n onSetExamDiffUri(examDiffUri);\n bumpComparisonCounter(this.props);\n executePostComparisonActions(this.props, type);\n };\n\n onCompareError = message => {\n this.props.onSetStatus({\n message: message,\n type: 'error'\n });\n };\n\n /* OPTIONS HELPERS */\n\n loadUserOptions = sessionToken => {\n getDefaultOptions(sessionToken, defaultOptions => {\n this.props.onSetDefaultOptions(defaultOptions);\n getOptionsProfiles(sessionToken, this.props.onSetOptionsProfiles);\n getCurrentUserOptions(sessionToken, userOptions => {\n this.props.onSetOptions(merge({}, defaultOptions, userOptions));\n });\n });\n };\n\n getSelectedOptionsProfiles = (optionsProfiles, selectedProfile) =>\n map(optionsProfiles, prevProfile => {\n if (prevProfile.options_name === selectedProfile) {\n return Object.assign({}, prevProfile, { current_profile: 1 });\n } else {\n if (prevProfile.current_profile === IS_CURRENT_PROFILE) {\n return Object.assign({}, prevProfile, { current_profile: 0 });\n } else {\n return prevProfile;\n }\n }\n });\n\n getDeletedOptionsProfiles = (optionsProfiles, deletedProfile) =>\n optionsProfiles.filter(optionsProfile => optionsProfile.options_name !== deletedProfile);\n\n onProfileSelect = profile => {\n setCurrentProfile(this.props.user.sessionToken, profile);\n getUserOptionsByName(this.props.user.sessionToken, profile, userOptions => {\n this.props.onSetOptions(merge({}, this.props.defaultOptions, userOptions));\n this.props.onSetOptionsProfiles(\n this.getSelectedOptionsProfiles(this.props.optionsProfiles, profile)\n );\n });\n };\n\n onProfileDelete = profile => {\n deleteUserOptionsByName(this.props.user.sessionToken, profile, deletedProfile => {\n setCurrentProfile(this.props.user.sessionToken, 'Default Profile');\n getUserOptionsByName(this.props.user.sessionToken, 'Default Profile', userOptions => {\n this.props.onSetOptions(merge({}, this.props.defaultOptions, userOptions));\n this.props.onResetNewOptions();\n this.props.onSetOptionsProfiles(\n this.getSelectedOptionsProfiles(\n this.getDeletedOptionsProfiles(this.props.optionsProfiles, deletedProfile),\n 'Default Profile'\n )\n );\n });\n });\n };\n\n onProfileSaveAs = profile => {\n const newProfiles = this.props.optionsProfiles;\n newProfiles.push({\n options_name: profile,\n current_profile: 1\n });\n\n this.props.onSetOptionsProfiles(\n map(newProfiles, prevProfile => {\n if (prevProfile.options_name !== profile) {\n return Object.assign({}, prevProfile, { current_profile: 0 });\n } else {\n return prevProfile;\n }\n })\n );\n\n setCurrentProfile(this.props.user.sessionToken, profile);\n };\n\n toggleNightMode = () => {\n const newTheme = this.props.nightModeEnabled ? 'light' : 'dark';\n this.props.onSetTheme(newTheme);\n window.localStorage.setItem('diffNowTheme', newTheme);\n };\n\n getDescriptionContent = () => {\n const { currentTab } = this.state;\n\n switch (currentTab) {\n case 'compare-clips':\n return 'Paste clipboard contents to compare content online. Powered by ExamDiff Pro, the most powerful desktop comparison and merge tool.';\n case 'compare-files':\n return 'Upload files to compare content online. Powered by ExamDiff Pro, the most powerful desktop comparison and merge tool.';\n case 'compare-urls':\n return 'Provide URLs to compare content online. Powered by ExamDiff Pro, the most powerful desktop comparison and merge tool.';\n case 'compare-folders':\n return 'Upload folders as archives to compare content online. Powered by ExamDiff Pro, the most powerful desktop comparison and merge tool.';\n case 'samples':\n return 'Try a set of example files to compare content online. Powered by ExamDiff Pro, the most powerful desktop comparison and merge tool.';\n default:\n return 'Upload files, provide URLs, and paste clipboard contents to compare content online. Powered by ExamDiff Pro, the most powerful desktop comparison and merge tool.';\n }\n };\n\n /* DIALOG HELPERS */\n\n toggleDialog = (dialogState, otherState) => {\n this.setState(prevState =>\n Object.assign({}, { [dialogState]: !prevState[dialogState] }, otherState)\n );\n };\n\n renderReportOperations = hideLabels => {\n const { reportId, durationKey, examDiffUri, user } = this.props;\n\n if (reportId) {\n return (\n \n {examDiffUri && (\n \n {({ logEvent }) => (\n \n ) : null\n }\n icon={!hideLabels && 'open_in_new'}\n operation={() => {\n logEvent('DIFFNOW_OPEN_IN_EDP');\n window.open(examDiffUri, '_self');\n }}\n disabled={!canUseExamDiff()}\n tooltip=\"This feature is Windows-only and requires ExamDiff Pro 10.0.1.6 or above to be installed on your system.\"\n />\n )}\n \n )}\n \n {({ logEvent }) => (\n {\n logEvent('CLICKED_FULLSCREEN');\n window.open(generateReportUrl(reportId, durationKey));\n }}\n noMarginRight\n />\n )}\n \n this.toggleDialog('isStoreResultsDialogOpen')}\n disabled={user === null}\n mustBeLoggedIn\n noMarginRight\n />\n \n {({ logEvent }) => (\n {\n logEvent('CLICKED_DOWNLOAD');\n const reportData = await getReport(reportId, durationKey);\n download(reportData, `${reportId}.html`);\n }}\n />\n )}\n \n \n );\n }\n };\n\n get topBar() {\n const { theme, reportId } = this.props;\n\n return (\n \n {matches => {\n const hideLabels =\n (reportId && (matches.smallWithReport || matches.smallNoReport)) ||\n (!reportId && matches.smallNoReport);\n return (\n \n
\n \n {({ logEvent }) => (\n logEvent('CLICKED_POWERED_BY_EXAMDIFF_PRO')}\n target=\"_blank\"\n style={{\n display: reportId ? 'none' : 'flex',\n border: theme.palette.buttonBorder,\n color: this.props.nightModeEnabled ? '#ffffff' : '#000000',\n backgroundColor: this.props.nightModeEnabled ? '#0d47a1' : '#ffee58'\n }}\n rel=\"noopener noreferrer\"\n >\n {!hideLabels && 'Powered by ExamDiff Pro'}\n \n \n )}\n \n {this.renderReportOperations(hideLabels)}\n
\n
\n \n {({ logEvent }) => (\n {\n logEvent('OPEN_OPTIONS_DIALOG', { source: 'TOP_BAR' });\n this.toggleDialog('isOptionsDialogOpen');\n }}\n disabled={!this.props.optionsLoaded}\n noMarginRight\n />\n )}\n \n this.toggleDialog('isAboutDialogOpen')}\n />\n
\n \n );\n }}\n \n );\n }\n\n get content() {\n const showAdBlockHiddenMessage = !isPremium(this.props.user) && this.state.areAdsInvisible;\n const hideAdContainer = isPremium(this.props.user) || this.state.areAdsInvisible;\n\n if (this.state.loading) {\n return null;\n } else {\n return (\n {\n this.toggleDialog('isContactDialogOpen');\n }}\n >\n
\n {showAdBlockHiddenMessage && (\n \n {({ logEvent }) => (\n {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'AD_BLOCK_MESSAGE' });\n this.props.onSetPremiumSource(source);\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n />\n )}\n \n )}\n \n {this.topBar}\n this.setState({ currentTab })}\n lastComparedTabIndex={this.props.lastComparedTabIndex}\n collapsedTabIndex={this.props.collapsedTabIndex}\n setCollapsedTabIndex={this.props.onSetCollapsedTabIndex}\n />\n \n (\n \n {({ logEvent }) => (\n {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'TEXT_INPUT_PANE' });\n this.props.onSetPremiumSource('inputpane-text');\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n />\n )}\n \n )}\n history={this.props.history}\n />\n (\n \n {({ logEvent }) => (\n {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'FILE_INPUT_PANE' });\n this.props.onSetPremiumSource('inputpane-files');\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n />\n )}\n \n )}\n history={this.props.history}\n />\n (\n \n {({ logEvent }) => (\n {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'URL_INPUT_PANE' });\n this.props.onSetPremiumSource('inputpane-urls');\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n />\n )}\n \n )}\n history={this.props.history}\n />\n \n \n \n \n {({ logEvent }) => (\n {\n this.props.onSetPremiumSource(source);\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'STATUS_BAR' });\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n openOptionsDialog={() => {\n logEvent('OPEN_OPTIONS_DIALOG', { source: 'STATUS_BAR' });\n this.toggleDialog('isOptionsDialogOpen');\n }}\n removeTip={() => {\n this.props.onSetStatus({\n message: null,\n type: null\n });\n }}\n />\n )}\n \n {this.props.isComparing && }\n \n \n {\n this.toggleDialog('isTermsOfServiceDialogOpen');\n }}\n openContactDialog={() => {\n this.toggleDialog('isContactDialogOpen');\n }}\n openChangeLogDialog={() => {\n this.toggleDialog('isChangeLogDialogOpen');\n }}\n />\n
\n \n );\n }\n }\n\n get dialogs() {\n if (!this.state.loading) {\n return (\n
\n this.toggleDialog('isLoginDialogOpen')}\n openRegisterConfirmDialog={email => {\n this.toggleDialog('isRegisterConfirmDialogOpen', {\n registerConfirmDialogEmail: email\n });\n }}\n />\n {\n this.toggleDialog('isRegisterConfirmDialogOpen', { registerConfirmDialogEmail: '' });\n }}\n />\n {\n this.toggleDialog('isSavedReportsDialogOpen');\n }}\n />\n \n {({ logEvent }) => (\n {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'OPTIONS_DIALOG' });\n this.props.onSetPremiumSource('options-dialog');\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n closeDialog={() => {\n this.toggleDialog('isOptionsDialogOpen');\n }}\n />\n )}\n \n \n {({ logEvent }) => (\n {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source: 'OPTIONS_DIALOG' });\n this.props.onSetPremiumSource('about-dialog');\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n closeDialog={() => {\n this.toggleDialog('isAboutDialogOpen');\n }}\n />\n )}\n \n {\n this.toggleDialog('isCheckoutDialogOpen');\n }}\n user={this.props.user}\n closeDialog={() => {\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n />\n {\n this.toggleDialog('isCheckoutDialogOpen');\n }}\n openTermsOfService={() => {\n this.toggleDialog('isTermsOfServiceDialogOpen');\n }}\n />\n {\n this.toggleDialog('isChangePasswordDialogOpen');\n }}\n />\n {\n this.toggleDialog('isChangePasswordForResetDialogOpen');\n }}\n />\n {\n this.toggleDialog('isManagePremiumSubscriptionDialogOpen');\n }}\n />\n {\n this.toggleDialog('isTermsOfServiceDialogOpen');\n }}\n />\n {\n this.toggleDialog('isContactDialogOpen');\n }}\n />\n {\n this.toggleDialog('isStoreResultsDialogOpen');\n }}\n />\n {\n this.toggleDialog('isActivationDialogOpen');\n }}\n />\n {\n this.toggleDialog('isChangeLogDialogOpen');\n this.markChangeLogViewed(this.state.currentVersion);\n }}\n />\n
\n );\n }\n return null;\n }\n\n render() {\n return (\n \n \n DiffNow - Compare Files, URLs, and Clipboard Contents Online\n \n \n \n {({ logEvent }) => (\n this.toggleDialog('isLoginDialogOpen')}\n openSavedReportsDialog={() => this.toggleDialog('isSavedReportsDialogOpen')}\n openWhyPremiumDialog={source => {\n logEvent('OPEN_WHY_PREMIUM_DIALOG', { source });\n this.props.onSetPremiumSource('accountsbar-button');\n this.toggleDialog('isWhyPremiumDialogOpen');\n }}\n openChangePasswordDialog={() => this.toggleDialog('isChangePasswordDialogOpen')}\n openManagePremiumSubscriptionDialog={() =>\n this.toggleDialog('isManagePremiumSubscriptionDialogOpen')\n }\n />\n )}\n \n {this.content}\n {this.dialogs}\n this.toggleDialog('isTermsOfServiceDialogOpen')}\n dismiss={() => {\n window.localStorage.setItem('diffNowFooterDismissed', true);\n this.setState({ isConsentFooterDismissed: true });\n }}\n />\n \n );\n }\n}\n\nexport default withTheme()(\n withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(App)\n )\n);\n","import zIndex from '@material-ui/core/styles/zIndex';\nimport { createMuiTheme } from '@material-ui/core/styles';\n\nexport const lightTheme = createMuiTheme({\n zIndex: Object.assign({}, zIndex, {\n appBar: 2000\n }),\n typography: {\n fontFamily: '\"Open Sans\", Roboto, sans-serif'\n },\n palette: {\n primary: {\n light: '#63a4ff',\n main: '#1976d2',\n dark: '#004ba0',\n contrastText: '#ffffff',\n optionsText: '#000000'\n },\n secondary: {\n light: '#ffff8b',\n main: '#ffee58',\n dark: '#c9bc1f',\n contrastText: '#000000'\n },\n background: {\n default: '#eeeeee'\n },\n clipBackground: {},\n tab: {\n selected: '#448AFF',\n unselected: '#1976d2'\n },\n topButton: {\n backgroundColor: '#1E88E5',\n color: '#ffffff'\n },\n buttonBorder: '1px solid #CCCCCC',\n status: {\n error: {\n color: '#ffffff',\n backgroundColor: '#E57373'\n },\n success: {\n color: '#ffffff',\n backgroundColor: '#81C784'\n },\n tip: {\n color: '#000000',\n backgroundColor: '#ffee58'\n },\n info: {\n color: '#000000',\n backgroundColor: '#C5E1A5'\n }\n },\n optionsDialog: {\n titleBarColor: '#DDDDDD'\n },\n selectedProfileColor: '#eeeeee',\n unselectedProfileColor: '#ffffff',\n iconColor: '#222222',\n disclaimerTextColor: '#444444'\n },\n overrides: {\n MuiButton: {\n contained: {\n boxShadow: 'none'\n }\n },\n MuiTableCell: {\n root: {\n '&:last-child': {\n paddingRight: 0\n }\n },\n head: {\n '&:not(:first-child)': {\n width: '19%'\n }\n }\n }\n }\n});\n\nexport const darkTheme = createMuiTheme({\n zIndex: Object.assign({}, zIndex, {\n appBar: 2000\n }),\n typography: {\n fontFamily: '\"Open Sans\", Roboto, sans-serif'\n },\n palette: {\n primary: {\n light: '#484848',\n main: '#212121',\n dark: '#000000',\n contrastText: '#ffffff',\n optionsText: '#cccccc'\n },\n secondary: {\n light: '#a4a4a4',\n main: '#757575',\n dark: '#494949',\n contrastText: '#000000'\n },\n background: {\n default: '#2b2b2b'\n },\n clipBackground: {\n backgroundColor: '#585858',\n color: '#eeeeee'\n },\n tab: {\n selected: '#484848',\n unselected: '#212121'\n },\n topButton: {\n backgroundColor: '#757575',\n color: '#ffffff'\n },\n buttonBorder: '1px solid #444444',\n status: {\n error: {\n color: '#ffffff',\n backgroundColor: '#a72828'\n },\n success: {\n color: '#ffffff',\n backgroundColor: '#616161'\n },\n tip: {\n color: '#000000',\n backgroundColor: '#9E9E9E'\n },\n info: {\n color: '#000000',\n backgroundColor: '#BDBDBD'\n }\n },\n optionsDialog: {\n titleBarColor: '#222222'\n },\n selectedProfileColor: '#777777',\n unselectedProfileColor: '#383838',\n iconColor: '#dddddd',\n disclaimerTextColor: '#999999'\n },\n overrides: {\n MuiPaper: {\n root: {\n backgroundColor: '#383838',\n color: '#cccccc'\n }\n },\n MuiTypography: {\n body1: {\n color: '#cccccc'\n },\n title: {\n color: '#cccccc'\n }\n },\n MuiInputLabel: {\n root: {\n color: '#cccccc'\n }\n },\n MuiInput: {\n root: {\n color: '#cccccc'\n },\n disabled: {\n color: '#666 !important',\n '&:before': {\n borderBottomColor: '#666 !important'\n }\n },\n underline: {\n '&:before': {\n borderBottomColor: '#cccccc'\n }\n }\n },\n MuiMenuItem: {\n root: {\n color: '#cccccc'\n }\n },\n MuiButton: {\n root: {\n color: '#ffffff',\n '&$disabled': {\n color: '#777777'\n }\n },\n textPrimary: {\n color: '#ffffff'\n },\n contained: {\n '&$disabled': {\n color: '#777777'\n },\n boxShadow: 'none'\n },\n containedPrimary: {\n backgroundColor: '#cccccc',\n color: '#000000',\n '&:hover': {\n backgroundColor: '#888888'\n }\n },\n containedSecondary: {\n backgroundColor: '#757575',\n color: '#ffffff'\n },\n outlined: {\n color: '#dddddd'\n },\n outlinedPrimary: {\n borderColor: '#eeeeee',\n color: '#ffffff',\n '&:hover': {\n borderColor: '#ffffff'\n }\n }\n },\n MuiCheckbox: {\n root: {\n color: '#eeeeee'\n },\n disabled: {\n color: '#666 !important'\n },\n colorPrimary: {\n '&$checked': {\n color: '#cccccc'\n }\n }\n },\n MuiFormControlLabel: {\n disabled: {\n color: '#666 !important'\n }\n },\n MuiRadio: {\n root: {\n color: '#eeeeee'\n },\n colorPrimary: {\n '&$checked': {\n color: '#cccccc'\n }\n }\n },\n MuiTableCell: {\n root: {\n '&:last-child': {\n paddingRight: 0\n }\n },\n body: {\n color: '#ffffff'\n },\n head: {\n color: '#dddddd',\n '&:not(:first-child)': {\n width: '19%'\n }\n }\n }\n }\n});\n","import React from 'react';\nimport { array, string } from 'prop-types';\nimport { connect } from 'react-redux';\nimport { MuiThemeProvider } from '@material-ui/core/styles';\n\nimport { lightTheme, darkTheme } from '../themes/personal';\n\nfunction mapStateToProps(state) {\n return {\n theme: state.global.theme\n };\n}\n\nclass ConnectedThemeProvider extends React.Component {\n static propTypes = {\n theme: string,\n children: array\n };\n\n render() {\n const { children, theme } = this.props;\n let muiTheme = null;\n\n if (theme === 'light') {\n muiTheme = lightTheme;\n } else if (theme === 'dark') {\n muiTheme = darkTheme;\n }\n\n return {children};\n }\n}\n\nexport default connect(mapStateToProps)(ConnectedThemeProvider);\n","const defaultState = {\n theme: 'light', // light | dark\n premiumSource: 'accountsbar-button',\n user: undefined, // null = logged out, undefined = unknown yet if logged in or out\n renderId: 0,\n status: {\n message: '',\n type: ''\n },\n isComparing: false,\n isTruncated: false,\n isReportReady: false,\n reportId: undefined,\n durationKey: undefined,\n examDiffUri: null,\n optionsProfiles: [\n {\n options_name: 'Default Profile',\n current_profile: 1\n }\n ],\n optionsLoaded: false,\n options: {},\n newOptions: {},\n defaultOptions: {},\n comparisonCount: undefined,\n comparisonStartDate: null,\n configuration: {},\n lastComparedTabIndex: null,\n collapsedTabIndex: null,\n\n firstTitle: '',\n secondTitle: '',\n\n firstClipTitle: '',\n firstClip: '',\n secondClipTitle: '',\n secondClip: '',\n docType: '',\n\n firstUrlTitle: '',\n firstUrl: '',\n secondUrlTitle: '',\n secondUrl: '',\n\n firstFileTitle: '',\n firstFileStatus: '',\n firstFileName: '',\n firstFileUploadedName: 'not-uploaded',\n secondFileTitle: '',\n secondFileStatus: '',\n secondFileName: '',\n secondFileUploadedName: 'not-uploaded'\n};\n\nexport default defaultState;\n","import { combineReducers } from 'redux';\n\nimport gl from './global';\nimport version from './version';\n\nconst rootReducer = combineReducers({\n global: gl,\n version: version\n});\n\nexport default rootReducer;\n","import * as ga from '../actions/global';\nimport defaultState from '../store/defaultGlobalState';\n\nexport default function global(state = defaultState, action) {\n switch (action.type) {\n case ga.LOGGED_IN:\n return Object.assign({}, state, { user: action.payload.user });\n\n case ga.LOGGED_OUT:\n return Object.assign({}, state, { user: null });\n\n case ga.SUBSCRIBE_USER:\n return Object.assign({}, state, { user: Object.assign({}, state.user, { isPremium: true }) });\n\n case ga.RE_RENDER:\n return Object.assign({}, state, { renderId: state.renderId + 1 });\n\n case ga.SET_STATUS: {\n const { status } = action.payload;\n return Object.assign({}, state, {\n status,\n isComparing:\n status.message === 'Launching ExamDiff Pro...'\n ? true\n : status.type === null\n ? false\n : state.isComparing\n });\n }\n\n case ga.SET_REPORT:\n return {\n ...state,\n reportId: action.payload.reportId,\n durationKey: action.payload.durationKey\n };\n\n case ga.SET_EXAMDIFF_URI:\n return { ...state, examDiffUri: action.payload.examDiffUri };\n\n case ga.SET_CLIP_TITLES:\n return Object.assign({}, state, {\n firstClipTitle: action.payload.firstClipTitle,\n firstTitle: action.payload.firstClipTitle,\n secondClipTitle: action.payload.secondClipTitle,\n secondTitle: action.payload.secondClipTitle\n });\n\n case ga.SET_FILE_TITLES:\n return Object.assign({}, state, {\n firstFileTitle: action.payload.firstFileTitle,\n firstTitle: action.payload.firstFileTitle,\n secondFileTitle: action.payload.secondFileTitle,\n secondTitle: action.payload.secondFileTitle\n });\n\n case ga.SET_URL_TITLES:\n return Object.assign({}, state, {\n firstUrlTitle: action.payload.firstUrlTitle,\n firstTitle: action.payload.firstUrlTitle,\n secondUrlTitle: action.payload.secondUrlTitle,\n secondTitle: action.payload.secondUrlTitle\n });\n\n case ga.SET_CLIPS:\n return Object.assign({}, state, {\n firstClip: action.payload.firstClip,\n secondClip: action.payload.secondClip\n });\n\n case ga.SET_DOC_TYPE:\n return Object.assign({}, state, { docType: action.payload.docType });\n\n case ga.SET_CLIENT_ID:\n return Object.assign({}, state, { clientId: action.payload.clientId });\n\n case ga.SET_OPTIONS_PROFILES:\n return Object.assign({}, state, { optionsProfiles: action.payload.optionsProfiles });\n\n case ga.SET_OPTIONS:\n return Object.assign({}, state, {\n options: action.payload.options,\n optionsLoaded: true\n });\n\n case ga.SET_NEW_OPTION:\n return Object.assign({}, state, {\n newOptions: Object.assign({}, state.newOptions, action.payload.newOption)\n });\n\n case ga.SAVE_NEW_OPTIONS:\n return Object.assign({}, state, {\n options: Object.assign({}, state.options, state.newOptions)\n });\n\n case ga.RESET_NEW_OPTIONS:\n return Object.assign({}, state, { newOptions: {} });\n\n case ga.SET_DEFAULT_OPTIONS:\n return Object.assign({}, state, { defaultOptions: action.payload.defaultOptions });\n\n case ga.SET_TRUNCATED_STATUS:\n return Object.assign({}, state, { isTruncated: action.payload.isTruncated });\n\n case ga.SET_COMPARISON_COUNT:\n return Object.assign({}, state, {\n comparisonCount: action.payload.newComparisonCount,\n comparisonStartDate: action.payload.newComparisonStartDate\n });\n\n case ga.SET_CONFIGURATION:\n return Object.assign({}, state, {\n configuration: Object.assign({}, action.payload.configuration)\n });\n\n case ga.SET_URLS:\n return Object.assign({}, state, {\n firstUrl: action.payload.firstUrl,\n secondUrl: action.payload.secondUrl\n });\n\n case ga.SET_FIRST_FILE:\n return Object.assign({}, state, {\n firstFileStatus: action.payload.firstFileStatus,\n firstFileName: action.payload.firstFileName,\n firstFileUploadedName: action.payload.firstFileUploadedName\n });\n\n case ga.SET_SECOND_FILE:\n return Object.assign({}, state, {\n secondFileStatus: action.payload.secondFileStatus,\n secondFileName: action.payload.secondFileName,\n secondFileUploadedName: action.payload.secondFileUploadedName\n });\n\n case ga.SET_LAST_COMPARED_TAB_INDEX:\n return Object.assign({}, state, {\n lastComparedTabIndex: action.payload.lastComparedTabIndex\n });\n\n case ga.SET_COLLAPSED_TAB_INDEX:\n return Object.assign({}, state, { collapsedTabIndex: action.payload.collapsedTabIndex });\n\n case ga.SET_THEME:\n return { ...state, theme: action.payload.theme };\n\n case ga.SET_PREMIUM_SOURCE:\n return { ...state, premiumSource: action.payload.premiumSource };\n\n case ga.SET_REPORT_READY:\n return { ...state, isReportReady: action.payload.isReportReady };\n\n default:\n return state;\n }\n}\n","export default function version(state = 0, action) {\n return state;\n}\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport { routerMiddleware } from 'react-router-redux';\nimport { createLogger } from 'redux-logger';\nimport thunk from 'redux-thunk';\nimport { createBrowserHistory } from 'history';\nimport isFunction from 'lodash/isFunction';\n\nimport rootReducer from '../reducers';\n\nexport const history = createBrowserHistory();\n\nexport default function configureStore(initialState) {\n const enhancers = [];\n\n const logger = createLogger({\n predicate: (getState, action) => action.type !== '@@router/LOCATION_CHANGE'\n });\n\n const middleware = [thunk, routerMiddleware(history)];\n\n if (process.env.NODE_ENV === 'development') {\n const devToolsExtension = window.devToolsExtension;\n\n if (isFunction(devToolsExtension)) {\n enhancers.push(devToolsExtension());\n }\n\n middleware.push(logger);\n }\n\n const composedEnhancers = compose(\n applyMiddleware(...middleware),\n ...enhancers\n );\n\n const store = createStore(rootReducer, initialState, composedEnhancers);\n\n if (module.hot) {\n // Enable Webpack hot module replacement for reducers\n module.hot.accept('../reducers', () => {\n const nextRootReducer = require('../reducers').default;\n store.replaceReducer(nextRootReducer);\n });\n }\n\n return store;\n}\n","import 'babel-polyfill'; // eslint-disable-line\nimport React from 'react';\nimport { render } from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { ConnectedRouter } from 'react-router-redux';\nimport amplitude from 'amplitude-js';\nimport { AmplitudeProvider } from '@amplitude/react-amplitude';\nimport CssBaseline from '@material-ui/core/CssBaseline';\n\nimport App from './containers/App';\nimport ConnectedThemeProvider from './containers/ConnectedThemeProvider';\nimport { isBrowserUnsupported } from './util/common';\nimport configureStore, { history } from './store/configureStore';\nimport { AMPLITUDE_KEY } from './util/constants';\nimport diffnowLogo from './diffnow.png';\nimport './styles/index.css';\nimport './styles/fonts.css';\n\nconst store = configureStore({});\n\nif (isBrowserUnsupported()) {\n render(\n
\n \"DiffNow\"\n
\n This browser does not support DiffNow. Please upgrade your browser to the latest Firefox,\n Chrome, Microsoft Edge, or Internet Explorer.\n
\n
,\n document.getElementById('root')\n );\n} else {\n render(\n \n \n \n \n \n \n \n \n \n ,\n document.getElementById('root')\n );\n}\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/comparing-loader.3dbe0e8c.gif\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAOCAYAAADnqNYmAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4AIYFCIIh7tYjAAAACZJREFUGNNjYGBg+M/AwPD/////DDA2EwMWwAhVgQKwqmQYdmYCAPN0JO0ozU3YAAAAAElFTkSuQmCC\"","/* eslint-disable */\n/*! modernizr 3.6.0 (Custom Build) | MIT *\n * https://modernizr.com/download/?-es5-es6collections-flexbox-localstorage-setclasses !*/\n!function(window,document,undefined){function is(e,t){return typeof e===t}function testRunner(){var e,t,r,n,o,s,i;for(var d in tests)if(tests.hasOwnProperty(d)){if(e=[],t=tests[d],t.name&&(e.push(t.name.toLowerCase()),t.options&&t.options.aliases&&t.options.aliases.length))for(r=0;rd;d++)if(l=e[d],c=mStyle.style[l],contains(l,\"-\")&&(l=cssToDOM(l)),mStyle.style[l]!==undefined){if(n||is(r,\"undefined\"))return o(),\"pfx\"==t?l:!0;try{mStyle.style[l]=r}catch(f){}if(mStyle.style[l]!=c)return o(),\"pfx\"==t?l:!0}return o(),!1}function testPropsAll(e,t,r,n,o){var s=e.charAt(0).toUpperCase()+e.slice(1),i=(e+\" \"+cssomPrefixes.join(s+\" \")+s).split(\" \");return is(t,\"string\")||is(t,\"undefined\")?testProps(i,t,n,o):(i=(e+\" \"+domPrefixes.join(s+\" \")+s).split(\" \"),testDOMProps(i,t,r))}function testAllProps(e,t,r){return testPropsAll(e,undefined,undefined,t,r)}var classes=[],tests=[],ModernizrProto={_version:\"3.6.0\",_config:{classPrefix:\"\",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,t){var r=this;setTimeout(function(){t(r[e])},0)},addTest:function(e,t,r){tests.push({name:e,fn:t,options:r})},addAsyncTest:function(e){tests.push({name:null,fn:e})}},Modernizr=function(){};Modernizr.prototype=ModernizrProto,Modernizr=new Modernizr,Modernizr.addTest(\"es6collections\",!!(window.Map&&window.Set&&window.WeakMap&&window.WeakSet));var docElement=document.documentElement,isSVG=\"svg\"===docElement.nodeName.toLowerCase();Modernizr.addTest(\"es5array\",function(){return!!(Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray)}),Modernizr.addTest(\"es5date\",function(){var e=\"2013-04-12T06:06:37.307Z\",t=!1;try{t=!!Date.parse(e)}catch(r){}return!!(Date.now&&Date.prototype&&Date.prototype.toISOString&&Date.prototype.toJSON&&t)}),Modernizr.addTest(\"es5function\",function(){return!(!Function.prototype||!Function.prototype.bind)}),Modernizr.addTest(\"es5object\",function(){return!!(Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions)}),Modernizr.addTest(\"strictmode\",function(){\"use strict\";return!this}()),Modernizr.addTest(\"es5string\",function(){return!(!String.prototype||!String.prototype.trim)}),Modernizr.addTest(\"json\",\"JSON\"in window&&\"parse\"in JSON&&\"stringify\"in JSON),Modernizr.addTest(\"es5syntax\",function(){var value,obj,stringAccess,getter,setter,reservedWords,zeroWidthChars;try{return stringAccess=eval('\"foobar\"[3] === \"b\"'),getter=eval(\"({ get x(){ return 1 } }).x === 1\"),eval(\"({ set x(v){ value = v; } }).x = 1\"),setter=1===value,eval(\"obj = ({ if: 1 })\"),reservedWords=1===obj[\"if\"],zeroWidthChars=eval(\"_‌‍ = true\"),stringAccess&&getter&&setter&&reservedWords&&zeroWidthChars}catch(ignore){return!1}}),Modernizr.addTest(\"es5undefined\",function(){var e,t;try{t=window.undefined,window.undefined=12345,e=\"undefined\"==typeof window.undefined,window.undefined=t}catch(r){return!1}return e}),Modernizr.addTest(\"es5\",function(){return!!(Modernizr.es5array&&Modernizr.es5date&&Modernizr.es5function&&Modernizr.es5object&&Modernizr.strictmode&&Modernizr.es5string&&Modernizr.json&&Modernizr.es5syntax&&Modernizr.es5undefined)}),Modernizr.addTest(\"localstorage\",function(){var e=\"modernizr\";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}});var omPrefixes=\"Moz O ms Webkit\",cssomPrefixes=ModernizrProto._config.usePrefixes?omPrefixes.split(\" \"):[];ModernizrProto._cssomPrefixes=cssomPrefixes;var domPrefixes=ModernizrProto._config.usePrefixes?omPrefixes.toLowerCase().split(\" \"):[];ModernizrProto._domPrefixes=domPrefixes;var modElem={elem:createElement(\"modernizr\")};Modernizr._q.push(function(){delete modElem.elem});var mStyle={style:modElem.elem.style};Modernizr._q.unshift(function(){delete mStyle.style}),ModernizrProto.testAllProps=testPropsAll,ModernizrProto.testAllProps=testAllProps,Modernizr.addTest(\"flexbox\",testAllProps(\"flexBasis\",\"1px\",!0)),testRunner(),setClasses(classes),delete ModernizrProto.addTest,delete ModernizrProto.addAsyncTest;for(var i=0;i