Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Element Library: Difference between revisions

From MoodleDocs
Line 83: Line 83:
}
}


</core>
</code>
 
B) Implement the renderable_test_generator for mod_assign
<code php>
File: mod/assign/classes/output/renderable_test_generator.php
<?php
namespace mod_assign\output;
 
class renderer_test_generator extends \core\output\renderer_test_generator_base {
    public function create_tests() {
        $tests = array(new assign_user_summary_renderer_test());
        return $tests;
    }
}
 
</code>


== Related links ==
== Related links ==
* [[Render library specification]]
* [[Render library specification]]

Revision as of 03:16, 6 June 2014

Note: This page is a work-in-progress. Feedback and suggested improvements are welcome. Please join the discussion on moodle.org or use the page comments.

Element Library
Project state Specification
Tracker issue https://tracker.moodle.org/browse/MDL-45770
Discussion https://moodle.org/mod/forum/discuss.php?d=261202
Assignee Damyon, Sam


The element library will be a new admin tool that will display the output from a list of renderer methods / renderables. The target users for the tool are:

  • Themers, used to test all the existing renderables in a newly developed theme
  • Developers, used to see an organized list of all the renderables that can be used when building new pages (and the docs for them)

The requirements for this tool are:

  • Show a list of renderables / renderer methods for a specific component
  • Show the same renderable / renderer method rendered with different test data
  • Show designer docs on the recommended usage of a specific element
  • Allow easy testing in LTR/RTL and different screen sizes
  • Direct links to the documentation for renderers / renderables

Some optional requirements:

  • Perform some checks on the renderer to verify it contains no db queries etc
  • Responsive testing in the tool (short-cuts to adjust the window size)
  • Testing with different language directions
  • Report on the list of renderables used by a renderable / renderer method

This tool will work by querying a core api for getting a list of renderer_test instances from each plugin. The renderer_test is an abstract class that provides documentation and an example rendering of either a renderer method or a renderable.

How to add something to the element library (for developers)

Each "thing" in the element library - is rendered by an instance of a \core\output\renderer_test class.

For a plugin (or core) to add a new "thing" they must:

A) Implement the tests in subclasses of "\core\output\renderer_test_base". These classes can have any name, but it is recommended to name them as "\{plugin namespace}\output\XXX_renderer_test". Each test must define a "execute()" method which produces the output, as well as supply developer docs, a name for the test and a category.

B) Extend the abstract class "\core\output\renderer_test_generator_base" with a new class named "\{plugin namespace}\output\renderer_test_generator". This class needs to extend "\core\output\renderer_test_generator_base". There is one function to implement, which is the "create_tests" function which accepts no arguments and returns a list of subclasses of "\core\output\renderer_test_base" (implemented in step A)

Example...

Adding "Assign user summary". A) Add a new class "\mod_assign\output\assign_user_summary_renderer_test" which extends "\core\output\renderer_test_base".

This class should set the "name, docs and category" class variables in it's constructor. The "execute" method should create a "assign_user_summary" instance filled with dummy data, get a 'mod_assign' renderer and call render on the "assign_user_dummy" class. File: mod/assign/classes/output/assign_user_summary_renderer_test.php <?php

namespace mod_assign\output;

class assign_user_summary_renderer_test extends \core\output\renderer_test_base {

   public function __construct() {
       $this->name = 'Assign user summary';
       $this->docs = 'A user summary object that is used to display information about a user in multiple places in mod_assign.';
       $this->category = \core\output\renderer_test_base::CATEGORY_COMPONENT;
   }
   public function execute() {
       global $CFG, $PAGE;
       require_once($CFG->dirroot . '/mod/assign/renderable.php');
       $renderer = $PAGE->get_renderer('mod_assign');
       $mockuser = guest_user();
       $mockcourseid = 5;
       $viewfullnames = true;
       $blindmarking = false;
       $mockuniqueidforuser = 5;
       $mockextrauserfields = array();
       $suspendeduser = false;
       $renderable = new \assign_user_summary($mockuser,
                                             $mockcourseid,
                                             $viewfullnames,
                                             $blindmarking,
                                             $mockuniqueidforuser,
                                             $mockextrauserfields,
                                             $suspendeduser);
       return $renderer->render($renderable);
   }

}

B) Implement the renderable_test_generator for mod_assign File: mod/assign/classes/output/renderable_test_generator.php <?php namespace mod_assign\output;

class renderer_test_generator extends \core\output\renderer_test_generator_base {

   public function create_tests() {
       $tests = array(new assign_user_summary_renderer_test());
       return $tests;
   }

}

Related links