upgrade omega again
[indybay:drupal.git] / docs / sites / all / themes / omega / omega / includes / compatibility / compatibility.inc
1 <?php
2
3 /**
4  * @file
5  * Main extension file for the 'compatibility' extension.
6  */
7
8 /**
9  * Implements hook_extension_EXTENSION_registry_alter().
10  */
11 function omega_extension_compatibility_theme_registry_alter(&$registry) {
12   $registry['html']['preprocess functions'][] = 'omega_extension_compatibility_preprocess_html';
13
14   if (omega_theme_get_setting('omega_apple_touch', TRUE)) {
15     // The regex finds all files following certain naming conventions.
16     $mask = '/^apple-touch-icon(-precomposed)?(-([0-9]+x[0-9]+))?\.png$/';
17
18     // Loop over all themes in the trail in reverse (starting with the current
19     // theme) and use the touch icons of the first theme we find. Note: There
20     // is no inheritance, meaning that as soon as a theme includes a touch icon
21     // any potential touch icons from the base theme are ignored entirely.
22     foreach (array_reverse(omega_theme_trail()) as $theme => $name) {
23       $path = drupal_get_path('theme', $theme);
24
25       // Apple touch icons have to be in the root directory of the theme for
26       // them to be discoverable.
27       if ($files = file_scan_directory($path, $mask, array('recurse' => FALSE))) {
28         foreach ($files as $file) {
29           $matches = array();
30
31           // Run the filename through the regex once more picking up the
32           // sub-matches in order to find out the dimensions of the touch icon
33           // and whether it's preprocessed or not.
34           preg_match($mask, $file->filename, $matches);
35
36           // Cache the array of apple touch icons.
37           $registry['html']['apple-touch-icon'][$file->uri] = array(
38             'uri' => $file->uri,
39             'precomposed' => !empty($matches[1]),
40             'sizes' => !empty($matches[3]) ? $matches[3] : FALSE,
41           );
42         }
43
44         // Break out of the loop because we found at least one touch icon.
45         break;
46       }
47     }
48   }
49 }
50
51 /**
52  * Implements hook_extension_EXTENSION_preproces_html().
53  */
54 function omega_extension_compatibility_preprocess_html(&$variables) {
55   // Add the 'HandheldFriendly' meta tag.
56   if (omega_theme_get_setting('omega_handheld_friendly', TRUE)) {
57     $meta = array(
58       '#tag' => 'meta',
59       '#attributes' => array('name' => 'HandheldFriendly', 'content' => 'true'),
60     );
61
62     drupal_add_html_head($meta, 'omega-handheld-friendly');
63   }
64
65   // Add a the 'MobileOptimized' meta tag.
66   if (omega_theme_get_setting('omega_mobile_optimized', TRUE)) {
67     $meta = array(
68       '#tag' => 'meta',
69       '#attributes' => array('name' => 'MobileOptimized', 'content' => 'width'),
70     );
71
72     drupal_add_html_head($meta, 'omega-mobile-optimized');
73   }
74
75   // Add the 'cleartype' meta tag.
76   if (omega_theme_get_setting('omega_cleartype', TRUE)) {
77     $meta = array(
78       '#tag' => 'meta',
79       '#attributes' => array('http-equiv' => 'cleartype', 'content' => 'on'),
80     );
81
82     drupal_add_html_head($meta, 'omega-cleartype');
83   }
84
85   // Add the 'viewport' meta tag.
86   if (omega_theme_get_setting('omega_viewport', TRUE)) {
87     $content = array('width=device-width');
88
89     // Add the 'initial-scale' property if configured.
90     if ($value = omega_theme_get_setting('omega_viewport_initial_scale')) {
91       $content[] = "initial-scale=$value";
92     }
93
94     // The minimum-scale and maximum-scale properties are ignored if
95     // user-scalable is set to 'no'.
96     if (omega_theme_get_setting('omega_viewport_user_scaleable', TRUE) === FALSE) {
97       $content[] = 'user-scalable=no';
98     }
99     else {
100       // Set the minimum-scale and maximum-scale properties if specified.
101       foreach (array('minimum', 'maximum') as $type) {
102         if ($value = omega_theme_get_setting("omega_viewport_{$type}_scale")) {
103           $content[] = "$type-scale=$value";
104         }
105       }
106     }
107
108     $meta = array(
109       '#tag' => 'meta',
110       '#attributes' => array('name' => 'viewport', 'content' => implode(', ', $content)),
111       // The 'viewport' metatag should be rendered after the 'HandheldFriendly'
112       // metatag.
113       '#weight' => 10,
114     );
115
116     drupal_add_html_head($meta, 'omega-viewport');
117   }
118
119   // Add Apple touch icons.
120   if (omega_theme_get_setting('omega_apple_touch', TRUE)) {
121     $registry = theme_get_registry(FALSE);
122
123     if (!empty($registry['html']['apple-touch-icon'])) {
124       // Iterate over the array of touch icons and attributes.
125       foreach($registry['html']['apple-touch-icon'] as $icon) {
126         $meta = array(
127           '#tag' => 'link',
128           '#attributes' => array(
129             'rel' => 'apple-touch-icon' . (!empty($icon['precomposed']) ? '-precomposed' : ''),
130             'href' => file_create_url($icon['uri']),
131           ),
132         );
133
134         if (!empty($icon['sizes'])) {
135           $meta['#attributes']['sizes'] = $icon['sizes'];
136         }
137
138         // Add the touch icon to the head using a unique key.
139         $key = 'omega-touch-' . (!empty($icon['precomposed']) ? '-precomposed' : '') . (!empty($icon['sizes']) ? '-' . $icon['uri'] : '');
140         drupal_add_html_head($meta, $key);
141       }
142     }
143   }
144
145   // Send X-UA-Compatible HTTP header to force IE to use the most recent
146   // rendering engine or use Chrome's frame rendering engine if available.
147   if (omega_theme_get_setting('omega_chrome_edge', TRUE)) {
148     $supported = omega_theme_get_setting('omega_internet_explorer_support', FALSE);
149
150     if (drupal_get_http_header('X-UA-Compatible') === NULL) {
151       // Only add the header if it hasn't been added before.
152       drupal_add_http_header('X-UA-Compatible', 'IE=edge,chrome=' . ($supported ? 'IE' . $supported : '1'));
153     }
154
155     if (omega_theme_get_setting('omega_chrome_popup', FALSE)) {
156       // Automatically open the Google Chrome Frame installation iframe.
157       drupal_add_js('//ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js', array(
158         'type' => 'external',
159         'scope' => 'footer',
160         'weight' => 1000,
161         'browsers' => array(
162           'IE' => !$supported ? TRUE : 'lte IE ' . $supported,
163           '!IE' => FALSE,
164         ),
165       ));
166
167       drupal_add_js('window.attachEvent("onload",function(){CFInstall.check({mode:"overlay"});})', array(
168         'type' => 'inline',
169         'scope' => 'footer',
170         'weight' => 1000,
171         'browsers' => array(
172           'IE' => !$supported ? TRUE : 'lte IE ' . $supported,
173           '!IE' => FALSE,
174         ),
175       ));
176     }
177   }
178 }