/* ------------------------------------------------------------------------------
*
* # jQuery UI interactions
*
* Specific JS code additions for jqueryui_interactions.html page
*
* Version: 1.0
* Latest update: Nov 12, 2015
*
* ---------------------------------------------------------------------------- */
$(function() {
// Draggable
// -------------------------
// Basic setup
$(".draggable-element").draggable({
containment: "#draggable-default-container"
});
//
// Constrain movement
//
// Both
$("#draggable-move-both").draggable({
containment: "#draggable-containment-container"
});
// Vertical
$("#draggable-move-vertical").draggable({
containment: "#draggable-containment-container",
axis: "y"
});
// Horizontal
$("#draggable-move-horizontal").draggable({
containment: "#draggable-containment-container",
axis: "x"
});
//
// Revert position
//
// Element
$("#draggable-revert-element").draggable({
containment: "#draggable-revert-container",
revert: true
});
// Clone helper
$("#draggable-revert-clone").draggable({
containment: "#draggable-revert-container",
revert: true,
helper: "clone"
});
// Speed
$("#draggable-revert-speed").draggable({
containment: "#draggable-revert-container",
revert: true,
revertDuration: 1500
});
//
// Cursors
//
// Move cursor
$("#draggable-cursor-move").draggable({
containment: "#draggable-cursor-container",
cursor: "move"
});
// Crosshair cursor
$( "#draggable-cursor-crosshair" ).draggable({
containment: "#draggable-cursor-container",
cursor: "crosshair"
});
// Bottom cursor
$( "#draggable-cursor-bottom" ).draggable({
containment: "#draggable-cursor-container",
cursorAt: {
bottom: 0
}
});
//
// Handles
//
// Text
$( "#draggable-handle-text" ).draggable({
containment: "#draggable-handle-container",
handle: "span"
});
// Icon
$( "#draggable-handle-icon" ).draggable({
containment: "#draggable-handle-container",
handle: ".handle-icon"
});
// Exception
$( "#draggable-handle-exception" ).draggable({
containment: "#draggable-handle-container",
cancel: "span"
});
//
// Events
//
// Define elements
var $start_counter = $("#draggable-event-start"),
$drag_counter = $("#draggable-event-drag"),
$stop_counter = $("#draggable-event-stop"),
counts = [0, 0, 0];
// Start event
$start_counter.draggable({
containment: "#draggable-events-container",
start: function() {
counts[0]++;
updateCounterStatus( $start_counter, counts[0]);
}
});
// Drag event
$drag_counter.draggable({
containment: "#draggable-events-container",
drag: function() {
counts[1]++;
updateCounterStatus($drag_counter, counts[1]);
}
});
// Stop event
$stop_counter.draggable({
containment: "#draggable-events-container",
stop: function() {
counts[2]++;
updateCounterStatus($stop_counter, counts[2]);
}
});
// Update counter text
function updateCounterStatus( $event_counter, new_count ) {
$( ".event-count", $event_counter ).text( new_count );
}
// Droppable
// -------------------------
//
// Basic functionality
//
// Drag
$("#droppable-basic-element").draggable({
containment: "#droppable-basic-container"
});
// Drop
$("#droppable-basic-target").droppable({
drop: function(event, ui) {
$(this).addClass("bg-success-400 border-success-400 text-white").html("Dropped!");
}
});
//
// Accept drop
//
// Drag
$("#droppable-accept-yes, #droppable-accept-no").draggable({
containment: "#droppable-accept-container"
});
// Drop
$("#droppable-accept-target").droppable({
accept: "#droppable-accept-yes",
drop: function(event, ui) {
$(this).addClass("bg-success-400 border-success-400 text-white").html("Dropped!");
}
});
//
// Revert draggable position
//
// Drag (revert on drop)
$("#droppable-revert-drop").draggable({
containment: "#droppable-revert-container",
revert: "valid"
});
// Drag (revert always except drop)
$("#droppable-revert-except").draggable({
containment: "#droppable-revert-container",
revert: "invalid"
});
// Drop
$("#droppable-revert-target").droppable({
drop: function(event, ui) {
$(this).addClass("bg-success-400 border-success-400 text-white").html("Dropped!");
}
});
//
// Visual feedback
//
// Drag
$("#droppable-visual-element").draggable({
containment: "#droppable-visual-container"
});
// Active drop
$("#droppable-visual-target-active").droppable({
containment: '#droppable-visual-container',
accept: "#droppable-visual-element",
activeClass: "bg-slate border-slate text-white",
drop: function(event, ui) {
$(this).addClass("bg-success-400 border-success-400 text-white").html("Dropped!");
}
});
// Hover drop
$("#droppable-visual-target-hover").droppable({
containment: '#droppable-visual-container',
hoverClass: "bg-blue border-blue text-white",
drop: function(event, ui) {
$(this).addClass("bg-teal-400 border-teal-400 text-white").html("Dropped!");
}
});
// Resizable
// -------------------------
// Basic functionality
$("#resizable-basic-element").resizable({
minWidth: 50,
minHeight: 50
});
// Animated resize
$("#resizable-animate-element").resizable({
minWidth: 50,
minHeight: 50,
animate: true
});
// Preserve aspect ratio
$("#resizable-ratio-element").resizable({
minWidth: 50,
minHeight: 50,
aspectRatio: 16 / 9
});
// Synchronous resize
$("#resizable-sync-element1").resizable({
minWidth: 50,
minHeight: 50,
alsoResize: "#resizable-sync-element2"
});
$("#resizable-sync-element2").resizable({
minWidth: 50,
minHeight: 50,
alsoResize: "#resizable-sync-element1"
});
// Selectable
// -------------------------
// Basic functionality
$("#selectable-basic").selectable();
// Serialize
$("#selectable-serialize").selectable({
stop: function() {
var result = $("#select-result").empty();
$(".ui-selected", this).each(function() {
var index = $("#selectable-serialize li").index(this);
result.append(" #" + (index + 1));
});
}
});
// Sortable
// -------------------------
// Basic functionality
$("#sortable-list-basic").sortable();
$("#sortable-list-basic").disableSelection();
// Placeholder
$( "#sortable-list-placeholder" ).sortable({
placeholder: "sortable-placeholder",
start: function(e, ui){
ui.placeholder.height(ui.item.outerHeight());
}
});
$( "#sortable-list-placeholder" ).disableSelection();
// Connected lists
$("#sortable-list-first, #sortable-list-second").sortable({
connectWith: ".selectable-demo-connected"
}).disableSelection();
//
// Include/exclude items
//
// Specify sort items
$("#sortable-list-specify").sortable({
items: "li:not(.ui-state-disabled)"
});
// Exclude items
$("#sortable-list-cancel").sortable({
cancel: ".ui-state-disabled"
});
// Disable selections
$("#sortable-list-specify li, #sortable-list-cancel li").disableSelection();
});