~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/app/javascript/inlinehelp/inlinehelp.js

  • Committer: Launchpad Patch Queue Manager
  • Date: 2012-01-06 17:11:54 UTC
  • mfrom: (14565.3.17 inline_help_907443)
  • Revision ID: launchpad@pqm.canonical.com-20120106171154-fjgapb91cd49zzih
[r=deryck][bug=907443] Port the inlinehelp javascript from mochikit
        to YUI in lp.app.inlinehelp.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**
 
2
 * Copyright 2011 Canonical Ltd. This software is licensed under the
 
3
 * GNU Affero General Public License version 3 (see the file LICENSE).
 
4
 *
 
5
 * @module lp.app.inlinehelp
 
6
 *
 
7
 * Usage:
 
8
 *      lp.app.inlinehelp.init_help();
 
9
 *
 
10
 */
 
11
YUI.add('lp.app.inlinehelp', function (Y) {
 
12
 
 
13
    var module = Y.namespace('lp.app.inlinehelp');
 
14
    var HELP_LINK_SELECTOR = 'a[target=help]';
 
15
    var HELP_CSS = 'help';
 
16
    var CLICK_DELEGATE = false;
 
17
 
 
18
    /**
 
19
     * Handle the clicking of a help link in the body.
 
20
     * This is a delegated handler so this == the object clicked.
 
21
     *
 
22
     * @method _show_help
 
23
     * @private
 
24
     */
 
25
    module._show_help = function (e) {
 
26
        e.preventDefault();
 
27
        var target_link = e.currentTarget;
 
28
 
 
29
        // init the overlay and show it
 
30
        var overlay = new module.InlineHelpOverlay({
 
31
            'contentUrl': target_link.get('href'),
 
32
            'centered': true,
 
33
            'constrain': true,
 
34
            // we need our help overlay to have a higher zindex than usual
 
35
            // overlays so that any help on them appear above them
 
36
            'zIndex': 1050
 
37
        });
 
38
        overlay.render();
 
39
    };
 
40
 
 
41
    /**
 
42
     * The single entry point used to bind the buttons for launching help.
 
43
     *
 
44
     * @method init_help
 
45
     * @public
 
46
     */
 
47
    module.init_help =  function () {
 
48
        // Find the help links.
 
49
        var links = Y.all(HELP_LINK_SELECTOR);
 
50
 
 
51
        // Add the help class.
 
52
        links.addClass(HELP_CSS);
 
53
 
 
54
        // Bind the click events but unbind it first in case we're re-running
 
55
        // init more than once (say on ajax loading of new help content).
 
56
        var body = Y.one('body');
 
57
        if (CLICK_DELEGATE !== false) {
 
58
            CLICK_DELEGATE.detach();
 
59
        }
 
60
        CLICK_DELEGATE = body.delegate(
 
61
            'click',
 
62
            module._show_help,
 
63
            HELP_LINK_SELECTOR
 
64
        );
 
65
    };
 
66
 
 
67
    module.InlineHelpOverlay = Y.Base.create(
 
68
        'inlinehelp-overlay',
 
69
        Y.lazr.PrettyOverlay,
 
70
        [],
 
71
        {
 
72
            /**
 
73
             * Generate the iframe used for displaying help content in the
 
74
             * overlay.
 
75
             *
 
76
             * @method _getContent
 
77
             * @private
 
78
             */
 
79
            _getContent: function () {
 
80
                var help_page = Y.Node.create('<iframe/>');
 
81
                help_page.set('src', this.get('contentUrl'));
 
82
 
 
83
                // Use the overlay bodyContent as the home of the iframe.
 
84
                this.set('bodyContent', help_page);
 
85
            },
 
86
 
 
87
            initializer: function (cfg) {
 
88
                this._getContent();
 
89
            },
 
90
 
 
91
            hide: function() {
 
92
                this.constructor.superclass.hide.call(this);
 
93
                this.get('boundingBox').setStyle('display', 'none');
 
94
            },
 
95
 
 
96
            show: function() {
 
97
                this.constructor.superclass.show.call(this);
 
98
                this.get('boundingBox').setStyle('display', 'block');
 
99
            }
 
100
        },
 
101
        {
 
102
            ATTRS: {
 
103
                /**
 
104
                 * URI of the location of the help content.
 
105
                 *
 
106
                 * This is loaded into our iFrame and should be a full page vs
 
107
                 * a data payload.
 
108
                 *
 
109
                 * @attribute contentUrl
 
110
                 * @type string
 
111
                 * @default ''
 
112
                 */
 
113
                contentUrl: {
 
114
                    value: ''
 
115
                },
 
116
 
 
117
                /**
 
118
                 * There's no multi steps so hard code the underlying overlays
 
119
                 * bar to false.
 
120
                 *
 
121
                 * @attribute progressbar
 
122
                 * @type bool
 
123
                 * @default false
 
124
                 */
 
125
                progressbar: {
 
126
                    value: false
 
127
                }
 
128
            }
 
129
        }
 
130
    );
 
131
 
 
132
}, "0.1", { "requires": ['lazr.overlay', 'io', 'log'] });