Skip to content

Commit

Permalink
fix opera speech conflict
Browse files Browse the repository at this point in the history
  • Loading branch information
ttop32 committed Apr 24, 2024
1 parent 88a5e09 commit 92ca1b6
Show file tree
Hide file tree
Showing 5 changed files with 168 additions and 14 deletions.
2 changes: 2 additions & 0 deletions doc/description.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ Mouseover Translate Any Language At Once
English, Russian, Japanese, Chinese and so on

# Change Log
- 0.1.139
- Remove speech recognition from opera (request by Fırat Akbıyık)
- 0.1.138
- Fix mouseover detect performance issue (request by eSKej)
- Fix google image load
Expand Down
25 changes: 19 additions & 6 deletions src/contentScript.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ var listening = false;
detectPDF(); //check current page is pdf
checkVideo(); // check video site for subtitle
checkGoogleDocs(); // check google doc
initSpeechRecognition(); // init speech listen engine
addElementEnv(); //add tooltip container
applyStyleSetting(); //add tooltip style
addBackgroundListener(); // get background listener for copy request
Expand Down Expand Up @@ -913,7 +912,12 @@ function removePrevElement() {
// speech recognition ====================================================
function initSpeechRecognition() {
// future plan, migration to background service worker
listenEngine = new webkitSpeechRecognition();
const SpeechRecognition =
window.SpeechRecognition || window.webkitSpeechRecognition;
if (!SpeechRecognition) {
return;
}
listenEngine = new SpeechRecognition();
listenEngine.continuous = true;
listenEngine.interimResults = true;
initSpeechRecognitionLang();
Expand Down Expand Up @@ -949,7 +953,13 @@ function initSpeechRecognitionLang() {
initSpeechRecognition();
}
stopSpeechRecognition();
listenEngine.lang = setting["speechRecognitionLanguage"];
setSpeechRecognitionLang(setting["speechRecognitionLanguage"]);
}
function setSpeechRecognitionLang(lang) {
if (!listenEngine) {
return;
}
listenEngine.lang = lang;
}

function stopSpeechRecognitionByKey(key) {
Expand All @@ -963,7 +973,7 @@ function stopSpeechRecognition() {
return;
}
// console.log("stop listen");
listenEngine.stop();
listenEngine?.stop();
listenText = "";
}

Expand All @@ -973,9 +983,12 @@ function startSpeechRecognitionByKey(key) {
}
}
function startSpeechRecognition() {
if (listening) {
if (!listenEngine) {
initSpeechRecognition();
}
if (listening || !listenEngine) {
return;
}
// console.log("start listen");
listenEngine.start();
listenEngine?.start();
}
21 changes: 13 additions & 8 deletions src/pages/about.vue
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
:key="key"
:title="aboutPageItem.name"
:subtitle="aboutPageItem.sub_name"
@click="openUrl(aboutPageItem.url)"
@click="openUrl(aboutPageItem.url, aboutPageItem.isPanelOpen)"
>
<template v-slot:prepend>
<v-avatar :color="aboutPageItem.color">
Expand Down Expand Up @@ -72,12 +72,13 @@ export default {
icon: "mdi-book-open-blank-variant",
color: "orange",
},
twitter: {
name: browser.i18n.getMessage("Twitter"),
sub_name: browser.i18n.getMessage("Retweet_twitter_post"),
url: "https://twitter.com/MouseTooltip",
icon: "mdi-twitter",
speechPanel: {
name: browser.i18n.getMessage("Speech_Panel") + "tt",
sub_name: browser.i18n.getMessage("Translate_Speech"),
url: "/popup.html#/speech",
icon: "mdi-text-to-speech",
color: "cyan",
isPanelOpen: true,
},
reviewPage: {
name: browser.i18n.getMessage("Review_Page"),
Expand All @@ -104,8 +105,12 @@ export default {
};
},
methods: {
openUrl(newURL) {
window.open(newURL);
openUrl(url, isPanelOpen = false) {
if (!isPanelOpen) {
window.open(url);
} else {
util.openUrlAsPanel(url);
}
},
},
};
Expand Down
130 changes: 130 additions & 0 deletions src/pages/speech.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
<template>
<popupWindow>
<div class="mobile-popup-overlay">
hello world
<div class="scroller">
<div class="scroller-content" id="scrollerContent">
<div class="item">Item 1</div>
<div class="item">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
<div class="item">Item 7</div>
<div class="item">Item 8</div>
<div class="item">Item 9</div>
<div class="item">Item 10</div>
</div>
</div>
</div>

<div
v-for="translatedData in translatedDataList"
:key="translatedData.sourceText"
:style="getFontStyle()"
>
{{ translatedData.sourceText }}
{{ translatedData.targetText }}
</div>
</popupWindow>
</template>
<script>
import * as util from "/src/util";
import _ from "lodash";
import { mapState } from "pinia";
import { useSettingStore } from "/src/stores/setting.js";
import { permissions } from "webextension-polyfill";
export default {
name: "SpeechView",
data() {
return {
fontSize: 14,
fontColor: "#ffffffff",
PanelBackgroundColor: "#000000b8",
translatedDataList: [{ sourceText: "nan", targetText: "veb" }],
};
},
async mounted() {
await this.waitSettingLoad();
},
computed: {
...mapState(useSettingStore, ["setting", "waitSettingLoad"]),
},
methods: {
openUrl(url) {
window.open(url);
},
startRecognition() {
// start all day
// do not stop
// audio permissions
},
getFontStyle() {
var fontSize = this.setting["tooltipFontSize"];
var fontColor = this.setting["tooltipFontColor"];
var backgroundColor = this.setting["tooltipBackgroundColor"];
return `
font-size: ${fontSize}px;
color: ${fontColor};
background-color: ${backgroundColor};
`;
},
async handleTranslate() {
this.translate();
},
async translate(text) {
var { targetText, sourceLang, targetLang } = await util.requestTranslate(
text,
setting["translateSource"],
setting["translateTarget"],
setting["translateReverseTarget"]
);
return { targetText, sourceLang, targetLang };
},
},
};
</script>
<style>
.mobile-popup-overlay {
top: 0;
left: 0;
position: fixed;
background-color: red;
opacity: 0.9;
height: 100vh;
width: 100vw;
overflow: visible;
z-index: 100;
}
#appWindow {
margin: auto;
height: 100vh;
width: 100vw;
box-shadow: rgba(149, 157, 165, 0.2) 0px 8px 24px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
"Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
sans-serif;
}
.scroller {
overflow: auto;
height: 100px;
display: flex;
flex-direction: column-reverse;
overflow-anchor: auto !important; /* See https://developer.mozilla.org/en-US/docs/Web/CSS/overflow-anchor */
}
.scroller .scroller-content .item {
height: 20px;
transform: translateZ(
0
); /* fixes a bug in Safari iOS where the scroller doesn't update */
}
</style>
4 changes: 4 additions & 0 deletions src/util/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -857,3 +857,7 @@ export async function removeOffscreen() {
browser.offscreen.closeDocument(() => resolve());
});
}

export function openUrlAsPanel(url) {
browser.windows.create({ url, type: "panel" });
}

0 comments on commit 92ca1b6

Please sign in to comment.