Service workers: Allow HTTPS pages arrived at via HTTP redirect to use SW
[chromium-blink-merge.git] / third_party / polymer / v1_0 / components-chromium / paper-toolbar / paper-toolbar-extracted.js
blob8e8f23b151799cf58d4751aa3963d1093c9fca5e
1 (function() {
3     'use strict';
5     function classNames(obj) {
6       var classNames = [];
7       for (var key in obj) {
8         if (obj.hasOwnProperty(key) && obj[key]) {
9           classNames.push(key);
10         }
11       }
13       return classNames.join(' ');
14     }
16     Polymer({
18       is: 'paper-toolbar',
20       hostAttributes: {
21         'role': 'toolbar'
22       },
24       properties: {
26         /**
27          * Controls how the items are aligned horizontally when they are placed
28          * at the bottom.
29          * Options are `start`, `center`, `end`, `justified` and `around`.
30          *
31          * @attribute bottomJustify
32          * @type string
33          * @default ''
34          */
35         bottomJustify: {
36           type: String,
37           value: ''
38         },
40         /**
41          * Controls how the items are aligned horizontally.
42          * Options are `start`, `center`, `end`, `justified` and `around`.
43          *
44          * @attribute justify
45          * @type string
46          * @default ''
47          */
48         justify: {
49           type: String,
50           value: ''
51         },
53         /**
54          * Controls how the items are aligned horizontally when they are placed
55          * in the middle.
56          * Options are `start`, `center`, `end`, `justified` and `around`.
57          *
58          * @attribute middleJustify
59          * @type string
60          * @default ''
61          */
62         middleJustify: {
63           type: String,
64           value: ''
65         }
67       },
69       attached: function() {
70         this._observer = this._observe(this);
71         this._updateAriaLabelledBy();
72       },
74       detached: function() {
75         if (this._observer) {
76           this._observer.disconnect();
77         }
78       },
80       _observe: function(node) {
81         var observer = new MutationObserver(function() {
82           this._updateAriaLabelledBy();
83         }.bind(this));
84         observer.observe(node, {
85           childList: true,
86           subtree: true
87         });
88         return observer;
89       },
91       _updateAriaLabelledBy: function() {
92         var labelledBy = [];
93         var contents = Polymer.dom(this.root).querySelectorAll('content');
94         for (var content, index = 0; content = contents[index]; index++) {
95           var nodes = Polymer.dom(content).getDistributedNodes();
96           for (var node, jndex = 0; node = nodes[jndex]; jndex++) {
97             if (node.classList && node.classList.contains('title')) {
98               if (node.id) {
99                 labelledBy.push(node.id);
100               } else {
101                 var id = 'paper-toolbar-label-' + Math.floor(Math.random() * 10000);
102                 node.id = id;
103                 labelledBy.push(id);
104               }
105             }
106           }
107         }
108         if (labelledBy.length > 0) {
109           this.setAttribute('aria-labelledby', labelledBy.join(' '));
110         }
111       },
113       _computeBarClassName: function(barJustify) {
114         var classObj = {
115           'center': true,
116           'horizontal': true,
117           'layout': true,
118           'toolbar-tools': true
119         };
121         // If a blank string or any falsy value is given, no other class name is
122         // added.
123         if (barJustify) {
124           var justifyClassName = (barJustify === 'justified') ?
125               barJustify :
126               barJustify + '-justified';
128           classObj[justifyClassName] = true;
129         }
131         return classNames(classObj);
132       }
134     });
136   }());