-
Notifications
You must be signed in to change notification settings - Fork 3
/
relations.js
122 lines (102 loc) · 3.23 KB
/
relations.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
'use strict';
var $ = require('jquery');
require('jquery-ui/ui/widgets/button');
require('jquery-contextmenu');
/**
* @class Relations
* @param {Object} config
* @param {Writer} config.writer
* @param {String} config.parentId
*/
function Relations(config) {
var w = config.writer;
var id = config.parentId;
$('#'+id).append(
'<div class="moduleParent">'+
'<ul class="moduleContent relationsList"></ul>'+
'<div class="moduleFooter">'+
'<button type="button" role="add">Add Relation</button><button type="button" role="remove">Remove Relation</button>'+
'</div>'+
'</div>');
var $relations = $('#'+id);
var $addButton = $relations.find('.moduleFooter button[role=add]').button();
$addButton.click(function() {
w.dialogManager.show('triple');
});
var $removeButton = $relations.find('.moduleFooter button[role=remove]').button();
$removeButton.click(function() {
var selected = $relations.find('ul li.selected');
if (selected.length == 1) {
var i = selected.data('index');
w.triples.splice(i, 1);
pm.update();
} else {
w.dialogManager.show('message', {
title: 'No Relation Selected',
msg: 'You must first select a relation to remove.',
type: 'error'
});
}
});
$.contextMenu({
selector: '#'+id+' ul li',
zIndex: 10,
appendTo: '#'+w.containerId,
className: 'cwrc',
items: {
remove: {
name: 'Remove Relation',
icon: 'tag_remove',
callback: function(key, opt) {
var i = opt.$trigger.data('index');
w.triples.splice(i, 1);
pm.update();
}
}
}
});
w.event('loadingDocument').subscribe(function() {
pm.clear();
});
w.event('documentLoaded').subscribe(function() {
pm.update();
});
w.event('schemaLoaded').subscribe(function() {
pm.update();
});
/**
* @lends Relations.prototype
*/
var pm = {
currentlySelectedNode: null
};
/**
* Update the list of relations.
*/
pm.update = function() {
pm.clear();
var relationsString = '';
for (var i = 0; i < w.triples.length; i++) {
var triple = w.triples[i];
relationsString += '<li>'+triple.subject.text+' '+triple.predicate.text+' '+triple.object.text+'</li>';
}
$relations.find('ul').html(relationsString);
$relations.find('ul li').each(function(index, el) {
$(this).data('index', index);
}).click(function() {
$(this).addClass('selected').siblings().removeClass('selected');
});
};
pm.clear = function() {
$relations.find('ul').empty();
};
pm.destroy = function() {
$addButton.button('destroy');
$removeButton.button('destroy');
$('#'+id+'_contextMenu').remove();
};
// add to writer
w.relations = pm;
return pm;
};
module.exports = Relations;