indvd00m@0
|
1 |
CKEDITOR.dialog.add('crossreference-link-dialog', function(editor) {
|
indvd00m@0
|
2 |
|
indvd00m@0
|
3 |
var config = editor.config.crossreference;
|
indvd00m@0
|
4 |
|
indvd00m@0
|
5 |
var updateAnchors = function(dialog) {
|
indvd00m@0
|
6 |
dialog.setState(CKEDITOR.DIALOG_STATE_BUSY);
|
indvd00m@0
|
7 |
|
indvd00m@0
|
8 |
dialog.anchors = [];
|
indvd00m@0
|
9 |
dialog.anchorsByGuid = {};
|
indvd00m@0
|
10 |
dialog.anchorsGroupNameByGuid = {};
|
indvd00m@0
|
11 |
|
indvd00m@0
|
12 |
var type = null;
|
indvd00m@0
|
13 |
var typeName = dialog.getValueOf('tab-main', 'type');
|
indvd00m@0
|
14 |
if (typeName)
|
indvd00m@0
|
15 |
type = config.types[typeName];
|
indvd00m@0
|
16 |
|
indvd00m@0
|
17 |
dialog.setValueOf('tab-main', 'filter', '');
|
indvd00m@0
|
18 |
|
indvd00m@0
|
19 |
var anchorSelect = dialog.getContentElement('tab-main', 'anchor');
|
indvd00m@0
|
20 |
anchorSelect.clear();
|
indvd00m@0
|
21 |
anchorSelect.add('', '');
|
indvd00m@0
|
22 |
|
indvd00m@0
|
23 |
var anchorGroupSelect = dialog.getContentElement('tab-main', 'anchorGroup');
|
indvd00m@0
|
24 |
anchorGroupSelect.clear();
|
indvd00m@0
|
25 |
anchorGroupSelect.add('', '');
|
indvd00m@0
|
26 |
if (type && type.groupAnchors == true)
|
indvd00m@0
|
27 |
anchorGroupSelect.getElement().show();
|
indvd00m@0
|
28 |
else
|
indvd00m@0
|
29 |
anchorGroupSelect.getElement().hide();
|
indvd00m@0
|
30 |
|
indvd00m@0
|
31 |
config.findAnchors(config, editor, type, function(anchors) {
|
indvd00m@0
|
32 |
dialog.anchors = anchors;
|
indvd00m@0
|
33 |
dialog.anchorsByGuid = {};
|
indvd00m@0
|
34 |
dialog.anchorsGroupNameByGuid = {};
|
indvd00m@0
|
35 |
|
indvd00m@0
|
36 |
for (var i = 0; i < anchors.length; i++) {
|
indvd00m@0
|
37 |
var anchor = anchors[i];
|
indvd00m@0
|
38 |
var guid = anchor.guid;
|
indvd00m@0
|
39 |
var label = anchor.text;
|
indvd00m@0
|
40 |
anchorSelect.add(label, guid);
|
indvd00m@0
|
41 |
|
indvd00m@0
|
42 |
if (type.groupAnchors == true && anchor.groupGuid) {
|
indvd00m@0
|
43 |
dialog.anchorsGroupNameByGuid[anchor.groupGuid] = anchor.groupName;
|
indvd00m@0
|
44 |
}
|
indvd00m@0
|
45 |
dialog.anchorsByGuid[guid] = anchor;
|
indvd00m@0
|
46 |
}
|
indvd00m@0
|
47 |
|
indvd00m@0
|
48 |
if (type && type.groupAnchors == true) {
|
indvd00m@0
|
49 |
for (var groupGuid in dialog.anchorsGroupNameByGuid) {
|
indvd00m@0
|
50 |
var groupName = dialog.anchorsGroupNameByGuid[groupGuid];
|
indvd00m@0
|
51 |
anchorGroupSelect.add(groupName, groupGuid);
|
indvd00m@0
|
52 |
}
|
indvd00m@0
|
53 |
}
|
indvd00m@0
|
54 |
|
indvd00m@0
|
55 |
// fix and others
|
indvd00m@0
|
56 |
$('option', anchorSelect.getInputElement().$).each(function() {
|
indvd00m@0
|
57 |
var option = $(this);
|
indvd00m@0
|
58 |
var text = option.text();
|
indvd00m@0
|
59 |
option.html(text);
|
indvd00m@0
|
60 |
});
|
indvd00m@0
|
61 |
|
indvd00m@0
|
62 |
if (!dialog.insertMode)
|
indvd00m@0
|
63 |
anchorSelect.setup(dialog.element);
|
indvd00m@0
|
64 |
|
indvd00m@0
|
65 |
dialog.setState(CKEDITOR.DIALOG_STATE_IDLE);
|
indvd00m@0
|
66 |
});
|
indvd00m@0
|
67 |
};
|
indvd00m@0
|
68 |
|
indvd00m@0
|
69 |
var filterAnchors = function(dialog) {
|
indvd00m@0
|
70 |
var filter = dialog.getValueOf('tab-main', 'filter');
|
indvd00m@0
|
71 |
if (filter)
|
indvd00m@0
|
72 |
filter = filter.trim().toLowerCase();
|
indvd00m@0
|
73 |
else
|
indvd00m@0
|
74 |
filter = '';
|
indvd00m@0
|
75 |
|
indvd00m@0
|
76 |
var type = null;
|
indvd00m@0
|
77 |
var typeName = dialog.getValueOf('tab-main', 'type');
|
indvd00m@0
|
78 |
if (typeName)
|
indvd00m@0
|
79 |
type = config.types[typeName];
|
indvd00m@0
|
80 |
|
indvd00m@0
|
81 |
var groupGuid = null;
|
indvd00m@0
|
82 |
if (type && type.groupAnchors == true)
|
indvd00m@0
|
83 |
groupGuid = dialog.getValueOf('tab-main', 'anchorGroup');
|
indvd00m@0
|
84 |
|
indvd00m@0
|
85 |
var anchorSelect = dialog.getContentElement('tab-main', 'anchor');
|
indvd00m@0
|
86 |
var prevValue = anchorSelect.getValue();
|
indvd00m@0
|
87 |
var selected = null;
|
indvd00m@0
|
88 |
$('option', anchorSelect.getInputElement().$).each(function() {
|
indvd00m@0
|
89 |
var option = $(this);
|
indvd00m@0
|
90 |
var guid = option.val();
|
indvd00m@0
|
91 |
var anchor = dialog.anchorsByGuid[guid];
|
indvd00m@0
|
92 |
var text = option.text();
|
indvd00m@0
|
93 |
|
indvd00m@0
|
94 |
var matches = filter.length == 0 || text.toLowerCase().indexOf(filter) != -1;
|
indvd00m@0
|
95 |
if (groupGuid)
|
indvd00m@0
|
96 |
matches = matches && anchor && anchor.groupGuid == groupGuid;
|
indvd00m@0
|
97 |
|
indvd00m@0
|
98 |
if (matches) {
|
indvd00m@0
|
99 |
option.removeAttr('disabled', 'disabled');
|
indvd00m@0
|
100 |
if (selected == null)
|
indvd00m@0
|
101 |
selected = option.val();
|
indvd00m@0
|
102 |
else if (guid == prevValue)
|
indvd00m@0
|
103 |
selected = option.val();
|
indvd00m@0
|
104 |
} else {
|
indvd00m@0
|
105 |
option.attr('disabled', 'disabled');
|
indvd00m@0
|
106 |
}
|
indvd00m@0
|
107 |
});
|
indvd00m@0
|
108 |
anchorSelect.setValue(selected);
|
indvd00m@0
|
109 |
};
|
indvd00m@0
|
110 |
|
indvd00m@0
|
111 |
return {
|
indvd00m@0
|
112 |
title : editor.lang.crossreference.link,
|
indvd00m@0
|
113 |
minWidth : 400,
|
indvd00m@0
|
114 |
minHeight : 150,
|
indvd00m@0
|
115 |
|
indvd00m@0
|
116 |
contents : [
|
indvd00m@0
|
117 |
{
|
indvd00m@0
|
118 |
id : 'tab-main',
|
indvd00m@0
|
119 |
label : editor.lang.crossreference.link,
|
indvd00m@0
|
120 |
elements : [
|
indvd00m@0
|
121 |
{
|
indvd00m@0
|
122 |
type : 'vbox',
|
indvd00m@0
|
123 |
widths : [ '100%' ],
|
indvd00m@0
|
124 |
children : [
|
indvd00m@0
|
125 |
{
|
indvd00m@0
|
126 |
type : 'html',
|
indvd00m@0
|
127 |
id : 'description',
|
indvd00m@0
|
128 |
html : '<div style="white-space: normal; text-align: justify;">' + editor.lang.crossreference.linkDescription + '</div>',
|
indvd00m@0
|
129 |
},
|
indvd00m@0
|
130 |
{
|
indvd00m@0
|
131 |
type : 'select',
|
indvd00m@0
|
132 |
id : 'type',
|
indvd00m@0
|
133 |
width: '100%',
|
indvd00m@0
|
134 |
label : editor.lang.crossreference.anchorType,
|
indvd00m@0
|
135 |
required: true,
|
indvd00m@0
|
136 |
items : [['']],
|
indvd00m@0
|
137 |
onLoad: function() {
|
indvd00m@0
|
138 |
this.getInputElement().setStyle('width', '100%');
|
indvd00m@0
|
139 |
for (var typeName in config.types) {
|
indvd00m@0
|
140 |
var type = config.types[typeName];
|
indvd00m@0
|
141 |
var label = type.name;
|
indvd00m@0
|
142 |
this.add(label, type.type);
|
indvd00m@0
|
143 |
}
|
indvd00m@0
|
144 |
},
|
indvd00m@0
|
145 |
onChange: function() {
|
indvd00m@0
|
146 |
updateAnchors(this.getDialog());
|
indvd00m@0
|
147 |
},
|
indvd00m@0
|
148 |
setup: function(element) {
|
indvd00m@0
|
149 |
this.setValue(element.getAttribute('cross-reference'));
|
indvd00m@0
|
150 |
},
|
indvd00m@0
|
151 |
commit: function(element) {
|
indvd00m@0
|
152 |
element.setAttribute('cross-reference', this.getValue());
|
indvd00m@0
|
153 |
element.setAttribute('cross-link', '');
|
indvd00m@0
|
154 |
}
|
indvd00m@0
|
155 |
},
|
indvd00m@0
|
156 |
{
|
indvd00m@0
|
157 |
type : 'select',
|
indvd00m@0
|
158 |
id : 'anchorGroup',
|
indvd00m@0
|
159 |
width: '100%',
|
indvd00m@0
|
160 |
label : editor.lang.crossreference.anchorGroup,
|
indvd00m@0
|
161 |
required: false,
|
indvd00m@0
|
162 |
items : [['']],
|
indvd00m@0
|
163 |
onLoad: function() {
|
indvd00m@0
|
164 |
this.getInputElement().setStyle('width', '100%');
|
indvd00m@0
|
165 |
},
|
indvd00m@0
|
166 |
onChange: function() {
|
indvd00m@0
|
167 |
filterAnchors(this.getDialog());
|
indvd00m@0
|
168 |
}
|
indvd00m@0
|
169 |
},
|
indvd00m@0
|
170 |
{
|
indvd00m@0
|
171 |
type : 'text',
|
indvd00m@0
|
172 |
id : 'filter',
|
indvd00m@0
|
173 |
width: '100%',
|
indvd00m@0
|
174 |
label : editor.lang.crossreference.linkFilter,
|
indvd00m@0
|
175 |
onKeyUp : function() {
|
indvd00m@0
|
176 |
filterAnchors(this.getDialog());
|
indvd00m@0
|
177 |
}
|
indvd00m@0
|
178 |
},
|
indvd00m@0
|
179 |
{
|
indvd00m@0
|
180 |
type : 'select',
|
indvd00m@0
|
181 |
id : 'anchor',
|
indvd00m@0
|
182 |
width: '100%',
|
indvd00m@0
|
183 |
label : editor.lang.crossreference.anchor,
|
indvd00m@0
|
184 |
required: true,
|
indvd00m@0
|
185 |
items : [['']],
|
indvd00m@0
|
186 |
onLoad: function() {
|
indvd00m@0
|
187 |
this.getInputElement().setStyle('width', '100%');
|
indvd00m@0
|
188 |
},
|
indvd00m@0
|
189 |
setup: function(element) {
|
indvd00m@0
|
190 |
this.setValue(element.getAttribute('cross-guid'));
|
indvd00m@0
|
191 |
},
|
indvd00m@0
|
192 |
commit: function(element) {
|
indvd00m@0
|
193 |
element.setAttribute('cross-guid', this.getValue());
|
indvd00m@0
|
194 |
}
|
indvd00m@0
|
195 |
}
|
indvd00m@0
|
196 |
]
|
indvd00m@0
|
197 |
}
|
indvd00m@0
|
198 |
]
|
indvd00m@0
|
199 |
}
|
indvd00m@0
|
200 |
],
|
indvd00m@0
|
201 |
|
indvd00m@0
|
202 |
onLoad : function() {
|
indvd00m@0
|
203 |
|
indvd00m@0
|
204 |
},
|
indvd00m@0
|
205 |
|
indvd00m@0
|
206 |
onShow : function() {
|
indvd00m@0
|
207 |
var selection = editor.getSelection();
|
indvd00m@0
|
208 |
this.element = selection.getStartElement();
|
indvd00m@0
|
209 |
if (this.element)
|
indvd00m@0
|
210 |
this.element = this.element.getAscendant('a', true);
|
indvd00m@0
|
211 |
if (!this.element || this.element.getName() != 'a') {
|
indvd00m@0
|
212 |
this.element = editor.document.createElement('a');
|
indvd00m@0
|
213 |
this.element.setAttribute('cross-link', '');
|
indvd00m@0
|
214 |
this.insertMode = true;
|
indvd00m@0
|
215 |
} else {
|
indvd00m@0
|
216 |
this.insertMode = false;
|
indvd00m@0
|
217 |
}
|
indvd00m@0
|
218 |
|
indvd00m@0
|
219 |
if (this.insertMode)
|
indvd00m@0
|
220 |
updateAnchors(this);
|
indvd00m@0
|
221 |
else
|
indvd00m@0
|
222 |
this.setupContent(this.element);
|
indvd00m@0
|
223 |
},
|
indvd00m@0
|
224 |
|
indvd00m@0
|
225 |
onOk : function() {
|
indvd00m@0
|
226 |
if (!this.getValueOf('tab-main', 'type'))
|
indvd00m@0
|
227 |
return;
|
indvd00m@0
|
228 |
if (!this.getValueOf('tab-main', 'anchor'))
|
indvd00m@0
|
229 |
return;
|
indvd00m@0
|
230 |
|
indvd00m@0
|
231 |
this.commitContent(this.element);
|
indvd00m@0
|
232 |
|
indvd00m@0
|
233 |
if (this.insertMode)
|
indvd00m@0
|
234 |
editor.insertElement(this.element);
|
indvd00m@0
|
235 |
|
indvd00m@0
|
236 |
editor.execCommand('update-crossreferences');
|
indvd00m@0
|
237 |
}
|
indvd00m@0
|
238 |
|
indvd00m@0
|
239 |
};
|
indvd00m@0
|
240 |
});
|