Révision 3022
tmp/org.txm.core/src/java/org/txm/core/preferences/TBXPreferences.java (revision 3022) | ||
---|---|---|
69 | 69 |
|
70 | 70 |
public static final String EDITION_DEFINITION_WORDS_PER_PAGE = "edition_definition_words_per_page"; //$NON-NLS-1$ |
71 | 71 |
|
72 |
public static final String EDITION_DEFINITION_ENABLE_COLLAPSIBLE_METADATA = "edition_definition_enable_collapsible"; //$NON-NLS-1$ |
|
73 |
|
|
72 | 74 |
public static final String EDITION_DEFINITION_PAGE_BREAK_ELEMENT = "edition_definition_page_break_element"; //$NON-NLS-1$ |
73 | 75 |
|
74 | 76 |
public static final String EDITION_DEFINITION_IMAGES_DIRECTORY = "edition_definition_images_directory"; //$NON-NLS-1$ |
... | ... | |
78 | 80 |
*/ |
79 | 81 |
public static final String SHOW_ALL_RESULT_NODES = "show_all_result_nodes"; //$NON-NLS-1$ |
80 | 82 |
|
83 |
/* |
|
84 |
* Base URL of TXM update site |
|
85 |
*/ |
|
81 | 86 |
public static final String UPDATESITE = "update_site"; //$NON-NLS-1$ |
82 | 87 |
|
83 |
|
|
84 | 88 |
/** |
85 | 89 |
* To enable/disable the results persistence (save after a computing and load at Toolbox start). |
86 | 90 |
*/ |
tmp/org.txm.core/src/java/org/txm/objects/EditionDefinition.java (revision 3022) | ||
---|---|---|
38 | 38 |
return node.getInt(TBXPreferences.EDITION_DEFINITION_WORDS_PER_PAGE, 500); |
39 | 39 |
} |
40 | 40 |
|
41 |
public boolean getEnableCollapsibleMetadata() { |
|
42 |
return node.getBoolean(TBXPreferences.EDITION_DEFINITION_ENABLE_COLLAPSIBLE_METADATA, false); |
|
43 |
} |
|
44 |
|
|
41 | 45 |
public String getPageElement() { |
42 | 46 |
return node.get(TBXPreferences.EDITION_DEFINITION_PAGE_BREAK_ELEMENT, "pb"); |
43 | 47 |
} |
... | ... | |
78 | 82 |
} |
79 | 83 |
} |
80 | 84 |
|
85 |
public void setEnableCollapsible(boolean enable) { |
|
86 |
node.putBoolean(TBXPreferences.EDITION_DEFINITION_ENABLE_COLLAPSIBLE_METADATA, enable); |
|
87 |
} |
|
88 |
|
|
81 | 89 |
public void setWordsPerPage(int words_per_page) { |
82 | 90 |
node.putInt(TBXPreferences.EDITION_DEFINITION_WORDS_PER_PAGE, words_per_page); |
83 | 91 |
} |
... | ... | |
118 | 126 |
} |
119 | 127 |
return buffer.toString(); |
120 | 128 |
} |
121 |
|
|
129 |
|
|
122 | 130 |
public void setPaginateEdition(boolean paginate) { |
123 |
node.putBoolean(TBXPreferences.EDITION_DEFINITION_PAGINATE, paginate);
|
|
131 |
node.putBoolean(TBXPreferences.EDITION_DEFINITION_PAGINATE, paginate); |
|
124 | 132 |
} |
125 | 133 |
} |
tmp/org.txm.core/res/org/txm/css/txm.css (revision 3022) | ||
---|---|---|
84 | 84 |
|
85 | 85 |
td[rend="table-cell-align-center"] { |
86 | 86 |
text-align: center; |
87 |
} |
|
87 |
} |
|
88 |
|
|
89 |
/* collapsible objects styling */ |
|
90 |
.collapsible { |
|
91 |
background-color: #777; |
|
92 |
color: white; |
|
93 |
cursor: pointer; |
|
94 |
width: 100%; |
|
95 |
border: none; |
|
96 |
text-align: left; |
|
97 |
font-weight: bold; |
|
98 |
outline: none; |
|
99 |
} |
|
100 |
|
|
101 |
.active, .collapsible:hover { |
|
102 |
background-color: #555; |
|
103 |
} |
|
104 |
|
|
105 |
.collapsiblecontent { |
|
106 |
display: none; |
|
107 |
overflow: hidden; |
|
108 |
} |
tmp/org.txm.core/res/org/txm/js/testjquery.html (revision 3022) | ||
---|---|---|
1 |
<!doctype html> |
|
2 |
<html> |
|
3 |
<head> |
|
4 |
<meta charset="utf-8"> |
|
5 |
<title>Demo</title> |
|
6 |
</head> |
|
7 |
<body> |
|
8 |
<button>TEST SELECTION</button> |
|
9 |
<script src="http://code.jquery.com/jquery-latest.js"></script> |
|
10 |
<script src="jquery.selection.js"></script> |
|
11 |
<script> |
|
12 |
$( document ).ready(function() { |
|
13 |
$( "button" ).click(function( event ) { |
|
14 |
var sel = window.getSelection() |
|
15 |
alert( $(sel).find("span"); |
|
16 |
event.preventDefault(); |
|
17 |
|
|
18 |
|
|
19 |
}); |
|
20 |
}); |
|
21 |
</script> |
|
22 |
|
|
23 |
<p> |
|
24 |
<span id="w_0" title="un">un</span> <span id="w_1" title="premier">premier</span> |
|
25 |
<span id="w_2" title="mot">mot</span> |
|
26 |
</p> |
|
27 |
</body> |
|
28 |
</html> |
tmp/org.txm.core/res/org/txm/js/test_sel.html (revision 3022) | ||
---|---|---|
1 |
<!doctype html> |
|
2 |
<html> |
|
3 |
<head> |
|
4 |
<meta charset="utf-8"> |
|
5 |
<title>Demo</title> |
|
6 |
</head> |
|
7 |
<body> |
|
8 |
<button>TEST SELECTION</button> |
|
9 |
<script src="http://code.jquery.com/jquery-latest.js"></script> |
|
10 |
<script src="jquery.selection.js"></script> |
|
11 |
<script> |
|
12 |
$( document ).ready(function() { |
|
13 |
$( "button" ).click(function( event ) { |
|
14 |
var sel = window.getSelection() |
|
15 |
alert( $(sel).find("span"); |
|
16 |
event.preventDefault(); |
|
17 |
|
|
18 |
|
|
19 |
}); |
|
20 |
}); |
|
21 |
</script> |
|
22 |
|
|
23 |
<p> |
|
24 |
<span id="w_0" title="un">un</span> <span id="w_1" title="premier">premier</span> |
|
25 |
<span id="w_2" title="mot">mot</span> |
|
26 |
</p> |
|
27 |
</body> |
|
28 |
</html> |
tmp/org.txm.core/res/org/txm/js/jquery.selection.js (revision 3022) | ||
---|---|---|
1 |
/*! |
|
2 |
* jQuery.selection - jQuery Plugin |
|
3 |
* |
|
4 |
* Copyright (c) 2010-2014 IWASAKI Koji (@madapaja). |
|
5 |
* http://blog.madapaja.net/ |
|
6 |
* Under The MIT License |
|
7 |
* |
|
8 |
* Permission is hereby granted, free of charge, to any person obtaining |
|
9 |
* a copy of this software and associated documentation files (the |
|
10 |
* "Software"), to deal in the Software without restriction, including |
|
11 |
* without limitation the rights to use, copy, modify, merge, publish, |
|
12 |
* distribute, sublicense, and/or sell copies of the Software, and to |
|
13 |
* permit persons to whom the Software is furnished to do so, subject to |
|
14 |
* the following conditions: |
|
15 |
* |
|
16 |
* The above copyright notice and this permission notice shall be |
|
17 |
* included in all copies or substantial portions of the Software. |
|
18 |
* |
|
19 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|
20 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
21 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|
22 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
|
23 |
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
|
24 |
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
25 |
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
26 |
*/ |
|
27 |
(function($, win, doc) { |
|
28 |
/** |
|
29 |
* get caret status of the selection of the element |
|
30 |
* |
|
31 |
* @param {Element} element target DOM element |
|
32 |
* @return {Object} return |
|
33 |
* @return {String} return.text selected text |
|
34 |
* @return {Number} return.start start position of the selection |
|
35 |
* @return {Number} return.end end position of the selection |
|
36 |
*/ |
|
37 |
var _getCaretInfo = function(element){ |
|
38 |
var res = { |
|
39 |
text: '', |
|
40 |
start: 0, |
|
41 |
end: 0 |
|
42 |
}; |
|
43 |
|
|
44 |
if (!element.value) { |
|
45 |
/* no value or empty string */ |
|
46 |
return res; |
|
47 |
} |
|
48 |
|
|
49 |
try { |
|
50 |
if (win.getSelection) { |
|
51 |
/* except IE */ |
|
52 |
res.start = element.selectionStart; |
|
53 |
res.end = element.selectionEnd; |
|
54 |
res.text = element.value.slice(res.start, res.end); |
|
55 |
} else if (doc.selection) { |
|
56 |
/* for IE */ |
|
57 |
element.focus(); |
|
58 |
|
|
59 |
var range = doc.selection.createRange(), |
|
60 |
range2 = doc.body.createTextRange(); |
|
61 |
|
|
62 |
res.text = range.text; |
|
63 |
|
|
64 |
try { |
|
65 |
range2.moveToElementText(element); |
|
66 |
range2.setEndPoint('StartToStart', range); |
|
67 |
} catch (e) { |
|
68 |
range2 = element.createTextRange(); |
|
69 |
range2.setEndPoint('StartToStart', range); |
|
70 |
} |
|
71 |
|
|
72 |
res.start = element.value.length - range2.text.length; |
|
73 |
res.end = res.start + range.text.length; |
|
74 |
} |
|
75 |
} catch (e) { |
|
76 |
/* give up */ |
|
77 |
} |
|
78 |
|
|
79 |
return res; |
|
80 |
}; |
|
81 |
|
|
82 |
/** |
|
83 |
* caret operation for the element |
|
84 |
* @type {Object} |
|
85 |
*/ |
|
86 |
var _CaretOperation = { |
|
87 |
/** |
|
88 |
* get caret position |
|
89 |
* |
|
90 |
* @param {Element} element target element |
|
91 |
* @return {Object} return |
|
92 |
* @return {Number} return.start start position for the selection |
|
93 |
* @return {Number} return.end end position for the selection |
|
94 |
*/ |
|
95 |
getPos: function(element) { |
|
96 |
var tmp = _getCaretInfo(element); |
|
97 |
return {start: tmp.start, end: tmp.end}; |
|
98 |
}, |
|
99 |
|
|
100 |
/** |
|
101 |
* set caret position |
|
102 |
* |
|
103 |
* @param {Element} element target element |
|
104 |
* @param {Object} toRange caret position |
|
105 |
* @param {Number} toRange.start start position for the selection |
|
106 |
* @param {Number} toRange.end end position for the selection |
|
107 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
108 |
*/ |
|
109 |
setPos: function(element, toRange, caret) { |
|
110 |
caret = this._caretMode(caret); |
|
111 |
|
|
112 |
if (caret === 'start') { |
|
113 |
toRange.end = toRange.start; |
|
114 |
} else if (caret === 'end') { |
|
115 |
toRange.start = toRange.end; |
|
116 |
} |
|
117 |
|
|
118 |
element.focus(); |
|
119 |
try { |
|
120 |
if (element.createTextRange) { |
|
121 |
var range = element.createTextRange(); |
|
122 |
|
|
123 |
if (win.navigator.userAgent.toLowerCase().indexOf("msie") >= 0) { |
|
124 |
toRange.start = element.value.substr(0, toRange.start).replace(/\r/g, '').length; |
|
125 |
toRange.end = element.value.substr(0, toRange.end).replace(/\r/g, '').length; |
|
126 |
} |
|
127 |
|
|
128 |
range.collapse(true); |
|
129 |
range.moveStart('character', toRange.start); |
|
130 |
range.moveEnd('character', toRange.end - toRange.start); |
|
131 |
|
|
132 |
range.select(); |
|
133 |
} else if (element.setSelectionRange) { |
|
134 |
element.setSelectionRange(toRange.start, toRange.end); |
|
135 |
} |
|
136 |
} catch (e) { |
|
137 |
/* give up */ |
|
138 |
} |
|
139 |
}, |
|
140 |
|
|
141 |
/** |
|
142 |
* get selected text |
|
143 |
* |
|
144 |
* @param {Element} element target element |
|
145 |
* @return {String} return selected text |
|
146 |
*/ |
|
147 |
getText: function(element) { |
|
148 |
return _getCaretInfo(element).text; |
|
149 |
}, |
|
150 |
|
|
151 |
/** |
|
152 |
* get caret mode |
|
153 |
* |
|
154 |
* @param {String} caret caret mode |
|
155 |
* @return {String} return any of the following: "keep" | "start" | "end" |
|
156 |
*/ |
|
157 |
_caretMode: function(caret) { |
|
158 |
caret = caret || "keep"; |
|
159 |
if (caret === false) { |
|
160 |
caret = 'end'; |
|
161 |
} |
|
162 |
|
|
163 |
switch (caret) { |
|
164 |
case 'keep': |
|
165 |
case 'start': |
|
166 |
case 'end': |
|
167 |
break; |
|
168 |
|
|
169 |
default: |
|
170 |
caret = 'keep'; |
|
171 |
} |
|
172 |
|
|
173 |
return caret; |
|
174 |
}, |
|
175 |
|
|
176 |
/** |
|
177 |
* replace selected text |
|
178 |
* |
|
179 |
* @param {Element} element target element |
|
180 |
* @param {String} text replacement text |
|
181 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
182 |
*/ |
|
183 |
replace: function(element, text, caret) { |
|
184 |
var tmp = _getCaretInfo(element), |
|
185 |
orig = element.value, |
|
186 |
pos = $(element).scrollTop(), |
|
187 |
range = {start: tmp.start, end: tmp.start + text.length}; |
|
188 |
|
|
189 |
element.value = orig.substr(0, tmp.start) + text + orig.substr(tmp.end); |
|
190 |
|
|
191 |
$(element).scrollTop(pos); |
|
192 |
this.setPos(element, range, caret); |
|
193 |
}, |
|
194 |
|
|
195 |
/** |
|
196 |
* insert before the selected text |
|
197 |
* |
|
198 |
* @param {Element} element target element |
|
199 |
* @param {String} text insertion text |
|
200 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
201 |
*/ |
|
202 |
insertBefore: function(element, text, caret) { |
|
203 |
var tmp = _getCaretInfo(element), |
|
204 |
orig = element.value, |
|
205 |
pos = $(element).scrollTop(), |
|
206 |
range = {start: tmp.start + text.length, end: tmp.end + text.length}; |
|
207 |
|
|
208 |
element.value = orig.substr(0, tmp.start) + text + orig.substr(tmp.start); |
|
209 |
|
|
210 |
$(element).scrollTop(pos); |
|
211 |
this.setPos(element, range, caret); |
|
212 |
}, |
|
213 |
|
|
214 |
/** |
|
215 |
* insert after the selected text |
|
216 |
* |
|
217 |
* @param {Element} element target element |
|
218 |
* @param {String} text insertion text |
|
219 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
220 |
*/ |
|
221 |
insertAfter: function(element, text, caret) { |
|
222 |
var tmp = _getCaretInfo(element), |
|
223 |
orig = element.value, |
|
224 |
pos = $(element).scrollTop(), |
|
225 |
range = {start: tmp.start, end: tmp.end}; |
|
226 |
|
|
227 |
element.value = orig.substr(0, tmp.end) + text + orig.substr(tmp.end); |
|
228 |
|
|
229 |
$(element).scrollTop(pos); |
|
230 |
this.setPos(element, range, caret); |
|
231 |
} |
|
232 |
}; |
|
233 |
|
|
234 |
/* add jQuery.selection */ |
|
235 |
$.extend({ |
|
236 |
/** |
|
237 |
* get selected text on the window |
|
238 |
* |
|
239 |
* @param {String} mode selection mode: any of the following: "text" | "html" |
|
240 |
* @return {String} return |
|
241 |
*/ |
|
242 |
selection: function(mode) { |
|
243 |
var getText = ((mode || 'text').toLowerCase() === 'text'); |
|
244 |
|
|
245 |
try { |
|
246 |
if (win.getSelection) { |
|
247 |
if (getText) { |
|
248 |
// get text |
|
249 |
return win.getSelection().toString(); |
|
250 |
} else { |
|
251 |
// get html |
|
252 |
var sel = win.getSelection(), range; |
|
253 |
|
|
254 |
if (sel.getRangeAt) { |
|
255 |
range = sel.getRangeAt(0); |
|
256 |
} else { |
|
257 |
range = doc.createRange(); |
|
258 |
range.setStart(sel.anchorNode, sel.anchorOffset); |
|
259 |
range.setEnd(sel.focusNode, sel.focusOffset); |
|
260 |
} |
|
261 |
|
|
262 |
return $('<div></div>').append(range.cloneContents()).html(); |
|
263 |
} |
|
264 |
} else if (doc.selection) { |
|
265 |
if (getText) { |
|
266 |
// get text |
|
267 |
return doc.selection.createRange().text; |
|
268 |
} else { |
|
269 |
// get html |
|
270 |
return doc.selection.createRange().htmlText; |
|
271 |
} |
|
272 |
} |
|
273 |
} catch (e) { |
|
274 |
/* give up */ |
|
275 |
} |
|
276 |
|
|
277 |
return ''; |
|
278 |
} |
|
279 |
}); |
|
280 |
|
|
281 |
/* add selection */ |
|
282 |
$.fn.extend({ |
|
283 |
selection: function(mode, opts) { |
|
284 |
opts = opts || {}; |
|
285 |
|
|
286 |
switch (mode) { |
|
287 |
/** |
|
288 |
* selection('getPos') |
|
289 |
* get caret position |
|
290 |
* |
|
291 |
* @return {Object} return |
|
292 |
* @return {Number} return.start start position for the selection |
|
293 |
* @return {Number} return.end end position for the selection |
|
294 |
*/ |
|
295 |
case 'getPos': |
|
296 |
return _CaretOperation.getPos(this[0]); |
|
297 |
|
|
298 |
/** |
|
299 |
* selection('setPos', opts) |
|
300 |
* set caret position |
|
301 |
* |
|
302 |
* @param {Number} opts.start start position for the selection |
|
303 |
* @param {Number} opts.end end position for the selection |
|
304 |
*/ |
|
305 |
case 'setPos': |
|
306 |
return this.each(function() { |
|
307 |
_CaretOperation.setPos(this, opts); |
|
308 |
}); |
|
309 |
|
|
310 |
/** |
|
311 |
* selection('replace', opts) |
|
312 |
* replace the selected text |
|
313 |
* |
|
314 |
* @param {String} opts.text replacement text |
|
315 |
* @param {String} opts.caret caret mode: any of the following: "keep" | "start" | "end" |
|
316 |
*/ |
|
317 |
case 'replace': |
|
318 |
return this.each(function() { |
|
319 |
_CaretOperation.replace(this, opts.text, opts.caret); |
|
320 |
}); |
|
321 |
|
|
322 |
/** |
|
323 |
* selection('insert', opts) |
|
324 |
* insert before/after the selected text |
|
325 |
* |
|
326 |
* @param {String} opts.text insertion text |
|
327 |
* @param {String} opts.caret caret mode: any of the following: "keep" | "start" | "end" |
|
328 |
* @param {String} opts.mode insertion mode: any of the following: "before" | "after" |
|
329 |
*/ |
|
330 |
case 'insert': |
|
331 |
return this.each(function() { |
|
332 |
if (opts.mode === 'before') { |
|
333 |
_CaretOperation.insertBefore(this, opts.text, opts.caret); |
|
334 |
} else { |
|
335 |
_CaretOperation.insertAfter(this, opts.text, opts.caret); |
|
336 |
} |
|
337 |
}); |
|
338 |
|
|
339 |
/** |
|
340 |
* selection('get') |
|
341 |
* get selected text |
|
342 |
* |
|
343 |
* @return {String} return |
|
344 |
*/ |
|
345 |
case 'get': |
|
346 |
/* falls through */ |
|
347 |
default: |
|
348 |
return _CaretOperation.getText(this[0]); |
|
349 |
} |
|
350 |
|
|
351 |
return this; |
|
352 |
} |
|
353 |
}); |
|
354 |
})(jQuery, window, window.document); |
tmp/org.txm.core/res/org/txm/js/collapsible.js (revision 3022) | ||
---|---|---|
1 |
// add a click listeners to all 'collapsible' class objects when the page is loaded |
|
2 |
|
|
3 |
|
|
4 |
function onCollapsibleClicked(node) { |
|
5 |
|
|
6 |
node.classList.toggle("active"); |
|
7 |
var content = node.nextElementSibling; |
|
8 |
if (content.style.display === "block") { |
|
9 |
content.style.display = "none"; |
|
10 |
node.textContent="➕" |
|
11 |
} else { |
|
12 |
content.style.display = "block"; |
|
13 |
node.textContent="➖" |
|
14 |
} |
|
15 |
} |
|
0 | 16 |
tmp/org.txm.core/res/org/txm/jstest/jquery.selection.js (revision 3022) | ||
---|---|---|
1 |
/*! |
|
2 |
* jQuery.selection - jQuery Plugin |
|
3 |
* |
|
4 |
* Copyright (c) 2010-2014 IWASAKI Koji (@madapaja). |
|
5 |
* http://blog.madapaja.net/ |
|
6 |
* Under The MIT License |
|
7 |
* |
|
8 |
* Permission is hereby granted, free of charge, to any person obtaining |
|
9 |
* a copy of this software and associated documentation files (the |
|
10 |
* "Software"), to deal in the Software without restriction, including |
|
11 |
* without limitation the rights to use, copy, modify, merge, publish, |
|
12 |
* distribute, sublicense, and/or sell copies of the Software, and to |
|
13 |
* permit persons to whom the Software is furnished to do so, subject to |
|
14 |
* the following conditions: |
|
15 |
* |
|
16 |
* The above copyright notice and this permission notice shall be |
|
17 |
* included in all copies or substantial portions of the Software. |
|
18 |
* |
|
19 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
|
20 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
|
21 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
|
22 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
|
23 |
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
|
24 |
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
|
25 |
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
|
26 |
*/ |
|
27 |
(function($, win, doc) { |
|
28 |
/** |
|
29 |
* get caret status of the selection of the element |
|
30 |
* |
|
31 |
* @param {Element} element target DOM element |
|
32 |
* @return {Object} return |
|
33 |
* @return {String} return.text selected text |
|
34 |
* @return {Number} return.start start position of the selection |
|
35 |
* @return {Number} return.end end position of the selection |
|
36 |
*/ |
|
37 |
var _getCaretInfo = function(element){ |
|
38 |
var res = { |
|
39 |
text: '', |
|
40 |
start: 0, |
|
41 |
end: 0 |
|
42 |
}; |
|
43 |
|
|
44 |
if (!element.value) { |
|
45 |
/* no value or empty string */ |
|
46 |
return res; |
|
47 |
} |
|
48 |
|
|
49 |
try { |
|
50 |
if (win.getSelection) { |
|
51 |
/* except IE */ |
|
52 |
res.start = element.selectionStart; |
|
53 |
res.end = element.selectionEnd; |
|
54 |
res.text = element.value.slice(res.start, res.end); |
|
55 |
} else if (doc.selection) { |
|
56 |
/* for IE */ |
|
57 |
element.focus(); |
|
58 |
|
|
59 |
var range = doc.selection.createRange(), |
|
60 |
range2 = doc.body.createTextRange(); |
|
61 |
|
|
62 |
res.text = range.text; |
|
63 |
|
|
64 |
try { |
|
65 |
range2.moveToElementText(element); |
|
66 |
range2.setEndPoint('StartToStart', range); |
|
67 |
} catch (e) { |
|
68 |
range2 = element.createTextRange(); |
|
69 |
range2.setEndPoint('StartToStart', range); |
|
70 |
} |
|
71 |
|
|
72 |
res.start = element.value.length - range2.text.length; |
|
73 |
res.end = res.start + range.text.length; |
|
74 |
} |
|
75 |
} catch (e) { |
|
76 |
/* give up */ |
|
77 |
} |
|
78 |
|
|
79 |
return res; |
|
80 |
}; |
|
81 |
|
|
82 |
/** |
|
83 |
* caret operation for the element |
|
84 |
* @type {Object} |
|
85 |
*/ |
|
86 |
var _CaretOperation = { |
|
87 |
/** |
|
88 |
* get caret position |
|
89 |
* |
|
90 |
* @param {Element} element target element |
|
91 |
* @return {Object} return |
|
92 |
* @return {Number} return.start start position for the selection |
|
93 |
* @return {Number} return.end end position for the selection |
|
94 |
*/ |
|
95 |
getPos: function(element) { |
|
96 |
var tmp = _getCaretInfo(element); |
|
97 |
return {start: tmp.start, end: tmp.end}; |
|
98 |
}, |
|
99 |
|
|
100 |
/** |
|
101 |
* set caret position |
|
102 |
* |
|
103 |
* @param {Element} element target element |
|
104 |
* @param {Object} toRange caret position |
|
105 |
* @param {Number} toRange.start start position for the selection |
|
106 |
* @param {Number} toRange.end end position for the selection |
|
107 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
108 |
*/ |
|
109 |
setPos: function(element, toRange, caret) { |
|
110 |
caret = this._caretMode(caret); |
|
111 |
|
|
112 |
if (caret === 'start') { |
|
113 |
toRange.end = toRange.start; |
|
114 |
} else if (caret === 'end') { |
|
115 |
toRange.start = toRange.end; |
|
116 |
} |
|
117 |
|
|
118 |
element.focus(); |
|
119 |
try { |
|
120 |
if (element.createTextRange) { |
|
121 |
var range = element.createTextRange(); |
|
122 |
|
|
123 |
if (win.navigator.userAgent.toLowerCase().indexOf("msie") >= 0) { |
|
124 |
toRange.start = element.value.substr(0, toRange.start).replace(/\r/g, '').length; |
|
125 |
toRange.end = element.value.substr(0, toRange.end).replace(/\r/g, '').length; |
|
126 |
} |
|
127 |
|
|
128 |
range.collapse(true); |
|
129 |
range.moveStart('character', toRange.start); |
|
130 |
range.moveEnd('character', toRange.end - toRange.start); |
|
131 |
|
|
132 |
range.select(); |
|
133 |
} else if (element.setSelectionRange) { |
|
134 |
element.setSelectionRange(toRange.start, toRange.end); |
|
135 |
} |
|
136 |
} catch (e) { |
|
137 |
/* give up */ |
|
138 |
} |
|
139 |
}, |
|
140 |
|
|
141 |
/** |
|
142 |
* get selected text |
|
143 |
* |
|
144 |
* @param {Element} element target element |
|
145 |
* @return {String} return selected text |
|
146 |
*/ |
|
147 |
getText: function(element) { |
|
148 |
return _getCaretInfo(element).text; |
|
149 |
}, |
|
150 |
|
|
151 |
/** |
|
152 |
* get caret mode |
|
153 |
* |
|
154 |
* @param {String} caret caret mode |
|
155 |
* @return {String} return any of the following: "keep" | "start" | "end" |
|
156 |
*/ |
|
157 |
_caretMode: function(caret) { |
|
158 |
caret = caret || "keep"; |
|
159 |
if (caret === false) { |
|
160 |
caret = 'end'; |
|
161 |
} |
|
162 |
|
|
163 |
switch (caret) { |
|
164 |
case 'keep': |
|
165 |
case 'start': |
|
166 |
case 'end': |
|
167 |
break; |
|
168 |
|
|
169 |
default: |
|
170 |
caret = 'keep'; |
|
171 |
} |
|
172 |
|
|
173 |
return caret; |
|
174 |
}, |
|
175 |
|
|
176 |
/** |
|
177 |
* replace selected text |
|
178 |
* |
|
179 |
* @param {Element} element target element |
|
180 |
* @param {String} text replacement text |
|
181 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
182 |
*/ |
|
183 |
replace: function(element, text, caret) { |
|
184 |
var tmp = _getCaretInfo(element), |
|
185 |
orig = element.value, |
|
186 |
pos = $(element).scrollTop(), |
|
187 |
range = {start: tmp.start, end: tmp.start + text.length}; |
|
188 |
|
|
189 |
element.value = orig.substr(0, tmp.start) + text + orig.substr(tmp.end); |
|
190 |
|
|
191 |
$(element).scrollTop(pos); |
|
192 |
this.setPos(element, range, caret); |
|
193 |
}, |
|
194 |
|
|
195 |
/** |
|
196 |
* insert before the selected text |
|
197 |
* |
|
198 |
* @param {Element} element target element |
|
199 |
* @param {String} text insertion text |
|
200 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
201 |
*/ |
|
202 |
insertBefore: function(element, text, caret) { |
|
203 |
var tmp = _getCaretInfo(element), |
|
204 |
orig = element.value, |
|
205 |
pos = $(element).scrollTop(), |
|
206 |
range = {start: tmp.start + text.length, end: tmp.end + text.length}; |
|
207 |
|
|
208 |
element.value = orig.substr(0, tmp.start) + text + orig.substr(tmp.start); |
|
209 |
|
|
210 |
$(element).scrollTop(pos); |
|
211 |
this.setPos(element, range, caret); |
|
212 |
}, |
|
213 |
|
|
214 |
/** |
|
215 |
* insert after the selected text |
|
216 |
* |
|
217 |
* @param {Element} element target element |
|
218 |
* @param {String} text insertion text |
|
219 |
* @param {String} caret caret mode: any of the following: "keep" | "start" | "end" |
|
220 |
*/ |
|
221 |
insertAfter: function(element, text, caret) { |
|
222 |
var tmp = _getCaretInfo(element), |
|
223 |
orig = element.value, |
|
224 |
pos = $(element).scrollTop(), |
|
225 |
range = {start: tmp.start, end: tmp.end}; |
|
226 |
|
|
227 |
element.value = orig.substr(0, tmp.end) + text + orig.substr(tmp.end); |
|
228 |
|
|
229 |
$(element).scrollTop(pos); |
|
230 |
this.setPos(element, range, caret); |
|
231 |
} |
|
232 |
}; |
|
233 |
|
|
234 |
/* add jQuery.selection */ |
|
235 |
$.extend({ |
|
236 |
/** |
|
237 |
* get selected text on the window |
|
238 |
* |
|
239 |
* @param {String} mode selection mode: any of the following: "text" | "html" |
|
240 |
* @return {String} return |
|
241 |
*/ |
|
242 |
selection: function(mode) { |
|
243 |
var getText = ((mode || 'text').toLowerCase() === 'text'); |
|
244 |
|
|
245 |
try { |
|
246 |
if (win.getSelection) { |
|
247 |
if (getText) { |
|
248 |
// get text |
|
249 |
return win.getSelection().toString(); |
|
250 |
} else { |
|
251 |
// get html |
|
252 |
var sel = win.getSelection(), range; |
|
253 |
|
|
254 |
if (sel.getRangeAt) { |
|
255 |
range = sel.getRangeAt(0); |
|
256 |
} else { |
|
257 |
range = doc.createRange(); |
|
258 |
range.setStart(sel.anchorNode, sel.anchorOffset); |
|
259 |
range.setEnd(sel.focusNode, sel.focusOffset); |
|
260 |
} |
|
261 |
|
|
262 |
return $('<div></div>').append(range.cloneContents()).html(); |
|
263 |
} |
|
264 |
} else if (doc.selection) { |
|
265 |
if (getText) { |
|
266 |
// get text |
|
267 |
return doc.selection.createRange().text; |
|
268 |
} else { |
|
269 |
// get html |
|
270 |
return doc.selection.createRange().htmlText; |
|
271 |
} |
|
272 |
} |
|
273 |
} catch (e) { |
|
274 |
/* give up */ |
|
275 |
} |
|
276 |
|
|
277 |
return ''; |
|
278 |
} |
|
279 |
}); |
|
280 |
|
|
281 |
/* add selection */ |
|
282 |
$.fn.extend({ |
|
283 |
selection: function(mode, opts) { |
|
284 |
opts = opts || {}; |
|
285 |
|
|
286 |
switch (mode) { |
|
287 |
/** |
|
288 |
* selection('getPos') |
|
289 |
* get caret position |
|
290 |
* |
|
291 |
* @return {Object} return |
|
292 |
* @return {Number} return.start start position for the selection |
|
293 |
* @return {Number} return.end end position for the selection |
|
294 |
*/ |
|
295 |
case 'getPos': |
|
296 |
return _CaretOperation.getPos(this[0]); |
|
297 |
|
|
298 |
/** |
|
299 |
* selection('setPos', opts) |
|
300 |
* set caret position |
|
301 |
* |
|
302 |
* @param {Number} opts.start start position for the selection |
|
303 |
* @param {Number} opts.end end position for the selection |
|
304 |
*/ |
|
305 |
case 'setPos': |
|
306 |
return this.each(function() { |
|
307 |
_CaretOperation.setPos(this, opts); |
|
308 |
}); |
|
309 |
|
|
310 |
/** |
|
311 |
* selection('replace', opts) |
|
312 |
* replace the selected text |
|
313 |
* |
|
314 |
* @param {String} opts.text replacement text |
|
315 |
* @param {String} opts.caret caret mode: any of the following: "keep" | "start" | "end" |
|
316 |
*/ |
|
317 |
case 'replace': |
|
318 |
return this.each(function() { |
|
319 |
_CaretOperation.replace(this, opts.text, opts.caret); |
|
320 |
}); |
|
321 |
|
|
322 |
/** |
|
323 |
* selection('insert', opts) |
|
324 |
* insert before/after the selected text |
|
325 |
* |
|
326 |
* @param {String} opts.text insertion text |
|
327 |
* @param {String} opts.caret caret mode: any of the following: "keep" | "start" | "end" |
|
328 |
* @param {String} opts.mode insertion mode: any of the following: "before" | "after" |
|
329 |
*/ |
|
330 |
case 'insert': |
|
331 |
return this.each(function() { |
|
332 |
if (opts.mode === 'before') { |
|
333 |
_CaretOperation.insertBefore(this, opts.text, opts.caret); |
|
334 |
} else { |
|
335 |
_CaretOperation.insertAfter(this, opts.text, opts.caret); |
|
336 |
} |
|
337 |
}); |
|
338 |
|
|
339 |
/** |
|
340 |
* selection('get') |
|
341 |
* get selected text |
|
342 |
* |
|
343 |
* @return {String} return |
|
344 |
*/ |
|
345 |
case 'get': |
|
346 |
/* falls through */ |
|
347 |
default: |
|
348 |
return _CaretOperation.getText(this[0]); |
|
349 |
} |
|
350 |
|
|
351 |
return this; |
|
352 |
} |
|
353 |
}); |
|
354 |
})(jQuery, window, window.document); |
tmp/org.txm.core/res/org/txm/jstest/testjquery.html (revision 3022) | ||
---|---|---|
1 |
<!doctype html> |
|
2 |
<html> |
|
3 |
<head> |
|
4 |
<meta charset="utf-8"> |
|
5 |
<title>Demo</title> |
|
6 |
</head> |
|
7 |
<body> |
|
8 |
<button>TEST SELECTION</button> |
|
9 |
<script src="http://code.jquery.com/jquery-latest.js"></script> |
|
10 |
<script src="jquery.selection.js"></script> |
|
11 |
<script> |
|
12 |
$( document ).ready(function() { |
|
13 |
$( "button" ).click(function( event ) { |
|
14 |
var sel = window.getSelection() |
|
15 |
alert( $(sel).find("span"); |
|
16 |
event.preventDefault(); |
|
17 |
|
|
18 |
|
|
19 |
}); |
|
20 |
}); |
|
21 |
</script> |
|
22 |
|
|
23 |
<p> |
|
24 |
<span id="w_0" title="un">un</span> <span id="w_1" title="premier">premier</span> |
|
25 |
<span id="w_2" title="mot">mot</span> |
|
26 |
</p> |
|
27 |
</body> |
|
28 |
</html> |
|
0 | 29 |
tmp/org.txm.core/res/org/txm/jstest/test_sel.html (revision 3022) | ||
---|---|---|
1 |
<!doctype html> |
|
2 |
<html> |
|
3 |
<head> |
|
4 |
<meta charset="utf-8"> |
|
5 |
<title>Demo</title> |
|
6 |
</head> |
|
7 |
<body> |
|
8 |
<button>TEST SELECTION</button> |
|
9 |
<script src="http://code.jquery.com/jquery-latest.js"></script> |
|
10 |
<script src="jquery.selection.js"></script> |
|
11 |
<script> |
|
12 |
$( document ).ready(function() { |
|
13 |
$( "button" ).click(function( event ) { |
|
14 |
var sel = window.getSelection() |
|
15 |
alert( $(sel).find("span"); |
|
16 |
event.preventDefault(); |
|
17 |
|
|
18 |
|
|
19 |
}); |
|
20 |
}); |
|
21 |
</script> |
|
22 |
|
|
23 |
<p> |
|
24 |
<span id="w_0" title="un">un</span> <span id="w_1" title="premier">premier</span> |
|
25 |
<span id="w_2" title="mot">mot</span> |
|
26 |
</p> |
|
27 |
</body> |
|
28 |
</html> |
|
0 | 29 |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/factiva/factivamailLoader.groovy (revision 3022) | ||
---|---|---|
77 | 77 |
File newSrcDir = new File(binDir, "src") |
78 | 78 |
newSrcDir.mkdir(); |
79 | 79 |
File alcesteFile = new File(newSrcDir, srcDir.getName()+".txt"); |
80 |
|
|
81 |
if (!alcesteFile.exists()) { |
|
82 |
println "Error: import module was expecting to find the $alcesteFile file to continue. Aborting." |
|
83 |
return false |
|
84 |
} else { |
|
85 |
println "Reading $alcesteFile..." |
|
86 |
} |
|
87 |
|
|
80 | 88 |
FactivaMail2Alceste converter = new FactivaMail2Alceste(srcDir, alcesteFile, "UTF-8", "UTF-8") |
81 | 89 |
if (!converter.doparse()) { |
82 | 90 |
println "Failed to convert files in $srcDir to one Alceste file" |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/pager.groovy (revision 3022) | ||
---|---|---|
76 | 76 |
boolean firstWord = true |
77 | 77 |
|
78 | 78 |
boolean paginate = true |
79 |
boolean enableCollapsibles = false; |
|
79 | 80 |
|
80 |
|
|
81 | 81 |
/** The wordvalue. */ |
82 | 82 |
String wordvalue; |
83 | 83 |
|
... | ... | |
162 | 162 |
pager(File txmfile, File htmlDir, String txtname, List<String> NoSpaceBefore, |
163 | 163 |
List<String> NoSpaceAfter, String corpusname, String cuttingTag, Metadatas metadatas, Project project) { |
164 | 164 |
this.metadatas = metadatas |
165 |
this.wordmax = project.getEditionDefinition("default").getWordsPerPage(); |
|
166 | 165 |
this.cuttingTag = cuttingTag; |
167 | 166 |
this.corpusname = corpusname; |
168 | 167 |
this.NoSpaceBefore = NoSpaceBefore; |
... | ... | |
171 | 170 |
this.txmfile = txmfile; |
172 | 171 |
this.htmlDir = htmlDir; |
173 | 172 |
this.txtname = txtname; |
173 |
this.wordmax = project.getEditionDefinition("default").getWordsPerPage(); |
|
174 | 174 |
this.paginate = project.getEditionDefinition("default").getPaginateEdition() |
175 |
this.enableCollapsibles = project.getEditionDefinition("default").getEnableCollapsibleMetadata(); |
|
175 | 176 |
|
176 | 177 |
inputData = url.openStream(); |
177 | 178 |
factory = XMLInputFactory.newInstance(); |
... | ... | |
242 | 243 |
writer.writeAttribute("content", "text/html"); |
243 | 244 |
writer.writeAttribute("charset", "UTF-8"); |
244 | 245 |
writer.writeEndElement(); // meta |
246 |
writer.writeCharacters("\n") |
|
245 | 247 |
writer.writeStartElement("head"); |
246 | 248 |
//<link rel="stylesheet" type="text/css" href="class.css" /> |
247 | 249 |
writer.writeStartElement("link"); |
248 | 250 |
writer.writeAttribute("rel", "stylesheet"); |
249 | 251 |
writer.writeAttribute("type", "text/css"); |
252 |
writer.writeAttribute("href", "txm.css"); |
|
253 |
writer.writeEndElement(); // link |
|
254 |
writer.writeCharacters("\n") |
|
255 |
writer.writeStartElement("link"); |
|
256 |
writer.writeAttribute("rel", "stylesheet"); |
|
257 |
writer.writeAttribute("type", "text/css"); |
|
250 | 258 |
writer.writeAttribute("href", "transcriber.css"); |
251 | 259 |
writer.writeEndElement(); // link |
260 |
writer.writeCharacters("\n") |
|
252 | 261 |
writer.writeStartElement("link"); |
253 | 262 |
writer.writeAttribute("rel", "stylesheet"); |
254 | 263 |
writer.writeAttribute("type", "text/css"); |
255 | 264 |
writer.writeAttribute("href", corpusname+".css"); |
256 | 265 |
writer.writeEndElement(); // link |
266 |
writer.writeCharacters("\n") |
|
267 |
writer.writeStartElement("script"); |
|
268 |
writer.writeAttribute("src", "js/collapsible.js"); |
|
269 |
writer.writeCharacters("\n") |
|
270 |
writer.writeEndElement(); // link |
|
271 |
writer.writeCharacters("\n") |
|
257 | 272 |
writer.writeEndElement(); // head |
258 |
|
|
273 |
writer.writeCharacters("\n") |
|
259 | 274 |
nbBreak++ |
260 | 275 |
writer.writeStartElement("body"); |
261 | 276 |
writer.writeAttribute("class", "txmeditionpage") |
... | ... | |
283 | 298 |
writeMediaAccess("0.0") |
284 | 299 |
|
285 | 300 |
writer.writeEndElement(); // h1 |
301 |
writer.writeCharacters("\n") |
|
286 | 302 |
|
287 | 303 |
String subtitle = parser.getAttributeValue(null, "subtitle"); |
288 | 304 |
if (subtitle != null && subtitle.length() > 0) { |
... | ... | |
290 | 306 |
writer.writeAttribute("class", "subtitle"); |
291 | 307 |
writer.writeCharacters(subtitle); |
292 | 308 |
writer.writeEndElement(); // h2 |
309 |
writer.writeCharacters("\n") |
|
293 | 310 |
} |
294 | 311 |
|
312 |
if (enableCollapsibles && parser.getAttributeCount() > 2) { |
|
313 |
writer.writeStartElement("button"); |
|
314 |
writer.writeAttribute("class", "collapsible"); |
|
315 |
writer.writeAttribute("onclick", "onCollapsibleClicked(this)"); |
|
316 |
writer.writeCharacters("➕"); |
|
317 |
writer.writeEndElement() |
|
318 |
writer.writeCharacters("\n") |
|
319 |
} |
|
295 | 320 |
writer.writeStartElement("table"); |
296 |
writer.writeAttribute("class", "transcription-table"); |
|
321 |
if (enableCollapsibles && parser.getAttributeCount() > 2) { |
|
322 |
writer.writeAttribute("class", "transcription-table collapsiblecontent") |
|
323 |
} else { |
|
324 |
writer.writeAttribute("class", "transcription-table"); |
|
325 |
} |
|
297 | 326 |
boolean grey = false; |
298 | 327 |
for (int i = 0 ; i < parser.getAttributeCount() ; i++) { |
299 | 328 |
String name = parser.getAttributeName(i); |
... | ... | |
464 | 493 |
|
465 | 494 |
// write metadata HTML |
466 | 495 |
if (metadataGroups.keySet().size() > 0) { |
467 |
writer.writeStartElement("p") |
|
468 |
writer.writeAttribute("class", "section-all-metadata"); |
|
496 |
|
|
497 |
if (enableCollapsibles && metadataGroups.keySet().size() > 2) { |
|
498 |
writer.writeStartElement("button"); |
|
499 |
writer.writeAttribute("class", "collapsible"); |
|
500 |
writer.writeAttribute("onclick", "onCollapsibleClicked(this)"); |
|
501 |
writer.writeCharacters("➕"); |
|
502 |
writer.writeEndElement() |
|
503 |
writer.writeCharacters("\n") |
|
504 |
} |
|
505 |
writer.writeStartElement("div"); |
|
506 |
if (enableCollapsibles && metadataGroups.keySet().size() > 2) { |
|
507 |
writer.writeAttribute("class", "section-all-metadata collapsiblecontent") |
|
508 |
} else { |
|
509 |
writer.writeAttribute("class", "section-all-metadata"); |
|
510 |
} |
|
469 | 511 |
for (String groupName : metadataGroups.keySet()) { |
470 | 512 |
def group = metadataGroups[groupName] |
471 | 513 |
if (group.size() > 0) { |
472 | 514 |
if (groupName.equals("text")) { |
473 |
writer.writeStartElement("p")
|
|
515 |
writer.writeStartElement("div")
|
|
474 | 516 |
writer.writeAttribute("class", "section-"+groupName); |
475 | 517 |
for (String k : group) { |
476 | 518 |
writer.writeStartElement("p") |
... | ... | |
480 | 522 |
writer.writeEndElement() // h4 |
481 | 523 |
writer.writeCharacters(metadata[k]) |
482 | 524 |
writer.writeEndElement() // p |
525 |
writer.writeCharacters("\n") |
|
483 | 526 |
} |
527 |
writer.writeEndElement(); // p |
|
484 | 528 |
} else { // 'metadata' and other groups |
485 | 529 |
writer.writeStartElement("ul") |
486 | 530 |
writer.writeAttribute("class", "section-"+groupName); |
... | ... | |
490 | 534 |
writer.writeCharacters(""+k+": "+metadata[k]) |
491 | 535 |
writer.writeEndElement() // li |
492 | 536 |
} |
537 |
writer.writeEndElement(); // ul |
|
538 |
writer.writeCharacters("\n") |
|
493 | 539 |
} |
494 |
|
|
495 |
writer.writeEndElement(); // ul or p |
|
496 | 540 |
} |
497 | 541 |
} |
498 | 542 |
writer.writeEndElement(); // p |
543 |
writer.writeCharacters("\n") |
|
499 | 544 |
writer.writeEmptyElement("hr") |
500 | 545 |
} |
501 | 546 |
|
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/transcriber/transcriberLoader.groovy (revision 3022) | ||
---|---|---|
343 | 343 |
File cssfile = new File(Toolbox.getTxmHomePath(), "css/transcriber.css") |
344 | 344 |
File cssTXMFile = new File(Toolbox.getTxmHomePath(), "css/txm.css") |
345 | 345 |
if (cssfile.exists() && htmlDir.exists()) { |
346 |
FileCopy.copy(cssfile, new File(htmlDir, "default/txm.css"));
|
|
346 |
FileCopy.copy(cssTXMFile, new File(htmlDir, "default/txm.css"));
|
|
347 | 347 |
FileCopy.copy(cssfile, new File(htmlDir, "default/transcriber.css")); |
348 | 348 |
} |
349 |
BundleUtils.copyFiles("org.txm.core", "res", "org/txm", "js", new File(htmlDir, "default")); |
|
349 | 350 |
|
350 | 351 |
//copy media files |
351 | 352 |
println "Copying media files if any (mp3, wav, mp4 or avi) "+xmltxmFiles.size()+" texts" |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/alceste/alcesteLoader.groovy (revision 3022) | ||
---|---|---|
29 | 29 |
|
30 | 30 |
import org.txm.scripts.importer.alceste.importer; |
31 | 31 |
import org.txm.scripts.importer.alceste.compiler; |
32 |
import org.txm.scripts.importer.xml.pager_old;
|
|
32 |
import org.txm.scripts.importer.xml.pager; |
|
33 | 33 |
import org.txm.objects.*; |
34 | 34 |
import org.txm.utils.*; |
35 | 35 |
import org.txm.*; |
... | ... | |
145 | 145 |
t.setSourceFile(srcfile) |
146 | 146 |
t.setTXMFile(srcfile) |
147 | 147 |
|
148 |
def ed = new pager_old(srcfile, outdir, txtname, NoSpaceBefore, NoSpaceAfter, wordsPerPage, basename, "pb");
|
|
148 |
def ed = new pager(srcfile, outdir, txtname, NoSpaceBefore, NoSpaceAfter, basename, project);
|
|
149 | 149 |
Edition edition = new Edition(t); |
150 | 150 |
edition.setName("default"); |
151 | 151 |
edition.setIndex(outdir.getAbsolutePath()); |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/hyperbase/importer.groovy (revision 3022) | ||
---|---|---|
2 | 2 |
// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of |
3 | 3 |
// Lyon 2, University of Franche-Comté, University of Nice |
4 | 4 |
// Sophia Antipolis, University of Paris 3. |
5 |
//
|
|
5 |
// |
|
6 | 6 |
// The TXM platform is free software: you can redistribute it |
7 | 7 |
// and/or modify it under the terms of the GNU General Public |
8 | 8 |
// License as published by the Free Software Foundation, |
9 | 9 |
// either version 2 of the License, or (at your option) any |
10 | 10 |
// later version. |
11 |
//
|
|
11 |
// |
|
12 | 12 |
// The TXM platform is distributed in the hope that it will be |
13 | 13 |
// useful, but WITHOUT ANY WARRANTY; without even the implied |
14 | 14 |
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR |
15 | 15 |
// PURPOSE. See the GNU General Public License for more |
16 | 16 |
// details. |
17 |
//
|
|
17 |
// |
|
18 | 18 |
// You should have received a copy of the GNU General |
19 | 19 |
// Public License along with the TXM platform. If not, see |
20 | 20 |
// http://www.gnu.org/licenses. |
... | ... | |
57 | 57 |
* The Class importer. |
58 | 58 |
*/ |
59 | 59 |
class importer { |
60 |
|
|
60 |
|
|
61 | 61 |
/** |
62 | 62 |
* Run. |
63 | 63 |
* |
... | ... | |
70 | 70 |
{ |
71 | 71 |
String rootDir = srcDir.getAbsolutePath()+"/" |
72 | 72 |
//cleaning |
73 |
|
|
73 |
|
|
74 | 74 |
new File(binDir,"ptokenized").deleteDir(); |
75 | 75 |
new File(binDir,"ptokenized").mkdir(); |
76 | 76 |
new File(binDir,"tokenized").deleteDir(); |
77 | 77 |
new File(binDir,"tokenized").mkdir(); |
78 | 78 |
new File(binDir,"split").deleteDir(); |
79 | 79 |
new File(binDir,"split").mkdir(); |
80 |
|
|
80 |
|
|
81 | 81 |
ArrayList<String> milestones = new ArrayList<String>();//the tags who you want them to stay milestones |
82 | 82 |
milestones.add("tagUsage"); |
83 | 83 |
milestones.add("pb"); |
84 | 84 |
milestones.add("lb"); |
85 |
|
|
85 |
|
|
86 | 86 |
//build xml files |
87 | 87 |
if (srcDir.listFiles() == null || srcDir.listFiles().size() == 0 ) { |
88 | 88 |
println "No corpus file in: "+srcDir; |
89 | 89 |
return false; |
90 | 90 |
} |
91 |
File corpusfile = null; |
|
92 |
for (File f : srcDir.listFiles()) { |
|
93 |
if (!f.isHidden() && f.canRead() && f.isFile() && f.getName() != "import.xml") { |
|
94 |
corpusfile = f; |
|
95 |
break; |
|
91 |
File corpusfile = new File(srcDir, srcDir.getName()); |
|
92 |
if (!corpusfile.exists()) { |
|
93 |
for (File f : srcDir.listFiles()) { |
|
94 |
if (!f.isHidden() && f.canRead() && f.isFile() && f.getName() != "import.xml") { |
|
95 |
corpusfile = f; |
|
96 |
break; |
|
97 |
} |
|
96 | 98 |
} |
97 | 99 |
} |
98 |
|
|
100 |
|
|
99 | 101 |
System.out.println("Corpus file: "+corpusfile); |
100 | 102 |
if (!new Hyperbase2Xml().run(corpusfile, new File(binDir, "split"), encoding)) { |
101 | 103 |
println("Failed to split the corpus file into text: "+corpusfile); |
102 | 104 |
return false; |
103 | 105 |
} |
104 |
|
|
106 |
|
|
105 | 107 |
//TOKENIZE ALL FILES |
106 | 108 |
List<File> srcfiles = new File(binDir, "split").listFiles(); |
107 | 109 |
println("Tokenizing "+srcfiles.size()+" files"); |
... | ... | |
109 | 111 |
print "." |
110 | 112 |
String filename = pfile.getName().substring(0, pfile.getName().length()-4) |
111 | 113 |
File tfile = new File(binDir, "tokenized/"+filename+".xml"); |
112 |
|
|
114 |
|
|
113 | 115 |
SimpleTokenizerXml tokenizer = new SimpleTokenizerXml(pfile, tfile, lang); |
114 | 116 |
if (!tokenizer.process()) { |
115 | 117 |
println("Failed to tokenize file: "+pfile); |
... | ... | |
117 | 119 |
} |
118 | 120 |
} |
119 | 121 |
println "" |
120 |
|
|
122 |
|
|
121 | 123 |
//Tag sentences |
122 | 124 |
List<File> stokenfiles = new File(binDir,"tokenized").listFiles() |
123 | 125 |
new File(binDir,"stokenized").mkdir(); |
... | ... | |
135 | 137 |
File infile = new File(binDir, "tokenized/"+f.getName()); |
136 | 138 |
File xmlfile = new File(binDir, "stokenized/"+f.getName()); |
137 | 139 |
File headerfile = new File(binDir, "tokenized/"+f.getName()+"header.xml"); |
138 |
|
|
140 |
|
|
139 | 141 |
S.SetInFileAndOutFile(infile.getPath(), xmlfile.getPath()); |
140 | 142 |
S.setEncodages("UTF-8","UTF-8"); |
141 | 143 |
Object[] arguments1 = [headerfile.getAbsolutePath()]; |
... | ... | |
148 | 150 |
} catch (Exception e) {println "Failed to sentence file "+f;println e;} |
149 | 151 |
} |
150 | 152 |
println "" |
151 |
|
|
153 |
|
|
152 | 154 |
//TRANSFORM INTO XML-TEI-TXM |
153 | 155 |
List<File> tokenfiles = new File(binDir, "stokenized").listFiles() |
154 | 156 |
println("Building xml-txm ("+tokenfiles.size()+" files)") |
... | ... | |
156 | 158 |
print "." |
157 | 159 |
File file = f; |
158 | 160 |
String txmfile = f.getName(); |
159 |
|
|
161 |
|
|
160 | 162 |
def correspType = new HashMap<String,String>() |
161 | 163 |
def correspRef = new HashMap<String,String>() |
162 | 164 |
//il faut lister les id de tous les respStmt |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/xtz/XTZPager.groovy (revision 3022) | ||
---|---|---|
164 | 164 |
if (cssDirectory.exists()) { |
165 | 165 |
FileCopy.copyFiles(cssDirectory, csshtmlDirectory) |
166 | 166 |
} |
167 |
|
|
168 |
BundleUtils.copyFiles("org.txm.core", "res", "org/txm", "js", outputDirectory); |
|
167 | 169 |
if (jsDirectory.exists()) { |
168 | 170 |
File jshtmlDirectory = new File(outputDirectory, "js") |
169 | 171 |
FileCopy.copyFiles(jsDirectory, jshtmlDirectory) |
170 | 172 |
} |
173 |
|
|
174 |
|
|
171 | 175 |
if (imagesDirectory.exists()) { |
172 | 176 |
File imageshtmlDirectory = new File(outputDirectory, "images") |
173 | 177 |
FileCopy.copyFiles(imagesDirectory, imageshtmlDirectory) |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/xtz/XTZDefaultPagerStep.groovy (revision 3022) | ||
---|---|---|
38 | 38 |
/** The first word. */ |
39 | 39 |
boolean firstWord = true; |
40 | 40 |
|
41 |
boolean enableCollapsibles = false; |
|
42 |
|
|
41 | 43 |
/** The wordvalue. */ |
42 | 44 |
String wordvalue = ""; |
43 | 45 |
|
... | ... | |
120 | 122 |
this.infile = infile; |
121 | 123 |
this.wordTag= pager.wordTag; |
122 | 124 |
outdir.mkdirs() |
125 |
this.enableCollapsibles = pager.getImportModule().getProject().getEditionDefinition("default").getEnableCollapsibleMetadata(); |
|
123 | 126 |
|
124 | 127 |
inputData = new BufferedInputStream(url.openStream()); |
125 | 128 |
factory = XMLInputFactory.newInstance(); |
... | ... | |
225 | 228 |
pagedWriter.writeStartElement("title") |
226 | 229 |
pagedWriter.writeCharacters(basename.toUpperCase()+" Edition - Page "+pagecount) |
227 | 230 |
pagedWriter.writeEndElement(); // </title> |
231 |
pagedWriter.writeStartElement("script", ["src":"js/collapsible.js"]); |
|
232 |
pagedWriter.writeEndElement(); // </script> |
|
228 | 233 |
pagedWriter.writeEndElement() // </head> |
229 | 234 |
pagedWriter.writeCharacters("\n") |
230 | 235 |
pagedWriter.writeStartElement("body") //<body> |
... | ... | |
345 | 350 |
pagedWriter.writeElement("h3", attributes["id"]) |
346 | 351 |
} |
347 | 352 |
|
348 |
pagedWriter.writeStartElement("table") |
|
353 |
if (enableCollapsibles && attributes.keySet().size() > 2) { |
|
354 |
pagedWriter.writeStartElement("button", ["class":"collapsible", "onclick":"onCollapsibleClicked(this)"]) |
|
355 |
pagedWriter.writeCharacters("➕"); |
|
356 |
pagedWriter.writeEndElement() |
|
357 |
} |
|
358 |
|
|
359 |
pagedWriter.writeStartElement("table"); |
|
360 |
if (enableCollapsibles && attributes.keySet().size() > 2) pagedWriter.writeAttribute("class", "collapsiblecontent") |
|
349 | 361 |
for (String k : attributes.keySet()) { |
350 | 362 |
if (k == "id") continue; |
351 | 363 |
if (k == "rend") continue; |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/xml/xmlLoader.groovy (revision 3022) | ||
---|---|---|
293 | 293 |
t.setSourceFile(txmFile) |
294 | 294 |
t.setTXMFile(txmFile) |
295 | 295 |
|
296 |
def ed = new pager(txmFile, outdir, txtname, NoSpaceBefore, NoSpaceAfter, wordsPerPage, basename, page_element);
|
|
296 |
def ed = new pager(txmFile, outdir, txtname, NoSpaceBefore, NoSpaceAfter, basename, project);
|
|
297 | 297 |
Edition edition = new Edition(t) |
298 | 298 |
edition.setName("default") |
299 | 299 |
edition.setIndex(outdir.getAbsolutePath()) |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/xml/pager.groovy (revision 3022) | ||
---|---|---|
40 | 40 |
import org.xml.sax.helpers.DefaultHandler; |
41 | 41 |
import org.txm.utils.io.FileCopy |
42 | 42 |
import org.txm.objects.Project |
43 |
import org.txm.utils.BundleUtils; |
|
43 | 44 |
|
44 | 45 |
/** Build a simple edition from a xml-tei. |
45 | 46 |
* @author mdecorde */ |
... | ... | |
71 | 72 |
boolean firstWord = true; |
72 | 73 |
|
73 | 74 |
boolean paginate = true; |
75 |
boolean enableCollapsibles = false; |
|
74 | 76 |
|
75 | 77 |
/** The wordvalue. */ |
76 | 78 |
String wordvalue = ""; |
... | ... | |
133 | 135 |
this.paginationElement = project.getEditionDefinition("default").getPageElement() |
134 | 136 |
this.paginate = project.getEditionDefinition("default").getPaginateEdition() |
135 | 137 |
this.wordmax = project.getEditionDefinition("default").getWordsPerPage(); |
136 |
|
|
138 |
this.enableCollapsibles = project.getEditionDefinition("default").getEnableCollapsibleMetadata(); |
|
137 | 139 |
this.basename = basename; |
138 | 140 |
this.txtname = txtname; |
139 | 141 |
this.outdir = outdir; |
... | ... | |
160 | 162 |
File txmhomeDir = corporaDir.getParentFile() |
161 | 163 |
File txmcss = new File(txmhomeDir, "css/txm.css") |
162 | 164 |
if (htmlDir.exists() && txmcss.exists()) { |
163 |
FileCopy.copy(txmcss, new File(htmlDir, "txm.css"))
|
|
165 |
FileCopy.copy(txmcss, new File(htmlDir, txmcss.getName()))
|
|
164 | 166 |
} |
167 |
BundleUtils.copyFiles("org.txm.core", "res", "org/txm", "js", htmlDir); |
|
165 | 168 |
} |
166 | 169 |
} |
167 | 170 |
} catch(Exception e) { |
... | ... | |
228 | 231 |
pagedWriter.writeCharacters(basename.toUpperCase()+" Edition - Page "+pagecount) |
229 | 232 |
pagedWriter.writeEndElement(); // </title> |
230 | 233 |
pagedWriter.writeCharacters("\n") |
234 |
pagedWriter.writeStartElement("script", ["src":"js/collapsible.js"]); |
|
235 |
pagedWriter.writeEndElement(); // </script> |
|
236 |
pagedWriter.writeCharacters("\n") |
|
231 | 237 |
pagedWriter.writeEndElement() // </head> |
232 | 238 |
pagedWriter.writeCharacters("\n") |
233 | 239 |
pagedWriter.writeStartElement("body") //<body> |
... | ... | |
305 | 311 |
switch (localname) { |
306 | 312 |
case "text": |
307 | 313 |
pagedWriter.write("\n"); |
308 |
if (parser.getAttributeValue(null,"id") != null) |
|
314 |
if (parser.getAttributeValue(null,"id") != null) {
|
|
309 | 315 |
pagedWriter.writeElement("h3", parser.getAttributeValue(null,"id")) |
316 |
} |
|
317 |
if (enableCollapsibles && parser.getAttributeCount() > 2) { |
|
318 |
pagedWriter.writeStartElement("button", ["class":"collapsible", "onclick":"onCollapsibleClicked(this)"]) |
|
319 |
pagedWriter.writeCharacters("➕"); |
|
320 |
pagedWriter.writeEndElement() |
|
321 |
} |
|
310 | 322 |
pagedWriter.writeStartElement("table"); |
323 |
if (enableCollapsibles && parser.getAttributeCount() > 2) pagedWriter.writeAttribute("class", "collapsiblecontent") |
|
311 | 324 |
for (int i = 0 ; i < parser.getAttributeCount() ; i++) { |
312 | 325 |
pagedWriter.writeStartElement("tr"); |
313 | 326 |
pagedWriter.writeElement("td", parser.getAttributeLocalName(i)); |
tmp/org.txm.groovy.core/src/groovy/org/txm/scripts/importer/doc/docLoader.groovy (revision 3022) | ||
---|---|---|
314 | 314 |
t.setName(txtname); |
315 | 315 |
t.setSourceFile(txmFile) |
316 | 316 |
t.setTXMFile(txmFile) |
317 |
|
|
318 |
def ed = new pager(txmFile, outdir, txtname, NoSpaceBefore, NoSpaceAfter, wordsPerPage, basename, "pb");
|
|
317 |
|
|
318 |
def ed = new pager(txmFile, outdir, txtname, NoSpaceBefore, NoSpaceAfter, basename, "pb", project);
|
|
319 | 319 |
Edition edition = new Edition(t); |
320 | 320 |
edition.setName("default"); |
321 | 321 |
edition.setIndex(outdir.getAbsolutePath()); |
322 | 322 |
for (i = 0 ; i < ed.getPageFiles().size();) { |
323 | 323 |
File f = ed.getPageFiles().get(i); |
324 | 324 |
String wordid = "w_0"; |
325 |
if (i < ed.getIdx().size()) wordid = ed.getIdx().get(i); |
|
325 |
if (i < ed.getIdx().size()) { |
|
326 |
wordid = ed.getIdx().get(i); |
|
327 |
} |
|
326 | 328 |
edition.addPage(""+(++i), wordid); |
327 | 329 |
} |
328 | 330 |
} |
Formats disponibles : Unified diff