diff -r 165d249eecc9 -r 47e0f0eef1cc web/static/ldt/js/projectscontents.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/static/ldt/js/projectscontents.js Sun May 01 03:22:44 2011 +0200 @@ -0,0 +1,578 @@ + +$.fn.realVal = function() { + var obj = $(this[0]); + if(obj.val) { + if(obj.val() === obj.attr('defaultText')) { + return ''; + } + else { + return obj.val(); + } + } + else { + return null; + } +}; + + +function init_events_base(base_node, embed_url) { + + $('.ldt_link_embed',base_node).click(function(e) { + e.preventDefault(); + var link = $(e.target); + var json_url = link.attr("href"); + var player_id = link.attr("id"); + var ldt_id = player_id.substring(15); + $('', { + href: embed_url+'?json_url='+escape(json_url)+'&player_id='+escape(player_id)+'&ldt_id='+escape(ldt_id), + target: "_blank" + }).nyroModal({ + filters: ['iframe'], + sizes: { + minW: '750', + minH: '662' + }, + callbacks: { + afterShowCont: function(nm) { + nm.store.iframe.height(662); + nm.store.iframe.width(750); + } + } + }).trigger('nyroModal'); + return false; + }); + + + $('.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').qtip({ + style: { + 'name': 'dark', + 'filter':'alpha(opacity=70)', + '-moz-opacity':'0.7', + '-khtml-opacity': '0.7', + 'opacity': '0.7', + 'border': { + 'width' : '0', + 'color': '#505050' + }, + 'tip': true + } + }); +} + +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 searchCallback(target, container_selector, url, timeout) { + + timeout = typeof(timeout) !== 'undefined' ? timeout : 0; + target = $(target); + + // remove all qtip + $(".qtip").remove(); + + if(target.realVal().length > 0) { + target.nextAll(".searchclear").show(); + } + + if(target.attr('timer')) { + clearTimeout(target.attr('timer')); + } + + target.attr( + 'timer', + setTimeout(function() { + target.next(".searchajaxloader").show(); + target.nextAll(".searchclear").hide(); + var filterVal = "_" + escape(target.realVal()); + url = url.replace('__FILTER__',filterVal); + $.ajax({ + url: url, + cache: false, + success: function(data, status, request) { + $(container_selector).html(data); + target.next(".searchajaxloader").hide(); + if(target.realVal().length > 0) { + target.nextAll(".searchclear").show(); + } + init_events($(container_selector)); + target.removeAttr('timer'); + } + }); + }, + 300) + ); +} + + +function init_events_contents(base_node, embed_url, content_filter_url) { + + init_events_base(base_node, embed_url); + + $('.content_link_create').each(function(i){ + $(this).attr("target","_blank"); + }); + $('.content_link_create').nyroModal({ + filters: ['iframe'], + sizes: { + minW: 770, + minH: 550 + }, + callbacks: { + afterClose: function(nm) { + searchCallback($('#searchprojectsinput'), "#contentslistcontainer", content_filter_url); + }, + afterShowCont: function(nm) { + nm.store.iframe.width(770); + nm.store.iframe.height(550); + nm.store.iframe.load(function() { + var form_status = $(this).contents().find("#content_form_status").val(); + if(form_status === 'saved' || form_status === 'deleted' ) { + $.nmTop().close(); + } + }); + } + } + }); + + $('.contenttitlelink').each(function(i){ + $(this).attr("target","_blank"); + }); + $('.contenttitlelink').nyroModal({ + filters: ['iframe'], + sizes: { + minW: 770, + minH: 550 + }, + callbacks: { + afterClose: function(nm) { + searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url,0); + }, + afterShowCont: function(nm) { + nm.store.iframe.width(770); + nm.store.iframe.height(550); + nm.store.iframe.load(function() { + var form_status = $(this).contents().find("#content_form_status").val(); + if(form_status === 'saved' || form_status === 'deleted') { + $.nmTop().close(); + } + }); + } + } + }); + +} + +function init_events_base_projects(base_node, embed_url, searchprojectfilterurl, publishprojecturl, unpublishprojecturl) { + + // These are the functions called when we display a project in an LDT modal window + $('.ldt_link',base_node).each(function(i){ + $(this).attr("target","_iri"); + }); + $('.ldt_link',base_node).nyroModal({ + filters: ['iriIframe'], + sizes: { + minW: '1025', + minH: '665' + }, + showCloseButton: true, + closeOnEscape:false, + closeOnClick:false, + callbacks: { + afterShowCont: function(nm) { + nm.store.iframe.width(1025); + nm.store.iframe.height(665); + }, + close: function(nm) { + // We don't do anything here, we hack the callback directly from the close function. + }, + afterClose: function(nm) { + // Can't do that because searchprojectfilterurl is not defined in init_events_base params + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); + } + } + }); + + + $('.ldt_link',base_node).each(function(i, e) { + nm = $(e).data('nmObj'); + $(e).data('nmObj', $.extend(true, nm, { + close: testAndClose(nm.close) + })); + }); + + + $('.ldt_link_create',base_node).each(function(i){ + $(this).attr("target","_iri"); + }); + $('.ldt_link_create',base_node).nyroModal({ + + filters: ['iriIframe'], + sizes: { + minW: '600', + minH: '500' + }, + showCloseButton:true, + closeOnEscape:false, + closeOnClick:false, + callbacks: { + afterShowCont: function(nm) { + nm.store.iframe.width(600); + nm.store.iframe.height(600); + 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(); + } + var swfobject = $(this).contents().find("#ldtInitSwf"); + if (swfobject.length) { + nm['sizes']['initW'] = 1025; + nm['sizes']['initH'] = 665; + nm.resize(); + nm.store.iframe.width(1025); + nm.store.iframe.height(665); + } + }); + }, + afterClose: function(nm) { + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); + } + } + }); + $('.ldt_link_create',base_node).each(function(i, e) { + nm = $(e).data('nmObj'); + $(e).data('nmObj', $.extend(true, nm, { + close: testAndClose(nm.close) + })); + }); + + + $('.publishedproject', base_node).click(function(e) { + e.preventDefault(); + var target = $(e.target); + var project_id = target.attr('id').replace('project_',''); + var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id); + $.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); + } + } + }); + }); + + $('.unpublishedproject', base_node).click(function(e) { + e.preventDefault(); + var target = $(e.target); + var project_id = target.attr('id').replace('project_',''); + var url = publishprojecturl.replace('__PROJECT_ID__', project_id); + $.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); + } + } + }); + }); + + $('.projecttitlelink').each(function(i){ + $(this).attr("target","_blank"); + }); + $('.projecttitlelink').nyroModal({ + filters: ['iframe'], + sizes: { + minH:680, + minW:600 + }, + callbacks: { + afterClose: function(nm) { + searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0); + }, + afterShowCont: function(nm) { + nm.store.iframe.height(680); + nm.store.iframe.width(600); + 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(); + } + }); + } + } + }); + +} + +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); + 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(); + } + }); + + $('.searchfieldinput').each(function(i) { + var sbox = $(this); + if(sbox.val() !== '') { + sbox.attr('defaultText', sbox.val()); + } + + sbox.focus(function() { + box = $(this); + if(box.val() === box.attr('defaultText')) { + box.val(''); + box.toggleClass("searchfieldinput"); + } + }); + + sbox.blur(function() { + var box = $(this); + if(box.val() === '' && box.attr('defaultText')) { + box.val(box.attr('defaultText')); + box.toggleClass("searchfieldinput"); + } + }); + + }); + + $.each(input_list_init, function(index, value) { + $(value['input_selector']).keyup(function (e) { + searchCallback(e.target, value['container_selector'], value['url']); + }); + }); + + $('.searchclear').click(function(e) { + var box = $(e.target).parent().find("input"); + box.val(box.attr('defaultText')); + box.addClass("searchfieldinput"); + box.blur(); + box.keyup(); + }); + + $('.searchclear').each(function(i) { + $(this).hide(); + }); + +} + +// +// Functions used in the create content view. +// +function onCreateContentReady(url_upload, media_prefix, post_added_params, btn_label, success_label) { + + var upload_from_local_done = false; + + $("#close_button").click(function (e) { + e.preventDefault(); + parent.$.nmTop().close(); + }); + $("#submit_button_write").click(function(e) { + $(".submitcontent-loader-content").show(); + }); + $(".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').submit(function() { + if($('#id_content-media_input_type').val()=="upload" && upload_from_local_done==false){ + //alert("1. " + $('#id_content-media_input_type').val() + ", upload_done = " + upload_from_local_done); + startLocalUpload(); + return false; + } + 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 : '' + btn_label + '', + 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_progress_handler : uploadProgress, + upload_error_handler : uploadError, + //upload_success_handler : uploadSuccess, + upload_success_handler : function() { + try { + if($('#upload_progress_info').children().size()>0){ + $('#progress_info').remove(); + } + $('#upload_progress_info').append('
' + success_label + '.
'); + upload_from_local_done = true; + // Now that the file is uploaded, we submit the form + $('#my_form').submit(); + } + catch (ex) { + //this.debug(ex); + } + }, + + file_queued_handler : displayUploadPath, + //file_dialog_complete_handler: function() { 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 uploadSuccess(success_label) { + try { + if($('#upload_progress_info').children().size()>0){ + $('#progress_info').remove(); + } + $('#upload_progress_info').append('' + success_label + '.
'); + upload_from_local_done = true; + // Now that the file is uploaded, we submit the form + $('#my_form').submit(); + } + catch (ex) { + //this.debug(ex); + } +} +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('' + "Error Code: HTTP Error, File name: " + file.name + ", Message: " + message + '
'); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED: + $('#upload_progress_info').append('' + "Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '
'); + break; + case SWFUpload.UPLOAD_ERROR.IO_ERROR: + $('#upload_progress_info').append('' + "Error Code: IO Error, File name: " + file.name + ", Message: " + message + '
'); + break; + case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR: + $('#upload_progress_info').append('' + "Error Code: Security Error, File name: " + file.name + ", Message: " + message + '
'); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED: + $('#upload_progress_info').append('' + "Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '
'); + break; + case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED: + $('#upload_progress_info').append('' + "Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '
'); + break; + case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED: + $('#upload_progress_info').append('' + "Error Code: FILE_CANCELLED" + '
'); + break; + case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED: + $('#upload_progress_info').append('' + "STOPPED" + '
'); + break; + default: + $('#upload_progress_info').append('' + "unhandled error: File name: " + file.name + ", File size: " + file.size + ", Message: " + message + '
'); + 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){ + //$('#id_content-description').val($('#media_field_create') + '
');
+ $('#media_field_create').append('
');
+ $('#media_fields_div').height(150);
+ }
+ }
+}