Modify Javascript to improve page loading times

1. Add template category 'end' that places content right before final </body> tag
	2. Move most Javascript from tpl files into one cacheable file, theme.js
	3. Load scripts at end of the HTML document instead of in the header
	4. Minify several Javascript files

Note that the second and third things were only done for Frost and Frost Mobile. Doing it for every theme means going through every .tpl for every theme and rearranging the Javascript, which is tedious.
This commit is contained in:
Zach Prezkuta 2012-07-28 09:57:16 -06:00
parent 3f39e29e6e
commit 1f09e7ad23
132 changed files with 3300 additions and 1917 deletions

View file

@ -1,44 +1,210 @@
$(document).ready(function() {
$j(document).ready(function() {
/*$('html').click(function() { $("#nav-notifications-menu" ).hide(); });*/
/* enable tinymce on focus and click */
$j("#profile-jot-text").focus(enableOnUser);
$j("#profile-jot-text").click(enableOnUser);
$('.group-edit-icon').hover(
if(typeof window.AjaxUpload != "undefined") {
switch(window.ajaxType) {
case 'jot-header':
var uploader = new window.AjaxUpload(
'wall-image-upload',
{ action: 'wall_upload/'+window.nickname,
name: 'userfile',
onSubmit: function(file,ext) { $j('#profile-rotator').show(); },
onComplete: function(file,response) {
addeditortext(response);
$j('#profile-rotator').hide();
}
}
);
var file_uploader = new window.AjaxUpload(
'wall-file-upload',
{ action: 'wall_attach/'+window.nickname,
name: 'userfile',
onSubmit: function(file,ext) { $j('#profile-rotator').show(); },
onComplete: function(file,response) {
addeditortext(response);
$j('#profile-rotator').hide();
}
}
);
break;
case 'msg-header':
var uploader = new window.AjaxUpload(
'prvmail-upload',
{ action: 'wall_upload/' + window.nickname,
name: 'userfile',
onSubmit: function(file,ext) { $j('#profile-rotator').show(); },
onComplete: function(file,response) {
tinyMCE.execCommand('mceInsertRawHTML',false,response);
$j('#profile-rotator').hide();
}
}
);
break;
default:
break;
}
}
if(typeof acl=="undefined"){
acl = new ACL(
baseurl+"/acl",
[ window.allowCID,window.allowGID,window.denyCID,window.denyGID ]
);
}
/*$j('html').click(function() { $j("#nav-notifications-menu" ).hide(); });*/
/*$j('.group-edit-icon').hover(
function() {
$(this).addClass('icon'); $(this).removeClass('iconspacer');},
$j(this).addClass('icon'); $j(this).removeClass('iconspacer');},
function() {
$(this).removeClass('icon'); $(this).addClass('iconspacer');}
$j(this).removeClass('icon'); $j(this).addClass('iconspacer');}
);
$('.sidebar-group-element').hover(
$j('.sidebar-group-element').hover(
function() {
id = $(this).attr('id');
$('#edit-' + id).addClass('icon'); $('#edit-' + id).removeClass('iconspacer');},
id = $j(this).attr('id');
$j('#edit-' + id).addClass('icon'); $j('#edit-' + id).removeClass('iconspacer');},
function() {
id = $(this).attr('id');
$('#edit-' + id).removeClass('icon');$('#edit-' + id).addClass('iconspacer');}
id = $j(this).attr('id');
$j('#edit-' + id).removeClass('icon');$j('#edit-' + id).addClass('iconspacer');}
);
$('.savedsearchdrop').hover(
$j('.savedsearchdrop').hover(
function() {
$(this).addClass('drop'); $(this).addClass('icon'); $(this).removeClass('iconspacer');},
$j(this).addClass('drop'); $j(this).addClass('icon'); $j(this).removeClass('iconspacer');},
function() {
$(this).removeClass('drop'); $(this).removeClass('icon'); $(this).addClass('iconspacer');}
$j(this).removeClass('drop'); $j(this).removeClass('icon'); $j(this).addClass('iconspacer');}
);
$('.savedsearchterm').hover(
$j('.savedsearchterm').hover(
function() {
id = $(this).attr('id');
$('#drop-' + id).addClass('icon'); $('#drop-' + id).addClass('drophide'); $('#drop-' + id).removeClass('iconspacer');},
id = $j(this).attr('id');
$j('#drop-' + id).addClass('icon'); $j('#drop-' + id).addClass('drophide'); $j('#drop-' + id).removeClass('iconspacer');},
function() {
id = $(this).attr('id');
$('#drop-' + id).removeClass('icon');$('#drop-' + id).removeClass('drophide'); $('#drop-' + id).addClass('iconspacer');}
);
id = $j(this).attr('id');
$j('#drop-' + id).removeClass('icon');$j('#drop-' + id).removeClass('drophide'); $j('#drop-' + id).addClass('iconspacer');}
);*/
$(".popupbox").click(function () {
var parent = $( $(this).attr('href') ).parent();
if(window.aclType == "event_head") {
$j('#events-calendar').fullCalendar({
events: baseurl + '/events/json/',
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
timeFormat: 'H(:mm)',
eventClick: function(calEvent, jsEvent, view) {
showEvent(calEvent.id);
},
eventRender: function(event, element, view) {
//console.log(view.name);
if (event.item['author-name']==null) return;
switch(view.name){
case "month":
element.find(".fc-event-title").html(
"<img src='{0}' style='height:10px;width:10px'>{1} : {2}".format(
event.item['author-avatar'],
event.item['author-name'],
event.title
));
break;
case "agendaWeek":
element.find(".fc-event-title").html(
"<img src='{0}' style='height:12px; width:12px'>{1}<p>{2}</p><p>{3}</p>".format(
event.item['author-avatar'],
event.item['author-name'],
event.item.desc,
event.item.location
));
break;
case "agendaDay":
element.find(".fc-event-title").html(
"<img src='{0}' style='height:24px;width:24px'>{1}<p>{2}</p><p>{3}</p>".format(
event.item['author-avatar'],
event.item['author-name'],
event.item.desc,
event.item.location
));
break;
}
}
});
// center on date
var args=location.href.replace(baseurl,"").split("/");
if (args.length>=4) {
$j("#events-calendar").fullCalendar('gotoDate',args[2] , args[3]-1);
}
// show event popup
var hash = location.hash.split("-")
if (hash.length==2 && hash[0]=="#link") showEvent(hash[1]);
}
if(window.aclType == "settings-head" || window.aclType == "photos_head" || window.aclType == "event_head") {
$j('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() {
var selstr;
$j('#contact_allow option:selected, #contact_deny option:selected, #group_allow option:selected, #group_deny option:selected').each( function() {
selstr = $j(this).text();
$j('#jot-perms-icon').removeClass('unlock').addClass('lock');
$j('#jot-public').hide();
});
if(selstr == null) {
$j('#jot-perms-icon').removeClass('lock').addClass('unlock');
$j('#jot-public').show();
}
}).trigger('change');
}
switch(window.autocompleteType) {
case 'msg-header':
var a = $j("#recip").autocomplete({
serviceUrl: baseurl + '/acl',
minChars: 2,
width: 350,
onSelect: function(value,data) {
$j("#recip-complete").val(data);
}
});
break;
case 'contacts-head':
var a = $j("#contacts-search").autocomplete({
serviceUrl: baseurl + '/acl',
minChars: 2,
width: 350,
});
a.setOptions({ params: { type: 'a' }});
break;
default:
break;
}
$j('#event-share-checkbox').change(function() {
if ($j('#event-share-checkbox').is(':checked')) {
$j('#acl-wrapper').show();
}
else {
$j('#acl-wrapper').hide();
}
}).trigger('change');
$j(".popupbox").click(function () {
var parent = $j( $j(this).attr('href') ).parent();
if (parent.css('display') == 'none') {
parent.show();
} else {
@ -49,17 +215,29 @@ $(document).ready(function() {
});
// update pending count //
$j(function(){
$j("nav").bind('nav-update', function(e,data){
var elm = $j('#pending-update');
var register = $j(data).find('register').text();
if (register=="0") { register=""; elm.hide();} else { elm.show(); }
elm.html(register);
});
});
function insertFormatting(comment,BBcode,id) {
var tmpStr = $("#comment-edit-text-" + id).val();
if(tmpStr == comment) {
tmpStr = "";
$("#comment-edit-text-" + id).addClass("comment-edit-text-full");
$("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
openMenu("comment-edit-submit-wrapper-" + id);
$("#comment-edit-text-" + id).val(tmpStr);
}
var tmpStr = $j("#comment-edit-text-" + id).val();
if(tmpStr == comment) {
tmpStr = "";
$j("#comment-edit-text-" + id).addClass("comment-edit-text-full");
$j("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
openMenu("comment-edit-submit-wrapper-" + id);
$j("#comment-edit-text-" + id).val(tmpStr);
}
textarea = document.getElementById("comment-edit-text-" +id);
if (document.selection) {
@ -81,52 +259,50 @@ function insertFormatting(comment,BBcode,id) {
}
function cmtBbOpen(id) {
$(".comment-edit-bb-" + id).show();
$j(".comment-edit-bb-" + id).show();
}
function cmtBbClose(id) {
$(".comment-edit-bb-" + id).hide();
$j(".comment-edit-bb-" + id).hide();
}
// TinyMCE stuff
// Needs to be in "jot-header.tpl" if the "$editselect" variable is used
var editor=false;
var textlen = 0;
var plaintext = 'none';//'$editselect';
var plaintext = 'none';//window.editSelect;
var ispublic = window.isPublic;
function initEditor(cb){
if (editor==false){
// $("#profile-jot-text-loading").show();
// $j("#profile-jot-text-loading").show();
if(plaintext == 'none') {
// $("#profile-jot-text-loading").hide();
$("#profile-jot-text").css({ 'height': 200, 'color': '#000' });
$("#profile-jot-text").contact_autocomplete(baseurl+"/acl");
// $j("#profile-jot-text-loading").hide();
$j("#profile-jot-text").css({ 'height': 200, 'color': '#000' });
$j("#profile-jot-text").contact_autocomplete(baseurl+"/acl");
editor = true;
/* $("a#jot-perms-icon").fancybox({
/* $j("a#jot-perms-icon").fancybox({
'transitionIn' : 'none',
'transitionOut' : 'none'
});*/
$("a#jot-perms-icon, a#settings-default-perms-menu").click(function () {
var parent = $("#profile-jot-acl-wrapper").parent();
$j("a#jot-perms-icon, a#settings-default-perms-menu").click(function () {
var parent = $j("#profile-jot-acl-wrapper").parent();
if (parent.css('display') == 'none') {
parent.show();
} else {
parent.hide();
}
// $("#profile-jot-acl-wrapper").parent().toggle();
// $j("#profile-jot-acl-wrapper").parent().toggle();
return false;
});
$(".jothidden").show();
$j(".jothidden").show();
if (typeof cb!="undefined") cb();
return;
}
/* tinyMCE.init({
theme : "advanced",
mode : "specific_textareas",
editor_selector: $editselect,
editor_selector: window.editSelect,
auto_focus: "profile-jot-text",
plugins : "bbcode,paste,autoresize, inlinepopups",
theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
@ -169,37 +345,37 @@ function initEditor(cb){
}
textlen = txt.length;
if(textlen != 0 && $('#jot-perms-icon').is('.unlock')) {
$('#profile-jot-desc').html(ispublic);
if(textlen != 0 && $j('#jot-perms-icon').is('.unlock')) {
$j('#profile-jot-desc').html(ispublic);
}
else {
$('#profile-jot-desc').html('&nbsp;');
$j('#profile-jot-desc').html('&nbsp;');
}
//Character count
if(textlen <= 140) {
$('#character-counter').removeClass('red');
$('#character-counter').removeClass('orange');
$('#character-counter').addClass('grey');
$j('#character-counter').removeClass('red');
$j('#character-counter').removeClass('orange');
$j('#character-counter').addClass('grey');
}
if((textlen > 140) && (textlen <= 420)) {
$('#character-counter').removeClass('grey');
$('#character-counter').removeClass('red');
$('#character-counter').addClass('orange');
$j('#character-counter').removeClass('grey');
$j('#character-counter').removeClass('red');
$j('#character-counter').addClass('orange');
}
if(textlen > 420) {
$('#character-counter').removeClass('grey');
$('#character-counter').removeClass('orange');
$('#character-counter').addClass('red');
$j('#character-counter').removeClass('grey');
$j('#character-counter').removeClass('orange');
$j('#character-counter').addClass('red');
}
$('#character-counter').text(textlen);
$j('#character-counter').text(textlen);
});
ed.onInit.add(function(ed) {
ed.pasteAsPlainText = true;
$("#profile-jot-text-loading").hide();
$(".jothidden").show();
$j("#profile-jot-text-loading").hide();
$j(".jothidden").show();
if (typeof cb!="undefined") cb();
});
@ -207,7 +383,7 @@ function initEditor(cb){
});
editor = true;
// setup acl popup
$("a#jot-perms-icon").fancybox({
$j("a#jot-perms-icon").fancybox({
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
}); */
@ -218,7 +394,364 @@ function initEditor(cb){
function enableOnUser(){
if (editor) return;
$(this).val("");
$j(this).val("");
initEditor();
}
function wallInitEditor() {
var plaintext = window.editSelect;
if(plaintext != 'none') {
tinyMCE.init({
theme : "advanced",
mode : "specific_textareas",
editor_selector: /(profile-jot-text|prvmail-text)/,
plugins : "bbcode,paste",
theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor",
theme_advanced_buttons2 : "",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "center",
theme_advanced_blockformats : "blockquote,code",
gecko_spellcheck : true,
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",
//Character count
theme_advanced_path : false,
setup : function(ed) {
ed.onInit.add(function(ed) {
ed.pasteAsPlainText = true;
var editorId = ed.editorId;
var textarea = $j('#'+editorId);
if (typeof(textarea.attr('tabindex')) != "undefined") {
$j('#'+editorId+'_ifr').attr('tabindex', textarea.attr('tabindex'));
textarea.attr('tabindex', null);
}
});
}
});
}
else
$j("#prvmail-text").contact_autocomplete(baseurl+"/acl");
}
function initCrop() {
function onEndCrop( coords, dimensions ) {
$( 'x1' ).value = coords.x1;
$( 'y1' ).value = coords.y1;
$( 'x2' ).value = coords.x2;
$( 'y2' ).value = coords.y2;
$( 'width' ).value = dimensions.width;
$( 'height' ).value = dimensions.height;
}
Event.observe( window, 'load', function() {
new Cropper.ImgWithPreview(
'croppa',
{
previewWrap: 'previewWrap',
minWidth: 175,
minHeight: 175,
maxWidth: 640,
maxHeight: 640,
ratioDim: { x: 100, y:100 },
displayOnInit: true,
onEndCrop: onEndCrop
});
});
}
function confirmDelete() { return confirm(window.delItem); }
function commentOpen(obj,id) {
if(obj.value == window.commentEmptyText) {
obj.value = "";
$j("#comment-edit-text-" + id).addClass("comment-edit-text-full");
$j("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
$j("#mod-cmnt-wrap-" + id).show();
openMenu("comment-edit-submit-wrapper-" + id);
}
}
function commentClose(obj,id) {
if(obj.value == "") {
obj.value = window.commentEmptyText;
$j("#comment-edit-text-" + id).removeClass("comment-edit-text-full");
$j("#comment-edit-text-" + id).addClass("comment-edit-text-empty");
$j("#mod-cmnt-wrap-" + id).hide();
closeMenu("comment-edit-submit-wrapper-" + id);
}
}
function commentInsert(obj,id) {
var tmpStr = $j("#comment-edit-text-" + id).val();
if(tmpStr == window.commentEmptyText) {
tmpStr = "";
$j("#comment-edit-text-" + id).addClass("comment-edit-text-full");
$j("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
openMenu("comment-edit-submit-wrapper-" + id);
}
var ins = $j(obj).html();
ins = ins.replace("&lt;","<");
ins = ins.replace("&gt;",">");
ins = ins.replace("&amp;","&");
ins = ins.replace("&quot;",'"');
$j("#comment-edit-text-" + id).val(tmpStr + ins);
}
function qCommentInsert(obj,id) {
var tmpStr = $j("#comment-edit-text-" + id).val();
if(tmpStr == window.commentEmptyText) {
tmpStr = "";
$j("#comment-edit-text-" + id).addClass("comment-edit-text-full");
$j("#comment-edit-text-" + id).removeClass("comment-edit-text-empty");
openMenu("comment-edit-submit-wrapper-" + id);
}
var ins = $j(obj).val();
ins = ins.replace("&lt;","<");
ins = ins.replace("&gt;",">");
ins = ins.replace("&amp;","&");
ins = ins.replace("&quot;",'"');
$j("#comment-edit-text-" + id).val(tmpStr + ins);
$j(obj).val("");
}
function showHideComments(id) {
if( $j("#collapsed-comments-" + id).is(":visible")) {
$j("#collapsed-comments-" + id).hide();
$j("#hide-comments-" + id).html(window.showMore);
}
else {
$j("#collapsed-comments-" + id).show();
$j("#hide-comments-" + id).html(window.showFewer);
}
}
/*function deleteCheckedItems() {
var checkedstr = '';
$j('.item-select').each( function() {
if($j(this).is(':checked')) {
if(checkedstr.length != 0) {
checkedstr = checkedstr + ',' + $j(this).val();
}
else {
checkedstr = $j(this).val();
}
}
});
$j.post('item', { dropitems: checkedstr }, function(data) {
window.location.reload();
});
}*/
function jotVideoURL() {
reply = prompt(window.vidURL);
if(reply && reply.length) {
addeditortext('[video]' + reply + '[/video]');
}
}
function jotAudioURL() {
reply = prompt(window.audURL);
if(reply && reply.length) {
addeditortext('[audio]' + reply + '[/audio]');
}
}
function jotGetLocation() {
reply = prompt(window.whereAreU, $j('#jot-location').val());
if(reply && reply.length) {
$j('#jot-location').val(reply);
}
}
function jotShare(id) {
if ($j('#jot-popup').length != 0) $j('#jot-popup').show();
$j('#like-rotator-' + id).show();
$j.get('share/' + id, function(data) {
if (!editor) $j("#profile-jot-text").val("");
initEditor(function(){
addeditortext(data);
$j('#like-rotator-' + id).hide();
$j(window).scrollTop(0);
});
});
}
function linkdropper(event) {
var linkFound = event.dataTransfer.types.contains("text/uri-list");
if(linkFound)
event.preventDefault();
}
switch(window.ajaxType) {
case 'jot-header':
function jotGetLink() {
reply = prompt(window.linkURL);
if(reply && reply.length) {
reply = bin2hex(reply);
$j('#profile-rotator').show();
$j.get('parse_url?binurl=' + reply, function(data) {
addeditortext(data);
$j('#profile-rotator').hide();
});
}
}
function linkdrop(event) {
var reply = event.dataTransfer.getData("text/uri-list");
event.target.textContent = reply;
event.preventDefault();
if(reply && reply.length) {
reply = bin2hex(reply);
$j('#profile-rotator').show();
$j.get('parse_url?binurl=' + reply, function(data) {
if (!editor) $j("#profile-jot-text").val("");
initEditor(function(){
addeditortext(data);
$j('#profile-rotator').hide();
});
});
}
}
break;
case 'msg-header':
case 'wallmsg-header':
// TINYMCE -- BAD
function jotGetLink() {
reply = prompt(window.linkURL);
if(reply && reply.length) {
$j('#profile-rotator').show();
$j.get('parse_url?url=' + reply, function(data) {
tinyMCE.execCommand('mceInsertRawHTML',false,data);
$j('#profile-rotator').hide();
});
}
}
function linkdrop(event) {
var reply = event.dataTransfer.getData("text/uri-list");
event.target.textContent = reply;
event.preventDefault();
if(reply && reply.length) {
$j('#profile-rotator').show();
$j.get('parse_url?url=' + reply, function(data) {
tinyMCE.execCommand('mceInsertRawHTML',false,data);
$j('#profile-rotator').hide();
});
}
}
break;
default:
break;
}
function showEvent(eventid) {
/* $j.get(
baseurl + '/events/?id='+eventid,
function(data){
$j.fancybox(data);
}
);*/
}
function itemTag(id) {
reply = prompt(window.term);
if(reply && reply.length) {
reply = reply.replace('#','');
if(reply.length) {
commentBusy = true;
$j('body').css('cursor', 'wait');
$j.get('tagger/' + id + '?term=' + reply, NavUpdate);
/*if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,3000);*/
liking = 1;
}
}
}
function itemFiler(id) {
$j.get('filer/', function(data){
var promptText = $j('#id_term_label', data).text();
reply = prompt(promptText);
if(reply && reply.length) {
commentBusy = true;
$j('body').css('cursor', 'wait');
$j.get('filer/' + id + '?term=' + reply, NavUpdate);
/* if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,3000);*/
liking = 1;
/* $j.fancybox.close();*/
}
});
/* var bordercolor = $j("input").css("border-color");
$j.get('filer/', function(data){
$j.fancybox(data);
$j("#id_term").keypress(function(){
$j(this).css("border-color",bordercolor);
})
$j("#select_term").change(function(){
$j("#id_term").css("border-color",bordercolor);
})
$j("#filer_save").click(function(e){
e.preventDefault();
reply = $j("#id_term").val();
if(reply && reply.length) {
commentBusy = true;
$j('body').css('cursor', 'wait');
$j.get('filer/' + id + '?term=' + reply);
if(timer) clearTimeout(timer);
timer = setTimeout(NavUpdate,3000);
liking = 1;
$j.fancybox.close();
} else {
$j("#id_term").css("border-color","#FF0000");
}
return false;
});
});
*/
}
function jotClearLocation() {
$j('#jot-coord').val('');
$j('#profile-nolocation-wrapper').hide();
}
function addeditortext(data) {
if(plaintext == 'none') {
var currentText = $j("#profile-jot-text").val();
$j("#profile-jot-text").val(currentText + data);
}
/*else
tinyMCE.execCommand('mceInsertRawHTML',false,data);*/
}
if(typeof window.geoTag === 'function') window.geoTag();