diff --git a/cps/admin.py b/cps/admin.py index d80c1767..3b6a846f 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -253,23 +253,23 @@ def list_domain(allow): response.headers["Content-Type"] = "application/json; charset=utf-8" return response -@admi.route("/ajax/editrestriction/", methods=['POST']) +@admi.route("/ajax/editrestriction/", methods=['POST']) @login_required @admin_required -def edit_restriction(type): +def edit_restriction(res_type): element = request.form.to_dict() if element['id'].startswith('a'): - if type == 0: # Tags as template + if res_type == 0: # Tags as template elementlist = config.list_allowed_tags() elementlist[int(element['id'][1:])]=element['Element'] config.config_allowed_tags = ','.join(elementlist) config.save() - if type == 1: # CustomC + if res_type == 1: # CustomC elementlist = config.list_allowed_column_values() elementlist[int(element['id'][1:])]=element['Element'] config.config_allowed_column_value = ','.join(elementlist) config.save() - if type == 2: # Tags per user + if res_type == 2: # Tags per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -279,7 +279,7 @@ def edit_restriction(type): elementlist[int(element['id'][1:])]=element['Element'] usr.allowed_tags = ','.join(elementlist) ub.session.commit() - if type == 3: # CColumn per user + if res_type == 3: # CColumn per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -290,18 +290,17 @@ def edit_restriction(type): usr.allowed_column_value = ','.join(elementlist) ub.session.commit() if element['id'].startswith('d'): - if type == 0: # Tags as template + if res_type == 0: # Tags as template elementlist = config.list_denied_tags() elementlist[int(element['id'][1:])]=element['Element'] config.config_denied_tags = ','.join(elementlist) config.save() - if type == 1: # CustomC + if res_type == 1: # CustomC elementlist = config.list_denied_column_values() elementlist[int(element['id'][1:])]=element['Element'] config.config_denied_column_value = ','.join(elementlist) config.save() - pass - if type == 2: # Tags per user + if res_type == 2: # Tags per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -311,7 +310,7 @@ def edit_restriction(type): elementlist[int(element['id'][1:])]=element['Element'] usr.denied_tags = ','.join(elementlist) ub.session.commit() - if type == 3: # CColumn per user + if res_type == 3: # CColumn per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -339,26 +338,26 @@ def restriction_deletion(element, list_func): return ','.join(elementlist) -@admi.route("/ajax/addrestriction/", methods=['POST']) +@admi.route("/ajax/addrestriction/", methods=['POST']) @login_required @admin_required -def add_restriction(type): +def add_restriction(res_type): element = request.form.to_dict() - if type == 0: # Tags as template + if res_type == 0: # Tags as template if 'submit_allow' in element: config.config_allowed_tags = restriction_addition(element, config.list_allowed_tags) config.save() elif 'submit_deny' in element: config.config_denied_tags = restriction_addition(element, config.list_denied_tags) config.save() - if type == 1: # CCustom as template + if res_type == 1: # CCustom as template if 'submit_allow' in element: config.config_allowed_column_value = restriction_addition(element, config.list_denied_column_values) config.save() elif 'submit_deny' in element: config.config_denied_column_value = restriction_addition(element, config.list_allowed_column_values) config.save() - if type == 2: # Tags per user + if res_type == 2: # Tags per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -370,7 +369,7 @@ def add_restriction(type): elif 'submit_deny' in element: usr.denied_tags = restriction_addition(element, usr.list_denied_tags) ub.session.commit() - if type == 3: # CustomC per user + if res_type == 3: # CustomC per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -384,26 +383,26 @@ def add_restriction(type): ub.session.commit() return "" -@admi.route("/ajax/deleterestriction/", methods=['POST']) +@admi.route("/ajax/deleterestriction/", methods=['POST']) @login_required @admin_required -def delete_restriction(type): +def delete_restriction(res_type): element = request.form.to_dict() - if type == 0: # Tags as template + if res_type == 0: # Tags as template if element['id'].startswith('a'): config.config_allowed_tags = restriction_deletion(element, config.list_allowed_tags) config.save() elif element['id'].startswith('d'): config.config_denied_tags = restriction_deletion(element, config.list_denied_tags) config.save() - elif type == 1: # CustomC as template + elif res_type == 1: # CustomC as template if element['id'].startswith('a'): config.config_allowed_column_value = restriction_deletion(element, config.list_allowed_column_values) config.save() elif element['id'].startswith('d'): config.config_denied_column_value = restriction_deletion(element, config.list_denied_column_values) config.save() - elif type == 2: # Tags per user + elif res_type == 2: # Tags per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -415,7 +414,7 @@ def delete_restriction(type): elif element['id'].startswith('d'): usr.denied_tags = restriction_deletion(element, usr.list_denied_tags) ub.session.commit() - elif type == 3: # Columns per user + elif res_type == 3: # Columns per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: # select current user if admins are editing their own rights usr = ub.session.query(ub.User).filter(ub.User.id == int(usr_id)).first() @@ -431,23 +430,23 @@ def delete_restriction(type): #@admi.route("/ajax/listrestriction//", defaults={'user_id': '0'}) -@admi.route("/ajax/listrestriction/") +@admi.route("/ajax/listrestriction/") @login_required @admin_required -def list_restriction(type): - if type == 0: # Tags as template +def list_restriction(res_type): + if res_type == 0: # Tags as template restrict = [{'Element': x, 'type':_('Deny'), 'id': 'd'+str(i) } for i,x in enumerate(config.list_denied_tags()) if x != '' ] allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) } for i,x in enumerate(config.list_allowed_tags()) if x != ''] json_dumps = restrict + allow - elif type == 1: # CustomC as template + elif res_type == 1: # CustomC as template restrict = [{'Element': x, 'type':_('Deny'), 'id': 'd'+str(i) } for i,x in enumerate(config.list_denied_column_values()) if x != '' ] allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) } for i,x in enumerate(config.list_allowed_column_values()) if x != ''] json_dumps = restrict + allow - elif type == 2: # Tags per user + elif res_type == 2: # Tags per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id == usr_id).first() @@ -458,7 +457,7 @@ def list_restriction(type): allow = [{'Element': x, 'type':_('Allow'), 'id': 'a'+str(i) } for i,x in enumerate(usr.list_allowed_tags()) if x != ''] json_dumps = restrict + allow - elif type == 3: # CustomC per user + elif res_type == 3: # CustomC per user usr_id = os.path.split(request.referrer)[-1] if usr_id.isdigit() == True: usr = ub.session.query(ub.User).filter(ub.User.id==usr_id).first() diff --git a/cps/db.py b/cps/db.py index 966adbe5..8613d57b 100755 --- a/cps/db.py +++ b/cps/db.py @@ -418,7 +418,7 @@ def dispose(): except: pass if old_session.bind: try: old_session.bind.dispose() - except: pass + except Exception: pass for attr in list(Books.__dict__.keys()): if attr.startswith("custom_column_"): diff --git a/cps/helper.py b/cps/helper.py index 3cc3b61a..c66f9ba6 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -151,8 +151,6 @@ def check_send_to_kindle(entry): bookformats.append({'format':'Pdf','convert':0,'text':_('Send %(format)s to Kindle',format='Pdf')}) if 'AZW' in ele.format: bookformats.append({'format':'Azw','convert':0,'text':_('Send %(format)s to Kindle',format='Azw')}) - '''if 'AZW3' in ele.format: - bookformats.append({'format':'Azw3','convert':0,'text':_('Send %(format)s to Kindle',format='Azw3')})''' else: formats = list() for ele in iter(entry.data): @@ -514,12 +512,9 @@ def save_cover_from_filestorage(filepath, saved_filename, img): return False, _(u"Failed to create path for cover") try: img.save(os.path.join(filepath, saved_filename)) - except IOError: - log.error(u"Cover-file is not a valid image file") - return False, _(u"Cover-file is not a valid image file") - except OSError: - log.error(u"Failed to store cover-file") - return False, _(u"Failed to store cover-file") + except (IOError, OSError): + log.error(u"Cover-file is not a valid image file, or could not be stored") + return False, _(u"Cover-file is not a valid image file, or could not be stored") return True, None diff --git a/cps/kobo.py b/cps/kobo.py index f634f272..dcb2de44 100644 --- a/cps/kobo.py +++ b/cps/kobo.py @@ -21,7 +21,6 @@ import sys import base64 import os import uuid -from datetime import datetime from time import gmtime, strftime try: from urllib import unquote @@ -35,10 +34,9 @@ from flask import ( jsonify, current_app, url_for, - redirect, - abort + redirect ) -from flask_login import login_required + from werkzeug.datastructures import Headers from sqlalchemy import func import requests @@ -59,8 +57,8 @@ log = logger.create() def get_store_url_for_current_request(): # Programmatically modify the current url to point to the official Kobo store - base, sep, request_path_with_auth_token = request.full_path.rpartition("/kobo/") - auth_token, sep, request_path = request_path_with_auth_token.rstrip("?").partition( + __, __, request_path_with_auth_token = request.full_path.rpartition("/kobo/") + __, __, request_path = request_path_with_auth_token.rstrip("?").partition( "/" ) return KOBO_STOREAPI_URL + "/" + request_path diff --git a/cps/kobo_auth.py b/cps/kobo_auth.py index ed712980..7fa778cd 100644 --- a/cps/kobo_auth.py +++ b/cps/kobo_auth.py @@ -62,7 +62,6 @@ particular calls to non-Kobo specific endpoints such as the CalibreWeb book down from binascii import hexlify from datetime import datetime from os import urandom -import os from flask import g, Blueprint, url_for, abort, request from flask_login import login_user, login_required @@ -82,7 +81,7 @@ log = logger.create() def register_url_value_preprocessor(kobo): @kobo.url_value_preprocessor - def pop_auth_token(endpoint, values): + def pop_auth_token(__, values): g.auth_token = values.pop("auth_token") diff --git a/cps/static/css/kthoom.css b/cps/static/css/kthoom.css index d7668156..cc38740b 100644 --- a/cps/static/css/kthoom.css +++ b/cps/static/css/kthoom.css @@ -4,7 +4,7 @@ body { overflow-y: auto; color: white; font-family: sans-serif; - margin: 0px; + margin: 0; } #main { @@ -13,7 +13,7 @@ body { } .view { - padding-top:0px; + padding-top: 0; } #sidebar a, @@ -34,18 +34,18 @@ body { cursor: pointer; padding: 4px; - transition: all .2s ease; + transition: all 0.2s ease; } #sidebar a:hover, #sidebar a:focus { outline: none; - box-shadow: 0px 2px 8px 1px black; + box-shadow: 0 2px 8px 1px black; } #sidebar a.active, #sidebar a.active img + span { - background-color: #45B29D; + background-color: #45B29D; } #sidebar li img { @@ -79,7 +79,6 @@ body { font-size: 10px; line-height: 10px; text-align: right; - transition: min-height 150ms ease-in-out; } @@ -92,18 +91,17 @@ body { top: 0; left: 0; bottom: 0; - transition: width 150ms ease-in-out; } #progress .bar-load { color: #000; - background-color: #CCC; + background-color: #ccc; } #progress .bar-read { - color: #FFF; - background-color: #45B29D; + color: #fff; + background-color: #45b29d; } #progress .text { @@ -152,7 +150,8 @@ body { max-width: 70%; } -th, td { +th, +td { padding: 5px; } @@ -206,18 +205,17 @@ th { } .dark-theme #titlebar { - color: #DDD; + color: #ddd; } .dark-theme #titlebar a:active { - color: #FFF; + color: #fff; } .dark-theme #progress .bar-read { background-color: red; } - .dark-theme .overlay { - background-color: rgba(0,0,0,0.8); + background-color: rgba(0, 0, 0, 0.8); } diff --git a/cps/static/css/listen.css b/cps/static/css/listen.css index 0e34d163..d90e4260 100644 --- a/cps/static/css/listen.css +++ b/cps/static/css/listen.css @@ -1,92 +1,92 @@ .sm2-bar-ui { - font-size: 20px; - } - - .sm2-bar-ui.compact { - max-width: 90%; - } - - .sm2-progress .sm2-progress-ball { - width: .5333em; - height: 1.9333em; - border-radius: 0em; - } - - .sm2-progress .sm2-progress-track { - height: 0.15em; - background: white; - } - - .sm2-bar-ui .sm2-main-controls, - .sm2-bar-ui .sm2-playlist-drawer { - background-color: transparent; - } - - .sm2-bar-ui .sm2-inline-texture { - background: transparent; - } - - .rating .glyphicon-star { - color: gray; - } - - .rating .glyphicon-star.good { - color: white; - } - - body { - overflow: hidden; - background: #272B30; - color: #aaa; - } - - #main { - position: absolute; - width: 100%; - height: 100%; - } - - #area { - width: 80%; - height: 80%; - margin: 5% auto; - max-width: 1250px; - } - - #area iframe { - border: none; - } - - #prev { - left: 40px; - } - - #next { - right: 40px; - } - - xmp, - pre, - plaintext { - display: block; - font-family: -moz-fixed; - white-space: pre; - margin: 1em 0; - } - - #area { - overflow: hidden; - } - - pre { - white-space: pre-wrap; - word-wrap: break-word; - font-family: -moz-fixed; - column-count: 2; - -webkit-columns: 2; - -moz-columns: 2; - column-gap: 20px; - -moz-column-gap: 20px; - -webkit-column-gap: 20px; - position: relative; - } + font-size: 20px; +} + +.sm2-bar-ui.compact { + max-width: 90%; +} + +.sm2-progress .sm2-progress-ball { + width: 0.5333em; + height: 1.9333em; + border-radius: 0em; +} + +.sm2-progress .sm2-progress-track { + height: 0.15em; + background: white; +} + +.sm2-bar-ui .sm2-main-controls, +.sm2-bar-ui .sm2-playlist-drawer { +background-color: transparent; +} + +.sm2-bar-ui .sm2-inline-texture { +background: transparent; +} + +.rating .glyphicon-star { +color: gray; +} + +.rating .glyphicon-star.good { +color: white; +} + +body { +overflow: hidden; +background: #272B30; +color: #aaa; +} + +#main { +position: absolute; +width: 100%; +height: 100%; +} + +#area { +width: 80%; +height: 80%; +margin: 5% auto; +max-width: 1250px; +} + +#area iframe { +border: none; +} + +#prev { +left: 40px; +} + +#next { +right: 40px; +} + +xmp, +pre, +plaintext { +display: block; +font-family: -moz-fixed; +white-space: pre; +margin: 1em 0; +} + +#area { +overflow: hidden; +} + +pre { +white-space: pre-wrap; +word-wrap: break-word; +font-family: -moz-fixed; +column-count: 2; +-webkit-columns: 2; +-moz-columns: 2; +column-gap: 20px; +-moz-column-gap: 20px; +-webkit-column-gap: 20px; +position: relative; +} diff --git a/cps/static/css/main.css b/cps/static/css/main.css index 60470f3b..9892e5c8 100644 --- a/cps/static/css/main.css +++ b/cps/static/css/main.css @@ -1,10 +1,11 @@ @font-face { font-family: 'fontello'; src: url('fonts/fontello.eot?60518104'); - src: url('fonts/fontello.eot?60518104#iefix') format('embedded-opentype'), - url('fonts/fontello.woff?60518104') format('woff'), - url('fonts/fontello.ttf?60518104') format('truetype'), - url('fonts/fontello.svg?60518104#fontello') format('svg'); + src: + url('fonts/fontello.eot?60518104#iefix') format('embedded-opentype'), + url('fonts/fontello.woff?60518104') format('woff'), + url('fonts/fontello.ttf?60518104') format('truetype'), + url('fonts/fontello.svg?60518104#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -22,17 +23,15 @@ body { border-radius: 5px; background: #fff; overflow: hidden; - -webkit-transition: -webkit-transform .4s, width .2s; - -moz-transition: -webkit-transform .4s, width .2s; - -ms-transition: -webkit-transform .4s, width .2s; - - -moz-box-shadow: inset 0 0 50px rgba(0,0,0,.1); - -webkit-box-shadow: inset 0 0 50px rgba(0,0,0,.1); - -ms-box-shadow: inset 0 0 50px rgba(0,0,0,.1); - box-shadow: inset 0 0 50px rgba(0,0,0,.1); + -webkit-transition: -webkit-transform 0.4s, width 0.2s; + -moz-transition: -webkit-transform 0.4s, width 0.2s; + -ms-transition: -webkit-transform 0.4s, width 0.2s; + -moz-box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.1); + -webkit-box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.1); + -ms-box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.1); } - #titlebar { height: 8%; min-height: 20px; @@ -42,11 +41,11 @@ body { color: #4f4f4f; font-weight: 100; font-family: Georgia, "Times New Roman", Times, serif; - opacity: .5; + opacity: 0.5; text-align: center; - -webkit-transition: opacity .5s; - -moz-transition: opacity .5s; - -ms-transition: opacity .5s; + -webkit-transition: opacity 0.5s; + -moz-transition: opacity 0.5s; + -ms-transition: opacity 0.5s; z-index: 10; } @@ -60,7 +59,7 @@ body { line-height: 20px; overflow: hidden; display: inline-block; - opacity: .5; + opacity: 0.5; padding: 4px; border-radius: 4px; } @@ -70,35 +69,27 @@ body { } #titlebar a:hover { - opacity: .8; - border: 1px rgba(0,0,0,.2) solid; + opacity: 0.8; + border: 1px rgba(0, 0, 0, 0.2) solid; padding: 3px; } #titlebar a:active { opacity: 1; - color: rgba(0,0,0,.6); - /* margin: 1px -1px -1px 1px; */ - -moz-box-shadow: inset 0 0 6px rgba(155,155,155,.8); - -webkit-box-shadow: inset 0 0 6px rgba(155,155,155,.8); - -ms-box-shadow: inset 0 0 6px rgba(155,155,155,.8); - box-shadow: inset 0 0 6px rgba(155,155,155,.8); -} - -#book-title { - font-weight: 600; + color: rgba(0, 0, 0, 0.6); + -moz-box-shadow: inset 0 0 6px rgba(155, 155, 155, 0.8); + -webkit-box-shadow: inset 0 0 6px rgba(155, 155, 155, 0.8); + -ms-box-shadow: inset 0 0 6px rgba(155, 155, 155, 0.8); + box-shadow: inset 0 0 6px rgba(155, 155, 155, 0.8); } -#title-seperator { - display: none; -} +#book-title { font-weight: 600; } +#title-seperator { display: none; } #viewer { width: 80%; height: 80%; - /* margin-left: 10%; */ margin: 0 auto; - /* max-width: 1250px; */ z-index: 2; position: relative; overflow: hidden; @@ -108,14 +99,14 @@ body { border: none; } -#left,#prev { +#left, #prev { left: 40px; - padding-right:80px; + padding-right: 80px; } #right,#next { right: 40px; - padding-left:80px; + padding-left: 80px; } .arrow { @@ -148,24 +139,20 @@ body { #sidebar { background: #6b6b6b; position: absolute; - /* left: -260px; */ - /* -webkit-transform: translate(-260px, 0); - -moz-transform: translate(-260px, 0); */ top: 0; min-width: 300px; width: 25%; height: 100%; - -webkit-transition: -webkit-transform .5s; - -moz-transition: -moz-transform .5s; - -ms-transition: -moz-transform .5s; - + -webkit-transition: -webkit-transform 0.5s; + -moz-transition: -moz-transform 0.5s; + -ms-transition: -moz-transform 0.5s; overflow: hidden; } #sidebar.open { - /* left: 0; */ - /* -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); */ + /* left: 0; */ + /* -webkit-transform: translate(0, 0); + -moz-transform: translate(0, 0); */ } #main.closed { @@ -203,19 +190,13 @@ body { float: left; } -/* #opener #slider { - width: 25px; -} */ - #metainfo { display: inline-block; text-align: center; max-width: 80%; } -#title-controls { - float: right; -} +#title-controls { float: right; } #panels a { visibility: hidden; @@ -227,13 +208,8 @@ body { margin-left: 6px; } -#panels a::before { - visibility: visible; -} - -#panels a:hover { - color: #AAA; -} +#panels a::before { visibility: visible; } +#panels a:hover { color: #AAA; } #panels a:active { color: #AAA; @@ -250,28 +226,11 @@ body { float: left; margin-left: 10px; margin-top: -1px; - /* - border-radius: 5px; - background: #9b9b9b; - float: left; - margin-left: 5px; - margin-top: -5px; - padding: 3px 10px; - color: #000; - border: none; - outline: none; */ - } -input::-webkit-input-placeholder { - color: #454545; -} -input:-moz-placeholder { - color: #454545; -} -input:-ms-placeholder { - color: #454545; -} +input::-webkit-input-placeholder { color: #454545; } +input:-moz-placeholder { color: #454545; } +input:-ms-placeholder { color: #454545; } #divider { position: absolute; @@ -312,8 +271,6 @@ input:-ms-placeholder { -ms-transition: visibility 0 ease .5s; } - - #sidebar.open #tocView, #sidebar.open #bookmarksView { overflow-y: auto; @@ -505,30 +462,30 @@ input:-ms-placeholder { } #settingsPanel { - display:none; + display: none; } #settingsPanel h3 { - color:#f1f1f1; - font-family:Georgia, "Times New Roman", Times, serif; - margin-bottom:10px; + color: #f1f1f1; + font-family: Georgia, "Times New Roman", Times, serif; + margin-bottom: 10px; } #settingsPanel ul { - margin-top:60px; - list-style-type:none; + margin-top: 60px; + list-style-type: none; } #settingsPanel li { - font-size:1em; - color:#f1f1f1; + font-size: 1em; + color: #f1f1f1; } -#settingsPanel .xsmall { font-size:x-small; } -#settingsPanel .small { font-size:small; } -#settingsPanel .medium { font-size:medium; } -#settingsPanel .large { font-size:large; } -#settingsPanel .xlarge { font-size:x-large; } +#settingsPanel .xsmall { font-size: x-small; } +#settingsPanel .small { font-size: small; } +#settingsPanel .medium { font-size: medium; } +#settingsPanel .large { font-size: large; } +#settingsPanel .xlarge { font-size: x-large; } .highlight { background-color: yellow } @@ -827,7 +784,7 @@ and (orientation : landscape) display: inline-block; text-decoration: inherit; width: 1em; - margin-right: .2em; + margin-right: 0.2em; text-align: center; /* opacity: .8; */ diff --git a/cps/static/css/popup.css b/cps/static/css/popup.css index c41aac71..b655ab48 100644 --- a/cps/static/css/popup.css +++ b/cps/static/css/popup.css @@ -1,4 +1,5 @@ /* http://davidwalsh.name/css-tooltips */ + /* base CSS element */ .popup { background: #eee; @@ -9,10 +10,8 @@ position: fixed; max-width: 300px; font-size: 12px; - display: none; margin-left: 2px; - margin-top: 30px; } @@ -38,7 +37,7 @@ } /* below */ -.popup:before { +.popup::before { position: absolute; display: inline-block; border-bottom: 10px solid #eee; @@ -51,7 +50,7 @@ content: ''; } -.popup:after { +.popup::after { position: absolute; display: inline-block; border-bottom: 9px solid #eee; @@ -64,33 +63,31 @@ } /* above */ -.popup.above:before { +.popup.above::before { border-bottom: none; border-top: 10px solid #eee; border-top-color: rgba(0, 0, 0, 0.2); top: 100%; } -.popup.above:after { +.popup.above::after { border-bottom: none; border-top: 9px solid #eee; top: 100%; } -.popup.left:before, -.popup.left:after -{ +.popup.left::before, +.popup.left::after { left: 20px; } -.popup.right:before, -.popup.right:after -{ +.popup.right::before, +.popup.right::after { left: auto; right: 20px; } - -.popup.show, .popup.on { +.popup.show, +.popup.on { display: block; -} \ No newline at end of file +} diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 0850e10a..5dd9d98f 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -1,97 +1,210 @@ -.tooltip.bottom .tooltip-inner{font-size:13px;font-family:Open Sans Semibold,Helvetica Neue,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding:3px 10px;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 4px 10px 0 rgba(0,0,0,.35);box-shadow:0 4px 10px 0 rgba(0,0,0,.35);opacity:1;white-space:nowrap;margin-top:-16px!important;line-height:1.71428571;color:#ddd} +.tooltip.bottom .tooltip-inner { + font-size: 13px; + font-family: Open Sans Semibold,Helvetica Neue,Helvetica,Arial,sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding: 3px 10px;border-radius: 4px; + background-color: #fff; + -webkit-box-shadow: 0 4px 10px 0 rgba(0,0,0,.35); + box-shadow: 0 4px 10px 0 rgba(0,0,0,.35); + opacity: 1; + white-space: nowrap; + margin-top: -16px!important; + line-height: 1.71428571; + color: #ddd; +} @font-face { - font-family: 'Grand Hotel'; - font-style: normal; - font-weight: 400; - src: local('Grand Hotel'), local('GrandHotel-Regular'), url("fonts/GrandHotel-Regular.ttf") format('truetype'); + font-family: 'Grand Hotel'; + font-style: normal; + font-weight: 400; + src: local('Grand Hotel'), local('GrandHotel-Regular'), url("fonts/GrandHotel-Regular.ttf") format('truetype'); } html.http-error { - margin: 0; - height: 100%; + margin: 0; + height: 100%; } + .http-error body { - margin: 0; - height: 100%; - display: table; - width: 100%; + margin: 0; + height: 100%; + display: table; + width: 100%; } + .http-error body > div { - display: table-cell; - vertical-align: middle; - text-align: center; -} - -body{background:#f2f2f2}body h2{font-weight:normal;color:#444} -body { margin-bottom: 40px;} -a{color: #45b29d} /*a:hover{color: #444;}*/ -.navigation .nav-head{text-transform:uppercase;color:#999;margin:20px 0}.navigation .nav-head:nth-child(1n+2){border-top:1px solid #ccc;padding-top:20px} -.navigation li a{color:#444;text-decoration:none;display:block;padding:10px}.navigation li a:hover{background:rgba(153,153,153,0.4);border-radius:5px} -.navigation li a span{margin-right:10px} -.navigation .create-shelf{margin:30px 0;font-size:12px;text-align:center}.navigation .create-shelf a{color:#fff;background:#45b29d;padding:10px 20px;border-radius:5px;text-decoration:none} -.container-fluid img{display:block;max-width:100%;height:auto} -.container-fluid .discover{margin-bottom:50px} -.container-fluid .new-books{border-top:1px solid #ccc}.container-fluid .new-books h2{margin:50px 0 0 0} -.container-fluid .book{margin-top:20px}.container-fluid .book .cover{height:225px;position:relative}.container-fluid .book .cover img{border:1px solid #fff;/*border-radius:7px;*/box-sizeing:border-box;height:100%;bottom:0;position:absolute;-webkit-box-shadow: 0 5px 8px -6px #777;-moz-box-shadow: 0 5px 8px -6px #777;box-shadow: 0 5px 8px -6px #777;} -.container-fluid .book .meta{margin-top:10px}.container-fluid .book .meta p{margin:0} -.container-fluid .book .meta .title{font-weight:bold;font-size:15px;color:#444} -.container-fluid .book .meta .author{font-size:12px;color:#999} -.container-fluid .book .meta .rating{margin-top:5px}.rating .glyphicon-star{color:#999}.rating .glyphicon-star.good{color:#45b29d} - -.container-fluid .author .author-hidden, .container-fluid .author .author-hidden-divider { - display: none; -} - -.navbar-brand{font-family: 'Grand Hotel', cursive; font-size: 35px; color: #45b29d !important;} -.more-stuff{margin-top: 20px; padding-top: 20px; border-top: 1px solid #ccc} -.more-stuff>li{margin-bottom: 10px;} -.navbar-collapse.in .navbar-nav{margin: 0;} -span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: text-top;} -.book-meta {padding-bottom: 20px;} -.book-meta .tags a {display: inline;} -.book-meta .identifiers a {display: inline;} + display: table-cell; + vertical-align: middle; + text-align: center; +} + +body { background: #f2f2f2; } + +body h2 { + font-weight: normal; + color:#444; +} + +body { margin-bottom: 40px; } +a { color: #45b29d; } + +.navigation .nav-head { + text-transform: uppercase; + color: #999; + margin: 20px 0 +} + +.navigation .nav-head:nth-child(1n+2) { + border-top: 1px solid #ccc; + padding-top: 20px; +} +.navigation li a { + color: #444; + text-decoration: none; + display: block; + padding: 10px; +} + +.navigation li a:hover { + background: rgba(153,153,153,0.4); + border-radius: 5px; +} + +.navigation li a span { margin-right: 10px; } + +.navigation .create-shelf { + margin: 30px 0; + font-size: 12px; + text-align: center; +} + +.navigation .create-shelf a { + color: #fff; + background: #45b29d; + padding: 10px 20px; + border-radius: 5px; + text-decoration:none; +} + +.container-fluid img { + display: block; + max-width: 100%; + height:auto; +} + +.container-fluid .discover{ margin-bottom: 50px; } +.container-fluid .new-books { border-top: 1px solid #ccc; } +.container-fluid .new-books h2 { margin: 50px 0 0 0; } +.container-fluid .book { margin-top: 20px; } + +.container-fluid .book .cover { + height: 225px; + position: relative; +} + +.container-fluid .book .cover img { + border: 1px solid #fff; + box-sizeing: border-box; + height:100%; + bottom:0; + position:absolute; + -webkit-box-shadow: 0 5px 8px -6px #777; + -moz-box-shadow: 0 5px 8px -6px #777; + box-shadow: 0 5px 8px -6px #777; +} + +.container-fluid .book .meta { margin-top: 10px; } +.container-fluid .book .meta p { margin: 0; } +.container-fluid .book .meta .title { font-weight:bold; font-size: 15px;color: #444; } +.container-fluid .book .meta .author { font-size: 12px;color:#999; } +.container-fluid .book .meta .rating { margin-top: 5px; } +.rating .glyphicon-star { color: #999; } +.rating .glyphicon-star.good { color: #45b29d; } + +.container-fluid .author .author-hidden, .container-fluid .author .author-hidden-divider { display: none; } + +.navbar-brand { + font-family: 'Grand Hotel', cursive; + font-size: 35px; + color: #45b29d !important; +} + +.more-stuff { + margin-top: 20px; + padding-top: 20px; + border-top: 1px solid #ccc; +} + +.more-stuff>li { margin-bottom: 10px; } +.navbar-collapse.in .navbar-nav { margin: 0; } + +span.glyphicon.glyphicon-tags { + padding-right: 5px; + color: #999; + vertical-align: text-top; +} + +.book-meta { padding-bottom: 20px; } +.book-meta .tags a { display: inline; } +.book-meta .identifiers a { display: inline; } + .container-fluid .single .cover img { border: 1px solid #fff; - /*border-radius: 7px;*/ box-sizeing: border-box; -webkit-box-shadow: 0 5px 8px -6px #777; -moz-box-shadow: 0 5px 8px -6px #777; box-shadow: 0 5px 8px -6px #777; } -.navbar-default .navbar-toggle .icon-bar {background-color: #000;} -.navbar-default .navbar-toggle {border-color: #000;} -.cover { margin-bottom: 10px;} +.navbar-default .navbar-toggle .icon-bar {background-color: #000; } +.navbar-default .navbar-toggle {border-color: #000; } +.cover { margin-bottom: 10px; } .cover-height { max-height: 100px;} + .col-sm-2 a .cover-small { margin:5px; max-height: 200px; } .btn-file {position: relative; overflow: hidden;} -.btn-file input[type=file] {position: absolute; top: 0; right: 0; min-width: 100%; min-height: 100%; font-size: 100px; text-align: right; filter: alpha(opacity=0); opacity: 0; outline: none; background: white; cursor: inherit; display: block;} + +.btn-file input[type=file] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + font-size: 100px; + text-align: right; + filter: alpha(opacity=0); + opacity: 0; + outline: none; + background: white; + cursor: inherit; + display: block; +} .btn-toolbar .btn,.discover .btn { margin-bottom: 5px; } -.button-link {color:#fff;} +.button-link {color: #fff; } .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary{ background-color: #1C5484; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #89B9E2; } .btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left:0px; } -.panel-body {background-color: #f5f5f5;} -.spinner {margin:0 41%;} -.spinner2 {margin:0 41%;} - -table .bg-dark-danger {background-color: #d9534f; color: #fff;} -table .bg-dark-danger a {color: #fff;} -table .bg-dark-danger:hover {background-color: #c9302c;} -table .bg-primary:hover {background-color: #1C5484;} -table .bg-primary a {color: #fff;} +.panel-body {background-color: #f5f5f5; } +.spinner {margin:0 41%; } +.spinner2 {margin:0 41%; } +table .bg-dark-danger {background-color: #d9534f; color: #fff; } +table .bg-dark-danger a {color: #fff; } +table .bg-dark-danger:hover {background-color: #c9302c; } +table .bg-primary:hover {background-color: #1C5484; } +table .bg-primary a {color: #fff; } .block-label {display: block;} -.fake-input {position: absolute; pointer-events: none; top: 0;} +.fake-input {position: absolute; pointer-events: none; top: 0; } input.pill { position: absolute; opacity: 0; } + input.pill + label { border: 2px solid #45b29d; border-radius: 15px; @@ -103,52 +216,41 @@ input.pill + label { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } + input.pill:checked + label { background-color: #45b29d; border-color: #fff; color: #fff; } -input.pill:not(:checked) + label .glyphicon { - display: none; -} -.author-bio img {margin: 0 1em 1em 0;} -.author-link {display: inline-block; margin-top: 10px; width: 100px;} -.author-link img {display: block; height: 100%;} +input.pill:not(:checked) + label .glyphicon { display: none; } -#remove-from-shelves .btn, -#shelf-action-errors { - margin-left: 5px; -} +.author-bio img {margin: 0 1em 1em 0;} +.author-link {display: inline-block; margin-top: 10px; width: 100px; } +.author-link img {display: block; height: 100%; } +#remove-from-shelves .btn, #shelf-action-errors { margin-left: 5px; } -.tags_click, .serie_click, .language_click {margin-right: 5px;} +.tags_click, .serie_click, .language_click {margin-right: 5px; } #meta-info { height:600px; overflow-y:scroll; } -.media-list { - padding-right:15px; -} -.media-body p { - text-align: justify; -} -#meta-info img { max-height: 150px; max-width: 100px; cursor: pointer; } +.media-list { padding-right:15px; } +.media-body p { text-align: justify; } +#meta-info img { max-height: 150px; max-width: 100px; cursor: pointer; } .padded-bottom { margin-bottom: 15px; } - .upload-format-input-text {display: initial;} #btn-upload-format {display: none;} - -.upload-cover-input-text {display: initial;} -#btn-upload-cover {display: none;} - -.panel-title > a { text-decoration: none;} +.upload-cover-input-text {display: initial; } +#btn-upload-cover {display: none; } +.panel-title > a { text-decoration: none; } .editable-buttons { display:inline-block; margin-left: 7px ;} -.editable-input { display:inline-block;} -.editable-cancel { margin-bottom: 0px !important; margin-left: 7px !important;} -.editable-submit { margin-bottom: 0px !important;} +.editable-input { display:inline-block; } +.editable-cancel { margin-bottom: 0px !important; margin-left: 7px !important; } +.editable-submit { margin-bottom: 0px !important; } .filterheader { margin-bottom: 20px; } diff --git a/cps/static/css/upload.css b/cps/static/css/upload.css index a56dde2c..7739e851 100644 --- a/cps/static/css/upload.css +++ b/cps/static/css/upload.css @@ -1,8 +1,8 @@ @media (min-device-width: 768px) { - .upload-modal-dialog { - position: absolute; - top: 45%; - left: 50%; - transform: translate(-50%, -50%) !important; - } + .upload-modal-dialog { + position: absolute; + top: 45%; + left: 50%; + transform: translate(-50%, -50%) !important; + } } diff --git a/cps/static/js/filter_list.js b/cps/static/js/filter_list.js index 0610bb86..8291f0ac 100644 --- a/cps/static/js/filter_list.js +++ b/cps/static/js/filter_list.js @@ -45,7 +45,7 @@ $("#sort_name").click(function() { });*/ // Find count of middle element if (count > 20) { - var middle = parseInt(count / 2) + (count % 2); + var middle = parseInt(count / 2, 10) + (count % 2); // search for the middle of all visibe elements $(".row").each(function() { index++; @@ -146,7 +146,7 @@ $("#all").click(function() { // Find count of middle element var listItems = $("#list").children(".row"); var listlength = listItems.length; - var middle = parseInt(listlength / 2) + (listlength % 2); + var middle = parseInt(listlength / 2, 10) + (listlength % 2); // go through all elements and make them visible listItems.each(function() { $(this).show(); @@ -178,7 +178,7 @@ $(".char").click(function() { }); if (count > 20) { // Find count of middle element - var middle = parseInt(count / 2) + (count % 2); + var middle = parseInt(count / 2, 10) + (count % 2); // search for the middle of all visibe elements $(".row").each(function() { index++; diff --git a/cps/static/js/table.js b/cps/static/js/table.js index 7572159e..9be7e632 100644 --- a/cps/static/js/table.js +++ b/cps/static/js/table.js @@ -112,7 +112,7 @@ $(function() { return ""; }, url: path + "/../../ajax/listrestriction/" + type, - rowStyle: function(row, index) { + rowStyle: function(row) { // console.log('Reihe :' + row + " Index :" + index); if (row.id.charAt(0) === "a") { return {classes: "bg-primary"}; @@ -120,15 +120,15 @@ $(function() { return {classes: "bg-dark-danger"}; } }, - onClickCell: function (field, value, row, $element) { - if (field == 3) { + onClickCell: function (field, value, row) { + if (field === 3) { $.ajax ({ type: "Post", data: "id=" + row.id + "&type=" + row.type + "&Element=" + row.Element, url: path + "/../../ajax/deleterestriction/" + type, async: true, timeout: 900, - success:function(data) { + success:function() { $.ajax({ method:"get", url: path + "/../../ajax/listrestriction/" + type, @@ -145,14 +145,14 @@ $(function() { striped: false }); $("#restrict-elements-table").removeClass("table-hover"); - $("#restrict-elements-table").on("editable-save.bs.table", function (e, field, row, old, $el) { + $("#restrict-elements-table").on("editable-save.bs.table", function (e, field, row) { $.ajax({ url: path + "/../../ajax/editrestriction/" + type, type: "Post", data: row }); }); - $("[id^=submit_]").click(function(event) { + $("[id^=submit_]").click(function() { $(this)[0].blur(); $.ajax({ url: path + "/../../ajax/addrestriction/" + type, @@ -196,7 +196,7 @@ $(function() { }); /* Function for deleting domain restrictions */ -function TableActions (value, row, index) { +function TableActions (value, row) { return [ "", @@ -206,7 +206,7 @@ function TableActions (value, row, index) { } /* Function for deleting domain restrictions */ -function RestrictionActions (value, row, index) { +function RestrictionActions (value, row) { return [ "
", "", diff --git a/cps/ub.py b/cps/ub.py index 9a405d04..2b0c0e16 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -415,11 +415,6 @@ def migrate_Database(session): 'side_autor': constants.SIDEBAR_AUTHOR, 'detail_random': constants.DETAIL_RANDOM}) session.commit() - '''try: - session.query(exists().where(User.mature_content)).scalar() - except exc.OperationalError: - conn = engine.connect() - conn.execute("ALTER TABLE user ADD column `mature_content` INTEGER DEFAULT 1")''' try: session.query(exists().where(User.denied_tags)).scalar() except exc.OperationalError: # Database is not compatible, some columns are missing @@ -497,7 +492,7 @@ def create_anonymous_user(session): session.add(user) try: session.commit() - except Exception as e: + except Exception: session.rollback() @@ -544,7 +539,7 @@ def dispose(): session = None if old_session: try: old_session.close() - except: pass + except Exception: pass if old_session.bind: try: old_session.bind.dispose() - except: pass + except Exception: pass diff --git a/cps/web.py b/cps/web.py index 046eb795..9d37f1ba 100644 --- a/cps/web.py +++ b/cps/web.py @@ -38,7 +38,7 @@ from flask import render_template, request, redirect, send_from_directory, make_ from flask_babel import gettext as _ from flask_login import login_user, logout_user, login_required, current_user from sqlalchemy.exc import IntegrityError -from sqlalchemy.sql.expression import text, func, true, false, not_, and_, exists, or_ +from sqlalchemy.sql.expression import text, func, true, false, not_, and_, or_ from werkzeug.exceptions import default_exceptions from werkzeug.datastructures import Headers from werkzeug.security import generate_password_hash, check_password_hash @@ -1274,16 +1274,11 @@ def login(): log.info('Login failed for user "%s" IP-adress: %s', form['username'], ipAdress) flash(_(u"Wrong Username or Password"), category="error") - if feature_support['oauth']: - oauth_status = get_oauth_status() - else: - oauth_status = None next_url = url_for('web.index') return render_title_template('login.html', title=_(u"login"), next_url=next_url, config=config, - # oauth_status=oauth_status, oauth_check=oauth_check, mail=config.get_mail_server_configured(), page="login") diff --git a/cps/worker.py b/cps/worker.py index 409201c7..25fe0f6f 100644 --- a/cps/worker.py +++ b/cps/worker.py @@ -300,11 +300,6 @@ class WorkerThread(threading.Thread): # check which converter to use kindlegen is "1" if format_old_ext == '.epub' and format_new_ext == '.mobi': if config.config_ebookconverter == 1: - '''if os.name == 'nt': - command = config.config_converterpath + u' "' + file_path + u'.epub"' - if sys.version_info < (3, 0): - command = command.encode(sys.getfilesystemencoding()) - else:''' command = [config.config_converterpath, file_path + u'.epub'] quotes = [1] if config.config_ebookconverter == 2: @@ -314,12 +309,6 @@ class WorkerThread(threading.Thread): # windows py 3.x no encode and as string with quotes empty element for parameters is okay # separate handling for windows and linux quotes = [1,2] - '''if os.name == 'nt': - command = config.config_converterpath + u' "' + file_path + format_old_ext + u'" "' + \ - file_path + format_new_ext + u'" ' + config.config_calibre - if sys.version_info < (3, 0): - command = command.encode(sys.getfilesystemencoding()) - else:''' command = [config.config_converterpath, (file_path + format_old_ext), (file_path + format_new_ext)] quotes_index = 3