mirror of
https://github.com/Codiad/Codiad.git
synced 2026-03-07 09:46:47 +01:00
308 lines
8.4 KiB
JavaScript
Executable File
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();
|
|
}
|
|
});
|
|
}
|
|
|
|
};
|