From ed6c8a968b8e24ed24c2c5e97df75155393081c8 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Wed, 03 May 2017 21:33:46 +0000 Subject: [PATCH] Refactor code for the right panel --- map.js | 75 ++++++++++++++++++++----------------- 1 files changed, 40 insertions(+), 35 deletions(-) diff --git a/map.js b/map.js index b543fb4..038cfdc 100644 --- a/map.js +++ b/map.js @@ -24,19 +24,49 @@ var map = null; var map_sphere = null; -var popup_element = document.getElementById('popup'); -var popup_close_callback; var fail_element = document.getElementById('fail'); var ignore_hashchange = false; +var Panel = { + element: document.getElementById('popup'), + closeCallback: undefined, + + callCloseCallback: function() { + var callback = this.closeCallback; + this.closeCallback = null; + if(callback) callback(); + }, + + show: function(contents, closeCallback) { + this.callCloseCallback(); + this.closeCallback = closeCallback; + + deleteChildren(this.element); + + var close = addParaWithText(this.element, '×'); + close.className = 'close'; + close.addEventListener('click', this.hide.bind(this)); + + this.element.appendChild(contents); + + $(this.element).addClass('show'); + }, + + hide: function() { + this.callCloseCallback(); + + $(this.element).removeClass('show'); + }, + + fail: function(message) { + addParaWithText(this.element, message).className = 'error'; + }, +}; + function fail(msg) { setText(fail_element, msg); fail_element.style.top = '0.5em'; -} - -function fail_popup(msg) { - addElementWithText(popup_element, 'p', msg).className = 'error'; } function fail_ajax_generic(data, fnc) { @@ -57,7 +87,7 @@ } function fail_ajax_popup(data) { - fail_ajax_generic(data, fail_popup); + fail_ajax_generic(data, Panel.fail); } function getGeometry(object) { @@ -369,31 +399,6 @@ }).fail(fail_ajax_popup); } -function showPanel(contents, closeCallback) { - var old_callback = popup_close_callback; - popup_close_callback = null; - if(old_callback) old_callback(); - popup_close_callback = closeCallback; - - deleteChildren(popup_element); - - var close = addParaWithText(popup_element, '×'); - close.className = 'close'; - close.addEventListener('click', function() { hidePanel(); }); - - popup_element.appendChild(contents); - - $(popup_element).addClass('show'); -} - -function hidePanel() { - var old_callback = popup_close_callback; - popup_close_callback = null; - if(old_callback) old_callback(); - - $(popup_element).removeClass('show'); -} - function featureClicked(feature) { if(feature && !feature.getId()) return; @@ -401,7 +406,7 @@ route_source.clear(); if(!feature) { - hidePanel(); + Panel.hide(); return; } @@ -494,7 +499,7 @@ ignore_hashchange = true; window.location.hash = '#!' + feature.getId(); - showPanel(div, function() { + Panel.show(div, function() { if(!ignore_hashchange) { ignore_hashchange = true; window.location.hash = ''; @@ -687,7 +692,7 @@ div.appendChild(p); } - showPanel(div); + Panel.show(div); return; } -- Gitblit v1.9.1