SOURCE CODE: UizeSite.Page.Example (view docs)

/*______________
|       ______  |   U I Z E    J A V A S C R I P T    F R A M E W O R K
|     /      /  |   ---------------------------------------------------
|    /    O /   |    MODULE : UizeSite.Page.Example
|   /    / /    |
|  /    / /  /| |    ONLINE : http://uize.com
| /____/ /__/_| | COPYRIGHT : (c)2008-2016 UIZE
|          /___ |   LICENSE : Available under MIT License or GNU General Public License
|_______________|             http://uize.com/license.html
*/

/*?
  Introduction
    A subclass of =UizeSite.Page= that provides additional functionality specific to example/demo pages.

    *DEVELOPERS:* `Chris van Rensburg`
*/

Uize.module ({
  name:'UizeSite.Page.Example',
  required:[
    'Uize.Dom.Basics',
    'Uize.Dom.Classes',
    'Uize.Url'
  ],
  builder:function (_superclass) {
    'use strict';

    return _superclass.subclass ({
      instanceMethods:{
        wireUi:function () {
          var m = this;
          if (!m.isWired) {
            /*** add the DELVE button ***/
              m.injectNodeHtml (
                'actions',
                'DELVE',
                'inner bottom'
              );

            /*** wire up the DELVE link ***/
              m.wireNode (
                'delve',
                'click',
                function () {
                  var
                    _screen = window.screen,
                    _width = _screen.width - 50,
                    _height = _screen.height - 100,
                    _urlParts = Uize.Url.from (window.location.href),
                    _html =
                      [
                        '',
                          'DELVE',
                          '',
                            '',
                            '',
                          '',
                        ''
                      ].join ('\n'),
                    _window = window.open (
                      'javascript:\'' + _html.replace (/'/g,'\\\'') + '\'',
                      'reportPopup',
                      [
                        'width=' + _width,
                        'height=' + _height,
                        'left=' + Math.max ((_screen.width - _width - 10) >> 1,0),
                        'top=' + Math.max ((_screen.height - _height - 40) >> 1,0),
                        'toolbar=no',
                        'location=no',
                        'directories=no',
                        'status=no',
                        'menubar=no',
                        'resizable=yes',
                        'scrollbars=no'
                      ].join (',')
                    )
                  ;
                  _window.focus ();
                }
              );

            /*** wire programmatic links ***/
              m._evaluator &&
                m.wireNode (
                  Uize.Dom.Basics.find ({tagName:'A',className:/\blinkedJs\b/}),
                  'click',
                  function () {m._evaluator (this.title || this.innerHTML)}
                )
              ;

            _superclass.doMy (m,'wireUi');

            /*** add tour interface, if necessary ***/
              var _tour = Uize.Url.fromParams (location.href).tour;
              if (_tour) {
                var _documentBody = document.body;
                Uize.Dom.Classes.addClass (_documentBody,'inTour');
                Uize.Dom.Basics.injectHtml (_documentBody,'
'); Uize.require ( 'UizeSite.Widgets.TourBar.Widget', function () { m.addChild ( 'tourBar', UizeSite.Widgets.TourBar.Widget, { tour:_tour, built:false } ).insertUi (); } ); } } } }, stateProperties:{ _evaluator:'evaluator' } }); } });