mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-31 15:23:02 +00:00 
			
		
		
		
	Merged new caliblur theme
Fix for new users created Fix for options to the calibre-converter Only the first 300 chars are logged for the emailbody (spamming of logfile is prevented) Added class to "Random" header
This commit is contained in:
		
							
								
								
									
										1
									
								
								cps/static/css/caliBlur.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cps/static/css/caliBlur.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								cps/static/css/images/caliblur/blur-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cps/static/css/images/caliblur/blur-dark.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 40 KiB | 
							
								
								
									
										
											BIN
										
									
								
								cps/static/css/images/caliblur/blur-light.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cps/static/css/images/caliblur/blur-light.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 54 KiB | 
							
								
								
									
										
											BIN
										
									
								
								cps/static/css/images/caliblur/blur-noise.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								cps/static/css/images/caliblur/blur-noise.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 92 KiB | 
							
								
								
									
										782
									
								
								cps/static/js/caliBlur.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										782
									
								
								cps/static/js/caliBlur.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,782 @@ | |||||||
|  |  | ||||||
|  |     /*** | ||||||
|  |      * Copyright 2012, Digital Fusion | ||||||
|  |      * Licensed under the MIT license. | ||||||
|  |      * http://teamdf.com/jquery-plugins/license/ | ||||||
|  |      * | ||||||
|  |      * @author Sam Sehnert | ||||||
|  |      * @desc A small plugin that checks whether elements are within | ||||||
|  |      *       the user visible viewport of a web browser. | ||||||
|  |      *       can accounts for vertical position, horizontal, or both | ||||||
|  |      */ | ||||||
|  | !function(t){var i=t(window);t.fn.visible=function(t,e,o){if(!(this.length<1)){var r=this.length>1?this.eq(0):this,n=r.get(0),f=i.width(),h=i.height(),o=o?o:"both",l=e===!0?n.offsetWidth*n.offsetHeight:!0;if("function"==typeof n.getBoundingClientRect){var g=n.getBoundingClientRect(),u=g.top>=0&&g.top<h,s=g.bottom>0&&g.bottom<=h,c=g.left>=0&&g.left<f,a=g.right>0&&g.right<=f,v=t?u||s:u&&s,b=t?c||a:c&&a;if("both"===o)return l&&v&&b;if("vertical"===o)return l&&v;if("horizontal"===o)return l&&b}else{var d=i.scrollTop(),p=d+h,w=i.scrollLeft(),m=w+f,y=r.offset(),z=y.top,B=z+r.height(),C=y.left,R=C+r.width(),j=t===!0?B:z,q=t===!0?z:B,H=t===!0?R:C,L=t===!0?C:R;if("both"===o)return!!l&&p>=q&&j>=d&&m>=L&&H>=w;if("vertical"===o)return!!l&&p>=q&&j>=d;if("horizontal"===o)return!!l&&m>=L&&H>=w}}}}(jQuery); | ||||||
|  |  | ||||||
|  | // Move advanced search to side-menu | ||||||
|  | $( 'a[href*="advanced"]' ).parent().insertAfter( '#nav_new' ); | ||||||
|  | $( 'body' ).addClass('blur'); | ||||||
|  |  | ||||||
|  | // Back button | ||||||
|  | curHref = window.location.href.split('/'); | ||||||
|  | prevHref = document.referrer.split('/'); | ||||||
|  | $( '.navbar-form.navbar-left' ) | ||||||
|  |   .before( '<div class="plexBack"><a href="' + document.referrer + '"></a></div>' ); | ||||||
|  | if ( history.length === 1 || | ||||||
|  |     curHref[0] + | ||||||
|  |     curHref[1] + | ||||||
|  |     curHref[2] != | ||||||
|  |     prevHref[0] + | ||||||
|  |     prevHref[1] + | ||||||
|  |     prevHref[2] || | ||||||
|  |   $( 'body.root' )>length > 0 ) { | ||||||
|  |     $( '.plexBack' ).addClass( 'noBack' ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | //Weird missing a after pressing back from edit. | ||||||
|  | setTimeout(function() { | ||||||
|  |   if ( $( '.plexBack a').length < 1 ) { | ||||||
|  |     $( '.plexBack' ).append('<a href="' + document.referrer + '"></a>'); | ||||||
|  |   } | ||||||
|  | },10); | ||||||
|  |  | ||||||
|  | // Home button | ||||||
|  | $( '.plexBack' ).before( '<div class="home-btn"></div>' ); | ||||||
|  | $( 'a.navbar-brand' ).clone().appendTo( '.home-btn' ).empty().removeClass('navbar-brand'); | ||||||
|  | ///////////////////////////////// | ||||||
|  | // Start of Book Details Work // | ||||||
|  | /////////////////////////////// | ||||||
|  |  | ||||||
|  | // Wrap book description in div container | ||||||
|  | if ( $( 'body.book' ).length > 0 ) { | ||||||
|  |  | ||||||
|  |   /* description = $( 'h3:contains("Description:")' ).nextUntil( '.morestuff' ).slice(0,-1); | ||||||
|  |   bookInfo = $( '.author' ).nextUntil( 'h3:contains("Description:")'); | ||||||
|  |   $( 'h3:contains("Description:")' ).hide(); | ||||||
|  |   $( description ).detach(); | ||||||
|  |   $( bookInfo ).wrapAll( '<div class="bookinfo"></div>' ); | ||||||
|  |   $( 'h3:contains("Description:")' ).after( '<div class="description"></div>' ); | ||||||
|  |   $( '.languages' ).appendTo( '.bookinfo' ); | ||||||
|  |   $('.hr').detach(); | ||||||
|  |   if ( $( '.identifiers ').length > 0 ) { | ||||||
|  |     console.log(".identifiers length " + $( '.identifiers ').length ); | ||||||
|  |       $( '.identifiers' ).before( '<div class="hr"></div>' ); | ||||||
|  |     } else { | ||||||
|  |     if ( $( '.bookinfo > p:first-child' ).length > 0 ) { | ||||||
|  |       console.log(".bookinfo > p:first-child length " +  $( '.bookinfo > p' ).length ); | ||||||
|  |       $( '.bookinfo > p:first-child' ).first().after( '<div class="hr"></div>' ); | ||||||
|  |       } else{ | ||||||
|  |         if ( $( '.bookinfo a[href*="/series/"]' ).length > 0 ) { | ||||||
|  |           console.log( 'series text found; placing hr below series' ); | ||||||
|  |           $( '.bookinfo a[href*="/series/"]' ).parent().after( '<div class="hr"></div>' ); | ||||||
|  |         } else { | ||||||
|  |         console.log("prepending hr div to top of .bookinfo"); | ||||||
|  |       $( '.bookinfo' ).prepend( '<div class="hr"></div>' ); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   $( '.rating' ).insertBefore( '.hr' ); | ||||||
|  |   $( 'div.description' ).hide(); | ||||||
|  |   $( '#remove-from-shelves' ).insertAfter( '.hr' ); | ||||||
|  |  | ||||||
|  |   /* if book description is not in html format, Remove extra line breaks | ||||||
|  |   Remove blank lines/unnecessary spaces, split by line break to array | ||||||
|  |   Push array into .description div. If there is still a wall of text, | ||||||
|  |   find sentences and split wall into groups of three sentence paragraphs. | ||||||
|  |   If the book format is in html format, Keep html, but strip away inline | ||||||
|  |   styles and empty elements */ | ||||||
|  | /* | ||||||
|  |   // If text is sitting in div as text node | ||||||
|  |   if ( description[0] === undefined ) { | ||||||
|  |     textValue = $( '.book-meta' ) | ||||||
|  |       .contents() | ||||||
|  |       .filter(function() { | ||||||
|  |         return this.nodeType == Node.TEXT_NODE; | ||||||
|  |       }).text(); | ||||||
|  |     description = $.makeArray( | ||||||
|  |       textValue.replace(/(?:(?:\r\n|\r|\n)\s*){2}/gm, "") | ||||||
|  |     ); | ||||||
|  |     $( '.book-meta' ).contents().filter(function() { | ||||||
|  |       return this.nodeType === 3; | ||||||
|  |     }).remove(); | ||||||
|  |   } | ||||||
|  |   if ( description[1] === undefined ) { | ||||||
|  |     newdesc = description.toString() | ||||||
|  |     .replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm,"").split(/\n/); | ||||||
|  |     $.each(newdesc, function(i, val) { | ||||||
|  |     $( 'div.description' ).append( '<p>' + newdesc[i] + '</p>' ); | ||||||
|  |     }); | ||||||
|  |     $( '.description' ).fadeIn(100); | ||||||
|  |     //If still a wall of text create 3 sentence paragraphs. | ||||||
|  |    if( $( '.description p' ).length === 1 ) { | ||||||
|  |      if ( description.context != undefined ) { | ||||||
|  |      newdesc = description.text() | ||||||
|  |       .replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm,"").split(/\n/); | ||||||
|  |      } | ||||||
|  |      else { | ||||||
|  |        newdesc = description.toString(); | ||||||
|  |      } | ||||||
|  |      doc = nlp ( newdesc.toString() ); | ||||||
|  |      sentences = doc.map((m)=> m.out( 'text' )); | ||||||
|  |      $( '.description p' ).remove(); | ||||||
|  |      let size = 3; let sentenceChunks = []; | ||||||
|  |      for (var i=0; i<sentences.length; i+=size) { | ||||||
|  |        sentenceChunks.push(sentences.slice(i,i+size)); | ||||||
|  |      } | ||||||
|  |      let output = ''; | ||||||
|  |      $.each(sentenceChunks, function(i, val) { | ||||||
|  |          let preOutput = ''; | ||||||
|  |          $.each(val, function(i, val) { | ||||||
|  |          preOutput += val; | ||||||
|  |        }); | ||||||
|  |        output += '<p>' + preOutput + '</p>'; | ||||||
|  |      }); | ||||||
|  |      $( 'div.description' ).append( output ); | ||||||
|  |    } | ||||||
|  |   } else { | ||||||
|  |       $.each(description, function(i, val) { | ||||||
|  |       $( description[i].outerHTML ).appendTo( '.description' ); | ||||||
|  |       $( 'div.description :empty' ).remove(); | ||||||
|  |       $( 'div.description ').attr( 'style', '' ); | ||||||
|  |       }); | ||||||
|  |     $( 'div.description' ).fadeIn( 100 ); | ||||||
|  |   }*/ | ||||||
|  |  | ||||||
|  |   description = $( '.comments' ); | ||||||
|  |   bookInfo = $( '.author' ).nextUntil( 'h3:contains("Description:")'); | ||||||
|  |   $( 'h3:contains("Description:")' ).detach(); | ||||||
|  |   $( '.comments' ).detach(); | ||||||
|  |   $( bookInfo ).wrapAll( '<div class="bookinfo"></div>' ); | ||||||
|  | //  $( 'h3:contains("Description:")' ).after( '<div class="description"></div>' ); | ||||||
|  |   $( '.languages' ).appendTo( '.bookinfo' ); | ||||||
|  |   $('.hr').detach(); | ||||||
|  |   if ( $( '.identifiers ').length > 0 ) { | ||||||
|  |     console.log(".identifiers length " + $( '.identifiers ').length ); | ||||||
|  |       $( '.identifiers' ).before( '<div class="hr"></div>' ); | ||||||
|  |     } else { | ||||||
|  |     if ( $( '.bookinfo > p:first-child' ).length > 0 ) { | ||||||
|  |       console.log(".bookinfo > p:first-child length " +  $( '.bookinfo > p' ).length ); | ||||||
|  |       $( '.bookinfo > p:first-child' ).first().after( '<div class="hr"></div>' ); | ||||||
|  |       } else{ | ||||||
|  |         if ( $( '.bookinfo a[href*="/series/"]' ).length > 0 ) { | ||||||
|  |           console.log( 'series text found; placing hr below series' ); | ||||||
|  |           $( '.bookinfo a[href*="/series/"]' ).parent().after( '<div class="hr"></div>' ); | ||||||
|  |         } else { | ||||||
|  |         console.log("prepending hr div to top of .bookinfo"); | ||||||
|  |       $( '.bookinfo' ).prepend( '<div class="hr"></div>' ); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   $( '.rating' ).insertBefore( '.hr' ); | ||||||
|  |   $( '#remove-from-shelves' ).insertAfter( '.hr' ); | ||||||
|  |   $( description ).appendTo('.bookinfo') | ||||||
|  |   /* if book description is not in html format, Remove extra line breaks | ||||||
|  |   Remove blank lines/unnecessary spaces, split by line break to array | ||||||
|  |   Push array into .description div. If there is still a wall of text, | ||||||
|  |   find sentences and split wall into groups of three sentence paragraphs. | ||||||
|  |   If the book format is in html format, Keep html, but strip away inline | ||||||
|  |   styles and empty elements */ | ||||||
|  |  | ||||||
|  |   // If text is sitting in div as text node | ||||||
|  |   if ( $('.comments:has(p)' ).length === 0 ) { | ||||||
|  |     newdesc = description.text() | ||||||
|  |     .replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm,"").split(/\n/); | ||||||
|  |     $('.comments' ).empty(); | ||||||
|  |     $.each(newdesc, function(i, val) { | ||||||
|  |     $( 'div.comments' ).append( '<p>' + newdesc[i] + '</p>' ); | ||||||
|  |     }); | ||||||
|  |     $( '.comments' ).fadeIn(100); | ||||||
|  |   }    //If still a wall of text create 3 sentence paragraphs. | ||||||
|  |    if( $( '.comments p' ).length === 1 ) { | ||||||
|  |      if ( description.context != undefined ) { | ||||||
|  |      newdesc = description.text() | ||||||
|  |       .replace(/^(?=\n)$|^\s*|\s*$|\n\n+/gm,"").split(/\n/); | ||||||
|  |      } | ||||||
|  |      else { | ||||||
|  |        newdesc = description.toString(); | ||||||
|  |      } | ||||||
|  |      doc = nlp ( newdesc.toString() ); | ||||||
|  |      sentences = doc.map((m)=> m.out( 'text' )); | ||||||
|  |      sentences[0] = sentences[0].replace(",",""); | ||||||
|  |      $( '.comments p' ).remove(); | ||||||
|  |      let size = 3; let sentenceChunks = []; | ||||||
|  |      for (var i=0; i<sentences.length; i+=size) { | ||||||
|  |        sentenceChunks.push(sentences.slice(i,i+size)); | ||||||
|  |      } | ||||||
|  |      let output = ''; | ||||||
|  |      $.each(sentenceChunks, function(i, val) { | ||||||
|  |          let preOutput = ''; | ||||||
|  |          $.each(val, function(i, val) { | ||||||
|  |          preOutput += val; | ||||||
|  |        }); | ||||||
|  |        output += '<p>' + preOutput + '</p>'; | ||||||
|  |      }); | ||||||
|  |      $( 'div.comments' ).append( output ); | ||||||
|  |    } | ||||||
|  |    else { | ||||||
|  |       $.each(description, function(i, val) { | ||||||
|  | //      $( description[i].outerHTML ).appendTo( '.comments' ); | ||||||
|  |       $( 'div.comments :empty' ).remove(); | ||||||
|  |       $( 'div.comments ').attr( 'style', '' ); | ||||||
|  |       }); | ||||||
|  |     $( 'div.comments' ).fadeIn( 100 ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // Sexy blurred backgrounds | ||||||
|  |   cover = $( '.cover img' ).attr( 'src' ); | ||||||
|  |   $( '#loader + .container-fluid' ) | ||||||
|  |     .prepend( '<div class="blur-wrapper"></div' ); | ||||||
|  |   $( '.blur-wrapper' ) | ||||||
|  |     .prepend( '<div><img class="bg-blur" src="' + cover + '"></div>' ); | ||||||
|  |  | ||||||
|  |   // Fix-up book detail headings | ||||||
|  |   publisher = $( '.publishers p span' ).text().split( ': ' ); | ||||||
|  |   $( '.publishers p span' ).remove(); | ||||||
|  |   $.each(publisher, function(i, val) { | ||||||
|  |     $( '.publishers' ).append( '<span>' + publisher[i] + '</span>' ); | ||||||
|  |   }); | ||||||
|  |   published = $( '.book-meta p:contains("Publishing date")' ) | ||||||
|  |   .text().split(': '); | ||||||
|  |   $( '.book-meta p:contains("Publishing date")' ) | ||||||
|  |   .before( '<div class="published-date"></div>' ); | ||||||
|  |   $( '.book-meta p:contains("Publishing date")' ).remove(); | ||||||
|  |   $.each(published, function(i, val) { | ||||||
|  |     $( '.published-date' ).append( '<span>' + published[i] + '</span>' ); | ||||||
|  |   }); | ||||||
|  |   languages = $( '.languages p span' ).text().split( ': ' ); | ||||||
|  |   $( '.languages p span' ).remove(); | ||||||
|  |   $.each(languages, function(i, val) { | ||||||
|  |     $( '.languages' ).append( '<span>' + languages[i] + '</span>' ); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   $( '.book-meta h2:first' ).clone() | ||||||
|  |   .prependTo( '.book-meta > .btn-toolbar:first' ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   // If only one download type exists still put the items into a drop-drown list. | ||||||
|  |   downloads = $( 'a[id^=btnGroupDrop]' ).get(); | ||||||
|  |   if ( $( downloads ).length === 1 ) { | ||||||
|  |     $( '<button id="btnGroupDrop1" type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-download"></span>Download :<span class="caret"></span></button><ul class="dropdown-menu leramslist aria-labelledby="btnGroupDrop1"></ul>' ).insertBefore( downloads[downloads.length-1] ); | ||||||
|  |     $( downloads ).detach(); | ||||||
|  |     $.each(downloads, function(i, val) { | ||||||
|  |       $( '<li>' + downloads[i].outerHTML + '</li>' ).appendTo( '.leramslist' ); | ||||||
|  |     }); | ||||||
|  |     $( '.leramslist' ).find( 'span' ).remove(); | ||||||
|  |     $( '.leramslist a' ).removeClass( 'btn btn-primary' ).removeAttr( 'role' ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // Add classes to buttons | ||||||
|  |   $( '#sendbtn' ).parent().addClass( 'sendBtn' ); | ||||||
|  |   $( '[id*=btnGroupDrop]' ).parent().addClass( 'downloadBtn' ); | ||||||
|  |   $( 'read-in-browser' ).parent().addClass( 'readBtn' ); | ||||||
|  |   $( '.downloadBtn button:first' ).addClass( 'download-text' ); | ||||||
|  |  | ||||||
|  |   // Move all options in book details page to the same group | ||||||
|  |   $( '[aria-label*="Delete book"]' ) | ||||||
|  |     .prependTo( '[aria-label^="Download, send"]' ) | ||||||
|  |     .children().removeClass( 'btn-sm' ); | ||||||
|  |   $( '.custom_columns' ) | ||||||
|  |     .addClass(' btn-group' ) | ||||||
|  |     .attr('role', 'group' ) | ||||||
|  |     .removeClass( 'custom_columns' ) | ||||||
|  |     .prependTo( '[aria-label^="Download, send"]' ); | ||||||
|  |   $( '#have_read_cb' ) | ||||||
|  |     .after( '<label class="block-label readLbl" for="#have_read_cb"></label>' ); | ||||||
|  |   $( '#shelf-actions' ).prependTo( '[aria-label^="Download, send"]' ); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   // Move dropdown lists higher in dom, replace bootstrap toggle with own toggle. | ||||||
|  |   $( 'ul[aria-labelledby="read-in-browser"]' ).insertBefore( '.blur-wrapper' ).addClass('readinbrowser-drop'); | ||||||
|  |   $( '.leramslist' ).insertBefore( '.blur-wrapper' ); | ||||||
|  |   $( 'ul[aria-labelledby="btnGroupDrop1"]' ).insertBefore( '.blur-wrapper' ).addClass('leramslist'); | ||||||
|  |   $( '#add-to-shelves' ).insertBefore( '.blur-wrapper' ); | ||||||
|  |  | ||||||
|  |   $( '#read-in-browser' ).click( function() { | ||||||
|  |     $(  '.readinbrowser-drop' ).toggle(); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   $('.downloadBtn' ).click( function() { | ||||||
|  |     $(  '.leramslist' ).toggle(); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   $('div[aria-label="Add to shelves"]' ).click( function() { | ||||||
|  |     $(  '#add-to-shelves' ).toggle(); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   // Fix formatting error on book detail languages | ||||||
|  |   if ( !$( '.book-meta > .bookinfo > .languages > span:last-of-type' ).text().startsWith(" ") ) { | ||||||
|  |       $( '.book-meta > .bookinfo > .languages > span:last-of-type' ).prepend(" "); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   //Work to reposition dropdowns. Does not currently solve for | ||||||
|  |   //screen resizing | ||||||
|  |   function dropdownToggle() { | ||||||
|  |  | ||||||
|  |     topPos = $( '.book-meta > .btn-toolbar:first' ).offset().top | ||||||
|  |  | ||||||
|  |     if ( $( '#read-in-browser' ).length > 0 ) { | ||||||
|  |       position = $( '#read-in-browser'  ).offset().left | ||||||
|  |       if ( position + $(  '.readinbrowser-drop' ).width() > $( window ).width() ) { | ||||||
|  |         positionOff = position + $( '.readinbrowser-drop' ).width() - $( window ).width(); | ||||||
|  |         ribPosition = position - positionOff - 5 | ||||||
|  |         $( '.readinbrowser-drop' ).attr("style", "left: " + ribPosition + "px !important; right: auto; top: " + topPos + "px"); | ||||||
|  |       } else { | ||||||
|  |           $( '.readinbrowser-drop' ).attr("style", "left: " + position + "px !important; right: auto; top: " + topPos + "px"); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ( $( '.downloadBtn' ).length > 0 ) { | ||||||
|  |  | ||||||
|  |       position = $( '#btnGroupDrop1'  ).offset().left | ||||||
|  |  | ||||||
|  |       if ( position + $(  '.leramslist' ).width() > $( window ).width() ) { | ||||||
|  |         positionOff = position + $( '.leramslist' ).width() - $( window ).width(); | ||||||
|  |         dlPosition = position - positionOff - 5 | ||||||
|  |         $( '.leramslist' ).attr("style", "left: " + dlPosition + "px !important; right: auto;  top: " + topPos + "px"); | ||||||
|  |       } else { | ||||||
|  |         $( '.leramslist' ).attr("style", "left: " + position + "px !important; right: auto;  top: " + topPos + "px"); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if ( $( 'div[aria-label="Add to shelves"]' ).length > 0 ) { | ||||||
|  |  | ||||||
|  |       position = $( 'div[aria-label="Add to shelves"]'  ).offset().left | ||||||
|  |  | ||||||
|  |       if ( position + $(  '#add-to-shelves' ).width() > $( window ).width() ) { | ||||||
|  |         positionOff = position + $( '#add-to-shelves' ).width() - $( window ).width(); | ||||||
|  |         adsPosition = position - positionOff - 5 | ||||||
|  |         $(  '#add-to-shelves' ).attr("style", "left: " + adsPosition + "px !important; right: auto;  top: " + topPos + "px"); | ||||||
|  |       } else { | ||||||
|  |         $(  '#add-to-shelves' ).attr("style", "left: " + position + "px !important; right: auto;  top: " + topPos + "px"); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   dropdownToggle(); | ||||||
|  |  | ||||||
|  |   $( window ).on( 'resize', function() { | ||||||
|  |     dropdownToggle(); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  | // Clone book rating for mobile view. | ||||||
|  | $( '.book-meta > .bookinfo > .rating' ).clone().insertBefore( '.book-meta > .description' ).addClass('rating-mobile'); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /////////////////////////////// | ||||||
|  | // End of Book Details Work // | ||||||
|  | ///////////////////////////// | ||||||
|  |  | ||||||
|  | ///////////////////////////////// | ||||||
|  | //    Start of Global Work    // | ||||||
|  | /////////////////////////////// | ||||||
|  |  | ||||||
|  | // Hide dropdown and collapse menus on click-off | ||||||
|  | $(document).mouseup(function (e) { | ||||||
|  |   var container = new Array(); | ||||||
|  |   container.push($('ul[aria-labelledby="read-in-browser"]')); | ||||||
|  |   container.push($('.leramslist')); | ||||||
|  |   container.push($('#add-to-shelves')); | ||||||
|  |   container.push($('.navbar-collapse.collapse.in')); | ||||||
|  |  | ||||||
|  |   $.each(container, function(key, value) { | ||||||
|  |     if (!$(value).is(e.target) // if the target of the click isn't the container... | ||||||
|  |     && $(value).has(e.target).length === 0) // ... nor a descendant of the container | ||||||
|  |     { | ||||||
|  |       if ( $(value).hasClass('dropdown-menu') ) | ||||||
|  |       { | ||||||
|  |         $(value).hide(); | ||||||
|  |       } else | ||||||
|  |       { | ||||||
|  |         if ( $(value).hasClass('collapse') ) | ||||||
|  |         { | ||||||
|  |           $(value).collapse('toggle'); | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Split path name to array and remove blanks | ||||||
|  | url = window.location.pathname | ||||||
|  |   .split( "/" ).filter( function(v){return v!==''} ); | ||||||
|  | // Add classes to some body elements that don't have it | ||||||
|  | if ( jQuery.inArray( 'epub', url ) != -1 ) { | ||||||
|  |   $( 'body' ).addClass( url[3] ); | ||||||
|  | } else { | ||||||
|  |   $( 'body' ).addClass( url[1] ); | ||||||
|  | } | ||||||
|  | if ( $( 'body.shelf' ).length > 0 ) { | ||||||
|  |   $( 'a[href*= "'+url[1]+"/"+url[2]+'"]' ) | ||||||
|  |     .parent() | ||||||
|  |     .addClass( 'active' ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Move create shelf | ||||||
|  | $( '#nav_createshelf' ).prependTo( 'li:contains("Your Shelves")' ); | ||||||
|  |  | ||||||
|  | // Create drop-down for profile and move elements to it | ||||||
|  | $( '#main-nav' ) | ||||||
|  |   .prepend( '<li class="dropdown"><a href="#" class="dropdown-toggle profileDrop" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-user"></span></a><ul class="dropdown-menu profileDropli"></ul></li>' ); | ||||||
|  | $( '#top_user' ).parent().addClass( 'dropdown' ).appendTo( '.profileDropli' ); | ||||||
|  | $( '#nav_about' ).addClass( 'dropdown' ).appendTo( '.profileDropli' ); | ||||||
|  | $( '#register' ).parent().addClass( 'dropdown' ).appendTo( '.profileDropli' ); | ||||||
|  | $( '#logout' ).parent().addClass( 'dropdown' ).appendTo( '.profileDropli' ); | ||||||
|  |  | ||||||
|  | // Remove the modals except from some areas where they are needed | ||||||
|  | bodyClass = $( 'body' ).attr( 'class' ).split(' '); | ||||||
|  | modalWanted = ['admin', 'editbook', 'config', 'uiconfig']; | ||||||
|  |  | ||||||
|  | if ( $.inArray( bodyClass[0], modalWanted) != -1 ) { | ||||||
|  | } else { | ||||||
|  |   $(' a:not(.dropdown-toggle) ') | ||||||
|  |     .removeAttr( 'data-toggle', 'data-target', 'data-remote' ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // Add classes to global buttons | ||||||
|  | $( '#top_tasks' ).parent().addClass( 'top_tasks' ); | ||||||
|  | $( '#top_admin' ).parent().addClass( 'top_admin' ); | ||||||
|  | $( '#form-upload' ).parent().addClass( 'form-upload' ); | ||||||
|  |  | ||||||
|  | // Search button work | ||||||
|  | $( 'input#query' ).focus(function() { | ||||||
|  |       $( 'form[role="search"]' ).addClass( 'search-focus' ); | ||||||
|  | }); | ||||||
|  | $( 'input#query' ).focusout(function() { | ||||||
|  |   setTimeout(function() { | ||||||
|  |             $( 'form[role="search"]' ).removeClass( 'search-focus' ); | ||||||
|  |   }, 100); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Add class to random book discover | ||||||
|  | // ToDo: done | ||||||
|  | $( 'h2:contains("Discover (Random Books")' ) | ||||||
|  |   .parent() | ||||||
|  |   .addClass( 'random-books' ); | ||||||
|  |  | ||||||
|  | // Check if dropdown goes out of viewport and add class | ||||||
|  |  | ||||||
|  | $(document).on('click','.dropdown-toggle',function() { | ||||||
|  |  // Add .offscreen if part of container not visible | ||||||
|  |   $('.dropdown-menu:visible').filter(function(){ | ||||||
|  |     return $(this).visible() === false; | ||||||
|  |   }).each(function(){ | ||||||
|  |     $(this).addClass('offscreen'); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Fade out content on page unload | ||||||
|  | // delegate all clicks on "a" tag (links) | ||||||
|  | $(document).on("click", "a:not(.btn-toolbar a, a[href*='shelf/remove'], .identifiers a, .bookinfo , .btn-group > a, #add-to-shelves a, #book-list a, .stat.blur.stats a )", function () { | ||||||
|  |  | ||||||
|  |     // get the href attribute | ||||||
|  |     var newUrl = $(this).attr("href"); | ||||||
|  |  | ||||||
|  |     // veryfy if the new url exists or is a hash | ||||||
|  |     if (!newUrl || newUrl[0] === "#") { | ||||||
|  |         // set that hash | ||||||
|  |         location.hash = newUrl; | ||||||
|  |         return; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // now, fadeout the html (whole page) | ||||||
|  |       $( '.blur-wrapper' ).fadeOut(250); | ||||||
|  |     $(".row-fluid .col-sm-10").fadeOut(500,function () { | ||||||
|  |         // when the animation is complete, set the new location | ||||||
|  |         location = newUrl; | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     // prevent the default browser behavior. | ||||||
|  |     return false; | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Collapse long text into read-more | ||||||
|  | $( 'div.comments' ).readmore( { | ||||||
|  |   collapsedHeight: 134, | ||||||
|  |   heightMargin: 45, | ||||||
|  |   speed: 300, | ||||||
|  |   moreLink: '<a href="#">READ MORE</a>', | ||||||
|  |   lessLink: '<a href="#">READ LESS</a>', | ||||||
|  | }); | ||||||
|  | ///////////////////////////////// | ||||||
|  | //     End of Global Work     // | ||||||
|  | /////////////////////////////// | ||||||
|  |  | ||||||
|  | // Author Page Background Blur | ||||||
|  | if ( $( 'body.author' ).length >0 ) { | ||||||
|  |   cover = $( '.author-bio img' ).attr( 'src' ); | ||||||
|  |   $( '#loader + .container-fluid' ) | ||||||
|  |     .prepend( '<div class="blur-wrapper"></div>' ); | ||||||
|  |   $( '.blur-wrapper' ).prepend( '<img class="bg-blur" src="' + cover + '">' ); | ||||||
|  |   // Place undefined cover images inside container | ||||||
|  |   if ( $( '.bg-blur[src="undefined"]' ).length > 0 ) { | ||||||
|  |     $( '.bg-blur' ).before( '<div class="bg-blur undefined-img"></div>' ); | ||||||
|  |     $( 'img.bg-blur' ).appendTo( '.undefined-img' ); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Ereader Page - add class to iframe body on ereader page after it loads. | ||||||
|  | backurl = '../../book/' + url[2] | ||||||
|  | $( 'body.epub #title-controls' ) | ||||||
|  |   .append('<div class="epub-back"><input action="action" onclick="location.href=backurl; return false;" type="button" value="Back" /></div>') | ||||||
|  |  | ||||||
|  | $(  'body.stats .col-sm-10 p:first' ).insertAfter( '#libs' ); | ||||||
|  |  | ||||||
|  | // Check if link is external and force _blank attribute | ||||||
|  | $(function(){ // document ready | ||||||
|  |   $( 'a' ).filter(function () { | ||||||
|  |       return this.hostname && this.hostname !== location.hostname; | ||||||
|  |   }).each(function () { | ||||||
|  |       $(this).addClass("external").attr( 'target', '_blank' ); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Check if lists are empty and add class to buttons | ||||||
|  | if ( $.trim( $('#add-to-shelves').html() ).length === 0 ) { | ||||||
|  |   $( '#add-to-shelf' ).addClass( 'empty-ul' ); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | shelfLength = $('#add-to-shelves li').length | ||||||
|  | emptyLength = 0 | ||||||
|  |  | ||||||
|  | $('#add-to-shelves').on('click','li a',function(){ | ||||||
|  |   console.log('#remove-from-shelves change registered' ); | ||||||
|  |   emptyLength++ | ||||||
|  |  | ||||||
|  |   setTimeout(function() { | ||||||
|  |     if ( emptyLength >= shelfLength ) { | ||||||
|  |         console.log('list is empty; adding empty-ul class' ); | ||||||
|  |       $( '#add-to-shelf' ).addClass( 'empty-ul' ); | ||||||
|  |     } else { | ||||||
|  |       console.log('list is not empty; removing empty-ul class' ); | ||||||
|  |       $( '#add-to-shelf' ).removeClass( 'empty-ul' ); | ||||||
|  |     } | ||||||
|  |   },100); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | if ( $.trim( $( 'ul[aria-labelledby="read-in-browser"] li' ).html() ).length === 0 ) { | ||||||
|  |   $('#read-in-browser').addClass('empty-ul'); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Shelf Buttons and Tooltips | ||||||
|  | if ( $( 'body.shelf' ).length > 0 ) { | ||||||
|  |   $( 'div[data-target="#DeleteShelfDialog"]' ) | ||||||
|  |     .before( '<div class=".btn-group shelf-btn-group"></div>' ) | ||||||
|  |     .appendTo( '.shelf-btn-group' ) | ||||||
|  |     .addClass( 'delete-shelf-btn' ); | ||||||
|  |  | ||||||
|  |     $( 'a[href*="edit"]' ) | ||||||
|  |       .appendTo( '.shelf-btn-group' ) | ||||||
|  |       .addClass( 'edit-shelf-btn' ); | ||||||
|  |  | ||||||
|  |     $( 'a[href*="order"]' ) | ||||||
|  |       .appendTo( '.shelf-btn-group' ) | ||||||
|  |       .addClass( 'order-shelf-btn' ); | ||||||
|  |   $( '.delete-shelf-btn' ).attr({ | ||||||
|  |       'data-toggle-two': 'tooltip', | ||||||
|  |       'title': 'Delete Shelf', | ||||||
|  |       'data-placement': 'bottom' }) | ||||||
|  |       .addClass('delete-btn-tooltip'); | ||||||
|  |  | ||||||
|  |   $( '.edit-shelf-btn' ).attr({ | ||||||
|  |       'data-toggle-two': 'tooltip', | ||||||
|  |       'title': 'Edit Shelf', | ||||||
|  |       'data-placement': 'bottom' }) | ||||||
|  |       .addClass('edit-btn-tooltip'); | ||||||
|  |  | ||||||
|  |   $( '.order-shelf-btn' ).attr({ | ||||||
|  |       'data-toggle-two': 'tooltip', | ||||||
|  |       'title': 'Reorder Shelf', | ||||||
|  |       'data-placement': 'bottom' }) | ||||||
|  |       .addClass('order-btn-tooltip'); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Rest of Tooltips | ||||||
|  | $( '.home-btn > a' ).attr({ | ||||||
|  |     'data-toggle': 'tooltip', | ||||||
|  |     'title': 'Home', | ||||||
|  |     'data-placement': 'bottom' }) | ||||||
|  |     .addClass('home-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '.plexBack > a' ).attr({ | ||||||
|  |    'data-toggle': 'tooltip', | ||||||
|  |    'title': 'Back', | ||||||
|  |    'data-placement': 'bottom' }) | ||||||
|  |    .addClass('back-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#top_tasks' ).attr({ | ||||||
|  |     'data-toggle': 'tooltip', | ||||||
|  |     'title': 'Tasks', | ||||||
|  |     'data-placement': 'bottom', | ||||||
|  |     'data-viewport': '#main-nav' }) | ||||||
|  |     .addClass('tasks-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#top_admin' ).attr({ | ||||||
|  |   'data-toggle': 'tooltip', | ||||||
|  |   'title': 'Settings', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '#main-nav' }) | ||||||
|  |   .addClass('admin-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '.profileDrop' ).attr({ | ||||||
|  |   'title': 'Account', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-toggle-two': 'tooltip', | ||||||
|  |   'data-viewport': '#main-nav' }) | ||||||
|  |   .addClass('send-btn-tooltip dropdown'); | ||||||
|  |  | ||||||
|  | $( '#btn-upload' ).attr({ | ||||||
|  |   'data-toggle': 'tooltip', | ||||||
|  |   'title': 'Upload', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '#main-nav' }) | ||||||
|  |   .addClass('upload-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#add-to-shelf' ).attr({ | ||||||
|  |   'data-toggle-two': 'tooltip', | ||||||
|  |   'title': 'Add to Shelf', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '.btn-toolbar' }) | ||||||
|  |   .addClass('addtoshelf-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#have_read_cb' ).attr({ | ||||||
|  |   'data-toggle': 'tooltip', | ||||||
|  |   'title': 'Mark As Read', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '.btn-toolbar' }) | ||||||
|  |   .addClass('readunread-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#have_read_cb:checked' ).attr({ | ||||||
|  |   'data-toggle': 'tooltip', | ||||||
|  |   'title': 'Mark As Unread', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '.btn-toolbar' }) | ||||||
|  |   .addClass('readunread-btn-tooltip'); | ||||||
|  |  | ||||||
|  |   $( 'button#delete' ).attr({ | ||||||
|  |     'data-toggle-two': 'tooltip', | ||||||
|  |     'title': 'Delete', | ||||||
|  |     'data-placement': 'bottom', | ||||||
|  |     'data-viewport': '.btn-toolbar' }) | ||||||
|  |     .addClass('delete-book-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#have_read_cb' ).click(function() { | ||||||
|  |   if ( $( '#have_read_cb:checked' ).length > 0 ) { | ||||||
|  |       $( this ).attr('data-original-title', 'Mark as Unread'); | ||||||
|  |   } else { | ||||||
|  |       $( this).attr('data-original-title', 'Mark as Read'); | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | $( '.btn-group[aria-label="Edit/Delete book"] a' ).attr({ | ||||||
|  |    'data-toggle': 'tooltip', | ||||||
|  |    'title': 'Edit', | ||||||
|  |    'data-placement': 'bottom', | ||||||
|  |    'data-viewport': '.btn-toolbar' }) | ||||||
|  |    .addClass('edit-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#sendbtn' ).attr({ | ||||||
|  |   'data-toggle': 'tooltip', | ||||||
|  |   'title': 'Send to Kindle', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '.btn-toolbar' }) | ||||||
|  |   .addClass('send-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#read-in-browser' ).attr({ | ||||||
|  |   'data-toggle-two': 'tooltip', | ||||||
|  |   'title': 'Read', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '.btn-toolbar'}) | ||||||
|  |   .addClass('send-btn-tooltip'); | ||||||
|  |  | ||||||
|  | $( '#btnGroupDrop1' ).attr({ | ||||||
|  |   'data-toggle-two': 'tooltip', | ||||||
|  |   'title': 'Download', | ||||||
|  |   'data-placement': 'bottom', | ||||||
|  |   'data-viewport': '.btn-toolbar' }); | ||||||
|  |  | ||||||
|  | if ( $( 'body.epub').length === 0 ) { | ||||||
|  |   $(document).ready(function(){ | ||||||
|  |       $('[data-toggle="tooltip"]').tooltip({container: 'body', trigger: 'hover'}); | ||||||
|  |       $('[data-toggle-two="tooltip"]').tooltip({container: 'body', trigger: 'hover'}); | ||||||
|  |       $( '#btn-upload' ).attr('title', " "); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   $( '[data-toggle-two="tooltip"]' ).click(function(){ | ||||||
|  |        $('[data-toggle-two="tooltip"]').tooltip('hide'); | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   $( '[data-toggle="tooltip"]' ).click(function(){ | ||||||
|  |       $('[data-toggle="tooltip"]').tooltip('hide'); | ||||||
|  |   }); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | $( '#read-in-browser a' ).attr('target',""); | ||||||
|  |  | ||||||
|  | if ( $( '.edit-shelf-btn').length > 1 ) { | ||||||
|  |   $( '.edit-shelf-btn:first').remove(); | ||||||
|  | } | ||||||
|  | if ( $( '.order-shelf-btn').length > 1 ) { | ||||||
|  |   $( '.order-shelf-btn:first').remove(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | $( '#top_user > span.hidden-sm' ).clone().insertBefore( '.profileDropli' ); | ||||||
|  | $( '.navbar-collapse.collapse.in').before('<div class="sidebar-backdrop"></div>'); | ||||||
|  |  | ||||||
|  | // Get rid of leading white space | ||||||
|  | recentlyAdded = $( '#nav_new a:contains("Recently")' ).text().trim(); | ||||||
|  | $('#nav_new a:contains("Recently")').contents().filter(function() { | ||||||
|  |     return this.nodeType == 3 | ||||||
|  | }).each(function(){ | ||||||
|  |     this.textContent = this.textContent.replace(' Recently Added',recentlyAdded); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Change shelf textValue | ||||||
|  | shelfText = $( '.shelf .discover h2:first' ).text().replace(':',' —').replace(/\'/g,''); | ||||||
|  | $( '.shelf .discover h2:first' ).text(shelfText); | ||||||
|  |  | ||||||
|  | shelfText = $( '.shelforder .col-sm-10 .col-sm-6.col-lg-6.col-xs-6 h2:first' ).text().replace(':',' —').replace(/\'/g,''); | ||||||
|  | $( '.shelforder .col-sm-10 .col-sm-6.col-lg-6.col-xs-6 h2:first' ).text(shelfText); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | function mobileSupport() { | ||||||
|  | if ( $( window ).width() <= 768 ) { | ||||||
|  |   //Move menu to collapse | ||||||
|  |   $( '.row-fluid > .col-sm-2:first' ).appendTo( '.navbar-collapse.collapse:first'); | ||||||
|  |   if ( $( '.sidebar-backdrop' ).length < 1 ) { | ||||||
|  |     $( '.navbar-collapse.collapse:first' ).after( '<div class="sidebar-backdrop"></div>' ); | ||||||
|  |   } | ||||||
|  |    } else { | ||||||
|  |   //Move menu out of collapse | ||||||
|  |     $( '.col-sm-2:first' ).insertBefore( '.col-sm-10:first'); | ||||||
|  |     $( '.sidebar-backdrop' ).remove(); | ||||||
|  |    } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // LayerCake plug | ||||||
|  | if ( $(' .stat.blur.stats p').length > 0 ) { | ||||||
|  |   $(' .stat.blur.stats p').append(" and <a href='https://github.com/leram84/layer.Cake/tree/master/caliBlur' target='_blank'>layer.Cake</a>"); | ||||||
|  |   str = $(' .stat.blur.stats p').html().replace("</a>.","</a>"); | ||||||
|  |   $(' .stat.blur.stats p').html(str); | ||||||
|  | } | ||||||
|  | // Collect delete buttons in editbook to single dropdown | ||||||
|  | $( '.editbook .text-center.more-stuff' ).prepend( '<button id="deleteButton" type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-remove"></span>Delete Format<span class="caret"></span></button><ul class="dropdown-menu delete-dropdown"></ul>' ); | ||||||
|  |  | ||||||
|  | deleteButtons = $(  '.editbook .text-center.more-stuff a' ).removeClass('btn btn-danger' ).attr( 'type', '').get(); | ||||||
|  |  | ||||||
|  | $( deleteButtons ).detach(); | ||||||
|  | $( '.editbook .text-center.more-stuff h4' ).remove(); | ||||||
|  | $.each(deleteButtons, function(i, val) { | ||||||
|  |   $( '<li>' + deleteButtons[i].outerHTML + '</li>' ).appendTo( '.delete-dropdown' ); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // Turn off bootstrap animations | ||||||
|  | $(function() { $.support.transition = false; }) | ||||||
|  |  | ||||||
|  | mobileSupport(); | ||||||
|  |  | ||||||
|  | // Only call function once resize is complete | ||||||
|  | //var id; | ||||||
|  | $( window ).on('resize',function() { | ||||||
|  | //  clearTimeout(id); | ||||||
|  | //  id = setTimeout(mobileSupport, 500); | ||||||
|  | mobileSupport(); | ||||||
|  | }); | ||||||
							
								
								
									
										6
									
								
								cps/static/js/libs/compromise.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								cps/static/js/libs/compromise.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										11
									
								
								cps/static/js/libs/readmore.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								cps/static/js/libs/readmore.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | /*! | ||||||
|  |  * @preserve | ||||||
|  |  * | ||||||
|  |  * Readmore.js jQuery plugin | ||||||
|  |  * Author: @jed_foster | ||||||
|  |  * Project home: http://jedfoster.github.io/Readmore.js | ||||||
|  |  * Licensed under the MIT license | ||||||
|  |  * | ||||||
|  |  * Debounce function from http://davidwalsh.name/javascript-debounce-function | ||||||
|  |  */ | ||||||
|  | !function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){"use strict";function e(t,e,i){var o;return function(){var n=this,a=arguments,s=function(){o=null,i||t.apply(n,a)},r=i&&!o;clearTimeout(o),o=setTimeout(s,e),r&&t.apply(n,a)}}function i(t){var e=++h;return String(null==t?"rmjs-":t)+e}function o(t){var e=t.clone().css({height:"auto",width:t.width(),maxHeight:"none",overflow:"hidden"}).insertAfter(t),i=e.outerHeight(),o=parseInt(e.css({maxHeight:""}).css("max-height").replace(/[^-\d\.]/g,""),10),n=t.data("defaultHeight");e.remove();var a=o||t.data("collapsedHeight")||n;t.data({expandedHeight:i,maxHeight:o,collapsedHeight:a}).css({maxHeight:"none"})}function n(t){if(!d[t.selector]){var e=" ";t.embedCSS&&""!==t.blockCSS&&(e+=t.selector+" + [data-readmore-toggle], "+t.selector+"[data-readmore]{"+t.blockCSS+"}"),e+=t.selector+"[data-readmore]{transition: height "+t.speed+"ms;overflow: hidden;}",function(t,e){var i=t.createElement("style");i.type="text/css",i.styleSheet?i.styleSheet.cssText=e:i.appendChild(t.createTextNode(e)),t.getElementsByTagName("head")[0].appendChild(i)}(document,e),d[t.selector]=!0}}function a(e,i){this.element=e,this.options=t.extend({},r,i),n(this.options),this._defaults=r,this._name=s,this.init(),window.addEventListener?(window.addEventListener("load",c),window.addEventListener("resize",c)):(window.attachEvent("load",c),window.attachEvent("resize",c))}var s="readmore",r={speed:100,collapsedHeight:200,heightMargin:16,moreLink:'<a href="#">Read More</a>',lessLink:'<a href="#">Close</a>',embedCSS:!0,blockCSS:"display: block; width: 100%;",startOpen:!1,blockProcessed:function(){},beforeToggle:function(){},afterToggle:function(){}},d={},h=0,c=e(function(){t("[data-readmore]").each(function(){var e=t(this),i="true"===e.attr("aria-expanded");o(e),e.css({height:e.data(i?"expandedHeight":"collapsedHeight")})})},100);a.prototype={init:function(){var e=t(this.element);e.data({defaultHeight:this.options.collapsedHeight,heightMargin:this.options.heightMargin}),o(e);var n=e.data("collapsedHeight"),a=e.data("heightMargin");if(e.outerHeight(!0)<=n+a)return this.options.blockProcessed&&"function"==typeof this.options.blockProcessed&&this.options.blockProcessed(e,!1),!0;var s=e.attr("id")||i(),r=this.options.startOpen?this.options.lessLink:this.options.moreLink;e.attr({"data-readmore":"","aria-expanded":this.options.startOpen,id:s}),e.after(t(r).on("click",function(t){return function(i){t.toggle(this,e[0],i)}}(this)).attr({"data-readmore-toggle":s,"aria-controls":s})),this.options.startOpen||e.css({height:n}),this.options.blockProcessed&&"function"==typeof this.options.blockProcessed&&this.options.blockProcessed(e,!0)},toggle:function(e,i,o){o&&o.preventDefault(),e||(e=t('[aria-controls="'+this.element.id+'"]')[0]),i||(i=this.element);var n=t(i),a="",s="",r=!1,d=n.data("collapsedHeight");n.height()<=d?(a=n.data("expandedHeight")+"px",s="lessLink",r=!0):(a=d,s="moreLink"),this.options.beforeToggle&&"function"==typeof this.options.beforeToggle&&this.options.beforeToggle(e,n,!r),n.css({height:a}),n.on("transitionend",function(i){return function(){i.options.afterToggle&&"function"==typeof i.options.afterToggle&&i.options.afterToggle(e,n,r),t(this).attr({"aria-expanded":r}).off("transitionend")}}(this)),t(e).replaceWith(t(this.options[s]).on("click",function(t){return function(e){t.toggle(this,i,e)}}(this)).attr({"data-readmore-toggle":n.attr("id"),"aria-controls":n.attr("id")}))},destroy:function(){t(this.element).each(function(){var e=t(this);e.attr({"data-readmore":null,"aria-expanded":null}).css({maxHeight:"",height:""}).next("[data-readmore-toggle]").remove(),e.removeData()})}},t.fn.readmore=function(e){var i=arguments,o=this.selector;return e=e||{},"object"==typeof e?this.each(function(){if(t.data(this,"plugin_"+s)){var i=t.data(this,"plugin_"+s);i.destroy.apply(i)}e.selector=o,t.data(this,"plugin_"+s,new a(this,e))}):"string"==typeof e&&"_"!==e[0]&&"init"!==e?this.each(function(){var o=t.data(this,"plugin_"+s);o instanceof a&&"function"==typeof o[e]&&o[e].apply(o,Array.prototype.slice.call(i,1))}):void 0}}); | ||||||
| @@ -2,7 +2,7 @@ | |||||||
| {% block body %} | {% block body %} | ||||||
| {% if g.user.show_detail_random() %} | {% if g.user.show_detail_random() %} | ||||||
| <div class="discover"> | <div class="discover"> | ||||||
|   <h2>{{_('Discover (Random Books)')}}</h2> |   <h2 class="random-books">{{_('Discover (Random Books)')}}</h2> | ||||||
|   <div class="row"> |   <div class="row"> | ||||||
|  |  | ||||||
|     {% for entry in random %} |     {% for entry in random %} | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ | |||||||
|     <link href="{{ url_for('static', filename='css/libs/bootstrap.min.css') }}" rel="stylesheet" media="screen"> |     <link href="{{ url_for('static', filename='css/libs/bootstrap.min.css') }}" rel="stylesheet" media="screen"> | ||||||
|     <link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet" media="screen"> |     <link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet" media="screen"> | ||||||
|     {% if g.user.get_theme == 1 %} |     {% if g.user.get_theme == 1 %} | ||||||
|        <link href="{{ url_for('static', filename='css/caliBlur-style.css') }}" rel="stylesheet" media="screen"> |        <link href="{{ url_for('static', filename='css/caliBlur.min.css') }}" rel="stylesheet" media="screen"> | ||||||
|     {% endif %} |     {% endif %} | ||||||
|     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> |     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||||||
|     <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> |     <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | ||||||
| @@ -67,7 +67,7 @@ | |||||||
|                   </li> |                   </li> | ||||||
|                 {% endif %} |                 {% endif %} | ||||||
|               {% endif %} |               {% endif %} | ||||||
|               {% if g.user.role_admin() %} |               {% if not g.user.is_anonymous %} | ||||||
|                 <li><a id="top_tasks" href="{{url_for('get_tasks_status')}}"><span class="glyphicon glyphicon-tasks"></span><span class="hidden-sm"> {{_('Tasks')}}</span></a></li> |                 <li><a id="top_tasks" href="{{url_for('get_tasks_status')}}"><span class="glyphicon glyphicon-tasks"></span><span class="hidden-sm"> {{_('Tasks')}}</span></a></li> | ||||||
|               {% endif %} |               {% endif %} | ||||||
|               {% if g.user.role_admin() %} |               {% if g.user.role_admin() %} | ||||||
| @@ -240,6 +240,11 @@ | |||||||
|     <script src="{{ url_for('static', filename='js/libs/plugins.js') }}"></script> |     <script src="{{ url_for('static', filename='js/libs/plugins.js') }}"></script> | ||||||
|     <script src="{{ url_for('static', filename='js/libs/jquery.form.js') }}"></script> |     <script src="{{ url_for('static', filename='js/libs/jquery.form.js') }}"></script> | ||||||
|     <script src="{{ url_for('static', filename='js/main.js') }}"></script> |     <script src="{{ url_for('static', filename='js/main.js') }}"></script> | ||||||
|  |     {% if g.user.get_theme == 1 %} | ||||||
|  |       <!--script src="{{ url_for('static', filename='js/libs/compromise.min.js') }}"></script> | ||||||
|  |       <script src="{{ url_for('static', filename='js/libs/readmore.min.js') }}"></script--> | ||||||
|  |       <script src="{{ url_for('static', filename='js/caliBlur.js') }}"></script> | ||||||
|  |     {% endif %} | ||||||
|     <script type="text/javascript"> |     <script type="text/javascript"> | ||||||
|     $(function () { |     $(function () { | ||||||
|       $("#btn-upload").change(function () { |       $("#btn-upload").change(function () { | ||||||
|   | |||||||
| @@ -113,7 +113,7 @@ current_milli_time = lambda: int(round(time.time() * 1000)) | |||||||
| gdrive_watch_callback_token = 'target=calibreweb-watch_files' | gdrive_watch_callback_token = 'target=calibreweb-watch_files' | ||||||
| EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', | EXTENSIONS_UPLOAD = {'txt', 'pdf', 'epub', 'mobi', 'azw', 'azw3', 'cbr', 'cbz', 'cbt', 'djvu', 'prc', 'doc', 'docx', | ||||||
|                       'fb2', 'html', 'rtf', 'odt'} |                       'fb2', 'html', 'rtf', 'odt'} | ||||||
| EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'html', 'rtf', 'odt'} | EXTENSIONS_CONVERT = {'pdf', 'epub', 'mobi', 'azw3', 'docx', 'rtf', 'fb2', 'lit', 'lrf', 'txt', 'htmlz'} | ||||||
|  |  | ||||||
|  |  | ||||||
| # Main code | # Main code | ||||||
| @@ -3186,9 +3186,9 @@ def new_user(): | |||||||
|         if "upload_role" in to_save: |         if "upload_role" in to_save: | ||||||
|             content.role = content.role + ub.ROLE_UPLOAD |             content.role = content.role + ub.ROLE_UPLOAD | ||||||
|         if "edit_role" in to_save: |         if "edit_role" in to_save: | ||||||
|             content.role = content.role + ub.ROLE_DELETE_BOOKS |  | ||||||
|         if "delete_role" in to_save: |  | ||||||
|             content.role = content.role + ub.ROLE_EDIT |             content.role = content.role + ub.ROLE_EDIT | ||||||
|  |         if "delete_role" in to_save: | ||||||
|  |             content.role = content.role + ub.ROLE_DELETE_BOOKS | ||||||
|         if "passwd_role" in to_save: |         if "passwd_role" in to_save: | ||||||
|             content.role = content.role + ub.ROLE_PASSWD |             content.role = content.role + ub.ROLE_PASSWD | ||||||
|         if "edit_shelf_role" in to_save: |         if "edit_shelf_role" in to_save: | ||||||
| @@ -3236,7 +3236,6 @@ def edit_mailsettings(): | |||||||
|         content.mail_use_ssl = int(to_save["mail_use_ssl"]) |         content.mail_use_ssl = int(to_save["mail_use_ssl"]) | ||||||
|         try: |         try: | ||||||
|             ub.session.commit() |             ub.session.commit() | ||||||
|             flash(_(u"E-mail server settings updated"), category="success") |  | ||||||
|         except Exception as e: |         except Exception as e: | ||||||
|             flash(e, category="error") |             flash(e, category="error") | ||||||
|         if "test" in to_save and to_save["test"]: |         if "test" in to_save and to_save["test"]: | ||||||
|   | |||||||
| @@ -99,7 +99,7 @@ class emailbase(): | |||||||
|     def send(self, strg): |     def send(self, strg): | ||||||
|         """Send `strg' to the server.""" |         """Send `strg' to the server.""" | ||||||
|         if self.debuglevel > 0: |         if self.debuglevel > 0: | ||||||
|             print('send:', repr(strg), file=sys.stderr) |             print('send:', repr(strg[:300]), file=sys.stderr) | ||||||
|         if hasattr(self, 'sock') and self.sock: |         if hasattr(self, 'sock') and self.sock: | ||||||
|             try: |             try: | ||||||
|                 if self.transferSize: |                 if self.transferSize: | ||||||
| @@ -278,7 +278,9 @@ class WorkerThread(threading.Thread): | |||||||
|                     command = [web.ub.config.config_converterpath, (file_path + format_old_ext), |                     command = [web.ub.config.config_converterpath, (file_path + format_old_ext), | ||||||
|                                (file_path + format_new_ext)] |                                (file_path + format_new_ext)] | ||||||
|                     if web.ub.config.config_calibre: |                     if web.ub.config.config_calibre: | ||||||
|                         command.append(web.ub.config.config_calibre) |                         parameters = web.ub.config.config_calibre.split(" ") | ||||||
|  |                         for param in parameters: | ||||||
|  |                             command.append(param) | ||||||
|                     if sys.version_info < (3, 0): |                     if sys.version_info < (3, 0): | ||||||
|                         command = [x.encode(sys.getfilesystemencoding()) for x in command] |                         command = [x.encode(sys.getfilesystemencoding()) for x in command] | ||||||
|  |  | ||||||
|   | |||||||
| @@ -32,15 +32,15 @@ | |||||||
|  |  | ||||||
| <div id='header_parameters' class='row text-center report-parameters'> | <div id='header_parameters' class='row text-center report-parameters'> | ||||||
|     <div class="col-xs-6 col-md-4"> |     <div class="col-xs-6 col-md-4"> | ||||||
|         <p class='text-justify attribute'><strong>Start Time:</strong> 2018-11-25 12:57:57.569980</p> |         <p class='text-justify attribute'><strong>Start Time:</strong> 2018-12-23 15:44:21.732315</p> | ||||||
|  |  | ||||||
|     </div> |     </div> | ||||||
|     <div class="col-xs-6 col-md-4"> |     <div class="col-xs-6 col-md-4"> | ||||||
|         <p class='text-justify attribute'><strong>Stop Time:</strong> 2018-11-25 13:16:06.314449</p> |         <p class='text-justify attribute'><strong>Stop Time:</strong> 2018-12-23 16:05:34.967181</p> | ||||||
|  |  | ||||||
|     </div> |     </div> | ||||||
|     <div class="col-xs-6 col-md-4"> |     <div class="col-xs-6 col-md-4"> | ||||||
|         <p class='text-justify attribute'><strong>Duration:</strong> 0:18:08.744469</p> |         <p class='text-justify attribute'><strong>Duration:</strong> 0:21:13.234866</p> | ||||||
|  |  | ||||||
|     </div> |     </div> | ||||||
| </div> | </div> | ||||||
| @@ -1556,86 +1556,70 @@ AssertionError: 'The camicdemo' != '\n          '</pre> | |||||||
| </tr> | </tr> | ||||||
| <tr class='skipClass'> | <tr class='skipClass'> | ||||||
|     <td>test_ebook_convert.test_ebook_convert</td> |     <td>test_ebook_convert.test_ebook_convert</td> | ||||||
|     <td class="text-center">12</td> |  | ||||||
|     <td class="text-center">1</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">11</td> |     <td class="text-center">11</td> | ||||||
|  |     <td class="text-center">7</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">4</td> | ||||||
|     <td class="text-center"> |     <td class="text-center"> | ||||||
|         <a onclick="showClassDetail('c8', 12)">Detail</a> |         <a onclick="showClassDetail('c8', 11)">Detail</a> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.1' class='none bg-warning'> | <tr id='pt8.1' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_SSL_smtp_setup_error</div> |         <div class='testcase'>test_SSL_smtp_setup_error</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.1')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt8.1')">PASS</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st8.1' class="popup_window test_output" style="display:none;"> |         <div id='div_pt8.1' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st8.1').style.display='none'"><span |                         onclick="document.getElementById('div_pt8.1').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.1').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt8.1').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st8.1: Not Implemented</pre> |                 <pre class="text-left">pt8.1: Received: EHLO | ||||||
|  | Received: AUTH | ||||||
|  | User: name@host.com, Password: 1234</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.2' class='none bg-warning'> | <tr id='pt8.2' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_STARTTLS_smtp_setup_error</div> |         <div class='testcase'>test_STARTTLS_smtp_setup_error</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.2')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt8.2')">PASS</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st8.2' class="popup_window test_output" style="display:none;"> |         <div id='div_pt8.2' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st8.2').style.display='none'"><span |                         onclick="document.getElementById('div_pt8.2').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.2').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt8.2').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st8.2: Not Implemented</pre> |                 <pre class="text-left">pt8.2: Received: EHLO</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.3' class='none bg-warning'> | <tr id='pt8.3' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_convert_deactivate</div> |         <div class='testcase'>test_convert_deactivate</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6' align='center'>PASS</td> | ||||||
|         <div class="text-center"> |  | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.3')">SKIP</a> |  | ||||||
|         </div> |  | ||||||
|         <!--css div popup start--> |  | ||||||
|         <div id='div_st8.3' class="popup_window test_output" style="display:none;"> |  | ||||||
|             <div class='close_button pull-right'> |  | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |  | ||||||
|                         onclick="document.getElementById('div_st8.3').style.display='none'"><span |  | ||||||
|                         aria-hidden="true">×</span></button> |  | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.3').style.display='none'">[x]</a>--> |  | ||||||
|             </div> |  | ||||||
|             <div class="text-left pull-left"> |  | ||||||
|                 <pre class="text-left">st8.3: Not Implemented</pre> |  | ||||||
|             </div> |  | ||||||
|             <div class="clearfix"></div> |  | ||||||
|         </div> |  | ||||||
|         <!--css div popup end--> |  | ||||||
|     </td> |  | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.4' class='none bg-warning'> | <tr id='st8.4' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
| @@ -1685,29 +1669,11 @@ AssertionError: 'The camicdemo' != '\n          '</pre> | |||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.6' class='none bg-warning'> | <tr id='pt8.6' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_convert_only</div> |         <div class='testcase'>test_convert_only</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6' align='center'>PASS</td> | ||||||
|         <div class="text-center"> |  | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.6')">SKIP</a> |  | ||||||
|         </div> |  | ||||||
|         <!--css div popup start--> |  | ||||||
|         <div id='div_st8.6' class="popup_window test_output" style="display:none;"> |  | ||||||
|             <div class='close_button pull-right'> |  | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |  | ||||||
|                         onclick="document.getElementById('div_st8.6').style.display='none'"><span |  | ||||||
|                         aria-hidden="true">×</span></button> |  | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.6').style.display='none'">[x]</a>--> |  | ||||||
|             </div> |  | ||||||
|             <div class="text-left pull-left"> |  | ||||||
|                 <pre class="text-left">st8.6: Not Implemented</pre> |  | ||||||
|             </div> |  | ||||||
|             <div class="clearfix"></div> |  | ||||||
|         </div> |  | ||||||
|         <!--css div popup end--> |  | ||||||
|     </td> |  | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.7' class='none bg-warning'> | <tr id='st8.7' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
| @@ -1739,48 +1705,69 @@ AssertionError: 'The camicdemo' != '\n          '</pre> | |||||||
|     </td> |     </td> | ||||||
|     <td colspan='6' align='center'>PASS</td> |     <td colspan='6' align='center'>PASS</td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.9' class='none bg-warning'> | <tr id='pt8.9' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_email_failed</div> |         <div class='testcase'>test_email_failed</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.9')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt8.9')">PASS</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st8.9' class="popup_window test_output" style="display:none;"> |         <div id='div_pt8.9' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st8.9').style.display='none'"><span |                         onclick="document.getElementById('div_pt8.9').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.9').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt8.9').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st8.9: Not Implemented</pre> |                 <pre class="text-left">pt8.9: Received: EHLO</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.10' class='none bg-warning'> | <tr id='pt8.10' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_email_only</div> |         <div class='testcase'>test_email_only</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.10')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt8.10')">PASS</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st8.10' class="popup_window test_output" style="display:none;"> |         <div id='div_pt8.10' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st8.10').style.display='none'"><span |                         onclick="document.getElementById('div_pt8.10').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.10').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt8.10').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st8.10: Not Implemented</pre> |                 <pre class="text-left">pt8.10: Received: EHLO | ||||||
|  | Received: AUTH | ||||||
|  | User: name@host.com, Password: 10234 | ||||||
|  | Received: MAIL | ||||||
|  | Received: RCPT | ||||||
|  | Received: DATA | ||||||
|  | ('Receiving message from:', ('127.0.0.1', 44494)) | ||||||
|  | ('Message addressed from:', '<name@host.com> size=506') | ||||||
|  | ('Message addressed to  :', ['a1@b.com']) | ||||||
|  | ('Message length        :', 505) | ||||||
|  | Received: QUIT | ||||||
|  | Received: EHLO | ||||||
|  | Received: AUTH | ||||||
|  | User: name@host.com, Password: 10234 | ||||||
|  | Received: MAIL | ||||||
|  | Received: RCPT | ||||||
|  | Received: DATA | ||||||
|  | ('Receiving message from:', ('127.0.0.1', 44496)) | ||||||
|  | ('Message addressed from:', '<name@host.com> size=30782') | ||||||
|  | ('Message addressed to  :', ['a1@b.com']) | ||||||
|  | ('Message length        :', 30781) | ||||||
|  | Received: QUIT</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
| @@ -1811,93 +1798,186 @@ AssertionError: 'The camicdemo' != '\n          '</pre> | |||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st8.12' class='none bg-warning'> | <tr class='passClass'> | ||||||
|  |     <td>test_email_ssl.test_SSL</td> | ||||||
|  |     <td class="text-center">3</td> | ||||||
|  |     <td class="text-center">3</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center"> | ||||||
|  |         <a onclick="showClassDetail('c9', 3)">Detail</a> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt9.1' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_smtp_setup_error</div> |         <div class='testcase'>test_SSL_None_setup_error</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st8.12')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt9.1')">PASS</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st8.12' class="popup_window test_output" style="display:none;"> |         <div id='div_pt9.1' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st8.12').style.display='none'"><span |                         onclick="document.getElementById('div_pt9.1').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st8.12').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt9.1').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st8.12: Not Implemented</pre> |                 <pre class="text-left">pt9.1: Received: EHLO | ||||||
|  | Received: AUTH | ||||||
|  | User: name@host.com, Password: 10234 | ||||||
|  | Received: MAIL | ||||||
|  | Received: RCPT | ||||||
|  | Received: DATA | ||||||
|  | ('Receiving message from:', ('127.0.0.1', 40336)) | ||||||
|  | ('Message addressed from:', '<name@host.com> size=506') | ||||||
|  | ('Message addressed to  :', ['a1@b.com']) | ||||||
|  | ('Message length        :', 505) | ||||||
|  | Received: QUIT</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr class='failClass'> |  | ||||||
|     <td>test_login.test_login</td> |  | ||||||
|     <td class="text-center">6</td> |  | ||||||
|     <td class="text-center">5</td> |  | ||||||
|     <td class="text-center">1</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center"> |  | ||||||
|         <a onclick="showClassDetail('c9', 6)">Detail</a> |  | ||||||
|     </td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt9.1' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_login_capital_letters_user_unicode_password_passwort</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt9.2' class='hiddenRow bg-success'> | <tr id='pt9.2' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_login_delete_admin</div> |         <div class='testcase'>test_SSL_STARTTLS_setup_error</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6' align='center'>PASS</td> |     <td colspan='6' align='center'>PASS</td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt9.3' class='hiddenRow bg-success'> | <tr id='pt9.3' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_login_empty_password</div> |         <div class='testcase'>test_SSL_only</div> | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='ft9.4' class='none bg-danger'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_login_protected</div> |  | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_ft9.4')">FAIL</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt9.3')">PASS</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_ft9.4' class="popup_window test_output" style="display:none;"> |         <div id='div_pt9.3' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_ft9.4').style.display='none'"><span |                         onclick="document.getElementById('div_pt9.3').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_ft9.4').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt9.3').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">ft9.4: Traceback (most recent call last): |                 <pre class="text-left">pt9.3: Received: EHLO | ||||||
|   File "/home/matthias/Entwicklung/calibre-web-test/test/test_login.py", line 81, in test_login_protected | Received: AUTH | ||||||
|     self.assertTrue(self.fail_access_page("http://127.0.0.1:8083/config")) | User: name@host.com, Password: 10234 | ||||||
| AssertionError: False is not true</pre> | Received: MAIL | ||||||
|  | Received: RCPT | ||||||
|  | Received: DATA | ||||||
|  | ('Receiving message from:', ('127.0.0.1', 40346)) | ||||||
|  | ('Message addressed from:', '<name@host.com> size=30377') | ||||||
|  | ('Message addressed to  :', ['a1@b.com']) | ||||||
|  | ('Message length        :', 30376) | ||||||
|  | Received: QUIT</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt9.5' class='hiddenRow bg-success'> | <tr class='passClass'> | ||||||
|  |     <td>test_email_STARTTLS.test_STARTTLS</td> | ||||||
|  |     <td class="text-center">2</td> | ||||||
|  |     <td class="text-center">2</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center"> | ||||||
|  |         <a onclick="showClassDetail('c10', 2)">Detail</a> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt10.1' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_STARTTLS</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6'> | ||||||
|  |         <div class="text-center"> | ||||||
|  |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_pt10.1')">PASS</a> | ||||||
|  |         </div> | ||||||
|  |         <!--css div popup start--> | ||||||
|  |         <div id='div_pt10.1' class="popup_window test_output" style="display:none;"> | ||||||
|  |             <div class='close_button pull-right'> | ||||||
|  |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|  |                         onclick="document.getElementById('div_pt10.1').style.display='none'"><span | ||||||
|  |                         aria-hidden="true">×</span></button> | ||||||
|  |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_pt10.1').style.display='none'">[x]</a>--> | ||||||
|  |             </div> | ||||||
|  |             <div class="text-left pull-left"> | ||||||
|  |                 <pre class="text-left">pt10.1: Received: EHLO | ||||||
|  | Received: STARTTLS | ||||||
|  | Received: EHLO | ||||||
|  | Received: AUTH | ||||||
|  | User: name@host.com, Password: 10234 | ||||||
|  | Received: MAIL | ||||||
|  | Received: RCPT | ||||||
|  | Received: DATA | ||||||
|  | ('Receiving message from:', ('127.0.0.1', 59880)) | ||||||
|  | ('Message addressed from:', '<name@host.com> size=30377') | ||||||
|  | ('Message addressed to  :', ['a1@b.com']) | ||||||
|  | ('Message length        :', 30376) | ||||||
|  | Received: QUIT</pre> | ||||||
|  |             </div> | ||||||
|  |             <div class="clearfix"></div> | ||||||
|  |         </div> | ||||||
|  |         <!--css div popup end--> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt10.2' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_STARTTLS_SSL_setup_error</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr class='passClass'> | ||||||
|  |     <td>test_login.test_login</td> | ||||||
|  |     <td class="text-center">6</td> | ||||||
|  |     <td class="text-center">6</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center"> | ||||||
|  |         <a onclick="showClassDetail('c11', 6)">Detail</a> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt11.1' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_login_capital_letters_user_unicode_password_passwort</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt11.2' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_login_delete_admin</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt11.3' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_login_empty_password</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt11.4' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_login_protected</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt11.5' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_login_unicode_user_space_end_passwort</div> |         <div class='testcase'>test_login_unicode_user_space_end_passwort</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6' align='center'>PASS</td> |     <td colspan='6' align='center'>PASS</td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt9.6' class='hiddenRow bg-success'> | <tr id='pt11.6' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_login_user_with_space_passwort_end_space</div> |         <div class='testcase'>test_login_user_with_space_passwort_end_space</div> | ||||||
|     </td> |     </td> | ||||||
| @@ -1911,27 +1991,27 @@ AssertionError: False is not true</pre> | |||||||
|     <td class="text-center">0</td> |     <td class="text-center">0</td> | ||||||
|     <td class="text-center">1</td> |     <td class="text-center">1</td> | ||||||
|     <td class="text-center"> |     <td class="text-center"> | ||||||
|         <a onclick="showClassDetail('c10', 1)">Detail</a> |         <a onclick="showClassDetail('c12', 1)">Detail</a> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st10.1' class='none bg-warning'> | <tr id='st12.1' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_opds</div> |         <div class='testcase'>test_opds</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st10.1')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st12.1')">SKIP</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st10.1' class="popup_window test_output" style="display:none;"> |         <div id='div_st12.1' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st10.1').style.display='none'"><span |                         onclick="document.getElementById('div_st12.1').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st10.1').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st12.1').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st10.1: Not Implemented</pre> |                 <pre class="text-left">st12.1: Not Implemented</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
| @@ -1946,136 +2026,12 @@ AssertionError: False is not true</pre> | |||||||
|     <td class="text-center">0</td> |     <td class="text-center">0</td> | ||||||
|     <td class="text-center">1</td> |     <td class="text-center">1</td> | ||||||
|     <td class="text-center"> |     <td class="text-center"> | ||||||
|         <a onclick="showClassDetail('c11', 1)">Detail</a> |         <a onclick="showClassDetail('c13', 1)">Detail</a> | ||||||
|     </td> |  | ||||||
| </tr> |  | ||||||
| <tr id='st11.1' class='none bg-warning'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_updater</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6'> |  | ||||||
|         <div class="text-center"> |  | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st11.1')">SKIP</a> |  | ||||||
|         </div> |  | ||||||
|         <!--css div popup start--> |  | ||||||
|         <div id='div_st11.1' class="popup_window test_output" style="display:none;"> |  | ||||||
|             <div class='close_button pull-right'> |  | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |  | ||||||
|                         onclick="document.getElementById('div_st11.1').style.display='none'"><span |  | ||||||
|                         aria-hidden="true">×</span></button> |  | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st11.1').style.display='none'">[x]</a>--> |  | ||||||
|             </div> |  | ||||||
|             <div class="text-left pull-left"> |  | ||||||
|                 <pre class="text-left">st11.1: Not Implemented</pre> |  | ||||||
|             </div> |  | ||||||
|             <div class="clearfix"></div> |  | ||||||
|         </div> |  | ||||||
|         <!--css div popup end--> |  | ||||||
|     </td> |  | ||||||
| </tr> |  | ||||||
| <tr class='passClass'> |  | ||||||
|     <td>test_helper.calibre_helper</td> |  | ||||||
|     <td class="text-center">13</td> |  | ||||||
|     <td class="text-center">13</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center"> |  | ||||||
|         <a onclick="showClassDetail('c12', 13)">Detail</a> |  | ||||||
|     </td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.1' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_author_sort</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.2' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_author_sort_comma</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.3' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_author_sort_junior</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.4' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_author_sort_oneword</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.5' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_author_sort_roman</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.6' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_Limit_Length</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.7' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_char_replacement</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.8' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_chinese_Characters</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.9' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_degEUR_replacement</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.10' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_doubleS</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.11' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_finish_Dot</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.12' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_high23</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr id='pt12.13' class='hiddenRow bg-success'> |  | ||||||
|     <td> |  | ||||||
|         <div class='testcase'>test_check_umlauts</div> |  | ||||||
|     </td> |  | ||||||
|     <td colspan='6' align='center'>PASS</td> |  | ||||||
| </tr> |  | ||||||
| <tr class='skipClass'> |  | ||||||
|     <td>test_register.test_register</td> |  | ||||||
|     <td class="text-center">4</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">0</td> |  | ||||||
|     <td class="text-center">4</td> |  | ||||||
|     <td class="text-center"> |  | ||||||
|         <a onclick="showClassDetail('c13', 4)">Detail</a> |  | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st13.1' class='none bg-warning'> | <tr id='st13.1' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_login_with_password</div> |         <div class='testcase'>test_updater</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
| @@ -2097,72 +2053,196 @@ AssertionError: False is not true</pre> | |||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st13.2' class='none bg-warning'> | <tr class='passClass'> | ||||||
|  |     <td>test_helper.calibre_helper</td> | ||||||
|  |     <td class="text-center">13</td> | ||||||
|  |     <td class="text-center">13</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center"> | ||||||
|  |         <a onclick="showClassDetail('c14', 13)">Detail</a> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.1' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_author_sort</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.2' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_author_sort_comma</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.3' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_author_sort_junior</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.4' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_author_sort_oneword</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.5' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_author_sort_roman</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.6' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_Limit_Length</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.7' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_char_replacement</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.8' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_chinese_Characters</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.9' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_degEUR_replacement</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.10' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_doubleS</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.11' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_finish_Dot</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.12' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_high23</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr id='pt14.13' class='hiddenRow bg-success'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_check_umlauts</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6' align='center'>PASS</td> | ||||||
|  | </tr> | ||||||
|  | <tr class='skipClass'> | ||||||
|  |     <td>test_register.test_register</td> | ||||||
|  |     <td class="text-center">4</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">0</td> | ||||||
|  |     <td class="text-center">4</td> | ||||||
|  |     <td class="text-center"> | ||||||
|  |         <a onclick="showClassDetail('c15', 4)">Detail</a> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='st15.1' class='none bg-warning'> | ||||||
|  |     <td> | ||||||
|  |         <div class='testcase'>test_login_with_password</div> | ||||||
|  |     </td> | ||||||
|  |     <td colspan='6'> | ||||||
|  |         <div class="text-center"> | ||||||
|  |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st15.1')">SKIP</a> | ||||||
|  |         </div> | ||||||
|  |         <!--css div popup start--> | ||||||
|  |         <div id='div_st15.1' class="popup_window test_output" style="display:none;"> | ||||||
|  |             <div class='close_button pull-right'> | ||||||
|  |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|  |                         onclick="document.getElementById('div_st15.1').style.display='none'"><span | ||||||
|  |                         aria-hidden="true">×</span></button> | ||||||
|  |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st15.1').style.display='none'">[x]</a>--> | ||||||
|  |             </div> | ||||||
|  |             <div class="text-left pull-left"> | ||||||
|  |                 <pre class="text-left">st15.1: Not Implemented</pre> | ||||||
|  |             </div> | ||||||
|  |             <div class="clearfix"></div> | ||||||
|  |         </div> | ||||||
|  |         <!--css div popup end--> | ||||||
|  |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr id='st15.2' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_registering_user</div> |         <div class='testcase'>test_registering_user</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st13.2')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st15.2')">SKIP</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st13.2' class="popup_window test_output" style="display:none;"> |         <div id='div_st15.2' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st13.2').style.display='none'"><span |                         onclick="document.getElementById('div_st15.2').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st13.2').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st15.2').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st13.2: Not Implemented</pre> |                 <pre class="text-left">st15.2: Not Implemented</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st13.3' class='none bg-warning'> | <tr id='st15.3' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_registering_user_fail</div> |         <div class='testcase'>test_registering_user_fail</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st13.3')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st15.3')">SKIP</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st13.3' class="popup_window test_output" style="display:none;"> |         <div id='div_st15.3' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st13.3').style.display='none'"><span |                         onclick="document.getElementById('div_st15.3').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st13.3').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st15.3').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st13.3: Not Implemented</pre> |                 <pre class="text-left">st15.3: Not Implemented</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup end--> |         <!--css div popup end--> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='st13.4' class='none bg-warning'> | <tr id='st15.4' class='none bg-warning'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_resend_password</div> |         <div class='testcase'>test_resend_password</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6'> |     <td colspan='6'> | ||||||
|         <div class="text-center"> |         <div class="text-center"> | ||||||
|             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st13.4')">SKIP</a> |             <a class="popup_link text-center" onfocus='blur()' onclick="showTestDetail('div_st15.4')">SKIP</a> | ||||||
|         </div> |         </div> | ||||||
|         <!--css div popup start--> |         <!--css div popup start--> | ||||||
|         <div id='div_st13.4' class="popup_window test_output" style="display:none;"> |         <div id='div_st15.4' class="popup_window test_output" style="display:none;"> | ||||||
|             <div class='close_button pull-right'> |             <div class='close_button pull-right'> | ||||||
|                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' |                 <button type="button" class="close" aria-label="Close" onfocus='this.blur();' | ||||||
|                         onclick="document.getElementById('div_st13.4').style.display='none'"><span |                         onclick="document.getElementById('div_st15.4').style.display='none'"><span | ||||||
|                         aria-hidden="true">×</span></button> |                         aria-hidden="true">×</span></button> | ||||||
|                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st13.4').style.display='none'">[x]</a>--> |                 <!--<a onfocus='this.blur();' onclick="document.getElementById('div_st15.4').style.display='none'">[x]</a>--> | ||||||
|             </div> |             </div> | ||||||
|             <div class="text-left pull-left"> |             <div class="text-left pull-left"> | ||||||
|                 <pre class="text-left">st13.4: Not Implemented</pre> |                 <pre class="text-left">st15.4: Not Implemented</pre> | ||||||
|             </div> |             </div> | ||||||
|             <div class="clearfix"></div> |             <div class="clearfix"></div> | ||||||
|         </div> |         </div> | ||||||
| @@ -2177,28 +2257,28 @@ AssertionError: False is not true</pre> | |||||||
|     <td class="text-center">0</td> |     <td class="text-center">0</td> | ||||||
|     <td class="text-center">0</td> |     <td class="text-center">0</td> | ||||||
|     <td class="text-center"> |     <td class="text-center"> | ||||||
|         <a onclick="showClassDetail('c14', 4)">Detail</a> |         <a onclick="showClassDetail('c16', 4)">Detail</a> | ||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt14.1' class='hiddenRow bg-success'> | <tr id='pt16.1' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_cli_SSL_files</div> |         <div class='testcase'>test_cli_SSL_files</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6' align='center'>PASS</td> |     <td colspan='6' align='center'>PASS</td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt14.2' class='hiddenRow bg-success'> | <tr id='pt16.2' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_cli_different_folder</div> |         <div class='testcase'>test_cli_different_folder</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6' align='center'>PASS</td> |     <td colspan='6' align='center'>PASS</td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt14.3' class='hiddenRow bg-success'> | <tr id='pt16.3' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_cli_different_settings_database</div> |         <div class='testcase'>test_cli_different_settings_database</div> | ||||||
|     </td> |     </td> | ||||||
|     <td colspan='6' align='center'>PASS</td> |     <td colspan='6' align='center'>PASS</td> | ||||||
| </tr> | </tr> | ||||||
| <tr id='pt14.4' class='hiddenRow bg-success'> | <tr id='pt16.4' class='hiddenRow bg-success'> | ||||||
|     <td> |     <td> | ||||||
|         <div class='testcase'>test_environ_port_setting</div> |         <div class='testcase'>test_environ_port_setting</div> | ||||||
|     </td> |     </td> | ||||||
| @@ -2207,17 +2287,17 @@ AssertionError: False is not true</pre> | |||||||
|  |  | ||||||
|     <tr id='total_row' class="text-center bg-grey"> |     <tr id='total_row' class="text-center bg-grey"> | ||||||
|         <td>Total</td> |         <td>Total</td> | ||||||
|         <td>129</td> |         <td>133</td> | ||||||
|         <td>64</td> |         <td>76</td> | ||||||
|         <td>5</td> |         <td>4</td> | ||||||
|         <td>0</td> |         <td>0</td> | ||||||
|         <td>60</td> |         <td>53</td> | ||||||
|         <td> </td> |         <td> </td> | ||||||
|     </tr> |     </tr> | ||||||
| </table> | </table> | ||||||
|  |  | ||||||
| <script> | <script> | ||||||
|     drawCircle(64, 5, 0, 60); |     drawCircle(76, 4, 0, 53); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ozzieisaacs
					Ozzieisaacs