danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2 /**
|
danielebarchiesi@2
|
3 * @file
|
danielebarchiesi@2
|
4 * A light-weight, customizable image gallery plugin for Drupal based on jQuery
|
danielebarchiesi@2
|
5 */
|
danielebarchiesi@2
|
6
|
danielebarchiesi@2
|
7 define("FLEXSLIDER_VERSION", variable_get('flexslider_version', '2.0'));
|
danielebarchiesi@2
|
8 define("FLEXSLIDER_DEBUG", variable_get('flexslider_debug', FALSE));
|
danielebarchiesi@2
|
9
|
danielebarchiesi@2
|
10 /**
|
danielebarchiesi@2
|
11 * Implements hook_libraries_info().
|
danielebarchiesi@2
|
12 */
|
danielebarchiesi@2
|
13 function flexslider_libraries_info() {
|
danielebarchiesi@2
|
14 $libraries['flexslider'] = array(
|
danielebarchiesi@2
|
15 'name' => 'FlexSlider',
|
danielebarchiesi@2
|
16 'vendor url' => 'http://www.woothemes.com/flexslider/',
|
danielebarchiesi@2
|
17 'download url' => 'https://github.com/woothemes/FlexSlider',
|
danielebarchiesi@2
|
18 'version arguments' => array(
|
danielebarchiesi@2
|
19 'file' => 'jquery.flexslider-min.js',
|
danielebarchiesi@2
|
20 // jQuery FlexSlider v2.1
|
danielebarchiesi@2
|
21 'pattern' => '/jQuery FlexSlider v(\d+\.+\d+)/',
|
danielebarchiesi@2
|
22 'lines' => 2,
|
danielebarchiesi@2
|
23 ),
|
danielebarchiesi@2
|
24 'files' => array(
|
danielebarchiesi@2
|
25 'js' => array(
|
danielebarchiesi@2
|
26 'jquery.flexslider-min.js',
|
danielebarchiesi@2
|
27 ),
|
danielebarchiesi@2
|
28 'css' => array(
|
danielebarchiesi@2
|
29 'flexslider.css',
|
danielebarchiesi@2
|
30 ),
|
danielebarchiesi@2
|
31 ),
|
danielebarchiesi@2
|
32 'integration files' => array(
|
danielebarchiesi@2
|
33 'flexslider' => array(
|
danielebarchiesi@2
|
34 'css' => array('assets/css/flexslider_img.css'),
|
danielebarchiesi@2
|
35 ),
|
danielebarchiesi@2
|
36 ),
|
danielebarchiesi@2
|
37 );
|
danielebarchiesi@2
|
38
|
danielebarchiesi@2
|
39 return $libraries;
|
danielebarchiesi@2
|
40 }
|
danielebarchiesi@2
|
41
|
danielebarchiesi@2
|
42 /**
|
danielebarchiesi@2
|
43 * Implements hook_libraries_info_alter().
|
danielebarchiesi@2
|
44 */
|
danielebarchiesi@2
|
45 function flexslider_libraries_info_alter(&$libraries) {
|
danielebarchiesi@2
|
46 $debug = variable_get('flexslider_debug', FALSE);
|
danielebarchiesi@2
|
47 if ($debug) {
|
danielebarchiesi@2
|
48 // Switch to the unminified version of the library
|
danielebarchiesi@2
|
49 if (isset($libraries['flexslider'])) {
|
danielebarchiesi@2
|
50 $libraries['flexslider']['files']['js'] = array(
|
danielebarchiesi@2
|
51 'jquery.flexslider.js',
|
danielebarchiesi@2
|
52 );
|
danielebarchiesi@2
|
53 }
|
danielebarchiesi@2
|
54 }
|
danielebarchiesi@2
|
55
|
danielebarchiesi@2
|
56 // Add support for jQuery Easing module
|
danielebarchiesi@2
|
57 if (module_exists('jqeasing')) {
|
danielebarchiesi@2
|
58 $libraries['flexslider']['dependencies'][] = 'easing (>=1.3)';
|
danielebarchiesi@2
|
59 }
|
danielebarchiesi@2
|
60 }
|
danielebarchiesi@2
|
61
|
danielebarchiesi@2
|
62 /**
|
danielebarchiesi@2
|
63 * Implements hook_library().
|
danielebarchiesi@2
|
64 *
|
danielebarchiesi@2
|
65 * We also define FlexSlider through the core library callbacks
|
danielebarchiesi@2
|
66 */
|
danielebarchiesi@2
|
67 function flexslider_library() {
|
danielebarchiesi@2
|
68 $module_path = drupal_get_path('module', 'flexslider');
|
danielebarchiesi@2
|
69 $library_path = libraries_get_path('flexslider');
|
danielebarchiesi@2
|
70
|
danielebarchiesi@2
|
71 $libraries['flexslider'] = array(
|
danielebarchiesi@2
|
72 'title' => 'FlexSlider',
|
danielebarchiesi@2
|
73 'website' => 'http://flexslider.woothemes.com',
|
danielebarchiesi@2
|
74 'version' => FLEXSLIDER_VERSION,
|
danielebarchiesi@2
|
75 'js' => array(
|
danielebarchiesi@2
|
76 $library_path . '/jquery.flexslider-min.js' => array(
|
danielebarchiesi@2
|
77 'scope' => 'footer',
|
danielebarchiesi@2
|
78 ),
|
danielebarchiesi@2
|
79 ),
|
danielebarchiesi@2
|
80 'css' => array(
|
danielebarchiesi@2
|
81 $library_path . '/flexslider.css' => array(
|
danielebarchiesi@2
|
82 'type' => 'file',
|
danielebarchiesi@2
|
83 'media' => 'screen',
|
danielebarchiesi@2
|
84 ),
|
danielebarchiesi@2
|
85 $module_path . '/assets/css/flexslider_img.css' => array(
|
danielebarchiesi@2
|
86 'type' => 'file',
|
danielebarchiesi@2
|
87 'media' => 'screen',
|
danielebarchiesi@2
|
88 ),
|
danielebarchiesi@2
|
89 ),
|
danielebarchiesi@2
|
90 );
|
danielebarchiesi@2
|
91 return $libraries;
|
danielebarchiesi@2
|
92 }
|
danielebarchiesi@2
|
93
|
danielebarchiesi@2
|
94 /**
|
danielebarchiesi@2
|
95 * Implements hook_library_alter().
|
danielebarchiesi@2
|
96 */
|
danielebarchiesi@2
|
97 function flexslider_library_alter(&$libraries, $module) {
|
danielebarchiesi@2
|
98 // Enable debug mode
|
danielebarchiesi@2
|
99 if (FLEXSLIDER_DEBUG) {
|
danielebarchiesi@2
|
100 if ($module == 'flexslider' and isset($libraries['flexslider'])) {
|
danielebarchiesi@2
|
101 $libraries['flexslider']['js'] = array(
|
danielebarchiesi@2
|
102 libraries_get_path() . '/jquery.flexslider.js' => array(
|
danielebarchiesi@2
|
103 'scope' => 'footer',
|
danielebarchiesi@2
|
104 ),
|
danielebarchiesi@2
|
105 );
|
danielebarchiesi@2
|
106 }
|
danielebarchiesi@2
|
107 }
|
danielebarchiesi@2
|
108 }
|
danielebarchiesi@2
|
109
|
danielebarchiesi@2
|
110 /**
|
danielebarchiesi@2
|
111 * Implements hook_permission().
|
danielebarchiesi@2
|
112 */
|
danielebarchiesi@2
|
113 function flexslider_permission() {
|
danielebarchiesi@2
|
114 return array(
|
danielebarchiesi@2
|
115 'administer flexslider' => array(
|
danielebarchiesi@2
|
116 'title' => t('Administer the FlexSlider module'),
|
danielebarchiesi@2
|
117 ),
|
danielebarchiesi@2
|
118 );
|
danielebarchiesi@2
|
119 }
|
danielebarchiesi@2
|
120
|
danielebarchiesi@2
|
121 /**
|
danielebarchiesi@2
|
122 * Implements hook_menu().
|
danielebarchiesi@2
|
123 */
|
danielebarchiesi@2
|
124 function flexslider_menu() {
|
danielebarchiesi@2
|
125 $items = array();
|
danielebarchiesi@2
|
126
|
danielebarchiesi@2
|
127 $items['admin/config/media/flexslider/advanced'] = array(
|
danielebarchiesi@2
|
128 'title' => 'Advanced settings',
|
danielebarchiesi@2
|
129 'description' => 'Configure the advanced flexslider module settings.',
|
danielebarchiesi@2
|
130 'page callback' => 'drupal_get_form',
|
danielebarchiesi@2
|
131 'page arguments' => array('flexslider_form_settings'),
|
danielebarchiesi@2
|
132 'access arguments' => array('administer flexslider'),
|
danielebarchiesi@2
|
133 'type' => MENU_LOCAL_TASK,
|
danielebarchiesi@2
|
134 'weight' => 2,
|
danielebarchiesi@2
|
135 'file' => 'flexslider.admin.inc',
|
danielebarchiesi@2
|
136 );
|
danielebarchiesi@2
|
137
|
danielebarchiesi@2
|
138 return $items;
|
danielebarchiesi@2
|
139 }
|
danielebarchiesi@2
|
140
|
danielebarchiesi@2
|
141 /**
|
danielebarchiesi@2
|
142 * Implements hook_help().
|
danielebarchiesi@2
|
143 */
|
danielebarchiesi@2
|
144 function flexslider_help($path, $arg) {
|
danielebarchiesi@2
|
145 switch ($path) {
|
danielebarchiesi@2
|
146 case 'admin/config/media/flexslider/edit/%':
|
danielebarchiesi@2
|
147 return
|
danielebarchiesi@2
|
148 '<p>'
|
danielebarchiesi@2
|
149 . t('An <em>option set</em> defines exactly how a flexslider image gallery looks like on your site. '
|
danielebarchiesi@2
|
150 . 'It is s a combination of <a href="@styles">image styles</a> for the various image sizes and FlexSlider library options.', array('@styles' => url('admin/config/media/image-styles'))) . '<br />'
|
danielebarchiesi@2
|
151 . t('For a full documentation of all options, refer to the official @docs.', array('@docs' => l(t('FlexSlider documentation'), 'http://www.woothemes.com/flexslider/')))
|
danielebarchiesi@2
|
152 . '</p>';
|
danielebarchiesi@2
|
153 }
|
danielebarchiesi@2
|
154 }
|
danielebarchiesi@2
|
155
|
danielebarchiesi@2
|
156 /**
|
danielebarchiesi@2
|
157 * Implements hook_theme().
|
danielebarchiesi@2
|
158 */
|
danielebarchiesi@2
|
159 function flexslider_theme() {
|
danielebarchiesi@2
|
160 return array(
|
danielebarchiesi@2
|
161 // Container for nav elements (arrows)
|
danielebarchiesi@2
|
162 'flexslider' => array(
|
danielebarchiesi@2
|
163 'variables' => array('items' => array(), 'settings' => array()),
|
danielebarchiesi@2
|
164 'template' => 'theme/flexslider',
|
danielebarchiesi@2
|
165 'file' => 'theme/flexslider.theme.inc',
|
danielebarchiesi@2
|
166 ),
|
danielebarchiesi@2
|
167 'flexslider_list' => array(
|
danielebarchiesi@2
|
168 'variables' => array('items' => array(), 'settings' => array()),
|
danielebarchiesi@2
|
169 'file' => 'theme/flexslider.theme.inc',
|
danielebarchiesi@2
|
170 ),
|
danielebarchiesi@2
|
171 'flexslider_list_item' => array(
|
danielebarchiesi@2
|
172 'variables' => array('item' => array(), 'settings' => array()),
|
danielebarchiesi@2
|
173 'file' => 'theme/flexslider.theme.inc',
|
danielebarchiesi@2
|
174 ),
|
danielebarchiesi@2
|
175 );
|
danielebarchiesi@2
|
176 }
|
danielebarchiesi@2
|
177
|
danielebarchiesi@2
|
178 /**
|
danielebarchiesi@2
|
179 * Implements hook_image_default_styles().
|
danielebarchiesi@2
|
180 */
|
danielebarchiesi@2
|
181 function flexslider_image_default_styles() {
|
danielebarchiesi@2
|
182 $styles = array();
|
danielebarchiesi@2
|
183
|
danielebarchiesi@2
|
184 // Default image preset for FlexSlider
|
danielebarchiesi@2
|
185 $styles['flexslider_full'] = array(
|
danielebarchiesi@2
|
186 'effects' => array(
|
danielebarchiesi@2
|
187 array(
|
danielebarchiesi@2
|
188 'name' => 'image_scale_and_crop',
|
danielebarchiesi@2
|
189 'data' => array('width' => 800, 'height' => 500),
|
danielebarchiesi@2
|
190 'weight' => 0,
|
danielebarchiesi@2
|
191 ),
|
danielebarchiesi@2
|
192 ),
|
danielebarchiesi@2
|
193 );
|
danielebarchiesi@2
|
194
|
danielebarchiesi@2
|
195 // Default image preset for FlexSlider thumbnails
|
danielebarchiesi@2
|
196 $styles['flexslider_thumbnail'] = array(
|
danielebarchiesi@2
|
197 'effects' => array(
|
danielebarchiesi@2
|
198 array(
|
danielebarchiesi@2
|
199 'name' => 'image_scale_and_crop',
|
danielebarchiesi@2
|
200 'data' => array('width' => 160, 'height' => 100),
|
danielebarchiesi@2
|
201 'weight' => 0,
|
danielebarchiesi@2
|
202 ),
|
danielebarchiesi@2
|
203 ),
|
danielebarchiesi@2
|
204 );
|
danielebarchiesi@2
|
205
|
danielebarchiesi@2
|
206 return $styles;
|
danielebarchiesi@2
|
207 }
|
danielebarchiesi@2
|
208
|
danielebarchiesi@2
|
209 /**
|
danielebarchiesi@2
|
210 * Implements hook_ctools_plugin_api().
|
danielebarchiesi@2
|
211 */
|
danielebarchiesi@2
|
212 function flexslider_ctools_plugin_api($owner, $api) {
|
danielebarchiesi@2
|
213 if ($owner == 'flexslider' && $api == 'flexslider_default_preset') {
|
danielebarchiesi@2
|
214 return array('version' => 1);
|
danielebarchiesi@2
|
215 }
|
danielebarchiesi@2
|
216 }
|
danielebarchiesi@2
|
217
|
danielebarchiesi@2
|
218 /**
|
danielebarchiesi@2
|
219 * Implements hook_ctools_plugin_directory().
|
danielebarchiesi@2
|
220 */
|
danielebarchiesi@2
|
221 function flexslider_ctools_plugin_directory($module, $type) {
|
danielebarchiesi@2
|
222 if ($type == 'export_ui') {
|
danielebarchiesi@2
|
223 return 'plugins/export_ui';
|
danielebarchiesi@2
|
224 }
|
danielebarchiesi@2
|
225 }
|
danielebarchiesi@2
|
226
|
danielebarchiesi@2
|
227 /**
|
danielebarchiesi@2
|
228 * Create a new optionset object
|
danielebarchiesi@2
|
229 *
|
danielebarchiesi@2
|
230 * Note that this function does not save the optionset to the database.
|
danielebarchiesi@2
|
231 * @see flexslider_optionset_save()
|
danielebarchiesi@2
|
232 */
|
danielebarchiesi@2
|
233 function flexslider_optionset_create($values = array()) {
|
danielebarchiesi@2
|
234 ctools_include('export');
|
danielebarchiesi@2
|
235 $optionset = ctools_export_crud_new('flexslider_optionset');
|
danielebarchiesi@2
|
236
|
danielebarchiesi@2
|
237 // Set the options to an array
|
danielebarchiesi@2
|
238 $optionset->options = array();
|
danielebarchiesi@2
|
239
|
danielebarchiesi@2
|
240 // Assign specified values
|
danielebarchiesi@2
|
241 if (isset($values['name'])) {
|
danielebarchiesi@2
|
242 $optionset->name = $values['name'];
|
danielebarchiesi@2
|
243 }
|
danielebarchiesi@2
|
244 if (isset($values['title'])) {
|
danielebarchiesi@2
|
245 $optionset->title = $values['title'];
|
danielebarchiesi@2
|
246 }
|
danielebarchiesi@2
|
247 if (isset($values['options']) and is_array($values['options'])) {
|
danielebarchiesi@2
|
248 $optionset->options = $values['options'];
|
danielebarchiesi@2
|
249 }
|
danielebarchiesi@2
|
250
|
danielebarchiesi@2
|
251 // Merge default settings with any given settings
|
danielebarchiesi@2
|
252 $optionset_defaults = _flexslider_optionset_defaults();
|
danielebarchiesi@2
|
253 $optionset->options = $optionset_defaults += $optionset->options;
|
danielebarchiesi@2
|
254
|
danielebarchiesi@2
|
255 return $optionset;
|
danielebarchiesi@2
|
256 }
|
danielebarchiesi@2
|
257
|
danielebarchiesi@2
|
258 /**
|
danielebarchiesi@2
|
259 * Fetches all option sets from the database and returns them as an associative array.
|
danielebarchiesi@2
|
260 */
|
danielebarchiesi@2
|
261 function flexslider_optionset_load_all() {
|
danielebarchiesi@2
|
262 ctools_include('export');
|
danielebarchiesi@2
|
263 $optionsets = ctools_export_crud_load_all('flexslider_optionset');
|
danielebarchiesi@2
|
264 foreach ($optionsets as $optionset) {
|
danielebarchiesi@2
|
265 // Ensure the optionset is typecast after being loaded from DB
|
danielebarchiesi@2
|
266 _flexslider_typecast_optionset($optionset->options);
|
danielebarchiesi@2
|
267 }
|
danielebarchiesi@2
|
268 return $optionsets;
|
danielebarchiesi@2
|
269 }
|
danielebarchiesi@2
|
270
|
danielebarchiesi@2
|
271 /**
|
danielebarchiesi@2
|
272 * Fetches the given option set and returns it as an object or NULL, if no set could be found.
|
danielebarchiesi@2
|
273 */
|
danielebarchiesi@2
|
274 function flexslider_optionset_load($optionset_name) {
|
danielebarchiesi@2
|
275 ctools_include('export');
|
danielebarchiesi@2
|
276 $optionset = ctools_export_crud_load('flexslider_optionset', $optionset_name);
|
danielebarchiesi@2
|
277 // Ensure the optionset is typecast after being loaded from DB
|
danielebarchiesi@2
|
278 _flexslider_typecast_optionset($optionset->options);
|
danielebarchiesi@2
|
279 return $optionset;
|
danielebarchiesi@2
|
280 }
|
danielebarchiesi@2
|
281
|
danielebarchiesi@2
|
282 /**
|
danielebarchiesi@2
|
283 * Checks whether an option set with the given name already exists.
|
danielebarchiesi@2
|
284 */
|
danielebarchiesi@2
|
285 function flexslider_optionset_exists($optionset_name) {
|
danielebarchiesi@2
|
286 ctools_include('export');
|
danielebarchiesi@2
|
287 $optionset = ctools_export_crud_load('flexslider_optionset', $optionset_name);
|
danielebarchiesi@2
|
288 return isset($optionset->name);
|
danielebarchiesi@2
|
289 }
|
danielebarchiesi@2
|
290
|
danielebarchiesi@2
|
291 /**
|
danielebarchiesi@2
|
292 * Saves the given option set to the database.
|
danielebarchiesi@2
|
293 * Set the $new flag if this set has not been written before.
|
danielebarchiesi@2
|
294 *
|
danielebarchiesi@2
|
295 * @return object|boolean
|
danielebarchiesi@2
|
296 * Returns the newly saved object, FALSE otherwise.
|
danielebarchiesi@2
|
297 */
|
danielebarchiesi@2
|
298 function flexslider_optionset_save($optionset, $new = FALSE) {
|
danielebarchiesi@2
|
299 // If the machine name is missing or already in use, return an error.
|
danielebarchiesi@2
|
300 if (empty($optionset->name) or (FALSE != flexslider_optionset_exists($optionset->name) and $new)) {
|
danielebarchiesi@2
|
301 return FALSE;
|
danielebarchiesi@2
|
302 }
|
danielebarchiesi@2
|
303
|
danielebarchiesi@2
|
304 // Check for an invalid list of options
|
danielebarchiesi@2
|
305 if (isset($optionset->options) and !is_array($optionset->options)) {
|
danielebarchiesi@2
|
306 return FALSE;
|
danielebarchiesi@2
|
307 }
|
danielebarchiesi@2
|
308
|
danielebarchiesi@2
|
309
|
danielebarchiesi@2
|
310 // If the title is missing, default to the name
|
danielebarchiesi@2
|
311 if (empty($optionset->title)) {
|
danielebarchiesi@2
|
312 $optionset->title = $optionset->name;
|
danielebarchiesi@2
|
313 }
|
danielebarchiesi@2
|
314
|
danielebarchiesi@2
|
315 // Merge default settings with any given settings
|
danielebarchiesi@2
|
316 $optionset_defaults = _flexslider_optionset_defaults();
|
danielebarchiesi@2
|
317 $optionset->options = $optionset_defaults += $optionset->options;
|
danielebarchiesi@2
|
318
|
danielebarchiesi@2
|
319 // Prepare the database values.
|
danielebarchiesi@2
|
320 $db_values = array(
|
danielebarchiesi@2
|
321 'name' => $optionset->name,
|
danielebarchiesi@2
|
322 'title' => $optionset->title,
|
danielebarchiesi@2
|
323 'options' => _flexslider_typecast_optionset($optionset->options),
|
danielebarchiesi@2
|
324 );
|
danielebarchiesi@2
|
325
|
danielebarchiesi@2
|
326 if ($new) {
|
danielebarchiesi@2
|
327 $result = drupal_write_record('flexslider_optionset', $db_values);
|
danielebarchiesi@2
|
328 }
|
danielebarchiesi@2
|
329 else {
|
danielebarchiesi@2
|
330 $result = drupal_write_record('flexslider_optionset', $db_values, 'name');
|
danielebarchiesi@2
|
331 }
|
danielebarchiesi@2
|
332
|
danielebarchiesi@2
|
333 // Return the object if the values were saved successfully.
|
danielebarchiesi@2
|
334 if (($new and SAVED_NEW == $result) or (!$new and SAVED_UPDATED == $result)) {
|
danielebarchiesi@2
|
335 return $optionset;
|
danielebarchiesi@2
|
336 }
|
danielebarchiesi@2
|
337
|
danielebarchiesi@2
|
338 // Otherwise, an error occured
|
danielebarchiesi@2
|
339 return FALSE;
|
danielebarchiesi@2
|
340 }
|
danielebarchiesi@2
|
341
|
danielebarchiesi@2
|
342 /**
|
danielebarchiesi@2
|
343 * Deletes the given option set from the database.
|
danielebarchiesi@2
|
344 *
|
danielebarchiesi@2
|
345 * @param object|string $optionset
|
danielebarchiesi@2
|
346 * Optionset object or machine name
|
danielebarchiesi@2
|
347 */
|
danielebarchiesi@2
|
348 function flexslider_optionset_delete($optionset) {
|
danielebarchiesi@2
|
349 if (isset($optionset->name)) {
|
danielebarchiesi@2
|
350 $name = $optionset->name;
|
danielebarchiesi@2
|
351 }
|
danielebarchiesi@2
|
352 else {
|
danielebarchiesi@2
|
353 $name = $optionset;
|
danielebarchiesi@2
|
354 }
|
danielebarchiesi@2
|
355 db_delete('flexslider_optionset')->condition('name', $name)->execute();
|
danielebarchiesi@2
|
356 }
|
danielebarchiesi@2
|
357
|
danielebarchiesi@2
|
358 /*
|
danielebarchiesi@2
|
359 * This function loads the required JavaScripts and settings for a flexslider
|
danielebarchiesi@2
|
360 * instance.
|
danielebarchiesi@2
|
361 *
|
danielebarchiesi@2
|
362 * @param string $id [optional]
|
danielebarchiesi@2
|
363 * ID Attribute for FlexSlider container
|
danielebarchiesi@2
|
364 * @param object|strong $optionset [optional]
|
danielebarchiesi@2
|
365 * Option set to load or the machine name of an existing optionset
|
danielebarchiesi@2
|
366 */
|
danielebarchiesi@2
|
367 function flexslider_add($id = NULL, $optionset = NULL) {
|
danielebarchiesi@2
|
368 // Check optionset value
|
danielebarchiesi@2
|
369 if (is_string($optionset)) {
|
danielebarchiesi@2
|
370 $name = $optionset;
|
danielebarchiesi@2
|
371 $optionset = flexslider_optionset_load($name);
|
danielebarchiesi@2
|
372 if (empty($optionset)) {
|
danielebarchiesi@2
|
373 watchdog('flexslider', 'Invalid optionset name supplied to flexslider_add: @name', array('@name' => $name), WATCHDOG_WARNING);
|
danielebarchiesi@2
|
374 return;
|
danielebarchiesi@2
|
375 }
|
danielebarchiesi@2
|
376 }
|
danielebarchiesi@2
|
377
|
danielebarchiesi@2
|
378 // Static array to remember which scripts are already attached.
|
danielebarchiesi@2
|
379 // @todo not currently in use
|
danielebarchiesi@2
|
380 $cache = &drupal_static(__FUNCTION__, array());
|
danielebarchiesi@2
|
381
|
danielebarchiesi@2
|
382 // @todo investigate the best way to cache data loaded from libraries_load()
|
danielebarchiesi@2
|
383 libraries_load('flexslider');
|
danielebarchiesi@2
|
384
|
danielebarchiesi@2
|
385 // If the ID or optionset aren't set, it is assumed the settings will be set
|
danielebarchiesi@2
|
386 // manually via the calling module/theme
|
danielebarchiesi@2
|
387 if (!empty($id) && !empty($optionset)) {
|
danielebarchiesi@2
|
388 // JavaScript settings
|
danielebarchiesi@2
|
389 $js_settings = array(
|
danielebarchiesi@2
|
390 'optionsets' => array(
|
danielebarchiesi@2
|
391 $optionset->name => $optionset->options,
|
danielebarchiesi@2
|
392 ),
|
danielebarchiesi@2
|
393 'instances' => array(
|
danielebarchiesi@2
|
394 $id => $optionset->name,
|
danielebarchiesi@2
|
395 ),
|
danielebarchiesi@2
|
396 );
|
danielebarchiesi@2
|
397 // @todo add alter hook for optionset
|
danielebarchiesi@2
|
398 drupal_add_js(array('flexslider' => $js_settings), 'setting');
|
danielebarchiesi@2
|
399 }
|
danielebarchiesi@2
|
400 // Loader JavaScript
|
danielebarchiesi@2
|
401 drupal_add_js(drupal_get_path('module', 'flexslider') . '/assets/js/flexslider.load.js', array('type' => 'file', 'scope' => 'footer'));
|
danielebarchiesi@2
|
402 }
|
danielebarchiesi@2
|
403
|
danielebarchiesi@2
|
404 /**
|
danielebarchiesi@2
|
405 * Default settings for a newly created option set
|
danielebarchiesi@2
|
406 *
|
danielebarchiesi@2
|
407 * @param string $key [optional]
|
danielebarchiesi@2
|
408 * Get specific default value
|
danielebarchiesi@2
|
409 *
|
danielebarchiesi@2
|
410 * @see https://github.com/woothemes/FlexSlider/blob/master/README.mdown
|
danielebarchiesi@2
|
411 * @see https://github.com/woothemes/FlexSlider/wiki/FlexSlider-Properties
|
danielebarchiesi@2
|
412 */
|
danielebarchiesi@2
|
413 function _flexslider_optionset_defaults($key = NULL) {
|
danielebarchiesi@2
|
414
|
danielebarchiesi@2
|
415 // We add typecasts to ensure the variables get json encoded properly
|
danielebarchiesi@2
|
416
|
danielebarchiesi@2
|
417 $defaults = array(
|
danielebarchiesi@2
|
418 // v2.x options
|
danielebarchiesi@2
|
419 'namespace' => 'flex-',
|
danielebarchiesi@2
|
420 'selector' => '.slides > li',
|
danielebarchiesi@2
|
421 'easing' => 'swing',
|
danielebarchiesi@2
|
422 'direction' => 'horizontal',
|
danielebarchiesi@2
|
423 'reverse' => FALSE, // @todo verify data value
|
danielebarchiesi@2
|
424 'smoothHeight' => FALSE, // @todo verify data value
|
danielebarchiesi@2
|
425 'startAt' => 0,
|
danielebarchiesi@2
|
426 'animationSpeed' => 600,
|
danielebarchiesi@2
|
427 'initDelay' => 0,
|
danielebarchiesi@2
|
428 'useCSS' => TRUE,
|
danielebarchiesi@2
|
429 'touch' => TRUE,
|
danielebarchiesi@2
|
430 'video' => FALSE,
|
danielebarchiesi@2
|
431 'keyboard' => TRUE,
|
danielebarchiesi@2
|
432 'multipleKeyboard' => FALSE,
|
danielebarchiesi@2
|
433 'mousewheel' => FALSE, // requires https://github.com/brandonaaron/jquery-mousewheel @todo add to make file
|
danielebarchiesi@2
|
434 'controlsContainer' => '.flex-control-nav-container',
|
danielebarchiesi@2
|
435 'sync' => '',
|
danielebarchiesi@2
|
436 'asNavFor' => '',
|
danielebarchiesi@2
|
437 'itemWidth' => 0,
|
danielebarchiesi@2
|
438 'itemMargin' => 0,
|
danielebarchiesi@2
|
439 'minItems' => 0,
|
danielebarchiesi@2
|
440 'maxItems' => 0,
|
danielebarchiesi@2
|
441 'move' => 0,
|
danielebarchiesi@2
|
442 //'start' => '',
|
danielebarchiesi@2
|
443 //'before' => '',
|
danielebarchiesi@2
|
444 //'after' => '',
|
danielebarchiesi@2
|
445 //'end' => '',
|
danielebarchiesi@2
|
446 //'added' => '',
|
danielebarchiesi@2
|
447 //'removed' => '',
|
danielebarchiesi@2
|
448
|
danielebarchiesi@2
|
449 // @todo verify the 1.x options are still valid
|
danielebarchiesi@2
|
450 // v1.x options
|
danielebarchiesi@2
|
451 'animation' => 'fade',
|
danielebarchiesi@2
|
452 //'animationDuration' => 6000, -- replaced by 'animationSpeed'
|
danielebarchiesi@2
|
453 //'slidedirection' => 'horizontal', -- replaced by "direction"
|
danielebarchiesi@2
|
454 'slideshow' => TRUE,
|
danielebarchiesi@2
|
455 'slideshowSpeed' => 7000,
|
danielebarchiesi@2
|
456 'directionNav' => TRUE,
|
danielebarchiesi@2
|
457 'controlNav' => TRUE,
|
danielebarchiesi@2
|
458 //'keyboardnav' => TRUE, -- replaced by 'keyboard'
|
danielebarchiesi@2
|
459 //'mousewheel' => FALSE,
|
danielebarchiesi@2
|
460 'prevText' => t('Previous'),
|
danielebarchiesi@2
|
461 'nextText' => t('Next'),
|
danielebarchiesi@2
|
462 'pausePlay' => FALSE,
|
danielebarchiesi@2
|
463 'pauseText' => t('Pause'),
|
danielebarchiesi@2
|
464 'playText' => t('Play'),
|
danielebarchiesi@2
|
465 'randomize' => FALSE,
|
danielebarchiesi@2
|
466 //'slidetostart' => 0, // integer value, not boolean -- replace by "startAt"
|
danielebarchiesi@2
|
467 'animationLoop' => TRUE,
|
danielebarchiesi@2
|
468 'pauseOnAction' => TRUE,
|
danielebarchiesi@2
|
469 'pauseOnHover' => FALSE,
|
danielebarchiesi@2
|
470 //'controlscontainer' => '.flex-nav-container', -- updated in v2
|
danielebarchiesi@2
|
471 'manualControls' => '',
|
danielebarchiesi@2
|
472 //'startCallback' => 'function() {}', -- replace by 'start'
|
danielebarchiesi@2
|
473 //'beforeCallback' => 'function() {}', -- replaced by 'before'
|
danielebarchiesi@2
|
474 //'afterCallback' => 'function() {}', -- replaced by 'after'
|
danielebarchiesi@2
|
475 //'endCallback' => 'function() {}', -- replaced by 'end'
|
danielebarchiesi@2
|
476 );
|
danielebarchiesi@2
|
477
|
danielebarchiesi@2
|
478 // Typecast the values
|
danielebarchiesi@2
|
479 _flexslider_typecast_optionset($defaults);
|
danielebarchiesi@2
|
480
|
danielebarchiesi@2
|
481 // Return the specific item
|
danielebarchiesi@2
|
482 if (isset($key) and array_key_exists($key, $defaults)) {
|
danielebarchiesi@2
|
483 return $defaults[$key];
|
danielebarchiesi@2
|
484 }
|
danielebarchiesi@2
|
485
|
danielebarchiesi@2
|
486 // Return all items
|
danielebarchiesi@2
|
487 return $defaults;
|
danielebarchiesi@2
|
488 }
|
danielebarchiesi@2
|
489
|
danielebarchiesi@2
|
490 /**
|
danielebarchiesi@2
|
491 * Adds the typecasting to the values so that the generated
|
danielebarchiesi@2
|
492 * json array keeps the right values
|
danielebarchiesi@2
|
493 */
|
danielebarchiesi@2
|
494 function _flexslider_typecast_optionset(&$options) {
|
danielebarchiesi@2
|
495 if (isset($options) && !empty($options)) {
|
danielebarchiesi@2
|
496 foreach ($options as $key => $value) {
|
danielebarchiesi@2
|
497 switch ($key) {
|
danielebarchiesi@2
|
498 case 'namespace':
|
danielebarchiesi@2
|
499 case 'selector':
|
danielebarchiesi@2
|
500 case 'easing':
|
danielebarchiesi@2
|
501 case 'direction':
|
danielebarchiesi@2
|
502 case 'controlsContainer':
|
danielebarchiesi@2
|
503 case 'sync':
|
danielebarchiesi@2
|
504 case 'asNavFor':
|
danielebarchiesi@2
|
505 case 'fade':
|
danielebarchiesi@2
|
506 case 'prevText':
|
danielebarchiesi@2
|
507 case 'nextText':
|
danielebarchiesi@2
|
508 case 'pauseText':
|
danielebarchiesi@2
|
509 case 'playText':
|
danielebarchiesi@2
|
510 case 'manualControls':
|
danielebarchiesi@2
|
511 $options[$key] = (string)$value;
|
danielebarchiesi@2
|
512 break;
|
danielebarchiesi@2
|
513 case 'startAt':
|
danielebarchiesi@2
|
514 case 'animationSpeed':
|
danielebarchiesi@2
|
515 case 'initDelay':
|
danielebarchiesi@2
|
516 case 'itemWidth':
|
danielebarchiesi@2
|
517 case 'itemMargin':
|
danielebarchiesi@2
|
518 case 'minItems':
|
danielebarchiesi@2
|
519 case 'maxItems':
|
danielebarchiesi@2
|
520 case 'move':
|
danielebarchiesi@2
|
521 $options[$key] = (int)$value;
|
danielebarchiesi@2
|
522 break;
|
danielebarchiesi@2
|
523 case 'controlNav':
|
danielebarchiesi@2
|
524 if ($value == 'thumbnails') {
|
danielebarchiesi@2
|
525 $options[$key] = (string)$value;
|
danielebarchiesi@2
|
526 break;
|
danielebarchiesi@2
|
527 }
|
danielebarchiesi@2
|
528 case 'reverse':
|
danielebarchiesi@2
|
529 case 'smoothHeight':
|
danielebarchiesi@2
|
530 case 'useCSS':
|
danielebarchiesi@2
|
531 case 'touch':
|
danielebarchiesi@2
|
532 case 'video':
|
danielebarchiesi@2
|
533 case 'keyboard':
|
danielebarchiesi@2
|
534 case 'multipleKeyboard':
|
danielebarchiesi@2
|
535 case 'mouseWheel':
|
danielebarchiesi@2
|
536 case 'slideshow':
|
danielebarchiesi@2
|
537 case 'directionNav':
|
danielebarchiesi@2
|
538 case 'pausePlay':
|
danielebarchiesi@2
|
539 case 'randomize':
|
danielebarchiesi@2
|
540 case 'animationLoop':
|
danielebarchiesi@2
|
541 case 'pauseOnAction':
|
danielebarchiesi@2
|
542 case 'pauseOnHover':
|
danielebarchiesi@2
|
543 $options[$key] = (boolean)$value;
|
danielebarchiesi@2
|
544 break;
|
danielebarchiesi@2
|
545 }
|
danielebarchiesi@2
|
546 }
|
danielebarchiesi@2
|
547 }
|
danielebarchiesi@2
|
548 }
|
danielebarchiesi@2
|
549
|
danielebarchiesi@2
|
550 /**
|
danielebarchiesi@2
|
551 * List of all easing methods available from jQuery Easing v1.3
|
danielebarchiesi@2
|
552 */
|
danielebarchiesi@2
|
553 function _flexslider_jqeasing_options() {
|
danielebarchiesi@2
|
554 return array(
|
danielebarchiesi@2
|
555 "jswing" => "jswing",
|
danielebarchiesi@2
|
556 "def" => "def",
|
danielebarchiesi@2
|
557 "easeInQuad" => "easeInQuad",
|
danielebarchiesi@2
|
558 "easeOutQuad" => "easeOutQuad",
|
danielebarchiesi@2
|
559 "easeInOutQuad" => "easeInOutQuad",
|
danielebarchiesi@2
|
560 "easeInCubic" => "easeInCubic",
|
danielebarchiesi@2
|
561 "easeOutCubic" => "easeOutCubic",
|
danielebarchiesi@2
|
562 "easeInOutCubic" => "easeInOutCubic",
|
danielebarchiesi@2
|
563 "easeInQuart" => "easeInQuart",
|
danielebarchiesi@2
|
564 "easeOutQuart" => "easeOutQuart",
|
danielebarchiesi@2
|
565 "easeInOutQuart" => "easeInOutQuart",
|
danielebarchiesi@2
|
566 "easeInQuint" => "easeInQuint",
|
danielebarchiesi@2
|
567 "easeOutQuint" => "easeOutQuint",
|
danielebarchiesi@2
|
568 "easeInOutQuint" => "easeInOutQuint",
|
danielebarchiesi@2
|
569 "easeInSine" => "easeInSine",
|
danielebarchiesi@2
|
570 "easeOutSine" => "easeOutSine",
|
danielebarchiesi@2
|
571 "easeInOutSine" => "easeInOutSine",
|
danielebarchiesi@2
|
572 "easeInExpo" => "easeInExpo",
|
danielebarchiesi@2
|
573 "easeOutExpo" => "easeOutExpo",
|
danielebarchiesi@2
|
574 "easeInOutExpo" => "easeInOutExpo",
|
danielebarchiesi@2
|
575 "easeInCirc" => "easeInCirc",
|
danielebarchiesi@2
|
576 "easeOutCirc" => "easeOutCirc",
|
danielebarchiesi@2
|
577 "easeInOutCirc" => "easeInOutCirc",
|
danielebarchiesi@2
|
578 "easeInElastic" => "easeInElastic",
|
danielebarchiesi@2
|
579 "easeOutElastic" => "easeOutElastic",
|
danielebarchiesi@2
|
580 "easeInOutElastic" => "easeInOutElastic",
|
danielebarchiesi@2
|
581 "easeInBack" => "easeInBack",
|
danielebarchiesi@2
|
582 "easeOutBack" => "easeOutBack",
|
danielebarchiesi@2
|
583 "easeInOutBack" => "easeInOutBack",
|
danielebarchiesi@2
|
584 "easeInBounce" => "easeInBounce",
|
danielebarchiesi@2
|
585 "easeOutBounce" => "easeOutBounce",
|
danielebarchiesi@2
|
586 "easeInOutBounce" => "easeInOutBounce",
|
danielebarchiesi@2
|
587 );
|
danielebarchiesi@2
|
588 } |