1 var View = new function() {
3 //self.minOffset = 1000;
18 self.init = function(success, error) {
19 console.log('View.init');
21 self._searchbox = document.getElementById("searchbox");
22 self._searchinput = document.getElementById("search");
23 self._content = document.getElementById("content");
26 self.currentView = '';
28 self.currentTitle = '';
30 document.getElementById("cover").style.display = 'none';
37 this.sanitize = function(text) {
38 return text.replace(/&/g, "&").replace(/</g, "<");
41 this.showSearch = function() {
42 self._searchbox.style.display = "block";
45 this.hideSearch = function() {
46 self._searchbox.style.display = "none";
49 this.spinner = function(text) {
52 self._content.innerHTML = "<div class='spinner'><img src='img/spinner.gif' /><div id='spinnertext'>" + text +"</div></div>";
56 this.content = function(text, offset) {
57 console.log('content');
59 self._content.innerHTML = '';
60 self._content.innerHTML = text;
64 this.enter = function(url, offset) {
65 console.log('View.enter: ' + url);
71 var slash_index = url.indexOf('/');
72 if (slash_index != -1) {
73 view = url.substr(0, slash_index);
74 arg = url.substr(slash_index + 1);
80 console.log('View.enter: ' + view + ' ' + arg);
82 self.currentView = view;
83 self.currentPar = arg;
84 self['enter' + view](arg, offset);
87 this.enterIndex = function(arg, offset) {
88 console.log('enterIndex');
89 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
91 self.currentTitle = "Początek";
94 html += "<div class='buttons'>";
95 html += Links.button('Last', '', 'Ostatnio czytane');
96 html += Links.button('Bookmarks', '', 'Zakładki');
98 for (category in self.categories)
99 html += Links.button('Category', category, self.categories[category], 0);
102 html += "</div>" +"";
103 /*"<p id='logo'><img src='img/logo-wl-nq8.png' alt='Wolne Lektury' /><br/>\n" +
104 "szkolna biblioteka internetowa" +
106 self.content(html, offset);
109 this.enterBook = function(id, offset) {
111 console.log('enterBook: ' + id);
112 Menu.setInfoButton("BookInfo", "Informacje o utworze", true);
115 Catalogue.withBook(id, function(book) {
116 self.currentTitle = book.authors + ', ' + book.title;
118 Catalogue.withChildren(id, function(children) {
119 var html = "<h1><span class='subheader'>";
120 html += book.authors;
121 html += "</span>" + book.title + "</h1>\n";
122 if (book.html_file) {
123 html += "<div class='buttons'>" + Links.button('BookText', id, "Czytaj tekst") + "</div>";
125 if (children.length) {
126 html += "<div class='buttons'>";
127 for (c in children) {
129 html += Links.bookLink(child);
133 self.content(html, offset);
140 this.enterBookText = function(id, offset) {
142 self.spinner("Otwieranie utworu");
143 console.log('enterBookText: ' + id);
144 Menu.setInfoButton("BookInfo", "Informacje o utworze", true);
147 setTimeout("History.addRead("+id+");", 0);
149 FileRepo.withHtml(id, function(data) {
150 self.content(data, offset);
152 alert("Błąd pobierania: nie udało się pobrać treści utworu.");
155 Catalogue.withBook(id, function(book) {
156 self.currentTitle = book.authors + ', ' + book.title;
161 this.enterLast = function(ignored, offset) {
162 console.log("enterLast");
164 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
165 self.currentTitle = 'Ostatnio czytane';
166 var html = "<h1><span class='subheader'>Ostatnio czytane</h1>\n";
168 var last_read = History.lastRead();
169 var some_books = false;
171 html += "<div class='buttons'>";
172 var add_books = function() {
173 if (last_read.length) {
174 var id = last_read.shift();
175 Catalogue.withBook(id, function(book) {
176 html += Links.bookLink(book);
185 html += "<p>Nie przeczytano żadnych utworów.</p>";
188 self.content(html, offset);
195 this.enterBookmarks = function(ignored, offset) {
196 console.log("enterBookmarks");
198 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
199 self.currentTitle = 'Zakładki';
200 var html = "<h1><span class='subheader'>Zakładki</h1>\n";
202 var bookmarks = History.bookmarks();
203 if (!bookmarks.length) {
204 html += "<p>Nie utworzono żadnych zakładek.</p>";
205 self.content(html, offset);
209 html += "<div class='buttons bookmarks'>";
210 for (i in bookmarks) {
211 var bm = bookmarks[i];
214 text += "<div class='sub'>" + bm.title + "</div>";
215 html += Links.deleteButton(bm.id);
216 html += Links.button(bm.view, bm.par, text, bm.offset);
219 self.content(html, offset);
222 this.onBookmarkChange = function() {
223 // TODO: preserve offset
224 if (self.currentView == 'Bookmarks') {
225 self.enterBookmarks();
229 this.enterTag = function(id, offset) {
231 console.log('enterTag: ' + id);
232 Menu.setInfoButton("TagInfo", "Informacje o...", true);
235 self.spinner("Otwieranie listy utworów");
237 Catalogue.withTag(id, function(tag) {
238 Menu.setInfoButton("TagInfo", "Informacje o " + self.category_msc[tag.category], true);
239 self.currentTitle = tag.category + ': ' + tag.name;
240 var html = "<h1><span class='subheader upper'>" + tag.category + ': </span>' + tag.name + "</h1>\n";
241 html += "<div class='buttons'>";
243 Catalogue.withBooks(tag.books, function(books) {
244 for (var i in books) {
246 html += Links.bookLink(book);
249 self.content(html, offset);
258 this.enterCategory = function(category, offset) {
259 console.log('enterCategory: ' + category);
260 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
261 self.spinner("Otwieranie katalogu");
263 self.currentTitle = self.categories[category];
265 Catalogue.withCategory(category, function(tags) {
266 var html = "<h1>" + self.categories[category] + "</h1>\n";
267 html += "<div class='buttons'>";
270 html += Links.button('Tag', tag.id, tag.name);
273 self.content(html, offset);
278 this.enterSearch = function(query, offset) {
279 console.log('enterSearch: ' + query);
280 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
281 self.currentTitle = 'Szukaj: ' + query;
284 var html = "<h1><span class='subheader'>Szukana fraza:</span>" + View.sanitize(query) + "</h1>\n";
286 if (query.length < 2) {
287 html += "<p>Szukana fraza musi mieć co najmniej dwa znaki</p>";
288 self.content(html, offset);
292 Catalogue.withSearch(query, function(results) {
293 if (results.length == 1) {
294 var result = results[0];
295 if (result.view == 'Book' && result.item.html_file) {
296 self.enter(Links.href('BookText', result.item.id));
299 self.enter(Links.href(result.view, result.item.id));
303 if (results.length == 0) {
304 html += "<p>Brak wyników wyszukiwania</p>";
307 html += "<div class='buttons'>";
308 for (var i in results) {
309 var result = results[i];
310 if (result.view == 'Book')
311 html += Links.bookLink(result.item)
313 html += Links.button(result.view, result.item.id, result.item.name+"<div class='sub'>"+result.item.category+"</div>");
317 self.content(html, offset);
324 this.enterProjectInfo = function(arg, offset) {
325 console.log('enterProjectInfo');
326 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", false);
328 self.currentTitle = "Informacje o projekcie";
332 html += '<div class="info">';
335 html += "<p style='text-align:center'><img src='img/logo-wl.png' /></p>";
336 html += "<p>Biblioteka internetowa Wolne Lektury "+
337 " udostępnia w swoich zbiorach lektury szkolne zalecane do użytku przez" +
338 " Ministerstwo Edukacji Narodowej i inne dzieła literatury.</p>";
340 html += "<p style='text-align:center'><img src='img/logo-fnp.png' /></p>";
342 html += "<img style='float:left;' src='img/procent.png' />" +
343 "<p style='margin-left: 50px'>" +
344 "Przekaż 1% podatku na rozwój Wolnych Lektur.<br/>" +
345 "Fundacja Nowoczesna Polska<br/>" +
346 "KRS 0000070056</p>";
348 html += "<p>Większość pozycji w bibliotece należy do domeny publicznej "+
349 "co oznacza, że nie są już chronione majatkowym prawem autorskim, "+
350 "a więc można je swobodnie wykorzystywać, publikować i rozpowszechniać. "+
351 "Publikujemy również kilka utworów, które autorzy udostępnili na wolnej licencji "+
352 "<a href='http://creativecommons.org/licenses/by-sa/3.0/deed.pl'>"+
353 "Creative Commons Uznanie Autorstwa - Na Tych Samych Warunkach 3.0.PL</a>.</p>";
355 html += "<p style='text-align:center'><img src='img/cc-by-sa.png' /></p>";
357 html += "<p>Więcej informacji o projekcie znajduje sie na stronie <a href='http://www.wolnelektury.pl'>http://www.wolnelektury.pl</a>.</p>";
362 self.content(html, offset);
366 this.enterBookInfo = function(id, offset) {
368 console.log('enterBookInfo: ' + id);
369 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
372 Catalogue.withBook(id, function(book) {
373 self.currentTitle = "Informacje o: " + book.title;
375 var html = '<h2>' + book.authors + ', ' + book.title + '</h2>';
377 var url = WL + '/api/book/' + id + '/info.html';
379 var xhr = new XMLHttpRequest();
380 xhr.open("GET", url);
381 xhr.onload = function() {
382 console.log('BookInfo: fetched by ajax: ' + url);
384 html += '<div class="info">';
385 html += xhr.responseText;
388 self.content(html, offset);
390 xhr.onerror = function(e) {
391 self.content("Brak informacji.", offset);
400 this.enterTagInfo = function(id, offset) {
402 console.log('enterTagInfo: ' + id);
403 Menu.setInfoButton("ProjectInfo", "Informacje o projekcie", true);
406 Catalogue.withTag(id, function(tag) {
407 self.currentTitle = "Informacje o " + tag.name;
408 var html = '<h2>' + tag.name + '</h2>';
410 var url = WL + '/api/tag/' + id + '/info.html';
412 var xhr = new XMLHttpRequest();
413 xhr.open("GET", url);
414 xhr.onload = function() {
415 console.log('TagInfo: fetched by ajax: ' + url);
417 html += '<div class="info">';
418 html += xhr.responseText;
421 self.content(html, offset);
423 xhr.onerror = function(e) {
424 self.content("Brak informacji.", offset);
433 /* search form submit callback */
434 this.search = function() {
435 History.visit('Search/' + self._searchinput.value);