Spaces:
Running
Running
Upload 1546 files
Browse files- Dockerfile +24 -24
- src/addons/addons.js +1 -0
- src/addons/addons/save-to-google/_manifest_entry.js +17 -0
- src/addons/addons/save-to-google/_runtime_entry.js +7 -0
- src/addons/addons/save-to-google/style.css +55 -0
- src/addons/addons/save-to-google/userscript.js +50 -0
- src/addons/generated/addon-manifests.js +2 -0
Dockerfile
CHANGED
@@ -1,24 +1,24 @@
|
|
1 |
-
# ベースイメージとして Node.js を使用
|
2 |
-
FROM node:18
|
3 |
-
|
4 |
-
# 作業ディレクトリを設定
|
5 |
-
WORKDIR /app
|
6 |
-
|
7 |
-
# ホストのファイルをコンテナにコピー
|
8 |
-
COPY . .
|
9 |
-
|
10 |
-
# translations ディレクトリを作成し、権限を設定
|
11 |
-
RUN mkdir -p /app/translations && chmod -R 777 /app/translations
|
12 |
-
RUN chmod -R 777 /app
|
13 |
-
|
14 |
-
# 依存関係をインストール(競合を無視)
|
15 |
-
RUN npm install --legacy-peer-deps
|
16 |
-
|
17 |
-
# OpenSSL の互換オプションを有効化
|
18 |
-
ENV NODE_OPTIONS="--openssl-legacy-provider"
|
19 |
-
|
20 |
-
# コンテナの起動時にサーバーを実行
|
21 |
-
CMD ["npm", "start"]
|
22 |
-
|
23 |
-
# コンテナがリッスンするポート
|
24 |
-
EXPOSE 3000
|
|
|
1 |
+
# ベースイメージとして Node.js を使用
|
2 |
+
FROM node:18
|
3 |
+
|
4 |
+
# 作業ディレクトリを設定
|
5 |
+
WORKDIR /app
|
6 |
+
|
7 |
+
# ホストのファイルをコンテナにコピー
|
8 |
+
COPY . .
|
9 |
+
|
10 |
+
# translations ディレクトリを作成し、権限を設定
|
11 |
+
RUN mkdir -p /app/translations && chmod -R 777 /app/translations
|
12 |
+
RUN chmod -R 777 /app
|
13 |
+
|
14 |
+
# 依存関係をインストール(競合を無視)
|
15 |
+
RUN npm install --legacy-peer-deps
|
16 |
+
|
17 |
+
# OpenSSL の互換オプションを有効化
|
18 |
+
ENV NODE_OPTIONS="--openssl-legacy-provider"
|
19 |
+
|
20 |
+
# コンテナの起動時にサーバーを実行
|
21 |
+
CMD ["npm", "start"]
|
22 |
+
|
23 |
+
# コンテナがリッスンするポート
|
24 |
+
EXPOSE 3000
|
src/addons/addons.js
CHANGED
@@ -2,6 +2,7 @@
|
|
2 |
|
3 |
const addons = [
|
4 |
'cat-blocks',
|
|
|
5 |
'editor-devtools',
|
6 |
'find-bar',
|
7 |
'middle-click-popup',
|
|
|
2 |
|
3 |
const addons = [
|
4 |
'cat-blocks',
|
5 |
+
'save-to-google',
|
6 |
'editor-devtools',
|
7 |
'find-bar',
|
8 |
'middle-click-popup',
|
src/addons/addons/save-to-google/_manifest_entry.js
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* generated by pull.js */
|
2 |
+
const manifest = {
|
3 |
+
"name": "Save project to Google drive",
|
4 |
+
"description": " \"Googleに保存\" を追加し、Googleドライブに保存するようにします。",
|
5 |
+
"tags": [
|
6 |
+
"recommended"
|
7 |
+
],
|
8 |
+
"userscripts": [
|
9 |
+
{
|
10 |
+
"url": "userscript.js"
|
11 |
+
}
|
12 |
+
],
|
13 |
+
"enabledByDefault": true
|
14 |
+
};
|
15 |
+
import {mediaRecorderSupported} from "../../environment";
|
16 |
+
if (!mediaRecorderSupported) manifest.unsupported = true;
|
17 |
+
export default manifest;
|
src/addons/addons/save-to-google/_runtime_entry.js
ADDED
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* generated by pull.js */
|
2 |
+
import _js from "./userscript.js";
|
3 |
+
import _css from "!css-loader!./style.css";
|
4 |
+
export const resources = {
|
5 |
+
"userscript.js": _js,
|
6 |
+
"style.css": _css,
|
7 |
+
};
|
src/addons/addons/save-to-google/style.css
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
.mediaRecorderPopup {
|
2 |
+
box-sizing: border-box;
|
3 |
+
width: 700px;
|
4 |
+
max-height: min(800px, 80vh);
|
5 |
+
max-width: 85%;
|
6 |
+
margin-top: 12vh;
|
7 |
+
overflow-y: auto;
|
8 |
+
margin-left: auto;
|
9 |
+
margin-right: auto;
|
10 |
+
}
|
11 |
+
|
12 |
+
.mediaRecorderPopupContent {
|
13 |
+
padding: 1.5rem 2.25rem;
|
14 |
+
}
|
15 |
+
|
16 |
+
.mediaRecorderPopup p {
|
17 |
+
font-size: 1rem;
|
18 |
+
margin: 0.5rem auto;
|
19 |
+
}
|
20 |
+
|
21 |
+
.mediaRecorderPopup p :last-child {
|
22 |
+
margin-left: 1rem;
|
23 |
+
}
|
24 |
+
|
25 |
+
.mediaRecorderPopup[dir="rtl"] p :last-child {
|
26 |
+
margin-left: 0;
|
27 |
+
margin-right: 1rem;
|
28 |
+
}
|
29 |
+
|
30 |
+
p.mediaRecorderPopupOption {
|
31 |
+
display: flex;
|
32 |
+
align-items: center;
|
33 |
+
}
|
34 |
+
|
35 |
+
.mediaRecorderPopupOption input[type="checkbox"] {
|
36 |
+
height: 1.5rem;
|
37 |
+
}
|
38 |
+
|
39 |
+
#recordOptionSecondsInput,
|
40 |
+
#recordOptionDelayInput {
|
41 |
+
width: 6rem;
|
42 |
+
}
|
43 |
+
|
44 |
+
.mediaRecorderPopupButtons {
|
45 |
+
margin-top: 1.5rem;
|
46 |
+
}
|
47 |
+
|
48 |
+
.mediaRecorderPopupButtons button {
|
49 |
+
margin-left: 0.5rem;
|
50 |
+
}
|
51 |
+
|
52 |
+
/* TW: Fixes cancel button in dark mode */
|
53 |
+
.mediaRecorderPopupButtons button:nth-of-type(1) {
|
54 |
+
color: black;
|
55 |
+
}
|
src/addons/addons/save-to-google/userscript.js
ADDED
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
export default async ({ addon, console, msg }) => {
|
2 |
+
// 永続的に対象要素が出現するのを待つループ
|
3 |
+
while (true) {
|
4 |
+
// 対象のメニュー要素を待機
|
5 |
+
const targetElem = await addon.tab.waitForElement(
|
6 |
+
'div[class*="menu-bar_file-group"] > div:last-child:not(.sa-record)',
|
7 |
+
{ markAsSeen: true }
|
8 |
+
);
|
9 |
+
|
10 |
+
// 同じボタンが複数作られないようにチェック
|
11 |
+
if (!document.querySelector('.sa-custom-modal-button')) {
|
12 |
+
// ボタン要素を作成
|
13 |
+
const button = document.createElement("div");
|
14 |
+
button.className = "sa-custom-modal-button " + targetElem.className;
|
15 |
+
button.textContent = msg("open-modal"); // ローカライズされた文字列
|
16 |
+
button.style.cursor = "pointer";
|
17 |
+
|
18 |
+
// ボタンがクリックされたときにモーダルを表示するイベントリスナー
|
19 |
+
button.addEventListener("click", () => {
|
20 |
+
// モーダルを作成(addon.tab.createModalを利用)
|
21 |
+
const { backdrop, container, content, closeButton, remove } = addon.tab.createModal(
|
22 |
+
msg("modal-title"), // モーダルのタイトル
|
23 |
+
{ isOpen: true, useEditorClasses: true }
|
24 |
+
);
|
25 |
+
|
26 |
+
// モーダル内に任意のHTMLを設定
|
27 |
+
content.innerHTML = `
|
28 |
+
<div>
|
29 |
+
<h1>${msg("modal-header")}</h1>
|
30 |
+
<p>${msg("modal-description")}</p>
|
31 |
+
<button id="modal-ok-button">${msg("ok")}</button>
|
32 |
+
</div>
|
33 |
+
`;
|
34 |
+
|
35 |
+
// 「OK」ボタンがクリックされたらモーダルを閉じる
|
36 |
+
const okButton = content.querySelector("#modal-ok-button");
|
37 |
+
if (okButton) {
|
38 |
+
okButton.addEventListener("click", () => remove());
|
39 |
+
}
|
40 |
+
|
41 |
+
// バックドロップやクローズボタンをクリックした場合もモーダルを閉じる
|
42 |
+
backdrop.addEventListener("click", () => remove());
|
43 |
+
closeButton.addEventListener("click", () => remove());
|
44 |
+
});
|
45 |
+
|
46 |
+
// 対象の親要素にボタンを追加
|
47 |
+
targetElem.parentElement.appendChild(button);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
};
|
src/addons/generated/addon-manifests.js
CHANGED
@@ -3,6 +3,7 @@ import _cat_blocks from "../addons/cat-blocks/_manifest_entry.js";
|
|
3 |
import _editor_devtools from "../addons/editor-devtools/_manifest_entry.js";
|
4 |
import _find_bar from "../addons/find-bar/_manifest_entry.js";
|
5 |
import _middle_click_popup from "../addons/middle-click-popup/_manifest_entry.js";
|
|
|
6 |
import _editor_block_chomping from "../addons/editor-block-chomping/_manifest_entry.js";
|
7 |
import _jump_to_def from "../addons/jump-to-def/_manifest_entry.js";
|
8 |
import _editor_searchable_dropdowns from "../addons/editor-searchable-dropdowns/_manifest_entry.js";
|
@@ -70,6 +71,7 @@ export default {
|
|
70 |
"cat-blocks": _cat_blocks,
|
71 |
"editor-devtools": _editor_devtools,
|
72 |
"find-bar": _find_bar,
|
|
|
73 |
"middle-click-popup": _middle_click_popup,
|
74 |
"editor-block-chomping": _editor_block_chomping,
|
75 |
"jump-to-def": _jump_to_def,
|
|
|
3 |
import _editor_devtools from "../addons/editor-devtools/_manifest_entry.js";
|
4 |
import _find_bar from "../addons/find-bar/_manifest_entry.js";
|
5 |
import _middle_click_popup from "../addons/middle-click-popup/_manifest_entry.js";
|
6 |
+
import _save_to_google from "../addons/save-to-google/_manifest_entry.js";
|
7 |
import _editor_block_chomping from "../addons/editor-block-chomping/_manifest_entry.js";
|
8 |
import _jump_to_def from "../addons/jump-to-def/_manifest_entry.js";
|
9 |
import _editor_searchable_dropdowns from "../addons/editor-searchable-dropdowns/_manifest_entry.js";
|
|
|
71 |
"cat-blocks": _cat_blocks,
|
72 |
"editor-devtools": _editor_devtools,
|
73 |
"find-bar": _find_bar,
|
74 |
+
"save-to-google": _save_to_google,
|
75 |
"middle-click-popup": _middle_click_popup,
|
76 |
"editor-block-chomping": _editor_block_chomping,
|
77 |
"jump-to-def": _jump_to_def,
|