var FormComponents = function () {
|
|
|
var handleBootstrapTouchSpin = function() {
|
|
$("#touchspin_demo1").TouchSpin({
|
inputGroupClass: 'input-medium',
|
spinUpClass: 'green',
|
spinDownClass: 'green',
|
min: -1000000000,
|
max: 1000000000,
|
stepinterval: 50,
|
maxboostedstep: 10000000,
|
prefix: '$'
|
});
|
|
$("#touchspin_demo2").TouchSpin({
|
inputGroupClass: 'input-medium',
|
spinUpClass: 'blue',
|
spinDownClass: 'blue',
|
min: 0,
|
max: 100,
|
step: 0.1,
|
decimals: 2,
|
boostat: 5,
|
maxboostedstep: 10,
|
postfix: '%'
|
});
|
}
|
|
var handleBootstrapMaxlength = function() {
|
$('#maxlength_defaultconfig').maxlength({
|
limitReachedClass: "label label-danger",
|
})
|
|
$('#maxlength_thresholdconfig').maxlength({
|
limitReachedClass: "label label-danger",
|
threshold: 20
|
});
|
|
$('#maxlength_alloptions').maxlength({
|
alwaysShow: true,
|
warningClass: "label label-success",
|
limitReachedClass: "label label-danger",
|
separator: ' out of ',
|
preText: 'You typed ',
|
postText: ' chars available.',
|
validate: true
|
});
|
|
$('#maxlength_textarea').maxlength({
|
limitReachedClass: "label label-danger",
|
alwaysShow: true
|
});
|
|
$('#maxlength_placement').maxlength({
|
limitReachedClass: "label label-danger",
|
alwaysShow: true,
|
placement: App.isRTL() ? 'top-right' : 'top-left'
|
});
|
}
|
|
var handleSpinners = function () {
|
$('#spinner1').spinner();
|
$('#spinner2').spinner({disabled: true});
|
$('#spinner3').spinner({value:0, min: 0, max: 10});
|
$('#spinner4').spinner({value:0, step: 5, min: 0, max: 200});
|
}
|
|
var handleWysihtml5 = function () {
|
if (!jQuery().wysihtml5) {
|
return;
|
}
|
|
if ($('.wysihtml5').size() > 0) {
|
$('.wysihtml5').wysihtml5({
|
"stylesheets": ["assets/plugins/bootstrap-wysihtml5/wysiwyg-color.css"]
|
});
|
}
|
}
|
|
var handleTagsInput = function () {
|
if (!jQuery().tagsInput) {
|
return;
|
}
|
$('#tags_1').tagsInput({
|
width: 'auto',
|
'onAddTag': function () {
|
//alert(1);
|
},
|
});
|
$('#tags_2').tagsInput({
|
width: 300
|
});
|
}
|
|
var handleDatePickers = function () {
|
|
if (jQuery().datepicker) {
|
$('.date-picker').datepicker({
|
rtl: App.isRTL(),
|
autoclose: true
|
});
|
$('body').removeClass("modal-open"); // fix bug when inline picker is used in modal
|
}
|
}
|
|
var handleTimePickers = function () {
|
|
if (jQuery().timepicker) {
|
$('.timepicker-default').timepicker({
|
autoclose: true
|
});
|
$('.timepicker-24').timepicker({
|
autoclose: true,
|
minuteStep: 1,
|
showSeconds: true,
|
showMeridian: false
|
});
|
}
|
}
|
|
var handleDateRangePickers = function () {
|
if (!jQuery().daterangepicker) {
|
return;
|
}
|
|
$('#defaultrange').daterangepicker({
|
opens: (App.isRTL() ? 'left' : 'right'),
|
format: 'MM/DD/YYYY',
|
separator: ' to ',
|
startDate: moment().subtract('days', 29),
|
endDate: moment(),
|
minDate: '01/01/2012',
|
maxDate: '12/31/2014',
|
},
|
function (start, end) {
|
console.log("Callback has been called!");
|
$('#defaultrange input').val(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
|
}
|
);
|
|
$('#reportrange').daterangepicker({
|
opens: (App.isRTL() ? 'left' : 'right'),
|
startDate: moment().subtract('days', 29),
|
endDate: moment(),
|
minDate: '01/01/2012',
|
maxDate: '12/31/2014',
|
dateLimit: {
|
days: 60
|
},
|
showDropdowns: true,
|
showWeekNumbers: true,
|
timePicker: false,
|
timePickerIncrement: 1,
|
timePicker12Hour: true,
|
ranges: {
|
'Today': [moment(), moment()],
|
'Yesterday': [moment().subtract('days', 1), moment().subtract('days', 1)],
|
'Last 7 Days': [moment().subtract('days', 6), moment()],
|
'Last 30 Days': [moment().subtract('days', 29), moment()],
|
'This Month': [moment().startOf('month'), moment().endOf('month')],
|
'Last Month': [moment().subtract('month', 1).startOf('month'), moment().subtract('month', 1).endOf('month')]
|
},
|
buttonClasses: ['btn'],
|
applyClass: 'green',
|
cancelClass: 'default',
|
format: 'MM/DD/YYYY',
|
separator: ' to ',
|
locale: {
|
applyLabel: 'Apply',
|
fromLabel: 'From',
|
toLabel: 'To',
|
customRangeLabel: 'Custom Range',
|
daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
firstDay: 1
|
}
|
},
|
function (start, end) {
|
console.log("Callback has been called!");
|
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
|
}
|
);
|
//Set the initial state of the picker label
|
$('#reportrange span').html(moment().subtract('days', 29).format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY'));
|
}
|
|
var handleDatetimePicker = function () {
|
|
$(".form_datetime").datetimepicker({
|
autoclose: true,
|
isRTL: App.isRTL(),
|
format: "dd MM yyyy - hh:ii",
|
pickerPosition: (App.isRTL() ? "bottom-right" : "bottom-left")
|
});
|
|
$(".form_advance_datetime").datetimepicker({
|
isRTL: App.isRTL(),
|
format: "dd MM yyyy - hh:ii",
|
autoclose: true,
|
todayBtn: true,
|
startDate: "2013-02-14 10:00",
|
pickerPosition: (App.isRTL() ? "bottom-right" : "bottom-left"),
|
minuteStep: 10
|
});
|
|
$(".form_meridian_datetime").datetimepicker({
|
isRTL: App.isRTL(),
|
format: "dd MM yyyy - HH:ii P",
|
showMeridian: true,
|
autoclose: true,
|
pickerPosition: (App.isRTL() ? "bottom-right" : "bottom-left"),
|
todayBtn: true
|
});
|
|
$('body').removeClass("modal-open"); // fix bug when inline picker is used in modal
|
}
|
|
var handleClockfaceTimePickers = function () {
|
|
if (!jQuery().clockface) {
|
return;
|
}
|
|
$('.clockface_1').clockface();
|
|
$('#clockface_2').clockface({
|
format: 'HH:mm',
|
trigger: 'manual'
|
});
|
|
$('#clockface_2_toggle').click(function (e) {
|
e.stopPropagation();
|
$('#clockface_2').clockface('toggle');
|
});
|
|
$('#clockface_2_modal').clockface({
|
format: 'HH:mm',
|
trigger: 'manual'
|
});
|
|
$('#clockface_2_modal_toggle').click(function (e) {
|
e.stopPropagation();
|
$('#clockface_2_modal').clockface('toggle');
|
});
|
|
$('.clockface_3').clockface({
|
format: 'H:mm'
|
}).clockface('show', '14:30');
|
}
|
|
var handleColorPicker = function () {
|
if (!jQuery().colorpicker) {
|
return;
|
}
|
$('.colorpicker-default').colorpicker({
|
format: 'hex'
|
});
|
$('.colorpicker-rgba').colorpicker();
|
}
|
|
var handleSelect2 = function () {
|
|
$('#select2_sample1').select2({
|
placeholder: "Select an option",
|
allowClear: true
|
});
|
|
$('#select2_sample2').select2({
|
placeholder: "Select a State",
|
allowClear: true
|
});
|
|
$("#select2_sample3").select2({
|
placeholder: "Select...",
|
allowClear: true,
|
minimumInputLength: 1,
|
query: function (query) {
|
var data = {
|
results: []
|
}, i, j, s;
|
for (i = 1; i < 5; i++) {
|
s = "";
|
for (j = 0; j < i; j++) {
|
s = s + query.term;
|
}
|
data.results.push({
|
id: query.term + i,
|
text: s
|
});
|
}
|
query.callback(data);
|
}
|
});
|
|
function format(state) {
|
if (!state.id) return state.text; // optgroup
|
return "<img class='flag' src='assets/img/flags/" + state.id.toLowerCase() + ".png'/> " + state.text;
|
}
|
$("#select2_sample4").select2({
|
placeholder: "Select a Country",
|
allowClear: true,
|
formatResult: format,
|
formatSelection: format,
|
escapeMarkup: function (m) {
|
return m;
|
}
|
});
|
|
$("#select2_sample5").select2({
|
tags: ["red", "green", "blue", "yellow", "pink"]
|
});
|
|
|
function movieFormatResult(movie) {
|
var markup = "<table class='movie-result'><tr>";
|
if (movie.posters !== undefined && movie.posters.thumbnail !== undefined) {
|
markup += "<td valign='top'><img src='" + movie.posters.thumbnail + "'/></td>";
|
}
|
markup += "<td valign='top'><h5>" + movie.title + "</h5>";
|
if (movie.critics_consensus !== undefined) {
|
markup += "<div class='movie-synopsis'>" + movie.critics_consensus + "</div>";
|
} else if (movie.synopsis !== undefined) {
|
markup += "<div class='movie-synopsis'>" + movie.synopsis + "</div>";
|
}
|
markup += "</td></tr></table>"
|
return markup;
|
}
|
|
function movieFormatSelection(movie) {
|
return movie.title;
|
}
|
|
$("#select2_sample6").select2({
|
placeholder: "Search for a movie",
|
minimumInputLength: 1,
|
ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
|
url: "http://api.rottentomatoes.com/api/public/v1.0/movies.json",
|
dataType: 'jsonp',
|
data: function (term, page) {
|
return {
|
q: term, // search term
|
page_limit: 10,
|
apikey: "ju6z9mjyajq2djue3gbvv26t" // please do not use so this example keeps working
|
};
|
},
|
results: function (data, page) { // parse the results into the format expected by Select2.
|
// since we are using custom formatting functions we do not need to alter remote JSON data
|
return {
|
results: data.movies
|
};
|
}
|
},
|
initSelection: function (element, callback) {
|
// the input tag has a value attribute preloaded that points to a preselected movie's id
|
// this function resolves that id attribute to an object that select2 can render
|
// using its formatResult renderer - that way the movie name is shown preselected
|
var id = $(element).val();
|
if (id !== "") {
|
$.ajax("http://api.rottentomatoes.com/api/public/v1.0/movies/" + id + ".json", {
|
data: {
|
apikey: "ju6z9mjyajq2djue3gbvv26t"
|
},
|
dataType: "jsonp"
|
}).done(function (data) {
|
callback(data);
|
});
|
}
|
},
|
formatResult: movieFormatResult, // omitted for brevity, see the source of this page
|
formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
|
dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
|
escapeMarkup: function (m) {
|
return m;
|
} // we do not want to escape markup since we are displaying html in results
|
});
|
}
|
|
var handleSelect2Modal = function () {
|
|
$('#select2_sample_modal_1').select2({
|
placeholder: "Select an option",
|
allowClear: true
|
});
|
|
$('#select2_sample_modal_2').select2({
|
placeholder: "Select a State",
|
allowClear: true
|
});
|
|
$("#select2_sample_modal_3").select2({
|
allowClear: true,
|
minimumInputLength: 1,
|
query: function (query) {
|
var data = {
|
results: []
|
}, i, j, s;
|
for (i = 1; i < 5; i++) {
|
s = "";
|
for (j = 0; j < i; j++) {
|
s = s + query.term;
|
}
|
data.results.push({
|
id: query.term + i,
|
text: s
|
});
|
}
|
query.callback(data);
|
}
|
});
|
|
function format(state) {
|
if (!state.id) return state.text; // optgroup
|
return "<img class='flag' src='assets/img/flags/" + state.id.toLowerCase() + ".png'/> " + state.text;
|
}
|
$("#select2_sample_modal_4").select2({
|
allowClear: true,
|
formatResult: format,
|
formatSelection: format,
|
escapeMarkup: function (m) {
|
return m;
|
}
|
});
|
|
$("#select2_sample_modal_5").select2({
|
tags: ["red", "green", "blue", "yellow", "pink"]
|
});
|
|
|
function movieFormatResult(movie) {
|
var markup = "<table class='movie-result'><tr>";
|
if (movie.posters !== undefined && movie.posters.thumbnail !== undefined) {
|
markup += "<td valign='top'><img src='" + movie.posters.thumbnail + "'/></td>";
|
}
|
markup += "<td valign='top'><h5>" + movie.title + "</h5>";
|
if (movie.critics_consensus !== undefined) {
|
markup += "<div class='movie-synopsis'>" + movie.critics_consensus + "</div>";
|
} else if (movie.synopsis !== undefined) {
|
markup += "<div class='movie-synopsis'>" + movie.synopsis + "</div>";
|
}
|
markup += "</td></tr></table>"
|
return markup;
|
}
|
|
function movieFormatSelection(movie) {
|
return movie.title;
|
}
|
|
$("#select2_sample_modal_6").select2({
|
placeholder: "Search for a movie",
|
minimumInputLength: 1,
|
ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
|
url: "http://api.rottentomatoes.com/api/public/v1.0/movies.json",
|
dataType: 'jsonp',
|
data: function (term, page) {
|
return {
|
q: term, // search term
|
page_limit: 10,
|
apikey: "ju6z9mjyajq2djue3gbvv26t" // please do not use so this example keeps working
|
};
|
},
|
results: function (data, page) { // parse the results into the format expected by Select2.
|
// since we are using custom formatting functions we do not need to alter remote JSON data
|
return {
|
results: data.movies
|
};
|
}
|
},
|
initSelection: function (element, callback) {
|
// the input tag has a value attribute preloaded that points to a preselected movie's id
|
// this function resolves that id attribute to an object that select2 can render
|
// using its formatResult renderer - that way the movie name is shown preselected
|
var id = $(element).val();
|
if (id !== "") {
|
$.ajax("http://api.rottentomatoes.com/api/public/v1.0/movies/" + id + ".json", {
|
data: {
|
apikey: "ju6z9mjyajq2djue3gbvv26t"
|
},
|
dataType: "jsonp"
|
}).done(function (data) {
|
callback(data);
|
});
|
}
|
},
|
formatResult: movieFormatResult, // omitted for brevity, see the source of this page
|
formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
|
dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
|
escapeMarkup: function (m) {
|
return m;
|
} // we do not want to escape markup since we are displaying html in results
|
});
|
}
|
|
var handleMultiSelect = function () {
|
$('#my_multi_select1').multiSelect();
|
$('#my_multi_select2').multiSelect({
|
selectableOptgroup: true
|
});
|
|
$('#my_multi_select3').multiSelect({
|
selectableHeader: "<input type='text' class='form-control search-input' autocomplete='off' placeholder='search...'>",
|
selectionHeader: "<input type='text' class='form-control search-input' autocomplete='off' placeholder='search...'>",
|
afterInit: function (ms) {
|
var that = this,
|
$selectableSearch = that.$selectableUl.prev(),
|
$selectionSearch = that.$selectionUl.prev(),
|
selectableSearchString = '#' + that.$container.attr('id') + ' .ms-elem-selectable:not(.ms-selected)',
|
selectionSearchString = '#' + that.$container.attr('id') + ' .ms-elem-selection.ms-selected';
|
|
that.qs1 = $selectableSearch.quicksearch(selectableSearchString)
|
.on('keydown', function (e) {
|
if (e.which === 40) {
|
that.$selectableUl.focus();
|
return false;
|
}
|
});
|
|
that.qs2 = $selectionSearch.quicksearch(selectionSearchString)
|
.on('keydown', function (e) {
|
if (e.which == 40) {
|
that.$selectionUl.focus();
|
return false;
|
}
|
});
|
},
|
afterSelect: function () {
|
this.qs1.cache();
|
this.qs2.cache();
|
},
|
afterDeselect: function () {
|
this.qs1.cache();
|
this.qs2.cache();
|
}
|
});
|
}
|
|
var handleInputMasks = function () {
|
$.extend($.inputmask.defaults, {
|
'autounmask': true
|
});
|
|
$("#mask_date").inputmask("d/m/y", {
|
autoUnmask: true
|
}); //direct mask
|
$("#mask_date1").inputmask("d/m/y", {
|
"placeholder": "*"
|
}); //change the placeholder
|
$("#mask_date2").inputmask("d/m/y", {
|
"placeholder": "dd/mm/yyyy"
|
}); //multi-char placeholder
|
$("#mask_phone").inputmask("mask", {
|
"mask": "(999) 999-9999"
|
}); //specifying fn & options
|
$("#mask_tin").inputmask({
|
"mask": "99-9999999"
|
}); //specifying options only
|
$("#mask_number").inputmask({
|
"mask": "9",
|
"repeat": 10,
|
"greedy": false
|
}); // ~ mask "9" or mask "99" or ... mask "9999999999"
|
$("#mask_decimal").inputmask('decimal', {
|
rightAlignNumerics: false
|
}); //disables the right alignment of the decimal input
|
$("#mask_currency").inputmask('€ 999.999.999,99', {
|
numericInput: true
|
}); //123456 => € ___.__1.234,56
|
|
$("#mask_currency2").inputmask('€ 999,999,999.99', {
|
numericInput: true,
|
rightAlignNumerics: false,
|
greedy: false
|
}); //123456 => € ___.__1.234,56
|
$("#mask_ssn").inputmask("999-99-9999", {
|
placeholder: " ",
|
clearMaskOnLostFocus: true
|
}); //default
|
}
|
|
var handleIPAddressInput = function () {
|
$('#input_ipv4').ipAddress();
|
$('#input_ipv6').ipAddress({
|
v: 6
|
});
|
}
|
|
var handlePasswordStrengthChecker = function () {
|
var initialized = false;
|
var input = $("#password_strength");
|
|
input.keydown(function () {
|
if (initialized === false) {
|
// set base options
|
input.pwstrength({
|
raisePower: 1.4,
|
minChar: 8,
|
verdicts: ["Weak", "Normal", "Medium", "Strong", "Very Strong"],
|
scores: [17, 26, 40, 50, 60]
|
});
|
|
// add your own rule to calculate the password strength
|
input.pwstrength("addRule", "demoRule", function (options, word, score) {
|
return word.match(/[a-z].[0-9]/) && score;
|
}, 10, true);
|
|
// set as initialized
|
initialized = true;
|
}
|
});
|
}
|
|
var handleUsernameAvailabilityChecker1 = function () {
|
var input = $("#username1_input");
|
|
$("#username1_checker").click(function (e) {
|
var pop = $(this);
|
|
if (input.val() === "") {
|
input.closest('.form-group').removeClass('has-success').addClass('has-error');
|
|
pop.popover('destroy');
|
pop.popover({
|
'placement': (App.isRTL() ? 'left' : 'right'),
|
'html': true,
|
'container': 'body',
|
'content': 'Please enter a username to check its availability.',
|
});
|
// add error class to the popover
|
pop.data('bs.popover').tip().addClass('error');
|
// set last poped popover to be closed on click(see App.js => handlePopovers function)
|
App.setLastPopedPopover(pop);
|
pop.popover('show');
|
e.stopPropagation(); // prevent closing the popover
|
|
return;
|
}
|
|
var btn = $(this);
|
|
btn.attr('disabled', true);
|
|
input.attr("readonly", true).
|
attr("disabled", true).
|
addClass("spinner");
|
|
$.post('demo/username_checker.php', {
|
username: input.val()
|
}, function (res) {
|
btn.attr('disabled', false);
|
|
input.attr("readonly", false).
|
attr("disabled", false).
|
removeClass("spinner");
|
|
if (res.status == 'OK') {
|
input.closest('.form-group').removeClass('has-error').addClass('has-success');
|
|
pop.popover('destroy');
|
pop.popover({
|
'html': true,
|
'placement': (App.isRTL() ? 'left' : 'right'),
|
'container': 'body',
|
'content': res.message,
|
});
|
pop.popover('show');
|
pop.data('bs.popover').tip().removeClass('error').addClass('success');
|
} else {
|
input.closest('.form-group').removeClass('has-success').addClass('has-error');
|
|
pop.popover('destroy');
|
pop.popover({
|
'html': true,
|
'placement': (App.isRTL() ? 'left' : 'right'),
|
'container': 'body',
|
'content': res.message,
|
});
|
pop.popover('show');
|
pop.data('bs.popover').tip().removeClass('success').addClass('error');
|
App.setLastPopedPopover(pop);
|
}
|
|
}, 'json');
|
|
});
|
}
|
|
var handleUsernameAvailabilityChecker2 = function () {
|
$("#username2_input").change(function () {
|
var input = $(this);
|
|
if (input.val() === "") {
|
return;
|
}
|
|
input.attr("readonly", true).
|
attr("disabled", true).
|
addClass("spinner");
|
|
$.post('demo/username_checker.php', {
|
username: input.val()
|
}, function (res) {
|
input.attr("readonly", false).
|
attr("disabled", false).
|
removeClass("spinner");
|
|
// change popover font color based on the result
|
if (res.status == 'OK') {
|
input.closest('.form-group').removeClass('has-error').addClass('has-success');
|
$('.icon-exclamation-sign', input.closest('.form-group')).remove();
|
input.before('<i class="icon-ok"></i>');
|
input.data('bs.popover').tip().removeClass('error').addClass('success');
|
} else {
|
input.closest('.form-group').removeClass('has-success').addClass('has-error');
|
$('.icon-ok', input.closest('.form-group')).remove();
|
input.before('<i class="icon-exclamation-sign"></i>');
|
|
input.popover('destroy');
|
input.popover({
|
'html': true,
|
'placement': (App.isRTL() ? 'left' : 'right'),
|
'container': 'body',
|
'content': res.message,
|
});
|
input.popover('show');
|
input.data('bs.popover').tip().removeClass('success').addClass('error');
|
|
App.setLastPopedPopover(input);
|
}
|
|
}, 'json');
|
|
});
|
}
|
|
return {
|
//main function to initiate the module
|
init: function () {
|
handleBootstrapTouchSpin();
|
handleBootstrapMaxlength();
|
handleSpinners();
|
handleWysihtml5();
|
handleTagsInput();
|
handleDatePickers();
|
handleTimePickers();
|
handleDatetimePicker();
|
handleDateRangePickers();
|
handleClockfaceTimePickers();
|
handleColorPicker();
|
handleSelect2();
|
handleSelect2Modal();
|
handleInputMasks();
|
handleIPAddressInput();
|
handleMultiSelect();
|
handlePasswordStrengthChecker();
|
handleUsernameAvailabilityChecker1();
|
handleUsernameAvailabilityChecker2();
|
}
|
};
|
|
}();
|