Skip to content

Commit 144ea22

Browse files
committed
- refectored a lot of codes.
- added a search bar to the action button popup if the current tab is not playing a Netflix movie. - fixed console spam.
1 parent 9e8a69a commit 144ea22

File tree

11 files changed

+997
-795
lines changed

11 files changed

+997
-795
lines changed

src/browserAction.html

Lines changed: 513 additions & 460 deletions
Large diffs are not rendered by default.
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
'use strict'
2+
3+
function addQueryResultToDocument(movieObject) {
4+
if (movieObject.doubanRating.queryState == QUERY_FAILED) {
5+
addQueryFailedContent();
6+
return;
7+
} else {
8+
console.assert(movieObject.doubanRating.queryState == QUERY_SUCCESSFUL)
9+
addMovieContent(movieObject);
10+
}
11+
}
12+
13+
function addQueryFailedContent() {
14+
var e = createDivNode('no-movie', '');
15+
var p = createPNode('未搜索到电影');
16+
document.getElementById("movie-content").appendChild(e.appendChild(p));
17+
}
18+
19+
function addMovieContent(movieObject) {
20+
var dbr = movieObject.doubanRating;
21+
_movieId = movieObject.id;
22+
23+
// add contents
24+
addMoviePoster(dbr.image);
25+
addMovieTitleYear(dbr.title, dbr.year);
26+
addMovieRatingAndRatingNumber(dbr.rating, dbr.ratingNum);
27+
addMovieGenres(dbr.genres);
28+
addGoToMoviePageButton(dbr.url);
29+
addSubHdUrl(getSubHdUrl(dbr.oriTitle, dbr.year));
30+
unHideMovieContentTableElement();
31+
unHideSubtitleElement();
32+
hideDoubanQueryNode();
33+
}
34+
35+
function addMoviePoster(source) {
36+
getTableElementByIdAndSetHeight('td-movie-poster')
37+
.appendChild(createMoviePosterElement(source));
38+
}
39+
40+
function createMoviePosterElement(source) {
41+
var e = document.createElement('IMG');
42+
e.className = 'movie-poster';
43+
e.src = source;
44+
return e;
45+
}
46+
47+
function addMovieTitleYear(title, year) {
48+
getTableElementByIdAndSetHeight('td-movie-title')
49+
.appendChild(createDivNode('movie-title', title + '(' + year + ')'));
50+
}
51+
52+
function addMovieRatingAndRatingNumber(rating, ratingNumber) {
53+
var node = getTableElementByIdAndSetHeight('td-movie-rating');
54+
node.appendChild(createSpanNode('movie-rating', rating));
55+
node.appendChild(createSpanNode('movie-rating-num', ` (${ratingNumber}人看过)`));
56+
}
57+
58+
function addMovieGenres(genres) {
59+
getTableElementByIdAndSetHeight('td-movie-meta')
60+
.appendChild(createDivNode('movie-meta', genres));
61+
}
62+
63+
function addGoToMoviePageButton(url) {
64+
document.getElementById('td-movie-link')
65+
.appendChild(createGoToMoviePageButtonElement(url));
66+
}
67+
68+
function createGoToMoviePageButtonElement(url) {
69+
var e = document.createElement('INPUT');
70+
e.value = "电影页面";
71+
e.type = "button";
72+
e.class = "movie-link";
73+
e.onclick = function () {
74+
chrome.tabs.create({
75+
url
76+
})
77+
}
78+
return e;
79+
}
80+
81+
function addSubHdUrl(url) {
82+
document.getElementById('subtitle-subhd-link').href = url;
83+
}
84+
85+
function getSubHdUrl(title, year) {
86+
return "http://subhd.com/search0/" + title.replace(/[!"%$£^&*()@\':;#~,.?><|\\//]+/g, ' ') + '%20' + year
87+
}
88+
89+
function unHideMovieContentTableElement() {
90+
document.getElementById("movie-content-table").style = "display: initial";
91+
}
92+
93+
function unHideSubtitleElement() {
94+
document.getElementById("subtitle-panel").style = "display: block";
95+
}
96+
97+
function getTableElementByIdAndSetHeight(elementId) {
98+
var node = document.getElementById(elementId);
99+
node.height = '28px';
100+
return node;
101+
}
102+
103+
function hideDoubanQueryNode() {
104+
document.getElementById('db-query-wrapper').style = "display: none;";
105+
}

src/js/action/browserAction.js

Lines changed: 43 additions & 177 deletions
Original file line numberDiff line numberDiff line change
@@ -1,206 +1,72 @@
1-
var NO_MOVIE = -99;
1+
'use strict'
2+
23
var QUERY_FAILED = -1;
34
var QUERY_SUCCESSFUL = 1;
45
var _movieId;
56
var _subtitleSettings;
67

7-
window.addEventListener('click',function(e){
8-
if(e.target.href!==undefined){
9-
chrome.tabs.create({url:e.target.href})
8+
window.addEventListener('click', function (e) {
9+
if (e.target.href !== undefined) {
10+
chrome.tabs.create({
11+
url: e.target.href
12+
})
1013
}
11-
})
14+
});
15+
16+
document.getElementById('db-query-button').addEventListener('click', function () {
17+
chrome.tabs.create({
18+
url: getDoubanMovieQueryLink()
19+
})
20+
});
21+
22+
document.getElementById('db-query').addEventListener('keyup', function () {
23+
// Cancel the default action, if needed
24+
event.preventDefault();
25+
// Number 13 is the "Enter" key on the keyboard
26+
if (event.keyCode === 13) {
27+
// Trigger the button element with a click
28+
document.getElementById("db-query-button").click();
29+
}
30+
});
1231

1332
chrome.runtime.onMessage.addListener(
14-
function(request) {
33+
function (request) {
1534
console.log('(popup.js) Message received: ', request.action)
1635
if (request.action === 'playingMovieInfo') {
1736
// if content is null - not on watch page
1837
// else check queryStatus
19-
if (!request.content) {
20-
addContents({status: NO_MOVIE});
21-
} else if (!request.content.queryInProgress) {
22-
addContents({status: QUERY_SUCCESSFUL, content: request.content});
23-
getLoadedSubtitleInfo(request.content.id);
38+
if (!request.content.queryInProgress) {
39+
addQueryResultToDocument(request.content);
40+
sendGetLoadedSubtitleInfo(request.content.id);
2441
}
25-
2642
}
2743
}
2844
);
2945

30-
addSubtitleUploaderListener();
3146
resetSubtitleSettings();
3247

48+
chrome.tabs.getSelected(null, function (tab) {
49+
if (/.*\.netflix\.com\/watch.*/.test(tab.url)) {
50+
chrome.tabs.executeScript(null, {
51+
file: "js/playerContents.js"
52+
});
53+
}
54+
});
55+
56+
function getDoubanMovieQueryLink() {
57+
return 'https://movie.douban.com/subject_search?search_text=' + document.getElementById('db-query').value + '&cat=1002';
58+
}
59+
3360
function createDivNode(className, content) {
3461
var e = document.createElement('DIV');
3562
e.className = className;
3663
e.innerText = content;
37-
return e;
64+
return e;
3865
}
3966

4067
function createSpanNode(className, content) {
4168
var e = document.createElement('SPAN');
4269
e.className = className;
4370
e.innerText = content;
44-
return e;
45-
}
46-
47-
function addContents(query) {
48-
if (query.status == NO_MOVIE) {
49-
let e = createDivNode('no-movie', '');
50-
let p = document.createElement('P');
51-
p.innerText = '没有播放任何电影';
52-
document.getElementById("movie-content").appendChild(e.appendChild(p));
53-
return;
54-
} else if (query.content.doubanRating.queryState == -1) {
55-
let e = createDivNode('no-movie', '');
56-
let p = createPNode('未搜索到电影');
57-
document.getElementById("movie-content").appendChild(e.appendChild(p));
58-
return;
59-
} else {
60-
c = query.content;
61-
dbr = c.doubanRating;
62-
console.log('query successful:',c);
63-
console.log('movieId:',c.id)
64-
_movieId = c.id;
65-
66-
// add poster
67-
let e = document.createElement('IMG');
68-
e.className = 'movie-poster';
69-
e.src = dbr.image;
70-
let node = document.getElementById('td-movie-poster');
71-
node.height = '28px';
72-
node.appendChild(e);
73-
// add title
74-
e = createDivNode('movie-title', dbr.title + '(' + c.year + ')');
75-
node = document.getElementById('td-movie-title');
76-
node.height = '28px';
77-
node.appendChild(e);
78-
// add rating and rating number
79-
e = createSpanNode('movie-rating', dbr.rating);
80-
node = document.getElementById('td-movie-rating');
81-
node.height = '28px';
82-
node.appendChild(e);
83-
e = createSpanNode('movie-rating-num', ` (${dbr.ratingNum}人看过)`);
84-
node.appendChild(e);
85-
// add title
86-
e = createDivNode('movie-meta', dbr.genres);
87-
node = document.getElementById('td-movie-meta');
88-
node.height = '28px';
89-
node.appendChild(e);
90-
// add button
91-
e = document.createElement('INPUT');
92-
e.value = "电影页面";
93-
e.type = "button";
94-
e.class = "movie-link";
95-
e.onclick = function () {chrome.tabs.create({url:dbr.url})}
96-
node = document.getElementById('td-movie-link');
97-
node.appendChild(e);
98-
// subhd link
99-
e = document.getElementById('subtitle-subhd-link');
100-
e.href = "http://subhd.com/search0/" + dbr.oriTitle.replace(/[!"%$£^&*()@\':;#~,.?><|\\//]+/g,' ') + '%20' + c.year;
101-
// un-hide table
102-
document.getElementById("movie-content-table").style = "display: initial";
103-
// un-hide subtitle
104-
document.getElementById("subtitle-panel").style = "display: block";
105-
}
106-
}
107-
108-
function getLoadedSubtitleInfo(movieId){
109-
chrome.runtime.sendMessage({action:"getLoadedSubtitle"}, function (response) {
110-
if (response != null)
111-
{
112-
console.log('settings received', response);
113-
if (response.subtitleInfo.movieId == movieId)
114-
{
115-
_subtitleSettings = response.subtitleSettings;
116-
//subtitle name label
117-
document.getElementById("subtitle-uploader").nextElementSibling.innerHTML = response.subtitleInfo.fileName;
118-
document.getElementById("subtitle-settings-panel").style = "display: initial";
119-
//time offset slider
120-
_timeOffsetSlider.value = getTimeOffsetSliderVal();
121-
//time offset text box
122-
_timeOffsetTextBox.value = _subtitleSettings.timeOffset1.toString();
123-
//subtitle height slider
124-
_subHeightSlider.value = getSubHeightSliderVal();
125-
//font colour check box
126-
_fontColourNodes[getSelectedFontColorBoxIdx()].checked = true;
127-
//font size label
128-
_fontSizeValNode.innerHTML = getFinalFontSizeString();
129-
//subtitle switch
130-
document.getElementById('subtitle-switch').checked = !_subtitleSettings.disabled;
131-
//subtitle panel
132-
document.getElementById('subtitle-collapse').className = _subtitleSettings.disabled?'collapse':'collapse in';
133-
chrome.runtime.sendMessage({action:"replaySubtitle"})
134-
updateSettings('all');
135-
}
136-
}
137-
initialiseSubtitleAdjustments();
138-
})
139-
}
140-
141-
function addSubtitleUploaderListener(){
142-
var input = document.getElementById("subtitle-uploader");
143-
var label = input.nextElementSibling,
144-
labelVal = label.innerHTML;
145-
input.addEventListener('change', function(event)
146-
{
147-
let fileName = '';
148-
let fileExt = event.target.value.split('.').pop();
149-
150-
if (this.files)
151-
fileName = event.target.value.split('\\').pop();
152-
153-
if (fileName && fileExt!='srt'){
154-
alert('抱歉,暂时只支持SRT格式的字幕文件。');
155-
fileName = '';
156-
}
157-
158-
if (fileName){
159-
setSubtitleFile(label, fileName, event.target.files[0])
160-
}
161-
else
162-
label.innerHTML = labelVal;
163-
});
164-
}
165-
166-
function setSubtitleFile(subtitleNameLabel, fileName, targetFile) {
167-
subtitleNameLabel.childNodes[3].innerHTML = fileName;
168-
let reader = new FileReader();
169-
reader.onloadend = function (){
170-
resetSubtitleSettings();
171-
updateSettings({subtitleSettings:_subtitleSettings});
172-
chrome.runtime.sendMessage({action: 'loadSubtitle', content: {
173-
subtitleObj: reader.result,
174-
subtitleInfo: {
175-
fileName: fileName,
176-
movieId: _movieId}
177-
}});
178-
document.getElementById("subtitle-settings-panel").style = "display: initial";
179-
}
180-
181-
reader.readAsText(targetFile,'chinese');
182-
}
183-
184-
function updateSettings(settingContent) {
185-
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
186-
chrome.tabs.sendMessage(tabs[0].id, {action: 'updateSubSettings', subtitleSettings:_subtitleSettings, settingContent: settingContent});
187-
});
188-
chrome.runtime.sendMessage({action: 'updateSubSettings', content: _subtitleSettings})
189-
}
190-
191-
function resetSubtitleSettings(){
192-
_subtitleSettings = {
193-
fontSize: 0,
194-
fontColour: '#fff',
195-
timeOffset1: 0,
196-
timeOffset2: 0,
197-
subHeight: 75,
198-
disabled: false
199-
}
200-
}
201-
202-
chrome.tabs.getSelected(null, function(tab) {
203-
if (/.*\.netflix\.com\/watch.*/.test(tab.url)) {
204-
chrome.tabs.executeScript(null, { file: "js/playerContents.js" });
205-
}
206-
})
71+
return e;
72+
}

0 commit comments

Comments
 (0)