b3acf957dd83e84b31622adc94f710cbfd45f58e
[lhc/web/wiklou.git] / js2 / mwEmbed / libTimedText / mvTimeTextEdit.js
1 /*
2 * JS2-style edit.js
3 */
4
5 // Setup configuration vars (if not set already)
6 if( !mwAddMediaConfig )
7 var mwAddMediaConfig = {};
8
9 var mvTimedTextEdit = {};
10
11 loadGM({
12 "mwe-add-subs-file" : "Add/Replace Subtitle",
13 "mwe-add-subs-file-title": "Select Subtitle to upload",
14 "mwe-error-only-srt" : "Only srt files can be uploaded right now.",
15 "mwe-watch-video" : "Watch video",
16 "mwe-select-other-language": "Select Other Language"
17 })
18
19
20 js2AddOnloadHook( function() {
21 function getSubtitle(f) {
22 var name = f.files[0].name;
23 var srtData = f.files[0].getAsBinary();
24 srtData = srtData.replace('\r\n', '\n');
25 return srtData;
26 }
27 function getVideoTitle() {
28 var videoTitle = wgPageName.split('.');
29 videoTitle.pop();
30 videoTitle.pop();
31 videoTitle = videoTitle.join('.').replace('TimedText:', 'File:');
32 return videoTitle;
33 }
34
35 var availableSubtitles = {};
36 var langData = {};
37
38 function addLanguageSelect(ttoolbar) {
39 var apprefix = wgPageName.split('.');
40 apprefix.pop();
41 var currentLanguage = apprefix.pop();
42 apprefix = apprefix.join('.');
43 do_api_req({
44 'data': {
45 'meta' : 'siteinfo',
46 'siprop' : 'languages'
47 }
48 }, function( langDataRaw ) {
49 var lagRaw = langDataRaw.query.languages;
50 for(var j in lagRaw){
51 var code = lagRaw[j].code;
52 var language = lagRaw[j]['*'];
53 langData[ code ] = language;
54 }
55 do_api_req({
56 'data': {
57 'list' : 'allpages',
58 'apprefix' : apprefix.replace("TimedText:", ""),
59 'apnamespace' : 102
60 }
61 }, function( subData ) {
62 for(var i in subData.query.allpages){
63 var subPage = subData.query.allpages[i];
64 var langKey = subPage.title.split('.');
65 var extension = langKey.pop();
66 langKey = langKey.pop();
67 availableSubtitles[langKey] = subPage.title;
68 }
69 var select = $j('<select>');
70 var haveOtherLanguages = 0;
71 for(var i in availableSubtitles){
72 haveOtherLanguages++;
73 var opt = $j('<option>')
74 .html(langData[ i ] + '('+i+')')
75 .click(function(i) {
76 return function() {
77 document.location.href = wgArticlePath.replace('/$1', '?title=' + availableSubtitles[i] + '&action=edit');
78 }}(i));
79 if(currentLanguage == i) {
80 opt.attr('selected', 'selcted');
81 }
82 select.append(opt);
83 }
84 if (haveOtherLanguages > 1) {
85 ttoolbar.append(" " +gM('mwe-select-other-language')+": ");
86 ttoolbar.append(select);
87 }
88 });
89 });
90 }
91
92 function uploadSubtitles() {
93 var languageSelect = '<select id="timed_text_language">';
94 for(code in langData) {
95 var language = langData[ code ];
96 languageSelect += '<option value="'+code+'">';
97 if (availableSubtitles[code]) {
98 languageSelect += language+'('+code+') +';
99 } else {
100 languageSelect += language+'('+code+') -';
101 }
102 languageSelect += '</option>';
103 }
104 languageSelect += '/</select>';
105 var cBtn = {};
106 cBtn[ gM('mwe-cancel') ] = function(){
107 $j(this).dialog('close');
108 }
109 cBtn[ gM('mwe-ok') ] = function(){
110 var file = $j('#timed_text_file_upload');
111 var langKey = file[0].files[0].name.split('.');
112 var extension = langKey.pop();
113 langKey = langKey.pop();
114 var mimeTypes = {
115 'srt': 'text/x-srt',
116 'cmml': 'text/cmml'
117 }
118 if( !mimeTypes[ extension ] ){
119 js_log('Error: unknown extension:'+ extension);
120 }
121 //get language from form
122 langKey = $j('#timed_text_language').val();
123 if(extension == "srt") {
124 var srt = getSubtitle(file[0]);
125 $j(this).html("saving...<br>"+mv_get_loading_img());
126 $j('.ui-dialog-buttonpane').remove();
127 var editToken = $j('input[name=wpEditToken]').val();
128 var title = wgPageName.split('.');
129 title.pop();
130 title.pop();
131 title = title.join('.') + '.' + langKey + '.srt';
132 do_api_req({
133 'data': {
134 'action' : 'edit',
135 'title' : title,
136 'text' : srt,
137 'token': editToken
138 }
139 }, function(dialog) {
140 return function( result ) {
141 document.location.href = wgArticlePath.replace('/$1', '?title=' + title + '&action=edit');
142 $j(dialog).dialog('close');
143 }}(this)
144 );
145 } else {
146 $j(this).html(gM("mwe-error-only-srt"));
147 }
148 }
149 $j.addDialog(gM("mwe-add-subs-file-title"),
150 '<input type="file" id="timed_text_file_upload"></input><br />' + languageSelect,
151 cBtn);
152 $j('#timed_text_file_upload').change(function(ev) {
153 var langKey = this.files[0].name.split('.');
154 var extension = langKey.pop();
155 langKey = langKey.pop();
156 $j('#timed_text_language').val( langKey );
157 });
158 }
159 $j('#toolbar').hide();
160 var ttoolbar = $j('<div>');
161 $j('#toolbar').after(ttoolbar);
162
163 var button = $j('<button>');
164 button.click(uploadSubtitles)
165 button.text(gM("mwe-add-subs-file"));
166 ttoolbar.append(button);
167 ttoolbar.append(' ');
168
169 var button = $j('<button>');
170 button.click(function() { document.location.href = wgArticlePath.replace('$1', getVideoTitle()); })
171 button.text(gM("mwe-watch-video"));
172 ttoolbar.append(button);
173 addLanguageSelect(ttoolbar);
174 });
175