| sample = `[ti:僕たちはひどつの光] | ||
| [ar: μ's ] | ||
| [00:27.540]Ah! ほのかな予感から始まり | ||
| [00:32.970]Ah! 希望が星空駈けて | ||
| [00:38.450]花を咲かせるにっこり笑顔は | ||
| [00:43.920]ずっと同じさ 友情の笑顔 | ||
| [00:49.160] | ||
| [00:49.510]忘れない いつまでも忘れない | ||
| [00:54.940]こんなにも心がひとつになる | ||
| [01:00.410]世界を見つけた喜び(ともに)歌おう | ||
| [01:09.940]最後まで(僕たちはひとつ) | ||
| [01:16.660] | ||
| [01:17.040]小鳥の翼がついに大きくなって | ||
| [01:25.010]旅立ちの日だよ | ||
| [01:28.130]遠くへと広がる海の色暖かく | ||
| [01:36.050]夢の中で描いた絵のようなんだ | ||
| [01:40.300]切なくて時をまきもどしてみるかい? | ||
| [01:52.490]No no no いまが最高! | ||
| [01:58.620] | ||
| [02:20.460]みんなと出会えたこと嬉しくて | ||
| [02:27.090]離れたくないよ本当だよ | ||
| [02:31.550]涙はいらない このまま踊ろう | ||
| [02:36.980]手を振ってもっと振って | ||
| [02:42.890] | ||
| [02:45.370]光を追いかけてきた僕たちだから | ||
| [02:53.190]さよならは言わない | ||
| [02:56.320]また会おう 呼んでくれるかい? | ||
| [03:00.300]僕たちのこと | ||
| [03:04.320]素敵だった未来に繋がった夢 | ||
| [03:08.560]夢の未来 君と僕のLIVE&LIFE | ||
| [03:15.430] | ||
| [03:37.800]小鳥の翼がついに大きくなって | ||
| [03:45.640]旅立ちの日だよ | ||
| [03:48.760]遠くへと広がる海の色暖かく | ||
| [03:56.730]夢の中で描いた絵のようなんだ | ||
| [04:00.990]切なくて時をまきもどしてみるかい? | ||
| [04:13.240]No no no いまが最高! | ||
| [04:18.670]だってだって、いまが最高! | ||
| [04:30.500] | ||
| [04:31.520]Ah! ほのかな予感から始まり | ||
| [04:37.410]Ah! 光を追いかけてきたんだよ… | ||
| [04:48.410] | ||
| ` | ||
| sample_complex = `[00:27.540][04:31.520]Ah! ほのかな予感から始まり | ||
| [00:32.970]Ah! 希望が星空駈けて | ||
| [00:38.450]花を咲かせるにっこり笑顔は | ||
| [00:43.920]ずっと同じさ 友情の笑顔 | ||
| [00:49.160] | ||
| [00:49.510]忘れない いつまでも忘れない | ||
| [00:54.940]こんなにも心がひとつになる | ||
| [01:00.410]世界を見つけた喜び(ともに)歌おう | ||
| [01:09.940]最後まで(僕たちはひとつ) | ||
| [01:16.660] | ||
| [01:17.040][03:37.800]小鳥の翼がついに大きくなって | ||
| [01:25.010][03:45.640]旅立ちの日だよ | ||
| [01:28.130][03:48.760]遠くへと広がる海の色暖かく | ||
| [01:36.050][03:56.730]夢の中で描いた絵のようなんだ | ||
| [01:40.300][04:00.990]切なくて時をまきもどしてみるかい? | ||
| [01:52.490][04:13.240]No no no いまが最高! | ||
| [01:58.620][02:42.890] | ||
| [02:20.460]みんなと出会えたこと嬉しくて | ||
| [02:27.090]離れたくないよ本当だよ | ||
| [02:31.550]涙はいらない このまま踊ろう | ||
| [02:36.980]手を振ってもっと振って | ||
| [02:45.370]光を追いかけてきた僕たちだから | ||
| [02:53.190]さよならは言わない | ||
| [02:56.320]また会おう 呼んでくれるかい? | ||
| [03:00.300]僕たちのこと | ||
| [03:04.320]素敵だった未来に繋がった夢 | ||
| [03:08.560]夢の未来 君と僕のLIVE&LIFE | ||
| [03:15.430][04:30.500][04:48.410] | ||
| [04:18.670]だってだって、いまが最高! | ||
| [04:37.410]Ah! 光を追いかけてきたんだよ… | ||
| ` | ||
| abnormal = `[ar:Artist] | ||
| [ti:Title] | ||
| [00:j7.540]alskdfjlasdkjflsakdjf | ||
| [04:37:410]sadlkjfsadlkfj | ||
| [04]sadlkjfsadlkfj | ||
| [03:100:00]asdlfkjasdf | ||
| [03:10.00]Normal | ||
| asldkfjalskdfj | ||
| [sdl:lksajdf]asdlfkjasdf | ||
| ` | ||
| id_tags_only = `[ar:Lyrics artist] | ||
| [al: Album where the song is from] | ||
| [ti:Lyrics (song) title ] | ||
| [au: Creator of the Songtext ] | ||
| [length:How long the song is] | ||
| [by:Creator of the [LRC] file] | ||
| [offset: 21 ] | ||
| [foo:bar] | ||
| [re:The player or editor that created the LRC file] | ||
| [ve:v0.3.0] | ||
| ` | ||
| id_tags_lyrics = `[ar:Lyrics artist] | ||
| [al: Album where the song is from] | ||
| [ti:Lyrics (song) title ] | ||
| [au: Creator of the Songtext ] | ||
| [length:How long the song is] | ||
| [by:Creator of the [LRC] file] | ||
| [offset: 21 ] | ||
| [foo:bar] | ||
| [re:The player or editor that created the LRC file] | ||
| [ve:v0.3.0] | ||
| ` | ||
| test_time_offset_down = `[offset:-101] | ||
| [00:00.050]One | ||
| [00:01.000]Two | ||
| [00:02.000]Three | ||
| ` | ||
| test_time_offset_up = `[offset:1000] | ||
| [00:00.050]One | ||
| [00:01.000]Two | ||
| [00:02.000]Three | ||
| ` | ||
| require('./test.js'); | ||
+7
-3
| { | ||
| "name": "lyrics.js", | ||
| "version": "0.3.3", | ||
| "version": "0.3.4", | ||
| "description": "A JavaScript for parsing LRC file and synchronize lyrics.", | ||
@@ -10,3 +10,5 @@ "main": "", | ||
| "scripts": { | ||
| "uglifyjs": "uglifyjs lyrics.js > lyrics.min.js" | ||
| "uglifyjs": "uglifyjs lyrics.js > lyrics.min.js", | ||
| "test-uncompressed": "qunit-cli -c lyrics.js ./test/qunit_test.js", | ||
| "test": "qunit-cli -c lyrics.min.js ./test/qunit_test.js" | ||
| }, | ||
@@ -26,6 +28,8 @@ "repository": { | ||
| }, | ||
| "license": "MIT", | ||
| "homepage": "https://github.com/frank-deng/js-lyrics#readme", | ||
| "devDependencies": { | ||
| "qunitjs": "^1.23.1" | ||
| "qunit-cli": "" | ||
| } | ||
| } | ||
+34
-0
@@ -10,3 +10,14 @@ <a name='english'></a> | ||
| Install | ||
| ------- | ||
| You can install via **_npm_**: | ||
| $ npm install lyrics.js | ||
| Or via Git reporsitory: | ||
| $ git clone https://github.com/frank-deng/js-lyrics.git | ||
| Usage | ||
@@ -25,3 +36,9 @@ ----- | ||
| **PS**: To specify time offset for `.lrc` file, please add the following tag into your `.lrc` file: | ||
| [offset:t] | ||
| `t` is time offset in milliseconds, positive value to shift time up, negative value to shift time down. | ||
| ### Select lyric to highlight | ||
@@ -72,3 +89,14 @@ | ||
| 安装 | ||
| ---- | ||
| 使用**_npm_**安装: | ||
| $ npm install lyrics.js | ||
| 从Git仓库安装: | ||
| $ git clone https://github.com/frank-deng/js-lyrics.git | ||
| 用法 | ||
@@ -87,3 +115,9 @@ ---- | ||
| **PS**:如果需要为`.lrc`指定时间偏移量,请在`.lrc`文件中加上如下标签: | ||
| [offset:t] | ||
| `t`为时间偏移量,单位为毫秒,正数为延后,负数为提前。 | ||
| ### 选择需要高亮的歌词 | ||
@@ -90,0 +124,0 @@ |
+9
-0
@@ -127,2 +127,11 @@ <!DOCTYPE html> | ||
| <div id='lyrics_container'></div> | ||
| <script> | ||
| sample = document.getElementById('sample').innerHTML; | ||
| sample_complex = document.getElementById('sample_complex').innerHTML; | ||
| abnormal = document.getElementById('abnormal').innerHTML; | ||
| id_tags_only = document.getElementById('id_tags_only').innerHTML; | ||
| id_tags_lyrics = document.getElementById('id_tags_lyrics').innerHTML; | ||
| test_time_offset_down = document.getElementById('test_time_offset_down').innerHTML; | ||
| test_time_offset_up = document.getElementById('test_time_offset_up').innerHTML; | ||
| </script> | ||
| <script src="qunit-2.0.1.js"></script> | ||
@@ -129,0 +138,0 @@ <script src="test.js"></script> |
+8
-8
@@ -9,3 +9,3 @@ function htmlspecialchars(s){ | ||
| QUnit.test("Basic Test", function(assert) { | ||
| var lrcParser = new Lyrics(document.getElementById('sample').innerHTML); | ||
| var lrcParser = new Lyrics(sample); | ||
| assert.deepEqual(lrcParser.getLyric(0), {timestamp:27.540,text:'Ah! ほのかな予感から始まり'}); | ||
@@ -83,4 +83,4 @@ assert.deepEqual(lrcParser.getLyric(4), {timestamp:49.160,text:''}); | ||
| QUnit.test("Complex LRC Test", function(assert) { | ||
| var lrc1 = new Lyrics(document.getElementById('sample').innerHTML); | ||
| var lrc2 = new Lyrics(document.getElementById('sample_complex').innerHTML); | ||
| var lrc1 = new Lyrics(sample); | ||
| var lrc2 = new Lyrics(sample_complex); | ||
| assert.deepEqual( | ||
@@ -110,3 +110,3 @@ lrc1.getLyrics(), | ||
| assert.strictEqual(parser.load('[foo:bar]'), false, "Invalid ID Tag" ); | ||
| assert.strictEqual(parser.load(document.getElementById('abnormal').innerHTML), true, 'LRC loaded via load()'); | ||
| assert.strictEqual(parser.load(abnormal), true, 'LRC loaded via load()'); | ||
| assert.deepEqual(parser.getLyrics(), [{timestamp:190,text:'Normal'}], "Abnormal data filtered." ); | ||
@@ -116,3 +116,3 @@ assert.deepEqual(parser.getIDTags(), {artist:'Artist',title:'Title'}, "Abnormal data filtered."); | ||
| QUnit.test("Select Lyric", function(assert) { | ||
| var lrc = new Lyrics(document.getElementById('sample').innerHTML); | ||
| var lrc = new Lyrics(sample); | ||
| assert.strictEqual(lrc.select(0), -1); | ||
@@ -140,3 +140,3 @@ assert.strictEqual(lrc.select(0.1), -1); | ||
| QUnit.test("ID Tag parsing", function(assert) { | ||
| var lrc = new Lyrics(document.getElementById('id_tags_only').innerHTML); | ||
| var lrc = new Lyrics(id_tags_only); | ||
| assert.deepEqual(lrc.getIDTags(), { | ||
@@ -157,8 +157,8 @@ artist:'Lyrics artist', | ||
| var lrc = new Lyrics(); | ||
| lrc.load(document.getElementById('test_time_offset_down').innerHTML); | ||
| lrc.load(test_time_offset_down); | ||
| assert.deepEqual(lrc.getLyric(lrc.select(1)), {timestamp:0.05,text:'One'}); | ||
| assert.deepEqual(lrc.getIDTags(), {offset:-101}); | ||
| lrc.load(document.getElementById('test_time_offset_up').innerHTML); | ||
| lrc.load(test_time_offset_up); | ||
| assert.deepEqual(lrc.getLyric(lrc.select(1)), {timestamp:2,text:'Three'}); | ||
| assert.deepEqual(lrc.getIDTags(), {offset:1000}); | ||
| }); |
@@ -127,2 +127,11 @@ <!DOCTYPE html> | ||
| <div id='lyrics_container'></div> | ||
| <script> | ||
| sample = document.getElementById('sample').innerHTML; | ||
| sample_complex = document.getElementById('sample_complex').innerHTML; | ||
| abnormal = document.getElementById('abnormal').innerHTML; | ||
| id_tags_only = document.getElementById('id_tags_only').innerHTML; | ||
| id_tags_lyrics = document.getElementById('id_tags_lyrics').innerHTML; | ||
| test_time_offset_down = document.getElementById('test_time_offset_down').innerHTML; | ||
| test_time_offset_up = document.getElementById('test_time_offset_up').innerHTML; | ||
| </script> | ||
| <script src="qunit-2.0.1.js"></script> | ||
@@ -129,0 +138,0 @@ <script src="test.js"></script> |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
159293
3.72%12
9.09%4460
2.69%2
-33.33%151
29.06%0
-100%