Skip to content

Commit 155fa84

Browse files
committed
add: v1.1 (splash, favicon, and title)
1 parent 72983e4 commit 155fa84

File tree

3 files changed

+103
-23
lines changed

3 files changed

+103
-23
lines changed

README.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
11
# BluebirdReplacer
22

33
Chrome 版 Twitter のロゴを従来の青い鳥に置換する Chrome 拡張です
4+
5+
## Versions
6+
7+
### 1.0
8+
9+
- メイン画面の左上のロゴを置換
10+
11+
### 1.1
12+
13+
- Splash 画面のロゴを置換
14+
- favicon を置換
15+
- ページタイトルを置換

editor.js

Lines changed: 89 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,20 @@ const oldLogo = `
2323
</svg>
2424
`;
2525

26-
window.addEventListener("load", function () {
27-
var state = localStorage.getItem("enableBluebird");
28-
if (!state) {
29-
state = "off";
30-
this.localStorage.setItem("enableBluebird", "off");
31-
}
32-
33-
if (state === "on") {
34-
const jsInitCheckTimer = setInterval(pageLoaded, 1);
35-
function pageLoaded() {
36-
var logoDOM = document.getElementsByXPath("//h1/a/div");
37-
if (logoDOM.length > 0) {
38-
logoDOM[0].innerHTML = oldLogo;
39-
clearInterval(jsInitCheckTimer);
40-
}
41-
}
42-
}
43-
});
26+
const oldSplashLogo = `
27+
<svg
28+
viewBox="0 0 24 24"
29+
aria-hidden="true"
30+
class="r-16ek5rh r-4qtqp9 r-yyyyoo r-16y2uox r-8kz0gk r-dnmrzs r-bnwqim r-1plcrui r-lrvibr r-lrsllp"
31+
style="color: rgba(29,155,240,1.00);width: 72px;height: 72pxmargin-bottom: auto;margin-left: auto;margin-right: auto;margin-top: auto;top: 0px;bottom: 0px;right: 0px;left: 0px"
32+
>
33+
<g>
34+
<path d="M23.643 4.937c-.835.37-1.732.62-2.675.733.962-.576 1.7-1.49 2.048-2.578-.9.534-1.897.922-2.958 1.13-.85-.904-2.06-1.47-3.4-1.47-2.572 0-4.658 2.086-4.658 4.66 0 .364.042.718.12 1.06-3.873-.195-7.304-2.05-9.602-4.868-.4.69-.63 1.49-.63 2.342 0 1.616.823 3.043 2.072 3.878-.764-.025-1.482-.234-2.11-.583v.06c0 2.257 1.605 4.14 3.737 4.568-.392.106-.803.162-1.227.162-.3 0-.593-.028-.877-.082.593 1.85 2.313 3.198 4.352 3.234-1.595 1.25-3.604 1.995-5.786 1.995-.376 0-.747-.022-1.112-.065 2.062 1.323 4.51 2.093 7.14 2.093 8.57 0 13.255-7.098 13.255-13.254 0-.2-.005-.402-.014-.602.91-.658 1.7-1.477 2.323-2.41z"></path>
35+
</g>
36+
</svg>
37+
`;
4438

45-
document.getElementsByXPath = function (expression, parentElement) {
39+
function getElementsByXPath(expression, parentElement) {
4640
var r = [];
4741
var x = document.evaluate(
4842
expression,
@@ -55,7 +49,81 @@ document.getElementsByXPath = function (expression, parentElement) {
5549
r.push(x.snapshotItem(i));
5650
}
5751
return r;
58-
};
52+
}
53+
54+
// favicon window logo and title
55+
function faviconTitleReplace() {
56+
var state = localStorage.getItem("enableBluebird");
57+
// favicon
58+
const linkDOM = document.getElementsByTagName("link");
59+
for (let i = 0; i < linkDOM.length; i++) {
60+
const element = linkDOM[i];
61+
if (element.rel === "shortcut icon") {
62+
if (state === "on") {
63+
element.href = element.href.replace("3", "2");
64+
} else {
65+
element.href = element.href.replace("2", "3");
66+
}
67+
}
68+
}
69+
70+
// title (og)
71+
const metaDOM = document.getElementsByTagName("meta");
72+
for (let i = 0; i < metaDOM.length; i++) {
73+
const element = metaDOM[i];
74+
if (
75+
element.content.indexOf("/ X") !== -1 ||
76+
element.content.indexOf("/ Twitter") !== -1
77+
) {
78+
if (state === "on") {
79+
element.content = element.content.replace("X", "Twitter");
80+
} else {
81+
element.content = element.content.replace("Twitter", "X");
82+
}
83+
}
84+
}
85+
86+
// title (main)
87+
const titleDOM = document.getElementsByTagName("title");
88+
if (titleDOM.length > 0) {
89+
if (state === "on" && titleDOM[0].innerHTML.indexOf("X") !== -1) {
90+
titleDOM[0].innerHTML = titleDOM[0].innerHTML.replace("X", "Twitter");
91+
} else if (
92+
state === "off" &&
93+
titleDOM[0].innerHTML.indexOf("Twitter") !== -1
94+
) {
95+
titleDOM[0].innerHTML = titleDOM[0].innerHTML.replace("Twitter", "X");
96+
}
97+
}
98+
}
99+
100+
var state = localStorage.getItem("enableBluebird");
101+
if (!state) {
102+
state = "off";
103+
localStorage.setItem("enableBluebird", "off");
104+
} else if (state === "on") {
105+
const mainLogoInterval = setInterval(mainLogoReplace);
106+
const splashLogoInterval = setInterval(splashLogoReplace);
107+
setInterval(faviconTitleReplace);
108+
109+
// main window logo
110+
function mainLogoReplace() {
111+
const logoDOM = getElementsByXPath("//h1/a/div");
112+
if (logoDOM.length > 0) {
113+
logoDOM[0].innerHTML = oldLogo;
114+
clearInterval(mainLogoInterval);
115+
}
116+
}
117+
118+
// splash window logo
119+
function splashLogoReplace() {
120+
const logoDOM = getElementsByXPath('//div[@aria-label="Loading…"]');
121+
if (logoDOM.length > 0) {
122+
logoDOM[0].innerHTML = oldSplashLogo;
123+
clearInterval(splashLogoInterval);
124+
}
125+
}
126+
}
59127

60128
chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
61129
if (msg.cmd === "check") {
@@ -68,7 +136,7 @@ chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
68136
sendResponse(state);
69137
} else if (msg.cmd == "replace") {
70138
// run replace
71-
var logoDOM = document.getElementsByXPath("//h1/a/div");
139+
var logoDOM = getElementsByXPath("//h1/a/div");
72140
if (logoDOM.length === 0) {
73141
sendResponse(undefined);
74142
} else {

manifest.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifest_version": 3,
33
"name": "Blue Bird Replacer",
44
"description": "ブラウザ版のロゴを青い鳥に変更します。",
5-
"version": "1.0",
5+
"version": "1.1",
66
"icons": {
77
"32": "32.png",
88
"48": "48.png",
@@ -16,7 +16,7 @@
1616
"js": [
1717
"editor.js"
1818
],
19-
"run_at": "document_end"
19+
"run_at": "document_start"
2020
}
2121
],
2222
"permissions": [

0 commit comments

Comments
 (0)