1 <?xml version="1.0" encoding="UTF-8"?>
2 <?xml-stylesheet href="xhtml-default.css" type="text/css" media="screen, aural, print" ?>
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN"
4 "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
5 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
7 <link rel="shortcut icon" href="sgc.png" />
8 <link rel="icon" sizes="192x192" href="sgc.png" />
9 <link rel="manifest" href="manifest.json" />
10 <meta name="viewport" content="width=device-width" />
11 <meta name="mobile-web-app-capable" content="yes" />
12 <meta http-equiv="Content-Language" content="en" />
13 <title lang="en" xml:lang="en" dir="ltr">Select Words - SpeakGoodChinese</title>
16 background-image: url("Background.png");
17 background-color: rgb(250,250,250);
18 background-repeat: no-repeat;
19 background-position: center center;
21 background-attachment: fixed;}
40 <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
42 <script type="text/javascript" src="internationalization_tables.js" ></script>
43 <script type="text/javascript" src="wordlists.js" ></script>
44 <script type="text/javascript" src="wordlists_plus.js" ></script>
46 <body onfocus="load_SGC3_settings (); " onblur="store_SGC3_settings ();this.close();" onunload="store_SGC3_settings (); " >
49 Copyright (C) 2016 R.J.J.H. van Son (r.j.j.h.vanson@gmail.com)
51 This program is free software; you can redistribute it and/or
52 modify it under the terms of the GNU General Public License
53 as published by the Free Software Foundation; either version 2
54 of the License, or (at your option) any later version.
56 This program is distributed in the hope that it will be useful,
57 but WITHOUT ANY WARRANTY; without even the implied warranty of
58 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
59 GNU General Public License for more details.
61 You can find a copy of the GNU General Public License at
62 http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
64 <h1 style='text-align: center' id="SelectWords"><span id="SelectWordsCaption" title="" >Words</span>:
65 <a href="wordlists/README.xml"><span id="WordListName" style='text-align: center; color: blue;'>wordlist</span></a></h1>
66 <div style="position: fixed; color: black; bottom: 75%; left: 5%; height: 8%; width: 17%; font: 'Helvetica'; font-size: 3vmin; text-align: center " id="TonesCaption">---</div>
67 <select id="Tones" style="position: fixed; color: black; bottom: 65%; left: 5%; height: 15%; width: 17%; font: 'Helvetica'; font-size: 3vmin ; background-color: rgb(220,220,220); " onchange="selectedTones(this.selectedOptions); store_SGC3_settings (); " size="5" multiple="multiple" >
68 <option value="---" >---</option>
69 <option value="0" >0</option>
70 <option value="1" >1</option>
71 <option value="2" >2</option>
72 <option value="3" >3</option>
73 <option value="4" >4</option>
76 <div style="position: fixed; color: black; bottom: 75%; left: 25%; height: 8%; width: 17%; font: 'Helvetica'; font-size: 3vmin; text-align: center " id="PartCaption">---</div>
77 <select id="Part" style="position: fixed; color: black; bottom: 65%; left: 25%; height: 15%; width: 17%; font: 'Helvetica'; font-size: 3vmin; background-color: rgb(220,220,220); " onchange="selectedLessons(this.selectedOptions); store_SGC3_settings (); " multiple="multiple" >
78 <option value="---" ><span id="---" title="" >---</span></option>
81 <script type="text/javascript">
83 // Install the service worker for offline use
84 if ('serviceWorker' in navigator) {
85 navigator.serviceWorker.register('sw.js').then(function(registration) {
86 // Registration was successful
87 console.log('ServiceWorker registration successful with scope: ', registration.scope);
88 }).catch(function(err) {
89 // registration failed :(
90 console.log('ServiceWorker registration failed: ', err);
95 var mainWindow = localStorage.sgc3_mainWindow;
97 var selectTones = document.getElementById('Tones');
98 var selectLessons = document.getElementById('Part');
99 var wordListName = document.getElementById('WordListName');
103 var sgc3_settings = {
109 register: 249, // Must match Register_249 Id
110 wordList: "20 basic tone combinations",
112 synthesis_eSpeak: false,
114 personalWordlists: [],
115 displayNumbers: false,
120 examplesDatabaseName: "SGC3 examples",
121 audioDatabaseName: "SGC3 audio",
122 currentCollection: "SGC3",
129 function store_SGC3_settings () {
130 sgc3_settings.settingsRead = true;
132 for (x in sgc3_settings) {
133 localStorage["sgc3_"+x] = JSON.stringify(sgc3_settings[x]);
137 function load_SGC3_settings () {
138 for (x in sgc3_settings) {
139 // For some reason, parsing the language goes wrong
140 if (localStorage["sgc3_"+x]) {
141 sgc3_settings[x] = JSON.parse(localStorage["sgc3_"+x]);
144 examplesDatabaseName = sgc3_settings.examplesDatabaseName;
145 audioDatabaseName = sgc3_settings.audioDatabaseName;
147 wordlists = combineWordlistLists(global_wordlists, sgc3_settings.personalWordlists);
148 get_wordlist (sgc3_settings.wordList);
150 wordListName.textContent = sgc3_settings.wordList;
151 set_selectWordsLanguage (sgc3_settings.language);
152 add_lesson_names_to_select ();
154 // Set selected tones
155 if(sgc3_settings.selectedTones) {
156 for (var i=0; i< selectTones.options.length; ++i) {
157 selectTones.options[i].selected = false;
159 for (var i=0; i< sgc3_settings.selectedTones.length; ++i) {
160 var tone = sgc3_settings.selectedTones[i];
161 selectTones.options[tone+1].selected = true;
164 // Set selected lessons
165 if(sgc3_settings.selectedLessons) {
166 for (var i=0; i< selectLessons.options.length; ++i) {
167 selectLessons.options[i].selected = false;
169 for (var i=0; i< sgc3_settings.selectedLessons.length; ++i) {
170 var part = sgc3_settings.selectedLessons[i];
171 for (var j=0; j < selectLessons.options.length; ++ j) {
172 if(selectLessons.options[j].value == part) {
173 selectLessons.options[j].selected = true;
180 function selectedTones (selectedOptions) {
181 sgc3_settings.selectedTones = [];
183 for(var i=0; i < selectedOptions.length; ++i) {
184 if (selectedOptions[i].value == "---") {
187 sgc3_settings.selectedTones.push(Number(selectedOptions[i].value))
191 if (erase || sgc3_settings.selectedTones.length >= selectTones.options.length - 1) sgc3_settings.selectedTones = [];
192 store_SGC3_settings ();
195 function selectedLessons (selectedOptions) {
196 sgc3_settings.selectedLessons = [];
197 for(var i=0; i < selectedOptions.length; ++i) {
198 sgc3_settings.selectedLessons.push(selectedOptions[i].value + "")
201 if (sgc3_settings.selectedLessons.length >= selectLessons.options.length - 1 || sgc3_settings.selectedLessons.indexOf("---") > -1) sgc3_settings.selectedLessons = [];
202 store_SGC3_settings ();
205 // Initialize to stored settings
206 load_SGC3_settings ();
208 // Set language (make that selectable)
209 if (!sgc3_settings.language) {
210 sgc3_settings.language = (userLanguage) ? userLanguage : "EN";
212 set_selectWordsLanguage (sgc3_settings.language);
215 function add_lesson_names_to_select () {
216 var selector = document.getElementById('Part');
218 // First, remove old entries
219 var numOptions = selector.options.length
220 for(var i = numOptions - 1; i > 0; --i) {
224 // Create a list with lesson names/numbers
226 for (var i=0; i < currentWordlist.length; ++ i) {
227 var currentLesson = currentWordlist[i][4];
228 if (currentLesson && currentLesson != "-" && lessons.indexOf(currentLesson) <= -1) {
229 lessons.push(currentLesson+"");
234 for(i=0; i < lessons.length; ++i) {
235 var lastOption = selector.options.length - 1;
236 var lessonTitle = lessons[i];
237 var newOption = selector.options[0].cloneNode(true);
238 newOption.value = lessonTitle;
239 newOption.text = lessonTitle;
240 selector.add(newOption);