Rift.IO OSM R1 Initial Submission
[osm/UI.git] / skyquake / plugins / composer / src / src / libraries / UniqueId.js
1 /**
2 * Created by onvelocity on 2/12/16.
3 */
4 'use strict';
5 import d3 from 'd3'
6 import guid from './guid'
7 import DescriptorModel from './model/DescriptorModel'
8 export default class UID {
9
10 static get propertyName() {
11 return ':uid';
12 }
13
14 static create() {
15 return guid();
16 }
17
18 static from(obj) {
19 if (!obj || /undefined|null/.test(obj)) {
20 return;
21 }
22 if (obj instanceof DescriptorModel) {
23 // a descriptor instance
24 return obj.uid;
25 }
26 if (obj.dataset && obj.dataset.uid) {
27 // DOM Element
28 obj = obj.dataset.uid;
29 } else if (obj.__data__ && obj.__data__.uid) {
30 // d3 managed element
31 obj = obj.__data__.uid;
32 } else if (obj instanceof Element) {
33 obj = d3.select(obj).attr('data-uid');
34 }
35 if (!obj || /undefined|null/.test(obj)) {
36 return;
37 }
38 const uid = typeof obj === 'object' ? obj[UID.propertyName] || (obj.uiState && obj.uiState[UID.propertyName]) : obj;
39 if (typeof uid === 'string') {
40 return uid;
41 }
42 }
43
44 static hasUniqueId(obj) {
45 return !!UID.from(obj);
46 }
47
48 static assignUniqueId(obj) {
49 return obj[UID.propertyName] = UID.create();
50 }
51
52 }