form_placeholder.module
3.87 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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
/**
* @file
* Use field label as placeholder for all elements in choosen form.
*/
/**
* Implements hook_menu().
*/
function form_placeholder_menu() {
$items = array();
$items['admin/config/user-interface/form-placeholder'] = array(
'title' => 'Form Placeholder',
'description' => 'Use field label as placeholder for all elements in choosen form.',
'page callback' => 'drupal_get_form',
'page arguments' => array('form_placeholder_admin_settings'),
'access arguments' => array('administer form placeholder'),
'file' => 'form_placeholder.admin.inc',
);
return $items;
}
/**
* Implements hook_permission().
*/
function form_placeholder_permission() {
return array(
'administer form placeholder' => array(
'title' => t('Administer form placeholder settings'),
),
);
}
/**
* Implements hook_libraries_info().
*/
function form_placeholder_libraries_info() {
$libraries['jquery.placeholder'] = array(
'title' => 'jQuery Placeholder',
'vendor url' => 'https://github.com/mathiasbynens/jquery-placeholder',
'download url' => 'https://github.com/mathiasbynens/jquery-placeholder/archive/v2.0.8.zip',
'version' => '2.0.8',
'files' => array(
'js' => array(
'jquery.placeholder.js',
),
),
'variants' => array(
'source' => array(
'files' => array(
'js' => array(
'jquery.placeholder.js',
),
),
),
),
);
return $libraries;
}
/**
* Implements hook_element_info_alter().
*/
function form_placeholder_element_info_alter(&$types) {
foreach (array_keys($types) as $type) {
switch ($type) {
case 'form':
case 'textarea':
case 'textfield':
case 'password':
case 'password_confirm':
$types[$type]['#process'][] = 'form_placeholder_process_element';
break;
}
}
}
/**
* Element process callback.
*
* @param array $element
* The render array element.
*
* @return array
* The processed element.
*/
function form_placeholder_process_element($element) {
if (isset($element['#form_placeholder'])) {
$action = $element['#form_placeholder'] == TRUE ? 'include' : 'exclude';
if ($element['#type'] == 'form') {
$element['#attributes']['class'][] = 'form-placeholder-' . $action . '-children';
}
else {
$element['#attributes']['class'][] = 'form-placeholder-' . $action;
}
}
if ($element['#type'] == 'form') {
form_placeholder_attach($element);
}
return $element;
}
/**
* Adds placeholder to form element.
*
* @param array $element
* Form API element.
*/
function form_placeholder_attach(&$element) {
// Adding jQuery Placeholder plugin library.
if (module_exists('libraries') && ($path = libraries_get_path('jquery.placeholder'))) {
$element['#attached']['js'][] = array(
'type' => 'file',
'data' => $path . '/jquery.placeholder.js',
);
$fallback_support = TRUE;
}
else {
$fallback_support = FALSE;
}
// Adding settings.
$whitechars = array("\r\n", "\r", "\n");
$element['#attached']['js'][] = array(
'type' => 'setting',
'data' => array(
'form_placeholder' => array(
'fallback_support' => $fallback_support,
'include' => str_replace($whitechars, ',', variable_get('form_placeholder_include', '')),
'exclude' => str_replace($whitechars, ',', variable_get('form_placeholder_exclude', '')),
'required_indicator' => variable_get('form_placeholder_required_indicator', 'append'),
),
),
);
// Adding module JS file.
$element['#attached']['js'][] = array(
'type' => 'file',
'data' => drupal_get_path('module', 'form_placeholder') . '/form_placeholder.js',
);
}
/**
* Implements hook_form_BASE_FORM_ID_alter().
*/
function form_placeholder_form_webform_client_form_alter(&$form, &$form_state, $form_id) {
$form['#process'][] = 'form_placeholder_process_element';
}