1- var NO_MOVIE = - 99 ;
1+ 'use strict'
2+
23var QUERY_FAILED = - 1 ;
34var QUERY_SUCCESSFUL = 1 ;
45var _movieId ;
56var _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
1332chrome . 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 ( ) ;
3146resetSubtitleSettings ( ) ;
3247
48+ chrome . tabs . getSelected ( null , function ( tab ) {
49+ if ( / .* \. n e t f l i x \. c o m \/ w a t c h .* / . 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+
3360function 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
4067function 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 ( / .* \. n e t f l i x \. c o m \/ w a t c h .* / . test ( tab . url ) ) {
204- chrome . tabs . executeScript ( null , { file : "js/playerContents.js" } ) ;
205- }
206- } )
71+ return e ;
72+ }
0 commit comments