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
	}
... Ce différentiel a été tronqué car il excède la taille maximale pouvant être affichée.

Formats disponibles : Unified diff