Javascript refactoring. History view now displays tags
[redakcja.git] / platforma / static / js / wiki / main.js
1
2 if (!window.console) {
3     window.console = {
4         log: function(){
5         }
6     }
7 }
8
9 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'];
10
11 $(function() 
12 {       
13         var tabs = $('ol#tabs li');             
14         var perspectives = {};
15         var gallery = null;
16         var wikidoc = new $.wikiapi.WikiDocument("document-meta");
17                 
18         $.blockUI.defaults.baseZ = 10000;
19         
20         function activePerspective() {
21                 return perspectives[$("#tabs " + document.location.hash + "-tab").attr('data-ui-jsclass')];             
22         };
23                 
24     function initialize() 
25         {               
26                 gallery = new $.wiki.ScanGalleryPerspective(wikidoc);
27                 
28                 /* The save button */
29         $('#save-button').click(function(event){
30             event.preventDefault();
31             $.blockUI({
32                 message: $('#save_dialog'),
33                                 css: {
34                                         'top': '25%',
35                                         'left': '25%',
36                                         'width': '50%'
37                                 }                               
38             });
39         });
40         
41         $('#save_dialog .ok-button').click(function(){
42             $.blockUI({
43                 message: 'Zapisywanie...'
44             });
45                         
46                         var ap = activePerspective();
47                         
48                         /* exit perspective */
49                         ap.onExit();          
50                         
51                         function finalize() {
52                                 ap.onEnter();
53                                 $.unblockUI();
54                         };
55                         
56                         wikidoc.save({
57                                 comment: $("#komentarz").text(),
58                                 success: function(doc, changed, info){
59                                         console.log(info);
60                                         $.blockUI({
61                                                 message: info
62                                         });
63                                         setTimeout(finalize, 2000);
64                                 },
65                                 failure: function(doc, info) {
66                                         console.log(info);
67                                         $.blockUI({
68                                                 message: info
69                                         });
70                                         setTimeout(finalize, 3000);
71                                 }
72                         });
73         });
74         
75         $('#save_dialog .cancel-button').click(function(){
76             $.unblockUI();
77         }); 
78                                 
79                 $('.editor').hide();   
80                 
81                 /*
82                  * TABS 
83                  */             
84         tabs.click(function(event, callback) {
85                         /* hide old */
86             var $old = tabs.filter('.active');
87                                                 
88                         $old.each(function(){
89                                 $(this).removeClass('active');
90                                 $('#' + $(this).attr('data-ui-related')).hide();
91                                 perspectives[$(this).attr('data-ui-jsclass')].onExit();
92                         });                     
93                         
94                         /* show new */                                          
95             $(this).addClass('active');
96             $('#' + $(this).attr('data-ui-related')).show();                    
97             perspectives[$(this).attr('data-ui-jsclass')].onEnter();
98         });
99                         
100         
101         $(window).resize(function(){
102             $('iframe').height($(window).height() - $('#tabs').outerHeight() - $('#source-editor .toolbar').outerHeight());
103         });
104         
105         $(window).resize();
106         
107         $('.vsplitbar').toggle(
108                         function() {
109                                 $('#side-gallery').show();
110                                 $('.vsplitbar').css('right', 480).addClass('.active');
111                                 $('#editor .editor').css('right', 510);
112                                 $(window).resize();
113                                 gallery.onEnter();
114                         }, 
115                         function() {
116                                 $('#side-gallery').hide();
117                                 $('.vsplitbar').css('right', 0).removeClass('active');
118                                 $('#editor .editor').css('right', 30);
119                                 $(window).resize();
120                                 gallery.onExit();
121                         }
122                 );              
123         
124         $(window).bind('beforeunload', function(event){
125             if(wikidoc.has_local_changes) return "Na stronie mogą być zmiany.";
126         });
127                 
128                 console.log("Fetching document's text");
129                 
130                 wikidoc.fetch({
131                         success: function(){
132                                 console.log("Fetch success");
133                                 $('#loading-overlay').fadeOut();                                
134                                 var active_tab = document.location.hash || "#SummaryPerspective";
135                                 var $active = $("#tabs " + active_tab + "-tab");
136                                 
137                                 $active.trigger("click");
138                         },
139                         failure: function() {
140                                 $('#loading-overlay').fadeOut();
141                                 alert("FAILURE");
142                         }
143                 });
144                                                 
145     }; /* end of initialize() */
146         
147         var initAll = function(a, f) {                          
148                 if (a.length == 0) return f();  
149                         
150                 var klass = a.pop();
151                 console.log("INIT", klass);             
152                 var p = new $.wiki[klass](wikidoc, function() {
153                         perspectives[this.perspective_id] = this;                        
154                         initAll(a, f); 
155                 });                                             
156                 
157         };
158         
159         /*
160          * Initialize all perspectives 
161          */
162         initAll($.makeArray( $('ol#tabs li').map(function(){
163                         return $(this).attr('data-ui-jsclass');                                         
164         })), initialize);
165         
166         console.log(location.hash);
167         
168 });