aboutsummaryrefslogtreecommitdiff
path: root/node_modules/montage/ui/popup/notifier.reel/notifier.js
blob: ac3dcff9ae011075ca22112c9cd906b6abd5963a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* <copyright>
 This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
 No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
 (c) Copyright 2011 Motorola Mobility, Inc.  All Rights Reserved.
 </copyright> */

/**
    @module "montage/ui/popup/notifier.reel"
    @requires montage/core/core
    @requires montage/ui/component
    @requires "montage/ui/popup/popup.reel"
*/
var Montage = require("montage").Montage;
var Component = require("ui/component").Component;
var Popup = require("ui/popup/popup.reel").Popup;

/**
 @class module:"montage/ui/popup/notifier.reel".Notifier
 @extends module:montage/ui/component.Component
 */

var Notifier = exports.Notifier = Montage.create(Component, /** @lends module:"montage/ui/popup/notifier.reel".Notifier# */ {
    hasTemplate: {value: true},

    _msgEl: {value: null},
/**
  Description TODO
  @private
*/
    _msg: {value: null},
/**
        Description TODO
        @type {Function}
        @default null
    */
    msg: {
        get: function() {
            return this._msg;
        },
        set: function(value) {
            if (this._msg !== value) {
                this._msg = value;
                this.needsDraw = true;
            }
        }
    },
/**
        Description TODO
        @type {Property}
        @default {String} null
    */
    details: {
        value: null
    },
/**
    Description TODO
    @function
    */
    draw: {
        value: function() {
            this._msgEl.textContent = this.msg;
        }
    },

    // Static method to show a Notify dialog
     /**
      Displays a small Growl-like notification in a pop-up dialog. The notification can have a timeout that determines how long it appears before being hidden automatically.
      You can also specify the location of the notification in the browser window (top-left corner, by default).
      @function
      @param {String} msg A message to display in the notification.
      @param {Number} timeout The number of milliseconds to display the notification before it is hidden.
      @param {Object} Contains two properties named top and left that specify top and left coordinates of the notifiction. By default, notifications are positioned at the top-left corner of the window.
      */
    show: {
        value: function(msg, timeout, position) {
            var popup = this.application._notifyPopup, notifier;
            if(!popup) {
                popup = Popup.create();
                this.popup = popup;
                popup.type = 'notify';
                this.application._notifyPopup = popup;

                notifier = Notifier.create();
                popup.content = notifier;
            }
            notifier = popup.content;
            notifier.msg = msg;

            if (!position) {
                // position at the top by default
                var viewportWidth = window.innerWidth;
                position = {
                    top: 1,
                    right: 10
                };
            }
            popup.position = position;

            if(timeout) {
                timeout = parseInt(timeout, 10) || 3000;
                popup.autoHide = timeout;
            }

            popup.show();


        }
    },

    hide: {
        value: function() {
            var popup = this.application._notifyPopup;
            if(popup) {
                popup.hide();
            }
        }
    }

});