|
244 | 244 | var oldLabs = this.get("labels");
|
245 | 245 | // Need to clone the list of labels...
|
246 | 246 | var labs = [];
|
| 247 | + var oldLabKeys = []; |
| 248 | + |
| 249 | + // Keep old labels unchanged... |
247 | 250 | for (var i=0; i<oldLabs.length; i++) {
|
248 |
| - labs.push( $.extend(true, {}, oldLabs[i]) ); |
| 251 | + var lbl = oldLabs[i]; |
| 252 | + var lbl_key = this.get_label_key(lbl); |
| 253 | + oldLabKeys.push(lbl_key); |
| 254 | + labs.push( $.extend(true, {}, lbl)); |
249 | 255 | }
|
250 | 256 | // ... then add new labels ...
|
251 | 257 | for (var j=0; j<labels.length; j++) {
|
252 |
| - labs.push( $.extend(true, {}, labels[j]) ); |
| 258 | + var lbl = labels[j]; |
| 259 | + var lbl_key = this.get_label_key(lbl); |
| 260 | + if (!oldLabKeys.includes(lbl_key)) { |
| 261 | + // otherwise leave un-edited |
| 262 | + labs.push( $.extend(true, {}, lbl)); |
| 263 | + } |
253 | 264 | }
|
254 | 265 | // ... so that we get the changed event triggering OK
|
255 | 266 | this.save('labels', labs);
|
|
439 | 450 | // labels_map is {labelKey: {size:s, text:t, position:p, color:c}} or {labelKey: false} to delete
|
440 | 451 | // where labelKey specifies the label to edit. "l.text + '_' + l.size + '_' + l.color + '_' + l.position"
|
441 | 452 | edit_labels: function(labels_map) {
|
442 |
| - |
| 453 | + |
443 | 454 | var oldLabs = this.get('labels');
|
444 | 455 | // Need to clone the list of labels...
|
445 | 456 | var labs = [],
|
|
461 | 472 | labs.push( lbl );
|
462 | 473 | }
|
463 | 474 | }
|
| 475 | + |
| 476 | + // Extract all the keys (even duplicates) |
| 477 | + var keys = labs.map(lbl => this.get_label_key(lbl)); |
| 478 | + |
| 479 | + // get all unique labels based on filtering keys |
| 480 | + //(i.e removing duplicate keys based on the index of the first occurrence of the value) |
| 481 | + var filtered_lbls = labs.filter((lbl, index) => index == keys.indexOf(this.get_label_key(lbl))); |
| 482 | + |
464 | 483 | // ... so that we get the changed event triggering OK
|
465 |
| - this.save('labels', labs); |
| 484 | + this.save('labels', filtered_lbls); |
466 | 485 | },
|
467 | 486 |
|
468 | 487 | save_channel: function(cIndex, attr, value) {
|
|
0 commit comments