You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
702 lines
17 KiB
702 lines
17 KiB
/* ------------------------------------------------------------------------------ |
|
* |
|
* # jQuery UI forms |
|
* |
|
* Specific JS code additions for jqueryui_forms.html page |
|
* |
|
* Version: 1.0 |
|
* Latest update: Nov 12, 2015 |
|
* |
|
* ---------------------------------------------------------------------------- */ |
|
|
|
$(function() { |
|
|
|
|
|
// Date picker |
|
// ------------------------------ |
|
|
|
// Default functionality |
|
$(".datepicker").datepicker(); |
|
|
|
|
|
// Dates in other months |
|
$(".datepicker-dates").datepicker({ |
|
showOtherMonths: true, |
|
selectOtherMonths: true |
|
}); |
|
|
|
|
|
// Button bar |
|
$(".datepicker-button-bar").datepicker({ |
|
showButtonPanel: true |
|
}); |
|
|
|
|
|
// Month and year menu |
|
$(".datepicker-menus").datepicker({ |
|
changeMonth: true, |
|
changeYear: true |
|
}); |
|
|
|
|
|
// Multiple months |
|
$(".datepicker-multiple").datepicker({ |
|
numberOfMonths: 3, |
|
showButtonPanel: true |
|
}); |
|
|
|
|
|
// Icon trigger |
|
$(".datepicker-icon").datepicker({ |
|
showOn: "button", |
|
buttonImage: "assets/images/ui/datepicker_trigger.png", |
|
buttonImageOnly: true |
|
}); |
|
|
|
|
|
// Populate alternate field |
|
$(".datepicker-alternate").datepicker({ |
|
altField: "#alternate", |
|
altFormat: "DD, d MM, yy" |
|
}); |
|
|
|
|
|
// Restrict date range |
|
$(".datepicker-restrict").datepicker({ |
|
minDate: -20, |
|
maxDate: "+1M +10D" |
|
}); |
|
|
|
|
|
// Show week number |
|
$(".datepicker-weeks").datepicker({ |
|
showWeek: true, |
|
firstDay: 1 |
|
}); |
|
|
|
|
|
// |
|
// Date range |
|
// |
|
|
|
// From |
|
$("#range-from").datepicker({ |
|
defaultDate: "+1w", |
|
numberOfMonths: 3, |
|
onClose: function( selectedDate ) { |
|
$( "#range-to" ).datepicker( "option", "minDate", selectedDate ); |
|
} |
|
}); |
|
|
|
// To |
|
$("#range-to").datepicker({ |
|
defaultDate: "+1w", |
|
numberOfMonths: 3, |
|
onClose: function( selectedDate ) { |
|
$( "#range-from" ).datepicker( "option", "maxDate", selectedDate ); |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Format date |
|
// |
|
|
|
// Initialize |
|
$(".datepicker-format").datepicker(); |
|
|
|
// Format date on change |
|
$("#format").change(function() { |
|
$(".datepicker-format").datepicker("option", "dateFormat", $(this).val()); |
|
}); |
|
|
|
|
|
// |
|
// Format date |
|
// |
|
|
|
// Initialize |
|
$(".datepicker-animation").datepicker(); |
|
|
|
// Animate picker on change |
|
$("#anim").change(function() { |
|
$(".datepicker-animation").datepicker("option", "showAnim", $(this).val()); |
|
}); |
|
|
|
|
|
|
|
|
|
// Autocomplete |
|
// ------------------------------ |
|
|
|
// Add demo data |
|
var availableTags = [ |
|
"ActionScript", |
|
"AppleScript", |
|
"Asp", |
|
"BASIC", |
|
"C", |
|
"C++", |
|
"Clojure", |
|
"COBOL", |
|
"ColdFusion", |
|
"Erlang", |
|
"Fortran", |
|
"Groovy", |
|
"Haskell", |
|
"Java", |
|
"JavaScript", |
|
"Lisp", |
|
"Perl", |
|
"PHP", |
|
"Python", |
|
"Ruby", |
|
"Scala", |
|
"Scheme" |
|
]; |
|
|
|
// Basic example |
|
$("#ac-basic").autocomplete({ |
|
source: availableTags |
|
}); |
|
|
|
|
|
// |
|
// Accent folding |
|
// |
|
|
|
// Add data |
|
var names = [ "Jörn Zaefferer", "Scott González", "John Resig" ]; |
|
|
|
// Map |
|
var accentMap = { |
|
"á": "a", |
|
"ö": "o" |
|
}; |
|
|
|
// Normalize |
|
var normalize = function(term) { |
|
var ret = ""; |
|
for (var i = 0; i < term.length; i++) { |
|
ret += accentMap[ term.charAt(i) ] || term.charAt(i); |
|
} |
|
return ret; |
|
}; |
|
|
|
// Init autocomplete |
|
$("#ac-folding").autocomplete({ |
|
source: function(request, response) { |
|
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); |
|
response($.grep(names, function(value) { |
|
value = value.label || value.value || value; |
|
return matcher.test(value) || matcher.test(normalize(value)); |
|
})); |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Categories |
|
// |
|
|
|
// Custom widget |
|
$.widget("custom.catcomplete", $.ui.autocomplete, { |
|
_create: function() { |
|
this._super(); |
|
this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); |
|
}, |
|
_renderMenu: function(ul, items) { |
|
var that = this, |
|
currentCategory = ""; |
|
|
|
$.each( items, function(index, item) { |
|
var li; |
|
if (item.category != currentCategory) { |
|
ul.append("<li class='ui-autocomplete-category'>" + item.category + "</li>"); |
|
currentCategory = item.category; |
|
} |
|
li = that._renderItemData(ul, item); |
|
if (item.category) { |
|
li.attr("aria-label", item.category + " : " + item.label); |
|
} |
|
}); |
|
} |
|
}); |
|
|
|
// Demo data |
|
var data = [ |
|
{label: "anders", category: ""}, |
|
{label: "andreas", category: ""}, |
|
{label: "antal", category: ""}, |
|
{label: "annhhx10", category: "Products"}, |
|
{label: "annk K12", category: "Products"}, |
|
{label: "annttop C13", category: "Products"}, |
|
{label: "anders andersson", category: "People"}, |
|
{label: "andreas andersson", category: "People"}, |
|
{label: "andreas johnson", category: "People"} |
|
]; |
|
|
|
// Initialize autocomplete |
|
$( "#ac-categories" ).catcomplete({ |
|
delay: 0, |
|
source: data |
|
}); |
|
|
|
|
|
// |
|
// Custom data and display |
|
// |
|
|
|
// Demo data |
|
var projects = [ |
|
{ |
|
label: "Limitless", |
|
desc: "responsive web application kit" |
|
}, |
|
{ |
|
label: "Londinium", |
|
desc: "responsive bootstrap 3 admin template" |
|
}, |
|
{ |
|
label: "It's Brain", |
|
desc: "Bootstrap based premium admin template" |
|
} |
|
]; |
|
|
|
// Initialize autocomplete |
|
$("#ac-custom").autocomplete({ |
|
minLength: 0, |
|
source: projects, |
|
focus: function( event, ui ) { |
|
$("#ac-custom").val(ui.item.label); |
|
return false; |
|
}, |
|
select: function( event, ui ) { |
|
$("#ac-custom").val(ui.item.label); |
|
return false; |
|
} |
|
}) |
|
.autocomplete("instance")._renderItem = function(ul, item) { |
|
return $("<li>").append("<span class='text-semibold'>" + item.label + '</span>' + "<br>" + '<span class="text-muted text-size-small">' + item.desc + '</span>').appendTo(ul); |
|
}; |
|
|
|
|
|
// |
|
// Custom data and display |
|
// |
|
|
|
// Split values |
|
function split(val) { |
|
return val.split(/,\s*/); |
|
} |
|
|
|
// Extract the last term |
|
function extractLast(term) { |
|
return split(term).pop(); |
|
} |
|
|
|
// Configure and initialize |
|
$("#ac-multiple").bind("keydown", function(event) { |
|
if (event.keyCode === $.ui.keyCode.TAB && $(this).autocomplete("instance").menu.active) { |
|
event.preventDefault(); |
|
} |
|
}) |
|
.autocomplete({ |
|
minLength: 0, |
|
source: function(request, response) { |
|
|
|
// Delegate back to autocomplete, but extract the last term |
|
response( $.ui.autocomplete.filter( |
|
availableTags, extractLast( request.term ) ) ); |
|
}, |
|
focus: function() { |
|
|
|
// Prevent value inserted on focus |
|
return false; |
|
}, |
|
select: function(event, ui) { |
|
var terms = split(this.value); |
|
|
|
// Remove the current input |
|
terms.pop(); |
|
|
|
// Add the selected item |
|
terms.push(ui.item.value); |
|
|
|
// Add placeholder to get the comma-and-space at the end |
|
terms.push(""); |
|
this.value = terms.join(", "); |
|
return false; |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Remote data |
|
// |
|
|
|
// Remote data |
|
$("#ac-remote").autocomplete({ |
|
minLength: 2, |
|
source: "assets/demo_data/jquery_ui/autocomplete.php", |
|
search: function() { |
|
$(this).parent().addClass('ui-autocomplete-processing'); |
|
}, |
|
open: function() { |
|
$(this).parent().removeClass('ui-autocomplete-processing'); |
|
} |
|
}); |
|
|
|
// Remote data with caching |
|
var cache = {}; |
|
$("#ac-caching").autocomplete({ |
|
minLength: 2, |
|
source: function(request, response) { |
|
var term = request.term; |
|
if (term in cache) { |
|
response(cache[term]); |
|
return; |
|
} |
|
|
|
$.getJSON("assets/demo_data/jquery_ui/autocomplete.php", request, function(data, status, xhr) { |
|
cache[ term ] = data; |
|
response(data); |
|
}); |
|
}, |
|
search: function() { |
|
$(this).parent().addClass('ui-autocomplete-processing'); |
|
}, |
|
open: function() { |
|
$(this).parent().removeClass('ui-autocomplete-processing'); |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Combo box |
|
// |
|
|
|
// Configure custom widget |
|
$.widget("custom.combobox", { |
|
_create: function() { |
|
this.wrapper = $("<div>").addClass("custom-combobox input-group").insertAfter(this.element); |
|
this.element.hide(); |
|
this._createAutocomplete(); |
|
this._createShowAllButton(); |
|
}, |
|
_createAutocomplete: function() { |
|
var selected = this.element.children(":selected"), |
|
value = selected.val() ? selected.text() : ""; |
|
|
|
var input = this.input = $("<input>") |
|
.appendTo(this.wrapper) |
|
.val(value) |
|
.attr("title", "") |
|
.attr("placeholder", "Search") |
|
.addClass("form-control") |
|
.autocomplete({ |
|
delay: 0, |
|
minLength: 0, |
|
source: $.proxy(this, "_source") |
|
}); |
|
|
|
this._on(this.input, { |
|
autocompleteselect: function( event, ui ) { |
|
ui.item.option.selected = true; |
|
this._trigger("select", event, { |
|
item: ui.item.option |
|
}); |
|
}, |
|
|
|
autocompletechange: "_removeIfInvalid" |
|
}); |
|
}, |
|
_createShowAllButton: function() { |
|
var input = this.input, |
|
wasOpen = false; |
|
|
|
// Add input group button |
|
var wrapper2 = $("<span>").attr("class", "input-group-btn").appendTo(this.wrapper); |
|
|
|
// Append fonr control icon |
|
this.wrapper.append('<div class="form-control-feedback"><i class="icon-search4 text-size-base"></i></div>'); |
|
|
|
// Link |
|
$( "<a>" ) |
|
.attr( "tabIndex", -1 ) |
|
.appendTo( wrapper2 ) |
|
.button({ |
|
icons: { |
|
primary: "icon-arrow-down12" |
|
}, |
|
text: false |
|
}) |
|
.removeClass( "" ) |
|
.addClass( "btn btn-default btn-icon" ) |
|
.mousedown(function() { |
|
wasOpen = input.autocomplete( "widget" ).is( ":visible" ); |
|
}) |
|
.click(function() { |
|
input.focus(); |
|
|
|
// Close if already visible |
|
if (wasOpen) { |
|
return; |
|
} |
|
|
|
// Pass empty string as value to search for, displaying all results |
|
input.autocomplete( "search", "" ); |
|
}); |
|
}, |
|
_source: function( request, response ) { |
|
var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); |
|
response( this.element.children("option").map(function() { |
|
var text = $(this).text(); |
|
if (this.value && (!request.term || matcher.test(text))) |
|
return { |
|
label: text, |
|
value: text, |
|
option: this |
|
}; |
|
}) |
|
); |
|
}, |
|
_removeIfInvalid: function( event, ui ) { |
|
|
|
// Selected an item, nothing to do |
|
if (ui.item) { |
|
return; |
|
} |
|
|
|
// Search for a match (case-insensitive) |
|
var value = this.input.val(), |
|
valueLowerCase = value.toLowerCase(), |
|
valid = false; |
|
|
|
this.element.children("option").each(function() { |
|
if ($(this).text().toLowerCase() === valueLowerCase) { |
|
this.selected = valid = true; |
|
return false; |
|
} |
|
}); |
|
|
|
// Found a match, nothing to do |
|
if (valid) { |
|
return; |
|
} |
|
|
|
// Remove invalid value |
|
this.input.val("").attr("title", value + " didn't match any item"); |
|
|
|
this.element.val(""); |
|
this._delay(function() { |
|
this.input.tooltip("close").attr("title", ""); |
|
}, 2500); |
|
this.input.autocomplete("instance").term = ""; |
|
}, |
|
_destroy: function() { |
|
this.wrapper.remove(); |
|
this.element.show(); |
|
} |
|
}); |
|
|
|
// Initialize |
|
$("#ac-combo").combobox(); |
|
|
|
|
|
|
|
|
|
// Select menu |
|
// ------------------------------ |
|
|
|
// Basic select |
|
$(".select-basic").selectmenu({ |
|
width: '100%' |
|
}); |
|
|
|
|
|
// Optgroups example |
|
$("#select-optgroups").selectmenu({ |
|
width: '100%' |
|
}); |
|
|
|
|
|
// Default width |
|
$("#select-width").selectmenu(); |
|
|
|
|
|
// Disabled select |
|
$("#select-disabled").selectmenu({ |
|
width: '100%', |
|
disabled: true |
|
}); |
|
|
|
|
|
// |
|
// Select with icons |
|
// |
|
|
|
// Custom widget configuration |
|
$.widget("custom.iconselectmenu", $.ui.selectmenu, { |
|
_renderItem: function(ul, item) { |
|
var li = $("<li>", {text: item.label}); |
|
|
|
if (item.disabled) { |
|
li.addClass("ui-state-disabled"); |
|
} |
|
|
|
$("<i>", { |
|
style: item.element.attr("data-style"), |
|
"class": item.element.attr("data-icon") |
|
}).prependTo(li); |
|
|
|
return li.appendTo(ul); |
|
} |
|
}); |
|
|
|
// Initialize |
|
$("#select-icons").iconselectmenu({width: '100%'}).iconselectmenu("menuWidget"); |
|
|
|
|
|
// |
|
// Select with images |
|
// |
|
|
|
// Custom widget configuration |
|
$.widget("custom.imageselectmenu", $.ui.selectmenu, { |
|
_renderItem: function(ul, item) { |
|
var li = $("<li>", {text: item.label}); |
|
|
|
if (item.disabled) { |
|
li.addClass("ui-state-disabled"); |
|
} |
|
|
|
$("<span>", { |
|
style: item.element.attr("data-style"), |
|
"class": item.element.attr("data-class") |
|
}).prependTo(li); |
|
|
|
return li.appendTo(ul); |
|
} |
|
}); |
|
|
|
// Initialize |
|
$("#select-images").imageselectmenu({width: '100%'}).imageselectmenu("menuWidget").addClass("ui-selectmenu-images"); |
|
|
|
|
|
|
|
|
|
// Spinners |
|
// ------------------------------ |
|
|
|
// Basic spinner |
|
$("#spinner-basic").spinner(); |
|
|
|
|
|
// Disabled spinner |
|
$("#spinner-disabled").spinner({ |
|
disabled: true |
|
}); |
|
|
|
|
|
// Spinner min/max limits |
|
$("#spinner-limits").spinner({ |
|
min: 90, |
|
max: 110, |
|
start: 100 |
|
}); |
|
|
|
|
|
// Spinner step |
|
$("#spinner-step").spinner({ |
|
step: 20, |
|
start: 500 |
|
}); |
|
|
|
|
|
// Spinner overflow |
|
$("#spinner-overflow").spinner({ |
|
spin: function(event, ui) { |
|
if (ui.value > 10) { |
|
$(this).spinner("value", -10); |
|
return false; |
|
} |
|
else if (ui.value < -10) { |
|
$(this).spinner("value", 10); |
|
return false; |
|
} |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Currency spinner |
|
// |
|
|
|
// Culture |
|
$("#spinner-currency-culture").on('selectmenuchange', function() { |
|
$("#spinner-currency").spinner("option", "culture", $(this).val()); |
|
}); |
|
|
|
// Initialize |
|
$("#spinner-currency").spinner({ |
|
start: 1000, |
|
numberFormat: "C" |
|
}); |
|
|
|
|
|
// |
|
// Decimal spinner |
|
// |
|
|
|
// Culture |
|
$( "#spinner-decimal-culture" ).on('selectmenuchange', function() { |
|
var current = $("#spinner-decimal").spinner("value"); |
|
Globalize.culture( $(this).val() ); |
|
$("#spinner-decimal").spinner("value", current); |
|
}); |
|
|
|
// Initialize |
|
$("#spinner-decimal").spinner({ |
|
step: 0.01, |
|
numberFormat: "n" |
|
}); |
|
|
|
|
|
// |
|
// Time spinner |
|
// |
|
|
|
// Configure custom widget |
|
$.widget("ui.timespinner", $.ui.spinner, { |
|
options: { |
|
step: 60 * 1000, // seconds |
|
page: 60 // hours |
|
}, |
|
_parse: function(value) { |
|
if (typeof value === "string") { |
|
|
|
// Already a timestamp |
|
if (Number(value) == value) { |
|
return Number(value); |
|
} |
|
return +Globalize.parseDate(value); |
|
} |
|
return value; |
|
}, |
|
_format: function(value) { |
|
return Globalize.format(new Date(value), "t"); |
|
} |
|
}); |
|
|
|
// Culture |
|
$("#spinner-time-culture").on('selectmenuchange', function() { |
|
var current = $("#spinner-time").timespinner("value"); |
|
Globalize.culture($(this).val()); |
|
$("#spinner-time").timespinner("value", current); |
|
}); |
|
|
|
// Initialize |
|
$("#spinner-time").timespinner(); |
|
|
|
});
|
|
|