diff options
Diffstat (limited to 'view/js')
-rw-r--r-- | view/js/acl.js | 8 | ||||
-rw-r--r-- | view/js/autocomplete.js | 2 | ||||
-rw-r--r-- | view/js/main.js | 571 | ||||
-rw-r--r-- | view/js/mod_articles.js | 9 | ||||
-rw-r--r-- | view/js/mod_cloud.js | 95 | ||||
-rw-r--r-- | view/js/mod_connedit.js | 4 | ||||
-rw-r--r-- | view/js/mod_defperms.js | 4 | ||||
-rw-r--r-- | view/js/mod_hq.js | 151 | ||||
-rw-r--r-- | view/js/mod_photos.js | 93 | ||||
-rw-r--r-- | view/js/mod_settings.js | 4 |
10 files changed, 389 insertions, 552 deletions
diff --git a/view/js/acl.js b/view/js/acl.js index e016158e9..c8f7c7180 100644 --- a/view/js/acl.js +++ b/view/js/acl.js @@ -173,6 +173,8 @@ ACL.prototype.on_custom = function(event) { that.deny_cid = []; that.deny_gid = []; + datasrc2src('#acl-list-content .acl-list-item img[data-src]'); + that.update_view('custom'); that.on_submit(); @@ -408,10 +410,4 @@ ACL.prototype.populate = function(data) { } that.list_content.append(html); }); - - $("#acl-list-content .acl-list-item img[data-src]").each(function(i, el) { - // Replace data-src attribute with src attribute for every image - $(el).attr('src', $(el).data("src")); - $(el).removeAttr("data-src"); - }); }; diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 08cf97173..01def9900 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -289,7 +289,7 @@ function string2bb(element) { $.fn.bbco_autocomplete = function(type) { if(type=='bbcode') { - var open_close_elements = ['bold', 'italic', 'underline', 'overline', 'strike', 'superscript', 'subscript', 'quote', 'code', 'open', 'spoiler', 'map', 'nobb', 'list', 'checklist', 'ul', 'ol', 'dl', 'li', 'table', 'tr', 'th', 'td', 'center', 'color', 'font', 'size', 'zrl', 'zmg', 'rpost', 'qr', 'observer', 'observer.language','embed', 'highlight']; + var open_close_elements = ['bold', 'italic', 'underline', 'overline', 'strike', 'superscript', 'subscript', 'quote', 'code', 'open', 'spoiler', 'map', 'nobb', 'list', 'checklist', 'ul', 'ol', 'dl', 'li', 'table', 'tr', 'th', 'td', 'center', 'color', 'font', 'size', 'zrl', 'zmg', 'rpost', 'qr', 'observer', 'observer.language','embed', 'highlight', 'url', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6']; var open_elements = ['observer.baseurl', 'observer.address', 'observer.photo', 'observer.name', 'observer.webname', 'observer.url', '*', 'hr', ]; var elements = open_close_elements.concat(open_elements); diff --git a/view/js/main.js b/view/js/main.js index ddd876689..77b8e91e7 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -1,5 +1,107 @@ +var src = null; +var prev = null; +var livetime = null; +var msie = false; +var stopped = false; +var totStopped = false; +var timer = null; +var pr = 0; +var liking = 0; +var in_progress = false; +var langSelect = false; +var commentBusy = false; +var last_popup_menu = null; +var last_popup_button = null; +var scroll_next = false; +var next_page = 1; +var page_load = true; +var loadingPage = true; +var pageHasMoreContent = true; +var divmore_height = 400; +var last_filestorage_id = null; +var mediaPlaying = false; +var contentHeightDiff = 0; +var liveRecurse = 0; +var savedTitle = ''; + +$.ajaxSetup({cache: false}); + +$(document).ready(function() { + + $(document).on('click focus', '.comment-edit-form', handle_comment_form); + + jQuery.timeago.settings.strings = { + prefixAgo : aStr['t01'], + prefixFromNow : aStr['t02'], + suffixAgo : aStr['t03'], + suffixFromNow : aStr['t04'], + seconds : aStr['t05'], + minute : aStr['t06'], + minutes : aStr['t07'], + hour : aStr['t08'], + hours : aStr['t09'], + day : aStr['t10'], + days : aStr['t11'], + month : aStr['t12'], + months : aStr['t13'], + year : aStr['t14'], + years : aStr['t15'], + wordSeparator : aStr['t16'], + numbers : aStr['t17'], + }; + + savedTitle = document.title; + + updateInit(); + + $('a[rel^="#"]').click(function(e){ + manage_popup_menu(this, e); + return; + }); + + // Allow folks to stop the ajax page updates with the pause/break key + $(document).keydown(function(event) { + if(event.keyCode == '8') { + var target = event.target || event.srcElement; + if (!/input|textarea/i.test(target.nodeName)) { + return false; + } + } + + if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) { + event.preventDefault(); + if(stopped === false) { + stopped = true; + if (event.ctrlKey) { + totStopped = true; + } + $('#pause').html('<img src="images/pause.gif" alt="pause" style="border: 1px solid black;" />'); + } else { + unpause(); + } + } else { + if (!totStopped) { + unpause(); + } + } + }); + + var e = document.getElementById('content-complete'); + if(e) + pageHasMoreContent = false; + +}); -function confirmDelete() { return confirm(aStr.delitem); } +function datasrc2src(selector) { + $(selector).each(function(i, el) { + $(el).attr("src", $(el).data("src")); + $(el).removeAttr("data-src"); + }); +} + +function confirmDelete() { + return confirm(aStr.delitem); +} function handle_comment_form(e) { e.stopPropagation(); @@ -59,59 +161,6 @@ function handle_comment_form(e) { }); } -/* -function commentOpenUI(obj, id) { - $(document).unbind( "click.commentOpen", handler ); - - var handler = function() { - if(obj.value == aStr.comment) { - obj.value = ''; - $("#comment-edit-text-" + id).addClass("comment-edit-text-full").removeClass("comment-edit-text-empty"); - // Choose an arbitrary tab index that's greater than what we're using in jot (3 of them) - // The submit button gets tabindex + 1 - $("#comment-edit-text-" + id).attr('tabindex','9'); - $("#comment-edit-submit-" + id).attr('tabindex','10'); - $("#comment-tools-" + id).show(); - $("#comment-edit-anon-" + id).show(); - } - }; - - $(document).bind( "click.commentOpen", handler ); -} - -function commentCloseUI(obj, id) { - var form_id = $(obj)[0].form.id; - - $('#' + form_id).on('click', function(e) { - $(document).unbind( "click.commentClose", handler ); - }); - - var handler = function() { - if($('#comment-edit-text-' + id).val() === '') { - $('#comment-edit-text-' + id).val(aStr.comment); - $("#comment-edit-text-" + id).removeClass("comment-edit-text-full").addClass("comment-edit-text-empty"); - $("#comment-edit-text-" + id).removeAttr('tabindex'); - $("#comment-edit-submit-" + id).removeAttr('tabindex'); - $("#comment-tools-" + id).hide(); - $("#comment-edit-anon-" + id).hide(); - } - }; - - $(document).bind( "click.commentClose", handler ); -} - -function commentOpen(obj, id) { - if(obj.value == aStr.comment) { - obj.value = ''; - $("#comment-edit-text-" + id).addClass("expanded"); - $("#mod-cmnt-wrap-" + id).show(); - $("#comment-tools-" + id).show(); - $("#comment-edit-anon-" + id).show(); - return true; - } - return false; -} -*/ function commentClose(obj, id) { if(obj.value === '') { obj.value = aStr.comment; @@ -124,7 +173,6 @@ function commentClose(obj, id) { return false; } - function showHideCommentBox(id) { if( $('#comment-edit-form-' + id).is(':visible')) { $('#comment-edit-form-' + id).hide(); @@ -298,9 +346,9 @@ function closeMenu(theID) { function markRead(notifType) { $.get('ping?f=&markRead='+notifType); - if(timer) clearTimeout(timer); $('.' + notifType + '-button').hide(); - timer = setTimeout(NavUpdate,2000); + if(timer) clearTimeout(timer); + timer = setTimeout(updateInit,2000); } function markItemRead(itemId) { @@ -308,191 +356,73 @@ function markItemRead(itemId) { $('.unseen-wall-indicator-'+itemId).hide(); } +function manage_popup_menu(w,e) { + menu = $( $(w).attr('rel') ); -var src = null; -var prev = null; -var livetime = null; -var msie = false; -var stopped = false; -var totStopped = false; -var timer = null; -var pr = 0; -var liking = 0; -var in_progress = false; -var langSelect = false; -var commentBusy = false; -var last_popup_menu = null; -var last_popup_button = null; -var scroll_next = false; -var next_page = 1; -var page_load = true; -var loadingPage = true; -var pageHasMoreContent = true; -var updateCountsOnly = false; -var divmore_height = 400; -var last_filestorage_id = null; -var mediaPlaying = false; -var contentHeightDiff = 0; -var liveRecurse = 0; -var savedTitle = ''; + /* notification menus are loaded dynamically + * - here we find a rel tag to figure out what type of notification to load */ -$(function() { - $.ajaxSetup({cache: false}); + var loader_source = $(menu).attr('rel'); - msie = false; // $.browser.msie ; - - var e = document.getElementById('content-complete'); - if(e) - pageHasMoreContent = false; - - /* setup onoff widgets */ - $(".onoff input").each(function(){ - val = $(this).val(); - id = $(this).attr("id"); - $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden"); - }); - $(".onoff > a").click(function(event){ - event.preventDefault(); - var input = $(this).siblings("input"); - var val = 1-input.val(); - var id = input.attr("id"); - $("#"+id+"_onoff ."+ (val==0?"on":"off")).addClass("hidden"); - $("#"+id+"_onoff ."+ (val==1?"on":"off")).removeClass("hidden"); - input.val(val); - //console.log(id); - }); - - /* setup field_richtext */ - //setupFieldRichtext(); - - - /* Turn elements with one of our special rel tags into popup menus */ - /* CHANGES: let bootstrap handle popups and only do the loading here */ - - - $('a[rel^="#"]').click(function(e){ - manage_popup_menu(this, e); - return; - }); - - function manage_popup_menu(w,e) { - menu = $( $(w).attr('rel') ); + if(typeof(loader_source) != 'undefined' && loader_source.length) { + notify_popup_loader(loader_source); + } +} - /* notification menus are loaded dynamically - * - here we find a rel tag to figure out what type of notification to load */ +function notificationsUpdate() { + var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : ''); - var loader_source = $(menu).attr('rel'); + $.get(pingCmd,function(data) { - if(typeof(loader_source) != 'undefined' && loader_source.length) { - notify_popup_loader(loader_source); + if(data.invalid == 1) { + window.location.href=window.location.href; } - } - NavUpdate(); - // Allow folks to stop the ajax page updates with the pause/break key - $(document).keydown(function(event) { - if(event.keyCode == '8') { - var target = event.target || event.srcElement; - if (!/input|textarea/i.test(target.nodeName)) { - return false; - } + if(data.network || data.home || data.intros || data.register || data.mail || data.all_events || data.notify || data.files || data.pubs) { + $('.notifications-btn').css('opacity', 1); + $('#no_notifications').hide(); } - - if(event.keyCode == '19' || (event.ctrlKey && event.which == '32')) { - event.preventDefault(); - if(stopped === false) { - stopped = true; - if (event.ctrlKey) { - totStopped = true; - } - $('#pause').html('<img src="images/pause.gif" alt="pause" style="border: 1px solid black;" />'); - } else { - unpause(); - } - } else { - if (!totStopped) { - unpause(); - } + else { + $('.notifications-btn').css('opacity', 0.5); + $('#navbar-collapse-1').removeClass('show'); + $('#no_notifications').show(); } - }); -}); -function NavUpdate() { - if(liking) - $('.like-rotator').hide(); - - if((! stopped) && (! mediaPlaying)) { - var pingCmd = 'ping' + ((localUser != 0) ? '?f=&uid=' + localUser : ''); - - $.get(pingCmd,function(data) { - - if(data.invalid == 1) { - window.location.href=window.location.href; - } - - if(! updateCountsOnly) { - // start live update - - if($('#live-network').length) { src = 'network'; liveUpdate(); } - if($('#live-channel').length) { src = 'channel'; liveUpdate(); } - if($('#live-pubstream').length) { src = 'pubstream'; liveUpdate(); } - if($('#live-display').length) { src = 'display'; liveUpdate(); } - if($('#live-search').length) { src = 'search'; liveUpdate(); } - // if($('#live-cards').length) { src = 'cards'; liveUpdate(); } - - if($('#live-photos').length || $('#live-cards').length) { - if(liking) { - liking = 0; - window.location.href=window.location.href; - } - } - } + if(data.home || data.intros || data.register || data.mail || data.notify || data.files) { + $('.notifications-btn-icon').removeClass('fa-exclamation-circle'); + $('.notifications-btn-icon').addClass('fa-exclamation-triangle'); + } + if(!data.home && !data.intros && !data.register && !data.mail && !data.notify && !data.files) { + $('.notifications-btn-icon').removeClass('fa-exclamation-triangle'); + $('.notifications-btn-icon').addClass('fa-exclamation-circle'); + } - updateCountsOnly = false; + $.each(data, function(index, item) { + //do not process those + var arr = ['notice', 'info', 'invalid']; + if(arr.indexOf(index) !== -1) + return; - if(data.network || data.home || data.intros || data.register || data.mail || data.all_events || data.notify || data.files || data.pubs) { - $('.notifications-btn').css('opacity', 1); - } - else { - $('.notifications-btn').css('opacity', 0.5); - $('#navbar-collapse-1').removeClass('show'); - } - - if(data.home || data.intros || data.register || data.mail || data.notify || data.files) { - $('.notifications-btn-icon').removeClass('fa-exclamation-circle'); - $('.notifications-btn-icon').addClass('fa-exclamation-triangle'); - } - if(!data.home && !data.intros && !data.register && !data.mail && !data.notify && !data.files) { - $('.notifications-btn-icon').removeClass('fa-exclamation-triangle'); - $('.notifications-btn-icon').addClass('fa-exclamation-circle'); + if(item == 0) { + $('.' + index + '-button').fadeOut(); + } else { + $('.' + index + '-button').fadeIn(); + $('.' + index + '-update').html(item); } + }); - $.each(data, function(index, item) { - //do not process those - var arr = ['notice', 'info', 'invalid']; - if(arr.indexOf(index) !== -1) - return; - - if(item == 0) { - $('.' + index + '-button').hide(); - } else { - $('.' + index + '-button').show(); - $('.' + index + '-update').html(item); - } - }); - - $.jGrowl.defaults.closerTemplate = '<div>[ ' + aStr.closeAll + ']</div>'; + $.jGrowl.defaults.closerTemplate = '<div>[ ' + aStr.closeAll + ']</div>'; - $(data.notice).each(function() { - $.jGrowl(this.message, { sticky: true, theme: 'notice' }); - }); + $(data.notice).each(function() { + $.jGrowl(this.message, { sticky: true, theme: 'notice' }); + }); - $(data.info).each(function(){ - $.jGrowl(this.message, { sticky: false, theme: 'info', life: 10000 }); - }); - }) ; - } - timer = setTimeout(NavUpdate, updateInterval); + $(data.info).each(function(){ + $.jGrowl(this.message, { sticky: false, theme: 'info', life: 10000 }); + }); + }) + if(timer) clearTimeout(timer); + timer = setTimeout(updateInit,updateInterval); } function contextualHelp() { @@ -696,7 +626,6 @@ function updateConvItems(mode,data) { } $(document.body).trigger("sticky_kit:recalc"); - } function collapseHeight() { @@ -745,21 +674,48 @@ function collapseHeight() { console.log('collapsed above viewport count: ' + i); $(window).scrollTop(sval); } +} + +function updateInit() { + if($('#live-network').length) { src = 'network'; } + if($('#live-channel').length) { src = 'channel'; } + if($('#live-pubstream').length) { src = 'pubstream'; } + if($('#live-display').length) { src = 'display'; } + if($('#live-hq').length) { src = 'hq'; } + if($('#live-search').length) { src = 'search'; } + // if($('#live-cards').length) { src = 'cards'; } + // if($('#live-articles').length) { src = 'articles'; } + + if(! src) { + notificationsUpdate(); + } + else { + liveUpdate(); + } + if($('#live-photos').length || $('#live-cards').length || $('#live-articles').length ) { + if(liking) { + liking = 0; + window.location.href=window.location.href; + } + } } -function liveUpdate() { +function liveUpdate(notify_id) { if(typeof profile_uid === 'undefined') profile_uid = false; /* Should probably be unified with channelId defined in head.tpl */ + if((src === null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; } - if(($('.comment-edit-text.expanded').length) || (in_progress)) { + + if(($('.comment-edit-text.expanded').length) || (in_progress) || (mediaPlaying)) { if(livetime) { clearTimeout(livetime); } livetime = setTimeout(liveUpdate, 10000); return; } + if(livetime !== null) livetime = null; @@ -816,6 +772,15 @@ function liveUpdate() { // else data was valid - reset the recursion counter liveRecurse = 0; + if(typeof notify_id !== 'undefined') { + $.post( + "hq", + { + "notify_id" : notify_id + } + ); + } + var dready = new Date(); console.log('DATA ready in: ' + (dready - dstart)/1000 + ' seconds.'); @@ -839,20 +804,6 @@ function liveUpdate() { in_progress = false; - // FIXME - the following lines were added so that almost - // immediately after we update the posts on the page, we - // re-check and update the notification counts. - // As it turns out this causes a bit of an inefficiency - // as we're pinging twice for every update, once before - // and once after. A btter way to do this is to rewrite - // NavUpdate and perhaps LiveUpdate so that we check for - // post updates first and only call the notification ping - // once. - - updateCountsOnly = true; - if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,10); - }); } else { @@ -864,22 +815,11 @@ function liveUpdate() { in_progress = false; - // FIXME - the following lines were added so that almost - // immediately after we update the posts on the page, we - // re-check and update the notification counts. - // As it turns out this causes a bit of an inefficiency - // as we're pinging twice for every update, once before - // and once after. A btter way to do this is to rewrite - // NavUpdate and perhaps LiveUpdate so that we check for - // post updates first and only call the notification ping - // once. - - updateCountsOnly = true; - if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,10); - } + }) + .done(function() { + notificationsUpdate(); }); } @@ -943,6 +883,7 @@ function notify_popup_loader(notifyType) { var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html()); var notifications_all = unescape($('<div>').append( $("#nav-" + notifyType + "-see-all").clone() ).html()); //outerHtml hack var notifications_mark = unescape($('<div>').append( $("#nav-" + notifyType + "-mark-all").clone() ).html()); //outerHtml hack + var notifications_tt_only = unescape($('<div>').append( $("#tt-" + notifyType + "-only").clone() ).html()); //outerHtml hack var notifications_empty = unescape($("#nav-" + notifyType + "-menu").html()); var notify_menu = $("#nav-" + notifyType + "-menu"); @@ -954,14 +895,15 @@ function notify_popup_loader(notifyType) { window.location.href=window.location.href; } - $("#navbar-" + notifyType + "-menu").html(notifications_all + notifications_mark); - $("#nav-" + notifyType + "-menu").html(notifications_all + notifications_mark); + $("#navbar-" + notifyType + "-menu").html(notifications_all + notifications_mark + notifications_tt_only); + $("#nav-" + notifyType + "-menu").html(notifications_all + notifications_mark + notifications_tt_only); + $("." + notifyType + "-update").html(data.notify.length); $(data.notify).each(function() { - html = navbar_notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid,this.notify_id); + html = navbar_notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top); $("#navbar-" + notifyType + "-menu").append(html); - html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid,this.notify_id); + html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top); $("#nav-" + notifyType + "-menu").append(html); }); @@ -970,8 +912,12 @@ function notify_popup_loader(notifyType) { $(el).attr('src', $(el).data("src")); $(el).removeAttr("data-src"); }); + + if($('#tt-' + notifyType + '-only').hasClass('active')) + $('#nav-' + notifyType + '-menu [data-thread_top=false]').hide(); }); + setTimeout(function() { if(notify_menu.hasClass('show')) { console.log('updating ' + notifyType + ' notifications...'); @@ -980,7 +926,6 @@ function notify_popup_loader(notifyType) { }, 1000); } - // Since our ajax calls are asynchronous, we will give a few // seconds for the first ajax call (setting like/dislike), then // run the updater to pick up any changes and display on the page. @@ -989,13 +934,11 @@ function notify_popup_loader(notifyType) { // events have completed and therefore there won't be any // visible feedback that anything changed without all this // trickery. This still could cause confusion if the "like" ajax call -// is delayed and NavUpdate runs before it completes. - - +// is delayed and updateInit runs before it completes. function dolike(ident, verb) { unpause(); $('#like-rotator-' + ident.toString()).show(); - $.get('like/' + ident.toString() + '?verb=' + verb, NavUpdate ); + $.get('like/' + ident.toString() + '?verb=' + verb, updateInit ); liking = 1; } @@ -1003,7 +946,6 @@ function doprofilelike(ident, verb) { $.get('like/' + ident + '?verb=' + verb, function() { window.location.href=window.location.href; }); } - function dropItem(url, object) { var confirm = confirmDelete(); if(confirm) { @@ -1025,20 +967,17 @@ function dropItem(url, object) { function dosubthread(ident) { unpause(); $('#like-rotator-' + ident.toString()).show(); - $.get('subthread/sub/' + ident.toString(), NavUpdate ); + $.get('subthread/sub/' + ident.toString(), updateInit ); liking = 1; } - function dounsubthread(ident) { unpause(); $('#like-rotator-' + ident.toString()).show(); - $.get('subthread/unsub/' + ident.toString(), NavUpdate ); + $.get('subthread/unsub/' + ident.toString(), updateInit ); liking = 1; } - - function dostar(ident) { ident = ident.toString(); $('#like-rotator-' + ident).show(); @@ -1121,7 +1060,7 @@ function post_comment(id) { $(document).unbind( "click.commentOpen"); } if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,1500); + timer = setTimeout(updateInit,1500); } if(data.reload) { window.location.href=data.reload; @@ -1156,7 +1095,7 @@ function importElement(elem) { { "element" : elem }, function(data) { if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,10); + timer = setTimeout(updateInit,10); } ); return false; @@ -1165,7 +1104,6 @@ function importElement(elem) { function preview_post() { $("#jot-preview").val("1"); $("#jot-preview-content").show(); -// tinyMCE.triggerSave(); $.post( "item", $("#profile-jot-form").serialize(), @@ -1271,60 +1209,6 @@ function checkboxhighlight(box) { } } - -// code from http://www.tinymce.com/wiki.php/How-to_implement_a_custom_file_browser -function fcFileBrowser (field_name, url, type, win) { - /* TODO: If you work with sessions in PHP and your client doesn't accept cookies you might need to carry - the session name and session ID in the request string (can look like this: "?PHPSESSID=88p0n70s9dsknra96qhuk6etm5"). - These lines of code extract the necessary parameters and add them back to the filebrowser URL again. */ - - var cmsURL = baseurl+"/fbrowser/"+type+"/"; - - tinyMCE.activeEditor.windowManager.open({ - file : cmsURL, - title : 'File Browser', - width : 420, // Your dimensions may differ - toy around with them! - height : 400, - resizable : "yes", - inline : "yes", // This parameter only has an effect if you use the inlinepopups plugin! - close_previous : "no" - }, { - window : win, - input : field_name - }); - return false; -} - -/* -function setupFieldRichtext(){ - - tinyMCE.init({ - theme : "advanced", - mode : "specific_textareas", - editor_selector: "fieldRichtext", - plugins : "bbcode,paste, inlinepopups", - theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code", - theme_advanced_buttons2 : "", - theme_advanced_buttons3 : "", - theme_advanced_toolbar_location : "top", - theme_advanced_toolbar_align : "center", - theme_advanced_blockformats : "blockquote,code", - paste_text_sticky : true, - entity_encoding : "raw", - add_unload_trigger : false, - remove_linebreaks : false, - force_p_newlines : false, - force_br_newlines : true, - forced_root_block : '', - convert_urls: false, - content_css: baseurl+"/view/custom_tinymce.css", - theme_advanced_path : false, - file_browser_callback : "fcFileBrowser", - }); - -} -*/ - /** * sprintf in javascript * "{0} and {1}".format('zero','uno'); @@ -1337,6 +1221,7 @@ String.prototype.format = function() { } return formatted; }; + // Array Remove Array.prototype.remove = function(item) { to = undefined; @@ -1346,34 +1231,6 @@ Array.prototype.remove = function(item) { return this.push.apply(this, rest); }; -$(document).ready(function() { - - $(document).on('click focus', '.comment-edit-form', handle_comment_form); - - jQuery.timeago.settings.strings = { - prefixAgo : aStr['t01'], - prefixFromNow : aStr['t02'], - suffixAgo : aStr['t03'], - suffixFromNow : aStr['t04'], - seconds : aStr['t05'], - minute : aStr['t06'], - minutes : aStr['t07'], - hour : aStr['t08'], - hours : aStr['t09'], - day : aStr['t10'], - days : aStr['t11'], - month : aStr['t12'], - months : aStr['t13'], - year : aStr['t14'], - years : aStr['t15'], - wordSeparator : aStr['t16'], - numbers : aStr['t17'], - }; - - savedTitle = document.title; - -}); - function zFormError(elm,x) { if(x) { $(elm).addClass("zform-error"); @@ -1441,8 +1298,6 @@ function addeditortext(data) { var currentText = $("#profile-jot-text").val(); $("#profile-jot-text").val(currentText + data); } - else - tinyMCE.execCommand('mceInsertRawHTML',false,data); } function h2b(s) { diff --git a/view/js/mod_articles.js b/view/js/mod_articles.js new file mode 100644 index 000000000..8b31c0f52 --- /dev/null +++ b/view/js/mod_articles.js @@ -0,0 +1,9 @@ +$(document).ready( function() { + $(".autotime").timeago(); + + /* autocomplete @nicknames */ + $(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1"); + /* autocomplete bbcode */ + $(".comment-edit-form textarea").bbco_autocomplete('bbcode'); + +});
\ No newline at end of file diff --git a/view/js/mod_cloud.js b/view/js/mod_cloud.js index 8af90863e..031895caf 100644 --- a/view/js/mod_cloud.js +++ b/view/js/mod_cloud.js @@ -16,26 +16,69 @@ function UploadInit() { var fileselect = $("#files-upload"); var filedrag = $("#cloud-drag-area"); var submit = $("#upload-submit"); + var count = 1; - // is XHR2 available? - var xhr = new XMLHttpRequest(); - if (xhr.upload) { + + $('#invisible-cloud-file-upload').fileupload({ + url: 'file_upload', + dataType: 'json', + dropZone: filedrag, + maxChunkSize: 4 * 1024 * 1024, - // file select - fileselect.attr("multiple", 'multiple'); - fileselect.on("change", UploadFileSelectHandler); + add: function(e,data) { + $(data.files).each( function() { this.count = ++ count; prepareHtml(this); }); + + var allow_cid = ($('#ajax-upload-files').data('allow_cid') || []); + var allow_gid = ($('#ajax-upload-files').data('allow_gid') || []); + var deny_cid = ($('#ajax-upload-files').data('deny_cid') || []); + var deny_gid = ($('#ajax-upload-files').data('deny_gid') || []); - // file submit - submit.on("click", fileselect, UploadFileSelectHandler); + $('.acl-field').remove(); - // file drop - filedrag.on("dragover", DragDropUploadFileHover); - filedrag.on("dragleave", DragDropUploadFileHover); - filedrag.on("drop", DragDropUploadFileSelectHandler); - } + $(allow_gid).each(function(i,v) { + $('#ajax-upload-files').append("<input class='acl-field' type='hidden' name='group_allow[]' value='"+v+"'>"); + }); + $(allow_cid).each(function(i,v) { + $('#ajax-upload-files').append("<input class='acl-field' type='hidden' name='contact_allow[]' value='"+v+"'>"); + }); + $(deny_gid).each(function(i,v) { + $('#ajax-upload-files').append("<input class='acl-field' type='hidden' name='group_deny[]' value='"+v+"'>"); + }); + $(deny_cid).each(function(i,v) { + $('#ajax-upload-files').append("<input class='acl-field' type='hidden' name='contact_deny[]' value='"+v+"'>"); + }); + + data.formData = $('#ajax-upload-files').serializeArray(); + + data.submit(); + }, + + + progress: function(e,data) { + + // there will only be one file, the one we are looking for + + $(data.files).each( function() { + var idx = this.count; + + // Dynamically update the percentage complete displayed in the file upload list + $('#upload-progress-' + idx).html(Math.round(data.loaded / data.total * 100) + '%'); + $('#upload-progress-bar-' + idx).css('background-size', Math.round(data.loaded / data.total * 100) + '%'); + + }); + + + }, + + + stop: function(e,data) { + window.location.href = window.location.href; + } + + }); + + $('#upload-submit').click(function(event) { event.preventDefault(); $('#invisible-cloud-file-upload').trigger('click'); return false;}); - window.filesToUpload = 0; - window.fileUploadsCompleted = 0; } // file drag hover @@ -84,8 +127,9 @@ function UploadFileSelectHandler(e) { } } -function prepareHtml(f, i) { - var num = i - 1; +function prepareHtml(f) { + var num = f.count - 1; + var i = f.count; $('#cloud-index #new-upload-progress-bar-' + num.toString()).after( '<tr id="new-upload-' + i + '" class="new-upload">' + '<td><i class="fa ' + getIconFromType(f.type) + '" title="' + f.type + '"></i></td>' + @@ -158,6 +202,7 @@ function getIconFromType(type) { // upload files function UploadFile(file, idx) { + window.filesToUpload = window.filesToUpload + 1; var xhr = new XMLHttpRequest(); @@ -202,15 +247,15 @@ function UploadFile(file, idx) { }); // POST to the entire cloud path - xhr.open('post', 'file_upload', true); +// xhr.open('post', 'file_upload', true); - var formfields = $("#ajax-upload-files").serializeArray(); +// var formfields = $("#ajax-upload-files").serializeArray(); - var data = new FormData(); - $.each(formfields, function(i, field) { - data.append(field.name, field.value); - }); - data.append('userfile', file); +// var data = new FormData(); +// $.each(formfields, function(i, field) { +// data.append(field.name, field.value); +// }); +// data.append('userfile', file); - xhr.send(data); +// xhr.send(data); } diff --git a/view/js/mod_connedit.js b/view/js/mod_connedit.js index 7100e0d07..34e9a3b21 100644 --- a/view/js/mod_connedit.js +++ b/view/js/mod_connedit.js @@ -19,7 +19,7 @@ $(document).ready(function() { $('#id_permcat').change(function() { - $('.loading-role-rotator').spin(true); + $('.loading').toggleClass('invisible'); var permName = $('#id_permcat').val(); loadAbookRole(permName); }); @@ -128,7 +128,7 @@ function loadAbookRole(name) { if(this.value) $('#me_id_perms_' + this.name).attr('checked','checked'); }); - $('.loading-role-rotator').spin(false); + $('.loading').toggleClass('invisible'); }); } diff --git a/view/js/mod_defperms.js b/view/js/mod_defperms.js index c89142579..18ebe268e 100644 --- a/view/js/mod_defperms.js +++ b/view/js/mod_defperms.js @@ -1,7 +1,7 @@ $(document).ready(function() { $('#id_permcat').change(function() { - $('.loading-role-rotator').show(); + $('.loading').toggleClass('invisible'); var permName = $('#id_permcat').val(); loadConnectionRole(permName); }); @@ -25,7 +25,7 @@ function loadConnectionRole(name) { if(this.value) $('#id_perms_' + this.name).attr('checked','checked'); }); - $('.loading-role-rotator').hide(); + $('.loading').toggleClass('invisible'); }); } diff --git a/view/js/mod_hq.js b/view/js/mod_hq.js index 8bbd5e3ad..b321382bd 100644 --- a/view/js/mod_hq.js +++ b/view/js/mod_hq.js @@ -1,145 +1,10 @@ -function hqLiveUpdate(notify_id) { +$(document).on('click', '#jot-toggle', function(e) { + e.preventDefault(); + e.stopPropagation(); - if(typeof profile_uid === 'undefined') profile_uid = false; /* Should probably be unified with channelId defined in head.tpl */ - if((src === null) || (stopped) || (! profile_uid)) { $('.like-rotator').hide(); return; } - if(($('.comment-edit-text.expanded').length) || (in_progress)) { - if(livetime) { - clearTimeout(livetime); - } - livetime = setTimeout(liveUpdate, 10000); - return; - } - if(livetime !== null) - livetime = null; + $(this).toggleClass('active'); + $(window).scrollTop(0); + $('#jot-popup').toggle(); + $('#profile-jot-text').focus(); - prev = 'live-' + src; - - in_progress = true; - - var update_url; - var update_mode; - - if(scroll_next) { - bParam_page = next_page; - page_load = true; - } - else { - bParam_page = 1; - } - - update_url = buildCmd(); - - if(page_load) { - $("#page-spinner").show(); - if(bParam_page == 1) - update_mode = 'replace'; - else - update_mode = 'append'; - } - else { - update_mode = 'update'; - var orgHeight = $("#region_2").height(); - } - - var dstart = new Date(); - console.log('LOADING data...'); - $.get(update_url, function(data) { - - // on shared hosts occasionally the live update process will be killed - // leaving an incomplete HTML structure, which leads to conversations getting - // truncated and the page messed up if all the divs aren't closed. We will try - // again and give up if we can't get a valid HTML response after 10 tries. - - if((data.indexOf("<html>") != (-1)) && (data.indexOf("</html>") == (-1))) { - console.log('Incomplete data. Reloading'); - in_progress = false; - liveRecurse ++; - if(liveRecurse < 10) { - liveUpdate(); - } - else { - console.log('Incomplete data. Too many attempts. Giving up.'); - } - } - - // else data was valid - reset the recursion counter - liveRecurse = 0; - - if(notify_id !== 'undefined') { - $.post( - "hq", - { - "notify_id" : notify_id - }, - function(data) { - if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,10); - } - ); - } - - var dready = new Date(); - console.log('DATA ready in: ' + (dready - dstart)/1000 + ' seconds.'); - - if(update_mode === 'update' || preloadImages) { - console.log('LOADING images...'); - - $('.wall-item-body, .wall-photo-item',data).imagesLoaded( function() { - var iready = new Date(); - console.log('IMAGES ready in: ' + (iready - dready)/1000 + ' seconds.'); - - page_load = false; - scroll_next = false; - updateConvItems(update_mode,data); - $("#page-spinner").hide(); - $("#profile-jot-text-loading").hide(); - - // adjust scroll position if new content was added above viewport - if(update_mode === 'update') { - $(window).scrollTop($(window).scrollTop() + $("#region_2").height() - orgHeight + contentHeightDiff); - } - - in_progress = false; - - // FIXME - the following lines were added so that almost - // immediately after we update the posts on the page, we - // re-check and update the notification counts. - // As it turns out this causes a bit of an inefficiency - // as we're pinging twice for every update, once before - // and once after. A btter way to do this is to rewrite - // NavUpdate and perhaps LiveUpdate so that we check for - // post updates first and only call the notification ping - // once. - - updateCountsOnly = true; - if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,10); - - }); - } - else { - page_load = false; - scroll_next = false; - updateConvItems(update_mode,data); - $("#page-spinner").hide(); - $("#profile-jot-text-loading").hide(); - - in_progress = false; - - // FIXME - the following lines were added so that almost - // immediately after we update the posts on the page, we - // re-check and update the notification counts. - // As it turns out this causes a bit of an inefficiency - // as we're pinging twice for every update, once before - // and once after. A btter way to do this is to rewrite - // NavUpdate and perhaps LiveUpdate so that we check for - // post updates first and only call the notification ping - // once. - - updateCountsOnly = true; - if(timer) clearTimeout(timer); - timer = setTimeout(NavUpdate,10); - - } - }); -} +}); diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 267b51531..bf926c692 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -27,29 +27,93 @@ function showHideBodyTextarea() { // initialize function UploadInit() { + var nickname = $('#invisible-photos-file-upload').data('nickname'); var fileselect = $("#photos-upload-choose"); var filedrag = $("#photos-upload-form"); var submit = $("#dbtn-submit"); + var count = 1; + + $('#invisible-photos-file-upload').fileupload({ + url: 'photos/' + nickname, + dataType: 'json', + dropZone: filedrag, + maxChunkSize: 4 * 1024 * 1024, + + add: function(e,data) { + $(data.files).each( function() { this.count = ++ count; prepareHtml(this); }); + + var allow_cid = ($('#photos-upload-form').data('allow_cid') || []); + var allow_gid = ($('#photos-upload-form').data('allow_gid') || []); + var deny_cid = ($('#photos-upload-form').data('deny_cid') || []); + var deny_gid = ($('#photos-upload-form').data('deny_gid') || []); + + $('.acl-field').remove(); + + $(allow_gid).each(function(i,v) { + $('#photos-upload-form').append("<input class='acl-field' type='hidden' name='group_allow[]' value='"+v+"'>"); + }); + $(allow_cid).each(function(i,v) { + $('#photos-upload-form').append("<input class='acl-field' type='hidden' name='contact_allow[]' value='"+v+"'>"); + }); + $(deny_gid).each(function(i,v) { + $('#photos-upload-form').append("<input class='acl-field' type='hidden' name='group_deny[]' value='"+v+"'>"); + }); + $(deny_cid).each(function(i,v) { + $('#photos-upload-form').append("<input class='acl-field' type='hidden' name='contact_deny[]' value='"+v+"'>"); + }); + + data.formData = $('#photos-upload-form').serializeArray(); + + data.submit(); + }, + + progress: function(e,data) { + + // there will only be one file, the one we are looking for + + $(data.files).each( function() { + var idx = this.count; + + // Dynamically update the percentage complete displayed in the file upload list + $('#upload-progress-' + idx).html(Math.round(data.loaded / data.total * 100) + '%'); + $('#upload-progress-bar-' + idx).css('background-size', Math.round(data.loaded / data.total * 100) + '%'); + + }); + + + }, + + + stop: function(e,data) { + window.location.href = window.location.href; + } + + }); + + $('#dbtn-submit').click(function(event) { event.preventDefault(); $('#invisible-photos-file-upload').trigger('click'); return false;}); + + + // is XHR2 available? - var xhr = new XMLHttpRequest(); - if (xhr.upload) { +// var xhr = new XMLHttpRequest(); +// if (xhr.upload) { // file select - fileselect.attr("multiple", 'multiple'); - fileselect.on("change", UploadFileSelectHandler); +// fileselect.attr("multiple", 'multiple'); +// fileselect.on("change", UploadFileSelectHandler); // file submit - submit.on("click", fileselect, UploadFileSelectHandler); +// submit.on("click", fileselect, UploadFileSelectHandler); // file drop - filedrag.on("dragover", DragDropUploadFileHover); - filedrag.on("dragleave", DragDropUploadFileHover); - filedrag.on("drop", DragDropUploadFileSelectHandler); - } +// filedrag.on("dragover", DragDropUploadFileHover); +// filedrag.on("dragleave", DragDropUploadFileHover); +// filedrag.on("drop", DragDropUploadFileSelectHandler); +// } - window.filesToUpload = 0; - window.fileUploadsCompleted = 0; +// window.filesToUpload = 0; +// window.fileUploadsCompleted = 0; } // file drag hover @@ -98,8 +162,11 @@ function UploadFileSelectHandler(e) { } } -function prepareHtml(f, i) { - var num = i - 1; +function prepareHtml(f) { + + var num = f.count - 1; + var i = f.count; + $('#upload-index #new-upload-progress-bar-' + num.toString()).after( '<tr id="new-upload-' + i + '" class="new-upload">' + '<td width="1%"><i class="fa ' + getIconFromType(f.type) + '" title="' + f.type + '"></i></td>' + diff --git a/view/js/mod_settings.js b/view/js/mod_settings.js index f9faa3d5c..d3392c748 100644 --- a/view/js/mod_settings.js +++ b/view/js/mod_settings.js @@ -19,7 +19,7 @@ $(document).ready(function() { }); $('#id_permcat_list').change(function() { - $('.loading-role-rotator').spin(true); + $('.loading').toggleClass('invisible'); var permName = $('#id_permcat').val(); loadPermcat(permName); }); @@ -172,7 +172,7 @@ function loadPermcat(name) { if(this.value) $('#me_id_perms_' + this.name).attr('checked','checked'); }); - $('.loading-role-rotator').spin(false); + $('.loading').toggleClass('invisible'); }); } |