This repository was archived by the owner on Nov 15, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbstart_class.php
More file actions
147 lines (127 loc) · 4.86 KB
/
bstart_class.php
File metadata and controls
147 lines (127 loc) · 4.86 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
<?php
/**
* Get classes for different html elements using filters
* Modified 20130831 to separate classes and important_classes to make it easy to
* overwrite general classes without impacting important classes
* use case for important classes would be something like .widget-area
*
* @package bootstart
*/
/**
* Get classes for different html elements using filters
* classes are passed in as an array of class names
* Because some classes are important (e.g. 'widget-area') regardless
* of other styles that need to be applied (e.g. 'col-sm-3')
* I've added support for important classes
* important classes start with an exclamation point and are stored in the
* important class variable.
*
* Since we are building this with Bootstrap
*/
if ( !function_exists('bstart_class') ) {
function bstart_class($id, $classes = array(), $important_classes = array(), $return = false ) {
// ensure classes are arrays (e.g. convert from string to array if necessary)
$classes = bstart_class_force_array ( $classes );
$important_classes = bstart_class_force_array ( $important_classes );
// parse for important classes (see note about important classes)
list($classes, $important_classes) = bstart_class_parse_important( $classes, $important_classes );
/*evd(array(
$classes,
$important_classes,
));
*/
// filter for general classes (things like 'col-sm-3')
$classes = apply_filters(
'bstart_'.$id.'_class',
$classes,
$important_classes
);
// filter for important classes (seldom used), things like 'widget-area'
$important_classes = apply_filters(
'bstart_'.$id.'_class_important',
$important_classes,
$classes
);
/*evd(array(
$classes,
$important_classes,
));
*/
// create string for output (using both $classes and $important_classes)
$output = implode(' ', array_merge( $classes, $important_classes ) );
if ($return) {
// when called with final parameter true
// e.g. bstart_class('main', array(), true);
return $output;
} else {
// default behavior
echo $output;
}
} // bstart_class()
} // function_exists()
/**
* Force $classes to be an array (e.g. convert from string if necessary)
*/
function bstart_class_force_array( $classes ) {
if (is_string( $classes ) ) {
// convert string to array by breaking at spaces
return explode(' ', $classes);
}
if ( is_array( $classes ) ) {
// already an array, no need to do anything different
return $classes;
}
// the parameter is not a recognized type
//error_log('bstart_class parameter is neither a string nor array');
return new WP_Error('bstart_class_paramter', __('$classes (or $important_classes) paramter for bstart_class is neither an array nor string'));
}
/**
* Modify array of classes which may include shortcut important class
* (e.g. '!example_class')
* and correctly assign values into the two arrays
* $classes and $important_classes
*
*/
function bstart_class_parse_important( $classes, $important_classes) {
foreach( $classes as $i=>$class ) {
// if class is imporant
if ( '!' === $class[0] ) {
// add to $important_classes array ( after remove ! )
$important_classes[] = substr( $class, 1 );
// remove from $classes
unset( $classes[$i] );
}
}
// $classes = array_values( $classes ); // undecided if this is needed here
return array(
$classes,
$important_classes
);
}
/**
* Example Hooking
*/
// Add class on #sidebar1 (Most common use of filter hook)
//add_filter( 'bstart_sidebar1_class', 'do_bstart_sidebar1_class_add', 10, 2);
function do_bstart_sidebar1_class_add( $classes, $important_classes ) {
$classes[] = 'new-class-added-via-hook';
return $classes;
}
// Add important class on #sidebar1
//add_filter( 'bstart_sidebar1_class_important', 'do_bstart_sidebar1_class_add_important', 10, 2);
function do_bstart_sidebar1_class_add_important( $important_classes, $classes ) {
$important_classes[] = 'additional-important-class';
return $important_classes;
}
// Overwrite (all non-important) classes on #sidebar1
//add_filter( 'bstart_sidebar1_class', 'do_bstart_sidebar1_class', 10, 2);
function do_bstart_sidebar1_class( $classes, $important_classes ) {
$classes = array('col-sm-2');
return $classes;
}
// Overwrite important classes on #sidebar1
//add_filter( 'bstart_sidebar1_class_important', 'do_bstart_sidebar1_class_important', 10, 2);
function do_bstart_sidebar1_class_important( $important_classes, $classes ) {
$important_classes = array('sidebar-tastical');
return $important_classes;
}