@@ -8,8 +8,9 @@ var DEBUGMODE = {
88 setting : false ,
99 devAction : false ,
1010 quickRefresh : false ,
11- timefilterDebug : true
11+ timefilterDebug : false
1212} ;
13+ var version = "1.8.2" ;
1314var settings = {
1415 isIE : false ,
1516 localStorage : true ,
@@ -19,8 +20,10 @@ var settings = {
1920 hasPasteApi : true ,
2021 hasPermission : true ,
2122 enableBruteForce : false ,
22- usingNW : false
23+ usingNW : false ,
24+ lastUsedVersion : ''
2325} ;
26+ var isFirstRun = false ;
2427var settingUtils = {
2528 read : function read ( ) {
2629 if ( settings . localStorage ) {
@@ -71,8 +74,7 @@ var settingUtils = {
7174 reset : function reset ( ) {
7275 if ( settings . localStorage ) {
7376 if ( confirm ( '确认清除设置与笔记?本操作无法撤销!' ) ) {
74- localStorage . videoNotes = '' ;
75- localStorage . VNSettings = '' ;
77+ localStorage . clear ( ) ;
7678 alert ( '清除完毕,页面将会刷新。' ) ;
7779 location . reload ( ) ;
7880 }
@@ -129,6 +131,13 @@ settingUtils.read();
129131settingUtils . interaction . checkIfIE ( ) ;
130132settingUtils . interaction . checkPasteAPI ( ) ;
131133settingUtils . interaction . checkNW ( ) ;
134+
135+ if ( version != settings . lastUsedVersion ) {
136+ isFirstRun = true ;
137+ console . log ( 'isFirstRun:' , settings . lastUsedVersion ) ;
138+ settings . lastUsedVersion = version ;
139+ }
140+
132141settingUtils . write ( ) ;
133142var nwWindow = null ;
134143var nwClip = null ;
@@ -157,6 +166,11 @@ String.prototype.assignClick = function (func) {
157166'#reset-everything' . assignClick ( function ( event ) {
158167 settingUtils . reset ( ) ;
159168} ) ;
169+
170+ if ( settings . usingNW ) {
171+ document . querySelector ( '#is-app' ) . textContent = "本地应用。" ;
172+ }
173+
160174var gui = {
161175 el : {
162176 left : document . querySelector ( '.left' ) ,
@@ -288,6 +302,7 @@ document.addEventListener('fullscreenchange', function () {
288302} ) ;
289303var notes = {
290304 container : document . querySelector ( 'group' ) ,
305+ isAlwaysOn : false ,
291306 activeTimeout : - 1 ,
292307 item : function item ( ) {
293308 var id = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : 0 ;
@@ -307,6 +322,7 @@ var notes = {
307322 var _this = this ;
308323
309324 var force = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : false ;
325+ var alwaysLight = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : false ;
310326 this . save ( ) ;
311327 this . container . classList . add ( 'isactive' ) ;
312328
@@ -316,7 +332,7 @@ var notes = {
316332 console . error ( error ) ;
317333 }
318334
319- if ( textareaItem . value != "" && ! force && window . innerWidth > 1024 ) {
335+ if ( textareaItem . value != "" && ! force && window . innerWidth > 1024 && ! this . isAlwaysOn ) {
320336 this . activeTimeout = setTimeout ( function ( ) {
321337 _this . container . classList . remove ( 'isactive' ) ;
322338 } , 2500 ) ;
@@ -617,6 +633,39 @@ var shortcut = {
617633 notes . insertText ( event . target , fnstr ) ;
618634 }
619635 } ) ;
636+
637+ if ( settings . usingNW ) {
638+ shortcut . add ( 'ctrl+p' , function ( event ) {
639+ var targetVideoElement = null ;
640+
641+ if ( webFrame . isAvailable == true ) {
642+ var frame1 = document . querySelector ( 'iframe' ) . contentWindow ;
643+
644+ if ( frame1 . document . querySelector ( 'video' ) ) {
645+ targetVideoElement = frame1 . document . querySelector ( 'video' ) ;
646+ } else if ( frame1 . document . querySelector ( 'iframe' ) . contentWindow . document . querySelector ( 'video' ) ) {
647+ targetVideoElement = frame1 . document . querySelector ( 'iframe' ) . contentWindow . document . querySelector ( 'video' ) ;
648+ }
649+ } else if ( videoPlayer . isAvailable ) {
650+ targetVideoElement = videoPlayer . el ;
651+ }
652+
653+ if ( targetVideoElement ) {
654+ if ( targetVideoElement . paused ) {
655+ targetVideoElement . play ( ) ;
656+ } else {
657+ targetVideoElement . pause ( ) ;
658+ }
659+ }
660+ } ) ;
661+ shortcut . add ( 'ctrl+r' , function ( ) {
662+ location . reload ( ) ;
663+ } ) ;
664+ }
665+
666+ shortcut . add ( 'ctrl+]' , function ( ) {
667+ notes . isAlwaysOn = ! notes . isAlwaysOn ;
668+ } ) ;
620669 shortcut . apply ( ) ;
621670}
622671
@@ -741,6 +790,37 @@ function videoUrlParser() {
741790 document . querySelector ( '.left' ) . classList . add ( 'bilibili' ) ;
742791 }
743792 } ;
793+ } else if ( url . indexOf ( 'youtube.com' ) != - 1 && ! url . startsWith ( '||' ) ) {
794+ var urlOBJ = new URL ( url ) ;
795+
796+ if ( settings . isIE ) {
797+ return {
798+ mode : 'frame' ,
799+ parsed : url ,
800+ interaction : function interaction ( ) {
801+ webFrame . load ( targetURL , false ) ;
802+ document . querySelector ( '.left' ) . classList . remove ( 'bilibili' ) ;
803+ }
804+ } ;
805+ }
806+
807+ var videoID = urlOBJ . searchParams . get ( 'v' ) ;
808+ var timeiter = urlOBJ . searchParams . get ( 't' ) ;
809+ targetURL = 'https://www.youtube.com/embed/' + videoID ;
810+
811+ if ( timeiter ) {
812+ timeiter = timeiter . replace ( 's' , '' ) ;
813+ targetURL = targetURL + '?start=' + timeiter ;
814+ }
815+
816+ return {
817+ mode : 'youtube' ,
818+ parsed : targetURL ,
819+ interaction : function interaction ( ) {
820+ webFrame . load ( targetURL , true ) ;
821+ document . querySelector ( '.left' ) . classList . add ( 'bilibili' ) ;
822+ }
823+ } ;
744824 } else if ( url . startsWith ( '||' ) ) {
745825 targetURL = url . replace ( '||' , '' ) ;
746826
@@ -847,6 +927,7 @@ function onSubmitVideoURL() {
847927 document . querySelector ( '#file-info' ) . innerHTML = '⏳ 正在处理链接并加载中...' ;
848928 openFile . el . textBox . disabled = true ;
849929 gui . mode = res . mode ;
930+ history . change ( inputURL ) ;
850931 document . querySelector ( '#file-info' ) . classList . toggle ( 'hidden' ) ;
851932
852933 if ( ! res . error ) {
@@ -1115,12 +1196,37 @@ var modal = {
11151196modal . init ( ) ;
11161197
11171198if ( navigator . userAgent . indexOf ( 'Firefox' ) == - 1 ) {
1118- modal . open ( 'settings ' ) ; //Temporary fix for rendering issue
1199+ modal . open ( 'welcome ' ) ; //Temporary fix for rendering issue
11191200
1120- modal . close ( 'settings ' ) ;
1201+ modal . close ( 'welcome ' ) ;
11211202 console . info ( 'Doing settings workaround' ) ; // document.querySelector('modal#settings').classList.add('fadeout')
11221203}
11231204
1205+ var history = {
1206+ cur : '' ,
1207+ setup : function setup ( obj ) {
1208+ if ( settings . localStorage ) {
1209+ var a = localStorage . getItem ( 'VNHistory' ) ;
1210+
1211+ if ( a ) {
1212+ this . cur = a ;
1213+ document . querySelector ( '#history-btn' ) . innerHTML = a ;
1214+ document . querySelector ( '#history' ) . classList . remove ( 'hidden' ) ;
1215+ }
1216+ }
1217+ } ,
1218+ change : function change ( str ) {
1219+ if ( settings . localStorage ) {
1220+ localStorage . setItem ( 'VNHistory' , str ) ;
1221+ this . setup ( ) ;
1222+ }
1223+ }
1224+ } ;
1225+ '#history-btn' . assignClick ( function ( event ) {
1226+ openFile . el . textBox . value = history . cur ;
1227+ onSubmitVideoURL ( ) ;
1228+ } ) ;
1229+ history . setup ( ) ;
11241230setTimeout ( function ( ) {
11251231 if ( shortcut . count <= 1 ) {
11261232 modal . open ( 'openfile' ) ; // modal.open('settings')
@@ -1129,6 +1235,10 @@ setTimeout(function () {
11291235 if ( ! DEBUGMODE . devAction ) {
11301236 document . querySelector ( '#load-cover' ) . parentElement . removeChild ( document . querySelector ( '#load-cover' ) ) ;
11311237 }
1238+
1239+ if ( isFirstRun ) {
1240+ modal . open ( 'welcome' ) ;
1241+ }
11321242} , 1000 ) ;
11331243
11341244if ( DEBUGMODE . devAction ) {
0 commit comments