web/static/ldt/js/projectscontents.js
changeset 105 90284efeb233
parent 104 16c793110f40
child 106 d7c952a46c7e
equal deleted inserted replaced
104:16c793110f40 105:90284efeb233
     1 
       
     2 $.fn.realVal = function() {
       
     3     var obj = $(this[0]);
       
     4     if(obj.val) {
       
     5         if(obj.val() === obj.attr('defaultText')) {
       
     6             return '';
       
     7         }
       
     8         else {
       
     9             return obj.val();
       
    10         }
       
    11     }
       
    12     else {
       
    13         return null;
       
    14     }
       
    15 };
       
    16 
       
    17 
       
    18 function init_events_base(base_node, embed_url) {
       
    19 
       
    20     $('.ldt_link_embed',base_node).click(function(e) {
       
    21         e.preventDefault();
       
    22         var link = $(e.target);
       
    23         var json_url = link.attr("href");
       
    24         var player_id = link.attr("id");
       
    25         var ldt_id = player_id.substring(15);
       
    26         $('<a />', {
       
    27             href: embed_url+'?json_url='+escape(json_url)+'&player_id='+escape(player_id)+'&ldt_id='+escape(ldt_id),
       
    28             target: "_blank"
       
    29         }).nyroModal({
       
    30             filters: ['iframe'],
       
    31             sizes: {
       
    32                 minW: '750',
       
    33                 minH: '662'
       
    34             },
       
    35             callbacks: {
       
    36                 afterShowCont: function(nm) {
       
    37                     nm.store.iframe.height(662);
       
    38                     nm.store.iframe.width(750);
       
    39                 }
       
    40             }
       
    41             }).trigger('nyroModal');
       
    42         return false;
       
    43     });
       
    44 
       
    45 
       
    46     $('.imageline',base_node).each(function(i) {
       
    47         var tr = $(this);
       
    48         tr.mouseover(function() {
       
    49             $('.cellimgdiv',this).css('visibility', 'visible');
       
    50         }); 
       
    51         tr.mouseout(function() {
       
    52             $('.cellimgdiv',this).css('visibility', 'hidden');
       
    53         });
       
    54     });
       
    55     
       
    56     $('.cellimgdiv img').qtip({ 
       
    57         style: { 
       
    58             'name': 'dark',
       
    59             'filter':'alpha(opacity=70)',
       
    60             '-moz-opacity':'0.7',
       
    61             '-khtml-opacity': '0.7',
       
    62             'opacity': '0.7',
       
    63             'border': {
       
    64                 'width' : '0',
       
    65                 'color': '#505050'
       
    66             }, 
       
    67             'tip': true
       
    68         } 
       
    69     });
       
    70 }
       
    71 
       
    72 function testAndClose(close_fn) {
       
    73 	
       
    74 	return function(force) {
       
    75 	    // Here we ask LDT if the current work is modified and if the user want to save it.
       
    76 	    var ldtSwf =  $('#ldtInitSwf',$.nmTop().store.iframe.contents()).get(0);
       
    77 	    // In the ldt_link_create case, the modal page can be the form, or the ldt swf. So we have to test.
       
    78 	    if (!force && ldtSwf && ldtSwf.name==="ldtInitSwf" && ldtSwf.isModified()==="true") {
       
    79 	        ldtSwf.askSave();
       
    80 	    }
       
    81 	    else {
       
    82             close_fn.apply(this);
       
    83 	    }
       
    84 	};
       
    85 }
       
    86 
       
    87 
       
    88 function searchCallback(target, container_selector, url, timeout) {
       
    89 
       
    90     timeout = typeof(timeout) !== 'undefined' ? timeout : 0;
       
    91     target = $(target);
       
    92     
       
    93     // remove all qtip
       
    94     $(".qtip").remove();
       
    95     
       
    96     if(target.realVal().length > 0) {
       
    97         target.nextAll(".searchclear").show();
       
    98     }
       
    99 
       
   100     if(target.attr('timer')) {
       
   101         clearTimeout(target.attr('timer'));
       
   102     }
       
   103 
       
   104     target.attr(
       
   105         'timer',
       
   106         setTimeout(function() {
       
   107             target.next(".searchajaxloader").show();
       
   108             target.nextAll(".searchclear").hide();
       
   109             var filterVal = "_" + escape(target.realVal());
       
   110             url = url.replace('__FILTER__',filterVal);
       
   111             $.ajax({
       
   112                 url: url,
       
   113                 cache: false,
       
   114                 success: function(data, status, request) {
       
   115                     $(container_selector).html(data);
       
   116                     target.next(".searchajaxloader").hide();
       
   117                     if(target.realVal().length > 0) {
       
   118                         target.nextAll(".searchclear").show();
       
   119                     }
       
   120                     init_events($(container_selector));
       
   121                     target.removeAttr('timer');
       
   122                 }
       
   123             });    
       
   124         },
       
   125         300)
       
   126     );
       
   127 }
       
   128 
       
   129 
       
   130 function init_events_contents(base_node, embed_url, content_filter_url) {
       
   131     
       
   132     init_events_base(base_node, embed_url);
       
   133     
       
   134     $('.content_link_create').each(function(i){
       
   135         $(this).attr("target","_blank");
       
   136     });
       
   137     $('.content_link_create').nyroModal({
       
   138         filters: ['iframe'],
       
   139         sizes: {
       
   140             minW: 770,
       
   141             minH: 550
       
   142         },
       
   143         callbacks: {
       
   144             afterClose: function(nm) {
       
   145                 searchCallback($('#searchprojectsinput'), "#contentslistcontainer", content_filter_url);
       
   146             },
       
   147             afterShowCont: function(nm) {
       
   148                 nm.store.iframe.width(770);
       
   149                 nm.store.iframe.height(550);
       
   150                 nm.store.iframe.load(function() {
       
   151                     var form_status = $(this).contents().find("#content_form_status").val(); 
       
   152                     if(form_status === 'saved' || form_status === 'deleted' ) {
       
   153                         $.nmTop().close();
       
   154                     }
       
   155                 });
       
   156             }
       
   157         }
       
   158     });
       
   159     
       
   160     $('.contenttitlelink').each(function(i){
       
   161         $(this).attr("target","_blank");
       
   162     });
       
   163     $('.contenttitlelink').nyroModal({
       
   164         filters: ['iframe'],
       
   165         sizes: {
       
   166             minW: 770,
       
   167             minH: 550
       
   168         },
       
   169         callbacks: {
       
   170             afterClose: function(nm) {
       
   171                 searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0);    
       
   172             },
       
   173             afterShowCont: function(nm) {
       
   174                 nm.store.iframe.width(770);
       
   175                 nm.store.iframe.height(550);
       
   176                 nm.store.iframe.load(function() {
       
   177                       var form_status = $(this).contents().find("#content_form_status").val(); 
       
   178                       if(form_status === 'saved' || form_status === 'deleted') {
       
   179                           $.nmTop().close();
       
   180                       }
       
   181                   });
       
   182             }
       
   183         }
       
   184     });
       
   185     
       
   186 }
       
   187 
       
   188 function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
       
   189 
       
   190     // These are the functions called when we display a project in an LDT modal window
       
   191     $('.ldt_link',base_node).each(function(i){
       
   192         $(this).attr("target","_iri");
       
   193     });
       
   194     $('.ldt_link',base_node).nyroModal({
       
   195         filters: ['iriIframe'],
       
   196         sizes: {
       
   197             minW: '1025',
       
   198             minH: '665'
       
   199         },
       
   200         showCloseButton: true,
       
   201         closeOnEscape:false,
       
   202         closeOnClick:false,
       
   203         callbacks: {
       
   204             afterShowCont: function(nm) {
       
   205                 nm.store.iframe.width(1025);
       
   206                 nm.store.iframe.height(665);
       
   207             },
       
   208             close: function(nm) {
       
   209                 // We don't do anything here, we hack the callback directly from the close function.
       
   210             },
       
   211             afterClose: function(nm) {
       
   212                 // Can't do that because searchprojectfilterurl is not defined in init_events_base params
       
   213                 searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
       
   214             }
       
   215         }
       
   216     });
       
   217 
       
   218 
       
   219     $('.ldt_link',base_node).each(function(i, e) {
       
   220         nm = $(e).data('nmObj');
       
   221         $(e).data('nmObj', $.extend(true, nm, {
       
   222             close: testAndClose(nm.close)
       
   223         }));
       
   224     });    
       
   225 
       
   226 
       
   227     $('.ldt_link_create',base_node).each(function(i){
       
   228         $(this).attr("target","_iri");
       
   229     });
       
   230     $('.ldt_link_create',base_node).nyroModal({
       
   231          
       
   232         filters: ['iriIframe'],
       
   233         sizes: {
       
   234             minW: '600',
       
   235             minH: '500'
       
   236         },
       
   237         showCloseButton:true,
       
   238         closeOnEscape:false,
       
   239         closeOnClick:false,
       
   240         callbacks: {
       
   241             afterShowCont: function(nm) {
       
   242                 nm.store.iframe.width(600);
       
   243                 nm.store.iframe.height(600);
       
   244                 var iframe = nm.store.iframe;
       
   245                 iframe.load(function(){
       
   246                     var form_status = $(this).contents().find("#project_form_status").val(); 
       
   247                     if(form_status === 'saved' || form_status === 'deleted' ) {
       
   248                         $.nmTop().close();
       
   249                     }
       
   250                     var swfobject = $(this).contents().find("#ldtInitSwf"); 
       
   251                     if (swfobject.length) {
       
   252                         nm['sizes']['initW'] = 1025;
       
   253                         nm['sizes']['initH'] = 665;
       
   254                         nm.resize();
       
   255                         nm.store.iframe.width(1025);
       
   256                         nm.store.iframe.height(665);
       
   257                     }
       
   258                 });
       
   259             },
       
   260             afterClose: function(nm) {
       
   261                 searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
       
   262             }    
       
   263         }        
       
   264     });
       
   265     $('.ldt_link_create',base_node).each(function(i, e) {
       
   266         nm = $(e).data('nmObj');
       
   267         $(e).data('nmObj', $.extend(true, nm, {
       
   268             close: testAndClose(nm.close)
       
   269         }));
       
   270     });
       
   271 
       
   272     
       
   273     $('.publishedproject', base_node).click(function(e) {
       
   274         e.preventDefault();
       
   275         var target = $(e.target);
       
   276         var project_id = target.attr('id').replace('project_','');
       
   277         var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id);
       
   278         $.ajax({
       
   279             url: url,
       
   280             type: 'POST',
       
   281             data: {csrfmiddlewaretoken:global_csrf_token},
       
   282             // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
       
   283             //dataType: 'json',
       
   284             success: function(json, textStatus, XMLHttpRequest) {
       
   285                 if(json.res) {
       
   286                     searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
       
   287                 }
       
   288             }
       
   289         });
       
   290     });
       
   291     
       
   292     $('.unpublishedproject', base_node).click(function(e) {
       
   293         e.preventDefault();
       
   294         var target = $(e.target);
       
   295         var project_id = target.attr('id').replace('project_','');
       
   296         var url = publishprojecturl.replace('__PROJECT_ID__', project_id);
       
   297         $.ajax({
       
   298             url: url,
       
   299             type: 'POST',
       
   300             data: {csrfmiddlewaretoken:global_csrf_token},
       
   301             // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
       
   302             //dataType: 'json',
       
   303             success: function(json, textStatus, XMLHttpRequest) {
       
   304                 if(json.res) {
       
   305                     searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
       
   306                 }
       
   307             }
       
   308         });
       
   309     });
       
   310 
       
   311     $('.projecttitlelink').each(function(i){
       
   312         $(this).attr("target","_blank");
       
   313     });
       
   314     $('.projecttitlelink').nyroModal({
       
   315         filters: ['iframe'],
       
   316         sizes: {
       
   317             minH:680, 
       
   318             minW:600
       
   319         },
       
   320         callbacks: {
       
   321             afterClose: function(nm) {
       
   322                 searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
       
   323             },
       
   324             afterShowCont: function(nm) {
       
   325                 nm.store.iframe.height(680);
       
   326                 nm.store.iframe.width(600);
       
   327                 var iframe = nm.store.iframe;
       
   328                 iframe.load(function(){
       
   329                       var form_status = $(this).contents().find("#project_form_status").val(); 
       
   330                       if(form_status === 'saved' || form_status === 'deleted') {
       
   331                           $.nmTop().close();
       
   332                       }
       
   333                   });
       
   334             }
       
   335         }
       
   336     });
       
   337     
       
   338 }
       
   339 
       
   340 function init_events_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
       
   341     init_events_base(base_node, embed_url);
       
   342     init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl);
       
   343 }
       
   344 
       
   345 function init_events_all(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
       
   346     init_events_contents(base_node, embed_url, searchcontentfilterurl);
       
   347     init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl);
       
   348 }
       
   349 
       
   350 function searchFieldInit(input_list_init) {
       
   351 
       
   352     $(".searchfieldinputbase").keydown(function (e) {
       
   353          if(e.which === 27) {
       
   354               $(e.target).blur();
       
   355               $(e.target).next(".searchajaxloader").hide();
       
   356          }
       
   357     });        
       
   358      
       
   359     $('.searchfieldinput').each(function(i) {
       
   360          var sbox = $(this);
       
   361          if(sbox.val() !== '') {
       
   362              sbox.attr('defaultText', sbox.val());
       
   363          }
       
   364     
       
   365          sbox.focus(function() {
       
   366              box = $(this);
       
   367              if(box.val() === box.attr('defaultText')) {
       
   368                  box.val('');
       
   369                  box.toggleClass("searchfieldinput");
       
   370              }
       
   371          });
       
   372     
       
   373          sbox.blur(function() {
       
   374              var box = $(this);
       
   375              if(box.val() === '' && box.attr('defaultText')) {
       
   376                  box.val(box.attr('defaultText'));
       
   377                  box.toggleClass("searchfieldinput");
       
   378              }
       
   379          });
       
   380                   
       
   381     });
       
   382 
       
   383     $.each(input_list_init, function(index, value) {
       
   384         $(value['input_selector']).keyup(function (e) {
       
   385             searchCallback(e.target, value['container_selector'], value['url']);
       
   386         });
       
   387     });
       
   388     
       
   389     $('.searchclear').click(function(e) {
       
   390         var box = $(e.target).parent().find("input");
       
   391         box.val(box.attr('defaultText'));
       
   392         box.addClass("searchfieldinput");
       
   393         box.blur();
       
   394         box.keyup();
       
   395     });
       
   396     
       
   397     $('.searchclear').each(function(i) {
       
   398         $(this).hide();
       
   399     });
       
   400     
       
   401 }
       
   402 
       
   403 //
       
   404 // Functions used in the create content view.
       
   405 //
       
   406 function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label) {
       
   407 	
       
   408     var upload_from_local_done = false;
       
   409     
       
   410     $("#close_button").click(function (e) {
       
   411         e.preventDefault();
       
   412         parent.$.nmTop().close();
       
   413     });
       
   414     $("#submit_button_write").click(function(e) {
       
   415         $(".submitcontent-loader-content").show();
       
   416     });
       
   417     $(".media_fields").hide();
       
   418     $("#media_field_"+$("#id_content-media_input_type").val()).show();
       
   419     $("#id_content-media_input_type").change(function(e) {
       
   420         $(".media_fields").hide();
       
   421         $("#media_field_"+$(e.target).val()).show();
       
   422     });
       
   423     // The textinput's id for external url is id_media-src
       
   424     $('#id_media-src').bind('textchange', function(e) { testUrlValue(e); });
       
   425     
       
   426     // We disable the default submit
       
   427     $('#my_form').submit(function() {
       
   428         if($('#id_content-media_input_type').val()=="upload" && upload_from_local_done==false){
       
   429             //alert("1. " + $('#id_content-media_input_type').val() + ", upload_done = " + upload_from_local_done);
       
   430             startLocalUpload();
       
   431             return false;
       
   432         }
       
   433         else{
       
   434             //alert("2. " + $('#id_content-media_input_type').val());
       
   435             return true;
       
   436         }
       
   437     });
       
   438     
       
   439     $("#upload_progress_bar").css({ width:"90%", height:"10" });
       
   440     
       
   441     $('#media_fields_div').height(80);
       
   442     
       
   443     // We init the swfupload object
       
   444     swfupload = new SWFUpload({
       
   445         debug: false,
       
   446         
       
   447         upload_url: url_upload,
       
   448         flash_url: media_prefix+"swf/swfupload.swf",
       
   449         
       
   450         post_params: post_added_params,
       
   451         
       
   452         button_placeholder_id: "upload_btn",
       
   453         button_width: "60",
       
   454         button_height: "16",
       
   455         button_cursor: SWFUpload.CURSOR.HAND,
       
   456         button_text : '<span class="btnText">' + btn_label + '</span>',
       
   457         button_text_style : ".btnText { font-size: 12; font-family: Arial; }",
       
   458         
       
   459         file_types : "*.flv;*.f4v;*.mp4;*.mov;*.mp3",
       
   460         file_types_description : "Media Files (flv, f4v, mov H264, mp4, mp3)",
       
   461         file_upload_limit : "1",
       
   462         file_queue_limit : "1",
       
   463         
       
   464         upload_progress_handler : uploadProgress,
       
   465         upload_error_handler : uploadError,
       
   466         //upload_success_handler : uploadSuccess,
       
   467         upload_success_handler : function() {
       
   468                 try {
       
   469                     if($('#upload_progress_info').children().size()>0){
       
   470                         $('#progress_info').remove();
       
   471                     }
       
   472                     $('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
       
   473                     upload_from_local_done = true;
       
   474                     // Now that the file is uploaded, we submit the form
       
   475                     $('#my_form').submit();
       
   476                 }
       
   477                 catch (ex) {
       
   478                     //this.debug(ex);
       
   479                 }
       
   480             },
       
   481         
       
   482         file_queued_handler : displayUploadPath,
       
   483         //file_dialog_complete_handler: function() { this.startUpload(); },
       
   484         //upload_complete_handler: function() { this.startUpload(); },
       
   485     });
       
   486 }
       
   487 function displayUploadPath(file) {
       
   488     try {
       
   489         $('#id_media-local_file_name').val(file.name);
       
   490     }
       
   491     catch (ex) {
       
   492         //this.debug(ex);
       
   493     }
       
   494 }
       
   495 function startLocalUpload(){
       
   496     swfupload.startUpload();
       
   497 }
       
   498 function uploadProgress(file, bytesLoaded, bytesTotal) {
       
   499     try {
       
   500         var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
       
   501         $("#upload_progress_bar").progressbar({ value: percent });
       
   502     }
       
   503     catch (ex) {
       
   504         //this.debug(ex);
       
   505     }
       
   506 }
       
   507 function uploadSuccess(success_label) {
       
   508     try {
       
   509         if($('#upload_progress_info').children().size()>0){
       
   510             $('#progress_info').remove();
       
   511         }
       
   512         $('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
       
   513         upload_from_local_done = true;
       
   514         // Now that the file is uploaded, we submit the form
       
   515         $('#my_form').submit();
       
   516     }
       
   517     catch (ex) {
       
   518         //this.debug(ex);
       
   519     }
       
   520 }
       
   521 function uploadError(file, errorCode, message) {
       
   522     try {
       
   523         if($('#upload_progress_info').children().size()>0){
       
   524             $('#progress_info').remove();
       
   525         }
       
   526         switch (errorCode) {
       
   527         case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
       
   528             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: HTTP Error, File name: " + file.name + ", Message: " + message + '</p>');
       
   529             break;
       
   530         case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
       
   531             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
       
   532             break;
       
   533         case SWFUpload.UPLOAD_ERROR.IO_ERROR:
       
   534             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: IO Error, File name: " + file.name + ", Message: " + message + '</p>');
       
   535             break;
       
   536         case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
       
   537             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: Security Error, File name: " + file.name + ", Message: " + message + '</p>');
       
   538             break;
       
   539         case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
       
   540             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
       
   541             break;
       
   542         case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
       
   543             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
       
   544             break;
       
   545         case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
       
   546             $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: FILE_CANCELLED" + '</p>');
       
   547             break;
       
   548         case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
       
   549             $('#upload_progress_info').append('<p id="progress_info">' + "STOPPED" + '</p>');
       
   550             break;
       
   551         default:
       
   552             $('#upload_progress_info').append('<p id="progress_info">' + "unhandled error: File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
       
   553             break;
       
   554         }
       
   555     } catch (ex) {
       
   556         //this.debug(ex);
       
   557     }
       
   558 }
       
   559 
       
   560 // Test the value of the URL from the form to load a picture in case it is a youtube video
       
   561 function testUrlValue(e){
       
   562     // First, we remove the current thumbnail if there is one.
       
   563     if($('#media_field_create').children().size()>2){
       
   564         $('#external_thumbnail').remove();
       
   565         $('#media_fields_div').height(80);
       
   566     }
       
   567     // If the pasted text is a youtube url, we get the default thumbnail of the video and display it.
       
   568     url = $('#id_media-src').val();
       
   569     if(url.match("youtube") && url.match("[\\?&]v=([^&#]*)")){
       
   570         results = url.match("[\\?&]v=([^&#]*)");
       
   571         vid = ( results === null ) ? url : results[1].substring(0,11);
       
   572         if(vid.length===11){
       
   573             //$('#id_content-description').val($('#media_field_create') + '<img src="http://img.youtube.com/vi/'+vid+'/default.jpg" alt="Youtube Thumbnail"/>');
       
   574             $('#media_field_create').append('<img id="external_thumbnail" src="http://img.youtube.com/vi/'+vid+'/default.jpg" alt="Youtube Thumbnail"/>');
       
   575             $('#media_fields_div').height(150);
       
   576         }
       
   577     }
       
   578 }