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.
1077 lines
29 KiB
1077 lines
29 KiB
/* ------------------------------------------------------------------------------ |
|
* |
|
* # Editable component |
|
* |
|
* Specific JS code additions for form_editable.html page |
|
* |
|
* Version: 1.1 |
|
* Latest update: Mar 5, 2016 |
|
* |
|
* ---------------------------------------------------------------------------- */ |
|
|
|
$(function() { |
|
|
|
|
|
// Override defaults |
|
// ------------------------------ |
|
|
|
// Disable highlight |
|
$.fn.editable.defaults.highlight = false; |
|
|
|
// Output template |
|
$.fn.editableform.template = '<form class="editableform">' + |
|
'<div class="control-group">' + |
|
'<div class="editable-input"></div> <div class="editable-buttons"></div>' + |
|
'<div class="editable-error-block"></div>' + |
|
'</div> ' + |
|
'</form>' |
|
|
|
// Set popup mode as default |
|
$.fn.editable.defaults.mode = 'popup'; |
|
|
|
// Buttons |
|
$.fn.editableform.buttons = |
|
'<button type="submit" class="btn btn-primary btn-icon editable-submit"><i class="icon-check"></i></button>' + |
|
'<button type="button" class="btn btn-default btn-icon editable-cancel"><i class="icon-x"></i></button>'; |
|
|
|
|
|
|
|
|
|
// Demo settings |
|
// ------------------------------ |
|
|
|
// Toggle editable state |
|
var toggleState = document.querySelector('.switchery'); |
|
var toggleStateInit = new Switchery(toggleState); |
|
toggleState.onchange = function() { |
|
if(toggleState.checked) { |
|
$('.editable').editable('enable'); |
|
} |
|
else { |
|
$('.editable').editable('disable'); |
|
} |
|
}; |
|
|
|
|
|
// Write log in console |
|
function log(settings, response) { |
|
var s = [], str; |
|
s.push(settings.type.toUpperCase() + ' url = "' + settings.url + '"'); |
|
for(var a in settings.data) { |
|
if(settings.data[a] && typeof settings.data[a] === 'object') { |
|
str = []; |
|
for(var j in settings.data[a]) {str.push(j+': "'+settings.data[a][j]+'"');} |
|
str = '{ '+str.join(', ')+' }'; |
|
} |
|
else { |
|
str = '"'+settings.data[a]+'"'; |
|
} |
|
s.push(a + ' = ' + str); |
|
} |
|
s.push('RESPONSE: status = ' + response.status); |
|
|
|
if(response.responseText) { |
|
if($.isArray(response.responseText)) { |
|
s.push('['); |
|
$.each(response.responseText, function(i, v){ |
|
s.push('{value: ' + v.value+', text: "'+v.text+'"}'); |
|
}); |
|
s.push(']'); |
|
} |
|
else { |
|
s.push($.trim(response.responseText)); |
|
} |
|
} |
|
s.push('--------------------------------------\n'); |
|
}; |
|
|
|
|
|
|
|
|
|
// Basic editable components |
|
// ------------------------------ |
|
|
|
// Editable text field |
|
$('#text-field').editable(); |
|
|
|
|
|
// Disable clear button |
|
$('#disabled-clear').editable({ |
|
clear: false |
|
}); |
|
|
|
|
|
// With helper text |
|
$('#text-field-help').editable(); |
|
$('#text-field-help').on('shown', function(e, editable) { |
|
$('<span class="help-block">This is a help block</span>').insertAfter(editable.input.$input); |
|
}); |
|
|
|
|
|
// Empty field |
|
$('#empty-field').editable(); |
|
|
|
|
|
// Required text field |
|
$('#empty-field-validate').editable({ |
|
validate: function(value) { |
|
if($.trim(value) == '') return 'This field is required'; |
|
} |
|
}); |
|
|
|
|
|
|
|
// |
|
// Textareas |
|
// |
|
|
|
// Textarea |
|
$('#textarea').editable({ |
|
rows: 2, |
|
showbuttons: 'bottom' |
|
}); |
|
|
|
|
|
// Elastic textarea |
|
$('#textarea-elastic').editable({ |
|
showbuttons: 'bottom' |
|
}); |
|
$('#textarea-elastic').on('shown', function(e, editable) { |
|
editable.input.$input.addClass('elastic'); |
|
autosize($('.elastic')); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Buttons and icons |
|
// |
|
|
|
// Button variations |
|
$('#button-variation').editable(); |
|
$('#button-variation').on('shown', function(e, editable) { |
|
editable.input.$input.parents('.editable-input').parent().find('.editable-submit').removeClass('btn-success').addClass('btn-danger'); |
|
editable.input.$input.parents('.editable-input').parent().find('.editable-cancel').removeClass('btn-danger').addClass('btn-success'); |
|
}); |
|
|
|
|
|
// Icon variations |
|
$('#icon-variation').editable(); |
|
$('#icon-variation').on('shown', function(e, editable) { |
|
editable.input.$input.parents('.editable-input').parent().find('.editable-submit').children().removeClass('icon-check').addClass('icon-task'); |
|
editable.input.$input.parents('.editable-input').parent().find('.editable-cancel').children().removeClass('icon-x').addClass('icon-menu6'); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Dates |
|
// |
|
|
|
// Date field |
|
$('#date').editable({ |
|
showbuttons: 'bottom' |
|
}); |
|
|
|
|
|
// Date picker |
|
$('#datepicker').editable({ |
|
showbuttons: 'bottom' |
|
}); |
|
|
|
|
|
// Date time |
|
$('#datetime').editable({ |
|
combodate: { |
|
firstItem: 'name' |
|
}, |
|
showbuttons: 'bottom' |
|
}); |
|
|
|
|
|
|
|
// |
|
// Multiple fields |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/address', |
|
response: function(settings) { |
|
log(settings, this); |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#multiple-fields').editable({ |
|
url: '/address', |
|
showbuttons: 'bottom', |
|
value: { |
|
city: "Moscow", |
|
street: "Lenina", |
|
building: "12" |
|
}, |
|
tpl: '<div class="editable-address form-group"><label>City: </label><input type="text" name="city" class="form-control"></div>'+ |
|
'<div class="editable-address form-group"><label>Street: </label><input type="text" name="street" class="form-control"></div>'+ |
|
'<div class="editable-address form-group"><label>Building: </label><input type="text" name="building" class="form-control"></div>', |
|
validate: function(value) { |
|
if(value.city == '') return 'city is required!'; |
|
}, |
|
display: function(value) { |
|
if(!value) { |
|
$(this).empty(); |
|
return; |
|
} |
|
var html = '<b>' + $('<div>').text(value.city).html() + '</b>, ' + $('<div>').text(value.street).html() + ' st., bld. ' + $('<div>').text(value.building).html(); |
|
$(this).html(html); |
|
} |
|
}); |
|
|
|
|
|
|
|
// |
|
// Input groups |
|
// |
|
|
|
// Addons |
|
$('#input-group-addon').editable(); |
|
$('#input-group-addon').on('shown', function (e, editable) { |
|
editable.input.$input.wrap('<div class="input-group"></div>'); |
|
$('<span class="input-group-addon"><i class="icon-mention"></i></span>').insertBefore(editable.input.$input); |
|
}); |
|
|
|
|
|
// Buttons |
|
$('#input-group-button').editable(); |
|
$('#input-group-button').on('shown', function (e, editable) { |
|
editable.input.$input.wrap('<div class="input-group"></div>'); |
|
$('<div class="input-group-btn"><button type="button" class="btn btn-default">Button</button></div>').insertBefore(editable.input.$input); |
|
}); |
|
|
|
|
|
// Dropdown |
|
$('#input-group-dropdown').editable(); |
|
$('#input-group-dropdown').on('shown', function (e, editable) { |
|
editable.input.$input.wrap('<div class="input-group"></div>'); |
|
$('<div class="input-group-btn"><button type="button" class="btn btn-default btn-icon" data-toggle="dropdown"><i class="icon-cog5"></i> <span class="caret"></span></button> <ul class="dropdown-menu"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> </ul> </div>').insertBefore(editable.input.$input); |
|
}); |
|
|
|
|
|
|
|
|
|
// Basic selects |
|
// ------------------------------ |
|
|
|
// Basic select |
|
$('#select-default').editable({ |
|
prepend: "Not selected", |
|
source: [ |
|
{value: 1, text: 'Male'}, |
|
{value: 2, text: 'Female'} |
|
], |
|
display: function(value, sourceData) { |
|
var colors = {"": "gray", 1: "green", 2: "blue"}, |
|
elem = $.grep(sourceData, function(o){return o.value == value;}); |
|
|
|
if(elem.length) { |
|
$(this).text(elem[0].text).css("color", colors[value]); |
|
} |
|
else { |
|
$(this).empty(); |
|
} |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Dependent select |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/default-list', |
|
responseTime: 400, |
|
response: function(settings) { |
|
if(settings.data.value == 'err') { |
|
this.status = 500; |
|
this.responseText = 'Validation error!'; |
|
} |
|
else { |
|
this.responseText = ''; |
|
} |
|
} |
|
}); |
|
|
|
// Data |
|
var sources = { |
|
1: [{value: 11, text: 11}, {value: 111, text: 111}], |
|
2: [{value: 22, text: 22}, {value: 222, text: 222}] |
|
}; |
|
|
|
// Initialize first list |
|
$('#default-list').editable({ |
|
url: '/default-list', |
|
pk: 1, |
|
source: [{value: 1, text: 'text1'}, {value: 2, text: 'text2'}], |
|
title: 'Select1', |
|
success: function(response, newValue) { |
|
$('#dependent-list').editable('option', 'source', sources[newValue]); |
|
$('#dependent-list').editable('setValue', null); |
|
} |
|
}); |
|
|
|
// Initialize dependent list |
|
$('#dependent-list').editable({ |
|
url: '/default-list', |
|
pk: 1, |
|
title: 'Select2', |
|
sourceError: 'Please, select value in first list' |
|
}); |
|
|
|
|
|
|
|
// |
|
// Select with remote source |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/remote', |
|
response: function(settings) { |
|
this.responseText = [ |
|
{value: 0, text: 'Guest'}, |
|
{value: 1, text: 'Service'}, |
|
{value: 2, text: 'Customer'}, |
|
{value: 3, text: 'Operator'}, |
|
{value: 4, text: 'Support'}, |
|
{value: 5, text: 'Admin'} |
|
]; |
|
log(settings, this); |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#select-default-remote').editable({ |
|
source: '/remote', |
|
showbuttons: false |
|
}); |
|
|
|
|
|
|
|
// |
|
// Select with loading error |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/error', |
|
status: 500, |
|
response: function(settings) { |
|
this.responseText = 'Internal Server Error'; |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#select-default-error').editable({ |
|
source: '/error' |
|
}); |
|
|
|
|
|
|
|
|
|
// Checkboxes and radios |
|
// ------------------------------ |
|
|
|
// Single unstyled checkbox |
|
$('#single-unstyled-checkbox').editable({ |
|
source: {'1': 'Enabled'}, |
|
emptytext: 'Disabled', |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox"></div>' |
|
}); |
|
|
|
|
|
// Single styled checkbox |
|
$('#single-styled-checkbox').editable({ |
|
source: {'1': 'Enabled'}, |
|
emptytext: 'Disabled', |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox"></div>' |
|
}); |
|
$('#single-styled-checkbox').on('shown', function(e, editable) { |
|
editable.input.$input.uniform(); |
|
}); |
|
|
|
|
|
// Initialize uniform |
|
$(".styled, .multiselect-container input, .file-input > :file").uniform({ |
|
radioClass: 'choice', |
|
fileButtonHtml: '<i class="icon-googleplus"></i>' |
|
}); |
|
|
|
|
|
|
|
// |
|
// Checklists |
|
// |
|
|
|
// Unstyled checklist |
|
$('#unstyled-checklist').editable({ |
|
source: [ |
|
{value: 1, text: 'banana'}, |
|
{value: 2, text: 'peach'}, |
|
{value: 3, text: 'apple'}, |
|
{value: 4, text: 'watermelon'}, |
|
{value: 5, text: 'orange'} |
|
], |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox"></div>' |
|
}); |
|
|
|
// Styled checklist |
|
$('#styled-checklist').editable({ |
|
source: [ |
|
{value: 1, text: 'banana'}, |
|
{value: 2, text: 'peach'}, |
|
{value: 3, text: 'apple'}, |
|
{value: 4, text: 'watermelon'}, |
|
{value: 5, text: 'orange'} |
|
], |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox"></div>' |
|
}); |
|
|
|
// Update uniform dynamically |
|
$('#styled-checklist').on('shown', function(e, editable) { |
|
editable.input.$input.uniform(); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Single switchery toggle |
|
// |
|
|
|
// Initialize plugin |
|
$('#switchery-checkbox').editable({ |
|
source: {'1': 'Enabled'}, |
|
emptytext: 'Disabled', |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox checkbox-switchery switchery-xs"></div>' |
|
}); |
|
|
|
// Initialize plugin and insert in editable popup on show |
|
$('#switchery-checkbox').on('shown', function (e, editable) { |
|
editable.input.$input.addClass('switcher-single'); |
|
|
|
var elem = document.querySelector('.switcher-single'); |
|
var init = new Switchery(elem); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Switchery checklist |
|
// |
|
|
|
// Initialize plugin |
|
$('#switchery-checklist').editable({ |
|
source: [ |
|
{value: 1, text: 'banana'}, |
|
{value: 2, text: 'peach'}, |
|
{value: 3, text: 'apple'}, |
|
{value: 4, text: 'watermelon'}, |
|
{value: 5, text: 'orange'} |
|
], |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox checkbox-switchery switchery-xs"></div>' |
|
}); |
|
|
|
// Initialize plugin and insert in editable popup on show |
|
$('#switchery-checklist').on('shown', function(e, editable) { |
|
editable.input.$input.addClass('switcher'); |
|
|
|
var elems = Array.prototype.slice.call(document.querySelectorAll('.switcher')); |
|
elems.forEach(function(html) { |
|
var switchery = new Switchery(html); |
|
}); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Unordered checkbox list |
|
// |
|
|
|
// Initialize editable |
|
$.mockjax({ |
|
url: '/checkbox-unordered-list', |
|
status: 200, |
|
responseTime: 200 |
|
}); |
|
|
|
// Add data |
|
$.mockjax({ |
|
url: '/source-ul', |
|
status: 200, |
|
responseTime: 400, |
|
response: function(settings) { |
|
this.responseText = [ |
|
{value: 0, text: 'Guest'}, |
|
{value: 1, text: 'Service'}, |
|
{value: 2, text: 'Customer'}, |
|
{value: 3, text: 'Operator'}, |
|
{value: 4, text: 'Support'}, |
|
{value: 5, text: 'Admin'} |
|
]; |
|
} |
|
}); |
|
|
|
// Initialize plugin |
|
$('#checkbox-unordered-list').editable({ |
|
source: '/source-ul', |
|
url: '/checkbox-unordered-list', |
|
display: function(value, sourceData) { |
|
var $el = $('#list'), |
|
checked, html = ''; |
|
if(!value) { |
|
$el.empty(); |
|
return; |
|
} |
|
|
|
checked = $.grep(sourceData, function(o){ |
|
return $.grep(value, function(v){ |
|
return v == o.value; |
|
}).length; |
|
}); |
|
|
|
$.each(checked, function(i, v) { |
|
html+= '<li>'+$.fn.editableutils.escape(v.text)+'</li>'; |
|
}); |
|
|
|
if(html) html = '<ul class="list-inline" style="margin-top: 10px;">'+html+'</ul>'; |
|
$el.html(html); |
|
}, |
|
showbuttons: 'bottom', |
|
tpl: '<div class="checkbox"></div>' |
|
}); |
|
|
|
// Initialize plugin and insert in editable popup on show |
|
$('#checkbox-unordered-list').on('shown', function(e, editable) { |
|
editable.input.$input.uniform(); |
|
}); |
|
|
|
|
|
|
|
|
|
// Advanced initialization |
|
// ------------------------------ |
|
|
|
// |
|
// Autotext option |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/autotext-url', |
|
status: 200, |
|
responseTime: 200 |
|
}); |
|
|
|
// Add data |
|
$.mockjax({ |
|
url: '/groups', |
|
status: 200, |
|
responseTime: 400, |
|
response: function(settings) { |
|
this.responseText = [ |
|
{value: 0, text: 'Guest'}, |
|
{value: 1, text: 'Service'}, |
|
{value: 2, text: 'Customer'}, |
|
{value: 3, text: 'Operator'}, |
|
{value: 4, text: 'Support'}, |
|
{value: 5, text: 'Admin'} |
|
]; |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#editable-autotext').editable({ |
|
url: '/autotext-url' |
|
}); |
|
|
|
|
|
|
|
// |
|
// PUT method submit |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/editable-put-submit', |
|
responseTime: 200, |
|
response: function(settings) { |
|
console.log(settings); |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#editable-put-submit').editable({ |
|
url: '/editable-put-submit', |
|
ajaxOptions: { |
|
type: 'put' |
|
} |
|
}); |
|
|
|
|
|
|
|
// |
|
// Render server response |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/editable-render-response', |
|
responseTime: 400, |
|
response: function(settings) { |
|
this.responseText = 'New value: <b>'+settings.data.value+'</b>'; |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#editable-render-response').editable({ |
|
url: '/editable-render-response', |
|
display: function(value, response) { |
|
$(this).html(response); |
|
} |
|
}); |
|
|
|
|
|
|
|
// |
|
// Process JSON response |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/editable-json-response', |
|
responseTime: 200, |
|
response: function(settings) { |
|
if(settings.data.value) { |
|
this.responseText = '{"success": true}'; |
|
} |
|
else { |
|
this.responseText = '{"success": false, "msg": "required"}'; |
|
} |
|
} |
|
}); |
|
|
|
// Initialize |
|
$('#editable-json-response').editable({ |
|
url: '/editable-json-response', |
|
ajaxOptions: { |
|
dataType: 'json' |
|
}, |
|
success: function(response, newValue) { |
|
if(!response) { |
|
return "Unknown error!"; |
|
} |
|
|
|
if(response.success === false) { |
|
return response.msg; |
|
} |
|
} |
|
}); |
|
|
|
|
|
|
|
// |
|
// Input types |
|
// |
|
|
|
// Simulate ajax requests |
|
$.mockjax({ |
|
url: '/post-fields', |
|
response: function(settings) { |
|
log(settings, this); |
|
} |
|
}); |
|
|
|
// Password |
|
$('#type-password').editable({ |
|
url: '/post-fields', |
|
title: 'Enter your password' |
|
}); |
|
|
|
// Email |
|
$('#type-email').editable({ |
|
url: '/post-fields', |
|
title: 'Enter your email' |
|
}); |
|
|
|
// Url |
|
$('#type-url').editable({ |
|
url: '/post-fields', |
|
title: 'Enter URL' |
|
}); |
|
|
|
// Tel |
|
$('#type-tel').editable({ |
|
url: '/post-fields', |
|
title: 'Enter phone number' |
|
}); |
|
|
|
// Number |
|
$('#type-number').editable({ |
|
url: '/post-fields', |
|
title: 'Enter any number' |
|
}); |
|
|
|
// Range |
|
$('#type-range').editable({ |
|
url: '/post-fields', |
|
title: 'Number range' |
|
}); |
|
|
|
// Time |
|
$('#type-time').editable({ |
|
url: '/post-fields', |
|
title: 'Time' |
|
}); |
|
|
|
|
|
|
|
|
|
// Plugins and extensions |
|
// ------------------------------ |
|
|
|
// |
|
// Tag inputs |
|
// |
|
|
|
// Text tags input |
|
$('#input-tags-text').editable({ |
|
showbuttons: 'bottom', |
|
clear: false, |
|
display: function(value) { |
|
$(this).html(value); |
|
$(this).each(function() { |
|
var text = $(this).text().split(','); |
|
for( var i = 0, len = text.length; i < len; i++ ) { |
|
text[i] = '<span>' + text[i] + '</span>'; |
|
} |
|
$(this).html(text.join(', ')); |
|
}); |
|
} |
|
}); |
|
$('#input-tags-text').on('shown', function(e, editable) { |
|
editable.input.$input.tagsinput({ |
|
maxTags: 5 |
|
}); |
|
}); |
|
|
|
|
|
// Label tags input |
|
$('#input-tags-labels').editable({ |
|
showbuttons: 'bottom', |
|
clear: false, |
|
display: function(value) { |
|
$(this).html(value); |
|
$(this).each(function() { |
|
var text = $(this).text().split(','); |
|
for( var i = 0, len = text.length; i < len; i++ ) { |
|
text[i] = '<span class="label label-primary">' + text[i] + '</span>'; |
|
} |
|
$(this).html(text.join(' ')); |
|
}); |
|
} |
|
}); |
|
$('#input-tags-labels').on('shown', function(e, editable) { |
|
editable.input.$input.tagsinput({ |
|
maxTags: 5 |
|
}); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Typeahead |
|
// |
|
|
|
// Initialize editable |
|
$('#editable-typeahead').editable({ |
|
value: 'California' |
|
}); |
|
|
|
// Typeahead |
|
$('#editable-typeahead').on('shown', function(e, editable) { |
|
var substringMatcher = function(strs) { |
|
return function findMatches(q, cb) { |
|
var matches, substringRegex; |
|
|
|
// an array that will be populated with substring matches |
|
matches = []; |
|
|
|
// regex used to determine if a string contains the substring `q` |
|
substrRegex = new RegExp(q, 'i'); |
|
|
|
// iterate through the pool of strings and for any string that |
|
// contains the substring `q`, add it to the `matches` array |
|
$.each(strs, function(i, str) { |
|
if (substrRegex.test(str)) { |
|
|
|
// the typeahead jQuery plugin expects suggestions to a |
|
// JavaScript object, refer to typeahead docs for more info |
|
matches.push({ value: str }); |
|
} |
|
}); |
|
|
|
cb(matches); |
|
}; |
|
}; |
|
|
|
// Data |
|
var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', |
|
'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', |
|
'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', |
|
'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', |
|
'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', |
|
'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', |
|
'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', |
|
'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', |
|
'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming' |
|
]; |
|
|
|
// Initialize typeahead |
|
editable.input.$input.typeahead( |
|
{ |
|
hint: true, |
|
highlight: true, |
|
minLength: 1 |
|
}, |
|
{ |
|
name: 'states', |
|
displayKey: 'value', |
|
source: substringMatcher(states) |
|
} |
|
); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Touchspin spinners |
|
// |
|
|
|
// Basic |
|
$('#input-touchspin-basic').editable({ |
|
clear: false |
|
}); |
|
$('#input-touchspin-basic').on('shown', function(e, editable) { |
|
editable.input.$input.TouchSpin({ |
|
min: 0, |
|
max: 100, |
|
step: 0.1, |
|
decimals: 2 |
|
}).parent().parent().addClass('editable-touchspin'); |
|
}); |
|
|
|
|
|
// Advanced |
|
$('#input-touchspin-advanced').editable({ |
|
clear: false |
|
}); |
|
$('#input-touchspin-advanced').on('shown', function(e, editable) { |
|
editable.input.$input.TouchSpin({ |
|
prefix: '<i class="icon-accessibility"></i>', |
|
postfix: '<i class="icon-paragraph-justify2"></i>' |
|
}).parent().parent().addClass('editable-touchspin'); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Input mask |
|
// |
|
|
|
// Initialize editable |
|
$('#input-mask').editable({ |
|
emptytext: 'Your credit card number' |
|
}); |
|
|
|
// Initialize plugin and insert in editable popup on show |
|
$('#input-mask').on('shown', function(e, editable) { |
|
editable.input.$input.inputmask({ |
|
mask: '9999-9999-9999-9999' |
|
}); |
|
$('<span class="help-block">9999-9999-9999-9999</span>').insertAfter(editable.input.$input); |
|
}); |
|
|
|
|
|
|
|
// |
|
// Input formatter |
|
// |
|
|
|
// Initialize editable |
|
$('#input-formatter').editable({ |
|
emptytext: 'Your birth date' |
|
}); |
|
|
|
// Initialize plugin and insert in editable popup on show |
|
$('#input-formatter').on('shown', function(e, editable) { |
|
editable.input.$input.formatter({ |
|
pattern: '{{99}}/{{99}}/{{9999}}' |
|
}); |
|
$('<span class="help-block">99/99/9999</span>').insertAfter(editable.input.$input); |
|
}); |
|
|
|
|
|
|
|
|
|
// Select2 select |
|
// ------------------------------ |
|
|
|
// Data |
|
var select2_countries = []; |
|
$.each( |
|
{ |
|
"BD": "Bangladesh", |
|
"BE": "Belgium", |
|
"BF": "Burkina Faso", |
|
"BG": "Bulgaria", |
|
"BA": "Bosnia and Herzegovina", |
|
"BB": "Barbados", |
|
"WF": "Wallis and Futuna", |
|
"BL": "Saint Bartelemey", |
|
"BM": "Bermuda", |
|
"BN": "Brunei Darussalam", |
|
"BO": "Bolivia", |
|
"BH": "Bahrain", |
|
"BI": "Burundi", |
|
"BJ": "Benin", |
|
"BT": "Bhutan", |
|
"JM": "Jamaica", |
|
"BV": "Bouvet Island", |
|
"BW": "Botswana", |
|
"WS": "Samoa", |
|
"BR": "Brazil", |
|
"BS": "Bahamas", |
|
"JE": "Jersey", |
|
"BY": "Belarus", |
|
"O1": "Other Country", |
|
"LV": "Latvia", |
|
"RW": "Rwanda", |
|
"RS": "Serbia", |
|
"TL": "Timor-Leste", |
|
"RE": "Reunion", |
|
"LU": "Luxembourg", |
|
"TJ": "Tajikistan", |
|
"RO": "Romania", |
|
"PG": "Papua New Guinea", |
|
"GW": "Guinea-Bissau", |
|
"GU": "Guam", |
|
"GT": "Guatemala", |
|
"GS": "South Georgia and the South Sandwich Islands", |
|
"GR": "Greece", |
|
}, function(k, v) { |
|
select2_countries.push({id: k, text: v}); |
|
} |
|
); |
|
|
|
|
|
// Single select |
|
$('#select2-single').editable({ |
|
source: select2_countries, |
|
select2: { |
|
width: 200, |
|
placeholder: 'Select country', |
|
allowClear: true |
|
} |
|
}); |
|
|
|
|
|
// Multiple select |
|
$('#select2-multiple').editable({ |
|
showbuttons: 'bottom', |
|
select2: { |
|
width: 300, |
|
tags: ['html', 'javascript', 'css', 'ajax'], |
|
tokenSeparators: [",", " "], |
|
multiple: true, |
|
placeholder: 'Select something' |
|
} |
|
}); |
|
|
|
|
|
// |
|
// Remote source |
|
// |
|
|
|
// Initialize |
|
$('#select2-single-remote').editable({ |
|
select2: { |
|
width: '300', |
|
placeholder: 'Select Country', |
|
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 |
|
} |
|
}); |
|
|
|
// Format results |
|
function movieFormatResult(movie) { |
|
var markup = "<table class='movie-result'><tr>"; |
|
if (movie.posters !== undefined && movie.posters.thumbnail !== undefined) { |
|
markup += "<td class='movie-image'><img src='" + movie.posters.thumbnail + "'/></td>"; |
|
} |
|
markup += "<td class='movie-info'><div class='movie-title'>" + movie.title + "</div>"; |
|
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; |
|
} |
|
|
|
// Format selection |
|
function movieFormatSelection(movie) { |
|
return movie.title; |
|
} |
|
|
|
});
|
|
|