From d8f688df9fd420bcce541410f2938d214ef32d73 Mon Sep 17 00:00:00 2001 From: Will Freeman Date: Sun, 15 Jun 2025 15:31:16 -0600 Subject: [PATCH] ai assistant, splash screen --- config/id.js | 10 +++---- css/80_app.css | 45 +++++++++++++++++++++++++++++ data/core.yaml | 5 ++-- modules/ui/entity_editor.js | 10 +++---- modules/ui/field.js | 17 +++++++++++ modules/ui/init.js | 2 +- modules/ui/intro/helper.js | 1 - modules/ui/sections/feature_type.js | 26 ++++++++--------- modules/ui/splash.js | 44 ++++++++++++++++------------ 9 files changed, 115 insertions(+), 45 deletions(-) diff --git a/config/id.js b/config/id.js index e220fa8c9..d06f5d02d 100644 --- a/config/id.js +++ b/config/id.js @@ -12,11 +12,11 @@ const nsiCdnUrl = ENV__ID_NSI_CDN_URL // api urls and settings const defaultOsmApiConnections = { - // live: { - // url: 'https://www.openstreetmap.org', - // apiUrl: 'https://api.openstreetmap.org', - // client_id: 'JHvon_-Q5ez357REB4jY7pnvXmyW4MyabXWVXdC_H7A' - // }, + live: { + url: 'https://www.openstreetmap.org', + apiUrl: 'https://api.openstreetmap.org', + client_id: 'JHvon_-Q5ez357REB4jY7pnvXmyW4MyabXWVXdC_H7A' + }, dev: { url: 'https://api06.dev.openstreetmap.org', client_id: 'BpM31KdNZabpOoHJnoQJmRWIhwdpVy0oZA0tZdKoXg8' diff --git a/css/80_app.css b/css/80_app.css index 8e9351410..7e0840925 100644 --- a/css/80_app.css +++ b/css/80_app.css @@ -5987,3 +5987,48 @@ li.hide + li.version .badge .tooltip .popover-arrow { width: 100px; color: #7092ff; } + +/* DeFlock Edits */ +.ideditor .field-label button.rainbow-box:not(:hover):not(:active):not(:focus) { + background: linear-gradient(135deg, + #ff9a9e 0%, + #fad0c4 25%, + #fbc2eb 50%, + #a1c4fd 75%, + #c2e9fb 100%); +} + +.ideditor .field-label button.rainbow-box { + width: unset; +} + +.rainbow-box { + display: flex; + align-items: center; + justify-content: center; + padding-left: 1em; + padding-right: 1em; + text-align: center; + font-weight: bold; + background: linear-gradient(135deg, + #ff9a9e 0%, + #fad0c4 25%, + #fbc2eb 50%, + #a1c4fd 75%, + #c2e9fb 100%); +} + +.modal-logo { + height: 70px; + padding-top: 20px; + text-align: center; +} + +.modal-logo img { + height: 100%; + width: auto; +} + +.text-center { + text-align: center; +} diff --git a/data/core.yaml b/data/core.yaml index 4b4f60dea..e054253e3 100644 --- a/data/core.yaml +++ b/data/core.yaml @@ -737,6 +737,7 @@ en: manual: "{features} are hidden. Enable them in the Map Data pane." zoom: "{features} are hidden. Zoom in to enable them." back_tooltip: Change feature type + ai_help: Identify by Photo remove: Remove search: Search search_feature_type: Search feature type @@ -1081,8 +1082,8 @@ en: okay: "OK" cancel: "Cancel" splash: - welcome: Welcome to the iD OpenStreetMap editor - text: "iD is a friendly but powerful tool for contributing to the world's best free world map. This is version {version}. For more information see {website} and report bugs at {github}." + welcome: Welcome to the DeFlock Editor + text: "The DeFlock Editor is a fork of {idWiki}, designed to make it as easy as possible to report ALPRs." changelog: changelog privacy_update: "Our privacy policy has recently been updated." privacy_policy: iD privacy policy diff --git a/modules/ui/entity_editor.js b/modules/ui/entity_editor.js index f47c2de22..c2d479fd0 100644 --- a/modules/ui/entity_editor.js +++ b/modules/ui/entity_editor.js @@ -44,11 +44,11 @@ export function uiEntityEditor(context) { var direction = (localizer.textDirection() === 'rtl') ? 'forward' : 'backward'; - headerEnter - .append('button') - .attr('class', 'preset-reset preset-choose') - .attr('title', t('inspector.back_tooltip')) - .call(svgIcon(`#iD-icon-${direction}`)); + // headerEnter + // .append('button') + // .attr('class', 'preset-reset preset-choose') + // .attr('title', t('inspector.back_tooltip')) + // .call(svgIcon(`#iD-icon-${direction}`)); headerEnter .append('button') diff --git a/modules/ui/field.js b/modules/ui/field.js index 9bf967e01..d6a7333aa 100644 --- a/modules/ui/field.js +++ b/modules/ui/field.js @@ -243,6 +243,23 @@ export function uiField(context, presetField, entityIDs, options) { .call(reference.body) .select('.field-label') .call(reference.button); + + // Add AI Identifier for ALPRs to Manufacturer field + if (field.key === 'manufacturer') { + const existingButton = selection.select('.field-label .rainbow-box'); + if (existingButton.empty()) { // Only create if it doesn't exist + const aiSvg = ``; + + selection.select('.field-label') + .insert('button', '.tag-reference-button') + .attr('class', 'rainbow-box') + .attr('title', t('inspector.ai_help')) + .html(aiSvg) + .on('click', () => { + window.open('https://example.com/', '_blank'); + }); + } + } } d.impl.tags(_tags); diff --git a/modules/ui/init.js b/modules/ui/init.js index 87c6027fc..6cdbb3da7 100644 --- a/modules/ui/init.js +++ b/modules/ui/init.js @@ -350,7 +350,7 @@ export function uiInit(context) { // hide the sidebar by default - // ui.sidebar.toggle(false); + ui.sidebar.toggle(false); // Setup map dimensions and move map to initial center/zoom. // This should happen after .main-content and toolbars exist. diff --git a/modules/ui/intro/helper.js b/modules/ui/intro/helper.js index 17c4daa47..70b9cc1fc 100644 --- a/modules/ui/intro/helper.js +++ b/modules/ui/intro/helper.js @@ -139,7 +139,6 @@ export function helpHtml(id, replacements) { tags: t.html('inspector.tags'), relations: t.html('inspector.relations'), new_relation: t.html('inspector.new_relation'), - turn_restrictions: t.html('_tagging.presets.fields.restrictions.label'), background_settings: t.html('background.description'), imagery_offset: t.html('background.fix_misalignment'), start_the_walkthrough: t.html('splash.walkthrough'), diff --git a/modules/ui/sections/feature_type.js b/modules/ui/sections/feature_type.js index d93c4f020..6c2a0b82a 100644 --- a/modules/ui/sections/feature_type.js +++ b/modules/ui/sections/feature_type.js @@ -38,11 +38,11 @@ export function uiSectionFeatureType(context) { var presetButton = presetButtonWrap .append('button') - .attr('class', 'preset-list-button preset-reset') - .call(uiTooltip() - .title(() => t.append('inspector.back_tooltip')) - .placement('bottom') - ); + .attr('class', 'preset-list-button preset-reset'); + // .call(uiTooltip() + // .title(() => t.append('inspector.back_tooltip')) + // .placement('bottom') + // ); presetButton.append('div') .attr('class', 'preset-icon-container'); @@ -77,14 +77,14 @@ export function uiSectionFeatureType(context) { .call(_tagReference.body); } - selection.selectAll('.preset-reset') - .on('click', function() { - dispatch.call('choose', this, _presets); - }) - .on('pointerdown pointerup mousedown mouseup', function(d3_event) { - d3_event.preventDefault(); - d3_event.stopPropagation(); - }); + // selection.selectAll('.preset-reset') + // .on('click', function() { + // dispatch.call('choose', this, _presets); + // }) + // .on('pointerdown pointerup mousedown mouseup', function(d3_event) { + // d3_event.preventDefault(); + // d3_event.stopPropagation(); + // }); var geometries = entityGeometries(); selection.select('.preset-list-item button') diff --git a/modules/ui/splash.js b/modules/ui/splash.js index f3e81ce44..05ffc1531 100644 --- a/modules/ui/splash.js +++ b/modules/ui/splash.js @@ -4,6 +4,7 @@ import { t } from '../core/localizer'; import { uiIntro } from './intro'; import { uiModal } from './modal'; import { uiSectionPrivacy } from './sections/privacy'; +import { html } from 'd3'; export function uiSplash(context) { @@ -39,9 +40,17 @@ export function uiSplash(context) { .append('div') .attr('class', 'fillL'); + // Add logo at the top of the splash screen introModal .append('div') - .attr('class','modal-section') + .attr('class', 'modal-logo') + .append('img') + .attr('src', 'https://deflock.me/deflock-logo.svg') + .attr('alt', 'Deflock Logo'); + + introModal + .append('div') + .attr('class','modal-section text-center') .append('h3') .call(t.append('splash.welcome')); @@ -53,8 +62,7 @@ export function uiSplash(context) { .append('p') .html(t.html('splash.text', { version: context.version, - website: { html: '' + t.html('splash.changelog') + '' }, - github: { html: 'github.com' } + idWiki: { html: `OSM's iD Editor` }, })); modalSection @@ -73,23 +81,23 @@ export function uiSplash(context) { .append('div') .attr('class', 'modal-actions'); - let walkthrough = buttonWrap - .append('button') - .attr('class', 'walkthrough') - .on('click', () => { - context.container().call(uiIntro(context)); - modalSelection.close(); - }); + // let walkthrough = buttonWrap + // .append('button') + // .attr('class', 'walkthrough') + // .on('click', () => { + // context.container().call(uiIntro(context)); + // modalSelection.close(); + // }); - walkthrough - .append('svg') - .attr('class', 'logo logo-walkthrough') - .append('use') - .attr('xlink:href', '#iD-logo-walkthrough'); + // walkthrough + // .append('svg') + // .attr('class', 'logo logo-walkthrough') + // .append('use') + // .attr('xlink:href', '#iD-logo-walkthrough'); - walkthrough - .append('div') - .call(t.append('splash.walkthrough')); + // walkthrough + // .append('div') + // .call(t.append('splash.walkthrough')); let startEditing = buttonWrap .append('button')