Files
Codiad/js/system.js
2012-10-08 12:43:03 -07:00

308 lines
8.4 KiB
JavaScript
Executable File

/*
* Copyright (c) Codiad & Kent Safranski (codiad.com), distributed
* as-is and without warranty under the MIT License. See
* [root]/license.txt for more. This information must remain intact.
*/
//////////////////////////////////////////////////////////////////////
// loadScript instead of getScript (checks and balances and shit...)
//////////////////////////////////////////////////////////////////////
jQuery.loadScript = function(url, arg1, arg2) {
var cache = true,
callback = null;
//arg1 and arg2 can be interchangable
if ($.isFunction(arg1)) {
callback = arg1;
cache = arg2 || cache;
} else {
cache = arg1 || cache;
callback = arg2 || callback;
}
var load = true;
//check all existing script tags in the page for the url
jQuery('script[type="text/javascript"]')
.each(function() {
return load = (url != $(this)
.attr('src'));
});
if (load) {
//didn't find it in the page, so load it
jQuery.ajax({
type: 'GET',
url: url,
success: callback,
dataType: 'script',
cache: cache
});
} else {
//already loaded so just call the callback
if (jQuery.isFunction(callback)) {
callback.call(this);
};
};
};
//////////////////////////////////////////////////////////////////////
// Init
//////////////////////////////////////////////////////////////////////
$(function() {
// Sliding sidebars
sidebars.init();
var handleWidth = 10;
$(window)
.on('load resize', function() {
if ($("#sb-left")
.css('left') !== 0 && !sidebars.user_lock) {
margin_l = handleWidth;
reduction = 2 * handleWidth;
} else {
margin_l = $("#sb-left")
.width();
reduction = margin_l + handleWidth;
}
$('#editor-region')
.css({
'margin-left': margin_l + 'px',
'width': ($('body')
.outerWidth() - reduction) + 'px',
'height': ($('body')
.outerHeight() - 25) + 'px'
});
});
$('#settings').click(function(){
modal.load(400, 'components/editor/dialog.php?action=settings');
modal.hide_overlay();
});
});
//////////////////////////////////////////////////////////////////////
// Parse JSEND Formatted Returns
//////////////////////////////////////////////////////////////////////
var jsend = {
parse: function(d) { // (Data)
var obj = $.parseJSON(d);
if (obj.status == 'error') {
message.error(obj.message);
return 'error';
} else {
return obj.data;
}
}
};
//////////////////////////////////////////////////////////////////////
// Modal
//////////////////////////////////////////////////////////////////////
var modal = {
load: function(w, u) { // (Width, URL)
$('#modal')
.css({
'top': '15%',
'left': '50%',
'width': w + 'px',
'margin-left': '-' + Math.ceil(w / 2) + 'px'
})
.draggable({
handle: '#drag-handle'
});
$('#modal-content')
.html('<div id="modal-loading"></div>');
$('#modal-content')
.load(u, function() {
// Fix for Firefox autofocus goofiness
$('input[autofocus="autofocus"]')
.focus();
});
$('#modal, #modal-overlay')
.fadeIn(200);
sidebars.modal_lock = true;
},
hide_overlay: function() {
$('#modal-overlay')
.hide();
},
unload: function() {
$('#modal-content form')
.die('submit'); // Prevent form bubbling
$('#modal, #modal-overlay')
.fadeOut(200);
$('#modal-content')
.html('');
sidebars.modal_lock = false;
if (!sidebars.user_lock) { // Slide sidebar back
$('#sb-left')
.animate({
'left': '-290px'
}, 300, 'easeOutQuart');
$('#editor-region')
.animate({
'margin-left': '10px',
'width': ($('body')
.outerWidth() - 20) + 'px'
}, 300, 'easeOutQuart');
}
}
};
//////////////////////////////////////////////////////////////////////
// User Alerts / Messages
//////////////////////////////////////////////////////////////////////
autoclose = null;
var message = {
success: function(m) { // (Message)
$('#message')
.removeClass('error')
.addClass('success')
.html(m);
this.show();
},
error: function(m) { // (Message)
$('#message')
.removeClass('success')
.addClass('error')
.html(m);
this.show();
},
show: function() {
clearTimeout(autoclose);
$('#message')
.fadeIn(300);
autoclose = setTimeout(function() {
message.hide();
}, 2000);
},
hide: function() {
$('#message')
.fadeOut(300);
}
};
//////////////////////////////////////////////////////////////////////
// Workspace Resize
//////////////////////////////////////////////////////////////////////
var sidebars = {
user_lock: true,
modal_lock: false,
init: function() {
$('#lock-left-sidebar')
.on('click', function() {
if (sidebars.user_lock) {
sidebars.user_lock = false;
$('#lock-left-sidebar')
.html('V');
} else {
sidebars.user_lock = true;
$('#lock-left-sidebar')
.html('U');
}
});
// Left Column Slider
$("#sb-left")
.hover(function() {
var timeout_r = $(this)
.data("timeout_r");
if (timeout_r) {
clearTimeout(timeout_r);
}
var sbarWidth = $("#sb-left")
.width();
$('#editor-region')
.animate({
'margin-left': sbarWidth + 'px',
'width': ($('body')
.outerWidth() - sbarWidth - 10) + 'px'
}, 300, 'easeOutQuart');
$(this)
.animate({
'left': '0px'
}, 300, 'easeOutQuart');
}, function() {
var sbarWidth = $("#sb-left")
.width();
$(this)
.data("timeout_r", setTimeout($.proxy(function() {
if (!sidebars.user_lock && !sidebars.modal_lock) { // Check locks
$(this)
.animate({
'left': (-sbarWidth + 10) + "px"
}, 300, 'easeOutQuart');
$('#editor-region')
.animate({
'margin-left': '10px',
'width': ($('body')
.outerWidth() - 20) + 'px'
}, 300, 'easeOutQuart');
}
}, this), 500));
});
// Right Column Slider
$("#sb-right")
.hover(function() {
var timeout_r = $(this)
.data("timeout_r");
if (timeout_r) {
clearTimeout(timeout_r);
}
$('#editor-region')
.animate({
'margin-right': '200px'
}, 300, 'easeOutQuart');
$(this)
.animate({
'right': '0px'
}, 300, 'easeOutQuart');
}, function() {
$(this)
.data("timeout_r", setTimeout($.proxy(function() {
$(this)
.animate({
'right': '-190px'
}, 300, 'easeOutQuart');
$('#editor-region')
.animate({
'margin-right': '10px'
}, 300, 'easeOutQuart');
}, this), 500));
});
$("#sb-left .sidebar-handle")
.draggable({
axis: 'x',
drag: function(event, ui) {
newWidth = ui.position.left;
$("#sb-left")
.width(newWidth + 10);
},
stop: function() {
$(window)
.resize();
}
});
}
};