Add new language specified script
[platform/core/uifw/vc-webview-js.git] / js / vc-webview-ru_RU.js
1 /**
2  *   Copyright 2017 Samsung Electronics Co., Ltd.
3  *
4  *   Licensed under the Flora License, Version 1.1 (the "License");
5  *   you may not use this file except in compliance with the License.
6  *   You may obtain a copy of the License at
7  *
8  *       http://floralicense.org/license/
9  *
10  *   Unless required by applicable law or agreed to in writing, software
11  *   distributed under the License is distributed on an "AS IS" BASIS,
12  *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *   See the License for the specific language governing permissions and
14  *   limitations under the License.
15  */
16
17 /**
18  * vc-webview-ru_RU.js
19  *
20  *  This source code is a language specified script for Russian(ru_RU).
21  */
22
23 /**
24  * vc_search_word function found the text with similarity calculated using words in the @param.
25  *
26  * @param param  param from voice-control.
27  * @param replace  If replace true, function correct some confused charaters and try again.
28  */
29 function vc_search_word(param, replace) {
30         /* phase 2. search partial word in the webpage */
31         /* First, compare with links in html documents */
32         if (vc_flag_log == true) {
33                 vc_rec_result.style.background = 'rgba(0, 100, 200, 1)';
34         }
35         var resultTokenArr = param.split(' ');
36         var threshold = resultTokenArr.length * 0.3;
37         var temp = [];
38         var el = undefined;
39
40         vc_print_log('=== start vc_search_word');
41
42         for (var i = 0; i < vc_text_indicators.length; ++i) {
43                 var text = vc_text_indicators[i].textContent.replace(/[ `~!‘’@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '').toLowerCase();
44                 temp[i] = 0;
45
46                 for (var j = 0; j < resultTokenArr.length; j++) {
47                         if (vc_is_visible(vc_text_indicators[i], vc_scr, true) && text.indexOf(resultTokenArr[j].toLowerCase()) != -1) {
48                                 temp[i]++;
49                         }
50                 }
51         }
52
53         var max = -1;
54
55         for (var i = 0; i < vc_text_indicators.length; i++) {
56                 if (temp[i] >= threshold && (max == -1 || temp[i] > temp[max])) {
57                         el = vc_text_indicators[i];
58                         max = i;
59                 }
60         }
61
62         if (el != undefined) {
63                 return el;
64         }
65
66         /* Second, compare with whole text of elements in html documents */
67         var result = [];
68         for (var i = 0; i < resultTokenArr.length; i++) {
69                 var obj = vc_selector([resultTokenArr[i]]);
70                 for (var j = 0; j < obj.length; j++) {
71                         temp = obj[j];
72                         if (temp.childElementCount === 0) {
73                                 if (temp.hasAttribute('vc_count') == false) {
74                                         temp.setAttribute('vc_count', 1);
75                                         result.push(temp);
76                                 } else {
77                                         temp.setAttribute('vc_count', parseInt(temp.getAttribute('vc_count')) + 1);
78                                 }
79                         }
80                 }
81         }
82
83         for (var i = 0; i < result.length; i++) {
84                 var vccnt = parseInt(result[i].getAttribute('vc_count'));
85                 if (vccnt >= threshold && (el == undefined || vccnt > parseInt(el.getAttribute('vc_count')))) {
86                         el = result[i];
87                 }
88         }
89
90         for (var i = 0; i < result.length; i++) {
91                 result[i].removeAttribute('vc_count');
92         }
93
94         if (el != undefined) {
95                 return el;
96         }
97
98         return vc_search_character(param);
99 }
100
101 /**
102  * vc_search_word function found the text with similarity calculated using characters in the @param.
103  *
104  * @param param  param from voice-control.
105  */
106 function vc_search_character(param) {
107         vc_print_log('=== start searching(character level)');
108         if (vc_flag_log == true) {
109                 vc_rec_result.style.background = 'rgba(200, 100, 0, 1)';
110         }
111         var similarity = [];
112         var threshold = 0;
113
114         param = param.toLowerCase().split(' ');
115         for (var i = 0; i < vc_all_elem.length; i++) {
116                 if (vc_all_elem[i].childElementCount == 0 && vc_is_visible(vc_all_elem[i]) == true) {
117                         var text = vc_all_elem[i].textContent.replace(/[`~!‘’@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, ' ').toLowerCase().split(' ');
118                         var score = 0;
119
120                         for(var k = 0; k < param.length; k++) {
121                                 var min = 2147483647;
122
123                                 if (3 > param[k].length) {
124                                         continue;
125                                 }
126
127                                 for(var j = 0; j < text.length; j++) {
128                                         if (3 > text[j].length) {
129                                                 continue;
130                                         }
131                                         var cost = [];
132                                         var ncost = [];
133                                         var longStr;
134                                         var shortStr;
135
136                                         if (text[j].length > param[k].length) {
137                                                 longStr = text[j];
138                                                 shortStr = param[k];
139                                         } else {
140                                                 longStr = param[k];
141                                                 shortStr = text[j];
142                                         }
143
144                                         for (var l = 0; l <= longStr.length; l++) {
145                                                 cost[l] = l;
146                                         }
147
148                                         for (var s = 1; s <= shortStr.length; s++) {
149                                                 ncost[0] = s;
150
151                                                 for (var l = 1; l <= longStr.length; l++) {
152                                                         var match = shortStr[s - 1] == longStr[l - 1] ? 0 : 1;
153
154                                                         var rep = cost[l - 1] + match;
155                                                         var ins = cost[l] + 1;
156                                                         var del = ncost[l - 1] + 1;
157
158                                                         ncost[l] = Math.min(rep, ins, del);
159                                                 }
160
161                                                 var arr = cost;
162                                                 cost = ncost;
163                                                 ncost = arr;
164                                         }
165
166                                         if (param[k].length * 0.25 >= cost[longStr.length] && min > cost[longStr.length]) {
167                                                 min = cost[longStr.length];
168                                         }
169                                 }
170
171                                 if (min < 2147483647) {
172                                         score = score + min;
173                                 } else {
174                                         score = score + param[k].length;
175                                 }
176                         }
177
178                         similarity.push(score);
179                 } else {
180                         similarity.push(2147483647);
181                 }
182         }
183
184         vc_print_log('=== finish searching(character level)');
185
186         var min = 2147483647;
187         for (var i = 0; i < similarity.length; i++) {
188                 if (min > similarity[i]) {
189                         min = similarity[i];
190                 }
191         }
192
193         for (var i = 0; i < param.length; i++) {
194                 if (3 <= param[i].length) {
195                         threshold = threshold + param[i].length;
196                 }
197         }
198
199         if (threshold > min) {
200                 return vc_all_elem[similarity.indexOf(min)];
201         }
202
203         return undefined;
204 }
205
206 /**
207  * vc_search_word function found the text with similarity calculated using pronunciation keys in the @param.
208  *
209  * @param param  param from voice-control.
210  */
211 function vc_search_pronunciation(param) {
212         var el = undefined;
213
214         /* TODO: Fill the logic here to find the link or text include the pronunciation keys in param.
215          * If you find the link or text, then allocate that into el.
216          * If the language does not need to pronunciation comapring, you can erase this function.
217          */
218
219         return el;
220 }
221
222 /**
223  * vc_is_included_number function separate a number value from the @text.
224  *
225  * @param text  text string from voice-control-webview.cpp.
226  */
227 function vc_is_included_number(text) {
228         var numbers = ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять', 'десять',
229                 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать', 'двадцать',
230                 'двадцать один', 'двадцать два', 'двадцать три', 'двадцать четыре', 'двадцать пять', 'двадцать шесть', 'двадцать семь', 'двадцать восемь', 'двадцать девять', 'тридцать',
231                 'тридцать один', 'тридцать два', 'тридцать три', 'тридцать четыре', 'тридцать пять', 'тридцать шесть', 'тридцать семь', 'тридцать восемь', 'тридцать девять', 'сорок',
232                 'сорок один', 'сорок два', 'сорок три', 'сорок четыре', 'сорок пять', 'сорок шесть', 'сорок семь', 'сорок восемь', 'сорок девять', 'пятьдесят',
233                 'пятьдесят один', 'пятьдесят два', 'пятьдесят три', 'пятьдесят четыре', 'пятьдесят пять', 'пятьдесят шесть', 'пятьдесят семь', 'пятьдесят восемь', 'пятьдесят девять', 'шестьдесят',
234                 'шестьдесят один', 'шестьдесят два', 'шестьдесят три', 'шестьдесят четыре', 'шестьдесят пять', 'шестьдесят шесть', 'шестьдесят семь', 'шестьдесят восемь', 'шестьдесят девять', 'семьдесят',
235                 'семьдесят один', 'семьдесят два', 'семьдесят три', 'семьдесят четыре', 'семьдесят пять', 'семьдесят шесть', 'семьдесят семь', 'семьдесят восемь', 'семьдесят девять', 'восемьдесят',
236                 'восемьдесят один', 'восемьдесят два', 'восемьдесят три', 'восемьдесят четыре', 'восемьдесят пять', 'восемьдесят шесть', 'восемьдесят семь', 'восемьдесят восемь', 'восемьдесят девять', 'девяносто',
237                 'девяносто один', 'девяносто два', 'девяносто три', 'девяносто четыре', 'девяносто пять', 'девяносто шесть', 'девяносто семь', 'девяносто восемь', 'девяносто девять', 'сто'];
238         var convert = text.toLowerCase();
239         var result;
240
241         for (var i = 0; numbers.length > i; i++) {
242                 if (true == convert.startsWith(numbers[i]) && (' ' == text[numbers[i].length] || text.length == numbers[i].length)) {
243                         var partial = text.substr(numbers[i].length);
244
245                         if (vc_visible_hints[i].type == 'input' || text.length == numbers[i].length) {
246                                 result = {
247                                         cmd : (i + 1),
248                                         param : partial.trim()
249                                 };
250                                 return result;
251                         }
252                 }
253         }
254
255         result = {
256                 cmd : NaN,
257                 param : text.trim()
258         };
259
260         return result;
261 }
262
263 /**
264  * vc_correct_parameter function correct the voice recognition result.
265  *
266  * @param text  text string from voice-control-webview.cpp.
267  */
268 function vc_correct_parameter(text) {
269         var result = vc_is_included_number(text),
270         words = result.param.split(' ');
271
272         if (isNaN(result.cmd) == true && isNaN(words[0]) == false) {
273                 result.cmd = parseFloat(words[0]);
274                 result.param = result.param.substr(words[0].length + 1).trim();
275         }
276
277         return result
278 }
279
280 /**
281  * vc_check_web_control function check some special keyword and run it.
282  *
283  * @param spokenWord  voice recognized result string.
284  */
285 function vc_check_web_control(text) {
286         text = text.toLowerCase();
287         var convert = text.replace(/ /g, '');
288         var googleSearch = 'поиск в google';
289         var googleSearch2 = ['поиска', 'в google'];
290         var youtubeSearch = 'поиск в youtube';
291         var youtubeSearch2 = ['поиска', 'в youtube'];
292
293         if (text.startsWith(googleSearch) == true) {
294                 location.href = 'https://www.google.com/search?q=' + (text.substr(googleSearch.length)).trim();
295         } else if (text.startsWith(googleSearch2[0]) && text.endsWith(googleSearch2[1])) {
296                 var query = text.substr(googleSearch2[0].length, text.length - googleSearch2[0].length - googleSearch2[1].length);
297                 location.href = 'https://www.google.com/search?q=' + query.trim();
298         } else if (text.startsWith(youtubeSearch) == true) {
299                 location.href = 'https://www.youtube.com/results?search_query=' + (text.substr(youtubeSearch.length)).trim();
300         } else if (text.startsWith(youtubeSearch2[0]) && text.endsWith(youtubeSearch2[1])) {
301                 var query = text.substr(youtubeSearch2[0].length, text.length - youtubeSearch2[0].length - youtubeSearch2[1].length);
302                 location.href = 'https://www.youtube.com/results?search_query=' + query.trim();
303         } else if (convert == 'обновите') {
304                 location.reload();
305         } else if (convert == 'google') {
306                 location.href = 'https://www.google.com/';
307         } else if (convert == 'facebook') {
308                 location.href = 'https://www.facebook.com/';
309         } else if (convert == 'amazon') {
310                 location.href = 'https://www.amazon.com/';
311         } else if (convert == 'yahoo') {
312                 location.href = 'https://www.yahoo.com/';
313         } else if (convert == 'youtube') {
314                 location.href = 'https://www.youtube.com/';
315         } else if (convert == 'scrolldown') {
316                 vc_scroll_event_firing('DOWN');
317         } else if (convert == 'scrollup') {
318                 vc_scroll_event_firing('UP');
319         } else if (convert == 'перейтикначалу') {
320                 vc_scroll_event_firing('TOP');
321         } else if (convert == 'исходныйкод') {
322                 vc_print_html();
323         } else if (convert == 'следующий' || convert == 'вперед') {
324                 history.forward();
325         } else if (convert == 'предыдущие') {
326                 history.back();
327         } else if (convert == 'playlog' && vc_flag_log) {
328                 if (vc_log_area.style.visibility == 'visible') vc_log_area.style.visibility = 'hidden';
329                 else vc_log_area.style.visibility = 'visible';
330         } else {
331                 return false;
332         }
333         return true;
334 }