MDL-35876 - Blocks - Adding verbose move here descriptions to blocks for accessibility
authorJason Fowler <phalacee@gmail.com>
Mon, 11 Mar 2013 06:56:35 +0000 (14:56 +0800)
committerJason Fowler <phalacee@gmail.com>
Tue, 26 Mar 2013 06:21:38 +0000 (14:21 +0800)
lang/en/block.php
lib/blocklib.php
lib/outputcomponents.php
lib/outputrenderers.php
lib/upgrade.txt
theme/mymobile/renderers.php
theme/upgrade.txt

index eefb901..066fb30 100644 (file)
@@ -47,7 +47,8 @@ $string['hideblock'] = 'Hide {$a} block';
 $string['hidedockpanel'] = 'Hide the dock panel';
 $string['hidepanel'] = 'Hide panel';
 $string['moveblock'] = 'Move {$a} block';
-$string['moveblockhere'] = 'Move block here';
+$string['moveblockafter'] = 'Move block to after {$a} block';
+$string['moveblockbefore'] = 'Move block to before {$a} block';
 $string['movingthisblockcancel'] = 'Moving this block ({$a})';
 $string['onthispage'] = 'On this page';
 $string['pagetypes'] = 'Page types';
index f374414..f88903a 100644 (file)
@@ -945,8 +945,6 @@ class block_manager {
             if ($first) {
                 $lastweight = $first->instance->weight - 2;
             }
-
-            $strmoveblockhere = get_string('moveblockhere', 'block');
         }
 
         foreach ($instances as $instance) {
@@ -957,7 +955,7 @@ class block_manager {
 
             if ($this->movingblock && $lastweight != $instance->instance->weight &&
                     $content->blockinstanceid != $this->movingblock && $lastblock != $this->movingblock) {
-                $results[] = new block_move_target($strmoveblockhere, $this->get_move_target_url($region, ($lastweight + $instance->instance->weight)/2));
+                $results[] = new block_move_target($this->get_move_target_url($region, ($lastweight + $instance->instance->weight)/2));
             }
 
             if ($content->blockinstanceid == $this->movingblock) {
@@ -972,7 +970,7 @@ class block_manager {
         }
 
         if ($this->movingblock && $lastblock != $this->movingblock) {
-            $results[] = new block_move_target($strmoveblockhere, $this->get_move_target_url($region, $lastweight + 1));
+            $results[] = new block_move_target($this->get_move_target_url($region, $lastweight + 1));
         }
         return $results;
     }
index 4c42dd1..7ad3df7 100644 (file)
@@ -2497,18 +2497,11 @@ class block_move_target {
      */
     public $url;
 
-    /**
-     * @var string label
-     */
-    public $text;
-
     /**
      * Constructor
-     * @param string $text
      * @param moodle_url $url
      */
-    public function __construct($text, moodle_url $url) {
-        $this->text = $text;
+    public function __construct(moodle_url $url) {
         $this->url  = $url;
     }
 }
index 019f019..8b43ade 100644 (file)
@@ -1215,13 +1215,20 @@ class core_renderer extends renderer_base {
      */
     public function blocks_for_region($region) {
         $blockcontents = $this->page->blocks->get_content_for_region($region, $this);
-
+        $blocks = $this->page->blocks->get_blocks_for_region($region);
+        $lastblock = null;
+        $zones = array();
+        foreach ($blocks as $block) {
+            $zones[] = $block->title;
+        }
         $output = '';
+
         foreach ($blockcontents as $bc) {
             if ($bc instanceof block_contents) {
                 $output .= $this->block($bc, $region);
+                $lastblock = $bc->title;
             } else if ($bc instanceof block_move_target) {
-                $output .= $this->block_move_target($bc);
+                $output .= $this->block_move_target($bc, $zones, $lastblock);
             } else {
                 throw new coding_exception('Unexpected type of thing (' . get_class($bc) . ') found in list of block contents.');
             }
@@ -1233,10 +1240,17 @@ class core_renderer extends renderer_base {
      * Output a place where the block that is currently being moved can be dropped.
      *
      * @param block_move_target $target with the necessary details.
+     * @param array $zones array of areas where the block can be moved to
+     * @param string $previous the block located before the area currently being rendered.
      * @return string the HTML to be output.
      */
-    public function block_move_target($target) {
-        return html_writer::tag('a', html_writer::tag('span', $target->text, array('class' => 'accesshide')), array('href' => $target->url, 'class' => 'blockmovetarget'));
+    public function block_move_target($target, $zones, $previous) {
+         if ($previous == null) {
+            $position = get_string('moveblockbefore', 'block', $zones[0]);
+        } else {
+            $position = get_string('moveblockafter', 'block', $previous);
+        }
+        return html_writer::tag('a', html_writer::tag('span', $position, array('class' => 'accesshide')), array('href' => $target->url, 'class' => 'blockmovetarget'));
     }
 
     /**
index 29bd62f..2d25bbc 100644 (file)
@@ -34,6 +34,7 @@ information provided here is intended especially for developers.
 * condition_info:get_condition_user_fields($formatoptions) now accepts the optional
   param $formatoptions, that will determine if the field names are processed by
   format_string() with the passed options.
+* output renderer changed to support more verbose move-block-here descriptions.
 
 YUI changes:
 * M.util.help_icon has been deprecated. Code should be updated to use moodle-core-popuphelp
index 86551c6..da89b2b 100644 (file)
@@ -694,16 +694,23 @@ class theme_mymobile_core_renderer extends core_renderer {
      */
     public function blocks_for_region($region) {
         $blockcontents = $this->page->blocks->get_content_for_region($region, $this);
-
+        $blocks = $this->page->blocks->get_blocks_for_region($region);
+        $lastblock = null;
+        $zones = array();
+        foreach ($blocks as $block) {
+            $zones[] = $block->title;
+        }
+        
         $output = '';
         foreach ($blockcontents as $bc) {
             if ($bc instanceof block_contents) {
+                $lastblock = $bc->title;
                 // We don't want to print navigation and settings blocks here.
                 if ($bc->attributes['class'] != 'block_settings  block' && $bc->attributes['class'] != 'block_navigation  block') {
                     $output .= $this->block($bc, $region);
                 }
             } else if ($bc instanceof block_move_target) {
-                $output .= $this->block_move_target($bc);
+                $output .= $this->block_move_target($bc, $zones, $lastblock);
             } else {
                 throw new coding_exception('Unexpected type of thing (' . get_class($bc) . ') found in list of block contents.');
             }
index 441d0b0..9ed5c2e 100644 (file)
@@ -8,6 +8,9 @@ DOM changes:
 * new setting $THEME->yuicssmodules = array('cssreset', 'cssfonts', 'cssgrids', 'cssbase'); which
   allows themes to use different CSS reset normalisers such as cssnormalize YUI module
 
+Renderer changes:
+* Mymobile theme changed to support more verbose move-block-here descriptions.
+
 === 2.4 ===
 
 required changes: