forked from muicss/mui
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathforms.js
More file actions
133 lines (100 loc) · 2.76 KB
/
forms.js
File metadata and controls
133 lines (100 loc) · 2.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/**
* MUI WebComponents forms module
* @module webcomponents/forms
*/
'use strict';
var jqLite = require('../js/lib/jqLite'),
muiTextfield = require('../js/textfield'),
textfieldClass = 'mui-textfield',
floatingMod = '--float-label',
textfieldTagName = textfieldClass;
/**
* Class representing a Textfield element.
* @class
*/
var TextfieldProto = Object.create(HTMLElement.prototype);
/** Textfield createdCallback */
TextfieldProto.createdCallback = function() {
var root = this.createShadowRoot(),
innerEl = document.createElement('div'),
cls;
var attrs = {
type: this.getAttribute('type') || 'text',
value: this.getAttribute('value'),
placeholder: this.getAttribute('placeholder'),
label: this.getAttribute('label'),
floating: this.getAttribute('floating')
};
// set class
cls = textfieldClass;
if (attrs.floating !== null) cls += ' ' + textfieldClass + floatingMod;
innerEl.setAttribute('class', cls);
// add input element
innerEl.appendChild(_createInputEl(attrs));
// label element
if (attrs.label) {
var labelEl = _createLabelEl(attrs);
innerEl.appendChild(labelEl);
}
// add to root
root.appendChild(_getStyleEl().cloneNode(true));
root.appendChild(innerEl);
}
// ============================================================================
// UTILITIES
// ============================================================================
var styleEl;
/**
* Get or create style
* @function
*/
function _getStyleEl() {
if (styleEl === undefined) {
styleEl = document.createElement('style');
styleEl.innerHTML = require('mui.min.css');
}
return styleEl;
}
/**
* Create input element.
* @function
*/
function _createInputEl(attrs) {
var inputEl;
// input element
if (attrs.type === 'textarea') {
inputEl = document.createElement('textarea');
if (attrs.value) inputEl.appendChild(document.createTextNode(attrs.value));
} else {
inputEl = document.createElement('input');
inputEl.setAttribute('type', attrs.type);
if (attrs.value) inputEl.setAttribute('value', attrs.value);
}
if (attrs.placeholder) {
inputEl.setAttribute('placeholder', attrs.placeholder);
}
// add event listeners
muiTextfield.initialize(inputEl);
return inputEl;
}
/**
* Create label element.
* @function
*/
function _createLabelEl(attrs) {
var labelEl = document.createElement('label');
labelEl.appendChild(document.createTextNode(attrs.label));
return labelEl;
}
/** Define module API */
module.exports = {
/** Register module elements */
registerElements: function() {
var TextfieldElement = document.registerElement(textfieldTagName, {
prototype: TextfieldProto
});
return {
TextfieldElement: TextfieldElement
};
}
};