X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/0fd55a38c4873d5916a3553d7510b9308f4eee6d..03c5ba6e50339d7bc470eb6d7f051483eff1e96b:/platforma/static/js/wiki/main.js?ds=inline diff --git a/platforma/static/js/wiki/main.js b/platforma/static/js/wiki/main.js new file mode 100644 index 00000000..270bc7cc --- /dev/null +++ b/platforma/static/js/wiki/main.js @@ -0,0 +1,361 @@ + +if (!window.console) { + window.console = { + log: function(){ + } + } +} + +THEMES = ['Alkohol', 'Ambicja', 'AnioÅ', 'Antysemityzm', 'Arkadia', 'Artysta', 'BezdomnoÅÄ', 'BezpieczeÅstwo', 'Bieda', 'Bijatyka', 'BÅazen', 'BÅÄ dzenie', 'BÅoto', 'Bogactwo', 'Bóg', 'Brat', 'Bunt', 'Buntownik', 'Burza', 'Car', 'Carpe diem', 'CiemnoÅÄ', 'CieÅ', 'Cisza', 'ChciwoÅÄ', 'Chleb', 'ChÅop', 'Choroba', 'Chrystus', 'Chrzest', 'CiaÅo', 'Cierpienie', 'Cmentarz', 'Cnota', 'Córka', 'Cud', 'Czarownika', 'Czary', 'Czas', 'Czyn', 'CzyÅciec', 'Dama', 'Danse macabre', 'Deszcz', 'DiabeÅ', 'Dobro', 'Dom', 'DorosÅoÅÄ', 'Drzewo', 'Duch', 'Dusza', 'Duma', 'Dworek', 'Dworzanin', 'Dwór', 'DzieciÅstwo', 'Dziecko', 'Dziedzictwo', 'Dziewictwo', 'DźwiÄk', 'Egzorcyzm', 'Elita', 'Emigrant', 'FaÅsz', 'Filozof', 'Fircyk', 'Flirt', 'GÅupiec', 'GÅupota', 'GÅód', 'Gospodarz', 'Gospodyni', 'GoÅÄ', 'Gotycyzm', 'Góra', 'Gra', 'Grób', 'Grzech', 'GrzecznoÅÄ', 'Gwiazda', 'Handel', 'HaÅba', 'Historia', 'Honor', 'Idealista', 'ImiÄ', 'Interes', 'JabÅka', 'Jedzenie', 'JesieÅ', 'Kaleka', 'Kara', 'Karczma', 'KlÄska', 'KÅamstwo', 'KÅótnia', 'Kobieta', 'Kobieta demoniczna', 'Kobieta "upadÅa"', 'Kochanek', 'Kochanek romantyczny', 'Kolonializm', 'Kondycja ludzka', 'Konflikt', 'Konflikt wewnÄtrzny', 'Koniec Åwiata', 'KoÅ', 'KorzyÅÄ', 'Kot', 'Kradzież', 'Krew', 'Król', 'Krzywda', 'KsiÄ dz', 'KsiÄ Å¼ka', 'KsiÄżyc', 'Kuchnia', 'Kuszenie', 'Kwiaty', 'Labirynt', 'Las', 'Lato', 'Lekarz', 'Lenistwo', 'List', 'Liberat', 'Los', 'Lud', 'Lustro', 'Åzy', 'MaÅżeÅstwo', 'Marzenie', 'Maska', 'Maszyna', 'Matka', 'Matka Boska', 'MÄ droÅÄ', 'MÄ Å¼', 'Melancholia', 'MÄdrzec', 'MÄżczyzna', 'Miasto', 'Mieszczanin', 'MiÅosierdzie', 'MiÅoÅÄ', 'MiÅoÅÄ niespeÅniona', 'MiÅoÅÄ platoniczna', 'MiÅoÅÄ romantyczna', 'MiÅoÅÄ silniejsza niż ÅmierÄ', 'MiÅoÅÄ speÅniona', 'MiÅoÅÄ tragiczna', 'Mizoginia', 'MÅodoÅÄ', 'Moda', 'Modlitwa', 'Morderstwo', 'Morze', 'Motyl', 'Mucha', 'Muzyka', 'Narodziny', 'Naród', 'Natura', 'Nauczyciel', 'Nauczycielka', 'Nauka', 'NiebezpieczeÅstwo', 'Niedziela', 'Niemiec', 'NienawiÅÄ', 'NieÅmiertelnoÅÄ', 'Niewola', 'Noc', 'Nuda', 'Obcy', 'ObÅok', 'ObowiÄ zek', 'Obraz Åwiata', 'ObrzÄdy', 'Obyczaje', 'Obywatel', 'Odrodzenie przez grób', 'Odwaga', 'Ofiara', 'OgieÅ', 'Ogród', 'Ojciec', 'Ojczyzna', 'Oko', 'OkrÄt', 'OkrucieÅstwo', 'Omen', 'Opieka', 'Organizm', 'OtchÅaÅ', 'PajÄ k', 'PamiÄÄ', 'Pan', 'Panna mÅoda', 'PaÅstwo', 'Patriota', 'PiekÅo', 'Pielgrzym', 'PieniÄ dz', 'Pies', 'PiÄtno', 'PijaÅstwo', 'Piwnica', 'Plotka', 'PobożnoÅÄ', 'PocaÅunek', 'Pochlebstwo', 'Poeta', 'Poetka', 'Poezja', 'Podróż', 'PodstÄp', 'Pogrzeb', 'Pojedynek', 'Pokora', 'Pokusa', 'Polak', 'Polityka', 'Polowanie', 'Polska', 'Portret', 'Porwanie', 'PoÅwiÄcenie', 'Potwór', 'Powstanie', 'Powstaniec', 'Pozory', 'Pozycja spoÅeczna', 'Pożar', 'PoÅ¼Ä danie', 'Praca', 'Praca u podstaw', 'Praca organiczna', 'Prawda', 'Prawnik', 'Prometeusz', 'Proroctwo', 'Prorok', 'PróżnoÅÄ', 'Przebranie', 'Przeczucie', 'Przedmurze chrzeÅcijaÅstwa', 'PrzekleÅstwo', 'Przekupstwo', 'Przemiana', 'Przemijanie', 'Przemoc', 'PrzestrzeÅ', 'PrzyjaźÅ', 'Przyroda nieożywiona', 'PrzysiÄga', 'Przywódca', 'Ptak', 'Pustynia', 'Pycha', 'Raj', 'Realista', 'Religia', 'Rewolucja', 'Robak', 'Robotnik', 'Rodzina', 'Rosja', 'Rosjanin', 'RoÅliny', 'Rozczarowanie', 'Rozpacz', 'Rozstanie', 'Rozum', 'Ruiny', 'Rycerz', 'Rzeka', 'Salon', 'Samobójstwo', 'Samolubstwo', 'Samotnik', 'SamotnoÅÄ', 'Sarmata', 'SÄ siad', 'SÄ d', 'SÄ d Ostateczny', 'Sen', 'Serce', 'SÄdzia', 'Sielanka', 'Sierota', 'SiÅa', 'Siostra', 'SÅawa', 'SÅoÅce', 'SÅowo', 'SÅuga', 'SÅużalczoÅÄ', 'SkÄ piec', 'Sobowtór', 'SpoÅecznik', 'Spowiedź', 'SprawiedliwoÅÄ', 'StaroÅÄ', 'Strach', 'Strój', 'Stworzenie', 'Sumienie', 'Swaty', 'Syberia', 'Syn', 'Syn marnotrawny', 'Syzyf', 'Szaleniec', 'SzaleÅstwo', 'Szantaż', 'Szatan', 'SzczÄÅcie', 'SzkoÅa', 'Szlachcic', 'Szpieg', 'Sztuka', 'Ålub', 'Åmiech', 'ÅmierÄ', 'ÅmierÄ bohaterska', 'Åpiew', 'ÅwiatÅo', 'ÅwiÄtoszek', 'ÅwiÄty', 'Åwit', 'Tajemnica', 'Taniec', 'Tchórzostwo', 'Teatr', 'Testament', 'TÄsknota', 'Theatrum mundi', 'TÅum', 'Trucizna', 'Trup', 'TwórczoÅÄ', 'UczeÅ', 'Uczta', 'Uroda', 'Umiarkowanie', 'Upadek', 'Upiór', 'UrzÄdnik', 'Vanitas', 'Walka', 'Walka klas', 'Wampir', 'Warszawa', 'WÄ Å¼', 'Wdowa', 'Wdowiec', 'Wesele', 'Wiatr', 'WiernoÅÄ', 'Wierzenia', 'WieÅ', 'Wiedza', 'Wieża Babel', 'WiÄzienie', 'WiÄzieÅ', 'Wina', 'Wino', 'Wiosna', 'Wizja', 'WÅadza', 'WÅasnoÅÄ', 'Woda', 'Wojna', 'Wojna pokoleÅ', 'WolnoÅÄ', 'Wróg', 'Wspomnienia', 'WspóÅpraca', 'Wygnanie', 'Wyrzuty sumienia', 'Wyspa', 'Wzrok', 'Zabawa', 'Zabobony', 'Zamek', 'ZarÄczyny', 'ZaÅwiaty', 'ZazdroÅÄ', 'Zbawienie', 'Zbrodnia', 'Zbrodniarz', 'Zdrada', 'Zdrowie', 'Zemsta', 'ZesÅaniec', 'Ziarno', 'Ziemia', 'Zima', 'ZÅo', 'ZÅodziej', 'ZÅoty wiek', 'Zmartwychwstanie', 'ZwÄ tpienie', 'ZwierzÄta', 'ZwyciÄstwo', 'Å»aÅoba', 'Å»ebrak', 'Å»oÅnierz', 'Å»ona', 'Å»ycie jako wÄdrówka', 'Å»ycie snem', 'Å»yd', 'Å»ywioÅy', 'OÅwiadczyny'] + +function gallery(element, url){ + var element = $(element); + var imageDimensions = {}; + element.data('images', []); + + function changePage(pageNumber){ + $('.gallery-image img', element).attr('src', element.data('images')[pageNumber - 1]); + } + + function normalizeNumber(pageNumber){ + // Numer strony musi byÄ pomiÄdzy 1 a najwyższym numerem + var pageCount = element.data('images').length; + pageNumber = parseInt(pageNumber, 10); + + if (!pageNumber || pageNumber == NaN || pageNumber == Infinity || pageNumber == -Infinity) { + return 1; + } + else + if (pageNumber < 1) { + return 1; + } + else + if (pageNumber > pageCount) { + return pageCount; + } + else { + return pageNumber; + } + } + + var pn = $('.page-number', element); + pn.change(function(event){ + event.preventDefault(); + var n = normalizeNumber(pn.val()); + pn.val(n); + changePage(n); + }); + $('.previous-page', element).click(function(){ + pn.val(normalizeNumber(pn.val()) - 1); + pn.change(); + }); + $('.next-page', element).click(function(){ + pn.val(normalizeNumber(pn.val()) + 1); + pn.change(); + }); + + + var image = $('.gallery-image img', element).attr('unselectable', 'on'); + var origin = {}; + var imageOrigin = {}; + var zoomFactor = 1; + + $('.zoom-in', element).click(function(){ + zoomFactor = Math.min(2, zoomFactor + 0.2); + zoom(); + }); + $('.zoom-out', element).click(function(){ + zoomFactor = Math.max(0.2, zoomFactor - 0.2); + zoom(); + }); + $('.change-gallery', element).click(function(){ + $('.chosen-gallery').val($('#document-meta .gallery').html() || '/platforma/gallery/'); + $('.gallery-image').animate({ + top: 60 + }, 200); + $('.chosen-gallery').focus(); + }); + $('.change-gallery-ok', element).click(function(){ + if ($('#document-meta .gallery').length == 0) { + $('
').appendTo('#document-meta'); + } + $('#document-meta .gallery').html($('.chosen-gallery').val()); + updateGallery($('.chosen-gallery').val()); + $('.gallery-image').animate({ + top: 30 + }, 200); + }); + $('.change-gallery-cancel', element).click(function(){ + $('.gallery-image').animate({ + top: 30 + }, 200); + }); + + $('.gallery-image img', element).load(function(){ + image.css({ + width: null, + height: null + }); + imageDimensions = { + width: $(this).width() * zoomFactor, + height: $(this).height() * zoomFactor, + originWidth: $(this).width(), + originHeight: $(this).height(), + galleryWidth: $(this).parent().width(), + galleryHeight: $(this).parent().height() + }; + + if (!(imageDimensions.width && imageDimensions.height)) { + setTimeout(function(){ + $('.gallery-image img', element).load(); + }, 100); + } + var position = normalizePosition(image.position().left, image.position().top, imageDimensions.galleryWidth, imageDimensions.galleryHeight, imageDimensions.width, imageDimensions.height); + image.css({ + left: position.x, + top: position.y, + width: $(this).width() * zoomFactor, + height: $(this).height() * zoomFactor + }); + }); + + $(window).resize(function(){ + imageDimensions.galleryWidth = image.parent().width(); + imageDimensions.galleryHeight = image.parent().height(); + }); + + function bounds(galleryWidth, galleryHeight, imageWidth, imageHeight){ + return { + maxX: 0, + maxY: 0, + minX: galleryWidth - imageWidth, + minY: galleryHeight - imageHeight + } + } + + function normalizePosition(x, y, galleryWidth, galleryHeight, imageWidth, imageHeight){ + var b = bounds(galleryWidth, galleryHeight, imageWidth, imageHeight); + return { + x: Math.min(b.maxX, Math.max(b.minX, x)), + y: Math.min(b.maxY, Math.max(b.minY, y)) + } + } + + function onMouseMove(event){ + var position = normalizePosition(event.clientX - origin.x + imageOrigin.left, event.clientY - origin.y + imageOrigin.top, imageDimensions.galleryWidth, imageDimensions.galleryHeight, imageDimensions.width, imageDimensions.height); + image.css({ + position: 'absolute', + top: position.y, + left: position.x + }); + return false; + } + + function setZoom(factor){ + zoomFactor = factor; + } + + function zoom(){ + imageDimensions.width = imageDimensions.originWidth * zoomFactor; + imageDimensions.height = imageDimensions.originHeight * zoomFactor; + var position = normalizePosition(image.position().left, image.position().top, imageDimensions.galleryWidth, imageDimensions.galleryHeight, imageDimensions.width, imageDimensions.height); + image.css({ + width: imageDimensions.width, + height: imageDimensions.height, + left: position.x, + top: position.y + }); + + } + + function onMouseUp(event){ + $(document).unbind('mousemove.gallery').unbind('mouseup.gallery'); + return false; + } + + image.bind('mousedown', function(event){ + origin = { + x: event.clientX, + y: event.clientY + }; + imageOrigin = image.position(); + $(document).bind('mousemove.gallery', onMouseMove).bind('mouseup.gallery', onMouseUp); + return false; + }); + + function updateGallery(url){ + $.ajax({ + url: url, + type: 'GET', + dataType: 'json', + + success: function(data){ + element.data('images', data); + pn.val(1); + pn.change(); + $('.gallery-image img', element).show(); + }, + + error: function(data){ + element.data('images', []); + pn.val(1); + pn.change(); + $('.gallery-image img', element).hide(); + } + }); + } + + if (url) { + updateGallery(url); + } +} + +$(function() { + // gallery('#sidebar', $('#document-meta .gallery').html()); + + var tabs = $('ol#tabs li'); + var perspectives = {}; + var wikidoc = new $.wikiapi.WikiDocument("document-meta"); + + function activePerspective() { + return perspectives[$("#tabs " + document.location.hash + "-tab").attr('data-ui-jsclass')]; + }; + + function initialize() + { + /* The save button */ + $('#save-button').click(function(event){ + event.preventDefault(); + $.blockUI({ + message: $('#save-dialog') + }); + }); + + $('#save-ok').click(function(){ + $.blockUI({ + message: 'Zapisywanie...' + }); + + var ap = activePerspective(); + + /* exit perspective */ + ap.onExit(); + + function finalize() { + ap.onEnter(); + $.unblockUI(); + }; + + wikidoc.save( $("#komentarz").text(), + function(doc, changed) { + console.log("Saved."); + finalize(); + }, + function(doc, message) { + alert(message); + finalize(); + } + ); + }); + + $('#save-cancel').click(function(){ + $.unblockUI(); + }); + + $('.editor').hide(); + + /* + * TABS + */ + tabs.click(function(event, callback) { + /* hide old */ + var $old = tabs.filter('.active'); + + $old.each(function(){ + $(this).removeClass('active'); + $('#' + $(this).attr('data-ui-related')).hide(); + perspectives[$(this).attr('data-ui-jsclass')].onExit(); + }); + + /* show new */ + $(this).addClass('active'); + $('#' + $(this).attr('data-ui-related')).show(); + perspectives[$(this).attr('data-ui-jsclass')].onEnter(); + }); + + + $(window).resize(function(){ + $('iframe').height($(window).height() - $('#tabs').outerHeight() - $('#source-editor .toolbar').outerHeight()); + }); + + $(window).resize(); + + $('.vsplitbar').click(function(){ + if ($('#sidebar').width() == 0) { + $('#sidebar').width(480).css({ + right: 0 + }).show(); + $('#editor .editor').css({ + right: 495 + }); + $('.vsplitbar').css({ + right: 480 + }).addClass('active'); + } + else { + $('#sidebar').width(0).hide(); + $('#editor .editor').css({ + right: 15 + }); + $('.vsplitbar').css({ + right: 0 + }).removeClass('active'); + } + $(window).resize(); + }); + + $(window).bind('beforeunload', function(event){ + return "Na stronie mogÄ byÄ zmiany."; + }); + + console.log("prepare for fetch"); + + wikidoc.fetch({ + success: function(){ + console.log("Fetch success"); + $('#loading-overlay').fadeOut(); + var active_tab = document.location.hash || "#VisualPerspective"; + var $active = $("#tabs " + active_tab + "-tab"); + + $active.trigger("click"); + }, + failure: function() { + $('#loading-overlay').fadeOut(); + alert("FAILURE"); + } + }); + + }; /* end of initialize() */ + + var initAll = function(a, f) { + if (a.length == 0) return f(); + + var klass = a.pop(); + console.log("INIT", klass); + var p = new $.wiki[klass](wikidoc, function() { + perspectives[this.perspective_id] = this; + initAll(a, f); + }); + + }; + + /* + * Initialize all perspectives + */ + initAll($.makeArray( $('ol#tabs li').map(function(){ + return $(this).attr('data-ui-jsclass'); + })), initialize); + + console.log(location.hash); + +});