/* ------------------------------------------------------------------------------
*
* # 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("
" + item.category + "");
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 $("").append("" + item.label + '' + "
" + '' + item.desc + '').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 = $("").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 = $("
")
.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 = $("
").attr("class", "input-group-btn").appendTo(this.wrapper);
// Append fonr control icon
this.wrapper.append('
');
// Link
$( "" )
.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 = $("", {text: item.label});
if (item.disabled) {
li.addClass("ui-state-disabled");
}
$("", {
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 = $("", {text: item.label});
if (item.disabled) {
li.addClass("ui-state-disabled");
}
$("", {
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();
});