vpn.email
Version:
vpn.email client
186 lines (152 loc) • 5.58 kB
JavaScript
$.widget("metro.input", {
version: "3.0.0",
options: {
showLabelOnValue: false,
textAutoResize: false,
textMaxHeight: 0
},
_create: function(){
var element = this.element, o = this.options;
$.each(element.data(), function(key, value){
if (key in o) {
try {
o[key] = $.parseJSON(value);
} catch (e) {
o[key] = value;
}
}
});
if (element.hasClass('file')) {this._createInputFile();}
if (element.hasClass('text')) {this._createInputText();}
if (element.hasClass('password')) {this._createInputText();}
if (element.hasClass('select')) {this._createInputSelect();}
if (element.hasClass('textarea')) {this._createInputTextarea();}
if (element.hasClass('modern')) {this._createInputModern();}
element.data('input', this);
},
_createInputModern: function(){
var element = this.element;
var input = element.find("input");
var placeholder = element.find(".placeholder");
if (input.val() !== "") {
placeholder.css({display: "none"});
}
input.on("blur", function(){
if (input.val() !== "") {
placeholder.css({display: "none"});
} else {
placeholder.css({display: "block"});
}
});
input.on("focus", function(){
if (input.val() !== "") {
placeholder.css({display: "none"});
} else {
placeholder.css({display: "block"});
}
});
},
_createInputFile: function(){
var element = this.element;
var wrapper, button, input;
wrapper = $("<input type='text' class='input-file-wrapper' readonly style='z-index: 1; cursor: default;'>");
button = element.children('.button');
input = element.children('input[type="file"]');
input.css('z-index', 0);
wrapper.insertAfter(input);
input.attr('tabindex', '-1');
button.attr('type', 'button');
wrapper.attr('placeholder', input.attr('placeholder'));
input.on('change', function(){
var val = $(this).val();
if (val !== '') {
wrapper.val(val.replace(/.+[\\\/]/, ""));
wrapper.attr('title', val.replace(/.+[\\\/]/, ""));
}
});
element.on('click', '.button, .input-file-wrapper', function(){
input.trigger('click');
});
},
_createInputText: function(){
var element = this.element;
var helper_clear = element.find('.helper-button.clear');
var helper_reveal = element.find('.helper-button.reveal');
var input = element.find('input');
var helpers = element.find('.helper-button');
var buttons = element.find('.button');
var states = element.find('.input-state-error, .input-state-warning, .input-state-info, .input-state-success, .input-state-required');
var padding = 0;
var rtl = element.attr('dir') === 'rtl' || element.parents("[dir='rtl']").length > 0;
$.each(buttons, function(){
var b = $(this);
padding += b.outerWidth();
});
if (rtl) {
input.css({
'padding-left': padding + 5
});
states.css({
'left': padding + 8
});
} else {
input.css({
'padding-right': padding + 5
});
states.css({
'right': padding + 8
});
}
helpers
.attr('tabindex', -1)
.attr('type', 'button');
if (helper_clear) {
helper_clear.on('click', function(){
input.val('').trigger('change').focus();
});
}
if (helper_reveal && element.hasClass('password')) {
helper_reveal
.on('mousedown', function(){input.attr('type', 'text');})
.on('mouseup', function(){input.attr('type', 'password').focus();});
}
},
_createInputSelect: function(){
},
_createInputTextarea: function(){
var element = this.element, that = this, o = this.options;
var textarea = element.find('textarea');
console.log(textarea);
var fitTextarea = function(){
textarea.css({
"resize": 'none',
"overflow-y": 'hidden'
});
textarea[0].style.height = 0;
var adjust = textarea[0].scrollHeight;
if (o.textMaxHeight > 0) {
if (o.textMaxHeight > adjust) {
textarea[0].style.height = adjust + 'px';
} else {
textarea[0].style.height = o.textMaxHeight + 'px';
}
} else {
textarea[0].style.height = adjust + 'px';
}
};
if (o.textAutoResize) {
textarea.on('keyup', fitTextarea);
textarea.on('keydown', fitTextarea);
textarea.on('change', fitTextarea);
textarea.on('focus', fitTextarea);
textarea.on('cut', fitTextarea);
textarea.on('paste', fitTextarea);
textarea.on('drop', fitTextarea);
}
},
_destroy: function(){
},
_setOption: function(key, value){
this._super('_setOption', key, value);
}
});