* in the body tag of the page to apply browser-specific rules without relying on CSS hacks
*/
function get_browser_version_classes() {
- $classes = '';
+ $classes = array();
+
if (check_browser_version("MSIE", "0")) {
- $classes .= 'ie ';
+ $classes[] = 'ie';
if (check_browser_version("MSIE", 8)) {
- $classes .= 'ie8 ';
+ $classes[] = 'ie8';
} elseif (check_browser_version("MSIE", 7)) {
- $classes .= 'ie7 ';
+ $classes[] = 'ie7';
} elseif (check_browser_version("MSIE", 6)) {
- $classes .= 'ie6 ';
+ $classes[] = 'ie6';
}
- } elseif (check_browser_version("Firefox", 0) || check_browser_version("Gecko", 0) || check_browser_version("Camino", 0)) {
- $classes .= 'gecko ';
+ } elseif (check_browser_version("Firefox", 0) || check_browser_version("Gecko", 0) || check_browser_version("Camino", 0)) {
+ $classes[] = 'gecko';
if (preg_match('/rv\:([1-2])\.([0-9])/', $_SERVER['HTTP_USER_AGENT'], $matches)) {
- $classes .= "gecko{$matches[1]}{$matches[2]} ";
+ $classes[] = "gecko{$matches[1]}{$matches[2]}";
}
} elseif (check_browser_version("Safari", 0)) {
- $classes .= 'safari ';
+ $classes[] = 'safari';
} elseif (check_browser_version("Opera", 0)) {
- $classes .= 'opera ';
+ $classes[] = 'opera';
}
return implode(' ', array_keys($this->_bodyclasses));
}
+ /**
+ * PHP overloading magic to make the $PAGE->course syntax work.
+ */
+ public function __get($field) {
+ $getmethod = 'get_' . $field;
+ if (method_exists($this, $getmethod)) {
+ return $this->$getmethod();
+ } else {
+ throw new coding_exception('Unknown field ' . $field . ' of $PAGE.');
+ }
+ }
+
/// Setter methods =============================================================
/**
}
/**
- * PHP overloading magic to make the $PAGE->course syntax work.
+ * @param array $classes this utility method calls add_body_class for each array element.
*/
- public function __get($field) {
- $getmethod = 'get_' . $field;
- if (method_exists($this, $getmethod)) {
- return $this->$getmethod();
- } else {
- throw new coding_exception('Unknown field ' . $field . ' of $PAGE.');
+ public function add_body_classes($classes) {
+ foreach ($classes as $class) {
+ $this->add_body_class($class);
}
}
}
protected function initialise_standard_body_classes() {
+ global $CFG;
+
$pagetype = $this->pagetype;
if ($pagetype == 'site-index') {
$this->_legacyclass = 'course';
$this->add_body_class($this->_legacyclass);
$this->add_body_class('course-' . $this->_course->id);
- $this->add_body_class(get_browser_version_classes());
+ $this->add_body_classes(get_browser_version_classes());
$this->add_body_class('dir-' . get_string('thisdirection'));
$this->add_body_class('lang-' . current_language());
+ $this->add_body_class($this->url_to_class_name($CFG->wwwroot));
+
if (!isloggedin()) {
$this->add_body_class('notloggedin');
}
}
}
+ protected function url_to_class_name($url) {
+ $bits = parse_url($url);
+ $class = str_replace('.', '-', $bits['host']);
+ if (!empty($bits['port'])) {
+ $class .= '--' . $bits['port'];
+ }
+ if (!empty($bits['path'])) {
+ $path = trim($bits['path'], '/');
+ if ($path) {
+ $class .= '--' . str_replace('/', '-', $path);
+ }
+ }
+ return $class;
+ }
+
/// Deprecated fields and methods for backwards compatibility ==================
/**
function test_get_browser_version_classes() {
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X'];
- $this->assertEqual('safari ', get_browser_version_classes());
+ $this->assertEqual(array('safari'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP'];
- $this->assertEqual('opera ', get_browser_version_classes());
+ $this->assertEqual(array('opera'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['6.0']['Windows XP SP2'];
- $this->assertEqual('ie ie6 ', get_browser_version_classes());
+ $this->assertEqual(array('ie', 'ie6'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['7.0']['Windows XP SP2'];
- $this->assertEqual('ie ie7 ', get_browser_version_classes());
+ $this->assertEqual(array('ie', 'ie7'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['8.0']['Windows Vista'];
- $this->assertEqual('ie ie8 ', get_browser_version_classes());
+ $this->assertEqual(array('ie', 'ie8'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
- $this->assertEqual('gecko gecko18 ', get_browser_version_classes());
+ $this->assertEqual(array('gecko', 'gecko18'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['3.0.6']['SUSE'];
- $this->assertEqual('gecko gecko19 ', get_browser_version_classes());
+ $this->assertEqual(array('gecko', 'gecko19'), get_browser_version_classes());
}
function test_optional_param()
public function initialise_default_pagetype($script = '') {
parent::initialise_default_pagetype($script);
}
+ public function url_to_class_name($url) {
+ return parent::url_to_class_name($url);
+ }
}
/**
$this->assertEqual('aclassname', $this->testpage->bodyclasses);
}
- public function test_get_body_classes_double() {
+ public function test_get_body_classes() {
// Exercise SUT
- $this->testpage->add_body_class('aclassname');
- $this->testpage->add_body_class('anotherclassname');
+ $this->testpage->add_body_classes(array('aclassname', 'anotherclassname'));
// Validate
$this->assertEqual('aclassname anotherclassname', $this->testpage->bodyclasses);
}
+
+ public function test_url_to_class_name() {
+ $this->assertEqual('example-com', $this->testpage->url_to_class_name('http://example.com'));
+ $this->assertEqual('example-com--80', $this->testpage->url_to_class_name('http://example.com:80'));
+ $this->assertEqual('example-com--moodle', $this->testpage->url_to_class_name('https://example.com/moodle'));
+ $this->assertEqual('example-com--8080--nested-moodle', $this->testpage->url_to_class_name('https://example.com:8080/nested/moodle'));
+ }
}
/**