1 /**
2 * Copyright © Webd 2018
3 * License: MIT (https://github.com/DiamondMVC/Webd/blob/master/LICENSE)
4 * Author: Jacob Jensen (bausshf)
5 */
6 module webd.modules.basemodules;
7 
8 import diamond.views.view;
9 
10 import webd.modules;
11 import webd.web.page;
12 
13 /// Page render arguments.
14 final class PageRenderArgs
15 {
16   private:
17   /// The view.
18   View _view;
19   /// The page.
20   Page _page;
21 
22   public:
23   /**
24   * Creates new page render arguments.
25   * Params:
26   *   view = The view getting rendered.
27   *   page = The page getting rendered.
28   */
29   this(View view, Page page)
30   {
31     _view = view;
32     _page = page;
33   }
34 
35   @property
36   {
37     /// Gets the view getting rendered.
38     View view() { return _view; }
39 
40     /// Gets the page getting rendered.
41     Page page() { return _page; }
42   }
43 }
44 
45 /// Wrapper around a page render subscriber.
46 abstract class PageRenderSubscriber : ModulePackage
47 {
48   protected:
49   /// Creates a new page render subscriber.
50   this()
51   {
52     subscribeEvent("render", new ModuleAction!PageRenderArgs(&handleRender));
53   }
54 
55   /// Override this to handle the rendering of a page.
56   abstract void onRender(PageRenderArgs args);
57 
58   private:
59   /**
60   * Handles the rendering of a page.
61   * Params:
62   *   args = The page render arguments.
63   */
64   void handleRender(PageRenderArgs args)
65   {
66     onRender(args);
67   }
68 }