Skip to content

Commit 492d05f

Browse files
committed
initial
1 parent 52f2779 commit 492d05f

84 files changed

Lines changed: 26028 additions & 2 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/.idea
2+
/node_modules
3+
4+
# subtitles used for testing
5+
/test_material
6+
7+
# vlc player
8+
/plugins
9+
/*.dll
10+
/*.dll.manifest

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
The MIT License (MIT)
2+
3+
Copyright (c) 2015 Ognjen Apic
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in
13+
all copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21+
THE SOFTWARE.

README.md

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,56 @@
1-
# lingo-player
2-
Open source video player with language learning features
1+
**Description**
2+
3+
Open source, cross-platform video player with language learning features.
4+
5+
- Based on VLC player, offers dictionary lookup for subtitles and word saving features
6+
- Works with 90 languages (8010 language combinations!), since it's using Google Translate
7+
8+
Project website: http://oaprograms.github.io/lingo-player
9+
10+
***How it works:***
11+
12+
Let's say you are learning Spanish:
13+
14+
- Open a Spanish movie, with Spanish subtitles, and optionally 2nd subtitles in your language.
15+
- Hover over any word to see translations to your language, click on it to save it to dictionary.
16+
- You can mark words with 4 levels of familiarity (New - red, Recognized - orange, Familiar - yellow and Known - green)
17+
- You can look up list of saved words any time and read subtitles in subtitle listing mode.
18+
19+
**Used Technologies**
20+
21+
- NW.js (http://nwjs.io/)
22+
- AngularJS (https://angularjs.org/)
23+
- WebChimera.js (http://www.webchimera.org/)
24+
- VLC player (http://www.videolan.org/vlc/index.html)
25+
- Google Translate (https://translate.google.com/)
26+
27+
**Prerequisites**
28+
29+
- [WebChimera.js prerequisites](https://github.com/RSATom/WebChimera.js#build-prerequisites)
30+
31+
**Installation**
32+
33+
- ``npm install``
34+
35+
**Contributing**
36+
37+
Anyone is very welcome to contribute to this project. In case you are interested, contact me at ognjen.apic at gmail.com.
38+
39+
***Planned features in future (help is welcome):***
40+
41+
- Auto-download subtitles from OpenSubtitles
42+
- Make Lingo Player homepage, video tutorial
43+
- Support more subtitle formats
44+
- Make OSX version
45+
- Add more dictionary sources
46+
- Lemmatization / stemming?
47+
- Highlight frequent words?
48+
- Translate app UI into several languages
49+
50+
**Screenshots**
51+
52+
(todo)
53+
54+
**Licence**
55+
56+
MIT

app/css/app-dialogs.css

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
2+
.subs-dialog-left-div{
3+
position: absolute;
4+
width: 38%;
5+
bottom: 0;
6+
top: 0;
7+
left: 0;
8+
overflow-y: auto;
9+
padding: 24px 16px 8px 12px;
10+
background-color: #eee;
11+
direction:rtl;
12+
}
13+
14+
.words-table{
15+
width: 80%;
16+
margin: 16px 16px 16px 0;
17+
}
18+
19+
.words-table tr.word-row:hover, .subs-table tr:hover, .words-table tr.add-word{
20+
background-color: #eeeeee;
21+
}
22+
23+
.words-table .actions{
24+
color: #b6b6b6;
25+
cursor: pointer;
26+
visibility: hidden;
27+
}
28+
29+
.word-level .word-level-indicator{ visibility: visible;}
30+
.word-level .word-level-change{ visibility: hidden;}
31+
.word-level:hover .word-level-indicator{ visibility: hidden;}
32+
.word-level:hover .word-level-change{ visibility: visible;}
33+
34+
.words-table tr:hover .no-actions{
35+
visibility: hidden;
36+
}
37+
38+
.words-table tr:hover .actions{
39+
visibility: visible;
40+
}
41+
42+
.words-table .actions:hover{
43+
color: #2f2f2f;
44+
}
45+
.words-table td{
46+
padding: 10px;
47+
}
48+
.words-table tr.word-row td{
49+
border-bottom: 1px solid #eee;
50+
}
51+
52+
.subs-dialog-right-div .checkbox-filters label{
53+
font-weight: normal;
54+
font-size: 14px;
55+
color: #777777;
56+
}
57+
58+
.file-table{
59+
width: 100%;
60+
margin-top: 20px;
61+
margin-bottom: 23px;
62+
}
63+
64+
.file-table td{
65+
padding: 7px;
66+
}
67+
68+
.file-table .file-text-input{
69+
width: 100%;
70+
}
71+
72+
.recent-files{
73+
margin: 30px 10px 0 0;
74+
bottom: 0;
75+
background-color: #ddd;
76+
height: 195px;
77+
padding: 15px 30px;
78+
border-top-right-radius: 10px;
79+
border-bottom-right-radius: 10px;
80+
}
81+
82+
.file-field-label{
83+
margin: 2px 4px;
84+
}
85+
86+
.about-table td:first-child{
87+
text-align: right;
88+
font-weight: bold;
89+
}
90+
.about-table td{
91+
padding: 6px;
92+
}
93+
94+
.langsel{
95+
width: 180px;
96+
display: inline-block;
97+
}
98+
.bordered{
99+
border-style: solid !important;
100+
}
101+
102+
.level-picker{
103+
width: 16px;
104+
height: 16px;
105+
border: 2px none #7c7c7c;
106+
display: inline-block;
107+
position: relative;
108+
margin-left: 2px;
109+
top: 4px;
110+
}

app/css/app-dict.css

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
.def {
2+
clear: both;
3+
color: rgb(119,119,119);
4+
font-size: 15px;
5+
6+
overflow-y: auto;
7+
overflow-x: hidden;
8+
padding: 10px 10px 10px 0;
9+
10+
}
11+
.def table{
12+
margin: 10px auto 0 auto;
13+
}
14+
.def tr{
15+
border: none;
16+
vertical-align: top;
17+
}
18+
.def td{
19+
border: none;
20+
height: 22px;
21+
padding: 0 5px;
22+
}
23+
.def td:last-child {
24+
width: auto !important;
25+
}
26+
.def .gt-baf-pos-head {
27+
font-style: italic;
28+
text-align: left;
29+
}
30+
.def .gt-baf-marker-container {
31+
max-width: 38px;
32+
text-align: right;
33+
}
34+
.def .gt-baf-word-clickable {
35+
color: #000;
36+
}
37+
.def .gt-baf-translations {
38+
padding: 0 12px 0 8px;
39+
}
40+
41+
.def .gt-baf-cts {
42+
background: #aaa;
43+
display: inline-block;
44+
height: 7px;
45+
margin: 6px 2px 5px 0;
46+
}

app/css/app-utility.css

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
.visibility-hidden{
2+
visibility: hidden;
3+
}
4+
5+
.inline-block{
6+
display: inline-block;
7+
}
8+
.pointer{
9+
cursor: pointer;
10+
}
11+
12+
.bigger{
13+
font-size: 1.5em;
14+
}
15+
16+
.hidden{
17+
display:none;
18+
}
19+
20+
.green{color:green;} .red{color:red;}
21+
22+
.mt { margin-top: 4px; } .mmt { margin-top: 8px; } .mmmt { margin-top: 16px; } .mmmmt { margin-top: 32px; }
23+
.ml { margin-left: 4px; } .mml { margin-left: 8px; } .mmml { margin-left: 16px; } .mmmml { margin-left: 32px; }
24+
.mb { margin-bottom: 4px; } .mmb { margin-bottom: 8px; } .mmmb { margin-bottom: 16px; } .mmmmb { margin-bottom: 32px; }
25+
.mr { margin-right: 4px; } .mmr { margin-right: 8px; } .mmmr { margin-right: 16px; } .mmmmr { margin-right: 32px; }
26+
27+
hr{
28+
margin: 15px 0;
29+
}
30+
31+
input{
32+
border: 1px solid #ddd;
33+
padding: 4px 5px;
34+
}
35+
36+
.dim-background{
37+
position: absolute;
38+
width: 100%;
39+
height: 100%;
40+
background-color: rgba(90, 90, 90, 0.50);
41+
z-index: 100;
42+
}
43+
44+
.ui-select-container{
45+
font-size: 14px;
46+
cursor: pointer;
47+
}
48+
49+
.loading{
50+
font-size: 2em;
51+
text-align: center;
52+
color: #bbb;
53+
padding: 20%;
54+
font-weight: bold;
55+
}
56+
57+
.no-select{
58+
user-select: none;
59+
-o-user-select:none;
60+
-moz-user-select: none;
61+
-khtml-user-select: none;
62+
-webkit-user-select: none;
63+
}
64+
65+
.subtle-button{
66+
opacity: 0.125;
67+
}
68+
.subtle-button:hover{
69+
opacity: 1;
70+
}
71+
72+
.dim-button{
73+
opacity: 0.5;
74+
}
75+
.dim-button:hover{
76+
opacity: 1;
77+
}
78+
79+
.no-events{
80+
pointer-events: none !important;
81+
}
82+
83+
.item-list{
84+
white-space:nowrap;
85+
overflow:hidden;
86+
text-overflow: ellipsis;
87+
}
88+
89+
[ng\:cloak], [ng-cloak], .ng-cloak {
90+
display: none !important;
91+
}

0 commit comments

Comments
 (0)