From b62f446045fe8880d7b7832696cc2905b3f5064d Mon Sep 17 00:00:00 2001 From: Kushan Joshi <0o3ko0@gmail.com> Date: Fri, 17 Jun 2016 16:57:00 +0530 Subject: [PATCH] final iD.ui changes --- Makefile | 16 +- index.html | 9 +- js/lib/id/{ui.js => ui/core.js} | 0 js/lib/id/ui/index.js | 251 ++++++++++++++++++ modules/ui/{ => core}/account.js | 0 modules/ui/{ => core}/attribution.js | 0 modules/ui/{ => core}/background.js | 0 modules/ui/{ => core}/cmd.js | 0 modules/ui/{ => core}/commit.js | 0 modules/ui/{ => core}/confirm.js | 0 modules/ui/{ => core}/conflicts.js | 0 modules/ui/{ => core}/contributors.js | 0 modules/ui/{ => core}/disclosure.js | 0 modules/ui/{ => core}/entity_editor.js | 0 modules/ui/{ => core}/feature_info.js | 0 modules/ui/{ => core}/feature_list.js | 0 modules/ui/{ => core}/flash.js | 0 modules/ui/{ => core}/full_screen.js | 0 modules/ui/{ => core}/geolocate.js | 0 modules/ui/{ => core}/help.js | 0 modules/ui/{ => core}/index.js | 0 modules/ui/{ => core}/info.js | 0 modules/ui/{ => core}/inspector.js | 0 modules/ui/{ => core}/intro.js | 0 modules/ui/{ => core}/lasso.js | 0 modules/ui/{ => core}/loading.js | 0 modules/ui/{ => core}/map_data.js | 0 modules/ui/{ => core}/map_in_map.js | 0 modules/ui/{ => core}/modal.js | 0 modules/ui/{ => core}/modes.js | 0 modules/ui/{ => core}/notice.js | 0 modules/ui/{ => core}/preset.js | 0 modules/ui/{ => core}/preset_icon.js | 0 modules/ui/{ => core}/preset_list.js | 0 modules/ui/{ => core}/radial_menu.js | 0 modules/ui/{ => core}/raw_member_editor.js | 0 .../ui/{ => core}/raw_membership_editor.js | 0 modules/ui/{ => core}/raw_tag_editor.js | 0 modules/ui/{ => core}/restore.js | 0 modules/ui/{ => core}/save.js | 0 modules/ui/{ => core}/scale.js | 0 modules/ui/{ => core}/selection_list.js | 0 modules/ui/{ => core}/sidebar.js | 0 modules/ui/{ => core}/source_switch.js | 0 modules/ui/{ => core}/spinner.js | 0 modules/ui/{ => core}/splash.js | 0 modules/ui/{ => core}/status.js | 0 modules/ui/{ => core}/success.js | 0 modules/ui/{ => core}/tag_reference.js | 0 modules/ui/{ => core}/toggle.js | 0 modules/ui/{ => core}/undo_redo.js | 0 modules/ui/{ => core}/view_on_osm.js | 0 modules/ui/{ => core}/zoom.js | 0 {js/id => modules/ui}/ui.js | 6 +- test/index.html | 7 +- 55 files changed, 273 insertions(+), 16 deletions(-) rename js/lib/id/{ui.js => ui/core.js} (100%) create mode 100644 js/lib/id/ui/index.js rename modules/ui/{ => core}/account.js (100%) rename modules/ui/{ => core}/attribution.js (100%) rename modules/ui/{ => core}/background.js (100%) rename modules/ui/{ => core}/cmd.js (100%) rename modules/ui/{ => core}/commit.js (100%) rename modules/ui/{ => core}/confirm.js (100%) rename modules/ui/{ => core}/conflicts.js (100%) rename modules/ui/{ => core}/contributors.js (100%) rename modules/ui/{ => core}/disclosure.js (100%) rename modules/ui/{ => core}/entity_editor.js (100%) rename modules/ui/{ => core}/feature_info.js (100%) rename modules/ui/{ => core}/feature_list.js (100%) rename modules/ui/{ => core}/flash.js (100%) rename modules/ui/{ => core}/full_screen.js (100%) rename modules/ui/{ => core}/geolocate.js (100%) rename modules/ui/{ => core}/help.js (100%) rename modules/ui/{ => core}/index.js (100%) rename modules/ui/{ => core}/info.js (100%) rename modules/ui/{ => core}/inspector.js (100%) rename modules/ui/{ => core}/intro.js (100%) rename modules/ui/{ => core}/lasso.js (100%) rename modules/ui/{ => core}/loading.js (100%) rename modules/ui/{ => core}/map_data.js (100%) rename modules/ui/{ => core}/map_in_map.js (100%) rename modules/ui/{ => core}/modal.js (100%) rename modules/ui/{ => core}/modes.js (100%) rename modules/ui/{ => core}/notice.js (100%) rename modules/ui/{ => core}/preset.js (100%) rename modules/ui/{ => core}/preset_icon.js (100%) rename modules/ui/{ => core}/preset_list.js (100%) rename modules/ui/{ => core}/radial_menu.js (100%) rename modules/ui/{ => core}/raw_member_editor.js (100%) rename modules/ui/{ => core}/raw_membership_editor.js (100%) rename modules/ui/{ => core}/raw_tag_editor.js (100%) rename modules/ui/{ => core}/restore.js (100%) rename modules/ui/{ => core}/save.js (100%) rename modules/ui/{ => core}/scale.js (100%) rename modules/ui/{ => core}/selection_list.js (100%) rename modules/ui/{ => core}/sidebar.js (100%) rename modules/ui/{ => core}/source_switch.js (100%) rename modules/ui/{ => core}/spinner.js (100%) rename modules/ui/{ => core}/splash.js (100%) rename modules/ui/{ => core}/status.js (100%) rename modules/ui/{ => core}/success.js (100%) rename modules/ui/{ => core}/tag_reference.js (100%) rename modules/ui/{ => core}/toggle.js (100%) rename modules/ui/{ => core}/undo_redo.js (100%) rename modules/ui/{ => core}/view_on_osm.js (100%) rename modules/ui/{ => core}/zoom.js (100%) rename {js/id => modules/ui}/ui.js (98%) diff --git a/Makefile b/Makefile index 90fd89932..b079b12d5 100644 --- a/Makefile +++ b/Makefile @@ -54,7 +54,8 @@ MODULE_TARGETS = \ js/lib/id/services.js \ js/lib/id/ui/intro.js \ js/lib/id/svg.js \ - js/lib/id/ui.js \ + js/lib/id/ui/index.js \ + js/lib/id/ui/core.js \ js/lib/id/ui/intro.js \ js/lib/id/ui/preset.js \ js/lib/id/util.js \ @@ -100,14 +101,18 @@ js/lib/id/svg.js: $(shell find modules/svg -type f) @rm -f $@ node_modules/.bin/rollup -f umd -n iD.svg modules/svg/index.js --no-strict -o $@ +js/lib/id/ui/index.js: $(shell find modules/ui -type f) + @rm -f $@ + node_modules/.bin/rollup -f umd -n iD modules/ui/ui.js --no-strict -o $@ + +js/lib/id/ui/core.js: $(shell find modules/ui/core -type f) + @rm -f $@ + node_modules/.bin/rollup -f umd -n iD.ui modules/ui/core/index.js --no-strict -o $@ + js/lib/id/ui/intro.js: $(shell find modules/ui/intro -type f) @rm -f $@ node_modules/.bin/rollup -f umd -n iD.ui.intro modules/ui/intro/index.js --no-strict -o $@ -js/lib/id/ui.js: $(shell find modules/ui -type f) - @rm -f $@ - node_modules/.bin/rollup -f umd -n iD.ui modules/ui/index.js --no-strict -o $@ - js/lib/id/ui/preset.js: $(shell find modules/ui/preset -type f) @rm -f $@ node_modules/.bin/rollup -f umd -n iD.ui.preset modules/ui/preset/index.js --no-strict -o $@ @@ -142,7 +147,6 @@ dist/iD.js: \ js/lib/marked.js \ js/id/start.js \ js/id/id.js \ - js/id/ui.js \ $(MODULE_TARGETS) \ js/id/end.js \ js/lib/locale.js \ diff --git a/index.html b/index.html index 18c48b90b..64befdbcb 100644 --- a/index.html +++ b/index.html @@ -45,13 +45,16 @@ + + + + + + - - - diff --git a/js/lib/id/ui.js b/js/lib/id/ui/core.js similarity index 100% rename from js/lib/id/ui.js rename to js/lib/id/ui/core.js diff --git a/js/lib/id/ui/index.js b/js/lib/id/ui/index.js new file mode 100644 index 000000000..1df22b9df --- /dev/null +++ b/js/lib/id/ui/index.js @@ -0,0 +1,251 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (factory((global.iD = global.iD || {}))); +}(this, function (exports) { 'use strict'; + + function ui(context) { + function render(container) { + var map = context.map(); + + if (iD.detect().opera) container.classed('opera', true); + + var hash = iD.behavior.Hash(context); + + hash(); + + if (!hash.hadHash) { + map.centerZoom([0, 0], 2); + } + + container.append('svg') + .attr('id', 'defs') + .call(iD.svg.Defs(context)); + + container.append('div') + .attr('id', 'sidebar') + .attr('class', 'col4') + .call(ui.sidebar); + + var content = container.append('div') + .attr('id', 'content'); + + var bar = content.append('div') + .attr('id', 'bar') + .attr('class', 'fillD'); + + content.append('div') + .attr('id', 'map') + .call(map); + + content + .call(iD.ui.MapInMap(context)); + + content.append('div') + .call(iD.ui.Info(context)); + + bar.append('div') + .attr('class', 'spacer col4'); + + var limiter = bar.append('div') + .attr('class', 'limiter'); + + limiter.append('div') + .attr('class', 'button-wrap joined col3') + .call(iD.ui.Modes(context), limiter); + + limiter.append('div') + .attr('class', 'button-wrap joined col1') + .call(iD.ui.UndoRedo(context)); + + limiter.append('div') + .attr('class', 'button-wrap col1') + .call(iD.ui.Save(context)); + + bar.append('div') + .attr('class', 'full-screen') + .call(iD.ui.FullScreen(context)); + + bar.append('div') + .attr('class', 'spinner') + .call(iD.ui.Spinner(context)); + + var controls = bar.append('div') + .attr('class', 'map-controls'); + + controls.append('div') + .attr('class', 'map-control zoombuttons') + .call(iD.ui.Zoom(context)); + + controls.append('div') + .attr('class', 'map-control geolocate-control') + .call(iD.ui.Geolocate(context)); + + controls.append('div') + .attr('class', 'map-control background-control') + .call(iD.ui.Background(context)); + + controls.append('div') + .attr('class', 'map-control map-data-control') + .call(iD.ui.MapData(context)); + + controls.append('div') + .attr('class', 'map-control help-control') + .call(iD.ui.Help(context)); + + var about = content.append('div') + .attr('id', 'about'); + + about.append('div') + .attr('id', 'attrib') + .call(iD.ui.Attribution(context)); + + var footer = about.append('div') + .attr('id', 'footer') + .attr('class', 'fillD'); + + footer.append('div') + .attr('class', 'api-status') + .call(iD.ui.Status(context)); + + footer.append('div') + .attr('id', 'scale-block') + .call(iD.ui.Scale(context)); + + var aboutList = footer.append('div') + .attr('id', 'info-block') + .append('ul') + .attr('id', 'about-list'); + + if (!context.embed()) { + aboutList.call(iD.ui.Account(context)); + } + + aboutList.append('li') + .append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD') + .text(iD.version); + + var issueLinks = aboutList.append('li'); + + issueLinks.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/issues') + .call(iD.svg.Icon('#icon-bug', 'light')) + .call(bootstrap.tooltip() + .title(t('report_a_bug')) + .placement('top') + ); + + issueLinks.append('a') + .attr('target', '_blank') + .attr('tabindex', -1) + .attr('href', 'https://github.com/openstreetmap/iD/blob/master/CONTRIBUTING.md#translating') + .call(iD.svg.Icon('#icon-translate', 'light')) + .call(bootstrap.tooltip() + .title(t('help_translate')) + .placement('top') + ); + + aboutList.append('li') + .attr('class', 'feature-warning') + .attr('tabindex', -1) + .call(iD.ui.FeatureInfo(context)); + + aboutList.append('li') + .attr('class', 'user-list') + .attr('tabindex', -1) + .call(iD.ui.Contributors(context)); + + window.onbeforeunload = function() { + return context.save(); + }; + + window.onunload = function() { + context.history().unlock(); + }; + + var mapDimensions = map.dimensions(); + + d3.select(window).on('resize.editor', function() { + mapDimensions = content.dimensions(null); + map.dimensions(mapDimensions); + }); + + function pan(d) { + return function() { + d3.event.preventDefault(); + if (!context.inIntro()) context.pan(d); + }; + } + + // pan amount + var pa = 10; + + var keybinding = d3.keybinding('main') + .on('⌫', function() { d3.event.preventDefault(); }) + .on('←', pan([pa, 0])) + .on('↑', pan([0, pa])) + .on('→', pan([-pa, 0])) + .on('↓', pan([0, -pa])) + .on('⇧←', pan([mapDimensions[0], 0])) + .on('⇧↑', pan([0, mapDimensions[1]])) + .on('⇧→', pan([-mapDimensions[0], 0])) + .on('⇧↓', pan([0, -mapDimensions[1]])) + .on(iD.ui.cmd('⌘←'), pan([mapDimensions[0], 0])) + .on(iD.ui.cmd('⌘↑'), pan([0, mapDimensions[1]])) + .on(iD.ui.cmd('⌘→'), pan([-mapDimensions[0], 0])) + .on(iD.ui.cmd('⌘↓'), pan([0, -mapDimensions[1]])); + + d3.select(document) + .call(keybinding); + + context.enter(iD.modes.Browse(context)); + + context.container() + .call(iD.ui.Splash(context)) + .call(iD.ui.Restore(context)); + + var authenticating = iD.ui.Loading(context) + .message(t('loading_auth')); + + context.connection() + .on('authenticating.ui', function() { + context.container() + .call(authenticating); + }) + .on('authenticated.ui', function() { + authenticating.close(); + }); + } + + function ui(container) { + context.container(container); + context.loadLocale(function() { + render(container); + }); + } + + ui.sidebar = iD.ui.Sidebar(context); + + return ui; + } + + ui.tooltipHtml = function(text, key) { + var s = '' + text + ''; + if (key) { + s += '