Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js
| Show All 14 Lines | JX.behavior('aphlict-dropdown', function(config, statics) { | ||||
| // Track the current globally visible menu. | // Track the current globally visible menu. | ||||
| statics.visible = statics.visible || null; | statics.visible = statics.visible || null; | ||||
| var dropdown = JX.$(config.dropdownID); | var dropdown = JX.$(config.dropdownID); | ||||
| var bubble = JX.$(config.bubbleID); | var bubble = JX.$(config.bubbleID); | ||||
| var icon = JX.DOM.scry(bubble, 'span', 'menu-icon')[0]; | var icon = JX.DOM.scry(bubble, 'span', 'menu-icon')[0]; | ||||
| var favicon = config.favicon; | var favicon = config.favicon; | ||||
| var message_favicon = config.message_favicon; | var message_favicon = config.message_favicon; | ||||
| var count_type = config.countType; | |||||
| var count; | var count; | ||||
| if (config.countID) { | if (config.countID) { | ||||
| count = JX.$(config.countID); | count = JX.$(config.countID); | ||||
| } | } | ||||
| var request = null; | var request = null; | ||||
| var dirty = config.local ? false : true; | var dirty = config.local ? false : true; | ||||
| function _updateFavicon(new_count) { | function _updateFavicon(new_count) { | ||||
| if ((config.countType == 'messages') && (new_count)) { | if ((count_type == 'messages') && (new_count)) { | ||||
| JX.Favicon.setFavicon(message_favicon); | JX.Favicon.setFavicon(message_favicon); | ||||
| } else if (config.countType == 'messages') { | } else if (count_type == 'messages') { | ||||
| JX.Favicon.setFavicon(favicon); | JX.Favicon.setFavicon(favicon); | ||||
| } | } | ||||
| } | } | ||||
| if (config.countType) { | if (count_type) { | ||||
| JX.Title.setCount(config.countType, config.countNumber); | JX.Title.setCount(count_type, config.countNumber); | ||||
| _updateFavicon(config.countNumber); | _updateFavicon(config.countNumber); | ||||
| } | } | ||||
| function _updateCount(number) { | function _updateCount(number, type) { | ||||
| if (config.countType) { | JX.Title.setCount(type, number); | ||||
| JX.Title.setCount(config.countType, number); | |||||
| _updateFavicon(number); | _updateFavicon(number); | ||||
| } else { | |||||
| return; | |||||
| } | |||||
| JX.DOM.setContent(count, number); | JX.DOM.setContent(count, number); | ||||
| if (number === 0) { | if (number === 0) { | ||||
| JX.DOM.alterClass(bubble, config.unreadClass, false); | JX.DOM.alterClass(bubble, config.unreadClass, false); | ||||
| } else { | } else { | ||||
| JX.DOM.alterClass(bubble, config.unreadClass, true); | JX.DOM.alterClass(bubble, config.unreadClass, true); | ||||
| } | } | ||||
| } | } | ||||
| Show All 9 Lines | function refresh() { | ||||
| if (request) { | if (request) { | ||||
| // Already fetching. | // Already fetching. | ||||
| return; | return; | ||||
| } | } | ||||
| request = new JX.Request(config.uri, function(response) { | request = new JX.Request(config.uri, function(response) { | ||||
| var number = response.number; | var number = response.number; | ||||
| _updateCount(number); | _updateCount(number, count_type); | ||||
| dirty = false; | dirty = false; | ||||
| JX.DOM.alterClass( | JX.DOM.alterClass( | ||||
| dropdown, | dropdown, | ||||
| 'phabricator-notification-menu-loading', | 'phabricator-notification-menu-loading', | ||||
| false); | false); | ||||
| JX.DOM.setContent(dropdown, JX.$H(response.content)); | JX.DOM.setContent(dropdown, JX.$H(response.content)); | ||||
| request = null; | request = null; | ||||
| }); | }); | ||||
| Show All 17 Lines | JX.Stratcom.listen( | ||||
| null, | null, | ||||
| function (e) { | function (e) { | ||||
| update_counts(e.getData()); | update_counts(e.getData()); | ||||
| }); | }); | ||||
| function update_counts(new_data) { | function update_counts(new_data) { | ||||
| var updated = false; | var updated = false; | ||||
| for (var ii = 0; ii < new_data.length; ii++) { | for (var ii = 0; ii < new_data.length; ii++) { | ||||
| if (new_data[ii].countType != config.countType) { | if (new_data[ii].countType != count_type) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| if (!new_data[ii].isInstalled) { | if (!new_data[ii].isInstalled) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| updated = true; | updated = true; | ||||
| _updateCount(parseInt(new_data[ii].count)); | _updateCount(parseInt(new_data[ii].count), count_type); | ||||
| } | } | ||||
| if (updated) { | if (updated) { | ||||
| dirty = true; | dirty = true; | ||||
| } | } | ||||
| } | } | ||||
| function set_visible(menu, icon) { | function set_visible(menu, icon) { | ||||
| if (menu) { | if (menu) { | ||||
| ▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | JX.Stratcom.listen('notification-panel-update', null, function() { | ||||
| } | } | ||||
| dirty = true; | dirty = true; | ||||
| refresh(); | refresh(); | ||||
| }); | }); | ||||
| JX.Stratcom.listen('notification-panel-close', null, function() { | JX.Stratcom.listen('notification-panel-close', null, function() { | ||||
| set_visible(null); | set_visible(null); | ||||
| }); | }); | ||||
| function _clearAllNotifications(e) { | |||||
| e.kill(); | |||||
| count_type = 'notifications'; | |||||
| _updateCount(0, count_type); | |||||
| var form = e.getNode('tag:form'); | |||||
| new JX.Request(form.getAttribute('action')).send(); | |||||
| dirty = true; | |||||
| refresh(); | |||||
| } | |||||
| JX.Stratcom.listen( | |||||
| 'click', | |||||
| 'notifications-clear-all-form', | |||||
| _clearAllNotifications); | |||||
| }); | }); | ||||