diff --git a/manifest/chrome.json b/manifest/chrome.json index f58181d0..bfbe1bff 100644 --- a/manifest/chrome.json +++ b/manifest/chrome.json @@ -17,10 +17,6 @@ "48": "icons/48x48.png", "128": "icons/128x128.png" }, - "content_security_policy": { - "extension_pages": "script-src 'self'; object-src 'self'", - "sandbox": "script-src 'self' https://api.bing.com https://www.google.com; object-src 'self'" - }, "background": { "service_worker": "background-chrome.js" } diff --git a/manifest/firefox.json b/manifest/firefox.json index a2d0c0ac..91d89105 100644 --- a/manifest/firefox.json +++ b/manifest/firefox.json @@ -17,9 +17,5 @@ }, "chrome_settings_overrides": { "homepage": "index.html" - }, - "content_security_policy": { - "extension_pages": "script-src 'self'; object-src 'self'", - "sandbox": "script-src 'self' https://api.bing.com https://www.google.com; object-src 'self'" } } diff --git a/src/components/modals/main/settings/sections/QuickLinks.jsx b/src/components/modals/main/settings/sections/QuickLinks.jsx index 0443fe43..7ee4999c 100644 --- a/src/components/modals/main/settings/sections/QuickLinks.jsx +++ b/src/components/modals/main/settings/sections/QuickLinks.jsx @@ -19,7 +19,7 @@ export default class QuickLinks extends PureComponent { showAddModal: false, urlError: '', edit: false, - editData: '' + editData: '', }; this.quicklinksContainer = createRef(); } @@ -75,23 +75,23 @@ export default class QuickLinks extends PureComponent { this.setState({ items: data, showAddModal: false, - urlError: '' + urlError: '', }); variables.stats.postEvent('feature', 'Quicklink add'); - }; + } startEditLink(data) { this.setState({ edit: true, editData: data, - showAddModal: true + showAddModal: true, }); } editLink(og, name, url, icon) { const data = JSON.parse(localStorage.getItem('quicklinks')); - const dataobj = data.find(i => i.key === og.key); + const dataobj = data.find((i) => i.key === og.key); dataobj.name = name || url; dataobj.url = url; dataobj.icon = icon || ''; @@ -101,7 +101,7 @@ export default class QuickLinks extends PureComponent { this.setState({ items: data, showAddModal: false, - edit: false + edit: false, }); } @@ -133,7 +133,6 @@ export default class QuickLinks extends PureComponent { rel = 'noopener noreferrer'; } - const useProxy = localStorage.getItem('quicklinksddgProxy') !== 'false'; const useText = localStorage.getItem('quicklinksText') === 'true'; const quickLink = (item) => { @@ -153,17 +152,19 @@ export default class QuickLinks extends PureComponent { ); } - const url = useProxy - ? 'https://icons.duckduckgo.com/ip2/' - : 'https://www.google.com/s2/favicons?sz=32&domain='; const img = item.icon || - url + item.url.replace('https://', '').replace('http://', '') + (useProxy ? '.ico' : ''); + 'https://icon.horse/icon/ ' + item.url.replace('https://', '').replace('http://', ''); const link = (
- {item.name} + {item.name}
{item.name}
@@ -172,7 +173,7 @@ export default class QuickLinks extends PureComponent {
); - + return link; }; @@ -201,11 +202,6 @@ export default class QuickLinks extends PureComponent { title={variables.getMessage('modals.main.settings.additional_settings')} subtitle={variables.getMessage('modals.main.settings.sections.quicklinks.additional')} > - - - - + + + @@ -235,12 +238,14 @@ export default class QuickLinks extends PureComponent {
- {variables.getMessage('modals.main.settings.sections.quicklinks.no_quicklinks')} + + {variables.getMessage('modals.main.settings.sections.quicklinks.no_quicklinks')} + {variables.getMessage('modals.main.settings.sections.message.add_some')}
diff --git a/src/components/modals/main/settings/sections/Search.jsx b/src/components/modals/main/settings/sections/Search.jsx index 14dc01b8..0a5ef96b 100644 --- a/src/components/modals/main/settings/sections/Search.jsx +++ b/src/components/modals/main/settings/sections/Search.jsx @@ -6,13 +6,11 @@ import { MenuItem, TextField } from '@mui/material'; import Header from '../Header'; import Dropdown from '../Dropdown'; import Checkbox from '../Checkbox'; -import Radio from '../Radio'; import SettingsItem from '../SettingsItem'; import EventBus from 'modules/helpers/eventbus'; import searchEngines from 'components/widgets/search/search_engines.json'; -import autocompleteProviders from 'components/widgets/search/autocomplete_providers.json'; export default class SearchSettings extends PureComponent { constructor() { @@ -145,15 +143,6 @@ export default class SearchSettings extends PureComponent {

- - - ); } diff --git a/src/components/modals/welcome/WelcomeSections.jsx b/src/components/modals/welcome/WelcomeSections.jsx index 3c6b23d5..473eb321 100644 --- a/src/components/modals/welcome/WelcomeSections.jsx +++ b/src/components/modals/welcome/WelcomeSections.jsx @@ -329,15 +329,6 @@ export default class WelcomeSections extends PureComponent { {variables.getMessage('modals.welcome.sections.privacy.offline_mode_description')} - { if (localStorage.getItem('quickLinksStyle') === 'text') { @@ -77,12 +76,9 @@ export default class QuickLinks extends PureComponent { ); } - const url = useProxy - ? 'https://icons.duckduckgo.com/ip2/' - : 'https://www.google.com/s2/favicons?sz=32&domain='; const img = item.icon || - url + item.url.replace('https://', '').replace('http://', '') + (useProxy ? '.ico' : ''); + 'https://icon.horse/icon/ ' + item.url.replace('https://', '').replace('http://', ''); if (localStorage.getItem('quickLinksStyle') === 'metro') { return ( diff --git a/src/components/widgets/search/Search.jsx b/src/components/widgets/search/Search.jsx index c2be1cba..1595e0ba 100644 --- a/src/components/widgets/search/Search.jsx +++ b/src/components/widgets/search/Search.jsx @@ -10,7 +10,6 @@ import EventBus from 'modules/helpers/eventbus'; import './search.scss'; import searchEngines from 'components/widgets/search/search_engines.json'; -import autocompleteProviders from 'components/widgets/search/autocomplete_providers.json'; export default class Search extends PureComponent { constructor() { @@ -18,9 +17,6 @@ export default class Search extends PureComponent { this.state = { url: '', query: '', - autocompleteURL: '', - autocompleteQuery: '', - autocompleteCallback: '', microphone: null, suggestions: [], searchDropdown: true, @@ -67,21 +63,15 @@ export default class Search extends PureComponent { window.searchResults = results; }; - const script = document.createElement('script'); - script.src = `${this.state.autocompleteURL + this.state.autocompleteQuery + input}&${ - this.state.autocompleteCallback - }=window.setResults`; - document.head.appendChild(script); + const results = await (await fetch(`https://ac.ecosia.org/?q=${input}`)).json(); try { this.setState({ - suggestions: window.searchResults[1].splice(0, 3), + suggestions: results.suggestions.splice(0, 3), }); } catch (e) { // ignore error if empty } - - document.head.removeChild(script); } init() { @@ -110,23 +100,9 @@ export default class Search extends PureComponent { ); } - let autocompleteURL, autocompleteQuery, autocompleteCallback; - - if (localStorage.getItem('autocomplete') === 'true') { - const info = autocompleteProviders.find( - (i) => i.value === localStorage.getItem('autocompleteProvider'), - ); - autocompleteURL = info.url; - autocompleteQuery = info.query; - autocompleteCallback = info.callback; - } - this.setState({ url, query, - autocompleteURL, - autocompleteQuery, - autocompleteCallback, microphone, currentSearch: info ? info.name : 'Custom', }); diff --git a/src/components/widgets/search/autocomplete_providers.json b/src/components/widgets/search/autocomplete_providers.json deleted file mode 100644 index 209850a2..00000000 --- a/src/components/widgets/search/autocomplete_providers.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "name": "Google", - "value": "google", - "url": "https://www.google.com/complete/search?client=chrome", - "callback": "callback", - "query": "&q=" - }, - { - "name": "Bing", - "value": "bing", - "url": "https://api.bing.com/osjson.aspx?JsonType=callback", - "callback": "JsonCallback", - "query": "&query=" - } -] diff --git a/src/index.jsx b/src/index.jsx index 315adbac..e311f3e2 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -1,4 +1,4 @@ -import { render } from 'react-dom'; +import { createRoot } from 'react-dom/client'; import * as Sentry from '@sentry/react'; import App from './App'; @@ -57,4 +57,5 @@ Sentry.init({ autoSessionTracking: false, }); -render(, document.getElementById('root')); +const root = createRoot(document.getElementById('root')); +root.render();