diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..7b4b42b2 --- /dev/null +++ b/.babelrc @@ -0,0 +1,6 @@ +{ + "presets": ["@babel/preset-env", "@babel/preset-react"], + "plugins": ["@babel/plugin-proposal-class-properties", ["@babel/transform-runtime", { + "regenerator": true + }]] +} \ No newline at end of file diff --git a/package.json b/package.json index f0af509f..0c5431a4 100644 --- a/package.json +++ b/package.json @@ -12,11 +12,11 @@ "version": "5.0.0", "dependencies": { "@eartharoid/dtf": "^1.0.8", + "@fontsource/lexend-deca": "^4.1.0", + "@fontsource/roboto": "^4.1.0", "@material-ui/core": "4.11.2", "@material-ui/icons": "4.11.2", "deepmerge": "^4.2.2", - "fontsource-lexend-deca": "^3.0.11", - "fontsource-roboto": "^3.0.3", "react": "17.0.1", "react-beforeunload": "^2.4.0", "react-clock": "^3.0.0", @@ -27,13 +27,23 @@ "react-toastify": "6.2.0" }, "devDependencies": { - "eslint": "^7.18.0", - "node-sass": "^4.14.1", - "react-scripts": "^4.0.1" + "@babel/core": "^7.12.10", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.12.11", + "@babel/preset-react": "^7.12.10", + "babel-loader": "^8.2.2", + "css-loader": "^5.0.1", + "html-webpack-plugin": "^5.0.0-beta.5", + "sass": "^1.32.4", + "sass-loader": "^10.1.1", + "style-loader": "^2.0.0", + "url-loader": "^4.1.1", + "webpack": "^5.15.0" }, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", + "start": "webpack serve", + "build": "webpack", "chrome": "cp manifest/chrome.json build/manifest.json", "firefox": "cp manifest/firefox.json build/manifest.json", "opera": "cp manifest/opera.json build/manifest.json && cp manifest/background-opera.js build/" diff --git a/src/components/modals/Feedback.jsx b/src/components/modals/Feedback.jsx index 5cc99fdd..cb01a940 100644 --- a/src/components/modals/Feedback.jsx +++ b/src/components/modals/Feedback.jsx @@ -1,10 +1,10 @@ import React from 'react'; -const FeedbackModal = () => { +export default function FeedbackModal(props) { return (

Give us feedback

- × + ×

@@ -20,6 +20,4 @@ const FeedbackModal = () => {
); -} - -export default FeedbackModal; \ No newline at end of file +} \ No newline at end of file diff --git a/src/components/modals/Update.jsx b/src/components/modals/Update.jsx index 5a2c2504..ad249295 100644 --- a/src/components/modals/Update.jsx +++ b/src/components/modals/Update.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import * as Constants from '../../modules/constants'; export default class Update extends React.PureComponent { diff --git a/src/components/modals/Welcome.jsx b/src/components/modals/Welcome.jsx index ba6faabd..836ad64b 100644 --- a/src/components/modals/Welcome.jsx +++ b/src/components/modals/Welcome.jsx @@ -1,9 +1,10 @@ import React from 'react'; + import EmailIcon from '@material-ui/icons/Email'; import TwitterIcon from '@material-ui/icons/Twitter'; import ForumIcon from '@material-ui/icons/Forum'; -const WelcomeModal = (props) => { +export default function WelcomeModal(props) { return (
× @@ -22,6 +23,4 @@ const WelcomeModal = (props) => {
); -} - -export default WelcomeModal; \ No newline at end of file +} \ No newline at end of file diff --git a/src/components/modals/marketplace/Item.jsx b/src/components/modals/marketplace/Item.jsx index a43a4506..388e9f48 100644 --- a/src/components/modals/marketplace/Item.jsx +++ b/src/components/modals/marketplace/Item.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import ArrowBackIcon from '@material-ui/icons/ArrowBack'; export default class Item extends React.PureComponent { diff --git a/src/components/modals/settings/Checkbox.jsx b/src/components/modals/settings/Checkbox.jsx index ca64eb71..e98cd0c7 100644 --- a/src/components/modals/settings/Checkbox.jsx +++ b/src/components/modals/settings/Checkbox.jsx @@ -1,5 +1,7 @@ import React from 'react'; + import SettingsFunctions from '../../../modules/helpers/settings'; + import CheckboxUI from '@material-ui/core/Checkbox'; import FormControlLabel from '@material-ui/core/FormControlLabel'; diff --git a/src/components/modals/settings/FileUpload.jsx b/src/components/modals/settings/FileUpload.jsx index 46c9bb43..22e5c7c7 100644 --- a/src/components/modals/settings/FileUpload.jsx +++ b/src/components/modals/settings/FileUpload.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import { toast } from 'react-toastify'; export default class FileUpload extends React.PureComponent { @@ -16,7 +17,7 @@ export default class FileUpload extends React.PureComponent { reader.readAsDataURL(file); } - + reader.addEventListener('load', (e) => this.props.loadFunction(e)); }; } diff --git a/src/components/modals/settings/Section.jsx b/src/components/modals/settings/Section.jsx index b05f7693..1abf5955 100644 --- a/src/components/modals/settings/Section.jsx +++ b/src/components/modals/settings/Section.jsx @@ -1,5 +1,7 @@ import React from 'react'; + import Slider from './Slider'; + import ExpandMore from '@material-ui/icons/ExpandMore'; export default class Section extends React.PureComponent { diff --git a/src/components/modals/settings/Slider.jsx b/src/components/modals/settings/Slider.jsx index 887499b5..c0640b4e 100644 --- a/src/components/modals/settings/Slider.jsx +++ b/src/components/modals/settings/Slider.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import SettingsFunctions from '../../../modules/helpers/settings'; export default class Slider extends React.PureComponent { @@ -11,7 +12,7 @@ export default class Slider extends React.PureComponent { handleChange(name) { SettingsFunctions.setItem(name); - + this.setState({ checked: (this.state.checked === true) ? false : true }); diff --git a/src/components/modals/settings/sections/GreetingSettings.jsx b/src/components/modals/settings/sections/GreetingSettings.jsx index 3f2e9f73..2bd449c2 100644 --- a/src/components/modals/settings/sections/GreetingSettings.jsx +++ b/src/components/modals/settings/sections/GreetingSettings.jsx @@ -1,6 +1,8 @@ import React from 'react'; + import Section from '../Section'; import Checkbox from '../Checkbox'; + import DatePicker from 'react-date-picker'; import { toast } from 'react-toastify'; import { Beforeunload } from 'react-beforeunload'; diff --git a/src/components/modals/settings/sections/LanguageSettings.jsx b/src/components/modals/settings/sections/LanguageSettings.jsx index 5e4ab9e2..b84c78c7 100644 --- a/src/components/modals/settings/sections/LanguageSettings.jsx +++ b/src/components/modals/settings/sections/LanguageSettings.jsx @@ -1,7 +1,7 @@ import React from 'react'; import Dropdown from '../Dropdown'; -const LanguageSettings = (props) => { +export default function LanguageSettings (props) { return (

{props.language.language}

@@ -18,6 +18,4 @@ const LanguageSettings = (props) => {
); -} - -export default LanguageSettings; \ No newline at end of file +} \ No newline at end of file diff --git a/src/components/modals/settings/sections/SearchSettings.jsx b/src/components/modals/settings/sections/SearchSettings.jsx index 4cbe1299..febf93d5 100644 --- a/src/components/modals/settings/sections/SearchSettings.jsx +++ b/src/components/modals/settings/sections/SearchSettings.jsx @@ -1,6 +1,9 @@ import React from 'react'; + import SettingsFunctions from '../../../../modules/helpers/settings'; + import { toast } from 'react-toastify'; + import Section from '../Section'; import Dropdown from '../Dropdown'; import Checkbox from '../Checkbox'; diff --git a/src/components/modals/tabs/Addons.jsx b/src/components/modals/tabs/Addons.jsx index 3709a757..4a4e6b21 100644 --- a/src/components/modals/tabs/Addons.jsx +++ b/src/components/modals/tabs/Addons.jsx @@ -1,9 +1,12 @@ import React from 'react'; + import LocalMallIcon from '@material-ui/icons/LocalMall'; -import { toast } from 'react-toastify'; import Item from '../marketplace/Item'; import Items from '../marketplace/Items'; import FileUpload from '../settings/FileUpload'; + +import { toast } from 'react-toastify'; + import MarketplaceFunctions from '../../../modules/helpers/marketplace'; export default class Addons extends React.PureComponent { @@ -58,7 +61,7 @@ export default class Addons extends React.PureComponent { document.getElementById('marketplace').style.display = 'block'; document.getElementById('item').style.display = 'none'; } - + this.setState({ button: this.buttons.uninstall }); diff --git a/src/components/modals/tabs/Marketplace.jsx b/src/components/modals/tabs/Marketplace.jsx index 3bd42cc0..bf43a6f7 100644 --- a/src/components/modals/tabs/Marketplace.jsx +++ b/src/components/modals/tabs/Marketplace.jsx @@ -1,12 +1,16 @@ import React from 'react'; + import WifiOffIcon from '@material-ui/icons/WifiOff'; import ArrowBackIcon from '@material-ui/icons/ArrowBack'; -import { toast } from 'react-toastify'; import Item from '../marketplace/Item'; -import MarketplaceFunctions from '../../../modules/helpers/marketplace'; -import * as Constants from '../../../modules/constants'; import Items from '../marketplace/Items'; +import MarketplaceFunctions from '../../../modules/helpers/marketplace'; + +import { toast } from 'react-toastify'; + +import * as Constants from '../../../modules/constants'; + export default class Marketplace extends React.PureComponent { constructor(...args) { super(...args); diff --git a/src/components/modals/tabs/Settings.jsx b/src/components/modals/tabs/Settings.jsx index d5a660ba..c282392f 100644 --- a/src/components/modals/tabs/Settings.jsx +++ b/src/components/modals/tabs/Settings.jsx @@ -1,9 +1,11 @@ import React from 'react'; + import SettingsFunctions from '../../../modules/helpers/settings'; import Checkbox from '../settings/Checkbox'; import Dropdown from '../settings/Dropdown'; import Section from '../settings/Section'; import FileUpload from '../settings/FileUpload'; + import { toast } from 'react-toastify'; import BackgroundSettings from '../settings/sections/BackgroundSettings'; diff --git a/src/components/widgets/background/Background.jsx b/src/components/widgets/background/Background.jsx index 5bb0eeb4..f609d8ce 100644 --- a/src/components/widgets/background/Background.jsx +++ b/src/components/widgets/background/Background.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import * as Constants from '../../../modules/constants'; import './scss/index.scss'; diff --git a/src/components/widgets/background/Favourite.jsx b/src/components/widgets/background/Favourite.jsx index f3df9bf4..03fcb4dd 100644 --- a/src/components/widgets/background/Favourite.jsx +++ b/src/components/widgets/background/Favourite.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import StarIcon from '@material-ui/icons/Star'; import StarIcon2 from '@material-ui/icons/StarBorder'; diff --git a/src/components/widgets/background/Maximise.jsx b/src/components/widgets/background/Maximise.jsx index 4538aed4..17070de2 100644 --- a/src/components/widgets/background/Maximise.jsx +++ b/src/components/widgets/background/Maximise.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import FullscreenIcon from '@material-ui/icons/Fullscreen'; export default class View extends React.PureComponent { @@ -18,7 +19,7 @@ export default class View extends React.PureComponent { viewStuff() { const elements = ['#searchBar', '.navbar-container', '.clock', '.greeting', '.quotediv', 'time']; // elements to hide - + elements.forEach((element) => { try { (this.state.hidden === false) ? document.querySelector(element).style.display = 'none' : document.querySelector(element).style.display = 'block'; diff --git a/src/components/widgets/background/PhotoInformation.jsx b/src/components/widgets/background/PhotoInformation.jsx index 65eb8681..6fd151a6 100644 --- a/src/components/widgets/background/PhotoInformation.jsx +++ b/src/components/widgets/background/PhotoInformation.jsx @@ -5,7 +5,7 @@ import Camera from '@material-ui/icons/PhotoCamera'; import Resolution from '@material-ui/icons/Crop'; import Photographer from '@material-ui/icons/Person'; -const PhotoInformation = (props) => { +export default function PhotoInformation(props) { return (

{props.language.credit}

@@ -26,6 +26,4 @@ const PhotoInformation = (props) => {
); -} - -export default PhotoInformation; \ No newline at end of file +} \ No newline at end of file diff --git a/src/components/widgets/navbar/Notes.jsx b/src/components/widgets/navbar/Notes.jsx index 083dc921..d2f04e0f 100644 --- a/src/components/widgets/navbar/Notes.jsx +++ b/src/components/widgets/navbar/Notes.jsx @@ -1,9 +1,11 @@ import React from 'react'; + import TextareaAutosize from '@material-ui/core/TextareaAutosize'; import CopyIcon from '@material-ui/icons/FileCopyRounded'; -import Pin from './Pin'; import NotesIcon from '@material-ui/icons/AssignmentRounded'; +import Pin from './Pin'; + export default class Notes extends React.PureComponent { constructor(...args) { super(...args); @@ -21,7 +23,7 @@ export default class Notes extends React.PureComponent { pin() { document.getElementById('noteContainer').classList.toggle('visibilityshow'); - + if (localStorage.getItem('notesPinned') === 'true') { localStorage.setItem('notesPinned', false); } else { diff --git a/src/components/widgets/navbar/Pin.jsx b/src/components/widgets/navbar/Pin.jsx index ac168787..bcc89bf1 100644 --- a/src/components/widgets/navbar/Pin.jsx +++ b/src/components/widgets/navbar/Pin.jsx @@ -16,13 +16,11 @@ */ import React from 'react'; -const Pin = () => { +export default function Pin() { return ( ); -} - -export default Pin; \ No newline at end of file +} \ No newline at end of file diff --git a/src/components/widgets/quote/Quote.jsx b/src/components/widgets/quote/Quote.jsx index 6a9da3fe..f3da7d54 100644 --- a/src/components/widgets/quote/Quote.jsx +++ b/src/components/widgets/quote/Quote.jsx @@ -1,14 +1,16 @@ import React from 'react'; + import FileCopy from '@material-ui/icons/FilterNone'; -import { toast } from 'react-toastify'; -import * as Constants from '../../../modules/constants'; import TwitterIcon from '@material-ui/icons/Twitter'; import StarIcon from '@material-ui/icons/Star'; import StarIcon2 from '@material-ui/icons/StarBorder'; +import { toast } from 'react-toastify'; + +import * as Constants from '../../../modules/constants'; + import './quote.scss'; -const quotes = require('./offline_quotes.json'); export default class Quote extends React.PureComponent { constructor(...args) { @@ -23,6 +25,8 @@ export default class Quote extends React.PureComponent { } doOffline() { + const quotes = require('./offline_quotes.json'); + const quote = quotes[Math.floor(Math.random() * quotes.length)]; // Get a random quote from our local package this.setState({ quote: '"' + quote.quote + '"', diff --git a/src/components/widgets/search/Search.jsx b/src/components/widgets/search/Search.jsx index c1b9a357..19799331 100644 --- a/src/components/widgets/search/Search.jsx +++ b/src/components/widgets/search/Search.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import SearchIcon from '@material-ui/icons/Search'; import MicIcon from '@material-ui/icons/Mic'; @@ -33,7 +34,7 @@ export default class Search extends React.PureComponent { const setting = localStorage.getItem('searchEngine'); const info = searchEngines.find(i => i.settingsName === setting); - + if (info !== undefined) { url = info.url; if (info.query) query = info.query; diff --git a/src/components/widgets/time/Clock.jsx b/src/components/widgets/time/Clock.jsx index 3a903847..dc4b04e9 100644 --- a/src/components/widgets/time/Clock.jsx +++ b/src/components/widgets/time/Clock.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import Analog from 'react-clock'; import './clock.scss'; @@ -28,7 +29,7 @@ export default class Clock extends React.PureComponent { // Analog clock if (localStorage.getItem('analog') === 'true') { require('react-clock/dist/Clock.css'); // load analog clock css - + this.setState({ time: now }); diff --git a/src/components/widgets/time/Date.jsx b/src/components/widgets/time/Date.jsx index c302d779..9a91c4e0 100644 --- a/src/components/widgets/time/Date.jsx +++ b/src/components/widgets/time/Date.jsx @@ -1,4 +1,5 @@ import React from 'react'; + import dtf from '@eartharoid/dtf'; export default class DateWidget extends React.PureComponent { diff --git a/src/index.js b/src/index.js index 5a6054a8..4f4e4ac8 100644 --- a/src/index.js +++ b/src/index.js @@ -6,8 +6,8 @@ import App from './App'; import './scss/index.scss'; import 'react-toastify/dist/ReactToastify.css'; // the toast css is based on default so we need to import it -import 'fontsource-lexend-deca/latin-400-normal.css'; -import 'fontsource-roboto/cyrillic-400-normal.css'; +import '@fontsource/lexend-deca/latin-400.css'; +import '@fontsource/roboto/cyrillic-400.css'; ReactDOM.render( , diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 00000000..3ee09898 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,43 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); + +module.exports = { + entry: path.resolve(__dirname, './src/index.js'), + mode: 'production', + module: { + rules: [ + { + test: /\.(js|jsx)$/, + exclude: /node_modules/, + use: ['babel-loader'] + }, + { + test: /\.(scss|css)$/, + use: ['style-loader', 'css-loader', 'sass-loader'], + }, + { + test: /\.(woff|woff2|svg)$/, + use: { + loader: 'url-loader', + } + } + ] + }, + resolve: { + extensions: ['.js', '.jsx'] + }, + output: { + path: path.resolve(__dirname, './build'), + filename: 'bundle.js', + }, + devServer: { + contentBase: path.resolve(__dirname, './build'), + open: true, + port: 3000 + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.resolve(__dirname, './public/index.html') + }) + ] +}; \ No newline at end of file