Display other available languages on edit page
authorJan Gerber <j@users.mediawiki.org>
Sun, 8 Nov 2009 15:31:34 +0000 (15:31 +0000)
committerJan Gerber <j@users.mediawiki.org>
Sun, 8 Nov 2009 15:31:34 +0000 (15:31 +0000)
js2/mwEmbed/libTimedText/mvTimeTextEdit.js

index 727eb0e..a5da763 100644 (file)
@@ -12,7 +12,8 @@ loadGM({
   "mwe-add-subs-file"      : "Add/Replace Subtitle",
   "mwe-add-subs-file-title": "Select Subtitle to upload",
   "mwe-error-only-srt"     : "Only srt files can be uploaded right now.",
-  "mwe-watch-video"        : "Watch video"
+  "mwe-watch-video"        : "Watch video",
+  "mwe-select-other-language": "Select Other Language"
 })
 
 
@@ -30,104 +31,128 @@ js2AddOnloadHook( function() {
     videoTitle = videoTitle.join('.').replace('TimedText:', 'File:');
     return videoTitle;
   }
-  function uploadSubtitles() {
+
+  var availableSubtitles = {};
+  var langData = {};
+
+  function addLanguageSelect(ttoolbar) {
+    var apprefix = wgPageName.split('.');
+    apprefix.pop();
+    var currentLanguage = apprefix.pop();
+    apprefix = apprefix.join('.');
     do_api_req({
       'data': {
         'meta' : 'siteinfo',
         'siprop' : 'languages'
       }
-      }, function( langDataRaw ) {
-        var apprefix = wgTitle.split('.');
-        apprefix.pop();
-        apprefix.pop();
-        apprefix = apprefix.join('.');
-                         do_api_req({
-                                         'data': {
-                                                 'list' : 'allpages',
-                                                 'apprefix' : apprefix
-                                         }
-                         }, function( subData ) {
-                           var availableSubtitles = {};
-                                       for(var i in subData.query.allpages){
-                                               var subPage = subData.query.allpages[i];
-                                               var langKey = subPage.title.split('.');
-                                               var extension = langKey.pop();
-                                               langKey = langKey.pop();
-                                               availableSubtitles[langKey] = subPage.title;
-          }
-          var langData = {};
-          var languageSelect = '<select id="timed_text_language">';
-
-          var lagRaw = langDataRaw.query.languages;
-          for(var j in lagRaw){
-            var code = lagRaw[j].code;
-            var language = lagRaw[j]['*'];
-            langData[ code ] = language;
-            languageSelect += '<option value="'+code+'">';
-            if (availableSubtitles[code]) {
-              languageSelect += language+'('+code+') +';
-            } else {
-              languageSelect += language+'('+code+') -';
-            }
-            languageSelect += '</option>';
-          }
-          languageSelect += '/</select>';
-          var cBtn = {};
-          cBtn[ gM('mwe-cancel') ] = function(){
-            $j(this).dialog('close');
+    }, function( langDataRaw ) {
+      var lagRaw = langDataRaw.query.languages;
+      for(var j in lagRaw){
+        var code = lagRaw[j].code;
+        var language = lagRaw[j]['*'];
+        langData[ code ] = language;
+      }
+      do_api_req({
+               'data': {
+                       'list' : 'allpages',
+                       'apprefix' : apprefix
+               }
+      }, function( subData ) {
+             for(var i in subData.query.allpages){
+                     var subPage = subData.query.allpages[i];
+                     var langKey = subPage.title.split('.');
+                     var extension = langKey.pop();
+                     langKey = langKey.pop();
+                     availableSubtitles[langKey] = subPage.title;
+        }
+        var select = $j('<select>');
+        var haveOtherLanguages = 0;
+        for(var i in availableSubtitles){
+          haveOtherLanguages++;
+          var opt = $j('<option>')
+              .html(langData[ i ] + '('+i+')')
+              .click(function(i) {
+                return function() {
+                  document.location.href = wgArticlePath.replace('/$1', '?title=' + availableSubtitles[i] + '&action=edit');
+                }}(i));
+          if(currentLanguage == i) {
+            opt.attr('selected', 'selcted');
           }
-          cBtn[ gM('mwe-ok') ] = function(){
-            var file = $j('#timed_text_file_upload');
-            var langKey = file[0].files[0].name.split('.');
-            var extension = langKey.pop();
-            langKey = langKey.pop();
-            var mimeTypes = {
-                'srt': 'text/x-srt',
-                'cmml': 'text/cmml'
-            }
-            if( !mimeTypes[ extension ] ){
-              js_log('Error: unknown extension:'+ extension);
-            }
-            //get language from form
-            langKey = $j('#timed_text_language').val();
-
-            if(extension == "srt") {
-              var srt = getSubtitle(file[0]);
-              $j(this).html("saving...<br>"+mv_get_loading_img());
-              $j('.ui-dialog-buttonpane').remove();
+          select.append(opt);
+        }
+        if (haveOtherLanguages > 1) {
+          ttoolbar.append(" " +gM('mwe-select-other-language')+": ");
+          ttoolbar.append(select);
+        }
+      });
+    });
+  }
 
-              var editToken = $j('input[name=wpEditToken]').val();
-              var title = wgPageName.split('.');
-              title.pop();
-              title.pop();
-              title = title.join('.') + '.' + langKey + '.srt';
-              do_api_req({
-                'data': {
-                  'action' : 'edit',
-                  'title' : title,
-                  'text' : srt,
-                  'token': editToken
-                }
-              }, function(dialog) {
-                  return function( result ) {
-                    document.location.href = wgArticlePath.replace('/$1', '?title=' + title + '&action=edit');
-                    $j(dialog).dialog('close');
-                 }}(this)
-              );
-            } else {
-              $j(this).html(gM("mwe-error-only-srt"));
-            }
+  function uploadSubtitles() {
+    var languageSelect = '<select id="timed_text_language">';
+    for(code in langData) {
+      var language = langData[ code ];
+      languageSelect += '<option value="'+code+'">';
+      if (availableSubtitles[code]) {
+        languageSelect += language+'('+code+') +';
+      } else {
+        languageSelect += language+'('+code+') -';
+      }
+      languageSelect += '</option>';
+    }
+    languageSelect += '/</select>';
+    var cBtn = {};
+    cBtn[ gM('mwe-cancel') ] = function(){
+      $j(this).dialog('close');
+    }
+    cBtn[ gM('mwe-ok') ] = function(){
+      var file = $j('#timed_text_file_upload');
+      var langKey = file[0].files[0].name.split('.');
+      var extension = langKey.pop();
+      langKey = langKey.pop();
+      var mimeTypes = {
+          'srt': 'text/x-srt',
+          'cmml': 'text/cmml'
+      }
+      if( !mimeTypes[ extension ] ){
+        js_log('Error: unknown extension:'+ extension);
+      }
+      //get language from form
+      langKey = $j('#timed_text_language').val();
+      if(extension == "srt") {
+        var srt = getSubtitle(file[0]);
+        $j(this).html("saving...<br>"+mv_get_loading_img());
+        $j('.ui-dialog-buttonpane').remove();
+        var editToken = $j('input[name=wpEditToken]').val();
+        var title = wgPageName.split('.');
+        title.pop();
+        title.pop();
+        title = title.join('.') + '.' + langKey + '.srt';
+        do_api_req({
+          'data': {
+            'action' : 'edit',
+            'title' : title,
+            'text' : srt,
+            'token': editToken
           }
-          $j.addDialog(gM("mwe-add-subs-file-title"),
-             '<input type="file" id="timed_text_file_upload"></input><br />' + languageSelect,
-             cBtn);
-          $j('#timed_text_file_upload').change(function(ev) {
-            var langKey = this.files[0].name.split('.');
-            var extension = langKey.pop();
-            langKey = langKey.pop();
-            $j('#timed_text_language').val( langKey );
-          });
-      });
+        }, function(dialog) {
+            return function( result ) {
+              document.location.href = wgArticlePath.replace('/$1', '?title=' + title + '&action=edit');
+              $j(dialog).dialog('close');
+           }}(this)
+        );
+      } else {
+        $j(this).html(gM("mwe-error-only-srt"));
+      }
+    }
+    $j.addDialog(gM("mwe-add-subs-file-title"),
+       '<input type="file" id="timed_text_file_upload"></input><br />' + languageSelect,
+       cBtn);
+    $j('#timed_text_file_upload').change(function(ev) {
+      var langKey = this.files[0].name.split('.');
+      var extension = langKey.pop();
+      langKey = langKey.pop();
+      $j('#timed_text_language').val( langKey );
     });
   }
   $j('#toolbar').hide();
@@ -144,6 +169,6 @@ js2AddOnloadHook( function() {
   button.click(function() { document.location.href = wgArticlePath.replace('$1', getVideoTitle()); })
   button.text(gM("mwe-watch-video"));
   ttoolbar.append(button);
-
+  addLanguageSelect(ttoolbar);
 });