summaryrefslogtreecommitdiff
path: root/vendor/oojs/oojs-ui/php/Theme.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/oojs/oojs-ui/php/Theme.php')
-rw-r--r--vendor/oojs/oojs-ui/php/Theme.php58
1 files changed, 58 insertions, 0 deletions
diff --git a/vendor/oojs/oojs-ui/php/Theme.php b/vendor/oojs/oojs-ui/php/Theme.php
new file mode 100644
index 00000000..d36b6d82
--- /dev/null
+++ b/vendor/oojs/oojs-ui/php/Theme.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace OOUI;
+
+/**
+ * Theme logic.
+ *
+ * @abstract
+ */
+class Theme {
+
+ /* Members */
+
+ private static $singleton;
+
+ /* Static Methods */
+
+ public static function setSingleton( Theme $theme ) {
+ self::$singleton = $theme;
+ }
+
+ public static function singleton() {
+ if ( !self::$singleton ) {
+ throw new Exception( __METHOD__ . ' was called with no singleton theme set.' );
+ }
+
+ return self::$singleton;
+ }
+
+ /**
+ * Get a list of classes to be applied to a widget.
+ *
+ * The 'on' and 'off' lists combined MUST contain keys for all classes the theme adds or removes,
+ * otherwise state transitions will not work properly.
+ *
+ * @param Element $element Element for which to get classes
+ * @return array Categorized class names with `on` and `off` lists
+ */
+ public function getElementClasses( Element $element ) {
+ return array( 'on' => array(), 'off' => array() );
+ }
+
+ /**
+ * Update CSS classes provided by the theme.
+ *
+ * For elements with theme logic hooks, this should be called any time there's a state change.
+ *
+ * @param Element $element Element for which to update classes
+ * @return array Categorized class names with `on` and `off` lists
+ */
+ public function updateElementClasses( Element $element ) {
+ $classes = $this->getElementClasses( $element );
+
+ $element
+ ->removeClasses( $classes['off'] )
+ ->addClasses( $classes['on'] );
+ }
+}