mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-14 21:28:11 +02:00
WIP: toggle note status
This commit is contained in:
+7
-1
@@ -53,9 +53,12 @@
|
||||
border-radius: 20px;
|
||||
}
|
||||
.comment-metadata {
|
||||
display: flex;
|
||||
display: -webkit-flex; /* Safari */
|
||||
-webkit-flex-wrap: wrap; /* Safari 6.1+ */
|
||||
flex-flow: row nowrap;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
|
||||
}
|
||||
.comment-author {
|
||||
font-weight: bold;
|
||||
@@ -67,6 +70,9 @@
|
||||
.comment-text {
|
||||
color: #333;
|
||||
margin-top: 10px;
|
||||
overflow-y: hidden; /* TODO: give scroll bar or replace with accordion */
|
||||
max-height: 250px;
|
||||
|
||||
}
|
||||
|
||||
#new-comment-input {
|
||||
|
||||
+2
-1
@@ -622,7 +622,8 @@ en:
|
||||
newComment: New Comment
|
||||
inputPlaceholder: Enter a comment to share with other users.
|
||||
comment: Comment
|
||||
commentResolve: Comment & Resolve
|
||||
commentClose: Comment & Resolve
|
||||
commentReopen: Comment & Reopen
|
||||
save: Save comment
|
||||
cancel: Cancel
|
||||
help:
|
||||
|
||||
+66
-1
@@ -44,6 +44,7 @@ var _tileCache = { loaded: {}, inflight: {}, seen: {} };
|
||||
var _noteCache = { loaded: {}, inflight: {}, note: {}, rtree: rbush() };
|
||||
var _userCache = {};
|
||||
var _changeset = {};
|
||||
var _noteChangeset = {};
|
||||
|
||||
var _connectionID = 1;
|
||||
var _tileZoom = 16;
|
||||
@@ -309,11 +310,13 @@ export default {
|
||||
_forEach(_tileCache.inflight, abortRequest);
|
||||
_forEach(_noteCache.inflight, abortRequest);
|
||||
if (_changeset.inflight) abortRequest(_changeset.inflight);
|
||||
if (_noteChangeset.inflight) abortRequest(_changeset.inflight);
|
||||
|
||||
_tileCache = { loaded: {}, inflight: {}, seen: {} };
|
||||
_noteCache = { loaded: {}, inflight: {}, note: {}, rtree: rbush() };
|
||||
_userCache = {};
|
||||
_changeset = {};
|
||||
_noteChangeset = {};
|
||||
|
||||
return this;
|
||||
},
|
||||
@@ -894,5 +897,67 @@ export default {
|
||||
|
||||
notesCache: function() {
|
||||
return _noteCache;
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
toggleNoteStatus: function(note, comment, callback) {
|
||||
if (!(note instanceof osmNote) && !(this.getNote(note.id))) return;
|
||||
if (!this.authenticated()) return;
|
||||
|
||||
var that = this;
|
||||
var cid = _connectionID;
|
||||
|
||||
function done(err, xml) {
|
||||
if (err) {
|
||||
// 400 Bad Request, 401 Unauthorized, 403 Forbidden..
|
||||
if (err.status === 400 || err.status === 401 || err.status === 403) {
|
||||
that.logout();
|
||||
}
|
||||
return callback(err);
|
||||
}
|
||||
if (that.getConnectionId() !== cid) {
|
||||
return callback({ message: 'Connection Switched', status: -1 });
|
||||
}
|
||||
|
||||
return callback(xml);
|
||||
}
|
||||
|
||||
var status = note.status === 'open' ? 'close' : 'reopen';
|
||||
|
||||
var path = '/api/0.6/notes/' + note.id + '/' + status;
|
||||
path += comment ? '?text=' + comment : '';
|
||||
|
||||
_noteChangeset.inflight = oauth.xhr({ method: 'POST', path: path }, done);
|
||||
|
||||
},
|
||||
|
||||
addNoteComment: function(note, comment, callback) {
|
||||
if (!(note instanceof osmNote) && !(this.getNote(note.id))) return;
|
||||
if (!this.authenticated()) return;
|
||||
if (!comment) return;
|
||||
|
||||
var that = this;
|
||||
var cid = _connectionID;
|
||||
|
||||
function done(err, xml) {
|
||||
if (err) {
|
||||
// 400 Bad Request, 401 Unauthorized, 403 Forbidden..
|
||||
if (err.status === 400 || err.status === 401 || err.status === 403) {
|
||||
that.logout();
|
||||
}
|
||||
return callback(err);
|
||||
}
|
||||
if (that.getConnectionId() !== cid) {
|
||||
return callback({ message: 'Connection Switched', status: -1 });
|
||||
}
|
||||
|
||||
return callback(xml);
|
||||
}
|
||||
|
||||
var path = '/api/0.6/notes/' + note.id + '/comment?text=' + comment;
|
||||
|
||||
_noteChangeset.inflight = oauth.xhr({ method: 'POST', path: path }, done);
|
||||
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
+76
-22
@@ -1,5 +1,4 @@
|
||||
import { dispatch as d3_dispatch } from 'd3-dispatch';
|
||||
import { uiFormFields } from './form_fields';
|
||||
|
||||
import {
|
||||
event as d3_event,
|
||||
@@ -15,14 +14,14 @@ import {
|
||||
} from '../util';
|
||||
|
||||
import { utilDetect } from '../util/detect';
|
||||
|
||||
var _newComment;
|
||||
import { modeBrowse } from '../modes';
|
||||
|
||||
|
||||
export function uiNoteEditor(context) {
|
||||
var dispatch = d3_dispatch('change', 'cancel', 'save', 'changeInput');
|
||||
var commentLimit = 600; // add a "more" link to comments longer than this length
|
||||
var _modified = false;
|
||||
var _inputValue;
|
||||
var _newComment;
|
||||
var _note;
|
||||
|
||||
function localeDateString(s) {
|
||||
@@ -39,6 +38,65 @@ export function uiNoteEditor(context) {
|
||||
render(selection);
|
||||
}
|
||||
|
||||
function cancel() {
|
||||
_newComment = false;
|
||||
context.selectedNoteID(null);
|
||||
context.enter(modeBrowse(context));
|
||||
}
|
||||
|
||||
function save(updateFunction) {
|
||||
var osm = context.connection();
|
||||
if (!osm) {
|
||||
context.enter(modeBrowse(context));
|
||||
return;
|
||||
}
|
||||
|
||||
// If user somehow got logged out mid-save, try to reauthenticate..
|
||||
// This can happen if they were logged in from before, but the tokens are no longer valid.
|
||||
if (!osm.authenticated()) {
|
||||
|
||||
// TODO: dispatch 'notAuthenticated' to give warning
|
||||
|
||||
osm.authenticate(function(err) {
|
||||
if (err) { // quit save mode..
|
||||
context.enter(modeBrowse(context));
|
||||
return;
|
||||
} else {
|
||||
save(updateFunction); // continue where we left off..
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
function parseResults(results) {
|
||||
|
||||
// call success
|
||||
|
||||
// otherwise, call failure
|
||||
}
|
||||
|
||||
function success(response) {
|
||||
console.log('success!', response);
|
||||
}
|
||||
|
||||
function failure(response) {
|
||||
console.log('failure!', response);
|
||||
}
|
||||
|
||||
updateFunction(parseResults);
|
||||
}
|
||||
|
||||
function toggleNoteStatus(parseResults) {
|
||||
if (!_note || !_note.status || !context.selectedNoteID) return;
|
||||
services.osm.toggleNoteStatus(_note, _inputValue, parseResults);
|
||||
}
|
||||
|
||||
function addNoteComment(parseResults) {
|
||||
if (!_note || !_note.status || !context.selectedNoteID) return;
|
||||
services.osm..addNoteComment(_note, _inputValue, parseResults);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function noteHeader(selection) {
|
||||
selection.selectAll('.note-header')
|
||||
@@ -217,16 +275,18 @@ export function uiNoteEditor(context) {
|
||||
.attr('placeholder', t('note.inputPlaceholder'))
|
||||
.attr('maxlength', 1000)
|
||||
.call(utilNoAuto)
|
||||
.on('input', change(true))
|
||||
.on('blur', change())
|
||||
.on('change', change())
|
||||
.on('input', modified)
|
||||
.on('blur', modified)
|
||||
.on('change', modified)
|
||||
.merge(input);
|
||||
|
||||
|
||||
function change(onInput) {
|
||||
return function() {
|
||||
dispatch.call('changeInput', this, onInput);
|
||||
};
|
||||
function modified(onInput) {
|
||||
_modified = !!this.value;
|
||||
_inputValue = this.value;
|
||||
|
||||
// TODO: fix this event handling & update button text to reflect if there is input
|
||||
// dispatch.call('inputModified', this, _inputValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -272,20 +332,13 @@ export function uiNoteEditor(context) {
|
||||
.merge(buttonEnter);
|
||||
|
||||
buttonSection.selectAll('.close-button')
|
||||
.on('click.close', function() {
|
||||
console.log('close button clicked');
|
||||
});
|
||||
.on('click', function() { save(toggleNoteStatus) });
|
||||
|
||||
buttonSection.selectAll('.reopen-button')
|
||||
.on('click.reopen', function() {
|
||||
console.log('reopen button clicked');
|
||||
});
|
||||
.on('click', function() { save(toggleNoteStatus) });
|
||||
|
||||
buttonSection.selectAll('.cancel-button')
|
||||
.on('click.cancel', function() {
|
||||
// var selectedID = commitChanges.entityID(); TODO: cancel note event
|
||||
// dispatch.call('cancel', this, selectedID);
|
||||
});
|
||||
.on('click.cancel', cancel);
|
||||
|
||||
buttonSection.selectAll('.save-button')
|
||||
.attr('disabled', function() {
|
||||
@@ -294,7 +347,8 @@ export function uiNoteEditor(context) {
|
||||
})
|
||||
.on('click.save', function() {
|
||||
this.blur(); // avoid keeping focus on the button - #4641
|
||||
// dispatch.call('saveNote', this, _newComment); TODO: saveNote event
|
||||
save(addNoteComment);
|
||||
dispatch.call('saveNote', this, _newComment); // TODO: saveNote event
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user