7 THEMES = ['Alkohol', 'Ambicja', 'Anioł', 'Antysemityzm', 'Arkadia', 'Artysta', 'Bezdomność',
8 'Bezpieczeństwo', 'Bieda', 'Bijatyka', 'Błazen', 'Błądzenie', 'Błoto', 'Bogactwo', 'Bóg', 'Brat',
9 'Bunt', 'Buntownik', 'Burza', 'Car', 'Carpe diem', 'Ciemność', 'Cień', 'Cisza', 'Chciwość', 'Chleb',
10 'Chłop', 'Choroba', 'Chrystus', 'Chrzest', 'Ciało', 'Cierpienie', 'Cmentarz', 'Cnota', 'Córka', 'Cud',
11 'Czarownika', 'Czary', 'Czas', 'Czyn', 'Czyściec', 'Dama', 'Danse macabre', 'Deszcz', 'Diabeł',
12 'Dobro', 'Dom', 'Dorosłość', 'Drzewo', 'Duch', 'Dusza', 'Duma', 'Dworek', 'Dworzanin', 'Dwór',
13 'Dzieciństwo', 'Dziecko', 'Dziedzictwo', 'Dziewictwo', 'Dźwięk', 'Egzorcyzm', 'Elita', 'Emigrant',
14 'Fałsz', 'Filozof', 'Fircyk', 'Flirt', 'Głupiec', 'Głupota', 'Głód', 'Gospodarz', 'Gospodyni', 'Gość',
15 'Gotycyzm', 'Góra', 'Gra', 'Grób', 'Grzech', 'Grzeczność', 'Gwiazda', 'Handel', 'Hańba', 'Historia',
16 'Honor', 'Idealista', 'Imię', 'Interes', 'Jabłka', 'Jedzenie', 'Jesień', 'Kaleka', 'Kara', 'Karczma',
17 'Klęska', 'Kłamstwo', 'Kłótnia', 'Kobieta', 'Kobieta demoniczna', 'Kobieta "upadła"', 'Kochanek',
18 'Kochanek romantyczny', 'Kolonializm', 'Kondycja ludzka', 'Konflikt', 'Konflikt wewnętrzny', 'Koniec świata',
19 'Koń', 'Korzyść', 'Kot', 'Kradzież', 'Krew', 'Król', 'Krzywda', 'Ksiądz', 'Książka',
20 'Księżyc', 'Kuchnia', 'Kuszenie', 'Kwiaty', 'Labirynt', 'Las', 'Lato', 'Lekarz', 'Lenistwo', 'List',
21 'Liberat', 'Los', 'Lud', 'Lustro', 'Łzy', 'Małżeństwo', 'Marzenie', 'Maska', 'Maszyna', 'Matka',
22 'Matka Boska', 'Mądrość', 'Mąż', 'Melancholia', 'Mędrzec', 'Mężczyzna', 'Miasto', 'Mieszczanin',
23 'Miłosierdzie', 'Miłość', 'Miłość niespełniona', 'Miłość platoniczna', 'Miłość romantyczna',
24 'Miłość silniejsza niż śmierć', 'Miłość spełniona', 'Miłość tragiczna', 'Mizoginia', 'Młodość', 'Moda',
25 'Modlitwa', 'Morderstwo', 'Morze', 'Motyl', 'Mucha', 'Muzyka', 'Narodziny', 'Naród', 'Natura',
26 'Nauczyciel', 'Nauczycielka', 'Nauka', 'Niebezpieczeństwo', 'Niedziela', 'Niemiec', 'Nienawiść',
27 'Nieśmiertelność', 'Niewola', 'Noc', 'Nuda', 'Obcy', 'Obłok', 'Obowiązek', 'Obraz świata', 'Obrzędy',
28 'Obyczaje', 'Obywatel', 'Odrodzenie przez grób', 'Odwaga', 'Ofiara', 'Ogień', 'Ogród', 'Ojciec',
29 'Ojczyzna', 'Oko', 'Okręt', 'Okrucieństwo', 'Omen', 'Opieka', 'Organizm', 'Otchłań', 'Pająk', 'Pamięć',
30 'Pan', 'Panna młoda', 'Państwo', 'Patriota', 'Piekło', 'Pielgrzym', 'Pieniądz', 'Pies', 'Piętno',
31 'Pijaństwo', 'Piwnica', 'Plotka', 'Pobożność', 'Pocałunek', 'Pochlebstwo', 'Poeta', 'Poetka', 'Poezja',
32 'Podróż', 'Podstęp', 'Pogrzeb', 'Pojedynek', 'Pokora', 'Pokusa', 'Polak', 'Polityka', 'Polowanie',
33 'Polska', 'Portret', 'Porwanie', 'Poświęcenie', 'Potwór', 'Powstanie', 'Powstaniec', 'Pozory',
34 'Pozycja społeczna', 'Pożar', 'Pożądanie', 'Praca', 'Praca u podstaw', 'Praca organiczna', 'Prawda', 'Prawnik',
35 'Prometeusz', 'Proroctwo', 'Prorok', 'Próżność', 'Przebranie', 'Przeczucie', 'Przedmurze chrześcijaństwa',
36 'Przekleństwo', 'Przekupstwo', 'Przemiana', 'Przemijanie', 'Przemoc', 'Przestrzeń',
37 'Przyjaźń', 'Przyroda nieożywiona', 'Przysięga', 'Przywódca', 'Ptak', 'Pustynia', 'Pycha', 'Raj',
38 'Realista', 'Religia', 'Rewolucja', 'Robak', 'Robotnik', 'Rodzina', 'Rosja', 'Rosjanin', 'Rośliny',
39 'Rozczarowanie', 'Rozpacz', 'Rozstanie', 'Rozum', 'Ruiny', 'Rycerz', 'Rzeka', 'Salon', 'Samobójstwo',
40 'Samolubstwo', 'Samotnik', 'Samotność', 'Sarmata', 'Sąsiad', 'Sąd', 'Sąd Ostateczny', 'Sen', 'Serce',
41 'Sędzia', 'Sielanka', 'Sierota', 'Siła', 'Siostra', 'Sława', 'Słońce', 'Słowo', 'Sługa', 'Służalczość',
42 'Skąpiec', 'Sobowtór', 'Społecznik', 'Spowiedź', 'Sprawiedliwość', 'Starość', 'Strach', 'Strój',
43 'Stworzenie', 'Sumienie', 'Swaty', 'Syberia', 'Syn', 'Syn marnotrawny', 'Syzyf', 'Szaleniec',
44 'Szaleństwo', 'Szantaż', 'Szatan', 'Szczęście', 'Szkoła', 'Szlachcic', 'Szpieg', 'Sztuka', 'Ślub',
45 'Śmiech', 'Śmierć', 'Śmierć bohaterska', 'Śpiew', 'Światło', 'Świętoszek', 'Święty', 'Świt',
46 'Tajemnica', 'Taniec', 'Tchórzostwo', 'Teatr', 'Testament', 'Tęsknota', 'Theatrum mundi', 'Tłum',
47 'Trucizna', 'Trup', 'Twórczość', 'Uczeń', 'Uczta', 'Uroda', 'Umiarkowanie', 'Upadek', 'Upiór',
48 'Urzędnik', 'Vanitas', 'Walka', 'Walka klas', 'Wampir', 'Warszawa', 'Wąż', 'Wdowa', 'Wdowiec',
49 'Wesele', 'Wiatr', 'Wierność', 'Wierzenia', 'Wieś', 'Wiedza', 'Wieża Babel', 'Więzienie', 'Więzień',
50 'Wina', 'Wino', 'Wiosna', 'Wizja', 'Władza', 'Własność', 'Woda', 'Wojna', 'Wojna pokoleń', 'Wolność',
51 'Wróg', 'Wspomnienia', 'Współpraca', 'Wygnanie', 'Wyrzuty sumienia', 'Wyspa', 'Wzrok', 'Zabawa',
52 'Zabobony', 'Zamek', 'Zaręczyny', 'Zaświaty', 'Zazdrość', 'Zbawienie', 'Zbrodnia', 'Zbrodniarz',
53 'Zdrada', 'Zdrowie', 'Zemsta', 'Zesłaniec', 'Ziarno', 'Ziemia', 'Zima', 'Zło', 'Złodziej', 'Złoty wiek',
54 'Zmartwychwstanie', 'Zwątpienie', 'Zwierzęta', 'Zwycięstwo', 'Żałoba', 'Żebrak', 'Żołnierz',
55 'Żona', 'Życie jako wędrówka', 'Życie snem', 'Żyd', 'Żywioły', 'Oświadczyny']
59 function highlight(colour) {
61 if (window.getSelection) {
63 sel = window.getSelection();
65 range = sel.getRangeAt(0);
67 document.designMode = "on";
69 sel.removeAllRanges();
72 // Use HiliteColor since some browsers apply BackColor to the whole block
73 if ( !document.execCommand("HiliteColor", false, colour) ) {
74 document.execCommand("BackColor", false, colour);
76 document.designMode = "off";
77 } else if (document.selection && document.selection.createRange) {
79 range = document.selection.createRange();
80 range.execCommand("BackColor", false, colour);
84 // function unselectThemes(themeId) {
85 // $('.Apple-style-span').each(function() {
86 // $(this).after($(this).html());
91 function gallery(element, url) {
92 var element = $(element);
93 var imageDimensions = {};
94 element.data('images', []);
96 function changePage(pageNumber) {
97 $('img', element).attr('src', element.data('images')[pageNumber - 1]);
100 function normalizeNumber(pageNumber) {
101 // Numer strony musi być pomiędzy 1 a najwyższym numerem
102 var pageCount = element.data('images').length;
103 pageNumber = parseInt(pageNumber, 10);
105 if (!pageNumber || pageNumber == NaN || pageNumber == Infinity || pageNumber == -Infinity) {
107 } else if (pageNumber < 1) {
109 } else if (pageNumber > pageCount) {
116 var pn = $('.page-number', element);
117 pn.change(function(event) {
118 event.preventDefault();
119 var n = normalizeNumber(pn.val());
123 $('.previous-page', element).click(function() {
124 pn.val(normalizeNumber(pn.val()) - 1);
127 $('.next-page', element).click(function() {
128 pn.val(normalizeNumber(pn.val()) + 1);
133 var image = $('img', element).attr('unselectable', 'on');
135 var imageOrigin = {};
138 $('.zoom-in', element).click(function() {
139 zoomFactor = Math.min(2, zoomFactor + 0.2);
142 $('.zoom-out', element).click(function() {
143 zoomFactor = Math.max(0.2, zoomFactor - 0.2);
146 $('.change-gallery', element).click(function() {
147 $('.chosen-gallery').val($('#document-meta .gallery').html() || '/platforma/gallery/');
148 $('.gallery-image').animate({top: 53}, 200);
149 $('.chosen-gallery').focus();
151 $('.change-gallery-ok', element).click(function() {
152 if ($('#document-meta .gallery').length == 0) {
153 $('<div class="gallery"></div>').appendTo('#document-meta');
155 $('#document-meta .gallery').html($('.chosen-gallery').val());
156 updateGallery($('.chosen-gallery').val());
157 $('.gallery-image').animate({top: 27}, 200);
159 $('.change-gallery-cancel', element).click(function() {
160 $('.gallery-image').animate({top: 27}, 200);
163 $('img', element).load(function() {
164 image.css({width: null, height: null});
166 width: $(this).width() * zoomFactor,
167 height: $(this).height() * zoomFactor,
168 originWidth: $(this).width(),
169 originHeight: $(this).height(),
170 galleryWidth: $(this).parent().width(),
171 galleryHeight: $(this).parent().height()
174 if (!(imageDimensions.width && imageDimensions.height)) {
175 setTimeout(function() { $('img', element).load(); }, 100);
177 var position = normalizePosition(
178 image.position().left,
179 image.position().top,
180 imageDimensions.galleryWidth,
181 imageDimensions.galleryHeight,
182 imageDimensions.width,
183 imageDimensions.height
185 image.css({left: position.x, top: position.y, width: $(this).width() * zoomFactor, height: $(this).height() * zoomFactor});
188 $(window).resize(function() {
189 imageDimensions.galleryWidth = image.parent().width();
190 imageDimensions.galleryHeight = image.parent().height();
193 function bounds(galleryWidth, galleryHeight, imageWidth, imageHeight) {
197 minX: galleryWidth - imageWidth,
198 minY: galleryHeight - imageHeight
202 function normalizePosition(x, y, galleryWidth, galleryHeight, imageWidth, imageHeight) {
203 var b = bounds(galleryWidth, galleryHeight, imageWidth, imageHeight);
205 x: Math.min(b.maxX, Math.max(b.minX, x)),
206 y: Math.min(b.maxY, Math.max(b.minY, y))
210 function onMouseMove(event) {
211 var position = normalizePosition(
212 event.clientX - origin.x + imageOrigin.left,
213 event.clientY - origin.y + imageOrigin.top,
214 imageDimensions.galleryWidth,
215 imageDimensions.galleryHeight,
216 imageDimensions.width,
217 imageDimensions.height
219 image.css({position: 'absolute', top: position.y, left: position.x});
223 function setZoom(factor) {
228 imageDimensions.width = imageDimensions.originWidth * zoomFactor;
229 imageDimensions.height = imageDimensions.originHeight * zoomFactor;
230 var position = normalizePosition(
231 image.position().left,
232 image.position().top,
233 imageDimensions.galleryWidth,
234 imageDimensions.galleryHeight,
235 imageDimensions.width,
236 imageDimensions.height
238 image.css({width: imageDimensions.width, height: imageDimensions.height,
239 left: position.x, top: position.y});
243 function onMouseUp(event) {
245 .unbind('mousemove.gallery')
246 .unbind('mouseup.gallery');
250 image.bind('mousedown', function(event) {
255 imageOrigin = image.position();
257 .bind('mousemove.gallery', onMouseMove)
258 .bind('mouseup.gallery', onMouseUp);
262 function updateGallery(url) {
268 success: function(data) {
269 element.data('images', data);
272 $('img', element).show();
275 error: function(data) {
276 element.data('images', []);
279 $('img', element).hide();
290 function transform(editor) {
291 $.blockUI({message: 'Ładowanie...'});
292 setTimeout(function() {
294 xml: editor.getCode(),
295 success: function(element) {
296 $('#html-view').html(element);
298 }, error: function(text) {
299 $('#html-view').html('<p class="error">Wystąpił błąd:</p><pre>' + text + '</pre>');
307 function reverseTransform(editor, cont) {
308 var serializer = new XMLSerializer();
309 if ($('#html-view .error').length > 0) {
312 $.blockUI({message: 'Ładowanie...'});
313 setTimeout(function() {
315 xml: serializer.serializeToString($('#html-view div').get(0)),
316 success: function(text) {
317 editor.setCode(text);
322 }, error: function(text) {
323 $('#source-editor').html('<p>Wystąpił błąd:</p><pre>' + text + '</pre>');
334 function html(element) {
335 var element = $(element);
337 function selectTheme(themeId)
339 var selection = window.getSelection();
340 selection.removeAllRanges();
342 var range = document.createRange();
343 var s = $(".motyw[theme-class='"+themeId+"']")[0];
344 var e = $(".end[theme-class='"+themeId+"']")[0];
347 range.setStartAfter(s);
348 range.setEndBefore(e);
349 selection.addRange(range);
353 function verifyTagInsertPoint(node) {
354 if(node.nodeType == 3) { // Text Node
355 node = node.parentNode;
358 if (node.nodeType != 1) {
363 var xtype = node.attr('x-node');
365 if (!xtype || (xtype.search(':') >= 0) ||
366 xtype == 'motyw' || xtype == 'begin' || xtype == 'end') {
370 // don't allow themes inside annotations
371 if( node.is('*[x-annotation-box] *') )
377 function addAnnotation()
379 var selection = window.getSelection();
380 var n = selection.rangeCount;
383 window.alert("Nie zaznaczono żadnego obszaru");
387 // for now allow only 1 range
389 window.alert("Zaznacz jeden obszar");
393 // remember the selected range
394 var range = selection.getRangeAt(0);
396 if (!verifyTagInsertPoint(range.endContainer)) {
397 window.alert("Nie można wstawić w to miejsce przypisu.");
401 var text = range.toString();
402 var tag = $('<span></span>');
403 range.collapse(false);
404 range.insertNode(tag[0]);
407 xml: '<pr><slowo_obce>'+text+'</slowo_obce> --- </pr>',
408 success: function(text) {
415 alert('Błąd przy dodawaniu przypisu:' + errors);
422 var selection = window.getSelection();
423 var n = selection.rangeCount;
426 window.alert("Nie zaznaczono żadnego obszaru");
430 // for now allow only 1 range
432 window.alert("Zaznacz jeden obszar");
436 // remember the selected range
437 var range = selection.getRangeAt(0);
439 // verify if the start/end points make even sense -
440 // they must be inside a x-node (otherwise they will be discarded)
441 // and the x-node must be a main text
442 if (!verifyTagInsertPoint(range.startContainer)) {
443 window.alert("Motyw nie może się zaczynać w tym miejscu.");
447 if (!verifyTagInsertPoint(range.endContainer)) {
448 window.alert("Motyw nie może się kończyć w tym miejscu.");
452 var date = (new Date()).getTime();
453 var random = Math.floor(4000000000*Math.random());
454 var id = (''+date) + '-' + (''+random);
456 var spoint = document.createRange();
457 var epoint = document.createRange();
459 spoint.setStart(range.startContainer, range.startOffset);
460 epoint.setStart(range.endContainer, range.endOffset);
462 var mtag, btag, etag, errors;
467 xml: '<end id="e'+id+'" />',
468 success: function(text) {
469 etag = $('<span></span>');
470 epoint.insertNode(etag[0]);
471 etag.replaceWith(text);
473 xml: '<motyw id="m'+id+'"></motyw>',
474 success: function(text) {
475 mtag = $('<span></span>');
476 spoint.insertNode(mtag[0]);
477 mtag.replaceWith(text);
479 xml: '<begin id="b'+id+'" />',
480 success: function(text) {
481 btag = $('<span></span>');
482 spoint.insertNode(btag[0])
483 btag.replaceWith(text);
484 selection.removeAllRanges();
485 openForEdit($('.motyw[theme-class=' + id + ']'));
494 function openForEdit($origin)
498 // annotations overlay their sub box - not their own box //
499 if($origin.is(".annotation-inline-box")) {
500 $box = $("*[x-annotation-box]", $origin);
505 var x = $box[0].offsetLeft;
506 var y = $box[0].offsetTop;
507 var w = $box.outerWidth();
508 var h = $box.innerHeight();
510 if ($origin.is(".annotation-inline-box")) {
511 w = Math.max(w, 400);
515 // start edition on this node
516 var $overlay = $('<div class="html-editarea"><button class="accept-button">Zapisz</button><button class="delete-button">Usuń</button><textarea></textarea></div>').css({
517 position: 'absolute',
522 }).appendTo($box[0].offsetParent || $box.parent()).show();
524 if ($origin.is('.motyw')) {
525 $('textarea', $overlay).autocomplete(THEMES, {
532 $('.delete-button', $overlay).click(function() {
533 if ($origin.is('.motyw')) {
534 $('[theme-class=' + $origin.attr('theme-class') + ']').remove();
539 $(document).unbind('click.blur-overlay');
544 var serializer = new XMLSerializer();
547 xml: serializer.serializeToString($box[0]),
549 success: function(text) {
550 $('textarea', $overlay).val($.trim(text));
552 setTimeout(function() {
553 $('textarea', $overlay).elastic().focus();
556 function save(argument) {
557 var nodeName = $box.attr('x-node') || 'pe';
559 xml: '<' + nodeName + '>' + $('textarea', $overlay).val() + '</' + nodeName + '>',
560 success: function(element) {
561 $box.html($(element).html());
564 error: function(text) {
566 alert('Błąd! ' + text);
571 $('.accept-button', $overlay).click(function() {
575 $(document).bind('click.blur-overlay', function(event) {
576 if ($(event.target).parents('.html-editarea').length > 0) {
581 $(document).unbind('click.blur-overlay');
584 }, error: function(text) {
585 alert('Błąd! ' + text);
590 $('.edit-button').live('click', function(event) {
591 event.preventDefault();
592 openForEdit($(this).parent());
597 var button = $('<button class="edit-button">Edytuj</button>');
598 $(element).bind('mousemove', function(event) {
599 var editable = $(event.target).closest('*[x-editable]');
600 $('.active[x-editable]', element).not(editable).removeClass('active').children('.edit-button').remove();
601 if (!editable.hasClass('active')) {
602 editable.addClass('active').append(button);
606 $('.motyw').live('click', function() {
607 selectTheme($(this).attr('theme-class'));
610 $('#insert-annotation-button').click(function() {
615 $('#insert-theme-button').click(function() {
623 gallery('#sidebar', $('#document-meta .gallery').html());
626 CodeMirror.fromTextArea('id_text', {
627 parserfile: 'parsexml.js',
628 path: STATIC_URL + "js/lib/codemirror/",
629 stylesheet: STATIC_URL + "css/xmlcolors.css",
631 useHTMLKludges: false
633 iframeClass: 'xml-iframe',
637 initCallback: function(editor) {
638 $('#save-button').click(function(event) {
639 event.preventDefault();
640 $.blockUI({message: $('#save-dialog')});
643 $('#save-ok').click(function() {
644 $.blockUI({message: 'Zapisywanie...'});
646 function doSave (argument) {
647 var metaComment = '<!--';
648 $('#document-meta div').each(function() {
649 metaComment += '\n\t' + $(this).attr('class') + ': ' + $(this).html();
651 metaComment += '\n-->'
654 name: $('#document-name').html(),
655 text: metaComment + editor.getCode(),
656 revision: $('#document-revision').html(),
657 author: 'annonymous',
658 comment: $('#komentarz').val()
662 url: document.location.href,
666 success: function(data) {
668 editor.setCode(data.text);
669 $('#document-revision').html(data.revision);
675 error: function(xhr, textStatus, errorThrown) {
676 alert('error: ' + textStatus + ' ' + errorThrown);
681 if ($('#simple-view-tab').hasClass('active')) {
682 reverseTransform(editor, doSave);
688 $('#save-cancel').click(function() {
692 $('#simple-view-tab').click(function() {
693 if ($(this).hasClass('active')) {
696 $(this).addClass('active');
697 $('#source-view-tab').removeClass('active');
698 $('#source-editor').hide();
699 $('#simple-editor').show();
703 $('#source-view-tab').click(function() {
704 if ($(this).hasClass('active')) {
707 $(this).addClass('active');
708 $('#simple-view-tab').removeClass('active');
709 $('#simple-editor').hide();
710 $('#source-editor').show();
711 reverseTransform(editor);
714 $('#source-editor .toolbar button').click(function(event) {
715 event.preventDefault();
716 var params = eval("(" + $(this).attr('ui:action-params') + ")");
717 scriptletCenter.scriptlets[$(this).attr('ui:action')](editor, params);
720 $('.toolbar select').change(function() {
721 var slug = $(this).val();
723 $('.toolbar-buttons-container').hide().filter('[data-group=' + slug + ']').show();
727 $('.toolbar-buttons-container').hide();
728 $('.toolbar select').change();
730 $('#simple-view-tab').click();
734 $(window).resize(function() {
735 $('iframe').height($(window).height() - $('#tabs').outerHeight() - $('#source-editor .toolbar').outerHeight());
740 $('.vsplitbar').click(function() {
741 if ($('#sidebar').width() == 0) {
742 $('#sidebar').width(480).css({right: 0}).show();
743 $('#source-editor, #simple-editor').css({right: 495});
744 $('.vsplitbar').css({right: 480}).addClass('active');
746 $('#sidebar').width(0).hide();
747 $('#source-editor, #simple-editor').css({right: 15});
748 $('.vsplitbar').css({right: 0}).removeClass('active');