Implementation of additional shiny inputs (no documentation)
This commit is contained in:
100
inst/js/togglableTextInput.js
Normal file
100
inst/js/togglableTextInput.js
Normal file
@@ -0,0 +1,100 @@
|
||||
|
||||
// switch input binding
|
||||
var togglableTextInputBinding = new Shiny.InputBinding();
|
||||
$.extend(togglableTextInputBinding, {
|
||||
find: function(scope) {
|
||||
return $(scope).find('.shiny-input-togglableText');
|
||||
},
|
||||
getId: function(el) {
|
||||
return $(el).attr('id');
|
||||
},
|
||||
getValue: function(el) {
|
||||
return {
|
||||
checked: $('#' + Shiny.$escape(el.id) + 'Check').prop('checked'),
|
||||
text: $('#' + Shiny.$escape(el.id) + 'Text').val()
|
||||
};
|
||||
},
|
||||
setValue: function(el, value) {
|
||||
var $checkEl =$('#' + Shiny.$escape(el.id) + 'Check')
|
||||
var $textEl = $('#' + Shiny.$escape(el.id) + 'Text');
|
||||
|
||||
$checkEl.prop('checked', value.checked);
|
||||
Shiny.setInputValue(Shiny.$escape(el.id) + 'Check', value.checked);
|
||||
|
||||
if ($('#' + Shiny.$escape(el.id)).attr('aria-enable-on-check') == true) {
|
||||
if (value.checked) {
|
||||
$textEl.val(value.text);
|
||||
Shiny.setInputValue(Shiny.$escape(el.id) + 'Text', value.text);
|
||||
$textEl.prop('disabled', false);
|
||||
} else {
|
||||
$textEl.val(null);
|
||||
Shiny.setInputValue(Shiny.$escape(el.id) + 'Text', null);
|
||||
$textEl.prop('disabled', true);
|
||||
}
|
||||
} else {
|
||||
if (value.checked) {
|
||||
$textEl.val(null);
|
||||
Shiny.setInputValue(Shiny.$escape(el.id) + 'Text', null);
|
||||
$textEl.prop('disabled', true);
|
||||
} else {
|
||||
$textEl.val(value.text);
|
||||
Shiny.setInputValue(Shiny.$escape(el.id) + 'Text', value.text);
|
||||
$textEl.prop('disabled', false);
|
||||
}
|
||||
}
|
||||
if ($checkEl.prop('disabled')) {
|
||||
$textEl.prop('disabled', true);
|
||||
}
|
||||
},
|
||||
subscribe: function(el, callback) {
|
||||
$(el).on('change', function(event) {
|
||||
callback();
|
||||
});
|
||||
},
|
||||
unsubscribe: function(el) {
|
||||
$(el).off('change');
|
||||
},
|
||||
getState: function(el) {
|
||||
return {
|
||||
value: this.getValue(el)
|
||||
};
|
||||
},
|
||||
receiveMessage: function(el, data) {
|
||||
if (data.hasOwnProperty("value")) {
|
||||
this.setValue(el, data.value);
|
||||
}
|
||||
|
||||
if (data.hasOwnProperty("label")) {
|
||||
$(el).find('label[for="' + el.id + 'Text"]').text(data.label);
|
||||
}
|
||||
|
||||
if (data.hasOwnProperty("placeholder")) {
|
||||
$("#" + el.id + "Text")[0].placeholder = data.placeholder;
|
||||
}
|
||||
|
||||
// if (data.hasOwnProperty("disabled"))
|
||||
// $(el).bootstrapSwitch("disabled", data.disabled, data.disabled);
|
||||
|
||||
$(el).trigger("change");
|
||||
},
|
||||
initialize: function initialize(el) {
|
||||
$("#" + Shiny.$escape(el.id) + "Check").on('change', function(event) {
|
||||
$(el).trigger('change');
|
||||
if ($('#' + Shiny.$escape(el.id)).attr('aria-enable-on-check') == true) {
|
||||
$('#' + Shiny.$escape(el.id) + 'Text').prop('disabled', !$(this).prop('checked'));
|
||||
} else {
|
||||
$('#' + Shiny.$escape(el.id) + 'Text').prop('disabled', $(this).prop('checked'));
|
||||
}
|
||||
if ($(this).prop('disabled')) {
|
||||
$('#' + Shiny.$escape(el.id) + 'Text').prop('disabled', true);
|
||||
}
|
||||
});
|
||||
$("#" + Shiny.$escape(el.id) + "Text").on('keyup', function(event) {
|
||||
if (event.keyCode == 13) {
|
||||
$(el).trigger('change')
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
Shiny.inputBindings.register(togglableTextInputBinding, "shinyExtra.toggleableTextInput");
|
||||
Reference in New Issue
Block a user