diff options
Diffstat (limited to 'library/epub-meta/assets/js/script.js')
-rw-r--r-- | library/epub-meta/assets/js/script.js | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/library/epub-meta/assets/js/script.js b/library/epub-meta/assets/js/script.js new file mode 100644 index 000000000..cf8b3f2a1 --- /dev/null +++ b/library/epub-meta/assets/js/script.js @@ -0,0 +1,194 @@ + +var bookapi = { + $dialog: null, + + resulttpl: + '<div class="result">' + + ' <img src="" />'+ + ' <div>' + + ' <div class="buttons">' + + ' <button class="btn-repl">replace</button><br />' + + ' <button class="btn-fill">fill in</button>' + + ' </div>' + + ' <h1 class="title"></h1>' + + ' <p class="authors"></p>' + + ' <p class="description"></p>' + + ' <p class="more">' + + ' <span class="lang"></span>' + + ' <span class="publisher"></span>' + + ' <span class="subjects"></span>' + + ' </p>' + + ' </div>' + + '</div>', + + init: function(){ + $('body').append('<div id="bookapi"></div>'); + bookapi.$dialog = $('#bookapi'); + bookapi.$dialog.dialog( + { + autoOpen: false, + title: 'Lookup Book Data', + width: 800, + height: 500 + } + ); + bookapi.$dialog.append('<div class="head">Lookup: <input type="text" id="bookapi-q" /></div>') + .append('<div id="bookapi-out"></div>'); + bookapi.$out = $('#bookapi-out'); + + $('#bookpanel').append('<a href="#" id="bookapi-s">Lookup Book Data</a>'); + $('#bookapi-s').attr('title','Search this book at Google Books'); + $('#bookapi-s').click(bookapi.open); + + $('#bookapi-q').keypress( + function(event){ + if(event.which == 13){ + event.preventDefault(); + bookapi.search(); + } + }); + + }, + + open: function(){ + bookapi.$dialog.dialog('open'); + + var query = $('#bookpanel input[name=title]').val(); + $('#bookapi-q').val(query); + + bookapi.search(); + }, + + search: function(){ + bookapi.$out.html('please wait...'); + $.ajax({ + type: 'GET', + data: {'api':$('#bookapi-q').val()}, + success: bookapi.searchdone, + dataType: 'json' + }); + }, + + searchdone: function(data){ + if(data.totalItems == 0){ + bookapi.$out.html('Found no results.<br />Try adjusting the query and retry.'); + return; + } + + bookapi.$out.html(''); + for(i=0; i<data.items.length; i++){ + $res = $(bookapi.resulttpl); + if(data.items[i].volumeInfo.title) + $res.find('.title').html(data.items[i].volumeInfo.title); + if(data.items[i].volumeInfo.authors) + $res.find('.authors').html(data.items[i].volumeInfo.authors.join(', ')); + if(data.items[i].volumeInfo.description) + $res.find('.description').html(data.items[i].volumeInfo.description); + if(data.items[i].volumeInfo.language) + $res.find('.lang').html('['+data.items[i].volumeInfo.language+']'); + if(data.items[i].volumeInfo.publisher) + $res.find('.publisher').html(data.items[i].volumeInfo.publisher); + if(data.items[i].volumeInfo.categories) + $res.find('.subjects').html(data.items[i].volumeInfo.categories.join(', ')); + if(data.items[i].volumeInfo.imageLinks) + if(data.items[i].volumeInfo.imageLinks.thumbnail) + $res.find('img').attr('src',data.items[i].volumeInfo.imageLinks.thumbnail); + + $res.find('.btn-repl').click(data.items[i].volumeInfo,bookapi.replace); + $res.find('.btn-fill').click(data.items[i].volumeInfo,bookapi.fillin); + + bookapi.$out.append($res); + } + }, + + replace: function(event){ + item = event.data; + if(item.title) + $('#bookpanel input[name=title]').val(item.title); + if(item.description) + $('#bookpanel textarea[name=description]').val(item.description); + $wysiwyg[0].updateFrame(); + if(item.language) + $('#bookpanel input[name=language]').val(item.language); + if(item.publisher) + $('#bookpanel input[name=publisher]').val(item.publisher); + if(item.categories) + $('#bookpanel input[name=subjects]').val(item.categories.join(', ')); + if(item.imageLinks){ + $('#bookpanel input[name=coverurl]').val(item.imageLinks.thumbnail); + $('#cover').attr('src',item.imageLinks.thumbnail); + } + bookapi.$dialog.dialog('close'); + }, + + fillin: function(event){ + item = event.data; + + if(item.title && $('#bookpanel input[name=title]').val() == '') + $('#bookpanel input[name=title]').val(item.title); + if(item.description && $('#bookpanel textarea[name=description]').val() == '') + $('#bookpanel textarea[name=description]').val(item.description); + $wysiwyg[0].updateFrame(); + if(item.language && $('#bookpanel input[name=language]').val() == '') + $('#bookpanel input[name=language]').val(item.language); + if(item.publisher && $('#bookpanel input[name=publisher]').val() == '') + $('#bookpanel input[name=publisher]').val(item.publisher); + if(item.categories && $('#bookpanel input[name=subjects]').val() == '') + $('#bookpanel input[name=subjects]').val(item.categories.join(', ')); + if(item.imageLinks && $('#cover').hasClass('noimg')){ + $('#bookpanel input[name=coverurl]').val(item.imageLinks.thumbnail); + $('#cover').attr('src',item.imageLinks.thumbnail); + } + bookapi.$dialog.dialog('close'); + } + +}; + +var author = { + init: function(){ + $button = $(document.createElement('a')); + $button.text('+').attr('href','#'); + $button.attr('title','add another author line'); + $button.click(author.add); + $button.addClass('addauthor'); + + $td = $('#authors'); + $td.append($button); + }, + + add: function(){ + $td = $('#authors'); + + $ps = $td.find('p'); + $new = $ps.first().clone(); + $new.find('input').first().attr('name','authorname['+$ps.length+']').val(''); + $new.find('input').last().attr('name','authoras['+$ps.length+']').val(''); + + $ps.last().after($new); + } +}; + +var $wysiwg = null; +$(function(){ + bookapi.init(); + author.init(); + + // scroll to currently selected book + $current = $('#booklist li.active'); + if($current.length){ + $current[0].scrollIntoView(); + } + + // initialize the WYSIWYG editor + $wysiwyg = $('textarea').cleditor({ + width: 450, + controls: // controls to add to the toolbar + "bold italic underline strikethrough | " + + "style removeformat | bullets numbering | " + + "alignleft center alignright justify | undo redo | " + + "link unlink | source", + styles: // styles in the style popup + [["Paragraph", "<p>"], ["Header 1", "<h1>"], ["Header 2", "<h2>"], + ["Header 3", "<h3>"], ["Header 4","<h4>"], ["Header 5","<h5>"]] + }); +}); |