diff options
Diffstat (limited to 'view/js')
-rw-r--r-- | view/js/acl.js | 22 | ||||
-rw-r--r-- | view/js/autocomplete.js | 217 | ||||
-rw-r--r-- | view/js/jquery-compat.js | 71 | ||||
-rw-r--r-- | view/js/main.js | 72 | ||||
-rw-r--r-- | view/js/mod_admin.js | 3 | ||||
-rw-r--r-- | view/js/mod_connedit.js | 2 | ||||
-rw-r--r-- | view/js/mod_directory.js | 3 | ||||
-rw-r--r-- | view/js/mod_filestorage.js | 1 | ||||
-rw-r--r-- | view/js/mod_new_channel.js | 2 | ||||
-rw-r--r-- | view/js/mod_photos.js | 10 | ||||
-rw-r--r-- | view/js/mod_profiles.js | 3 | ||||
-rw-r--r-- | view/js/mod_settings.js | 5 |
12 files changed, 113 insertions, 298 deletions
diff --git a/view/js/acl.js b/view/js/acl.js index c129634a0..77c65e21d 100644 --- a/view/js/acl.js +++ b/view/js/acl.js @@ -17,20 +17,24 @@ function ACL(backend_url, preset){ that.item_tpl = unescape($(".acl-list-item[rel=acl-template]").html()); that.showall = $("#acl-showall"); + // set the initial ACL lists in case the enclosing form gets submitted before the ajax loader completes. + that.on_submit(); + if (preset.length==0) that.showall.removeClass("btn-default").addClass("btn-warning"); /*events*/ $(document).ready(function() { - that.showall.click(that.on_showall); - $(document).on('click','.acl-button-show',that.on_button_show); - $(document).on('click','.acl-button-hide',that.on_button_hide); - $("#acl-search").keypress(that.on_search); -// $("#acl-wrapper").parents("form").submit(that.on_submit); +// setTimeout( function() { + that.showall.click(that.on_showall); + $(document).on('click','.acl-button-show',that.on_button_show); + $(document).on('click','.acl-button-hide',that.on_button_hide); + $("#acl-search").keypress(that.on_search); - /* startup! */ - that.get(0,100); - that.on_submit(); + /* startup! */ + that.get(0,100); + that.on_submit(); +// }, 5000 ); }); } @@ -254,7 +258,7 @@ ACL.prototype.get = function(start,count, search){ } ACL.prototype.populate = function(data){ - var height = Math.ceil(data.tot / that.nw) * 42; + var height = Math.ceil(data.items.length / that.nw) * 42; that.list_content.height(height); $(data.items).each(function(){ html = "<div class='acl-list-item {4} {7} {5}' title='{6}' id='{2}{3}'>"+that.item_tpl+"</div>"; diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index c01ba6990..e68356057 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -1,200 +1,67 @@ /** - * Friendica people autocomplete + * Red people autocomplete * - * require jQuery, jquery.textareas + * require jQuery, jquery.textcomplete */ - - - -function ACPopup(elm,backend_url){ - this.idsel=-1; - this.element = elm; - this.searchText=""; - this.ready=true; - this.kp_timer = false; - this.url = backend_url; - - var w = 530; - var h = 130; - - - if(typeof elm.editorId == "undefined") { - style = $(elm).offset(); - w = $(elm).width(); - h = $(elm).height(); - } - else { - var container = elm.getContainer(); - if(typeof container != "undefined") { - style = $(container).offset(); - w = $(container).width(); - h = $(container).height(); - } - } - - if(! w) - w = 530; - - if(! h) - h = 130; - - style.top=style.top+h; - style.width = w; - style.position = 'absolute'; - /* style['max-height'] = '150px'; - style.border = '1px solid red'; - style.background = '#cccccc'; - - style.overflow = 'auto'; - style['z-index'] = '100000'; - */ - style.display = 'none'; - - this.cont = $("<div class='acpopup'></div>"); - this.cont.css(style); - - $("body").append(this.cont); -} -ACPopup.prototype.close = function(){ - $(this.cont).remove(); - this.ready=false; -} -ACPopup.prototype.search = function(text){ - var that = this; - this.searchText=text; - if (this.kp_timer) clearTimeout(this.kp_timer); - this.kp_timer = setTimeout( function(){that._search();}, 500); -} -ACPopup.prototype._search = function(){ - console.log("_search"); - var that = this; +function mysearch(term, callback, backend_url, extra_channels) { var postdata = { start:0, count:100, - search:this.searchText, + search:term, type:'c', } + + if(extra_channels) + postdata['extra_channels[]'] = extra_channels; $.ajax({ type:'POST', - url: this.url, + url: backend_url, data: postdata, dataType: 'json', success:function(data){ - that.cont.html(""); - if (data.tot>0){ - that.cont.show(); - $(data.items).each(function(){ - html = "<img src='{0}' height='16px' width='16px'>{1} ({2})".format(this.photo, this.name, ((this.label) ? this.nick + ' ' + this.label : this.nick) ) - that.add(this.taggable, html, this.nick.replace(' ','') + '+' + this.id + ' - ' + this.link); - }); - } else { - that.cont.hide(); - } - } - }); - -} -ACPopup.prototype.add = function(taggable, label, value){ - var that=this; - var elm = $("<div class='acpopupitem " + taggable +"' title='"+value+"'>"+label+"</div>"); - elm.click(function(e){ - t = $(this).attr('title').replace(new RegExp(' \- .*'),''); - if(typeof(that.element.container) === "undefined") { - el=$(that.element); - sel = el.getSelection(); - sel.start = sel.start- that.searchText.length; - el.setSelection(sel.start,sel.end).replaceSelectedText(t+' ').collapseSelection(false); - that.close(); - } - else { - txt = tinyMCE.activeEditor.getContent(); - // alert(that.searchText + ':' + t); - newtxt = txt.replace('@' + that.searchText, '@' + t + ' '); - tinyMCE.activeEditor.setContent(newtxt); - tinyMCE.activeEditor.focus(); - that.close(); - } - }); - $(this.cont).append(elm); -} -ACPopup.prototype.onkey = function(event){ - if (event.keyCode == '13') { - if(this.idsel>-1) { - this.cont.children()[this.idsel].click(); - event.preventDefault(); - } - else - this.close(); - } - if (event.keyCode == '38') { //cursor up - cmax = this.cont.children().size()-1; - this.idsel--; - if (this.idsel<0) this.idsel=cmax; - event.preventDefault(); - } - if (event.keyCode == '40' || event.keyCode == '9') { //cursor down - cmax = this.cont.children().size()-1; - this.idsel++; - if (this.idsel>cmax) this.idsel=0; - event.preventDefault(); - } - - if (event.keyCode == '38' || event.keyCode == '40' || event.keyCode == '9') { - this.cont.children().removeClass('selected'); - $(this.cont.children()[this.idsel]).addClass('selected'); - } - - if (event.keyCode == '27') { //ESC - this.close(); - } + callback(data.items); + }, + }).fail(function () {callback([]); }); // Callback must be invoked even if something went wrong. } -function ContactAutocomplete(element,backend_url){ - this.pattern=/@(\!*)([^ \n]+)$/; - this.popup=null; - var that = this; - - $(element).unbind('keydown'); - $(element).unbind('keyup'); - - $(element).keydown(function(event){ - if (that.popup!==null) that.popup.onkey(event); - }); - - $(element).keyup(function(event){ - cpos = $(this).getSelection(); - if (cpos.start==cpos.end){ - match = $(this).val().substring(0,cpos.start).match(that.pattern); - if (match!==null){ - if (that.popup===null){ - that.popup = new ACPopup(this, backend_url); - } - if (that.popup.ready && match[2]!==that.popup.searchText) that.popup.search(match[2]); - if (!that.popup.ready) that.popup=null; - - } else { - if (that.popup!==null) {that.popup.close(); that.popup=null;} - } - - - } - }); - +function format(item) { + return "<div class='{0}' title='{4}'><img src='{1}'>{2} ({3})</div>".format(item.taggable, item.photo, item.name, ((item.label) ? item.nick + ' ' + item.label : item.nick), item.link ) } +function replace(item) { + // $2 ensures that prefix (@,@!) is preserved + var id = item.id; + // 16 chars of hash should be enough. Full hash could be used if it can be done in a visually appealing way. + // 16 chars is also the minimum length in the backend (otherwise it's interpreted as a local id). + if(id.length > 16) + id = item.id.substring(0,16); + return '$1$2'+item.nick.replace(' ','') + '+' + id; +} /** * jQuery plugin 'contact_autocomplete' */ (function( $ ){ - $.fn.contact_autocomplete = function(backend_url) { - this.each(function(){ - new ContactAutocomplete(this, backend_url); - }); - }; -})( jQuery ); - + $.fn.contact_autocomplete = function(backend_url, extra_channels) { + if (typeof extra_channels === 'undefined') extra_channels = false; + // Autocomplete contacts + contacts = { + match: /(^|\s)(@\!*)([^ \n]+)$/, + index: 3, + search: function(term, callback) { mysearch(term, callback, backend_url, extra_channels); }, + replace: replace, + template: format, + } - + smilies = { + match: /(^|\s)(:[a-z]{2,})$/, + index: 2, + search: function(term, callback) { $.getJSON('/smilies/json').done(function(data) { callback($.map(data, function(entry) { return entry['text'].indexOf(term) === 0 ? entry : null })) }) }, + template: function(item) { return item['icon'] + item['text'] }, + replace: function(item) { return "$1"+item['text'] + ' '; }, + } + this.textcomplete([contacts,smilies],{className:'acpopup'}); + }; +})( jQuery ); diff --git a/view/js/jquery-compat.js b/view/js/jquery-compat.js deleted file mode 100644 index 7bf912542..000000000 --- a/view/js/jquery-compat.js +++ /dev/null @@ -1,71 +0,0 @@ - -// provide jquery.browser so we can get rid of the migration toolkit - -jQuery.uaMatch = function( ua ) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) || - /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) || - []; - - return { - browser: match[ 1 ] || "", - version: match[ 2 ] || "0" - }; -}; - - -// Don't clobber any existing jQuery.browser in case it's different -if ( !jQuery.browser ) { - matched = jQuery.uaMatch( navigator.userAgent ); - browser = {}; - - if ( matched.browser ) { - browser[ matched.browser ] = true; - browser.version = matched.version; - } - - // Chrome is Webkit, but Webkit is also Safari. - if ( browser.chrome ) { - browser.webkit = true; - } else if ( browser.webkit ) { - browser.safari = true; - } - - jQuery.browser = browser; -} - -jQuery.fn.toggle = function( fn, fn2 ) { - - // Don't mess with animation or css toggles - if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) { - return oldToggle.apply( this, arguments ); - } - - // Save reference to arguments for access in closure - var args = arguments, - guid = fn.guid || jQuery.guid++, - i = 0, - toggler = function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - }; - - // link all the functions, so any of them can unbind this click handler - toggler.guid = guid; - while ( i < args.length ) { - args[ i++ ].guid = guid; - } - - return this.click( toggler ); -}; diff --git a/view/js/main.js b/view/js/main.js index beedb7f01..85aea9875 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -180,6 +180,13 @@ timer = setTimeout(NavUpdate,2000); } + function markItemRead(itemId) { + $.get('ping?f=&markItemRead='+itemId); + $('.unseen-wall-indicator-'+itemId).hide(); + } + + + var src = null; var prev = null; var livetime = null; @@ -200,6 +207,8 @@ var loadingPage = true; var pageHasMoreContent = true; var updateCountsOnly = false; + var divmore_height = 400; + var last_filestorage_id = null; $(function() { $.ajaxSetup({cache: false}); @@ -260,9 +269,9 @@ } // fancyboxes - $("a.popupbox").fancybox({ - 'transitionIn' : 'elastic', - 'transitionOut' : 'elastic' + // Is this actually used anywhere? + $("a.popupbox").colorbox({ + 'transition' : 'elastic' }); @@ -335,7 +344,7 @@ if($('#live-network').length) { src = 'network'; liveUpdate(); } if($('#live-channel').length) { src = 'channel'; liveUpdate(); } - if($('#live-community').length) { src = 'community'; liveUpdate(); } + if($('#live-home').length) { src = 'home'; liveUpdate(); } if($('#live-display').length) { src = 'display'; liveUpdate(); } if($('#live-search').length) { src = 'search'; liveUpdate(); } @@ -429,6 +438,8 @@ function updatePageItems(mode,data) { pageHasMoreContent = false; } + collapseHeight(); + } @@ -457,26 +468,18 @@ function updateConvItems(mode,data) { $('#' + prev).after($(this)); if(isVisible) showHideComments(itmId); - $(".autotime").timeago(); - // divgrow doesn't prevent itself from attaching a second (or 500th) - // "show more" div to a content region - it also has a few other - // issues related to how we're trying to use it. - // disable for now. - // $("div.wall-item-body").divgrow({ initialHeight: 400 }); + $(".autotime",this).timeago(); } else { $('img',this).each(function() { $(this).attr('src',$(this).attr('dst')); }); - // more FIXME related to expanded comments if($('#collapsed-comments-'+itmId).is(':visible')) isVisible = true; $('#' + ident).replaceWith($(this)); if(isVisible) showHideComments(itmId); - $(".autotime").timeago(); - // $("div.wall-item-body").divgrow({ initialHeight: 400 }); - + $(".autotime",this).timeago(); } prev = ident; }); @@ -507,9 +510,7 @@ function updateConvItems(mode,data) { $('#threads-end').before($(this)); if(isVisible) showHideComments(itmId); - $(".autotime").timeago(); - // $("div.wall-item-body").divgrow({ initialHeight: 400 }); - + $(".autotime",this).timeago(); } else { $('img',this).each(function() { @@ -520,8 +521,7 @@ function updateConvItems(mode,data) { $('#' + ident).replaceWith($(this)); if(isVisible) showHideComments(itmId); - $(".autotime").timeago(); - // $("div.wall-item-body").divgrow({ initialHeight: 400 }); + $(".autotime",this).timeago(); } }); @@ -555,9 +555,8 @@ function updateConvItems(mode,data) { $('#' + prev).after($(this)); if(isVisible) showHideComments(itmId); - $(".autotime").timeago(); + $(".autotime",this).timeago(); - // $("div.wall-item-body").divgrow({ initialHeight: 400 }); } prev = ident; }); @@ -596,19 +595,18 @@ function updateConvItems(mode,data) { function collapseHeight() { - $(".wall-item-body").each(function() { - if($(this).height() > 410) { + $(".wall-item-body, .contact-info").each(function() { + if($(this).height() > divmore_height + 10) { if(! $(this).hasClass('divmore')) { - $(this).divgrow({ initialHeight: 400, moreText: aStr['divgrowmore'], lessText: aStr['divgrowless'], showBrackets: false }); + $(this).readmore({collapsedHeight: divmore_height, moreLink: '<a href="#">'+aStr['divgrowmore']+'</a>', lessLink: '<a href="#">'+aStr['divgrowless']+'</a>'}); $(this).addClass('divmore'); } - } + } }); } - - function liveUpdate() { + 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').spin(false); return; } if(($('.comment-edit-text-full').length) || (in_progress)) { if(livetime) { @@ -749,7 +747,7 @@ function updateConvItems(mode,data) { $("#nav-" + notifyType + "-menu").html(notifications_all + notifications_mark); $(data.notify).each(function() { - html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.class); + html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass); $("#nav-" + notifyType + "-menu").append(html); }); $(".dropdown-menu img[data-src]").each(function(i, el){ @@ -846,6 +844,19 @@ function updateConvItems(mode,data) { }); } + function filestorage(event,nick,id) { + $('#cloud-index-' + last_filestorage_id).removeClass('cloud-index-active'); + $('#perms-panel-' + last_filestorage_id).hide().html(''); + $('#file-edit-' + id).spin('tiny'); + delete acl; + $.get('filestorage/' + nick + '/' + id + '/edit', function(data) { + $('#cloud-index-' + id).addClass('cloud-index-active'); + $('#perms-panel-' + id).html(data).show(); + $('#file-edit-' + id).spin(false); + last_filestorage_id = id; + }); + } + function post_comment(id) { unpause(); commentBusy = true; @@ -909,7 +920,7 @@ function updateConvItems(mode,data) { function preview_post() { $("#jot-preview").val("1"); $("#jot-preview-content").show(); - tinyMCE.triggerSave(); +// tinyMCE.triggerSave(); $.post( "item", $("#profile-jot-form").serialize(), @@ -1026,6 +1037,8 @@ function fcFileBrowser (field_name, url, type, win) { } function setupFieldRichtext(){ + return; +/* tinyMCE.init({ theme : "advanced", mode : "specific_textareas", @@ -1049,6 +1062,7 @@ function setupFieldRichtext(){ theme_advanced_path : false, file_browser_callback : "fcFileBrowser", }); +*/ } diff --git a/view/js/mod_admin.js b/view/js/mod_admin.js new file mode 100644 index 000000000..aad2ca902 --- /dev/null +++ b/view/js/mod_admin.js @@ -0,0 +1,3 @@ +$(document).ready(function() { + $('form').areYouSure(); // Warn user about unsaved settings +}); diff --git a/view/js/mod_connedit.js b/view/js/mod_connedit.js index fabf24e95..15b768929 100644 --- a/view/js/mod_connedit.js +++ b/view/js/mod_connedit.js @@ -1,7 +1,7 @@ function abook_perms_msg() { $('.abook-permschange').show(); - $('.abook-permschange').html(aStr['permschange']); +// $('.abook-permschange').html(aStr['permschange']); $('.abook-permssave').show(); } diff --git a/view/js/mod_directory.js b/view/js/mod_directory.js index 291734b4f..74c8b414d 100644 --- a/view/js/mod_directory.js +++ b/view/js/mod_directory.js @@ -6,3 +6,6 @@ function dirdetails(hash) { } +$(document).ready(function() { + collapseHeight(); +});
\ No newline at end of file diff --git a/view/js/mod_filestorage.js b/view/js/mod_filestorage.js index 88c1cf7d8..bee37767f 100644 --- a/view/js/mod_filestorage.js +++ b/view/js/mod_filestorage.js @@ -13,4 +13,5 @@ $(document).ready(function() { } }).trigger('change'); + }); diff --git a/view/js/mod_new_channel.js b/view/js/mod_new_channel.js index 492267ff9..c4d5408f2 100644 --- a/view/js/mod_new_channel.js +++ b/view/js/mod_new_channel.js @@ -1,5 +1,5 @@ $(document).ready(function() { -// $("#privacy-role-select").sSelect(); +// $("#id_permissions_role").sSelect(); $("#newchannel-name").blur(function() { $("#name-spinner").spin('small'); var zreg_name = $("#newchannel-name").val(); diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 8b7706f16..0a64f8102 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -3,16 +3,6 @@ var ispublic = aStr['everybody']; $(document).ready(function() { - $("a#photos-upload-perms-menu").colorbox({ - 'inline' : true, - 'transition' : 'elastic' - }); - - $("a#settings-default-perms-menu").colorbox({ - 'inline' : true, - 'transition' : 'elastic' - }); - var a; a = $("#photo-edit-newtag").autocomplete({ serviceUrl: baseurl + '/acl', diff --git a/view/js/mod_profiles.js b/view/js/mod_profiles.js new file mode 100644 index 000000000..aad2ca902 --- /dev/null +++ b/view/js/mod_profiles.js @@ -0,0 +1,3 @@ +$(document).ready(function() { + $('form').areYouSure(); // Warn user about unsaved settings +}); diff --git a/view/js/mod_settings.js b/view/js/mod_settings.js index 87c8c3a2b..0db0dd165 100644 --- a/view/js/mod_settings.js +++ b/view/js/mod_settings.js @@ -2,14 +2,15 @@ var ispublic = aStr['everybody'] ; $(document).ready(function() { + $('form').areYouSure(); // Warn user about unsaved settings $("a#settings-default-perms-menu").colorbox({ 'inline' : true, 'transition' : 'elastic' }); - $("#privacy-role-select").change(function() { - var role = $("#privacy-role-select").val(); + $("#id_permissions_role").change(function() { + var role = $("#id_permissions_role").val(); if(role == 'custom') $('#advanced-perm').show(); else |