src/ldt/ldt/static/ldt/js/projectscontents.js
author rougeronj
Thu, 14 Feb 2013 16:34:33 +0100
changeset 1110 7ef5c69b73b3
parent 1091 023b97a11396
child 1112 3b88847289d1
permissions -rw-r--r--
rollback chunked_upload changes


function init_events_base(base_node, embed_url) {

    $('.imageline',base_node).each(function(i) {
        var tr = $(this);
        tr.mouseover(function() {
            $('.cellimgdiv',this).css('visibility', 'visible');
        }); 
        tr.mouseout(function() {
            $('.cellimgdiv',this).css('visibility', 'hidden');
        });
    });
    
    $('.cellimgdiv img, .qtiplink, .grouplink, .publishedproject, .unpublishedproject').qtip({
    	style: {
    		classes: 'ui-tooltip-dark ui-tooltip-rounded'
    	},
    	position: {
    		my: 'top left',
    		at: 'bottom left',
    	}
    });
    
    $('.infostooltip').each( function () {
        var desc = $(this).attr('data-desc');
        if (desc == 'None') {
            desc = '';
        }
        $(this).qtip({ 
            content : {
                text: '<b>' + $(this).attr('data-title') + '</b><br />' + desc
            },
        	style: {
        		classes: 'ui-tooltip-dark ui-tooltip-rounded qtipldt'
        	},
        	border: {
        		'width': 0,
        		'color': '#505050'
        	},
        	position: {
        		my: 'top left',
        		at: 'bottom left'
        	}
        });
    });
}

function testAndClose(close_fn) {
	
	return function(force) {
	    // Here we ask LDT if the current work is modified and if the user want to save it.
	    var ldtSwf =  $('#ldtInitSwf',$.nmTop().store.iframe.contents()).get(0);
	    // In the ldt_link_create case, the modal page can be the form, or the ldt swf. So we have to test.
	    if (!force && ldtSwf && ldtSwf.name==="ldtInitSwf" && ldtSwf.isModified()==="true") {
	        ldtSwf.askSave();
	    }
	    else {
            close_fn.apply(this);
	    }
	};
}

function testCreateAndClose(nm, close_fn) {
	
	return function(force) {
	    // We get the frames vars
        f = window.frames[0];
        form_status =  $('#content_form_status',$.nmTop().store.iframe.contents()).val();
	    // If form_status is "saved", we don't have to test anything, the form was was normally submitted.
        // If was status is "empty" AND an upload from local was done
        if(form_status!="saved" && f.upload_from_local_done==true && f.remove_temp_file_url){
            // ERASE FILE
            //alert("testCreateAndClose : " + "f = " + f + ", status = " + form_status + ", u = " + f.upload_from_local_done + ", s = " + f.submit_asked + ", url = " + f.remove_temp_file_url);
            $.ajax({
                type: "GET",
                url: f.remove_temp_file_url,
                data: "filename="+ $('#id_media-local_file_name',$.nmTop().store.iframe.contents()).val(),
                cache: false,
                success: function(data, status, request){
                    alert("remove success");
                }
            });
        }
        close_fn.apply(this);
	};
}

function searchCallback(target, container_selector, url, timeout, num_page, tag_filter) {

    timeout = typeof(timeout) !== 'undefined' ? timeout : 0;
    target = $(target);
    
    // remove all qtip
    $(".qtip").remove();
    
    //if(target.realVal().length > 0) {
    if(target.val().length > 0) {
        target.nextAll(".searchclear").show();
    }
    
    target.next(".searchajaxloader").show();
    target.nextAll(".searchclear").hide();
    //var filterVal = "_" + encodeURIComponent(target.realVal());
    var filterVal = "_" + encodeURIComponent(target.val());
    url = url.replace('__FILTER__',filterVal);
    url = url.replace('__ID_GROUP__',$('#id_group').val());
    var data_obj = null;
    if(num_page || tag_filter){
    	data_obj = {};
    	if(num_page){
    		data_obj["num_page"] = num_page;
    	}
    	if(tag_filter){
    		data_obj["tag_filter"] = tag_filter;
    	}
    }
    if(data_obj!=null){
        $.ajax({
            url: url,
            cache: false,
            type: 'GET',
            data: data_obj,
            success: function(data, status, request) {
            	$(container_selector).html(data);
                target.next(".searchajaxloader").hide();
                //if(target.realVal().length > 0) {
                if(target.val().length > 0) {
                    target.nextAll(".searchclear").show();
                }
                init_events($(container_selector));
                target.removeAttr('timer');
            },
    		error: function(jqXHR, textStatus, errorThrown) {
    			resp = $.parseJSON(jqXHR.responseText);
    			alert(resp.message);
    		}
        });
    }
    else{
        $.ajax({
            url: url,
            cache: false,
            success: function(data, status, request) {
            	$(container_selector).html(data);
                target.next(".searchajaxloader").hide();
                //if(target.realVal().length > 0) {
                if(target.val().length > 0) {
                    target.nextAll(".searchclear").show();
                }
                init_events($(container_selector));
                target.removeAttr('timer');
            }
        });
    }
}

function init_events_contents(base_node, embed_url, content_filter_url, project_filter_url) {
    
    init_events_base(base_node, embed_url);
    
    // Content pagination in workspace home
    $('.contents_page',base_node).click(function(e){
    	num_page = $(this).attr('alt');
    	if(num_page=="prev"){
    		num_page = parseInt($('#current_content_page').val()) - 1;
    	}
    	else if(num_page=="next"){
    		num_page = parseInt($('#current_content_page').val()) + 1;
    	}
    	searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,num_page,$('#current_content_tag').val());
	});
    
    // Content pagination in workspace home with tag/category filter
    $("#content_tags_cloud",base_node).toggle(false);
    $("#content_tags",base_node).click(function(){
        $("#content_tags_cloud").slideToggle("fast");
    });
    $('.contents_tag',base_node).click(function(e){
    	$('#searchcontentsinput').val("");
    	$('#current_content_tag').val($(this).attr('alt'));
    	searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,0,$('#current_content_tag').val());
	});
    $("#no_content_tag",base_node).click(function(){
    	searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0,0);
    });
    
}

function init_modal_window (class_name, windowW, windowH, frameW, frameH, base_node, searchprojectfilterurl) {
    $(class_name,base_node).each(function(i){
        $(this).attr("target","_iri");
    });
    
    $(class_name,base_node).nyroModal({
        filters: ['iriIframe'],
        sizes: {
            minW: '' + windowW,
            minH: '' + windowH
        },
        showCloseButton: true,
        closeOnEscape:false,
        closeOnClick:false,
        callbacks: {
            afterShowCont: function(nm) {
                var iframe = nm.store.iframe;
                iframe.load(function(){
                    var form_status = $(this).contents().find("#project_form_status").val(); 
                    if(form_status === 'saved' || form_status === 'deleted' ) {
                        $.nmTop().close();
                    }
                        
                });  
                
                nm.store.iframe.width(frameW);
                nm.store.iframe.height(frameH);
            },
            afterClose: function(nm) {
                // Can't do that because searchprojectfilterurl is not defined in init_events_base params
            	num_page = parseInt($('#current_project_page').val());
            	searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page);
            }
            
        }
    });
    
    $(class_name,base_node).each(function(i, e) {
        nm = $(e).data('nmObj');
        $(e).data('nmObj', $.extend(true, nm, {
            close: testAndClose(nm.close)
        }));
    });
}

function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {

    init_modal_window ('.ldt_link_open_ldt', 1035, 670, 1025, 660, base_node, searchprojectfilterurl);
    init_modal_window ('.ldt_link_create_project', 760, 400, 750, 390, base_node, searchprojectfilterurl);
    init_modal_window ('.ldt_link_copy_project', 500, 150, 500, 150, base_node, searchprojectfilterurl);
    
    // Project pagination in workspace home
    $('.projects_page').click(function(e){
    	num_page = $(this).attr('alt');
    	if(num_page=="prev"){
    		num_page = parseInt($('#current_project_page').val()) - 1;
    	}
    	else if(num_page=="next"){
    		num_page = parseInt($('#current_project_page').val()) + 1;
    	}
    	searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page);
	});
    
    $('.publishedproject', base_node).click(function(e) {
        e.preventDefault();
        display_loading_icon($(this));
        var target = $(e.target);
        var project_id = target.attr('id').replace('project_','');
        var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id);
        num_page = parseInt($('#current_project_page').val());
        $.ajax({
            url: url,
            type: 'POST',
            data: {csrfmiddlewaretoken:global_csrf_token},
            // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
            //dataType: 'json',
            success: function(json, textStatus, XMLHttpRequest) {
                if(json.res) {
                	searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page);
                }
            }
        });
    });
    
    $('.unpublishedproject', base_node).click(function(e) {
        e.preventDefault();
        display_loading_icon($(this));
        var target = $(e.target);
        var project_id = target.attr('id').replace('project_','');
        var url = publishprojecturl.replace('__PROJECT_ID__', project_id);
        num_page = parseInt($('#current_project_page').val());
        $.ajax({
            url: url,
            type: 'POST',
            data: {csrfmiddlewaretoken:global_csrf_token},
            // bug with jquery >= 1.5, "json" adds a callback so we don't specify dataType
            //dataType: 'json',
            success: function(json, textStatus, XMLHttpRequest) {
                if(json.res) {
                    searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0, num_page);
                }
            }
        });
    });

    $('.projecttitlelink').each(function(i){
        $(this).attr("target","_blank");
    });    
    
    $('.projecttitlelink').nyroModal({
        filters: ['iframe'],
        sizes: {
            minW: '750',
            minH: '400'
        },
        closeOnClick:false,
        callbacks: {
            afterClose: function(nm) {
                searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
            },
            afterShowCont: function(nm) {
                var iframe = nm.store.iframe;
                iframe.load(function(){                    
                    var form_status = $(this).contents().find("#project_form_status").val(); 
                    if(form_status === 'saved' || form_status === 'deleted') {
                          $.nmTop().close();
                    }
                  });

                nm.store.iframe.width(740);
                nm.store.iframe.height(390);
            }
        }
    });
    
}

function display_loading_icon (project) {
	project.attr('src', project_load_src);
}

function init_events_groups (base_node, embed_url, groupfilterurl) {
		
    $('.create_group',base_node).each(function(i){
        $(this).attr("target","_iri");
    });
    
    $('.create_group',base_node).each(function(i, e) {
        nm = $(e).data('nmObj');
        $(e).data('nmObj', $.extend(true, nm, {
            close: testAndClose(nm.close)
        }));
    });
    
}

function init_events_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
    init_events_base(base_node, embed_url);
    init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl);
}

function init_events_all(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) {
    init_events_contents(base_node, embed_url, searchcontentfilterurl, searchprojectfilterurl);
    init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl);
}


function searchFieldInit(input_list_init) {
    $(".searchfieldinputbase").keydown(function (e) {
         if(e.which === 27) {
              $(e.target).blur();
              $(e.target).next(".searchajaxloader").hide();
         }
    });

    $.each(input_list_init, function(index, value) {
        $(value['input_selector']).keyup(function (e) {
        	// Validate search only if key is enter or if the call does not come from keyboard
        	if(e.which===13 || e.which==undefined){
        		searchCallback(e.target, value['container_selector'], value['url']);
        	}
        });
    });
    
    $('.searchclear').click(function(e) {
        var box = $(e.target).parent().find("input");
        box.val("");
        box.addClass("searchfieldinput");
        box.blur();
        box.keyup();
    });
    
    $('.searchclear').each(function(i) {
        $(this).hide();
    });
    
}


function resize_modal_window (element, createcontent) {
    var nm = parent.$.nmTop();
    var iframe = $("iframe", window.parent.document);
    if ( $('#init_ldt_view', element).size() > 0) { // if contains ldt lpayer
    	var h = 660;
    	var w = 1025;
    } else {
    	var h = $(element).innerHeight() + 10;
    	var w = $(element).innerWidth() + 10;
	}
        
    nm.sizes.minH = h + 10;
    nm.sizes.minW = w;
    iframe.height(h);
    iframe.width(w);
    
    if ($.browser.mozilla && createcontent) {
    	$(".nyroModalCont", parent.window.document).height(h+10);
    } else {
    	nm.resize(true);
    }
}

//
//Functions used in the create content view.
//
function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label, wait_label, cancel_label, remove_url, ask_dur_url) {
	
    window.upload_from_local_done = false;
    window.submit_asked = false;
    window.remove_temp_file_url = remove_url;
    window.ask_duration_url = ask_dur_url;
    
    $("#close_button").click(function (e) {
        e.preventDefault();
        parent.$.nmTop().close();
    });    
    $("#submit_button_write").click(function(e) {
        $(".submitcontent-loader-content").show();
        resize_modal_window($("#add_content"), true);
    });
    $(".media_fields").hide();
    $("#media_field_"+$("#id_content-media_input_type").val()).show();
    $("#id_content-media_input_type").change(function(e) {
        $(".media_fields").hide();
        $("#media_field_"+$(e.target).val()).show();
    });
    // The textinput's id for external url is id_media-src
    $('#id_media-src').bind('textchange', function(e) { testUrlValue(e); });
    
    // We disable the default submit
    $('#my_form').bind('submit', function() {
        window.submit_asked = true;
        if($('#id_content-media_input_type').val()=="upload"){
            if(window.upload_from_local_done==false){
                // The form has sent but the uploading has not ended.
                if($('#upload_progress_info').children().size()>0){
                    $('#progress_info').remove();
                }
                $('#upload_progress_info').append('<p id="progress_info"><font color="red"><strong>' + wait_label + '.</strong></font><br/><a href="javascript:cancelSwfUpload()">' + cancel_label + '.</a></p>');
                return false;
            }
            else{
                return true;
            }
        }
        else{
            //alert("2. " + $('#id_content-media_input_type').val());
            return true;
        }
    });
    
    $("#upload_progress_bar").css({ width:"90%", height:"10" });
    
    $('#media_fields_div').height(80);
    
    // We init the swfupload object
    swfupload = new SWFUpload({
        debug: false,
        
        upload_url: url_upload,
        flash_url: media_prefix+"swf/swfupload.swf",
        
        post_params: post_added_params,
        
        button_placeholder_id: "upload_btn",
        button_width: "60",
        button_height: "16",
        button_cursor: SWFUpload.CURSOR.HAND,
        button_text : '<span class="btnText">' + btn_label + '</span>',
        button_text_style : ".btnText { font-size: 12; font-family: Arial; }",
        
        file_types : "*.flv;*.f4v;*.mp4;*.mov;*.mp3",
        file_types_description : "Media Files (flv, f4v, mov H264, mp4, mp3)",
        file_upload_limit : "1",
        file_queue_limit : "1",
        
        upload_error_handler : uploadError,
        upload_start_handler : function(file) {
            try {
                if($('#upload_progress_info').children().size()>0){
                    $('#progress_info').remove();
                }
                $('#upload_progress_info').append('<p id="progress_info"><a href="javascript:cancelSwfUpload()">' + cancel_label + '.</a></p>');
            }
            catch (ex) {
                //this.debug(ex);
            }
        },
        upload_progress_handler : uploadProgress,
        upload_success_handler : function() {
                try {
                    if($('#upload_progress_info').children().size()>0){
                        $('#progress_info').remove();
                    }
                    $('#upload_progress_info').append('<p id="progress_info">' + success_label + '.</p>');
                    $("#upload_progress_bar > div").css({ 'background': '#90ffa8' });
                    window.upload_from_local_done = true;
                    // Now that the file is uploaded, we submit the form if asked
                    if(window.submit_asked==true){
                        $('#my_form').submit();
                    }
                    else{
                        // We ask the uploaded media's duration
                        if(window.ask_duration_url){
                            $.ajax({
                                type: "GET",
                                url: window.ask_duration_url,
                                data: "filename="+ $('#id_media-local_file_name').val(),
                                cache: false,
                                success: function(data, status, request){
                                    if(data && data!=""){
                                        $('#id_content-duration').val(data);
                                    }
                                }
                            });
                        }
                    }
                }
                catch (ex) {
                    //this.debug(ex);
                }
            },
        file_queued_handler : displayUploadPath,
        file_dialog_complete_handler: function() { 
            window.submit_asked = false;
            this.startUpload();
        }
        //upload_complete_handler: function() { this.startUpload(); },
    });
}
function displayUploadPath(file) {
    try {
        $('#id_media-local_file_name').val(file.name);
    }
    catch (ex) {
        //this.debug(ex);
    }
}
function startLocalUpload(){
    swfupload.startUpload();
}
function uploadProgress(file, bytesLoaded, bytesTotal) {
    try {
        var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
        $("#upload_progress_bar").progressbar({ value: percent });
    }
    catch (ex) {
        //this.debug(ex);
    }
}
function cancelSwfUpload(){
    swfupload.cancelUpload();
    if($('#media_field_upload').has($('#cancelupload')).length==0){
        $('#cancelupload').remove();
    }
}
function uploadError(file, errorCode, message) {
    try {
        if($('#upload_progress_info').children().size()>0){
            $('#progress_info').remove();
        }
        switch (errorCode) {
        case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: HTTP Error, File name: " + file.name + ", Message: " + message + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.IO_ERROR:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: IO Error, File name: " + file.name + ", Message: " + message + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: Security Error, File name: " + file.name + ", Message: " + message + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
            $('#upload_progress_info').append('<p id="progress_info">' + "Error Code: FILE_CANCELLED" + '</p>');
            break;
        case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
            $('#upload_progress_info').append('<p id="progress_info">' + "STOPPED" + '</p>');
            break;
        default:
            $('#upload_progress_info').append('<p id="progress_info">' + "unhandled error: File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '</p>');
            break;
        }
    } catch (ex) {
        //this.debug(ex);
    }
}

// Test the value of the URL from the form to load a picture in case it is a youtube video
function testUrlValue(e){
    // First, we remove the current thumbnail if there is one.
    if($('#media_field_create').children().size()>2){
        $('#external_thumbnail').remove();
        $('#media_fields_div').height(80);
    }
    // If the pasted text is a youtube url, we get the default thumbnail of the video and display it.
    url = $('#id_media-src').val();
    if(url.match("youtube") && url.match("[\\?&]v=([^&#]*)")){
        results = url.match("[\\?&]v=([^&#]*)");
        vid = ( results === null ) ? url : results[1].substring(0,11);
        if(vid.length===11){
            var jsonp_url = 'https://gdata.youtube.com/feeds/api/videos/'+vid+'?v=2';
            $.ajax({
                type: "GET",
                url: jsonp_url,
                dataType: "jsonp",
                cache : false,
                data : {"alt" : "json-in-script"},
                jsonpCallback : 'dude',
                jsonp : 'callback',
                success: function(data, status, request) {
                    $('#id_content-duration').val(data.entry.media$group.media$content[0].duration*1000);
                    if(($('#id_content-title').val())==""){
                         $('#id_content-title').val(data.entry.title.$t);
                    }
                    $('#media_field_create').append('<img id="external_thumbnail" src="'+data.entry.media$group.media$thumbnail[0].url+'" alt="Youtube Thumbnail"/>');
                    $('#media_fields_div').height(150);  
                    $('#id_url_image').val(data.entry.media$group.media$thumbnail[0].url)
                }
            });
        }
    }
    else if(url.match("vimeo")){
        var match = /vimeo.*\/(\d+)/i.exec( url );
        if (match){
            vid=match[1];
            var jsonp_url="http://vimeo.com/api/v2/video/"+vid+".json";
            $.ajax({
                type: "GET",
                url: jsonp_url,
                dataType: "jsonp",
                cache : false,
                jsonpCallback : 'dude',
                jsonp : 'callback',
                success: function(data, status, request) {
                    $('#id_content-duration').val(data[0].duration*1000);
                    if(($('#id_content-title').val())==""){
                         $('#id_content-title').val(data[0].title);
                    }
                    $('#media_field_create').append('<img id="external_thumbnail" src="'+data[0].thumbnail_small+'" />');
                    $('#media_fields_div').height(150);
                    $('#id_url_image').val(data[0].thumbnail_small);
                }
            });
        }
    }
    else if(url.match("dailymotion")){
        id = url.substr(url.search("video/")+6);
        tableau=id.split("_");
        vid=tableau[0];
        jsonp_url= "https://api.dailymotion.com/video/"+vid;
        $.ajax({
            type: "GET",
            data : {"fields" : "id,duration,title,thumbnail_medium_url"},
            url: jsonp_url,
            dataType: "jsonp",
            cache : false,
            jsonp : 'callback',
            jsonpCallback : 'dude',
            success: function(data, status, request) {
                $('#id_content-duration').val(data.duration*1000);
                if(($('#id_content-title').val())==""){
                     $('#id_content-title').val(data.title);
                }
                $('#media_field_create').append('<img id="external_thumbnail" src="'+data.thumbnail_medium_url+'" />');
                $('#media_fields_div').height(190);
                $('#id_url_image').val(data.thumbnail_medium_url)
            }
        });
    }
}

function check_uncheck_all(name) {
	var check_all = gettext("check all");
	var uncheck_all = gettext("uncheck all");
	var id_name = "#global_checkbox_" + name;
	
	$(id_name).attr('title', uncheck_all);
	
	$(id_name).change(function () {
		var checkbox_names = ".checkbox_" + name;
		if ($(id_name).is(":checked")) {
			$(checkbox_names).prop('checked', true);
			$(id_name).attr('title', uncheck_all );
		} else {
			$(checkbox_names).prop('checked', false);
			$(id_name).attr('title', check_all);
		}
		$(checkbox_names).trigger("change");
	});		
}