Merge branch 'master' into Develop
This commit is contained in:
commit
1e03a2ae40
|
@ -12,7 +12,7 @@ Calibre-Web is a web app providing a clean interface for browsing, reading and d
|
||||||
- full graphical setup
|
- full graphical setup
|
||||||
- User management with fine-grained per-user permissions
|
- User management with fine-grained per-user permissions
|
||||||
- Admin interface
|
- Admin interface
|
||||||
- User Interface in czech, dutch, english, finnish, french, german, hungarian, italian, japanese, khmer, polish, russian, simplified chinese, spanish, swedish, turkish, ukrainian
|
- User Interface in czech, dutch, english, finnish, french, german, greek, hungarian, italian, japanese, khmer, polish, russian, simplified chinese, spanish, swedish, turkish, ukrainian
|
||||||
- OPDS feed for eBook reader apps
|
- OPDS feed for eBook reader apps
|
||||||
- Filter and search by titles, authors, tags, series and language
|
- Filter and search by titles, authors, tags, series and language
|
||||||
- Create a custom book collection (shelves)
|
- Create a custom book collection (shelves)
|
||||||
|
|
19
cps/admin.py
19
cps/admin.py
|
@ -799,7 +799,7 @@ def _handle_new_user(to_save, content,languages, translations, kobo_support):
|
||||||
flash(_(u"Settings DB is not Writeable"), category="error")
|
flash(_(u"Settings DB is not Writeable"), category="error")
|
||||||
|
|
||||||
|
|
||||||
def _handle_edit_user(to_save, content,languages, translations, kobo_support, downloads):
|
def _handle_edit_user(to_save, content,languages, translations, kobo_support):
|
||||||
if "delete" in to_save:
|
if "delete" in to_save:
|
||||||
if ub.session.query(ub.User).filter(ub.User.role.op('&')(constants.ROLE_ADMIN) == constants.ROLE_ADMIN,
|
if ub.session.query(ub.User).filter(ub.User.role.op('&')(constants.ROLE_ADMIN) == constants.ROLE_ADMIN,
|
||||||
ub.User.id != content.id).count():
|
ub.User.id != content.id).count():
|
||||||
|
@ -858,7 +858,6 @@ def _handle_edit_user(to_save, content,languages, translations, kobo_support, do
|
||||||
kobo_support=kobo_support,
|
kobo_support=kobo_support,
|
||||||
new_user=0,
|
new_user=0,
|
||||||
content=content,
|
content=content,
|
||||||
downloads=downloads,
|
|
||||||
registered_oauth=oauth_check,
|
registered_oauth=oauth_check,
|
||||||
title=_(u"Edit User %(nick)s", nick=content.nickname), page="edituser")
|
title=_(u"Edit User %(nick)s", nick=content.nickname), page="edituser")
|
||||||
if "nickname" in to_save and to_save["nickname"] != content.nickname:
|
if "nickname" in to_save and to_save["nickname"] != content.nickname:
|
||||||
|
@ -872,7 +871,6 @@ def _handle_edit_user(to_save, content,languages, translations, kobo_support, do
|
||||||
languages=languages,
|
languages=languages,
|
||||||
mail_configured=config.get_mail_server_configured(),
|
mail_configured=config.get_mail_server_configured(),
|
||||||
new_user=0, content=content,
|
new_user=0, content=content,
|
||||||
downloads=downloads,
|
|
||||||
registered_oauth=oauth_check,
|
registered_oauth=oauth_check,
|
||||||
kobo_support=kobo_support,
|
kobo_support=kobo_support,
|
||||||
title=_(u"Edit User %(nick)s", nick=content.nickname),
|
title=_(u"Edit User %(nick)s", nick=content.nickname),
|
||||||
|
@ -961,28 +959,20 @@ def update_mailsettings():
|
||||||
@admin_required
|
@admin_required
|
||||||
def edit_user(user_id):
|
def edit_user(user_id):
|
||||||
content = ub.session.query(ub.User).filter(ub.User.id == int(user_id)).first() # type: ub.User
|
content = ub.session.query(ub.User).filter(ub.User.id == int(user_id)).first() # type: ub.User
|
||||||
if not content:
|
if not content or (not config.config_anonbrowse and content.nickname == "Guest"):
|
||||||
flash(_(u"User not found"), category="error")
|
flash(_(u"User not found"), category="error")
|
||||||
return redirect(url_for('admin.admin'))
|
return redirect(url_for('admin.admin'))
|
||||||
downloads = list()
|
|
||||||
languages = calibre_db.speaking_language()
|
languages = calibre_db.speaking_language()
|
||||||
translations = babel.list_translations() + [LC('en')]
|
translations = babel.list_translations() + [LC('en')]
|
||||||
kobo_support = feature_support['kobo'] and config.config_kobo_sync
|
kobo_support = feature_support['kobo'] and config.config_kobo_sync
|
||||||
for book in content.downloads:
|
|
||||||
downloadbook = calibre_db.get_book(book.book_id)
|
|
||||||
if downloadbook:
|
|
||||||
downloads.append(downloadbook)
|
|
||||||
else:
|
|
||||||
ub.delete_download(book.book_id)
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
to_save = request.form.to_dict()
|
to_save = request.form.to_dict()
|
||||||
_handle_edit_user(to_save, content, languages, translations, kobo_support, downloads)
|
_handle_edit_user(to_save, content, languages, translations, kobo_support)
|
||||||
return render_title_template("user_edit.html",
|
return render_title_template("user_edit.html",
|
||||||
translations=translations,
|
translations=translations,
|
||||||
languages=languages,
|
languages=languages,
|
||||||
new_user=0,
|
new_user=0,
|
||||||
content=content,
|
content=content,
|
||||||
downloads=downloads,
|
|
||||||
registered_oauth=oauth_check,
|
registered_oauth=oauth_check,
|
||||||
mail_configured=config.get_mail_server_configured(),
|
mail_configured=config.get_mail_server_configured(),
|
||||||
kobo_support=kobo_support,
|
kobo_support=kobo_support,
|
||||||
|
@ -1039,7 +1029,8 @@ def send_logfile(logtype):
|
||||||
|
|
||||||
|
|
||||||
@admi.route("/get_update_status", methods=['GET'])
|
@admi.route("/get_update_status", methods=['GET'])
|
||||||
@login_required_if_no_ano
|
@login_required
|
||||||
|
@admin_required
|
||||||
def get_update_status():
|
def get_update_status():
|
||||||
log.info(u"Update status requested")
|
log.info(u"Update status requested")
|
||||||
return updater_thread.get_available_updates(request.method, locale=get_locale())
|
return updater_thread.get_available_updates(request.method, locale=get_locale())
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
|
|
||||||
from __future__ import division, print_function, unicode_literals
|
from __future__ import division, print_function, unicode_literals
|
||||||
import os
|
import os
|
||||||
import json
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from sqlalchemy import exc, Column, String, Integer, SmallInteger, Boolean, BLOB, JSON
|
from sqlalchemy import exc, Column, String, Integer, SmallInteger, Boolean, BLOB, JSON
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
from __future__ import division, print_function, unicode_literals
|
from __future__ import division, print_function, unicode_literals
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
from flask_babel import gettext as _
|
from flask_babel import gettext as _
|
||||||
|
|
||||||
from . import config, logger
|
from . import config, logger
|
||||||
|
|
|
@ -147,7 +147,7 @@ class Identifiers(Base):
|
||||||
elif format_type == "kobo":
|
elif format_type == "kobo":
|
||||||
return u"https://www.kobo.com/ebook/{0}".format(self.val)
|
return u"https://www.kobo.com/ebook/{0}".format(self.val)
|
||||||
elif format_type == "lubimyczytac":
|
elif format_type == "lubimyczytac":
|
||||||
return u" https://lubimyczytac.pl/ksiazka/{0}/ksiazka".format(self.val)
|
return u"https://lubimyczytac.pl/ksiazka/{0}/ksiazka".format(self.val)
|
||||||
elif format_type == "litres":
|
elif format_type == "litres":
|
||||||
return u"https://www.litres.ru/{0}".format(self.val)
|
return u"https://www.litres.ru/{0}".format(self.val)
|
||||||
elif format_type == "issn":
|
elif format_type == "issn":
|
||||||
|
@ -687,9 +687,7 @@ class CalibreDB():
|
||||||
limit_all = result_count
|
limit_all = result_count
|
||||||
|
|
||||||
ub.store_ids(result)
|
ub.store_ids(result)
|
||||||
|
return result[offset:limit_all], result_count, pagination
|
||||||
|
|
||||||
return result[offset:limit_all], result_count, pagination,
|
|
||||||
|
|
||||||
# Creates for all stored languages a translated speaking name in the array for the UI
|
# Creates for all stored languages a translated speaking name in the array for the UI
|
||||||
def speaking_language(self, languages=None):
|
def speaking_language(self, languages=None):
|
||||||
|
|
|
@ -27,7 +27,6 @@ import json
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from babel import Locale as LC
|
|
||||||
from flask import Blueprint, request, flash, redirect, url_for, abort, Markup, Response
|
from flask import Blueprint, request, flash, redirect, url_for, abort, Markup, Response
|
||||||
from flask_babel import gettext as _
|
from flask_babel import gettext as _
|
||||||
from flask_login import current_user, login_required
|
from flask_login import current_user, login_required
|
||||||
|
@ -930,6 +929,7 @@ def convert_bookformat(book_id):
|
||||||
|
|
||||||
@editbook.route("/ajax/editbooks/<param>", methods=['POST'])
|
@editbook.route("/ajax/editbooks/<param>", methods=['POST'])
|
||||||
@login_required_if_no_ano
|
@login_required_if_no_ano
|
||||||
|
@edit_required
|
||||||
def edit_list_book(param):
|
def edit_list_book(param):
|
||||||
vals = request.form.to_dict()
|
vals = request.form.to_dict()
|
||||||
# calibre_db.update_title_sort(config)
|
# calibre_db.update_title_sort(config)
|
||||||
|
@ -989,6 +989,7 @@ def get_sorted_entry(field, bookid):
|
||||||
|
|
||||||
@editbook.route("/ajax/simulatemerge", methods=['POST'])
|
@editbook.route("/ajax/simulatemerge", methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
|
@edit_required
|
||||||
def simulate_merge_list_book():
|
def simulate_merge_list_book():
|
||||||
vals = request.get_json().get('Merge_books')
|
vals = request.get_json().get('Merge_books')
|
||||||
if vals:
|
if vals:
|
||||||
|
@ -1004,6 +1005,7 @@ def simulate_merge_list_book():
|
||||||
|
|
||||||
@editbook.route("/ajax/mergebooks", methods=['POST'])
|
@editbook.route("/ajax/mergebooks", methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
|
@edit_required
|
||||||
def merge_list_book():
|
def merge_list_book():
|
||||||
vals = request.get_json().get('Merge_books')
|
vals = request.get_json().get('Merge_books')
|
||||||
to_file = list()
|
to_file = list()
|
||||||
|
|
|
@ -123,38 +123,36 @@ def revoke_watch_gdrive():
|
||||||
|
|
||||||
@gdrive.route("/gdrive/watch/callback", methods=['GET', 'POST'])
|
@gdrive.route("/gdrive/watch/callback", methods=['GET', 'POST'])
|
||||||
def on_received_watch_confirmation():
|
def on_received_watch_confirmation():
|
||||||
|
if request.headers.get('X-Goog-Channel-Token') != gdrive_watch_callback_token \
|
||||||
|
or request.headers.get('X-Goog-Resource-State') != 'change' \
|
||||||
|
or not request.data:
|
||||||
|
return redirect(url_for('admin.configuration'))
|
||||||
|
|
||||||
log.debug('%r', request.headers)
|
log.debug('%r', request.headers)
|
||||||
if request.headers.get('X-Goog-Channel-Token') == gdrive_watch_callback_token \
|
log.debug('%r', request.data)
|
||||||
and request.headers.get('X-Goog-Resource-State') == 'change' \
|
log.info('Change received from gdrive')
|
||||||
and request.data:
|
|
||||||
|
|
||||||
data = request.data
|
try:
|
||||||
|
j = json.loads(request.data)
|
||||||
def updateMetaData():
|
log.info('Getting change details')
|
||||||
log.info('Change received from gdrive')
|
response = gdriveutils.getChangeById(gdriveutils.Gdrive.Instance().drive, j['id'])
|
||||||
log.debug('%r', data)
|
log.debug('%r', response)
|
||||||
try:
|
if response:
|
||||||
j = json.loads(data)
|
if sys.version_info < (3, 0):
|
||||||
log.info('Getting change details')
|
dbpath = os.path.join(config.config_calibre_dir, "metadata.db")
|
||||||
response = gdriveutils.getChangeById(gdriveutils.Gdrive.Instance().drive, j['id'])
|
else:
|
||||||
log.debug('%r', response)
|
dbpath = os.path.join(config.config_calibre_dir, "metadata.db").encode()
|
||||||
if response:
|
if not response['deleted'] and response['file']['title'] == 'metadata.db' \
|
||||||
if sys.version_info < (3, 0):
|
and response['file']['md5Checksum'] != hashlib.md5(dbpath):
|
||||||
dbpath = os.path.join(config.config_calibre_dir, "metadata.db")
|
tmpDir = tempfile.gettempdir()
|
||||||
else:
|
log.info('Database file updated')
|
||||||
dbpath = os.path.join(config.config_calibre_dir, "metadata.db").encode()
|
copyfile(dbpath, os.path.join(tmpDir, "metadata.db_" + str(current_milli_time())))
|
||||||
if not response['deleted'] and response['file']['title'] == 'metadata.db' \
|
log.info('Backing up existing and downloading updated metadata.db')
|
||||||
and response['file']['md5Checksum'] != hashlib.md5(dbpath):
|
gdriveutils.downloadFile(None, "metadata.db", os.path.join(tmpDir, "tmp_metadata.db"))
|
||||||
tmpDir = tempfile.gettempdir()
|
log.info('Setting up new DB')
|
||||||
log.info('Database file updated')
|
# prevent error on windows, as os.rename does on exisiting files
|
||||||
copyfile(dbpath, os.path.join(tmpDir, "metadata.db_" + str(current_milli_time())))
|
move(os.path.join(tmpDir, "tmp_metadata.db"), dbpath)
|
||||||
log.info('Backing up existing and downloading updated metadata.db')
|
calibre_db.reconnect_db(config, ub.app_DB_path)
|
||||||
gdriveutils.downloadFile(None, "metadata.db", os.path.join(tmpDir, "tmp_metadata.db"))
|
except Exception as e:
|
||||||
log.info('Setting up new DB')
|
log.exception(e)
|
||||||
# prevent error on windows, as os.rename does on exisiting files
|
|
||||||
move(os.path.join(tmpDir, "tmp_metadata.db"), dbpath)
|
|
||||||
calibre_db.reconnect_db(config, ub.app_DB_path)
|
|
||||||
except Exception as e:
|
|
||||||
log.exception(e)
|
|
||||||
updateMetaData()
|
|
||||||
return ''
|
return ''
|
||||||
|
|
|
@ -35,7 +35,7 @@ from babel.units import format_unit
|
||||||
from flask import send_from_directory, make_response, redirect, abort, url_for
|
from flask import send_from_directory, make_response, redirect, abort, url_for
|
||||||
from flask_babel import gettext as _
|
from flask_babel import gettext as _
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from sqlalchemy.sql.expression import true, false, and_, text, func
|
from sqlalchemy.sql.expression import true, false, and_, text
|
||||||
from werkzeug.datastructures import Headers
|
from werkzeug.datastructures import Headers
|
||||||
from werkzeug.security import generate_password_hash
|
from werkzeug.security import generate_password_hash
|
||||||
from . import calibre_db
|
from . import calibre_db
|
||||||
|
@ -373,23 +373,26 @@ def update_dir_structure_file(book_id, calibrepath, first_author, orignal_filepa
|
||||||
new_name = get_valid_filename(localbook.title) + ' - ' + get_valid_filename(new_authordir)
|
new_name = get_valid_filename(localbook.title) + ' - ' + get_valid_filename(new_authordir)
|
||||||
try:
|
try:
|
||||||
if orignal_filepath:
|
if orignal_filepath:
|
||||||
os.renames(os.path.normcase(path),
|
if not os.path.isdir(new_path):
|
||||||
os.path.normcase(os.path.join(new_path, db_filename)))
|
os.makedirs(new_path)
|
||||||
|
shutil.move(os.path.normcase(path), os.path.normcase(os.path.join(new_path, db_filename)))
|
||||||
log.debug("Moving title: %s to %s/%s", path, new_path, new_name)
|
log.debug("Moving title: %s to %s/%s", path, new_path, new_name)
|
||||||
# Check new path is not valid path
|
# Check new path is not valid path
|
||||||
elif not os.path.exists(new_path):
|
else:
|
||||||
# move original path to new path
|
if not os.path.exists(new_path):
|
||||||
os.renames(os.path.normcase(path), os.path.normcase(new_path))
|
# move original path to new path
|
||||||
log.debug("Moving title: %s to %s", path, new_path)
|
log.debug("Moving title: %s to %s", path, new_path)
|
||||||
else: # path is valid copy only files to new location (merge)
|
shutil.move(os.path.normcase(path), os.path.normcase(new_path))
|
||||||
log.info("Moving title: %s into existing: %s", path, new_path)
|
else: # path is valid copy only files to new location (merge)
|
||||||
# Take all files and subfolder from old path (strange command)
|
log.info("Moving title: %s into existing: %s", path, new_path)
|
||||||
for dir_name, __, file_list in os.walk(path):
|
# Take all files and subfolder from old path (strange command)
|
||||||
for file in file_list:
|
for dir_name, __, file_list in os.walk(path):
|
||||||
os.renames(os.path.normcase(os.path.join(dir_name, file)),
|
for file in file_list:
|
||||||
os.path.normcase(os.path.join(new_path + dir_name[len(path):], file)))
|
shutil.move(os.path.normcase(os.path.join(dir_name, file)),
|
||||||
|
os.path.normcase(os.path.join(new_path + dir_name[len(path):], file)))
|
||||||
|
# os.unlink(os.path.normcase(os.path.join(dir_name, file)))
|
||||||
# change location in database to new author/title path
|
# change location in database to new author/title path
|
||||||
localbook.path = os.path.join(new_authordir, new_titledir)
|
localbook.path = os.path.join(new_authordir, new_titledir).replace('\\','/')
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
log.error("Rename title from: %s to %s: %s", path, new_path, ex)
|
log.error("Rename title from: %s to %s: %s", path, new_path, ex)
|
||||||
log.debug(ex, exc_info=True)
|
log.debug(ex, exc_info=True)
|
||||||
|
@ -399,10 +402,12 @@ def update_dir_structure_file(book_id, calibrepath, first_author, orignal_filepa
|
||||||
# Rename all files from old names to new names
|
# Rename all files from old names to new names
|
||||||
try:
|
try:
|
||||||
for file_format in localbook.data:
|
for file_format in localbook.data:
|
||||||
os.renames(os.path.normcase(
|
shutil.move(os.path.normcase(
|
||||||
os.path.join(new_path, file_format.name + '.' + file_format.format.lower())),
|
os.path.join(new_path, file_format.name + '.' + file_format.format.lower())),
|
||||||
os.path.normcase(os.path.join(new_path, new_name + '.' + file_format.format.lower())))
|
os.path.normcase(os.path.join(new_path, new_name + '.' + file_format.format.lower())))
|
||||||
file_format.name = new_name
|
file_format.name = new_name
|
||||||
|
if not orignal_filepath and len(os.listdir(os.path.dirname(path))) == 0:
|
||||||
|
shutil.rmtree(os.path.dirname(path))
|
||||||
except OSError as ex:
|
except OSError as ex:
|
||||||
log.error("Rename file in path %s to %s: %s", new_path, new_name, ex)
|
log.error("Rename file in path %s to %s: %s", new_path, new_name, ex)
|
||||||
log.debug(ex, exc_info=True)
|
log.debug(ex, exc_info=True)
|
||||||
|
|
|
@ -434,6 +434,379 @@ LANGUAGE_NAMES = {
|
||||||
"zxx": "brak kontekstu językowego",
|
"zxx": "brak kontekstu językowego",
|
||||||
"zza": "zazaki"
|
"zza": "zazaki"
|
||||||
},
|
},
|
||||||
|
"el": {
|
||||||
|
"abk": "Αμπχαζιανά",
|
||||||
|
"ace": "Ατσενέζικα",
|
||||||
|
"ach": "Ακόλο",
|
||||||
|
"ada": "Αντάνγκμε",
|
||||||
|
"ady": "Αντύγκε",
|
||||||
|
"aar": "Αφάρ",
|
||||||
|
"afh": "Αφριχίλι",
|
||||||
|
"afr": "Αφρικάανς",
|
||||||
|
"ain": "Αϊνού (Ιαπωνία)",
|
||||||
|
"aka": "Ακάν",
|
||||||
|
"akk": "Akkadian",
|
||||||
|
"sqi": "Αλβανικά",
|
||||||
|
"ale": "Aleut",
|
||||||
|
"amh": "Amharic",
|
||||||
|
"anp": "Angika",
|
||||||
|
"ara": "Αραβικά",
|
||||||
|
"arg": "Αραγωνικά ",
|
||||||
|
"arp": "Αραπάχο",
|
||||||
|
"arw": "Arawak",
|
||||||
|
"hye": "Αρμένικα",
|
||||||
|
"asm": "Assamese",
|
||||||
|
"ast": "Asturian",
|
||||||
|
"ava": "Αβαρικά",
|
||||||
|
"ave": "Avestan",
|
||||||
|
"awa": "Awadhi",
|
||||||
|
"aym": "Aymara",
|
||||||
|
"aze": "Αζερμπαϊτζιανά",
|
||||||
|
"ban": "Balinese",
|
||||||
|
"bal": "Baluchi",
|
||||||
|
"bam": "Bambara",
|
||||||
|
"bas": "Basa (Cameroon)",
|
||||||
|
"bak": "Bashkir",
|
||||||
|
"eus": "Βασκικά",
|
||||||
|
"bej": "Beja",
|
||||||
|
"bel": "Λευκωρωσικά",
|
||||||
|
"bem": "Bemba (Zambia)",
|
||||||
|
"ben": "Μπενγκάλι",
|
||||||
|
"bho": "Bhojpuri",
|
||||||
|
"bik": "Bikol",
|
||||||
|
"byn": "Bilin",
|
||||||
|
"bin": "Bini",
|
||||||
|
"bis": "Bislama",
|
||||||
|
"zbl": "Blissymbols",
|
||||||
|
"bos": "Βοσνιακά",
|
||||||
|
"bra": "Braj",
|
||||||
|
"bre": "Βρετονικά",
|
||||||
|
"bug": "Buginese",
|
||||||
|
"bul": "Βουλγάρικα",
|
||||||
|
"bua": "Buriat",
|
||||||
|
"mya": "Burmese",
|
||||||
|
"cad": "Caddo",
|
||||||
|
"cat": "Καταλανικά",
|
||||||
|
"ceb": "Cebuano",
|
||||||
|
"chg": "Chagatai",
|
||||||
|
"cha": "Chamorro",
|
||||||
|
"che": "Τσετσενικά",
|
||||||
|
"chr": "Cherokee",
|
||||||
|
"chy": "Cheyenne",
|
||||||
|
"chb": "Chibcha",
|
||||||
|
"zho": "Κινέζικα",
|
||||||
|
"chn": "Chinook jargon",
|
||||||
|
"chp": "Chipewyan",
|
||||||
|
"cho": "Choctaw",
|
||||||
|
"chk": "Chuukese",
|
||||||
|
"chv": "Chuvash",
|
||||||
|
"cop": "Κοπτικά",
|
||||||
|
"cor": "Cornish",
|
||||||
|
"cos": "Κορσικανικά",
|
||||||
|
"cre": "Cree",
|
||||||
|
"mus": "Creek",
|
||||||
|
"hrv": "Κροατικά",
|
||||||
|
"ces": "Τσέχικα",
|
||||||
|
"dak": "Dakota",
|
||||||
|
"dan": "Δανέζικα",
|
||||||
|
"dar": "Dargwa",
|
||||||
|
"del": "Delaware",
|
||||||
|
"div": "Dhivehi",
|
||||||
|
"din": "Dinka",
|
||||||
|
"doi": "Dogri (macrolanguage)",
|
||||||
|
"dgr": "Dogrib",
|
||||||
|
"dua": "Duala",
|
||||||
|
"nld": "Ολλανδικά",
|
||||||
|
"dyu": "Dyula",
|
||||||
|
"dzo": "Dzongkha",
|
||||||
|
"efi": "Efik",
|
||||||
|
"egy": "Αρχαία Αιγυπτιακά",
|
||||||
|
"eka": "Ekajuk",
|
||||||
|
"elx": "Elamite",
|
||||||
|
"eng": "Αγγλικά",
|
||||||
|
"myv": "Erzya",
|
||||||
|
"epo": "Εσπεράντο",
|
||||||
|
"est": "Εσθονικά",
|
||||||
|
"ewe": "Ewe",
|
||||||
|
"ewo": "Ewondo",
|
||||||
|
"fan": "Fang (Equatorial Guinea)",
|
||||||
|
"fat": "Fanti",
|
||||||
|
"fao": "Faroese",
|
||||||
|
"fij": "Fijian",
|
||||||
|
"fil": "Filipino",
|
||||||
|
"fin": "Φινλανδικά",
|
||||||
|
"fon": "Fon",
|
||||||
|
"fra": "Γαλλικά",
|
||||||
|
"fur": "Friulian",
|
||||||
|
"ful": "Fulah",
|
||||||
|
"gaa": "Ga",
|
||||||
|
"glg": "Galician",
|
||||||
|
"lug": "Ganda",
|
||||||
|
"gay": "Gayo",
|
||||||
|
"gba": "Gbaya (Central African Republic)",
|
||||||
|
"gez": "Geez",
|
||||||
|
"kat": "Γεωργιανά",
|
||||||
|
"deu": "Γερμανικά",
|
||||||
|
"gil": "Gilbertese",
|
||||||
|
"gon": "Gondi",
|
||||||
|
"gor": "Gorontalo",
|
||||||
|
"got": "Γοτθικά",
|
||||||
|
"grb": "Grebo",
|
||||||
|
"grn": "Guarani",
|
||||||
|
"guj": "Gujarati",
|
||||||
|
"gwi": "Gwichʼin",
|
||||||
|
"hai": "Haida",
|
||||||
|
"hau": "Hausa",
|
||||||
|
"haw": "Hawaiian",
|
||||||
|
"heb": "Εβραϊκά",
|
||||||
|
"her": "Herero",
|
||||||
|
"hil": "Hiligaynon",
|
||||||
|
"hin": "Ινδικά",
|
||||||
|
"hmo": "Hiri Motu",
|
||||||
|
"hit": "Hittite",
|
||||||
|
"hmn": "Hmong",
|
||||||
|
"hun": "Ουγγρικά",
|
||||||
|
"hup": "Hupa",
|
||||||
|
"iba": "Iban",
|
||||||
|
"isl": "Ισλανδικά",
|
||||||
|
"ido": "Ido",
|
||||||
|
"ibo": "Igbo",
|
||||||
|
"ilo": "Iloko",
|
||||||
|
"ind": "Ινδονησιακά",
|
||||||
|
"inh": "Ingush",
|
||||||
|
"ina": "Interlingua (International Auxiliary Language Association)",
|
||||||
|
"ile": "Interlingue",
|
||||||
|
"iku": "Inuktitut",
|
||||||
|
"ipk": "Inupiaq",
|
||||||
|
"gle": "Ιρλανδέζικα",
|
||||||
|
"ita": "Ιταλικά",
|
||||||
|
"jpn": "Γιαπωνέζικα",
|
||||||
|
"jav": "Javanese",
|
||||||
|
"jrb": "Judeo-Arabic",
|
||||||
|
"jpr": "Judeo-Persian",
|
||||||
|
"kbd": "Kabardian",
|
||||||
|
"kab": "Kabyle",
|
||||||
|
"kac": "Kachin",
|
||||||
|
"kal": "Kalaallisut",
|
||||||
|
"xal": "Kalmyk",
|
||||||
|
"kam": "Kamba (Kenya)",
|
||||||
|
"kan": "Kannada",
|
||||||
|
"kau": "Kanuri",
|
||||||
|
"kaa": "Kara-Kalpak",
|
||||||
|
"krc": "Karachay-Balkar",
|
||||||
|
"krl": "Karelian",
|
||||||
|
"kas": "Kashmiri",
|
||||||
|
"csb": "Kashubian",
|
||||||
|
"kaw": "Kawi",
|
||||||
|
"kaz": "Kazakh",
|
||||||
|
"kha": "Khasi",
|
||||||
|
"kho": "Khotanese",
|
||||||
|
"kik": "Kikuyu",
|
||||||
|
"kmb": "Kimbundu",
|
||||||
|
"kin": "Kinyarwanda",
|
||||||
|
"kir": "Kirghiz",
|
||||||
|
"tlh": "Κλίγκον",
|
||||||
|
"kom": "Komi",
|
||||||
|
"kon": "Kongo",
|
||||||
|
"kok": "Konkani (macrolanguage)",
|
||||||
|
"kor": "Κορεάτικα",
|
||||||
|
"kos": "Kosraean",
|
||||||
|
"kpe": "Kpelle",
|
||||||
|
"kua": "Kuanyama",
|
||||||
|
"kum": "Kumyk",
|
||||||
|
"kur": "Κουρδικά",
|
||||||
|
"kru": "Kurukh",
|
||||||
|
"kut": "Kutenai",
|
||||||
|
"lad": "Ladino",
|
||||||
|
"lah": "Lahnda",
|
||||||
|
"lam": "Lamba",
|
||||||
|
"lao": "Lao",
|
||||||
|
"lat": "Λατινικά",
|
||||||
|
"lav": "Λετονέζικα",
|
||||||
|
"lez": "Lezghian",
|
||||||
|
"lim": "Limburgan",
|
||||||
|
"lin": "Lingala",
|
||||||
|
"lit": "Λιθουανικά",
|
||||||
|
"jbo": "Lojban",
|
||||||
|
"loz": "Lozi",
|
||||||
|
"lub": "Luba-Katanga",
|
||||||
|
"lua": "Luba-Lulua",
|
||||||
|
"lui": "Luiseno",
|
||||||
|
"smj": "Lule Sami",
|
||||||
|
"lun": "Lunda",
|
||||||
|
"luo": "Luo (Kenya and Tanzania)",
|
||||||
|
"lus": "Lushai",
|
||||||
|
"ltz": "Luxembourgish",
|
||||||
|
"mkd": "Σλαβομακεδονικά",
|
||||||
|
"mad": "Madurese",
|
||||||
|
"mag": "Magahi",
|
||||||
|
"mai": "Maithili",
|
||||||
|
"mak": "Makasar",
|
||||||
|
"mlg": "Malagasy",
|
||||||
|
"msa": "Malay (macrolanguage)",
|
||||||
|
"mal": "Malayalam",
|
||||||
|
"mlt": "Maltese",
|
||||||
|
"mnc": "Manchu",
|
||||||
|
"mdr": "Mandar",
|
||||||
|
"man": "Mandingo",
|
||||||
|
"mni": "Manipuri",
|
||||||
|
"glv": "Manx",
|
||||||
|
"mri": "Maori",
|
||||||
|
"arn": "Mapudungun",
|
||||||
|
"mar": "Marathi",
|
||||||
|
"chm": "Mari (Russia)",
|
||||||
|
"mah": "Marshallese",
|
||||||
|
"mwr": "Marwari",
|
||||||
|
"mas": "Masai",
|
||||||
|
"men": "Mende (Sierra Leone)",
|
||||||
|
"mic": "Mi'kmaq",
|
||||||
|
"min": "Minangkabau",
|
||||||
|
"mwl": "Mirandese",
|
||||||
|
"moh": "Mohawk",
|
||||||
|
"mdf": "Moksha",
|
||||||
|
"lol": "Mongo",
|
||||||
|
"mon": "Μογγολικά",
|
||||||
|
"mos": "Mossi",
|
||||||
|
"mul": "Πολλαπλές γλώσσες",
|
||||||
|
"nqo": "N'Ko",
|
||||||
|
"nau": "Nauru",
|
||||||
|
"nav": "Navajo",
|
||||||
|
"ndo": "Ndonga",
|
||||||
|
"nap": "Neapolitan",
|
||||||
|
"nia": "Nias",
|
||||||
|
"niu": "Niuean",
|
||||||
|
"zxx": "Χωρίς γλωσσολογικό περιεχόμενο",
|
||||||
|
"nog": "Nogai",
|
||||||
|
"nor": "Νορβηγικά",
|
||||||
|
"nob": "Norwegian Bokmål",
|
||||||
|
"nno": "Νορβηγικά Nynorsk",
|
||||||
|
"nym": "Nyamwezi",
|
||||||
|
"nya": "Nyanja",
|
||||||
|
"nyn": "Nyankole",
|
||||||
|
"nyo": "Nyoro",
|
||||||
|
"nzi": "Nzima",
|
||||||
|
"oci": "Occitan (post 1500)",
|
||||||
|
"oji": "Ojibwa",
|
||||||
|
"orm": "Oromo",
|
||||||
|
"osa": "Osage",
|
||||||
|
"oss": "Ossetian",
|
||||||
|
"pal": "Pahlavi",
|
||||||
|
"pau": "Palauan",
|
||||||
|
"pli": "Pali",
|
||||||
|
"pam": "Pampanga",
|
||||||
|
"pag": "Pangasinan",
|
||||||
|
"pan": "Panjabi",
|
||||||
|
"pap": "Papiamento",
|
||||||
|
"fas": "Περσικά",
|
||||||
|
"phn": "Φοινικικά",
|
||||||
|
"pon": "Pohnpeian",
|
||||||
|
"pol": "Πολωνέζικα",
|
||||||
|
"por": "Πορτογαλικά",
|
||||||
|
"pus": "Pashto",
|
||||||
|
"que": "Quechua",
|
||||||
|
"raj": "Rajasthani",
|
||||||
|
"rap": "Rapanui",
|
||||||
|
"ron": "Ρουμάνικα",
|
||||||
|
"roh": "Romansh",
|
||||||
|
"rom": "Romany",
|
||||||
|
"run": "Rundi",
|
||||||
|
"rus": "Ρώσικα",
|
||||||
|
"smo": "Samoan",
|
||||||
|
"sad": "Sandawe",
|
||||||
|
"sag": "Sango",
|
||||||
|
"san": "Σανσκριτικά",
|
||||||
|
"sat": "Santali",
|
||||||
|
"srd": "Sardinian",
|
||||||
|
"sas": "Sasak",
|
||||||
|
"sco": "Σκωτσέζικα",
|
||||||
|
"sel": "Selkup",
|
||||||
|
"srp": "Σερβικά",
|
||||||
|
"srr": "Serer",
|
||||||
|
"shn": "Shan",
|
||||||
|
"sna": "Shona",
|
||||||
|
"scn": "Sicilian",
|
||||||
|
"sid": "Sidamo",
|
||||||
|
"bla": "Siksika",
|
||||||
|
"snd": "Sindhi",
|
||||||
|
"sin": "Sinhala",
|
||||||
|
"den": "Slave (Athapascan)",
|
||||||
|
"slk": "Σλοβακικά",
|
||||||
|
"slv": "Σλοβενικά",
|
||||||
|
"sog": "Σογδιανά",
|
||||||
|
"som": "Σομαλικά",
|
||||||
|
"snk": "Soninke",
|
||||||
|
"spa": "Ισπανικά",
|
||||||
|
"srn": "Sranan Tongo",
|
||||||
|
"suk": "Sukuma",
|
||||||
|
"sux": "Sumerian",
|
||||||
|
"sun": "Sundanese",
|
||||||
|
"sus": "Susu",
|
||||||
|
"swa": "Swahili (macrolanguage)",
|
||||||
|
"ssw": "Swati",
|
||||||
|
"swe": "Σουηδικά",
|
||||||
|
"syr": "Συριακά",
|
||||||
|
"tgl": "Tagalog",
|
||||||
|
"tah": "Tahitian",
|
||||||
|
"tgk": "Tajik",
|
||||||
|
"tmh": "Tamashek",
|
||||||
|
"tam": "Ταμίλ",
|
||||||
|
"tat": "Tatar",
|
||||||
|
"tel": "Telugu",
|
||||||
|
"ter": "Tereno",
|
||||||
|
"tet": "Tetum",
|
||||||
|
"tha": "Ταϊλανδέζικη",
|
||||||
|
"bod": "Θιβετιανά",
|
||||||
|
"tig": "Tigre",
|
||||||
|
"tir": "Tigrinya",
|
||||||
|
"tem": "Timne",
|
||||||
|
"tiv": "Tiv",
|
||||||
|
"tli": "Tlingit",
|
||||||
|
"tpi": "Tok Pisin",
|
||||||
|
"tkl": "Τοκελάου",
|
||||||
|
"tog": "Tonga (Nyasa)",
|
||||||
|
"ton": "Tonga (Tonga Islands)",
|
||||||
|
"tsi": "Tsimshian",
|
||||||
|
"tso": "Tsonga",
|
||||||
|
"tsn": "Tswana",
|
||||||
|
"tum": "Tumbuka",
|
||||||
|
"tur": "Τουρκικά",
|
||||||
|
"tuk": "Τουρκμένικα",
|
||||||
|
"tvl": "Tuvalu",
|
||||||
|
"tyv": "Tuvinian",
|
||||||
|
"twi": "Twi",
|
||||||
|
"udm": "Udmurt",
|
||||||
|
"uga": "Ugaritic",
|
||||||
|
"uig": "Uighur",
|
||||||
|
"ukr": "Ουκρανικά",
|
||||||
|
"umb": "Umbundu",
|
||||||
|
"mis": "Uncoded languages",
|
||||||
|
"und": "Απροσδιόριστη",
|
||||||
|
"urd": "Urdu",
|
||||||
|
"uzb": "Uzbek",
|
||||||
|
"vai": "Vai",
|
||||||
|
"ven": "Venda",
|
||||||
|
"vie": "Βιετναμέζικα",
|
||||||
|
"vol": "Volapük",
|
||||||
|
"vot": "Votic",
|
||||||
|
"wln": "Walloon",
|
||||||
|
"war": "Waray (Philippines)",
|
||||||
|
"was": "Washo",
|
||||||
|
"cym": "Ουαλικά",
|
||||||
|
"wal": "Wolaytta",
|
||||||
|
"wol": "Wolof",
|
||||||
|
"xho": "Xhosa",
|
||||||
|
"sah": "Yakut",
|
||||||
|
"yao": "Yao",
|
||||||
|
"yap": "Yapese",
|
||||||
|
"yid": "Yiddish",
|
||||||
|
"yor": "Yoruba",
|
||||||
|
"zap": "Zapotec",
|
||||||
|
"zza": "Zaza",
|
||||||
|
"zen": "Zenaga",
|
||||||
|
"zha": "Zhuang",
|
||||||
|
"zul": "Zulu",
|
||||||
|
"zun": "Zuni"
|
||||||
|
},
|
||||||
"nl": {
|
"nl": {
|
||||||
"aar": "Afar; Hamitisch",
|
"aar": "Afar; Hamitisch",
|
||||||
"abk": "Abchazisch",
|
"abk": "Abchazisch",
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
from __future__ import division, print_function, unicode_literals
|
from __future__ import division, print_function, unicode_literals
|
||||||
import datetime
|
import datetime
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import re
|
|
||||||
|
|
||||||
from babel.dates import format_date
|
from babel.dates import format_date
|
||||||
from flask import Blueprint, request, url_for
|
from flask import Blueprint, request, url_for
|
||||||
|
@ -110,9 +109,21 @@ def timestamptodate(date, fmt=None):
|
||||||
def yesno(value, yes, no):
|
def yesno(value, yes, no):
|
||||||
return yes if value else no
|
return yes if value else no
|
||||||
|
|
||||||
|
|
||||||
@jinjia.app_template_filter('formatfloat')
|
@jinjia.app_template_filter('formatfloat')
|
||||||
def formatfloat(value, decimals=1):
|
def formatfloat(value, decimals=1):
|
||||||
formatedstring = '%d' % value
|
formatedstring = '%d' % value
|
||||||
if (value % 1) != 0:
|
if (value % 1) != 0:
|
||||||
formatedstring = ('%s.%d' % (formatedstring, (value % 1) * 10**decimals)).rstrip('0')
|
formatedstring = ('%s.%d' % (formatedstring, (value % 1) * 10**decimals)).rstrip('0')
|
||||||
return formatedstring
|
return formatedstring
|
||||||
|
|
||||||
|
|
||||||
|
@jinjia.app_template_filter('formatseriesindex')
|
||||||
|
def formatseriesindex_filter(series_index):
|
||||||
|
if series_index:
|
||||||
|
if int(series_index) - series_index == 0:
|
||||||
|
return int(series_index)
|
||||||
|
else:
|
||||||
|
return series_index
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ from flask import (
|
||||||
redirect,
|
redirect,
|
||||||
abort
|
abort
|
||||||
)
|
)
|
||||||
from flask_login import current_user, login_required
|
from flask_login import current_user
|
||||||
from werkzeug.datastructures import Headers
|
from werkzeug.datastructures import Headers
|
||||||
from sqlalchemy import func
|
from sqlalchemy import func
|
||||||
from sqlalchemy.sql.expression import and_, or_
|
from sqlalchemy.sql.expression import and_, or_
|
||||||
|
|
|
@ -408,7 +408,7 @@ def get_metadata_calibre_companion(uuid, library):
|
||||||
|
|
||||||
def feed_search(term):
|
def feed_search(term):
|
||||||
if term:
|
if term:
|
||||||
entries, __ = calibre_db.get_search_results(term)
|
entries, __, ___ = calibre_db.get_search_results(term)
|
||||||
entriescount = len(entries) if len(entries) > 0 else 1
|
entriescount = len(entries) if len(entries) > 0 else 1
|
||||||
pagination = Pagination(1, entriescount, entriescount)
|
pagination = Pagination(1, entriescount, entriescount)
|
||||||
return render_xml_template('feed.xml', searchterm=term, entries=entries, pagination=pagination)
|
return render_xml_template('feed.xml', searchterm=term, entries=entries, pagination=pagination)
|
||||||
|
|
|
@ -150,7 +150,7 @@ class WebServer(object):
|
||||||
def my_wrap_socket(*args, **kwargs):
|
def my_wrap_socket(*args, **kwargs):
|
||||||
try:
|
try:
|
||||||
return wrap_socket(*args, **kwargs)
|
return wrap_socket(*args, **kwargs)
|
||||||
except (ssl.SSLError) as ex:
|
except (ssl.SSLError, OSError) as ex:
|
||||||
log.warning('Gevent SSL Error: %s', ex)
|
log.warning('Gevent SSL Error: %s', ex)
|
||||||
raise GreenletExit
|
raise GreenletExit
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ def get_author_info(author_name):
|
||||||
author_info = _client.find_author(author_name=author_name)
|
author_info = _client.find_author(author_name=author_name)
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
# Skip goodreads, if site is down/inaccessible
|
# Skip goodreads, if site is down/inaccessible
|
||||||
log.warning('Goodreads website is down/inaccessible? %s', ex)
|
log.warning('Goodreads website is down/inaccessible? %s', ex.__str__())
|
||||||
return
|
return
|
||||||
|
|
||||||
if author_info:
|
if author_info:
|
||||||
|
|
|
@ -831,7 +831,10 @@ body:not(.read-frame) {
|
||||||
font-family: Open Sans Semibold, Helvetica Neue, Helvetica, Arial, sans-serif;
|
font-family: Open Sans Semibold, Helvetica Neue, Helvetica, Arial, sans-serif;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin: 0
|
margin: 0;
|
||||||
|
/* scroll bar fix for firefox */
|
||||||
|
scrollbar-color: hsla(0, 0%, 100%, .2) transparent;
|
||||||
|
scrollbar-width: thin;
|
||||||
}
|
}
|
||||||
|
|
||||||
body > div.navbar.navbar-default.navbar-static-top > div > form > div {
|
body > div.navbar.navbar-default.navbar-static-top > div > form > div {
|
||||||
|
@ -2174,7 +2177,7 @@ body.langlist > div.container-fluid > div > div.col-sm-10:before {
|
||||||
content: "\e034"
|
content: "\e034"
|
||||||
}
|
}
|
||||||
|
|
||||||
body.advsearch > div.container-fluid > div > div.col-sm-10:before, body.authorlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.catlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.langlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before, body.serieslist > div.container-fluid > div > div.col-sm-10 > div.container:before {
|
body.authorlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.catlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.langlist > div.container-fluid > div > div.col-sm-10 > div.container:before, body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before, body.serieslist > div.container-fluid > div > div.col-sm-10 > div.container:before {
|
||||||
top: 60px;
|
top: 60px;
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
color: #eee;
|
color: #eee;
|
||||||
|
@ -2244,10 +2247,14 @@ body.langlist > div.container-fluid > div > div.col-sm-10 > div.container:before
|
||||||
content: "Languages"
|
content: "Languages"
|
||||||
}
|
}
|
||||||
|
|
||||||
body.advsearch > div.container-fluid > div > div.col-sm-10:before {
|
body.advsearch > div.container-fluid > div > div.col-sm-10 > div.col-md-10.col-lg-6 {
|
||||||
content: "Advanced Search";
|
padding: 15px 10px 15px 40px;
|
||||||
margin-left: 20%;
|
}
|
||||||
left: 0
|
|
||||||
|
@media screen and (max-width: 992px) {
|
||||||
|
body.advsearch > div.container-fluid > div > div.col-sm-10 > div.col-md-10.col-lg-6 {
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before {
|
body.me > div.container-fluid > div > div.col-sm-10 > div.discover:before {
|
||||||
|
@ -3502,6 +3509,20 @@ body.shelf > div.container-fluid > div > div.col-sm-10 > div.discover > h2 {
|
||||||
padding-right: 25px !important
|
padding-right: 25px !important
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.shelf-down > .discover > h2 {
|
||||||
|
color: inherit;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.shelf-down > .discover > .row > .book.col-sm-3.col-lg-2.col-xs-6 {
|
||||||
|
max-width: 225px !important;
|
||||||
|
width: 225px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
body.shelf-down .btn-group button#btnGroupDrop1 {
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
.author > .container-fluid > .row-fluid > .col-sm-10 > h2:before, .plexBack > a {
|
.author > .container-fluid > .row-fluid > .col-sm-10 > h2:before, .plexBack > a {
|
||||||
-moz-text-size-adjust: 100%;
|
-moz-text-size-adjust: 100%;
|
||||||
-ms-text-size-adjust: 100%;
|
-ms-text-size-adjust: 100%;
|
|
@ -143,6 +143,12 @@ a, .danger,.book-remove, .editable-empty, .editable-empty:hover { color: #45b29d
|
||||||
color: #444;
|
color: #444;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.container-fluid .book .meta .series {
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
.container-fluid .book .meta .author {
|
.container-fluid .book .meta .author {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
color: #999;
|
color: #999;
|
||||||
|
|
1
cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js
vendored
Normal file
1
cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.el.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!function(a){a.fn.datepicker.dates.el={days:["Κυριακή","Δευτέρα","Τρίτη","Τετάρτη","Πέμπτη","Παρασκευή","Σάββατο"],daysShort:["Κυρ","Δευ","Τρι","Τετ","Πεμ","Παρ","Σαβ"],daysMin:["Κυ","Δε","Τρ","Τε","Πε","Πα","Σα"],months:["Ιανουάριος","Φεβρουάριος","Μάρτιος","Απρίλιος","Μάιος","Ιούνιος","Ιούλιος","Αύγουστος","Σεπτέμβριος","Οκτώβριος","Νοέμβριος","Δεκέμβριος"],monthsShort:["Ιαν","Φεβ","Μαρ","Απρ","Μάι","Ιουν","Ιουλ","Αυγ","Σεπ","Οκτ","Νοε","Δεκ"],today:"Σήμερα",clear:"Καθαρισμός",weekStart:1,format:"d/m/yyyy"}}(jQuery);
|
1
cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js
vendored
Normal file
1
cps/static/js/libs/bootstrap-datepicker/locales/bootstrap-datepicker.tr.min.js
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
!function(a){a.fn.datepicker.dates.tr={days:["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],daysShort:["Pz","Pzt","Sal","Çrş","Prş","Cu","Cts"],daysMin:["Pz","Pzt","Sa","Çr","Pr","Cu","Ct"],months:["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],monthsShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],today:"Bugün",clear:"Temizle",weekStart:1,format:"dd.mm.yyyy"}}(jQuery);
|
261
cps/static/js/libs/tinymce/langs/el.js
Normal file
261
cps/static/js/libs/tinymce/langs/el.js
Normal file
|
@ -0,0 +1,261 @@
|
||||||
|
tinymce.addI18n('el',{
|
||||||
|
"Redo": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7",
|
||||||
|
"Undo": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7",
|
||||||
|
"Cut": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae",
|
||||||
|
"Copy": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae",
|
||||||
|
"Paste": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7",
|
||||||
|
"Select all": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd",
|
||||||
|
"New document": "\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf",
|
||||||
|
"Ok": "\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9",
|
||||||
|
"Cancel": "\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7",
|
||||||
|
"Visual aids": "O\u03c0\u03c4\u03b9\u03ba\u03ac \u03b2\u03bf\u03b7\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1 ",
|
||||||
|
"Bold": "\u0388\u03bd\u03c4\u03bf\u03bd\u03b7",
|
||||||
|
"Italic": "\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1",
|
||||||
|
"Underline": "\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7",
|
||||||
|
"Strikethrough": "\u0394\u03b9\u03b1\u03ba\u03c1\u03b9\u03c4\u03ae \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae",
|
||||||
|
"Superscript": "\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2",
|
||||||
|
"Subscript": "\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2",
|
||||||
|
"Clear formatting": "\u0391\u03c0\u03b1\u03bb\u03bf\u03b9\u03c6\u03ae \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2",
|
||||||
|
"Align left": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
|
||||||
|
"Align center": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf",
|
||||||
|
"Align right": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac",
|
||||||
|
"Justify": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
|
||||||
|
"Bullet list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03ba\u03bf\u03c5\u03ba\u03ba\u03af\u03b4\u03b5\u03c2",
|
||||||
|
"Numbered list": "\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1",
|
||||||
|
"Decrease indent": "\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2",
|
||||||
|
"Increase indent": "\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2",
|
||||||
|
"Close": "\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",
|
||||||
|
"Formats": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
|
||||||
|
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u039f \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2 \u03c3\u03b1\u03c2 \u03b4\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03b9 \u03ac\u03bc\u03b5\u03c3\u03b7 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03cc\u03c7\u03b5\u03b9\u03c1\u03bf. \u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5 Ctrl+X\/C\/V.",
|
||||||
|
"Headers": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2",
|
||||||
|
"Header 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1",
|
||||||
|
"Header 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2",
|
||||||
|
"Header 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3",
|
||||||
|
"Header 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4",
|
||||||
|
"Header 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5",
|
||||||
|
"Header 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6",
|
||||||
|
"Headings": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b5\u03c2",
|
||||||
|
"Heading 1": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1",
|
||||||
|
"Heading 2": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2",
|
||||||
|
"Heading 3": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3",
|
||||||
|
"Heading 4": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4",
|
||||||
|
"Heading 5": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5",
|
||||||
|
"Heading 6": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6",
|
||||||
|
"Preformatted": "\u03a0\u03c1\u03bf\u03b4\u03b9\u03b1\u03bc\u03bf\u03c1\u03c6\u03c9\u03bc\u03ad\u03bd\u03bf",
|
||||||
|
"Div": "Div",
|
||||||
|
"Pre": "Pre",
|
||||||
|
"Code": "\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2",
|
||||||
|
"Paragraph": "\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2",
|
||||||
|
"Blockquote": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u03c0\u03b1\u03c1\u03ac\u03b8\u03b5\u03c3\u03b7\u03c2",
|
||||||
|
"Inline": "\u0395\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b7",
|
||||||
|
"Blocks": "\u03a4\u03bc\u03ae\u03bc\u03b1\u03c4\u03b1",
|
||||||
|
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0397 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a4\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03b1 \u03bc\u03b9\u03b1\u03c2 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03bf\u03cd\u03bd\u03c4\u03b1\u03b9 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03cc\u03c3\u03bf \u03b7 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c5\u03c4\u03ae \u03c0\u03b1\u03c1\u03b1\u03bc\u03ad\u03bd\u03b5\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03ae.",
|
||||||
|
"Font Family": "\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac",
|
||||||
|
"Font Sizes": "\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2",
|
||||||
|
"Class": "\u039a\u03bb\u03ac\u03c3\u03b7",
|
||||||
|
"Browse for an image": "\u0391\u03bd\u03b1\u03b6\u03b7\u03c4\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1",
|
||||||
|
"OR": "\u0389",
|
||||||
|
"Drop an image here": "\u03a1\u03af\u03be\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03b5\u03b4\u03ce",
|
||||||
|
"Upload": "\u039c\u03b5\u03c4\u03b1\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7",
|
||||||
|
"Block": "\u03a4\u03bc\u03ae\u03bc\u03b1",
|
||||||
|
"Align": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
|
||||||
|
"Default": "\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",
|
||||||
|
"Circle": "\u039a\u03cd\u03ba\u03bb\u03bf\u03c2",
|
||||||
|
"Disc": "\u0394\u03af\u03c3\u03ba\u03bf\u03c2",
|
||||||
|
"Square": "\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf",
|
||||||
|
"Lower Alpha": "\u03a0\u03b5\u03b6\u03ac \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac",
|
||||||
|
"Lower Greek": "\u03a0\u03b5\u03b6\u03ac \u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac",
|
||||||
|
"Lower Roman": "\u03a0\u03b5\u03b6\u03ac \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac",
|
||||||
|
"Upper Alpha": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03bb\u03b1\u03c4\u03b9\u03bd\u03b9\u03ba\u03ac",
|
||||||
|
"Upper Roman": "\u039a\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1 \u03c1\u03c9\u03bc\u03b1\u03ca\u03ba\u03ac",
|
||||||
|
"Anchor": "\u0391\u03b3\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7",
|
||||||
|
"Name": "\u038c\u03bd\u03bf\u03bc\u03b1",
|
||||||
|
"Id": "\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2",
|
||||||
|
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u039f \u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b1\u03c1\u03c7\u03af\u03b6\u03b5\u03b9 \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1, \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03bc\u03cc\u03bd\u03bf \u03b1\u03c0\u03cc \u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03b1, \u03b1\u03c1\u03b9\u03b8\u03bc\u03bf\u03cd\u03c2, \u03c0\u03b1\u03cd\u03bb\u03b5\u03c2, \u03c4\u03b5\u03bb\u03b5\u03af\u03b5\u03c2, \u03ac\u03bd\u03c9 \u03c4\u03b5\u03bb\u03b5\u03af\u03b1 \u03ae \u03c5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03af\u03c3\u03b5\u03b9\u03c2.",
|
||||||
|
"You have unsaved changes are you sure you want to navigate away?": "\u0388\u03c7\u03b5\u03c4\u03b5 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2. \u0395\u03af\u03c3\u03c4\u03b5 \u03b2\u03ad\u03b2\u03b1\u03b9\u03bf\u03b9 \u03cc\u03c4\u03b9 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03c3\u03b5\u03bb\u03af\u03b4\u03b1;",
|
||||||
|
"Restore last draft": "\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf\u03c5 \u03c3\u03c7\u03b5\u03b4\u03af\u03bf\u03c5",
|
||||||
|
"Special character": "\u0395\u03b9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1\u03c2",
|
||||||
|
"Source code": "\u03a0\u03b7\u03b3\u03b1\u03af\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2",
|
||||||
|
"Insert\/Edit code sample": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b4\u03b5\u03af\u03b3\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1",
|
||||||
|
"Language": "\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",
|
||||||
|
"Code sample": "\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u039a\u03ce\u03b4\u03b9\u03ba\u03b1",
|
||||||
|
"Color": "\u03a7\u03c1\u03ce\u03bc\u03b1",
|
||||||
|
"R": "\u03ba",
|
||||||
|
"G": "\u03a0",
|
||||||
|
"B": "\u039c",
|
||||||
|
"Left to right": "\u0391\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b4\u03b5\u03be\u03b9\u03ac",
|
||||||
|
"Right to left": "\u0391\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
|
||||||
|
"Emoticons": "\u03a6\u03b1\u03c4\u03c3\u03bf\u03cd\u03bb\u03b5\u03c2",
|
||||||
|
"Document properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5",
|
||||||
|
"Title": "\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",
|
||||||
|
"Keywords": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac",
|
||||||
|
"Description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae",
|
||||||
|
"Robots": "\u03a1\u03bf\u03bc\u03c0\u03cc\u03c4",
|
||||||
|
"Author": "\u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2",
|
||||||
|
"Encoding": "\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
|
||||||
|
"Fullscreen": "\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7",
|
||||||
|
"Action": "\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1",
|
||||||
|
"Shortcut": "\u03a3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7",
|
||||||
|
"Help": "\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1",
|
||||||
|
"Address": "\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",
|
||||||
|
"Focus to menubar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd",
|
||||||
|
"Focus to toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd",
|
||||||
|
"Focus to element path": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5",
|
||||||
|
"Focus to contextual toolbar": "\u0395\u03c3\u03c4\u03af\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7 \u03c3\u03c5\u03bd\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd",
|
||||||
|
"Insert link (if link plugin activated)": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03bf\u03c5 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5)",
|
||||||
|
"Save (if save plugin activated)": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7\u03c2)",
|
||||||
|
"Find (if searchreplace plugin activated)": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 (\u03b5\u03ac\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf \u03c4\u03b7\u03c2 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7\u03c2)",
|
||||||
|
"Plugins installed ({0}):": "\u0395\u03b3\u03ba\u03b1\u03c4\u03b5\u03c3\u03c4\u03b7\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 ({0}):",
|
||||||
|
"Premium plugins:": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1 \u03c5\u03c8\u03b7\u03bb\u03ae\u03c2 \u03c0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1\u03c2:",
|
||||||
|
"Learn more...": "\u039c\u03ac\u03b8\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1...",
|
||||||
|
"You are using {0}": "\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b5 {0}",
|
||||||
|
"Plugins": "\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1",
|
||||||
|
"Handy Shortcuts": "\u03a7\u03c1\u03ae\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2",
|
||||||
|
"Horizontal line": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae",
|
||||||
|
"Insert\/edit image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
|
||||||
|
"Image description": "\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
|
||||||
|
"Source": "\u03a0\u03b7\u03b3\u03ae",
|
||||||
|
"Dimensions": "\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2",
|
||||||
|
"Constrain proportions": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03b9\u03ce\u03bd",
|
||||||
|
"General": "\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",
|
||||||
|
"Advanced": "\u0393\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2",
|
||||||
|
"Style": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7",
|
||||||
|
"Vertical space": "\u039a\u03ac\u03b8\u03b5\u03c4\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1",
|
||||||
|
"Horizontal space": "\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1",
|
||||||
|
"Border": "\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf",
|
||||||
|
"Insert image": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
|
||||||
|
"Image": "\u0395\u03b9\u03ba\u03cc\u03bd\u03b1",
|
||||||
|
"Image list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd",
|
||||||
|
"Rotate counterclockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1",
|
||||||
|
"Rotate clockwise": "\u03a0\u03b5\u03c1\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03b4\u03b5\u03be\u03b9\u03cc\u03c3\u03c4\u03c1\u03bf\u03c6\u03b1",
|
||||||
|
"Flip vertically": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03ba\u03b1\u03b8\u03ad\u03c4\u03c9\u03c2",
|
||||||
|
"Flip horizontally": "\u0391\u03bd\u03b1\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae \u03bf\u03c1\u03b9\u03b6\u03bf\u03bd\u03c4\u03af\u03c9\u03c2",
|
||||||
|
"Edit image": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
|
||||||
|
"Image options": "\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",
|
||||||
|
"Zoom in": "\u039c\u03b5\u03b3\u03ad\u03b8\u03c5\u03bd\u03c3\u03b7",
|
||||||
|
"Zoom out": "\u03a3\u03bc\u03af\u03ba\u03c1\u03c5\u03bd\u03c3\u03b7",
|
||||||
|
"Crop": "\u03a0\u03b5\u03c1\u03b9\u03ba\u03bf\u03c0\u03ae",
|
||||||
|
"Resize": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2",
|
||||||
|
"Orientation": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03bd\u03b1\u03c4\u03bf\u03bb\u03b9\u03c3\u03bc\u03cc\u03c2",
|
||||||
|
"Brightness": "\u03a6\u03c9\u03c4\u03b5\u03b9\u03bd\u03cc\u03c4\u03b7\u03c4\u03b1",
|
||||||
|
"Sharpen": "\u038c\u03be\u03c5\u03bd\u03c3\u03b7",
|
||||||
|
"Contrast": "\u0391\u03bd\u03c4\u03af\u03b8\u03b5\u03c3\u03b7",
|
||||||
|
"Color levels": "\u0395\u03c0\u03af\u03c0\u03b5\u03b4\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2",
|
||||||
|
"Gamma": "\u0393\u03ac\u03bc\u03bc\u03b1",
|
||||||
|
"Invert": "\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae",
|
||||||
|
"Apply": "\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae",
|
||||||
|
"Back": "\u03a0\u03af\u03c3\u03c9",
|
||||||
|
"Insert date\/time": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\u03c2\/\u03ce\u03c1\u03b1\u03c2",
|
||||||
|
"Date\/time": "\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1\/\u03ce\u03c1\u03b1",
|
||||||
|
"Insert link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
|
||||||
|
"Insert\/edit link": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
|
||||||
|
"Text to display": "\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b3\u03b9\u03b1 \u03b5\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7",
|
||||||
|
"Url": "URL",
|
||||||
|
"Target": "\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",
|
||||||
|
"None": "\u039a\u03b1\u03bc\u03af\u03b1",
|
||||||
|
"New window": "\u039d\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf",
|
||||||
|
"Remove link": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",
|
||||||
|
"Anchors": "\u0386\u03b3\u03ba\u03c5\u03c1\u03b5\u03c2",
|
||||||
|
"Link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2",
|
||||||
|
"Paste or type a link": "\u0395\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03c4\u03b5 \u03ae \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03ae\u03c3\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf",
|
||||||
|
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 email. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 mailto:;",
|
||||||
|
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0397 \u03b4\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03c7\u03b8\u03b7\u03ba\u03b5 \u03c0\u03b9\u03b8\u03b1\u03bd\u03ce\u03c2 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2. \u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03b1\u03b9\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03c0\u03c1\u03cc\u03b8\u03b7\u03bc\u03b1 http:\/\/;",
|
||||||
|
"Link list": "\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd",
|
||||||
|
"Insert video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b2\u03af\u03bd\u03c4\u03b5\u03bf",
|
||||||
|
"Insert\/edit video": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b2\u03af\u03bd\u03c4\u03b5\u03bf",
|
||||||
|
"Insert\/edit media": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 media",
|
||||||
|
"Alternative source": "\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03c1\u03bf\u03ad\u03bb\u03b5\u03c5\u03c3\u03b7",
|
||||||
|
"Poster": "\u0391\u03c6\u03af\u03c3\u03b1",
|
||||||
|
"Paste your embed code below:": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf\u03bd \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03bf \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 \u03c0\u03b1\u03c1\u03b1\u03ba\u03ac\u03c4\u03c9:",
|
||||||
|
"Embed": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7",
|
||||||
|
"Media": "\u039c\u03ad\u03c3\u03b1 (\u03bc\u03af\u03bd\u03c4\u03b9\u03b1)",
|
||||||
|
"Nonbreaking space": "\u039a\u03b5\u03bd\u03cc \u03c7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03b1\u03ba\u03bf\u03c0\u03ae",
|
||||||
|
"Page break": "\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2",
|
||||||
|
"Paste as text": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf",
|
||||||
|
"Preview": "\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7",
|
||||||
|
"Print": "\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7",
|
||||||
|
"Save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7",
|
||||||
|
"Find": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7",
|
||||||
|
"Replace with": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5",
|
||||||
|
"Replace": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7",
|
||||||
|
"Replace all": "\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd",
|
||||||
|
"Prev": "\u03a0\u03c1\u03bf\u03b7\u03b3.",
|
||||||
|
"Next": "\u0395\u03c0\u03cc\u03bc.",
|
||||||
|
"Find and replace": "\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7",
|
||||||
|
"Could not find the specified string.": "\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03b5\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bb\u03c6\u03b1\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03b9\u03ba\u03bf\u03cd.",
|
||||||
|
"Match case": "\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03c0\u03b5\u03b6\u03ce\u03bd\/\u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03c9\u03bd",
|
||||||
|
"Whole words": "\u039f\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03b5\u03c2 \u03bb\u03ad\u03be\u03b5\u03b9\u03c2",
|
||||||
|
"Spellcheck": "\u039f\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03cc\u03c2 \u03ad\u03bb\u03b5\u03b3\u03c7\u03bf\u03c2 ",
|
||||||
|
"Ignore": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7",
|
||||||
|
"Ignore all": "\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03cc\u03bb\u03c9\u03bd",
|
||||||
|
"Finish": "\u03a4\u03ad\u03bb\u03bf\u03c2",
|
||||||
|
"Add to Dictionary": "\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf \u039b\u03b5\u03be\u03b9\u03ba\u03cc",
|
||||||
|
"Insert table": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",
|
||||||
|
"Table properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",
|
||||||
|
"Delete table": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",
|
||||||
|
"Cell": "\u039a\u03b5\u03bb\u03af",
|
||||||
|
"Row": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ae",
|
||||||
|
"Column": "\u03a3\u03c4\u03ae\u03bb\u03b7",
|
||||||
|
"Cell properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",
|
||||||
|
"Merge cells": "\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",
|
||||||
|
"Split cell": "\u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",
|
||||||
|
"Insert row before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9",
|
||||||
|
"Insert row after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9",
|
||||||
|
"Delete row": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
|
||||||
|
"Row properties": "\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
|
||||||
|
"Cut row": "\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
|
||||||
|
"Copy row": "\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
|
||||||
|
"Paste row before": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03b5\u03c0\u03ac\u03bd\u03c9",
|
||||||
|
"Paste row after": "\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03ac\u03c4\u03c9",
|
||||||
|
"Insert column before": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
|
||||||
|
"Insert column after": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",
|
||||||
|
"Delete column": "\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2",
|
||||||
|
"Cols": "\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2",
|
||||||
|
"Rows": "\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2",
|
||||||
|
"Width": "\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",
|
||||||
|
"Height": "\u038e\u03c8\u03bf\u03c2",
|
||||||
|
"Cell spacing": "\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",
|
||||||
|
"Cell padding": "\u0391\u03bd\u03b1\u03c0\u03bb\u03ae\u03c1\u03c9\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",
|
||||||
|
"Caption": "\u039b\u03b5\u03b6\u03ac\u03bd\u03c4\u03b1",
|
||||||
|
"Left": "\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",
|
||||||
|
"Center": "\u039a\u03b5\u03bd\u03c4\u03c1\u03b1\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7",
|
||||||
|
"Right": "\u0394\u03b5\u03be\u03b9\u03ac",
|
||||||
|
"Cell type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",
|
||||||
|
"Scope": "\u0388\u03ba\u03c4\u03b1\u03c3\u03b7",
|
||||||
|
"Alignment": "\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
|
||||||
|
"H Align": "\u039f\u03c1. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
|
||||||
|
"V Align": "\u039a. \u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",
|
||||||
|
"Top": "\u039a\u03bf\u03c1\u03c5\u03c6\u03ae",
|
||||||
|
"Middle": "\u039c\u03ad\u03c3\u03b7",
|
||||||
|
"Bottom": "\u039a\u03ac\u03c4\u03c9",
|
||||||
|
"Header cell": "\u039a\u03b5\u03bb\u03af-\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1",
|
||||||
|
"Row group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd",
|
||||||
|
"Column group": "\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd",
|
||||||
|
"Row type": "\u03a4\u03cd\u03c0\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2",
|
||||||
|
"Header": "\u039a\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1",
|
||||||
|
"Body": "\u03a3\u03ce\u03bc\u03b1",
|
||||||
|
"Footer": "\u03a5\u03c0\u03bf\u03c3\u03ad\u03bb\u03b9\u03b4\u03bf",
|
||||||
|
"Border color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5",
|
||||||
|
"Insert template": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5 ",
|
||||||
|
"Templates": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1",
|
||||||
|
"Template": "\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",
|
||||||
|
"Text color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 ",
|
||||||
|
"Background color": "\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",
|
||||||
|
"Custom...": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae...",
|
||||||
|
"Custom color": "\u03a0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03c3\u03bc\u03ad\u03bd\u03bf \u03c7\u03c1\u03ce\u03bc\u03b1",
|
||||||
|
"No color": "\u03a7\u03c9\u03c1\u03af\u03c2 \u03c7\u03c1\u03ce\u03bc\u03b1",
|
||||||
|
"Table of Contents": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd",
|
||||||
|
"Show blocks": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03bc\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd",
|
||||||
|
"Show invisible characters": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03ba\u03c1\u03c5\u03c6\u03ce\u03bd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd",
|
||||||
|
"Words: {0}": "\u039b\u03ad\u03be\u03b5\u03b9\u03c2: {0}",
|
||||||
|
"{0} words": "{0} \u03bb\u03ad\u03be\u03b5\u03b9\u03c2",
|
||||||
|
"File": "\u0391\u03c1\u03c7\u03b5\u03af\u03bf",
|
||||||
|
"Edit": "\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1",
|
||||||
|
"Insert": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae",
|
||||||
|
"View": "\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae",
|
||||||
|
"Format": "\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",
|
||||||
|
"Table": "\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2",
|
||||||
|
"Tools": "\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1",
|
||||||
|
"Powered by {0}": "\u03a4\u03c1\u03bf\u03c6\u03bf\u03b4\u03bf\u03c4\u03b5\u03af\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc {0}",
|
||||||
|
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u03a0\u03b5\u03c1\u03b9\u03bf\u03c7\u03ae \u0395\u03bc\u03c0\u03bb\u03bf\u03c5\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F9 \u03b3\u03b9\u03b1 \u03c4\u03bf \u03bc\u03b5\u03bd\u03bf\u03cd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1 \u03c4\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1"
|
||||||
|
});
|
419
cps/static/js/libs/tinymce/langs/tr.js
Normal file
419
cps/static/js/libs/tinymce/langs/tr.js
Normal file
|
@ -0,0 +1,419 @@
|
||||||
|
tinymce.addI18n('tr',{
|
||||||
|
"Redo": "Yinele",
|
||||||
|
"Undo": "Geri al",
|
||||||
|
"Cut": "Kes",
|
||||||
|
"Copy": "Kopyala",
|
||||||
|
"Paste": "Yap\u0131\u015ft\u0131r",
|
||||||
|
"Select all": "T\u00fcm\u00fcn\u00fc se\u00e7",
|
||||||
|
"New document": "Yeni dok\u00fcman",
|
||||||
|
"Ok": "Tamam",
|
||||||
|
"Cancel": "\u0130ptal",
|
||||||
|
"Visual aids": "G\u00f6rsel ara\u00e7lar",
|
||||||
|
"Bold": "Kal\u0131n",
|
||||||
|
"Italic": "\u0130talik",
|
||||||
|
"Underline": "Alt\u0131 \u00e7izili",
|
||||||
|
"Strikethrough": "\u00dcst\u00fc \u00e7izgili",
|
||||||
|
"Superscript": "\u00dcst simge",
|
||||||
|
"Subscript": "Alt simge",
|
||||||
|
"Clear formatting": "Bi\u00e7imi temizle",
|
||||||
|
"Align left": "Sola hizala",
|
||||||
|
"Align center": "Ortala",
|
||||||
|
"Align right": "Sa\u011fa hizala",
|
||||||
|
"Justify": "\u0130ki yana yasla",
|
||||||
|
"Bullet list": "S\u0131ras\u0131z liste",
|
||||||
|
"Numbered list": "S\u0131ral\u0131 liste",
|
||||||
|
"Decrease indent": "Girintiyi azalt",
|
||||||
|
"Increase indent": "Girintiyi art\u0131r",
|
||||||
|
"Close": "Kapat",
|
||||||
|
"Formats": "Bi\u00e7imler",
|
||||||
|
"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Taray\u0131c\u0131n\u0131z panoya direk eri\u015fimi desteklemiyor. L\u00fctfen Ctrl+X\/C\/V klavye k\u0131sayollar\u0131n\u0131 kullan\u0131n.",
|
||||||
|
"Headers": "Ba\u015fl\u0131klar",
|
||||||
|
"Header 1": "Ba\u015fl\u0131k 1",
|
||||||
|
"Header 2": "Ba\u015fl\u0131k 2",
|
||||||
|
"Header 3": "Ba\u015fl\u0131k 3",
|
||||||
|
"Header 4": "Ba\u015fl\u0131k 4",
|
||||||
|
"Header 5": "Ba\u015fl\u0131k 5",
|
||||||
|
"Header 6": "Ba\u015fl\u0131k 6",
|
||||||
|
"Headings": "Ba\u015fl\u0131klar",
|
||||||
|
"Heading 1": "Ba\u015fl\u0131k 1",
|
||||||
|
"Heading 2": "Ba\u015fl\u0131k 2",
|
||||||
|
"Heading 3": "Ba\u015fl\u0131k 3",
|
||||||
|
"Heading 4": "Ba\u015fl\u0131k 4",
|
||||||
|
"Heading 5": "Ba\u015fl\u0131k 5",
|
||||||
|
"Heading 6": "Ba\u015fl\u0131k 6",
|
||||||
|
"Preformatted": "\u00d6nceden bi\u00e7imlendirilmi\u015f",
|
||||||
|
"Div": "Div",
|
||||||
|
"Pre": "Pre",
|
||||||
|
"Code": "Kod",
|
||||||
|
"Paragraph": "Paragraf",
|
||||||
|
"Blockquote": "Blockquote",
|
||||||
|
"Inline": "Sat\u0131r i\u00e7i",
|
||||||
|
"Blocks": "Bloklar",
|
||||||
|
"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Bu se\u00e7ene\u011fi kapatana kadar i\u00e7erikler d\u00fcz metin olarak yap\u0131\u015ft\u0131r\u0131l\u0131r.",
|
||||||
|
"Fonts": "Yaz\u0131 Tipleri",
|
||||||
|
"Font Sizes": "Yaz\u0131tipi B\u00fcy\u00fckl\u00fc\u011f\u00fc",
|
||||||
|
"Class": "S\u0131n\u0131f",
|
||||||
|
"Browse for an image": "Bir resim aray\u0131n",
|
||||||
|
"OR": "VEYA",
|
||||||
|
"Drop an image here": "Buraya bir resim koyun",
|
||||||
|
"Upload": "Y\u00fckle",
|
||||||
|
"Block": "Blok",
|
||||||
|
"Align": "Hizala",
|
||||||
|
"Default": "Varsay\u0131lan",
|
||||||
|
"Circle": "Daire",
|
||||||
|
"Disc": "Disk",
|
||||||
|
"Square": "Kare",
|
||||||
|
"Lower Alpha": "K\u00fc\u00e7\u00fck Harf",
|
||||||
|
"Lower Greek": "K\u00fc\u00e7\u00fck Yunan Harfleri",
|
||||||
|
"Lower Roman": "K\u00fc\u00e7\u00fck Roman Harfleri ",
|
||||||
|
"Upper Alpha": "B\u00fcy\u00fck Harf",
|
||||||
|
"Upper Roman": "B\u00fcy\u00fck Roman Harfleri ",
|
||||||
|
"Anchor...": "\u00c7apa...",
|
||||||
|
"Name": "\u0130sim",
|
||||||
|
"Id": "Kimlik",
|
||||||
|
"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id bir harf ile ba\u015flamal\u0131d\u0131r ve harf, rakam, \u00e7izgi, nokta, iki nokta \u00fcst\u00fcste veya alt \u00e7izgi kullan\u0131labilir.",
|
||||||
|
"You have unsaved changes are you sure you want to navigate away?": "Kaydedilmemi\u015f de\u011fi\u015fiklikler var, sayfadan ayr\u0131lmak istedi\u011finize emin misiniz?",
|
||||||
|
"Restore last draft": "Son tasla\u011f\u0131 geri y\u00fckle",
|
||||||
|
"Special character...": "\u00d6zel karakter...",
|
||||||
|
"Source code": "Kaynak kodu",
|
||||||
|
"Insert\/Edit code sample": "\u00d6rnek kod ekle\/d\u00fczenle",
|
||||||
|
"Language": "Dil",
|
||||||
|
"Code sample...": "Kod \u00f6rne\u011fi...",
|
||||||
|
"Color Picker": "Renk Se\u00e7ici",
|
||||||
|
"R": "R",
|
||||||
|
"G": "G",
|
||||||
|
"B": "B",
|
||||||
|
"Left to right": "Soldan sa\u011fa",
|
||||||
|
"Right to left": "Sa\u011fdan sola",
|
||||||
|
"Emoticons...": "\u0130fadeler...",
|
||||||
|
"Metadata and Document Properties": "\u00d6nbilgi ve Belge \u00d6zellikleri",
|
||||||
|
"Title": "Ba\u015fl\u0131k",
|
||||||
|
"Keywords": "Anahtar kelimeler",
|
||||||
|
"Description": "A\u00e7\u0131klama",
|
||||||
|
"Robots": "Robotlar",
|
||||||
|
"Author": "Yazar",
|
||||||
|
"Encoding": "Kodlama",
|
||||||
|
"Fullscreen": "Tam ekran",
|
||||||
|
"Action": "Eylem",
|
||||||
|
"Shortcut": "K\u0131sayol",
|
||||||
|
"Help": "Yard\u0131m",
|
||||||
|
"Address": "Adres",
|
||||||
|
"Focus to menubar": "Men\u00fcye odaklan",
|
||||||
|
"Focus to toolbar": "Ara\u00e7 tak\u0131m\u0131na odaklan",
|
||||||
|
"Focus to element path": "\u00d6\u011fe yoluna odaklan",
|
||||||
|
"Focus to contextual toolbar": "Ba\u011flamsal ara\u00e7 tak\u0131m\u0131na odaklan",
|
||||||
|
"Insert link (if link plugin activated)": "Ba\u011flant\u0131 ekle (Ba\u011flant\u0131 eklentisi aktif ise)",
|
||||||
|
"Save (if save plugin activated)": "Kaydet (Kay\u0131t eklentisi aktif ise)",
|
||||||
|
"Find (if searchreplace plugin activated)": "Bul (Bul\/De\u011fi\u015ftir eklentisi aktif ise)",
|
||||||
|
"Plugins installed ({0}):": "Eklentiler y\u00fcklendi ({0}):",
|
||||||
|
"Premium plugins:": "Premium eklentiler:",
|
||||||
|
"Learn more...": "Detayl\u0131 bilgi...",
|
||||||
|
"You are using {0}": "\u015eu an {0} kullan\u0131yorsunuz",
|
||||||
|
"Plugins": "Plugins",
|
||||||
|
"Handy Shortcuts": "Handy Shortcuts",
|
||||||
|
"Horizontal line": "Yatay \u00e7izgi",
|
||||||
|
"Insert\/edit image": "Resim ekle\/d\u00fczenle",
|
||||||
|
"Image description": "Resim a\u00e7\u0131klamas\u0131",
|
||||||
|
"Source": "Kaynak",
|
||||||
|
"Dimensions": "Boyutlar",
|
||||||
|
"Constrain proportions": "Oranlar\u0131 koru",
|
||||||
|
"General": "Genel",
|
||||||
|
"Advanced": "Geli\u015fmi\u015f",
|
||||||
|
"Style": "Stil",
|
||||||
|
"Vertical space": "Dikey bo\u015fluk",
|
||||||
|
"Horizontal space": "Yatay bo\u015fluk",
|
||||||
|
"Border": "Kenarl\u0131k",
|
||||||
|
"Insert image": "Resim ekle",
|
||||||
|
"Image...": "Resim...",
|
||||||
|
"Image list": "G\u00f6rsel listesi",
|
||||||
|
"Rotate counterclockwise": "Saatin tersi y\u00f6n\u00fcnde d\u00f6nd\u00fcr",
|
||||||
|
"Rotate clockwise": "Saat y\u00f6n\u00fcnde d\u00f6nd\u00fcr",
|
||||||
|
"Flip vertically": "Dikine \u00e7evir",
|
||||||
|
"Flip horizontally": "Enine \u00e7evir",
|
||||||
|
"Edit image": "Resmi d\u00fczenle",
|
||||||
|
"Image options": "Resim ayarlar\u0131",
|
||||||
|
"Zoom in": "Yak\u0131nla\u015ft\u0131r",
|
||||||
|
"Zoom out": "Uzakla\u015ft\u0131r",
|
||||||
|
"Crop": "K\u0131rp",
|
||||||
|
"Resize": "Yeniden Boyutland\u0131r",
|
||||||
|
"Orientation": "Oryantasyon",
|
||||||
|
"Brightness": "Parlakl\u0131k",
|
||||||
|
"Sharpen": "Keskinle\u015ftir",
|
||||||
|
"Contrast": "Kontrast",
|
||||||
|
"Color levels": "Renk d\u00fczeyleri",
|
||||||
|
"Gamma": "Gama",
|
||||||
|
"Invert": "Ters \u00c7evir",
|
||||||
|
"Apply": "Uygula",
|
||||||
|
"Back": "Geri",
|
||||||
|
"Insert date\/time": "Tarih\/saat ekle",
|
||||||
|
"Date\/time": "Tarih\/saat",
|
||||||
|
"Insert\/Edit Link": "Ba\u011flant\u0131 Ekle\/D\u00fczenle",
|
||||||
|
"Insert\/edit link": "Ba\u011flant\u0131 ekle\/d\u00fczenle",
|
||||||
|
"Text to display": "Yaz\u0131y\u0131 g\u00f6r\u00fcnt\u00fcle",
|
||||||
|
"Url": "Url",
|
||||||
|
"Open link in...": "Ba\u011flant\u0131y\u0131 a\u00e7...",
|
||||||
|
"Current window": "Mevcut pencere",
|
||||||
|
"None": "Hi\u00e7biri",
|
||||||
|
"New window": "Yeni pencere",
|
||||||
|
"Remove link": "Ba\u011flant\u0131y\u0131 kald\u0131r",
|
||||||
|
"Anchors": "\u00c7apalar",
|
||||||
|
"Link...": "Ba\u011flant\u0131...",
|
||||||
|
"Paste or type a link": "Bir ba\u011flant\u0131 yaz\u0131n yada yap\u0131\u015ft\u0131r\u0131n",
|
||||||
|
"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Girdi\u011finiz URL bir e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan mailto: \u00f6nekini eklemek ister misiniz?",
|
||||||
|
"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Girdi\u011finiz URL bir d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor. Gerekli olan http:\/\/ \u00f6nekini eklemek ister misiniz?",
|
||||||
|
"Link list": "Ba\u011flant\u0131 listesi",
|
||||||
|
"Insert video": "Video ekle",
|
||||||
|
"Insert\/edit video": "Video ekle\/d\u00fczenle",
|
||||||
|
"Insert\/edit media": "Medya ekle\/d\u00fczenle",
|
||||||
|
"Alternative source": "Alternatif kaynak",
|
||||||
|
"Alternative source URL": "Alternatif kaynak URL",
|
||||||
|
"Media poster (Image URL)": "Medya posteri (Resim URL)",
|
||||||
|
"Paste your embed code below:": "Video g\u00f6mme kodunu a\u015fa\u011f\u0131ya yap\u0131\u015ft\u0131r\u0131n\u0131z:",
|
||||||
|
"Embed": "G\u00f6mme",
|
||||||
|
"Media...": "Medya...",
|
||||||
|
"Nonbreaking space": "B\u00f6l\u00fcnemez bo\u015fluk",
|
||||||
|
"Page break": "Sayfa sonu",
|
||||||
|
"Paste as text": "Metin olarak yap\u0131\u015ft\u0131r",
|
||||||
|
"Preview": "\u00d6nizleme",
|
||||||
|
"Print...": "Yazd\u0131r...",
|
||||||
|
"Save": "Kaydet",
|
||||||
|
"Find": "Bul",
|
||||||
|
"Replace with": "Bununla de\u011fi\u015ftir",
|
||||||
|
"Replace": "De\u011fi\u015ftir",
|
||||||
|
"Replace all": "T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir",
|
||||||
|
"Previous": "Geri",
|
||||||
|
"Next": "Sonraki",
|
||||||
|
"Find and replace...": "Bul ve de\u011fi\u015ftir...",
|
||||||
|
"Could not find the specified string.": "Herhangi bir sonu\u00e7 bulunamad\u0131.",
|
||||||
|
"Match case": "B\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131",
|
||||||
|
"Find whole words only": "Sadece t\u00fcm kelimeyi ara",
|
||||||
|
"Spell check": "Yaz\u0131m denetimi",
|
||||||
|
"Ignore": "Yoksay",
|
||||||
|
"Ignore all": "T\u00fcm\u00fcn\u00fc yoksay",
|
||||||
|
"Finish": "Bitir",
|
||||||
|
"Add to Dictionary": "S\u00f6zl\u00fc\u011fe Ekle",
|
||||||
|
"Insert table": "Tablo ekle",
|
||||||
|
"Table properties": "Tablo \u00f6zellikleri",
|
||||||
|
"Delete table": "Tablo sil",
|
||||||
|
"Cell": "H\u00fccre",
|
||||||
|
"Row": "Sat\u0131r",
|
||||||
|
"Column": "S\u00fctun",
|
||||||
|
"Cell properties": "H\u00fccre \u00f6zellikleri",
|
||||||
|
"Merge cells": "H\u00fccreleri birle\u015ftir",
|
||||||
|
"Split cell": "H\u00fccre b\u00f6l",
|
||||||
|
"Insert row before": "\u00dcste sat\u0131r ekle",
|
||||||
|
"Insert row after": "Alta sat\u0131r ekle ",
|
||||||
|
"Delete row": "Sat\u0131r sil",
|
||||||
|
"Row properties": "Sat\u0131r \u00f6zellikleri",
|
||||||
|
"Cut row": "Sat\u0131r\u0131 kes",
|
||||||
|
"Copy row": "Sat\u0131r\u0131 kopyala",
|
||||||
|
"Paste row before": "\u00dcste sat\u0131r yap\u0131\u015ft\u0131r",
|
||||||
|
"Paste row after": "Alta sat\u0131r yap\u0131\u015ft\u0131r",
|
||||||
|
"Insert column before": "Sola s\u00fctun ekle",
|
||||||
|
"Insert column after": "Sa\u011fa s\u00fctun ekle",
|
||||||
|
"Delete column": "S\u00fctun sil",
|
||||||
|
"Cols": "S\u00fctunlar",
|
||||||
|
"Rows": "Sat\u0131rlar",
|
||||||
|
"Width": "Geni\u015flik",
|
||||||
|
"Height": "Y\u00fckseklik",
|
||||||
|
"Cell spacing": "H\u00fccre aral\u0131\u011f\u0131",
|
||||||
|
"Cell padding": "H\u00fccre dolgusu",
|
||||||
|
"Show caption": "Ba\u015fl\u0131\u011f\u0131 g\u00f6ster",
|
||||||
|
"Left": "Sol",
|
||||||
|
"Center": "Orta",
|
||||||
|
"Right": "Sa\u011f",
|
||||||
|
"Cell type": "H\u00fccre tipi",
|
||||||
|
"Scope": "Kapsam",
|
||||||
|
"Alignment": "Hizalama",
|
||||||
|
"H Align": "Yatay Hizalama",
|
||||||
|
"V Align": "Dikey Hizalama",
|
||||||
|
"Top": "\u00dcst",
|
||||||
|
"Middle": "Orta",
|
||||||
|
"Bottom": "Alt",
|
||||||
|
"Header cell": "Ba\u015fl\u0131k h\u00fccresi",
|
||||||
|
"Row group": "Sat\u0131r grubu",
|
||||||
|
"Column group": "S\u00fctun grubu",
|
||||||
|
"Row type": "Sat\u0131r tipi",
|
||||||
|
"Header": "Ba\u015fl\u0131k",
|
||||||
|
"Body": "G\u00f6vde",
|
||||||
|
"Footer": "Alt",
|
||||||
|
"Border color": "Kenarl\u0131k rengi",
|
||||||
|
"Insert template...": "\u015eablon ekle...",
|
||||||
|
"Templates": "\u015eablonlar",
|
||||||
|
"Template": "Taslak",
|
||||||
|
"Text color": "Yaz\u0131 rengi",
|
||||||
|
"Background color": "Arka plan rengi",
|
||||||
|
"Custom...": "\u00d6zel...",
|
||||||
|
"Custom color": "\u00d6zel renk",
|
||||||
|
"No color": "Renk yok",
|
||||||
|
"Remove color": "Rengi kald\u0131r",
|
||||||
|
"Table of Contents": "\u0130\u00e7erik tablosu",
|
||||||
|
"Show blocks": "Bloklar\u0131 g\u00f6ster",
|
||||||
|
"Show invisible characters": "G\u00f6r\u00fcnmez karakterleri g\u00f6ster",
|
||||||
|
"Word count": "Kelime say\u0131s\u0131",
|
||||||
|
"Count": "Say\u0131m",
|
||||||
|
"Document": "Belge",
|
||||||
|
"Selection": "Se\u00e7im",
|
||||||
|
"Words": "S\u00f6zc\u00fck",
|
||||||
|
"Words: {0}": "Kelime: {0}",
|
||||||
|
"{0} words": "{0} words",
|
||||||
|
"File": "Dosya",
|
||||||
|
"Edit": "D\u00fczenle",
|
||||||
|
"Insert": "Ekle",
|
||||||
|
"View": "G\u00f6r\u00fcn\u00fcm",
|
||||||
|
"Format": "Bi\u00e7im",
|
||||||
|
"Table": "Tablo",
|
||||||
|
"Tools": "Ara\u00e7lar",
|
||||||
|
"Powered by {0}": "Powered by {0}",
|
||||||
|
"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zengin Metin Alan\u0131. Men\u00fc i\u00e7in ALT-F9 tu\u015funa bas\u0131n\u0131z. Ara\u00e7 \u00e7ubu\u011fu i\u00e7in ALT-F10 tu\u015funa bas\u0131n\u0131z. Yard\u0131m i\u00e7in ALT-0 tu\u015funa bas\u0131n\u0131z.",
|
||||||
|
"Image title": "Resim ba\u015fl\u0131\u011f\u0131",
|
||||||
|
"Border width": "Kenar geni\u015fli\u011fi",
|
||||||
|
"Border style": "Kenar sitili",
|
||||||
|
"Error": "Hata",
|
||||||
|
"Warn": "Uyar\u0131",
|
||||||
|
"Valid": "Ge\u00e7erli",
|
||||||
|
"To open the popup, press Shift+Enter": "Popup'\u0131 a\u00e7mak i\u00e7in Shift+Enter'a bas\u0131n",
|
||||||
|
"Rich Text Area. Press ALT-0 for help.": "Zengin Metin Alan\u0131. Yard\u0131m i\u00e7in Alt-0'a bas\u0131n.",
|
||||||
|
"System Font": "Sistem Yaz\u0131 Tipi",
|
||||||
|
"Failed to upload image: {0}": "Resim y\u00fcklenemedi: {0}",
|
||||||
|
"Failed to load plugin: {0} from url {1}": "Eklenti y\u00fcklenemedi: {1} url\u2019sinden {0}",
|
||||||
|
"Failed to load plugin url: {0}": "Url eklentisi y\u00fcklenemedi: {0}",
|
||||||
|
"Failed to initialize plugin: {0}": "Eklenti ba\u015flat\u0131lamad\u0131: {0}",
|
||||||
|
"example": "\u00f6rnek",
|
||||||
|
"Search": "Ara",
|
||||||
|
"All": "T\u00fcm\u00fc",
|
||||||
|
"Currency": "Para birimi",
|
||||||
|
"Text": "Metin",
|
||||||
|
"Quotations": "Al\u0131nt\u0131",
|
||||||
|
"Mathematical": "Matematik",
|
||||||
|
"Extended Latin": "Uzat\u0131lm\u0131\u015f Latin",
|
||||||
|
"Symbols": "Semboller",
|
||||||
|
"Arrows": "Oklar",
|
||||||
|
"User Defined": "Kullan\u0131c\u0131 Tan\u0131ml\u0131",
|
||||||
|
"dollar sign": "dolar i\u015fareti",
|
||||||
|
"currency sign": "para birimi i\u015fareti",
|
||||||
|
"euro-currency sign": "euro para birimi i\u015fareti",
|
||||||
|
"colon sign": "colon i\u015fareti",
|
||||||
|
"cruzeiro sign": "cruzeiro i\u015fareti",
|
||||||
|
"french franc sign": "frans\u0131z frang\u0131 i\u015fareti",
|
||||||
|
"lira sign": "lira i\u015fareti",
|
||||||
|
"mill sign": "mill i\u015fareti",
|
||||||
|
"naira sign": "naira i\u015fareti",
|
||||||
|
"peseta sign": "peseta i\u015fareti",
|
||||||
|
"rupee sign": "rupi i\u015fareti",
|
||||||
|
"won sign": "won i\u015fareti",
|
||||||
|
"new sheqel sign": "yeni \u015fekel i\u015fareti",
|
||||||
|
"dong sign": "dong i\u015fareti",
|
||||||
|
"kip sign": "kip i\u015fareti",
|
||||||
|
"tugrik sign": "tugrik i\u015fareti",
|
||||||
|
"drachma sign": "drahma i\u015fareti",
|
||||||
|
"german penny symbol": "alman kuru\u015f sembol\u00fc",
|
||||||
|
"peso sign": "peso i\u015fareti",
|
||||||
|
"guarani sign": "guarani i\u015fareti",
|
||||||
|
"austral sign": "austral i\u015fareti",
|
||||||
|
"hryvnia sign": "hrivniya i\u015fareti",
|
||||||
|
"cedi sign": "cedi i\u015fareti",
|
||||||
|
"livre tournois sign": "livre tournois i\u015fareti",
|
||||||
|
"spesmilo sign": "spesmilo i\u015fareti",
|
||||||
|
"tenge sign": "tenge i\u015fareti",
|
||||||
|
"indian rupee sign": "hindistan rupisi i\u015fareti",
|
||||||
|
"turkish lira sign": "t\u00fcrk liras\u0131 i\u015fareti",
|
||||||
|
"nordic mark sign": "nordic i\u015fareti",
|
||||||
|
"manat sign": "manat i\u015fareti",
|
||||||
|
"ruble sign": "ruble i\u015fareti",
|
||||||
|
"yen character": "yen karakteri",
|
||||||
|
"yuan character": "yuan karakteri",
|
||||||
|
"yuan character, in hong kong and taiwan": "yuan karakteri, hong kong ve tayvan'da kullan\u0131lan",
|
||||||
|
"yen\/yuan character variant one": "yen\/yuan karakter de\u011fi\u015fkeni",
|
||||||
|
"Loading emoticons...": "\u0130fadeler y\u00fckleniyor...",
|
||||||
|
"Could not load emoticons": "\u0130fadeler y\u00fcklenemedi",
|
||||||
|
"People": "\u0130nsan",
|
||||||
|
"Animals and Nature": "Hayvanlar ve Do\u011fa",
|
||||||
|
"Food and Drink": "Yiyecek ve \u0130\u00e7ecek",
|
||||||
|
"Activity": "Etkinlik",
|
||||||
|
"Travel and Places": "Gezi ve Yerler",
|
||||||
|
"Objects": "Nesneler",
|
||||||
|
"Flags": "Bayraklar",
|
||||||
|
"Characters": "Karakter",
|
||||||
|
"Characters (no spaces)": "Karakter (bo\u015fluksuz)",
|
||||||
|
"{0} characters": "{0} karakter",
|
||||||
|
"Error: Form submit field collision.": "Hata: Form g\u00f6nderme alan\u0131 \u00e7at\u0131\u015fmas\u0131.",
|
||||||
|
"Error: No form element found.": "Hata: Form eleman\u0131 bulunamad\u0131.",
|
||||||
|
"Update": "G\u00fcncelle\u015ftir",
|
||||||
|
"Color swatch": "Renk \u00f6rne\u011fi",
|
||||||
|
"Turquoise": "Turkuaz",
|
||||||
|
"Green": "Ye\u015fil",
|
||||||
|
"Blue": "Mavi",
|
||||||
|
"Purple": "Mor",
|
||||||
|
"Navy Blue": "Lacivert",
|
||||||
|
"Dark Turquoise": "Koyu Turkuaz",
|
||||||
|
"Dark Green": "Koyu Ye\u015fil",
|
||||||
|
"Medium Blue": "Donuk Mavi",
|
||||||
|
"Medium Purple": "Orta Mor",
|
||||||
|
"Midnight Blue": "Gece Yar\u0131s\u0131 Mavisi",
|
||||||
|
"Yellow": "Sar\u0131",
|
||||||
|
"Orange": "Turuncu",
|
||||||
|
"Red": "K\u0131rm\u0131z\u0131",
|
||||||
|
"Light Gray": "A\u00e7\u0131k Gri",
|
||||||
|
"Gray": "Gri",
|
||||||
|
"Dark Yellow": "Koyu Sar\u0131",
|
||||||
|
"Dark Orange": "Koyu Turuncu",
|
||||||
|
"Dark Red": "Koyu K\u0131rm\u0131z\u0131",
|
||||||
|
"Medium Gray": "Orta Gri",
|
||||||
|
"Dark Gray": "Koyu Gri",
|
||||||
|
"Light Green": "A\u00e7\u0131k Ye\u015fil",
|
||||||
|
"Light Yellow": "A\u00e7\u0131k Sar\u0131",
|
||||||
|
"Light Red": "A\u00e7\u0131k K\u0131rm\u0131z\u0131",
|
||||||
|
"Light Purple": "A\u00e7\u0131k Mor",
|
||||||
|
"Light Blue": "A\u00e7\u0131k Mavi",
|
||||||
|
"Dark Purple": "Koyu Mor",
|
||||||
|
"Dark Blue": "Lacivert",
|
||||||
|
"Black": "Siyah",
|
||||||
|
"White": "Beyaz",
|
||||||
|
"Switch to or from fullscreen mode": "Tam ekran moduna ge\u00e7 veya \u00e7\u0131k",
|
||||||
|
"Open help dialog": "Yard\u0131m penceresini a\u00e7",
|
||||||
|
"history": "ge\u00e7mi\u015f",
|
||||||
|
"styles": "stiller",
|
||||||
|
"formatting": "bi\u00e7imlendirme",
|
||||||
|
"alignment": "hizalanma",
|
||||||
|
"indentation": "girinti",
|
||||||
|
"permanent pen": "kal\u0131c\u0131 kalem",
|
||||||
|
"comments": "yorumlar",
|
||||||
|
"Format Painter": "Bi\u00e7im Boyac\u0131s\u0131",
|
||||||
|
"Insert\/edit iframe": "\u0130frame ekle\/d\u00fczenle",
|
||||||
|
"Capitalization": "B\u00fcy\u00fck Harfle Yaz\u0131m",
|
||||||
|
"lowercase": "k\u00fc\u00e7\u00fck harf",
|
||||||
|
"UPPERCASE": "B\u00dcY\u00dcK HARF",
|
||||||
|
"Title Case": "\u0130lk Harfler B\u00fcy\u00fck",
|
||||||
|
"Permanent Pen Properties": "Kal\u0131c\u0131 Kalem \u00d6zellikleri",
|
||||||
|
"Permanent pen properties...": "Kal\u0131c\u0131 kalem \u00f6zellikleri...",
|
||||||
|
"Font": "Yaz\u0131 Tipi",
|
||||||
|
"Size": "Boyut",
|
||||||
|
"More...": "Devam\u0131...",
|
||||||
|
"Spellcheck Language": "Yaz\u0131m Denetimi Dili",
|
||||||
|
"Select...": "Se\u00e7...",
|
||||||
|
"Preferences": "Tercihler",
|
||||||
|
"Yes": "Evet",
|
||||||
|
"No": "Hay\u0131r",
|
||||||
|
"Keyboard Navigation": "Klavye Tu\u015flar\u0131",
|
||||||
|
"Version": "S\u00fcr\u00fcm",
|
||||||
|
"Anchor": "\u00c7apa",
|
||||||
|
"Special character": "\u00d6zel karakter",
|
||||||
|
"Code sample": "Code sample",
|
||||||
|
"Color": "Renk",
|
||||||
|
"Emoticons": "\u0130fadeler",
|
||||||
|
"Document properties": "Dok\u00fcman \u00f6zellikleri",
|
||||||
|
"Image": "Resim",
|
||||||
|
"Insert link": "Ba\u011flant\u0131 ekle",
|
||||||
|
"Target": "Hedef",
|
||||||
|
"Link": "Ba\u011flant\u0131",
|
||||||
|
"Poster": "Poster",
|
||||||
|
"Media": "Medya",
|
||||||
|
"Print": "Yazd\u0131r",
|
||||||
|
"Prev": "\u00d6nceki",
|
||||||
|
"Find and replace": "Bul ve de\u011fi\u015ftir",
|
||||||
|
"Whole words": "Tam kelimeler",
|
||||||
|
"Spellcheck": "Yaz\u0131m denetimi",
|
||||||
|
"Caption": "Ba\u015fl\u0131k",
|
||||||
|
"Insert template": "\u015eablon ekle"
|
||||||
|
});
|
|
@ -8,7 +8,7 @@ from shutil import copyfile
|
||||||
|
|
||||||
from sqlalchemy.exc import SQLAlchemyError
|
from sqlalchemy.exc import SQLAlchemyError
|
||||||
|
|
||||||
from cps.services.worker import CalibreTask, STAT_FINISH_SUCCESS
|
from cps.services.worker import CalibreTask
|
||||||
from cps import calibre_db, db
|
from cps import calibre_db, db
|
||||||
from cps import logger, config
|
from cps import logger, config
|
||||||
from cps.subproc_wrapper import process_open
|
from cps.subproc_wrapper import process_open
|
||||||
|
|
|
@ -70,6 +70,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% if entry.ratings.__len__() > 0 %}
|
{% if entry.ratings.__len__() > 0 %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
||||||
|
@ -114,6 +122,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.average_rating)|float|round|int(2)) %}
|
{% for number in range((entry.average_rating)|float|round|int(2)) %}
|
||||||
<span class="glyphicon glyphicon-star good"></span>
|
<span class="glyphicon glyphicon-star good"></span>
|
||||||
|
|
|
@ -34,6 +34,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% if entry.ratings.__len__() > 0 %}
|
{% if entry.ratings.__len__() > 0 %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
||||||
|
|
|
@ -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.current_theme == 1 %}
|
{% if g.current_theme == 1 %}
|
||||||
<link href="{{ url_for('static', filename='css/caliBlur.min.css') }}" rel="stylesheet" media="screen">
|
<link href="{{ url_for('static', filename='css/caliBlur.css') }}" rel="stylesheet" media="screen">
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -33,6 +33,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% if entry.ratings.__len__() > 0 %}
|
{% if entry.ratings.__len__() > 0 %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
||||||
|
@ -101,6 +109,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{%endfor%}
|
{%endfor%}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% if entry.ratings.__len__() > 0 %}
|
{% if entry.ratings.__len__() > 0 %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
<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">
|
||||||
<link href="{{ url_for('static', filename='css/upload.css') }}" rel="stylesheet" media="screen">
|
<link href="{{ url_for('static', filename='css/upload.css') }}" rel="stylesheet" media="screen">
|
||||||
{% if g.current_theme == 1 %}
|
{% if g.current_theme == 1 %}
|
||||||
<link href="{{ url_for('static', filename='css/caliBlur.min.css') }}" rel="stylesheet" media="screen">
|
<link href="{{ url_for('static', filename='css/caliBlur.css') }}" rel="stylesheet" media="screen">
|
||||||
<link href="{{ url_for('static', filename='css/caliBlur_override.css') }}" rel="stylesheet" media="screen">
|
<link href="{{ url_for('static', filename='css/caliBlur_override.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 -->
|
||||||
|
|
|
@ -72,6 +72,15 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if entry.ratings.__len__() > 0 %}
|
{% if entry.ratings.__len__() > 0 %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{% extends "layout.html" %}
|
{% extends "layout.html" %}
|
||||||
{% block body %}
|
{% block body %}
|
||||||
|
<h1 class="{{page}}">{{title}}</h1>
|
||||||
<div class="col-md-10 col-lg-6">
|
<div class="col-md-10 col-lg-6">
|
||||||
<form role="form" id="search" action="{{ url_for('web.advanced_search_form') }}" method="POST">
|
<form role="form" id="search" action="{{ url_for('web.advanced_search_form') }}" method="POST">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
|
|
@ -43,6 +43,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index|formatseriesindex}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
{% if entry.ratings.__len__() > 0 %}
|
{% if entry.ratings.__len__() > 0 %}
|
||||||
<div class="rating">
|
<div class="rating">
|
||||||
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
{% for number in range((entry.ratings[0].rating/2)|int(2)) %}
|
||||||
|
|
|
@ -12,8 +12,9 @@
|
||||||
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
|
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
|
||||||
<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.current_theme == 1 %}
|
||||||
<link href="{{ url_for('static', filename='css/caliBlur-style.css') }}" rel="stylesheet" media="screen">
|
<link href="{{ url_for('static', filename='css/caliBlur.css') }}" rel="stylesheet" media="screen">
|
||||||
|
<link href="{{ url_for('static', filename='css/caliBlur_override.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:// -->
|
||||||
|
@ -24,7 +25,7 @@
|
||||||
|
|
||||||
{% block header %}{% endblock %}
|
{% block header %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
<body class="{{ page }}">
|
<body class="{{ page }} shelf-down">
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="discover">
|
<div class="discover">
|
||||||
<h2>{{title}}</h2>
|
<h2>{{title}}</h2>
|
||||||
|
@ -43,7 +44,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</p>
|
</p>
|
||||||
|
{% if entry.series.__len__() > 0 %}
|
||||||
|
<p class="series">
|
||||||
|
<a href="{{url_for('web.books_list', data='series', sort_param='new', book_id=entry.series[0].id )}}">
|
||||||
|
{{entry.series[0].name}}
|
||||||
|
</a>
|
||||||
|
({{entry.series_index}})
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="btn-group" role="group" aria-label="Download, send to Kindle, reading">
|
<div class="btn-group" role="group" aria-label="Download, send to Kindle, reading">
|
||||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
cps/translations/el/LC_MESSAGES/messages.mo
Normal file
BIN
cps/translations/el/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
2663
cps/translations/el/LC_MESSAGES/messages.po
Normal file
2663
cps/translations/el/LC_MESSAGES/messages.po
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
92
cps/web.py
92
cps/web.py
|
@ -41,7 +41,7 @@ from flask_login import login_user, logout_user, login_required, current_user, c
|
||||||
from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError
|
from sqlalchemy.exc import IntegrityError, InvalidRequestError, OperationalError
|
||||||
from sqlalchemy.sql.expression import text, func, true, false, not_, and_, or_
|
from sqlalchemy.sql.expression import text, func, true, false, not_, and_, or_
|
||||||
from sqlalchemy.orm.attributes import flag_modified
|
from sqlalchemy.orm.attributes import flag_modified
|
||||||
from werkzeug.exceptions import default_exceptions, InternalServerError
|
from werkzeug.exceptions import default_exceptions
|
||||||
from sqlalchemy.sql.functions import coalesce
|
from sqlalchemy.sql.functions import coalesce
|
||||||
|
|
||||||
from .services.worker import WorkerThread
|
from .services.worker import WorkerThread
|
||||||
|
@ -307,6 +307,8 @@ def before_request():
|
||||||
|
|
||||||
|
|
||||||
@app.route('/import_ldap_users')
|
@app.route('/import_ldap_users')
|
||||||
|
@login_required
|
||||||
|
@admin_required
|
||||||
def import_ldap_users():
|
def import_ldap_users():
|
||||||
showtext = {}
|
showtext = {}
|
||||||
try:
|
try:
|
||||||
|
@ -624,6 +626,10 @@ def render_books_list(data, sort, book_id, page):
|
||||||
order = [db.Books.timestamp.desc()]
|
order = [db.Books.timestamp.desc()]
|
||||||
if sort == 'old':
|
if sort == 'old':
|
||||||
order = [db.Books.timestamp]
|
order = [db.Books.timestamp]
|
||||||
|
if sort == 'authaz':
|
||||||
|
order = [db.Books.author_sort.asc()]
|
||||||
|
if sort == 'authza':
|
||||||
|
order = [db.Books.author_sort.desc()]
|
||||||
|
|
||||||
if data == "rated":
|
if data == "rated":
|
||||||
if current_user.check_visibility(constants.SIDEBAR_BEST_RATED):
|
if current_user.check_visibility(constants.SIDEBAR_BEST_RATED):
|
||||||
|
@ -951,7 +957,7 @@ def render_prepare_search_form(cc):
|
||||||
else:
|
else:
|
||||||
languages = None
|
languages = None
|
||||||
return render_title_template('search_form.html', tags=tags, languages=languages, extensions=extensions,
|
return render_title_template('search_form.html', tags=tags, languages=languages, extensions=extensions,
|
||||||
series=series, title=_(u"search"), cc=cc, page="advsearch")
|
series=series, title=_(u"Advanced Search"), cc=cc, page="advsearch")
|
||||||
|
|
||||||
|
|
||||||
def render_search_results(term, offset=None, order=None, limit=None):
|
def render_search_results(term, offset=None, order=None, limit=None):
|
||||||
|
@ -1227,7 +1233,9 @@ def reconnect():
|
||||||
def search():
|
def search():
|
||||||
term = request.args.get("query")
|
term = request.args.get("query")
|
||||||
if term:
|
if term:
|
||||||
return render_search_results(term, 0, None, config.config_books_per_page)
|
# flask_session['query'] = json.dumps(request.form)
|
||||||
|
return redirect(url_for('web.books_list', data="search", sort_param='stored', query=term))
|
||||||
|
# return render_search_results(term, 0, None, config.config_books_per_page)
|
||||||
else:
|
else:
|
||||||
return render_title_template('search.html',
|
return render_title_template('search.html',
|
||||||
searchterm="",
|
searchterm="",
|
||||||
|
@ -1236,11 +1244,17 @@ def search():
|
||||||
page="search")
|
page="search")
|
||||||
|
|
||||||
|
|
||||||
@web.route("/advanced_search", methods=['POST'])
|
@web.route("/advsearch", methods=['POST'])
|
||||||
@login_required_if_no_ano
|
@login_required_if_no_ano
|
||||||
def advanced_search():
|
def advanced_search():
|
||||||
term = request.form
|
values = dict(request.form)
|
||||||
return render_adv_search_results(term, 0, None, config.config_books_per_page)
|
params = ['include_tag', 'exclude_tag', 'include_serie', 'exclude_serie', 'include_language',
|
||||||
|
'exclude_language', 'include_extension', 'exclude_extension']
|
||||||
|
for param in params:
|
||||||
|
values[param] = list(request.form.getlist(param))
|
||||||
|
flask_session['query'] = json.dumps(values)
|
||||||
|
return redirect(url_for('web.books_list', data="advsearch", sort_param='stored', query=""))
|
||||||
|
|
||||||
|
|
||||||
def render_adv_search_results(term, offset=None, order=None, limit=None):
|
def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
order = order or [db.Books.sort]
|
order = order or [db.Books.sort]
|
||||||
|
@ -1250,14 +1264,14 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
calibre_db.session.connection().connection.connection.create_function("lower", 1, db.lcase)
|
calibre_db.session.connection().connection.connection.create_function("lower", 1, db.lcase)
|
||||||
q = calibre_db.session.query(db.Books).filter(calibre_db.common_filters(True))
|
q = calibre_db.session.query(db.Books).filter(calibre_db.common_filters(True))
|
||||||
|
|
||||||
include_tag_inputs = request.form.getlist('include_tag')
|
include_tag_inputs = term.get('include_tag')
|
||||||
exclude_tag_inputs = request.form.getlist('exclude_tag')
|
exclude_tag_inputs = term.get('exclude_tag')
|
||||||
include_series_inputs = request.form.getlist('include_serie')
|
include_series_inputs = term.get('include_serie')
|
||||||
exclude_series_inputs = request.form.getlist('exclude_serie')
|
exclude_series_inputs = term.get('exclude_serie')
|
||||||
include_languages_inputs = request.form.getlist('include_language')
|
include_languages_inputs = term.get('include_language')
|
||||||
exclude_languages_inputs = request.form.getlist('exclude_language')
|
exclude_languages_inputs = term.get('exclude_language')
|
||||||
include_extension_inputs = request.form.getlist('include_extension')
|
include_extension_inputs = term.get('include_extension')
|
||||||
exclude_extension_inputs = request.form.getlist('exclude_extension')
|
exclude_extension_inputs = term.get('exclude_extension')
|
||||||
|
|
||||||
author_name = term.get("author_name")
|
author_name = term.get("author_name")
|
||||||
book_title = term.get("book_title")
|
book_title = term.get("book_title")
|
||||||
|
@ -1277,15 +1291,14 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
searchterm = []
|
searchterm = []
|
||||||
cc_present = False
|
cc_present = False
|
||||||
for c in cc:
|
for c in cc:
|
||||||
if request.form.get('custom_column_' + str(c.id)):
|
if term.get('custom_column_' + str(c.id)):
|
||||||
searchterm.extend([(u"%s: %s" % (c.name, request.form.get('custom_column_' + str(c.id))))])
|
searchterm.extend([(u"%s: %s" % (c.name, term.get('custom_column_' + str(c.id))))])
|
||||||
cc_present = True
|
cc_present = True
|
||||||
|
|
||||||
if include_tag_inputs or exclude_tag_inputs or include_series_inputs or exclude_series_inputs or \
|
if include_tag_inputs or exclude_tag_inputs or include_series_inputs or exclude_series_inputs or \
|
||||||
include_languages_inputs or exclude_languages_inputs or author_name or book_title or \
|
include_languages_inputs or exclude_languages_inputs or author_name or book_title or \
|
||||||
publisher or pub_start or pub_end or rating_low or rating_high or description or cc_present or \
|
publisher or pub_start or pub_end or rating_low or rating_high or description or cc_present or \
|
||||||
include_extension_inputs or exclude_extension_inputs:
|
include_extension_inputs or exclude_extension_inputs:
|
||||||
searchterm = []
|
|
||||||
searchterm.extend((author_name.replace('|', ','), book_title, publisher))
|
searchterm.extend((author_name.replace('|', ','), book_title, publisher))
|
||||||
if pub_start:
|
if pub_start:
|
||||||
try:
|
try:
|
||||||
|
@ -1305,7 +1318,8 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
searchterm.extend(tag.name for tag in tag_names)
|
searchterm.extend(tag.name for tag in tag_names)
|
||||||
serie_names = calibre_db.session.query(db.Series).filter(db.Series.id.in_(include_series_inputs)).all()
|
serie_names = calibre_db.session.query(db.Series).filter(db.Series.id.in_(include_series_inputs)).all()
|
||||||
searchterm.extend(serie.name for serie in serie_names)
|
searchterm.extend(serie.name for serie in serie_names)
|
||||||
language_names = calibre_db.session.query(db.Languages).filter(db.Languages.id.in_(include_languages_inputs)).all()
|
language_names = calibre_db.session.query(db.Languages).\
|
||||||
|
filter(db.Languages.id.in_(include_languages_inputs)).all()
|
||||||
if language_names:
|
if language_names:
|
||||||
language_names = calibre_db.speaking_language(language_names)
|
language_names = calibre_db.speaking_language(language_names)
|
||||||
searchterm.extend(language.name for language in language_names)
|
searchterm.extend(language.name for language in language_names)
|
||||||
|
@ -1316,9 +1330,9 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
searchterm.extend(ext for ext in include_extension_inputs)
|
searchterm.extend(ext for ext in include_extension_inputs)
|
||||||
searchterm.extend(ext for ext in exclude_extension_inputs)
|
searchterm.extend(ext for ext in exclude_extension_inputs)
|
||||||
# handle custom columns
|
# handle custom columns
|
||||||
for c in cc:
|
#for c in cc:
|
||||||
if request.form.get('custom_column_' + str(c.id)):
|
# if term.get('custom_column_' + str(c.id)):
|
||||||
searchterm.extend([(u"%s: %s" % (c.name, request.form.get('custom_column_' + str(c.id))))])
|
# searchterm.extend([(u"%s: %s" % (c.name, term.get('custom_column_' + str(c.id))))])
|
||||||
searchterm = " + ".join(filter(None, searchterm))
|
searchterm = " + ".join(filter(None, searchterm))
|
||||||
q = q.filter()
|
q = q.filter()
|
||||||
if author_name:
|
if author_name:
|
||||||
|
@ -1361,7 +1375,7 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
|
|
||||||
# search custom culumns
|
# search custom culumns
|
||||||
for c in cc:
|
for c in cc:
|
||||||
custom_query = request.form.get('custom_column_' + str(c.id))
|
custom_query = term.get('custom_column_' + str(c.id))
|
||||||
if custom_query != '' and custom_query is not None:
|
if custom_query != '' and custom_query is not None:
|
||||||
if c.datatype == 'bool':
|
if c.datatype == 'bool':
|
||||||
q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any(
|
q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any(
|
||||||
|
@ -1375,28 +1389,28 @@ def render_adv_search_results(term, offset=None, order=None, limit=None):
|
||||||
else:
|
else:
|
||||||
q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any(
|
q = q.filter(getattr(db.Books, 'custom_column_' + str(c.id)).any(
|
||||||
func.lower(db.cc_classes[c.id].value).ilike("%" + custom_query + "%")))
|
func.lower(db.cc_classes[c.id].value).ilike("%" + custom_query + "%")))
|
||||||
q = q.order_by(*order).all()
|
q = q.order_by(*order).all()
|
||||||
flask_session['query'] = json.dumps(term)
|
flask_session['query'] = json.dumps(term)
|
||||||
ub.store_ids(q)
|
ub.store_ids(q)
|
||||||
# entries, result_count, pagination = calibre_db.get_search_results(term, offset, order, limit)
|
# entries, result_count, pagination = calibre_db.get_search_results(term, offset, order, limit)
|
||||||
result_count = len(q)
|
result_count = len(q)
|
||||||
if offset != None and limit != None:
|
if offset != None and limit != None:
|
||||||
offset = int(offset)
|
offset = int(offset)
|
||||||
limit_all = offset + int(limit)
|
limit_all = offset + int(limit)
|
||||||
pagination = Pagination((offset / (int(limit)) + 1), limit, result_count)
|
pagination = Pagination((offset / (int(limit)) + 1), limit, result_count)
|
||||||
else:
|
else:
|
||||||
offset = 0
|
offset = 0
|
||||||
limit_all = result_count
|
limit_all = result_count
|
||||||
return render_title_template('search.html',
|
return render_title_template('search.html',
|
||||||
adv_searchterm=searchterm,
|
adv_searchterm=searchterm,
|
||||||
pagination=pagination,
|
pagination=pagination,
|
||||||
entries=q[offset:limit_all],
|
entries=q[offset:limit_all],
|
||||||
result_count=result_count,
|
result_count=result_count,
|
||||||
title=_(u"search"), page="advsearch")
|
title=_(u"Advanced Search"), page="advsearch")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@web.route("/advanced_search", methods=['GET'])
|
@web.route("/advsearch", methods=['GET'])
|
||||||
@login_required_if_no_ano
|
@login_required_if_no_ano
|
||||||
def advanced_search_form():
|
def advanced_search_form():
|
||||||
# Build custom columns names
|
# Build custom columns names
|
||||||
|
|
863
messages.pot
863
messages.pot
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user