From 45eeb6588a286afef92c15e2021ecff8d4241f7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=AA=8E?= Date: Wed, 12 Apr 2017 15:53:32 +0800 Subject: [PATCH 01/47] Change Download Style. --- cps/static/css/style.css | 51 +++++++++++++++++++++++++++++++++++++++ cps/templates/detail.html | 29 +++++++++++----------- cps/templates/stats.html | 17 ++++++++++--- 3 files changed, 80 insertions(+), 17 deletions(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index e136fedf..214172c1 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -52,3 +52,54 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .spinner {margin:0 41%;} .spinner2 {margin:0 41%;} +* .ebook-icon{ + padding: 1em; + background-image: ; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} + +.ebook-icon.ebook-epub{ + background-image: + url( + data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTMwLjcsNjkuNiAgICBjMCwxLjItMC44LDItMiwycy0xLjktMC44LTEuOS0yYzAtMS4xLDAuOC0xLjksMS45LTEuOVMzMC43LDY4LjUsMzAuNyw2OS42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik0zOC4xLDY4LjEgICAgYzAsMC42LDAuNCwwLjksMSwwLjloMTAuMWMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjctMC40LDEuMi0xLjEsMS4ySDM4LjRjLTIsMC0yLjktMC45LTIuOS0zVjUyLjVjMC0yLjIsMC45LTMuMSwyLjktMy4xSDQ5ICAgIGMwLjcsMCwxLjEsMC41LDEuMSwxLjJzLTAuNCwxLjItMS4xLDEuMmgtOS45Yy0wLjcsMC0xLDAuMy0xLDF2NS44aDkuNmMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjYtMC40LDEuMi0xLjEsMS4yaC05LjZWNjguMXoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNTUuOCw3Ni40ICAgIGMwLDAuNy0wLjUsMS4xLTEuMiwxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43YzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC4zLDEuMiwxdjAuNWMwLDAuNCwwLDEuMS0wLjEsMS42ICAgIGMxLTIsMi41LTMuMyw1LjMtMy4zYzQuMiwwLDYuNiwzLjEsNi42LDguMXMtMi41LDguNC02LjgsOC40Yy0yLjYsMC00LjItMS4zLTUuMi0zLjNjMC4xLDAuNSwwLjEsMS4xLDAuMSwxLjZWNzYuNHogTTU1LjgsNjMuNiAgICBjMCwzLjUsMS44LDYsNC44LDZjMi45LDAsNC41LTIuNCw0LjUtNi4xYzAtMy43LTEuNi02LTQuNC02QzU3LjUsNTcuNiw1NS44LDYwLjEsNTUuOCw2My42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik03MC45LDU2LjcgICAgYzAtMC44LDAuNS0xLjEsMS4zLTEuMXMxLjMsMC40LDEuMywxLjF2OWMwLDIuNCwxLDMuOCwzLjEsMy44YzEuNSwwLDIuNy0wLjcsMy43LTJjMC43LTEsMS0xLjgsMS0yLjl2LTcuOWMwLTAuOCwwLjUtMS4xLDEuMy0xLjEgICAgYzAuNywwLDEuMywwLjQsMS4zLDEuMXYxMy43YzAsMC44LTAuNSwxLjEtMS4yLDEuMWMtMC44LDAtMS4zLTAuMy0xLjMtMXYtMC44YzAtMC4zLDAuMS0wLjksMC4yLTEuM2MtMC45LDItMi41LDMuNC01LjMsMy40ICAgIGMtMy4zLDAtNS4yLTIuMS01LjItNS41VjU2Ljd6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTkwLjQsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNOTAuMyw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDOTIuMSw1Ny42LDkwLjMsNjAuMSw5MC4zLDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PC9nPjwvZz48L3N2Zz4= + ) + ; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} + +.ebook-icon.ebook-pdf{ + background-image: + url( + data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTQwLjIsNjkuNiAgICBjMCwxLjItMC44LDItMiwycy0xLjktMC44LTEuOS0yYzAtMS4xLDAuOC0xLjksMS45LTEuOVM0MC4yLDY4LjUsNDAuMiw2OS42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik00Nyw3Ni40ICAgIGMwLDAuNy0wLjUsMS4xLTEuMiwxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43YzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC4zLDEuMiwxdjAuNWMwLDAuNCwwLDEuMS0wLjEsMS42ICAgIGMxLTIsMi41LTMuMyw1LjMtMy4zYzQuMiwwLDYuNiwzLjEsNi42LDguMXMtMi41LDguNC02LjgsOC40Yy0yLjYsMC00LjItMS4zLTUuMi0zLjNjMC4xLDAuNSwwLjEsMS4xLDAuMSwxLjZWNzYuNHogTTQ3LDYzLjYgICAgYzAsMy41LDEuOCw2LDQuOCw2YzIuOSwwLDQuNS0yLjQsNC41LTYuMWMwLTMuNy0xLjYtNi00LjQtNkM0OC43LDU3LjYsNDcsNjAuMSw0Nyw2My42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik03My4zLDUwLjQgICAgYzAtMC44LDAuNS0xLjEsMS4yLTEuMWMwLjgsMCwxLjMsMC40LDEuMywxLjF2MjAuMWMwLDAuOC0wLjUsMS4xLTEuMywxLjFjLTAuOCwwLTEuMi0wLjUtMS4yLTF2LTAuNmMwLTAuMywwLjEtMC45LDAuMS0xLjMgICAgYy0xLDItMi42LDMuMi01LjIsMy4yYy00LjEsMC02LjctMy4yLTYuNy04LjNjMC00LjksMi42LTguMSw2LjgtOC4xYzIuNiwwLDQuMiwxLjIsNS4yLDMuMmMtMC4xLTAuNi0wLjEtMS41LTAuMS0yLjFWNTAuNHogICAgIE02NCw2My41YzAsMy43LDEuNiw2LjEsNC41LDYuMWMzLDAsNC44LTIuNiw0LjgtNi4xYzAtMy40LTEuNy02LTQuOC02QzY1LjcsNTcuNiw2NCw1OS45LDY0LDYzLjV6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTgxLjcsNTMuNyAgICBjMC0zLjYsMi4yLTQuNiw0LjQtNC42YzAuOSwwLDEuNiwwLjEsMi40LDAuM2MwLjUsMC4yLDAuOCwwLjYsMC44LDFjMCwwLjIsMCwwLjQtMC4xLDAuNWMtMC4yLDAuNS0wLjYsMC44LTEuMSwwLjggICAgYy0wLjEsMC0wLjMsMC0wLjUtMC4xYy0wLjUtMC4yLTEtMC4zLTEuNi0wLjNjLTEsMC0xLjgsMC42LTEuOCwyLjZ2MS43aDMuNGMwLjcsMCwxLDAuNSwxLDEuMmMwLDAuNi0wLjQsMS4xLTEsMS4xaC0zLjR2MTIuNSAgICBjMCwwLjgtMC41LDEuMS0xLjMsMS4xYy0wLjgsMC0xLjMtMC40LTEuMy0xLjFWNThoLTIuNGMtMC43LDAtMS0wLjQtMS0xLjFzMC4zLTEuMiwxLTEuMmgyLjRWNTMuN3oiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48L2c+PC9nPjwvc3ZnPg== + ) + ; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} + +.ebook-icon.ebook-fb2{ + background-image: + url( + data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTM4LjYsNjkuNiAgICBjMCwxLjItMC44LDItMiwyYy0xLjEsMC0yLTAuOC0yLTJjMC0xLjEsMC44LTEuOSwyLTEuOUMzNy44LDY3LjcsMzguNiw2OC41LDM4LjYsNjkuNnoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNDYuMSw3MC40ICAgIGMwLDAuOC0wLjYsMS4yLTEuNCwxLjJjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMlY1Mi40YzAtMi4yLDAuOS0zLDIuOS0zaDExLjJjMC44LDAsMS4yLDAuNSwxLjIsMS4ycy0wLjQsMS4yLTEuMiwxLjJINDcgICAgYy0wLjUsMC0wLjksMC4zLTAuOSwwLjl2Ni4xaDkuOGMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjYtMC40LDEuMi0xLjEsMS4yaC05LjhWNzAuNHoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNjQsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNNjMuOSw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDNjUuNyw1Ny42LDYzLjksNjAuMSw2My45LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTkzLjEsNjkgICAgYzAuNywwLDEsMC41LDEsMS4ycy0wLjQsMS4zLTEsMS4zSDgwLjJjLTEuMSwwLTEuNy0wLjYtMS43LTEuN2MwLTEsMC42LTIuNCwxLjEtMy4yYzEtMS45LDIuNy0zLjcsNS40LTUuNGwxLjktMS4zICAgIGMyLjgtMS44LDQtMi45LDQtNS4xYzAtMi4xLTEuOC0zLjQtNC40LTMuNGMtMy4zLDAtNC40LDEuOS00LjksMy45Yy0wLjIsMC42LTAuNywwLjktMS4yLDAuOWMtMC4xLDAtMC4zLDAtMC40LDAgICAgYy0wLjYtMC4xLTEuMS0wLjUtMS4xLTEuMmMwLTAuMSwwLTAuMywwLjEtMC40YzAuMy0xLjIsMC45LTIuNSwxLjktMy40YzEuMy0xLjIsMy4xLTIsNS44LTJjNC4zLDAsNywyLjIsNyw1LjggICAgYzAsMy40LTIuMiw1LTQuNyw2LjZsLTEuOSwxLjFjLTMuMSwyLTQuOSwzLjgtNS42LDYuNEg5My4xeiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48L2c+PC9zdmc+ + ) + ; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} + +.ebook-icon.ebook-mobi{ + background-image: + url( + data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTMxLjgsNjkuNiAgICBjMCwxLjItMC44LDItMiwyYy0xLjEsMC0yLTAuOC0yLTJjMC0xLjEsMC44LTEuOSwyLTEuOUMzMC45LDY3LjcsMzEuOCw2OC41LDMxLjgsNjkuNnoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNDkuNCw3MC4zICAgIGMtMC40LDEtMC45LDEuMy0xLjgsMS4zYy0wLjksMC0xLjQtMC4zLTEuOC0xLjNsLTQuMy0xMC43Yy0wLjgtMi0yLjItNi4xLTIuNy03LjljMC4xLDEuOCwwLjQsNywwLjQsMTAuOXY3LjkgICAgYzAsMC44LTAuNSwxLjEtMS4zLDEuMWMtMC44LDAtMS4zLTAuNC0xLjMtMS4xVjUwLjljMC0xLDAuNy0xLjcsMS44LTEuN2MxLjIsMCwxLjgsMC41LDIuMywxLjVsNS4yLDEzLjFjMC42LDEuNCwxLjUsNCwxLjgsNS4zICAgIGMwLjMtMS4yLDEuMS0zLjcsMS44LTUuM2w1LjEtMTIuOWMwLjUtMS4xLDEuMS0xLjYsMi4zLTEuNmMxLDAsMS44LDAuNiwxLjgsMS43djE5LjZjMCwwLjgtMC42LDEuMS0xLjMsMS4xICAgIGMtMC44LDAtMS4zLTAuNC0xLjMtMS4xdi03LjhjMC00LDAuMy05LjEsMC41LTExYy0wLjUsMS44LTEuOSw1LjgtMi43LDcuOEw0OS40LDcwLjN6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTc2LjksNjMuNiAgICBjMCw0LjktMi43LDguMy03LjEsOC4zYy00LjcsMC03LjQtMy4zLTcuNC04LjNjMC00LjksMi43LTguMiw3LjMtOC4yQzc0LjIsNTUuNCw3Ni45LDU4LjYsNzYuOSw2My42eiBNNjUsNjMuNmMwLDMuNiwxLjcsNiw0LjYsNiAgICBjMy4xLDAsNC43LTIuNCw0LjctNi4yYzAtMy42LTEuNi02LTQuNS02QzY2LjcsNTcuNSw2NSw1OS45LDY1LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTgyLjcsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNODIuNiw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDODQuNCw1Ny42LDgyLjYsNjAuMSw4Mi42LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTEwMSw1MS4xICAgIGMwLDEuMS0wLjgsMS45LTEuOSwxLjljLTEuMSwwLTEuOS0wLjgtMS45LTEuOWMwLTEuMSwwLjgtMS45LDEuOS0xLjlDMTAwLjEsNDkuMiwxMDEsNTAsMTAxLDUxLjF6IE05Ny44LDU2LjcgICAgYzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjgsMCwxLjMsMC40LDEuMywxLjF2MTMuOGMwLDAuOC0wLjUsMS4xLTEuMywxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48L2c+PC9zdmc+ + ) + ; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 44fc8f55..c53c5fd3 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -63,7 +63,7 @@

- + {% for tag in entry.tags %} {{tag.name}} {%endfor%} @@ -85,7 +85,7 @@
{% for c in cc %} {% if entry['custom_column_' ~ c.id]|length > 0 %} - {{ c.name }}: + {{ c.name }}: {% for column in entry['custom_column_' ~ c.id] %} {% if c.datatype == 'rating' %} {{ '%d' % (column.value / 2) }} @@ -106,7 +106,7 @@ {% endfor %}

- {% endif %} + {% endif %} {% if not g.user.is_anonymous() %}

@@ -117,7 +117,7 @@

{% endif %} - + {% if entry.comments|length > 0 and entry.comments[0].text|length > 0%}

{{_('Description:')}}

@@ -130,15 +130,18 @@
{% if g.user.role_download() %}
- -
{% endif %} @@ -160,7 +163,7 @@
{% endif %} -
+
{% if g.user.is_authenticated %} @@ -183,7 +186,7 @@ {% endif %} {%endfor%} - + {% if books_shelfs %}
{% for shelf in g.user.shelf %} @@ -247,5 +250,3 @@ }); {% endblock %} - - diff --git a/cps/templates/stats.html b/cps/templates/stats.html index 4b08afda..6745e908 100644 --- a/cps/templates/stats.html +++ b/cps/templates/stats.html @@ -88,7 +88,18 @@ - + + + + + + + + + + + + + +
{{_('File License')}}{{_('License Type')}}
File Document Icon By Sergei KokotaCreative Commons (Attribution 3.0 Unported)
{% endblock %} - - From 720c07b9eebba6ae8b9872741225c130f1a555ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=AA=8E?= Date: Wed, 12 Apr 2017 16:23:12 +0800 Subject: [PATCH 02/47] remove empty style --- cps/static/css/style.css | 1 - 1 file changed, 1 deletion(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 214172c1..5a77aade 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -54,7 +54,6 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te * .ebook-icon{ padding: 1em; - background-image: ; background-size: contain; background-repeat: no-repeat; background-position: center; From f6076bc3371f0151328dcb5af7e45cba7315ca7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=AA=8E?= Date: Thu, 13 Apr 2017 17:58:51 +0800 Subject: [PATCH 03/47] media tweak for better download placement --- cps/static/css/style.css | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 5a77aade..c336bf16 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -21,7 +21,17 @@ a{color: #45b29d}a:hover{color: #444;} .container-fluid .book .meta .author{font-size:12px;color:#999} .container-fluid .book .meta .rating{margin-top:5px}.rating .glyphicon-star{color:#999}.rating .glyphicon-star.good{color:#45b29d} .navbar-brand{font-family: 'Grand Hotel', cursive; font-size: 35px; color: #45b29d !important;} -.more-stuff{margin-top: 20px; padding-top: 20px; border-top: 1px solid #ccc} +.more-stuff{margin-top: 20px;padding-top: 20px;border-top: 1px solid #ccc} +@media all and (min-height: 25em){ + .more-stuff{ + position: fixed; + bottom: 2em; + height: 20vh; + } + body { + padding-bottom: 20vh; + } +} .more-stuff>li{margin-bottom: 10px;} .navbar-collapse.in .navbar-nav{margin: 0;} span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: text-top;} @@ -53,7 +63,6 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .spinner2 {margin:0 41%;} * .ebook-icon{ - padding: 1em; background-size: contain; background-repeat: no-repeat; background-position: center; @@ -65,6 +74,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTMwLjcsNjkuNiAgICBjMCwxLjItMC44LDItMiwycy0xLjktMC44LTEuOS0yYzAtMS4xLDAuOC0xLjksMS45LTEuOVMzMC43LDY4LjUsMzAuNyw2OS42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik0zOC4xLDY4LjEgICAgYzAsMC42LDAuNCwwLjksMSwwLjloMTAuMWMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjctMC40LDEuMi0xLjEsMS4ySDM4LjRjLTIsMC0yLjktMC45LTIuOS0zVjUyLjVjMC0yLjIsMC45LTMuMSwyLjktMy4xSDQ5ICAgIGMwLjcsMCwxLjEsMC41LDEuMSwxLjJzLTAuNCwxLjItMS4xLDEuMmgtOS45Yy0wLjcsMC0xLDAuMy0xLDF2NS44aDkuNmMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjYtMC40LDEuMi0xLjEsMS4yaC05LjZWNjguMXoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNTUuOCw3Ni40ICAgIGMwLDAuNy0wLjUsMS4xLTEuMiwxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43YzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC4zLDEuMiwxdjAuNWMwLDAuNCwwLDEuMS0wLjEsMS42ICAgIGMxLTIsMi41LTMuMyw1LjMtMy4zYzQuMiwwLDYuNiwzLjEsNi42LDguMXMtMi41LDguNC02LjgsOC40Yy0yLjYsMC00LjItMS4zLTUuMi0zLjNjMC4xLDAuNSwwLjEsMS4xLDAuMSwxLjZWNzYuNHogTTU1LjgsNjMuNiAgICBjMCwzLjUsMS44LDYsNC44LDZjMi45LDAsNC41LTIuNCw0LjUtNi4xYzAtMy43LTEuNi02LTQuNC02QzU3LjUsNTcuNiw1NS44LDYwLjEsNTUuOCw2My42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik03MC45LDU2LjcgICAgYzAtMC44LDAuNS0xLjEsMS4zLTEuMXMxLjMsMC40LDEuMywxLjF2OWMwLDIuNCwxLDMuOCwzLjEsMy44YzEuNSwwLDIuNy0wLjcsMy43LTJjMC43LTEsMS0xLjgsMS0yLjl2LTcuOWMwLTAuOCwwLjUtMS4xLDEuMy0xLjEgICAgYzAuNywwLDEuMywwLjQsMS4zLDEuMXYxMy43YzAsMC44LTAuNSwxLjEtMS4yLDEuMWMtMC44LDAtMS4zLTAuMy0xLjMtMXYtMC44YzAtMC4zLDAuMS0wLjksMC4yLTEuM2MtMC45LDItMi41LDMuNC01LjMsMy40ICAgIGMtMy4zLDAtNS4yLTIuMS01LjItNS41VjU2Ljd6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTkwLjQsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNOTAuMyw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDOTIuMSw1Ny42LDkwLjMsNjAuMSw5MC4zLDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PC9nPjwvZz48L3N2Zz4= ) ; + padding: 1em; background-size: contain; background-repeat: no-repeat; background-position: center; @@ -76,6 +86,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTQwLjIsNjkuNiAgICBjMCwxLjItMC44LDItMiwycy0xLjktMC44LTEuOS0yYzAtMS4xLDAuOC0xLjksMS45LTEuOVM0MC4yLDY4LjUsNDAuMiw2OS42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik00Nyw3Ni40ICAgIGMwLDAuNy0wLjUsMS4xLTEuMiwxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43YzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC4zLDEuMiwxdjAuNWMwLDAuNCwwLDEuMS0wLjEsMS42ICAgIGMxLTIsMi41LTMuMyw1LjMtMy4zYzQuMiwwLDYuNiwzLjEsNi42LDguMXMtMi41LDguNC02LjgsOC40Yy0yLjYsMC00LjItMS4zLTUuMi0zLjNjMC4xLDAuNSwwLjEsMS4xLDAuMSwxLjZWNzYuNHogTTQ3LDYzLjYgICAgYzAsMy41LDEuOCw2LDQuOCw2YzIuOSwwLDQuNS0yLjQsNC41LTYuMWMwLTMuNy0xLjYtNi00LjQtNkM0OC43LDU3LjYsNDcsNjAuMSw0Nyw2My42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik03My4zLDUwLjQgICAgYzAtMC44LDAuNS0xLjEsMS4yLTEuMWMwLjgsMCwxLjMsMC40LDEuMywxLjF2MjAuMWMwLDAuOC0wLjUsMS4xLTEuMywxLjFjLTAuOCwwLTEuMi0wLjUtMS4yLTF2LTAuNmMwLTAuMywwLjEtMC45LDAuMS0xLjMgICAgYy0xLDItMi42LDMuMi01LjIsMy4yYy00LjEsMC02LjctMy4yLTYuNy04LjNjMC00LjksMi42LTguMSw2LjgtOC4xYzIuNiwwLDQuMiwxLjIsNS4yLDMuMmMtMC4xLTAuNi0wLjEtMS41LTAuMS0yLjFWNTAuNHogICAgIE02NCw2My41YzAsMy43LDEuNiw2LjEsNC41LDYuMWMzLDAsNC44LTIuNiw0LjgtNi4xYzAtMy40LTEuNy02LTQuOC02QzY1LjcsNTcuNiw2NCw1OS45LDY0LDYzLjV6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTgxLjcsNTMuNyAgICBjMC0zLjYsMi4yLTQuNiw0LjQtNC42YzAuOSwwLDEuNiwwLjEsMi40LDAuM2MwLjUsMC4yLDAuOCwwLjYsMC44LDFjMCwwLjIsMCwwLjQtMC4xLDAuNWMtMC4yLDAuNS0wLjYsMC44LTEuMSwwLjggICAgYy0wLjEsMC0wLjMsMC0wLjUtMC4xYy0wLjUtMC4yLTEtMC4zLTEuNi0wLjNjLTEsMC0xLjgsMC42LTEuOCwyLjZ2MS43aDMuNGMwLjcsMCwxLDAuNSwxLDEuMmMwLDAuNi0wLjQsMS4xLTEsMS4xaC0zLjR2MTIuNSAgICBjMCwwLjgtMC41LDEuMS0xLjMsMS4xYy0wLjgsMC0xLjMtMC40LTEuMy0xLjFWNThoLTIuNGMtMC43LDAtMS0wLjQtMS0xLjFzMC4zLTEuMiwxLTEuMmgyLjRWNTMuN3oiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48L2c+PC9nPjwvc3ZnPg== ) ; + padding: 1em; background-size: contain; background-repeat: no-repeat; background-position: center; @@ -87,6 +98,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTM4LjYsNjkuNiAgICBjMCwxLjItMC44LDItMiwyYy0xLjEsMC0yLTAuOC0yLTJjMC0xLjEsMC44LTEuOSwyLTEuOUMzNy44LDY3LjcsMzguNiw2OC41LDM4LjYsNjkuNnoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNDYuMSw3MC40ICAgIGMwLDAuOC0wLjYsMS4yLTEuNCwxLjJjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMlY1Mi40YzAtMi4yLDAuOS0zLDIuOS0zaDExLjJjMC44LDAsMS4yLDAuNSwxLjIsMS4ycy0wLjQsMS4yLTEuMiwxLjJINDcgICAgYy0wLjUsMC0wLjksMC4zLTAuOSwwLjl2Ni4xaDkuOGMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjYtMC40LDEuMi0xLjEsMS4yaC05LjhWNzAuNHoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNjQsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNNjMuOSw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDNjUuNyw1Ny42LDYzLjksNjAuMSw2My45LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTkzLjEsNjkgICAgYzAuNywwLDEsMC41LDEsMS4ycy0wLjQsMS4zLTEsMS4zSDgwLjJjLTEuMSwwLTEuNy0wLjYtMS43LTEuN2MwLTEsMC42LTIuNCwxLjEtMy4yYzEtMS45LDIuNy0zLjcsNS40LTUuNGwxLjktMS4zICAgIGMyLjgtMS44LDQtMi45LDQtNS4xYzAtMi4xLTEuOC0zLjQtNC40LTMuNGMtMy4zLDAtNC40LDEuOS00LjksMy45Yy0wLjIsMC42LTAuNywwLjktMS4yLDAuOWMtMC4xLDAtMC4zLDAtMC40LDAgICAgYy0wLjYtMC4xLTEuMS0wLjUtMS4xLTEuMmMwLTAuMSwwLTAuMywwLjEtMC40YzAuMy0xLjIsMC45LTIuNSwxLjktMy40YzEuMy0xLjIsMy4xLTIsNS44LTJjNC4zLDAsNywyLjIsNyw1LjggICAgYzAsMy40LTIuMiw1LTQuNyw2LjZsLTEuOSwxLjFjLTMuMSwyLTQuOSwzLjgtNS42LDYuNEg5My4xeiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48L2c+PC9zdmc+ ) ; + padding: 1em; background-size: contain; background-repeat: no-repeat; background-position: center; @@ -98,6 +110,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTMxLjgsNjkuNiAgICBjMCwxLjItMC44LDItMiwyYy0xLjEsMC0yLTAuOC0yLTJjMC0xLjEsMC44LTEuOSwyLTEuOUMzMC45LDY3LjcsMzEuOCw2OC41LDMxLjgsNjkuNnoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNDkuNCw3MC4zICAgIGMtMC40LDEtMC45LDEuMy0xLjgsMS4zYy0wLjksMC0xLjQtMC4zLTEuOC0xLjNsLTQuMy0xMC43Yy0wLjgtMi0yLjItNi4xLTIuNy03LjljMC4xLDEuOCwwLjQsNywwLjQsMTAuOXY3LjkgICAgYzAsMC44LTAuNSwxLjEtMS4zLDEuMWMtMC44LDAtMS4zLTAuNC0xLjMtMS4xVjUwLjljMC0xLDAuNy0xLjcsMS44LTEuN2MxLjIsMCwxLjgsMC41LDIuMywxLjVsNS4yLDEzLjFjMC42LDEuNCwxLjUsNCwxLjgsNS4zICAgIGMwLjMtMS4yLDEuMS0zLjcsMS44LTUuM2w1LjEtMTIuOWMwLjUtMS4xLDEuMS0xLjYsMi4zLTEuNmMxLDAsMS44LDAuNiwxLjgsMS43djE5LjZjMCwwLjgtMC42LDEuMS0xLjMsMS4xICAgIGMtMC44LDAtMS4zLTAuNC0xLjMtMS4xdi03LjhjMC00LDAuMy05LjEsMC41LTExYy0wLjUsMS44LTEuOSw1LjgtMi43LDcuOEw0OS40LDcwLjN6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTc2LjksNjMuNiAgICBjMCw0LjktMi43LDguMy03LjEsOC4zYy00LjcsMC03LjQtMy4zLTcuNC04LjNjMC00LjksMi43LTguMiw3LjMtOC4yQzc0LjIsNTUuNCw3Ni45LDU4LjYsNzYuOSw2My42eiBNNjUsNjMuNmMwLDMuNiwxLjcsNiw0LjYsNiAgICBjMy4xLDAsNC43LTIuNCw0LjctNi4yYzAtMy42LTEuNi02LTQuNS02QzY2LjcsNTcuNSw2NSw1OS45LDY1LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTgyLjcsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNODIuNiw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDODQuNCw1Ny42LDgyLjYsNjAuMSw4Mi42LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTEwMSw1MS4xICAgIGMwLDEuMS0wLjgsMS45LTEuOSwxLjljLTEuMSwwLTEuOS0wLjgtMS45LTEuOWMwLTEuMSwwLjgtMS45LDEuOS0xLjlDMTAwLjEsNDkuMiwxMDEsNTAsMTAxLDUxLjF6IE05Ny44LDU2LjcgICAgYzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjgsMCwxLjMsMC40LDEuMywxLjF2MTMuOGMwLDAuOC0wLjUsMS4xLTEuMywxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48L2c+PC9zdmc+ ) ; + padding: 1em; background-size: contain; background-repeat: no-repeat; background-position: center; From 95f22aa4b5b8634d9b10431ae5ac1a4de1b584e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=AA=8E?= Date: Thu, 13 Apr 2017 20:42:35 +0800 Subject: [PATCH 04/47] add drop shadow to distinct the fixed area --- cps/static/css/style.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index c336bf16..6ac2c046 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -21,12 +21,13 @@ a{color: #45b29d}a:hover{color: #444;} .container-fluid .book .meta .author{font-size:12px;color:#999} .container-fluid .book .meta .rating{margin-top:5px}.rating .glyphicon-star{color:#999}.rating .glyphicon-star.good{color:#45b29d} .navbar-brand{font-family: 'Grand Hotel', cursive; font-size: 35px; color: #45b29d !important;} -.more-stuff{margin-top: 20px;padding-top: 20px;border-top: 1px solid #ccc} -@media all and (min-height: 25em){ +.more-stuff{margin-top: 20px; padding-top: 20px;border-top: 1px solid #ccc} +@media all and (min-height: 100vh){ .more-stuff{ position: fixed; bottom: 2em; height: 20vh; + filter:drop-shadow(1em 1em 1em black); } body { padding-bottom: 20vh; From 7853cb2602c58acc388ce17ab35f79425352d37b Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 22 Jun 2017 08:47:20 -0700 Subject: [PATCH 05/47] Add TinyMCE to provide rich-text editing for descriptions --- cps/static/js/libs/tinymce/langs/readme.md | 3 + cps/static/js/libs/tinymce/license.txt | 504 ++++++++++++++++++ .../skins/lightgray/content.inline.min.css | 1 + .../tinymce/skins/lightgray/content.min.css | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 9492 bytes .../skins/lightgray/fonts/tinymce-small.svg | 63 +++ .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 9304 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 9380 bytes .../tinymce/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 17572 bytes .../tinymce/skins/lightgray/fonts/tinymce.svg | 131 +++++ .../tinymce/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 17408 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 17484 bytes .../tinymce/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../tinymce/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../tinymce/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../tinymce/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../libs/tinymce/skins/lightgray/skin.min.css | 1 + .../libs/tinymce/themes/inlite/theme.min.js | 1 + .../libs/tinymce/themes/modern/theme.min.js | 1 + cps/static/js/libs/tinymce/tinymce.min.js | 16 + cps/templates/book_edit.html | 8 + 21 files changed, 730 insertions(+) create mode 100755 cps/static/js/libs/tinymce/langs/readme.md create mode 100755 cps/static/js/libs/tinymce/license.txt create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/content.inline.min.css create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/content.min.css create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.eot create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.svg create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.ttf create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.woff create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.eot create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.svg create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.ttf create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.woff create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/img/anchor.gif create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/img/loader.gif create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/img/object.gif create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/img/trans.gif create mode 100755 cps/static/js/libs/tinymce/skins/lightgray/skin.min.css create mode 100755 cps/static/js/libs/tinymce/themes/inlite/theme.min.js create mode 100755 cps/static/js/libs/tinymce/themes/modern/theme.min.js create mode 100755 cps/static/js/libs/tinymce/tinymce.min.js diff --git a/cps/static/js/libs/tinymce/langs/readme.md b/cps/static/js/libs/tinymce/langs/readme.md new file mode 100755 index 00000000..a52bf03f --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/readme.md @@ -0,0 +1,3 @@ +This is where language files should be placed. + +Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/ diff --git a/cps/static/js/libs/tinymce/license.txt b/cps/static/js/libs/tinymce/license.txt new file mode 100755 index 00000000..b17fc904 --- /dev/null +++ b/cps/static/js/libs/tinymce/license.txt @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/cps/static/js/libs/tinymce/skins/lightgray/content.inline.min.css b/cps/static/js/libs/tinymce/skins/lightgray/content.inline.min.css new file mode 100755 index 00000000..db4868a0 --- /dev/null +++ b/cps/static/js/libs/tinymce/skins/lightgray/content.inline.min.css @@ -0,0 +1 @@ +.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-content-body a[data-mce-selected],.mce-content-body code[data-mce-selected]{background:#bfe6ff}.mce-content-body hr{cursor:default}.mce-content-body{line-height:1.3} \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/skins/lightgray/content.min.css b/cps/static/js/libs/tinymce/skins/lightgray/content.min.css new file mode 100755 index 00000000..cfbfe204 --- /dev/null +++ b/cps/static/js/libs/tinymce/skins/lightgray/content.min.css @@ -0,0 +1 @@ +body{background-color:#FFFFFF;color:#000000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px;line-height:1.3;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDDDDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:14px}.mce-content-body .mce-reset{margin:0;padding:0;border:0;outline:0;vertical-align:top;background:transparent;text-decoration:none;color:black;font-family:Arial;font-size:11px;text-shadow:none;float:none;position:static;width:auto;height:auto;white-space:nowrap;cursor:inherit;line-height:normal;font-weight:normal;text-align:left;-webkit-tap-highlight-color:transparent;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box;direction:ltr;max-width:none}.mce-object{border:1px dotted #3A3A3A;background:#D5D5D5 url(img/object.gif) no-repeat center}.mce-preview-object{display:inline-block;position:relative;margin:0 2px 0 2px;line-height:0;border:1px solid gray}.mce-preview-object[data-mce-selected="2"] .mce-shim{display:none}.mce-preview-object .mce-shim{position:absolute;top:0;left:0;width:100%;height:100%;background:url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)}figure.align-left{float:left}figure.align-right{float:right}figure.image.align-center{display:table;margin-left:auto;margin-right:auto}figure.image{display:inline-block;border:1px solid gray;margin:0 2px 0 1px;background:#f5f2f0}figure.image img{margin:8px 8px 0 8px}figure.image figcaption{margin:6px 8px 6px 8px;text-align:center}.mce-toc{border:1px solid gray}.mce-toc h2{margin:4px}.mce-toc li{list-style-type:none}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px !important;height:9px !important;border:1px dotted #3A3A3A;background:#D5D5D5 url(img/anchor.gif) no-repeat center}.mce-nbsp,.mce-shy{background:#AAA}.mce-shy::after{content:'-'}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#3399ff;color:#fff}.mce-spellchecker-word{border-bottom:2px solid #F00;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid #008000;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td[data-mce-selected],th[data-mce-selected]{background-color:#3399ff !important}.mce-edit-focus{outline:1px dotted #333}.mce-resize-bar-dragging{background-color:blue;opacity:.25;filter:alpha(opacity=25);zoom:1}.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus{outline:2px solid #2d8ac7}.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover{outline:2px solid #7ACAFF}.mce-content-body *[contentEditable=false][data-mce-selected]{outline:2px solid #2d8ac7}.mce-content-body a[data-mce-selected],.mce-content-body code[data-mce-selected]{background:#bfe6ff}.mce-content-body hr{cursor:default} \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.eot b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.eot new file mode 100755 index 0000000000000000000000000000000000000000..b144ba0bd949de3c0f87abdd78b517067169884f GIT binary patch literal 9492 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 + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.ttf b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce-small.ttf new file mode 100755 index 0000000000000000000000000000000000000000..a983e2dc4cb30880fffe00e1f0879be4d95eb4cc GIT binary patch literal 9304 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 literal 0 HcmV?d00001 diff --git a/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.eot b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.eot new file mode 100755 index 0000000000000000000000000000000000000000..f99c13f32f5c968849f08a3d8a399157bfb0cccb GIT binary patch literal 17572 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 S4xrR19F>Jx9kYDL=l=i@ywbP; literal 0 HcmV?d00001 diff --git a/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.svg b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.svg new file mode 100755 index 00000000..5727cea4 --- /dev/null +++ b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,131 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.ttf b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.ttf new file mode 100755 index 0000000000000000000000000000000000000000..16536bfd7a292e7090b9d4e0ae61061da9bc042f GIT binary patch literal 17408 zcmdsed3+pKo#%U1eW)dMt6P0kt97_r?e3O!v|4JFTDB#*Y}xXmC|2zFh=~(9w&DXH z@)bgc%oH|bf|&#_*9_SNi*Yh!0s%e?WH%x6nc4xe1Do*4hs`p;Ojtpd41$CYp8%7< zs!RL*y{eX4vK-Ns>n%b&QBjq``@%_j4P5!UD zFaL}&-T>EgaNp@kr283@#^6^RJo?_d@2`An0P)?7^?&@(#J&Snov{F8gRdjM_Ye}? zpL6swwq`lv%MTqpbMMck(EAbJg!X=O^u+#s-<|l$t&FYhNB-=wefLhX2iYeWTi1tp z{P@0O6IX5xIT1(u{KDjk(`PVFJVVoz&t!R)Ut-9YJ|(??l#f_G{{_o)58~wy$FLVa z8e_k_S2pGhrpa)~q_rqLaS@>2$Tc9(@?}w~fjM{->FZF>$t0x3r(34g*Q#Fgz1H?K zK2tGMH4~T#&os`o%(TvQ%&0R1Gizt|{rt(FfBqM}zxeFyM_zyN^_Sl`@`mxo?|ymj zTybtr^cJ6H)2*+u*SxQ_{*28q(MD*dVJ0ow$jz*rS%Ws7KpU!P+GlIe)jBZ0 z^7)Ga{Tp7Kam=QstSyPL!b;KfLi_KWhLxT(Fd&0DSOo(-@k9W>d?1NH9>KgK>$AFp znM~KYUSyi2ji|CQ%Vd2Hi83<{uBq^~IYY*e1+jx&XeX29$wad&90*17iSAxC(35sI zaV4qZ6%4tMmquDI@*+w&-^9c62Oo-#CCqrDvoj%0Cpr@wWQTM`c1d6LxQlVO$K&SH zjtYm#x%9h-qR5|}5=F-oV-d+EUy&U0?9)_C9(Q{m#vo0__Ady3tbZ2O|VQEJe*UW?al&uO>A%iH5(bkwN%ZyBRC>xH)%V`*e1 zU(8v0Bn4|yBAxY zDJZUp9qUbJoB$5-Pd29kG-?l(vHp30EC4p-DgcH7!rc*sQQj&^5LPO0l|*5yyj%XG z=384DwYexB^Zn-g$)D32TW)P0@Z}?`<1O2hEzRz=Yu(K)$?Yxi)seh!p!k|AP*oN6 zRo7KjH&$0yxSTG3RaKp@I$CYTA5N)i3XXRpUR77^i&j+yP^v=YN2`5xRaJfw|3A%1 zjkD7
qE0fV3qg3i>lG;3uYEKk_jlWwzK&8|i)pG_^o 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 N%EGLUS-#`*e*qFO!Ds*g literal 0 HcmV?d00001 diff --git a/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.woff b/cps/static/js/libs/tinymce/skins/lightgray/fonts/tinymce.woff new file mode 100755 index 0000000000000000000000000000000000000000..74b50f4c3001da7fdfffd8638213dcf1a396da78 GIT binary patch literal 17484 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 C+YCGa literal 0 HcmV?d00001 diff --git a/cps/static/js/libs/tinymce/skins/lightgray/img/loader.gif b/cps/static/js/libs/tinymce/skins/lightgray/img/loader.gif new file mode 100755 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/cps/static/js/libs/tinymce/skins/lightgray/img/object.gif b/cps/static/js/libs/tinymce/skins/lightgray/img/object.gif new file mode 100755 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xDtr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding-powered-by{background-color:#f0f0f0;position:absolute;right:0;bottom:0;width:91px;height:9px;margin-right:-1px;margin-bottom:-1px;border:1px solid #c5c5c5;border-width:1px 1px 0 1px;padding:6px 6px 0 6px;background-image:url('data:image/gif;base64,R0lGODlhXwAJAIABAIiIiAAAACH5BAEKAAEALAAAAABfAAkAAAJxhBGpy+2PUnzqGNpmPNJqDIZSJY4m+KXLF3At2V6xPFfuvMF6J6fINTnhTr9XcaRC6pKvFYlZjDIszaXRSA3ijlXo9AlWindaldSJthJ55XAz6+ZWbVCOdojP77p8J8vlUSI4SHEnaEiYqOhARdhIWAAAOw');background-repeat:no-repeat;background-position:center center}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:rgba(0,0,0,0.2);border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#f0f0f0;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:rgba(0,0,0,0.2);border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#f0f0f0;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:#fff;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#FFF;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#F0F0F0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#CCCCCC;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333333}.mce-notification .mce-progress .mce-bar-container{border-color:#CCCCCC}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:white}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #AAA;background:#EEE;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #BBB;background:#DDD;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#BBB}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#FFF}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#ffffff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB} \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/themes/inlite/theme.min.js b/cps/static/js/libs/tinymce/themes/inlite/theme.min.js new file mode 100755 index 00000000..25996d25 --- /dev/null +++ b/cps/static/js/libs/tinymce/themes/inlite/theme.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i0})},e=function(b,c){var e=function(a){return"string"==typeof a?d(a,/[ ,]/):a},f=function(a,b){return a===!1?[]:b};return a.isArray(b)?b:a.isString(b)?e(b):a.isBoolean(b)?f(b,c):c},f=function(a){return function(c,d,f){var g=d in c.settings?c.settings[d]:f;return b(f,a),e(g,f)}};return{getStringOr:c(a.isString),getBoolOr:c(a.isBoolean),getNumberOr:c(a.isNumber),getHandlerOr:c(a.isFunction),getToolbarItemsOr:f(a.isArray)}}),g("7",[],function(){var a=function(a,b){return{id:a,rect:b}},b=function(a,b){for(var c=0;c",c=0;c
";e+=""}return e+="",e+=""},d=function(a){var b=a.dom.select("*[data-mce-id]");return b[0]},e=function(a,b,e){a.undoManager.transact(function(){var f,g;a.insertContent(c(b,e)),f=d(a),f.removeAttribute("data-mce-id"),g=a.dom.select("td,th",f),a.selection.setCursorLocation(g[0],0)})},f=function(a,b){a.execCommand("FormatBlock",!1,b)},g=function(b,c,d){var e,f;e=b.editorUpload.blobCache,f=e.create(a.uuid("mceu"),d,c),e.add(f),b.insertContent(b.dom.createHTML("img",{src:f.blobUri()}))},h=function(a){a.selection.collapse(!1)},i=function(a){a.focus(),b.unlinkSelection(a),h(a)},j=function(a,b,c){a.focus(),a.dom.setAttrib(b,"href",c),h(a)},k=function(a,b){a.execCommand("mceInsertLink",!1,{href:b}),h(a)},l=function(a,b){var c=a.dom.getParent(a.selection.getStart(),"a[href]");c?j(a,c,b):k(a,b)},m=function(a,b){0===b.trim().length?i(a):l(a,b)};return{insertTable:e,formatBlock:f,insertBlob:g,createLink:m,unlink:i}}),g("v",[],function(){var a=function(a){return/^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(a.trim())},b=function(a){return/^https?:\/\//.test(a.trim())};return{isDomainLike:a,isAbsolute:b}}),g("l",["g","j","s","p","v"],function(a,b,c,d,e){var f=function(a){a.find("textbox").eq(0).each(function(a){a.focus()})},g=function(c,d){var e=b.create(a.extend({type:"form",layout:"flex",direction:"row",padding:5,name:c,spacing:3},d));return e.on("show",function(){f(e)}),e},h=function(a,b){return b?a.show():a.hide()},i=function(a,b){return new c(function(c){a.windowManager.confirm("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(a){var d=a===!0?"http://"+b:b;c(d)})})},j=function(a,b){return!e.isAbsolute(b)&&e.isDomainLike(b)?i(a,b):c.resolve(b)},k=function(a,b){var c={},e=function(){a.focus(),d.unlink(a),b()},f=function(a){var b=a.meta;b&&b.attach&&(c={href:this.value(),attach:b.attach})},i=function(b){if(b.control===this){var c,d="";c=a.dom.getParent(a.selection.getStart(),"a[href]"),c&&(d=a.dom.getAttrib(c,"href")),this.fromJSON({linkurl:d}),h(this.find("#unlink"),c),this.find("#linkurl")[0].focus()}};return g("quicklink",{items:[{type:"button",name:"unlink",icon:"unlink",onclick:e,tooltip:"Remove link"},{type:"filepicker",name:"linkurl",placeholder:"Paste or type a link",filetype:"file",onchange:f},{type:"button",icon:"checkmark",subtype:"primary",tooltip:"Ok",onclick:"submit"}],onshow:i,onsubmit:function(e){j(a,e.data.linkurl).then(function(e){a.undoManager.transact(function(){e===c.href&&(c.attach(),c={}),d.createLink(a,e)}),b()})}})};return{createQuickLinkForm:k}}),g("m",["q","r"],function(a,b){var c=function(a,b){return{rect:a,position:b}},d=function(a,b){return{x:b.x,y:b.y,w:a.w,h:a.h}},e=function(b,e,f,g,h){var i,j,k;return i=a.findBestRelativePosition(h,f,g,b),f=a.clamp(f,g),i?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(f=a.intersect(g,f),f?(i=a.findBestRelativePosition(h,f,g,e))?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(k=d(h,f),c(k,i)):null)},f=function(a,b,c){return e(["cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr"],a,b,c)},g=function(a,b,c){return e(["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr"],["bc-tc","bl-tl","br-tr"],a,b,c)},h=function(a,c,d,e){var f;return"function"==typeof a?(f=a({elementRect:b.toClientRect(c),contentAreaRect:b.toClientRect(d),panelRect:b.toClientRect(e)}),b.fromClientRect(f)):e},i=function(a){return a.panelRect};return{calcInsert:f,calc:g,userConstrain:h,defaultHandler:i}}),g("c",["g","j","i","k","l","f","m","5"],function(a,b,c,d,e,f,g,h){return function(){var i,j,k=["bold","italic","|","quicklink","h2","h3","blockquote"],l=["quickimage","quicktable"],m=function(b,c){return a.map(c,function(a){return d.create(b,a.id,a.items)})},n=function(a){return h.getToolbarItemsOr(a,"selection_toolbar",k)},o=function(a){return h.getToolbarItemsOr(a,"insert_toolbar",l)},p=function(a){return a.items().length>0},q=function(c,f){var g=m(c,f).concat([d.create(c,"text",n(c)),d.create(c,"insert",o(c)),e.createQuickLinkForm(c,B)]);return b.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:a.grep(g,p),oncancel:function(){c.focus()}})},r=function(a){a&&a.show()},s=function(a,b){a.moveTo(b.x,b.y)},t=function(b,c){c=c?c.substr(0,2):"",a.each({t:"down",b:"up",c:"center"},function(a,d){b.classes.toggle("arrow-"+a,d===c.substr(0,1))}),"cr"===c?(b.classes.toggle("arrow-left",!0),b.classes.toggle("arrow-right",!1)):"cl"===c?(b.classes.toggle("arrow-left",!0),b.classes.toggle("arrow-right",!0)):a.each({l:"left",r:"right"},function(a,d){b.classes.toggle("arrow-"+a,d===c.substr(1,1))})},u=function(a,b){var c=a.items().filter("#"+b);return c.length>0&&(c[0].show(),a.reflow(),!0)},v=function(a,b,d,e){var i,k,l,m;return m=h.getHandlerOr(d,"inline_toolbar_position_handler",g.defaultHandler),i=f.getContentAreaRect(d),k=c.DOM.getRect(a.getEl()),l="insert"===b?g.calcInsert(e,i,k):g.calc(e,i,k),!!l&&(k=l.rect,j=e,s(a,g.userConstrain(m,e,i,k)),t(a,l.position),!0)},w=function(a,b,c,d){return r(a),a.items().hide(),u(a,b)?void(v(a,b,c,d)===!1&&B(a)):void B(a)},x=function(){return i.items().filter("form:visible").length>0},y=function(a,b){if(i){if(i.items().hide(),!u(i,b))return void B(i);var d,e,k,l;r(i),i.items().hide(),u(i,b),l=h.getHandlerOr(a,"inline_toolbar_position_handler",g.defaultHandler),d=f.getContentAreaRect(a),e=c.DOM.getRect(i.getEl()),k=g.calc(j,d,e),k&&(e=k.rect,s(i,g.userConstrain(l,j,d,e)),t(i,k.position))}},z=function(a,b,c,d){i||(i=q(a,d),i.renderTo(document.body).reflow().moveTo(c.x,c.y),a.nodeChanged()),w(i,b,a,c)},A=function(a,b,c){i&&v(i,b,a,c)},B=function(){i&&i.hide()},C=function(){i&&i.find("toolbar:visible").eq(0).each(function(a){a.focus(!0)})},D=function(){i&&(i.remove(),i=null)},E=function(){return i&&i.visible()&&x()};return{show:z,showForm:y,reposition:A,inForm:E,hide:B,focus:C,remove:D}}}),g("n",["s"],function(a){var b=function(b){return new a(function(a){var c=new FileReader;c.onloadend=function(){a(c.result.split(",")[1])},c.readAsDataURL(b)})};return{blobToBase64:b}}),g("o",["s"],function(a){var b=function(){return new a(function(a){var b;b=document.createElement("input"),b.type="file",b.style.position="fixed",b.style.left=0,b.style.top=0,b.style.opacity=.001,document.body.appendChild(b),b.onchange=function(b){a(Array.prototype.slice.call(b.target.files))},b.click(),b.parentNode.removeChild(b)})};return{pickFile:b}}),g("b",["c","n","o","p"],function(a,b,c,d){var e=function(a){for(var b=function(b){return function(){d.formatBlock(a,b)}},c=1;c<6;c++){var e="h"+c;a.addButton(e,{text:e.toUpperCase(),tooltip:"Heading "+c,stateSelector:e,onclick:b(e),onPostRender:function(){var a=this.getEl().firstChild.firstChild;a.style.fontWeight="bold"}})}},f=function(a,f){a.addButton("quicklink",{icon:"link",tooltip:"Insert/Edit link",stateSelector:"a[href]",onclick:function(){f.showForm(a,"quicklink")}}),a.addButton("quickimage",{icon:"image",tooltip:"Insert image",onclick:function(){c.pickFile().then(function(c){var e=c[0];b.blobToBase64(e).then(function(b){d.insertBlob(a,b,e)})})}}),a.addButton("quicktable",{icon:"table",tooltip:"Insert table",onclick:function(){f.hide(),d.insertTable(a,2,2)}}),e(a)};return{addToEditor:f}}),g("0",["1","2","3","4","5","6","7","8","9","a","b","c"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(a){var b=a.selection.getNode(),c=a.dom.getParents(b);return c},n=function(a,b,c,d){var e=function(c){return a.dom.is(c,b)};return{predicate:e,id:c,items:d}},o=function(a){var b=a.contextToolbars;return d.flatten([b?b:[],n(a,"img","image","alignleft aligncenter alignright")])},p=function(a,b){var c,d,e;return d=m(a),e=h.fromContextToolbars(b),c=g.match(a,[f.element(d[0],e),i.textSelection("text"),i.emptyTextBlock(d,"insert"),f.parent(d,e)]),c&&c.rect?c:null},q=function(a,b){var c=function(){var c=o(a),d=p(a,c);d?b.show(a,d.id,d.rect,c):b.hide()};return function(){a.removed||c()}},r=function(a,b){return function(){var c=o(a),d=p(a,c);d&&b.reposition(a,d.id,d.rect)}},s=function(a,b,c){return function(){a.removed||b.inForm()||c()}},t=function(a,b){var d=c.throttle(q(a,b),0),e=c.throttle(s(a,b,q(a,b)),0);a.on("blur hide ObjectResizeStart",b.hide),a.on("click",d),a.on("nodeChange mouseup",e),a.on("ResizeEditor keyup",d),a.on("ResizeWindow",r(a,b)),a.on("remove",b.remove),a.shortcuts.add("Alt+F10","",b.focus)},u=function(a,b){a.shortcuts.remove("meta+k"),a.shortcuts.add("meta+k","",function(){var c=o(a),d=d=g.match(a,[i.textSelection("quicklink")]);d&&b.show(a,d.id,d.rect,c)})},v=function(a,b){return j.load(a,function(){t(a,b),u(a,b)}),{}},w=function(a){throw new Error(a)};return a.add("inlite",function(a){var b=new l;k.addToEditor(a,b);var c=function(){return a.inline?v(a,b):w("inlite theme only supports inline mode.")};return{renderUI:c}}),b.appendTo(window.tinymce?window.tinymce:{}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/themes/modern/theme.min.js b/cps/static/js/libs/tinymce/themes/modern/theme.min.js new file mode 100755 index 00000000..524b421e --- /dev/null +++ b/cps/static/js/libs/tinymce/themes/modern/theme.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i=0;c--)for(d=f.length-1;d>=0;d--)if(f[d].predicate(e[c]))return{toolbar:f[d],element:e[c]};return null};a.on("click keyup setContent ObjectResized",function(b){("setcontent"!==b.type||b.selection)&&c.setEditorTimeout(a,function(){var b;b=u(a.selection.getNode()),b?(t(),s(b)):t()})}),a.on("blur hide contextmenu",t),a.on("ObjectResizeStart",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.hide()}),a.on("ResizeEditor ResizeWindow",q(!0)),a.on("nodeChange",q(!1)),a.on("remove",function(){b.each(n(),function(a){a.panel&&a.panel.remove()}),a.contextToolbars={}}),a.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.items()[0].focus()})};return{addContextualToolbars:m}}),g("h",["d"],function(a){var b={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},c=function(a,b){var c;return"|"==b?{text:"|"}:c=a[b]},d=function(d,e,f){var g,h,i,j,k;if(k=a.makeMap((e.removed_menuitems||"").split(/[ ,]/)),e.menu?(h=e.menu[f],j=!0):h=b[f],h){g={text:h.title},i=[],a.each((h.items||"").split(/[ ,]/),function(a){var b=c(d,a);b&&!k[a]&&i.push(c(d,a))}),j||a.each(d,function(a){a.context==f&&("before"==a.separator&&i.push({text:"|"}),a.prependToContext?i.unshift(a):i.push(a),"after"==a.separator&&i.push({text:"|"}))});for(var l=0;l=11},k=function(a){return!(!j()||!a.sidebars)&&a.sidebars.length>0},l=function(b){var c=a.map(b.sidebars,function(a){var c=a.settings;return{type:"button",icon:c.icon,image:c.image,tooltip:c.tooltip,onclick:i(b,a.name,b.sidebars)}});return{type:"panel",name:"sidebar",layout:"stack",classes:"sidebar",items:[{type:"toolbar",layout:"stack",classes:"sidebar-toolbar",items:c}]}};return{hasSidebar:k,createSidebar:l}}),g("j",[],function(){var a=function(a){var b=function(){a._skinLoaded=!0,a.fire("SkinLoaded")};return function(){a.initialized?b():a.on("init",b)}};return{fireSkinLoaded:a}}),g("6",["b","c","d","e","f","g","h","9","i","j","k"],function(a,b,c,d,e,f,g,h,i,j,k){var l=a.DOM,m=function(a){return function(b){a.find("*").disabled("readonly"===b.mode)}},n=function(a){return{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",border:a,html:""}},o=function(a){return{type:"panel",layout:"stack",classes:"edit-aria-container",border:"1 0 0 0",items:[n("0"),i.createSidebar(a)]}},p=function(a,c,p){var q,r,s,t=a.settings;return p.skinUiCss&&l.styleSheetLoader.load(p.skinUiCss,j.fireSkinLoaded(a)),q=c.panel=b.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[t.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:g.createMenuButtons(a)},k.createToolbars(a,t.toolbar_items_size),i.hasSidebar(a)?o(a):n("1 0 0 0")]}),t.resize!==!1&&(r={type:"resizehandle",direction:t.resize,onResizeStart:function(){var b=a.getContentAreaContainer().firstChild;s={width:b.clientWidth,height:b.clientHeight}},onResize:function(b){"both"===t.resize?h.resizeTo(a,s.width+b.deltaX,s.height+b.deltaY):h.resizeTo(a,null,s.height+b.deltaY)}}),t.statusbar!==!1&&q.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:a},r]}),a.fire("BeforeRenderUI"),a.on("SwitchMode",m(q)),q.renderBefore(p.targetNode).reflow(),t.readonly&&a.setMode("readonly"),p.width&&l.setStyle(q.getEl(),"width",p.width),a.on("remove",function(){q.remove(),q=null}),d.addKeys(a,q),f.addContextualToolbars(a),e.setup(a),{iframeContainer:q.find("#iframe")[0].getEl(),editorContainer:q.getEl()}};return{render:p}}),g("l",["a"],function(a){return a("tinymce.ui.FloatPanel")}),g("7",["d","c","b","l","k","h","g","e","j"],function(a,b,c,d,e,f,g,h,i){var j=function(a,j,k){var l,m,n=a.settings,o=c.DOM;n.fixed_toolbar_container&&(m=o.select(n.fixed_toolbar_container)[0]);var p=function(){if(l&&l.moveRel&&l.visible()&&!l._fixed){var b=a.selection.getScrollContainer(),c=a.getBody(),d=0,e=0;if(b){var f=o.getPos(c),g=o.getPos(b);d=Math.max(0,g.x-f.x),e=Math.max(0,g.y-f.y)}l.fixed(!1).moveRel(c,a.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(d,e)}},q=function(){l&&(l.show(),p(),o.addClass(a.getBody(),"mce-edit-focus"))},r=function(){l&&(l.hide(),d.hideAll(),o.removeClass(a.getBody(),"mce-edit-focus"))},s=function(){return l?void(l.visible()||q()):(l=j.panel=b.create({type:m?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!m,border:1,items:[n.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:f.createMenuButtons(a)},e.createToolbars(a,n.toolbar_items_size)]}),a.fire("BeforeRenderUI"),l.renderTo(m||document.body).reflow(),h.addKeys(a,l),q(),g.addContextualToolbars(a),a.on("nodeChange",p),a.on("activate",q),a.on("deactivate",r),void a.nodeChanged())};return n.content_editable=!0,a.on("focus",function(){k.skinUiCss?o.styleSheetLoader.load(k.skinUiCss,s,s):s()}),a.on("blur hide",r),a.on("remove",function(){l&&(l.remove(),l=null)}),k.skinUiCss&&o.styleSheetLoader.load(k.skinUiCss,i.fireSkinLoaded(a)),{}};return{render:j}}),g("m",["a"],function(a){return a("tinymce.ui.Throbber")}),g("8",["m"],function(a){var b=function(b,c){var d;b.on("ProgressState",function(b){d=d||new a(c.panel.getEl("body")),b.state?d.show(b.time):d.hide()})};return{setup:b}}),g("0",["1","2","3","4","5","6","7","8","9"],function(a,b,c,d,e,f,g,h,i){var j=b.ThemeManager;e.appendTo(a.tinymce?a.tinymce:{});var k=function(a,b,d){var e=a.settings,i=e.skin!==!1&&(e.skin||"lightgray");if(i){var j=e.skin_url;j=j?a.documentBaseURI.toAbsolute(j):c.baseURL+"/skins/"+i,d.skinUiCss=j+"/skin.min.css",a.contentCSS.push(j+"/content"+(a.inline?".inline":"")+".min.css")}return h.setup(a,b),e.inline?g.render(a,b,d):f.render(a,b,d)};return j.add("modern",function(a){return{renderUI:function(b){return k(a,this,b)},resizeTo:function(b,c){return i.resizeTo(a,b,c)},resizeBy:function(b,c){return i.resizeBy(a,b,c)}}}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/tinymce.min.js b/cps/static/js/libs/tinymce/tinymce.min.js new file mode 100755 index 00000000..d2d51d9d --- /dev/null +++ b/cps/static/js/libs/tinymce/tinymce.min.js @@ -0,0 +1,16 @@ +// 4.6.4 (2017-06-13) +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i=d.x&&f.x+f.w<=d.w+d.x&&f.y>=d.y&&f.y+f.h<=d.h+d.y)return e[g];return null}function c(a,b,c){return f(a.x-b,a.y-c,a.w+2*b,a.h+2*c)}function d(a,b){var c,d,e,g;return c=i(a.x,b.x),d=i(a.y,b.y),e=h(a.x+a.w,b.x+b.w),g=h(a.y+a.h,b.y+b.h),e-c<0||g-d<0?null:f(c,d,e-c,g-d)}function e(a,b,c){var d,e,g,h,j,k,l,m,n,o;return j=a.x,k=a.y,l=a.x+a.w,m=a.y+a.h,n=b.x+b.w,o=b.y+b.h,d=i(0,b.x-j),e=i(0,b.y-k),g=i(0,l-n),h=i(0,m-o),j+=d,k+=e,c&&(l+=d,m+=e,j-=g,k-=h),l-=g,m-=h,f(j,k,l-j,m-k)}function f(a,b,c,d){return{x:a,y:b,w:c,h:d}}function g(a){return f(a.left,a.top,a.width,a.height)}var h=Math.min,i=Math.max,j=Math.round;return{inflate:c,relativePosition:a,findBestRelativePosition:b,intersect:d,clamp:e,create:f,fromClientRect:g}}),g("4",[],function(){function a(a,b){return function(){a.apply(b,arguments)}}function b(b){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof b)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],h(b,a(d,this),a(e,this))}function c(a){var b=this;return null===this._state?void this._deferreds.push(a):void i(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(b){return void a.reject(b)}a.resolve(d)})}function d(b){try{if(b===this)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"==typeof b||"function"==typeof b)){var c=b.then;if("function"==typeof c)return void h(a(c,b),a(d,this),a(e,this))}this._state=!0,this._value=b,f.call(this)}catch(a){e.call(this,a)}}function e(a){this._state=!1,this._value=a,f.call(this)}function f(){for(var a=0,b=this._deferreds.length;a=534;return{opera:b,webkit:c,ie:d,gecko:g,mac:h,iOS:i,android:j,contentEditable:q,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=d,range:window.getSelection&&"Range"in window,documentMode:d&&!f?document.documentMode||7:10,fileApi:k,ceFalse:d===!1||d>8,canHaveCSP:d===!1||d>11,desktop:!l&&!m,windowsPhone:n}}),g("7",["5","6"],function(a,b){"use strict";function c(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)}function d(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d||!1):a.detachEvent&&a.detachEvent("on"+b,c)}function e(a,b){var c,d=b;return c=a.path,c&&c.length>0&&(d=c[0]),a.deepPath&&(c=a.deepPath(),c&&c.length>0&&(d=c[0])),d}function f(a,c){var d,f,g=c||{};for(d in a)k[d]||(g[d]=a[d]);if(g.target||(g.target=g.srcElement||document),b.experimentalShadowDom&&(g.target=e(a,g.target)),a&&j.test(a.type)&&a.pageX===f&&a.clientX!==f){var h=g.target.ownerDocument||document,i=h.documentElement,o=h.body;g.pageX=a.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),g.pageY=a.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)}return g.preventDefault=function(){g.isDefaultPrevented=n,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},g.stopPropagation=function(){g.isPropagationStopped=n,a&&(a.stopPropagation?a.stopPropagation():a.cancelBubble=!0)},g.stopImmediatePropagation=function(){g.isImmediatePropagationStopped=n,g.stopPropagation()},l(g)===!1&&(g.isDefaultPrevented=m,g.isPropagationStopped=m,g.isImmediatePropagationStopped=m),"undefined"==typeof g.metaKey&&(g.metaKey=!1),g}function g(e,f,g){function h(){return"complete"===l.readyState||"interactive"===l.readyState&&l.body}function i(){g.domLoaded||(g.domLoaded=!0,f(m))}function j(){h()&&(d(l,"readystatechange",j),i())}function k(){try{l.documentElement.doScroll("left")}catch(b){return void a.setTimeout(k)}i()}var l=e.document,m={type:"ready"};return g.domLoaded?void f(m):(!l.addEventListener||b.ie&&b.ie<11?(c(l,"readystatechange",j),l.documentElement.doScroll&&e.self===e.top&&k()):h()?i():c(e,"DOMContentLoaded",i),void c(e,"load",i))}function h(){function a(a,b){var c,d,e,f,g=m[b];if(c=g&&g[a.type])for(d=0,e=c.length;dv.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function c(a){return a[M]=!0,a}function d(a){var b=F.createElement("div");try{return!!a(b)}catch(a){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function e(a,b){for(var c=a.split("|"),d=a.length;d--;)v.attrHandle[c[d]]=b}function f(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function g(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function h(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function i(a){return c(function(b){return b=+b,c(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function j(a){return a&&typeof a.getElementsByTagName!==U&&a}function k(){}function l(a){for(var b=0,c=a.length,d="";b1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function o(b,c,d){for(var e=0,f=c.length;e-1&&(c[j]=!(g[j]=l))}}else t=p(t===g?t.splice(q,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function r(a){for(var b,c,d,e=a.length,f=v.relative[a[0].type],g=f||v.relative[" "],h=f?1:0,i=m(function(a){return a===b},g,!0),j=m(function(a){return aa.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==B)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];h1&&n(k),h>1&&l(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ga,"$1"),c,h0,f=b.length>0,g=function(c,g,h,i,j){var k,l,m,n=0,o="0",q=c&&[],r=[],s=B,t=c||f&&v.find.TAG("*",j),u=O+=null==s?1:Math.random()||.1,w=t.length;for(j&&(B=g!==F&&g);o!==w&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=b[l++];)if(m(k,g,h)){i.push(k);break}j&&(O=u)}e&&((k=!m&&k)&&n--,c&&q.push(k))}if(n+=o,e&&o!==n){for(l=0;m=d[l++];)m(q,r,g,h);if(c){if(n>0)for(;o--;)q[o]||r[o]||(r[o]=Y.call(i));r=p(r)}$.apply(i,r),j&&!c&&r.length>0&&n+d.length>1&&a.uniqueSort(i)}return j&&(O=u,B=s),q};return e?c(g):g}var t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M="sizzle"+-new Date,N=window.document,O=0,P=0,Q=b(),R=b(),S=b(),T=function(a,b){return a===b&&(D=!0),0},U="undefined",V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=X.indexOf||function(a){for(var b=0,c=this.length;b+~]|"+ca+")"+ca+"*"),ja=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),ka=new RegExp(fa),la=new RegExp("^"+da+"$"),ma={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da+"|[*])"),ATTR:new RegExp("^"+ea),PSEUDO:new RegExp("^"+fa),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},na=/^(?:input|select|textarea|button)$/i,oa=/^h\d$/i,pa=/^[^{]+\{\s*\[native \w/,qa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ra=/[+~]/,sa=/'|\\/g,ta=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),ua=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{$.apply(X=_.call(N.childNodes),N.childNodes),X[N.childNodes.length].nodeType}catch(a){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}u=a.support={},x=a.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},E=a.setDocument=function(a){function b(a){try{return a.top}catch(a){}return null}var c,e=a?a.ownerDocument||a:N,g=e.defaultView;return e!==F&&9===e.nodeType&&e.documentElement?(F=e,G=e.documentElement,H=!x(e),g&&g!==b(g)&&(g.addEventListener?g.addEventListener("unload",function(){E()},!1):g.attachEvent&&g.attachEvent("onunload",function(){E()})),u.attributes=d(function(a){return a.className="i",!a.getAttribute("className")}),u.getElementsByTagName=d(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),u.getElementsByClassName=pa.test(e.getElementsByClassName),u.getById=d(function(a){return G.appendChild(a).id=M,!e.getElementsByName||!e.getElementsByName(M).length}),u.getById?(v.find.ID=function(a,b){if(typeof b.getElementById!==U&&H){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},v.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){return a.getAttribute("id")===b}}):(delete v.find.ID,v.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){var c=typeof a.getAttributeNode!==U&&a.getAttributeNode("id");return c&&c.value===b}}),v.find.TAG=u.getElementsByTagName?function(a,b){if(typeof b.getElementsByTagName!==U)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},v.find.CLASS=u.getElementsByClassName&&function(a,b){if(H)return b.getElementsByClassName(a)},J=[],I=[],(u.qsa=pa.test(e.querySelectorAll))&&(d(function(a){a.innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&I.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||I.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll(":checked").length||I.push(":checked")}),d(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&I.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||I.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),I.push(",.*:")})),(u.matchesSelector=pa.test(K=G.matches||G.webkitMatchesSelector||G.mozMatchesSelector||G.oMatchesSelector||G.msMatchesSelector))&&d(function(a){u.disconnectedMatch=K.call(a,"div"),K.call(a,"[s!='']:x"),J.push("!=",fa)}),I=I.length&&new RegExp(I.join("|")),J=J.length&&new RegExp(J.join("|")),c=pa.test(G.compareDocumentPosition),L=c||pa.test(G.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},T=c?function(a,b){if(a===b)return D=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!u.sortDetached&&b.compareDocumentPosition(a)===c?a===e||a.ownerDocument===N&&L(N,a)?-1:b===e||b.ownerDocument===N&&L(N,b)?1:C?aa.call(C,a)-aa.call(C,b):0:4&c?-1:1)}:function(a,b){if(a===b)return D=!0,0;var c,d=0,g=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!g||!h)return a===e?-1:b===e?1:g?-1:h?1:C?aa.call(C,a)-aa.call(C,b):0;if(g===h)return f(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[d]===j[d];)d++;return d?f(i[d],j[d]):i[d]===N?-1:j[d]===N?1:0},e):F},a.matches=function(b,c){return a(b,null,null,c)},a.matchesSelector=function(b,c){if((b.ownerDocument||b)!==F&&E(b),c=c.replace(ja,"='$1']"),u.matchesSelector&&H&&(!J||!J.test(c))&&(!I||!I.test(c)))try{var d=K.call(b,c);if(d||u.disconnectedMatch||b.document&&11!==b.document.nodeType)return d}catch(a){}return a(c,F,null,[b]).length>0},a.contains=function(a,b){return(a.ownerDocument||a)!==F&&E(a),L(a,b)},a.attr=function(a,b){(a.ownerDocument||a)!==F&&E(a);var c=v.attrHandle[b.toLowerCase()],d=c&&W.call(v.attrHandle,b.toLowerCase())?c(a,b,!H):void 0;return void 0!==d?d:u.attributes||!H?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},a.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},a.uniqueSort=function(a){var b,c=[],d=0,e=0;if(D=!u.detectDuplicates,C=!u.sortStable&&a.slice(0),a.sort(T),D){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return C=null,a},w=a.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=w(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=w(b);return c},v=a.selectors={cacheLength:50,createPseudo:c,match:ma,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ta,ua),a[3]=(a[3]||a[4]||a[5]||"").replace(ta,ua),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(b){return b[1]=b[1].toLowerCase(),"nth"===b[1].slice(0,3)?(b[3]||a.error(b[0]),b[4]=+(b[4]?b[5]+(b[6]||1):2*("even"===b[3]||"odd"===b[3])),b[5]=+(b[7]+b[8]||"odd"===b[3])):b[3]&&a.error(b[0]),b},PSEUDO:function(a){var b,c=!a[6]&&a[2];return ma.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ka.test(c)&&(b=y(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ta,ua).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=Q[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&Q(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==U&&a.getAttribute("class")||"")})},ATTR:function(b,c,d){return function(e){var f=a.attr(e,b);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[M]||(q[M]={}),j=k[a]||[],n=j[0]===O&&j[1],m=j[0]===O&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[O,n,m];break}}else if(s&&(j=(b[M]||(b[M]={}))[a])&&j[0]===O)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[M]||(l[M]={}))[a]=[O,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(b,d){var e,f=v.pseudos[b]||v.setFilters[b.toLowerCase()]||a.error("unsupported pseudo: "+b);return f[M]?f(d):f.length>1?(e=[b,b,"",d],v.setFilters.hasOwnProperty(b.toLowerCase())?c(function(a,b){for(var c,e=f(a,d),g=e.length;g--;)c=aa.call(a,e[g]),a[c]=!(b[c]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:c(function(a){var b=[],d=[],e=z(a.replace(ga,"$1"));return e[M]?c(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,c,f){return b[0]=a,e(b,null,f,d),!d.pop()}}),has:c(function(b){return function(c){return a(b,c).length>0}}),contains:c(function(a){return a=a.replace(ta,ua),function(b){return(b.textContent||b.innerText||w(b)).indexOf(a)>-1}}),lang:c(function(b){return la.test(b||"")||a.error("unsupported lang: "+b),b=b.replace(ta,ua).toLowerCase(),function(a){var c;do if(c=H?a.lang:a.getAttribute("xml:lang")||a.getAttribute("lang"))return c=c.toLowerCase(),c===b||0===c.indexOf(b+"-");while((a=a.parentNode)&&1===a.nodeType);return!1}}),target:function(a){var b=window.location&&window.location.hash;return b&&b.slice(1)===a.id},root:function(a){return a===G},focus:function(a){return a===F.activeElement&&(!F.hasFocus||F.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!v.pseudos.empty(a)},header:function(a){return oa.test(a.nodeName)},input:function(a){return na.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:i(function(){return[0]}),last:i(function(a,b){return[b-1]}),eq:i(function(a,b,c){return[c<0?c+b:c]}),even:i(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:i(function(a,b,c){for(var d=c<0?c+b:c;++d2&&"ID"===(g=f[0]).type&&u.getById&&9===b.nodeType&&H&&v.relative[f[1].type]){if(b=(v.find.ID(g.matches[0].replace(ta,ua),b)||[])[0],!b)return c;k&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=ma.needsContext.test(a)?0:f.length;e--&&(g=f[e],!v.relative[h=g.type]);)if((i=v.find[h])&&(d=i(g.matches[0].replace(ta,ua),ra.test(f[0].type)&&j(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&l(f),!a)return $.apply(c,d),c;break}}return(k||z(a,m))(d,b,!H,c,ra.test(a)&&j(b.parentNode)||b),c},u.sortStable=M.split("").sort(T).join("")===M,u.detectDuplicates=!!D,E(),u.sortDetached=d(function(a){return 1&a.compareDocumentPosition(F.createElement("div"))}),d(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||e("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),u.attributes&&d(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||e("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),d(function(a){return null==a.getAttribute("disabled")})||e(ba,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),a}),g("1g",[],function(){function a(a){var b,c,d=a;if(!j(a))for(d=[],b=0,c=a.length;b=0;e--)i(a,b[e],c,d);else for(e=0;e)[^>]*$|#([\w\-]*)$)/,A=a.Event,B=c.makeMap("children,contents,next,prev"),C=c.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),D=c.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),E={"for":"htmlFor","class":"className",readonly:"readOnly"},F={"float":"cssFloat"},G={},H={},I=/^\s*|\s*$/g;return l.fn=l.prototype={constructor:l,selector:"",context:null,length:0,init:function(a,b){var c,d,e=this;if(!a)return e;if(a.nodeType)return e.context=e[0]=a,e.length=1,e;if(b&&b.nodeType)e.context=b;else{if(b)return l(a).attr(b);e.context=b=document}if(f(a)){if(e.selector=a,c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c)return l(b).find(a);if(c[1])for(d=h(a,q(b)).firstChild;d;)x.call(e,d),d=d.nextSibling;else{if(d=q(b).getElementById(c[2]),!d)return e;if(d.id!==c[2])return e.find(a);e.length=1,e[0]=d}}else this.add(a,!1);return e},toArray:function(){return c.toArray(this)},add:function(a,b){var c,d,e=this;if(f(a))return e.add(l(a));if(b!==!1)for(c=l.unique(e.toArray().concat(l.makeArray(a))),e.length=c.length,d=0;d1&&(B[a]||(e=l.unique(e)),0===a.indexOf("parents")&&(e=e.reverse())),e=l(e),c?e.filter(c):e}}),o({parentsUntil:function(a,b){return r(a,"parentNode",b)},nextUntil:function(a,b){return s(a,"nextSibling",1,b).slice(1)},prevUntil:function(a,b){return s(a,"previousSibling",1,b).slice(1)}},function(a,b){l.fn[a]=function(c,d){var e=this,f=[];return e.each(function(){var a=b.call(f,this,c,f);a&&(l.isArray(a)?f.push.apply(f,a):f.push(a))}),this.length>1&&(f=l.unique(f),0!==a.indexOf("parents")&&"prevUntil"!==a||(f=f.reverse())),f=l(f),d?f.filter(d):f}}),l.fn.is=function(a){return!!a&&this.filter(a).length>0},l.fn.init.prototype=l.fn,l.overrideDefaults=function(a){function b(d,e){return c=c||a(),0===arguments.length&&(d=c.element),e||(e=c.context),new b.fn.init(d,e)}var c;return l.extend(b,this),b},d.ie&&d.ie<8&&(u(G,"get",{maxlength:function(a){var b=a.maxLength;return 2147483647===b?v:b},size:function(a){var b=a.size;return 20===b?v:b},"class":function(a){return a.className},style:function(a){var b=a.style.cssText;return 0===b.length?v:b}}),u(G,"set",{"class":function(a,b){a.className=b},style:function(a,b){a.style.cssText=b}})),d.ie&&d.ie<9&&(F["float"]="styleFloat",u(H,"set",{opacity:function(a,b){var c=a.style;null===b||""===b?c.removeAttribute("filter"):(c.zoom=1,c.filter="alpha(opacity="+100*b+")")}})),l.attrHooks=G,l.cssHooks=H,l}),g("b",[],function(){return function(a,b){function c(a,b,c,d){function e(a){return a=parseInt(a,10).toString(16),a.length>1?a:"0"+a}return"#"+e(b)+e(c)+e(d)}var d,e,f,g,h=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,j=/\s*([^:]+):\s*([^;]+);?/g,k=/\s+$/,l={},m="\ufeff";for(a=a||{},b&&(f=b.getValidStyles(),g=b.getInvalidStyles()),e=("\\\" \\' \\; \\: ; : "+m).split(" "),d=0;d-1&&c||(w[a+b]=d==-1?i[0]:i.join(" "),delete w[a+"-top"+b],delete w[a+"-right"+b],delete w[a+"-bottom"+b],delete w[a+"-left"+b])}}function f(a){var b,c=w[a];if(c){for(c=c.split(" "),b=c.length;b--;)if(c[b]!==c[0])return!1;return w[a]=c[0],!0}}function g(a,b,c,d){f(b)&&f(c)&&f(d)&&(w[a]=w[b]+" "+w[c]+" "+w[d],delete w[b],delete w[c],delete w[d])}function n(a){return v=!0,l[a]}function o(a,b){return v&&(a=a.replace(/\uFEFF[0-9]/g,function(a){return l[a]})),b||(a=a.replace(/\\([\'\";:])/g,"$1")),a}function p(a){return String.fromCharCode(parseInt(a.slice(1),16))}function q(a){return a.replace(/\\[0-9a-f]+/gi,p)}function r(b,c,d,e,f,g){if(f=f||g)return f=o(f),"'"+f.replace(/\'/g,"\\'")+"'";if(c=o(c||d||e),!a.allow_script_urls){var h=c.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(h))return"";if(!a.allow_svg_data_urls&&/^data:image\/svg/i.test(h))return""}return x&&(c=x.call(y,c,"style")),"url('"+c.replace(/\'/g,"\\'")+"')"}var s,t,u,v,w={},x=a.url_converter,y=a.url_converter_scope||this;if(b){for(b=b.replace(/[\u0000-\u001F]/g,""),b=b.replace(/\\[\"\';:\uFEFF]/g,n).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(a){return a.replace(/[;:]/g,n)});s=j.exec(b);)if(j.lastIndex=s.index+s[0].length,t=s[1].replace(k,"").toLowerCase(),u=s[2].replace(k,""),t&&u){if(t=q(t),u=q(u),t.indexOf(m)!==-1||t.indexOf('"')!==-1)continue;if(!a.allow_script_urls&&("behavior"==t||/expression\s*\(|\/\*|\*\//.test(u)))continue;"font-weight"===t&&"700"===u?u="bold":"color"!==t&&"background-color"!==t||(u=u.toLowerCase()),u=u.replace(h,c),u=u.replace(i,r),w[t]=v?o(u,!0):u}e("border","",!0),e("border","-width"),e("border","-color"),e("border","-style"),e("padding",""),e("margin",""),g("border","border-width","border-style","border-color"),"medium none"===w.border&&delete w.border,"none"===w["border-image"]&&delete w["border-image"]}return w},serialize:function(a,b){function c(b){var c,d,e,g;if(c=f[b])for(d=0,e=c.length;d0?" ":"")+b+": "+g+";")}function d(a,b){var c;return c=g["*"],(!c||!c[a])&&(c=g[b],!c||!c[a])}var e,h,i="";if(b&&f)c("*"),c(b);else for(e in a)h=a[e],!h||g&&!d(e,b)||(i+=(i.length>0?" ":"")+e+": "+h+";");return i}}}}),g("c",[],function(){return function(a,b){function c(a,c,d,e){var f,g;if(a){if(!e&&a[c])return a[c];if(a!=b){if(f=a[d])return f;for(g=a.parentNode;g&&g!=b;g=g.parentNode)if(f=g[d])return f}}}function d(a,c,d,e){var f,g,h;if(a){if(f=a[d],b&&f===b)return;if(f){if(!e)for(h=f[c];h;h=h[c])if(!h[c])return h;return f}if(g=a.parentNode,g&&g!==b)return g}}var e=a;this.current=function(){return e},this.next=function(a){return e=c(e,"firstChild","nextSibling",a)},this.prev=function(a){return e=c(e,"lastChild","previousSibling",a)},this.prev2=function(a){return e=d(e,"lastChild","previousSibling",a)}}}),g("d",["9"],function(a){function b(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.textContent||b.innerText||a}function c(a,b){var c,d,f,g={};if(a){for(a=a.split(","),b=b||10,c=0;c\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,i=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,j=/[<>&\"\']/g,k=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,l={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};e={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},f={"<":"<",">":">","&":"&",""":'"',"'":"'"},d=c("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var m={encodeRaw:function(a,b){return a.replace(b?h:i,function(a){return e[a]||a})},encodeAllRaw:function(a){return(""+a).replace(j,function(a){return e[a]||a})},encodeNumeric:function(a,b){return a.replace(b?h:i,function(a){return a.length>1?"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";":e[a]||"&#"+a.charCodeAt(0)+";"})},encodeNamed:function(a,b,c){return c=c||d,a.replace(b?h:i,function(a){return e[a]||c[a]||a})},getEncodeFunc:function(a,b){function f(a,c){return a.replace(c?h:i,function(a){return void 0!==e[a]?e[a]:void 0!==b[a]?b[a]:a.length>1?"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";":"&#"+a.charCodeAt(0)+";"})}function j(a,c){return m.encodeNamed(a,c,b)}return b=c(b)||d,a=g(a.replace(/\+/g,",")),a.named&&a.numeric?f:a.named?b?j:m.encodeNamed:a.numeric?m.encodeNumeric:m.encodeRaw},decode:function(a){return a.replace(k,function(a,c){return c?(c="x"===c.charAt(0).toLowerCase()?parseInt(c.substr(1),16):parseInt(c,10),c>65535?(c-=65536,String.fromCharCode(55296+(c>>10),56320+(1023&c))):l[c]||String.fromCharCode(c)):f[a]||d[a]||b(a)})}};return m}),g("1h",["9"],function(a){function b(c){function d(){return J.createDocumentFragment()}function e(a,b){x(N,a,b)}function f(a,b){x(O,a,b)}function g(a){e(a.parentNode,U(a))}function h(a){e(a.parentNode,U(a)+1)}function i(a){f(a.parentNode,U(a))}function j(a){f(a.parentNode,U(a)+1)}function k(a){a?(I[R]=I[Q],I[S]=I[P]):(I[Q]=I[R],I[P]=I[S]),I.collapsed=N}function l(a){g(a),j(a)}function m(a){e(a,0),f(a,1===a.nodeType?a.childNodes.length:a.nodeValue.length)}function n(a,b){var c=I[Q],d=I[P],e=I[R],f=I[S],g=b.startContainer,h=b.startOffset,i=b.endContainer,j=b.endOffset;return 0===a?w(c,d,g,h):1===a?w(e,f,g,h):2===a?w(e,f,i,j):3===a?w(c,d,i,j):void 0}function o(){y(M)}function p(){return y(K)}function q(){return y(L)}function r(a){var b,d,e=this[Q],f=this[P];3!==e.nodeType&&4!==e.nodeType||!e.nodeValue?(e.childNodes.length>0&&(d=e.childNodes[f]),d?e.insertBefore(a,d):3==e.nodeType?c.insertAfter(a,e):e.appendChild(a)):f?f>=e.nodeValue.length?c.insertAfter(a,e):(b=e.splitText(f),e.parentNode.insertBefore(a,b)):e.parentNode.insertBefore(a,e)}function s(a){var b=I.extractContents();I.insertNode(a),a.appendChild(b),I.selectNode(a)}function t(){return T(new b(c),{startContainer:I[Q],startOffset:I[P],endContainer:I[R],endOffset:I[S],collapsed:I.collapsed,commonAncestorContainer:I.commonAncestorContainer})}function u(a,b){var c;if(3==a.nodeType)return a;if(b<0)return a;for(c=a.firstChild;c&&b>0;)--b,c=c.nextSibling;return c?c:a}function v(){return I[Q]==I[R]&&I[P]==I[S]}function w(a,b,d,e){var f,g,h,i,j,k;if(a==d)return b==e?0:b0&&I.collapse(a):I.collapse(a),I.collapsed=v(),I.commonAncestorContainer=c.findCommonAncestor(I[Q],I[R])}function y(a){var b,c,d,e,f,g,h,i=0,j=0;if(I[Q]==I[R])return z(a);for(b=I[R],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[Q])return A(b,a);++i}for(b=I[Q],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[R])return B(b,a);++j}for(d=j-i,e=I[Q];d>0;)e=e.parentNode,d--;for(f=I[R];d<0;)f=f.parentNode,d++;for(g=e.parentNode,h=f.parentNode;g!=h;g=g.parentNode,h=h.parentNode)e=g,f=h;return C(e,f,a)}function z(a){var b,c,e,f,g,h,i,j,k;if(a!=M&&(b=d()),I[P]==I[S])return b;if(3==I[Q].nodeType){if(c=I[Q].nodeValue,e=c.substring(I[P],I[S]),a!=L&&(f=I[Q],j=I[P],k=I[S]-I[P],0===j&&k>=f.nodeValue.length-1?f.parentNode.removeChild(f):f.deleteData(j,k),I.collapse(N)),a==M)return;return e.length>0&&b.appendChild(J.createTextNode(e)),b}for(f=u(I[Q],I[P]),g=I[S]-I[P];f&&g>0;)h=f.nextSibling,i=G(f,a),b&&b.appendChild(i),--g,f=h;return a!=L&&I.collapse(N),b}function A(a,b){var c,e,f,g,h,i;if(b!=M&&(c=d()),e=D(a,b),c&&c.appendChild(e),f=U(a),g=f-I[P],g<=0)return b!=L&&(I.setEndBefore(a),I.collapse(O)),c;for(e=a.previousSibling;g>0;)h=e.previousSibling,i=G(e,b),c&&c.insertBefore(i,c.firstChild),--g,e=h;return b!=L&&(I.setEndBefore(a),I.collapse(O)),c}function B(a,b){var c,e,f,g,h,i;for(b!=M&&(c=d()),f=E(a,b),c&&c.appendChild(f),e=U(a),++e,g=I[S]-e,f=a.nextSibling;f&&g>0;)h=f.nextSibling,i=G(f,b),c&&c.appendChild(i),--g,f=h;return b!=L&&(I.setStartAfter(a),I.collapse(N)),c}function C(a,b,c){var e,f,g,h,i,j,k;for(c!=M&&(f=d()),e=E(a,c),f&&f.appendChild(e),g=U(a),h=U(b),++g,i=h-g,j=a.nextSibling;i>0;)k=j.nextSibling,e=G(j,c),f&&f.appendChild(e),j=k,--i;return e=D(b,c),f&&f.appendChild(e),c!=L&&(I.setStartAfter(a),I.collapse(N)),f}function D(a,b){var c,d,e,f,g,h=u(I[R],I[S]-1),i=h!=I[R];if(h==a)return F(h,i,O,b);for(c=h.parentNode,d=F(c,O,O,b);c;){for(;h;)e=h.previousSibling,f=F(h,i,O,b),b!=M&&d.insertBefore(f,d.firstChild),i=N,h=e;if(c==a)return d;h=c.previousSibling,c=c.parentNode,g=F(c,O,O,b),b!=M&&g.appendChild(d),d=g}}function E(a,b){var c,d,e,f,g,h=u(I[Q],I[P]),i=h!=I[Q];if(h==a)return F(h,i,N,b);for(c=h.parentNode,d=F(c,O,N,b);c;){for(;h;)e=h.nextSibling,f=F(h,i,N,b),b!=M&&d.appendChild(f),i=N,h=e;if(c==a)return d;h=c.nextSibling,c=c.parentNode,g=F(c,O,N,b),b!=M&&g.appendChild(d),d=g}}function F(a,b,d,e){var f,g,h,i,j;if(b)return G(a,e);if(3==a.nodeType){if(f=a.nodeValue,d?(i=I[P],g=f.substring(i),h=f.substring(0,i)):(i=I[S],g=f.substring(0,i),h=f.substring(i)),e!=L&&(a.nodeValue=h),e==M)return;return j=c.clone(a,O),j.nodeValue=g,j}if(e!=M)return c.clone(a,O)}function G(a,b){return b!=M?b==L?c.clone(a,N):a:void a.parentNode.removeChild(a)}function H(){return c.create("body",null,q()).outerText}var I=this,J=c.doc,K=0,L=1,M=2,N=!0,O=!1,P="startOffset",Q="startContainer",R="endContainer",S="endOffset",T=a.extend,U=c.nodeIndex;return T(I,{startContainer:J,startOffset:0,endContainer:J,endOffset:0,collapsed:N,commonAncestorContainer:J,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:e,setEnd:f,setStartBefore:g,setStartAfter:h,setEndBefore:i,setEndAfter:j,collapse:k,selectNode:l,selectNodeContents:m,compareBoundaryPoints:n,deleteContents:o,extractContents:p,cloneContents:q,insertNode:r,surroundContents:s,cloneRange:t,toStringIE:H}),I}return b.prototype.toString=function(){return this.toStringIE()},b}),h("3y",Array),h("3z",Error),g("1m",["3y","3z"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e=b.length&&c(d)}};0===b.length?c([]):a.each(b,function(a,b){a.get(f(b))})})};return{par:b}}),g("41",["3x","40","53"],function(a,b,c){var d=function(a){return c.par(a,b.nu)},e=function(b,c){var e=a.map(b,c);return d(e)},f=function(a,b){return function(c){return b(c).bind(a)}};return{par:d,mapM:e,compose:f}}),g("42",["1m","4z"],function(a,b){var c=function(d){var e=function(a){return d===a},f=function(a){return c(d)},g=function(a){return c(d)},h=function(a){return c(a(d))},i=function(a){a(d)},j=function(a){return a(d)},k=function(a,b){return b(d)},l=function(a){return a(d)},m=function(a){return a(d)},n=function(){return b.some(d)};return{is:e,isValue:a.constant(!0),isError:a.constant(!1),getOr:a.constant(d),getOrThunk:a.constant(d),getOrDie:a.constant(d),or:f,orThunk:g,fold:k,map:h,each:i,bind:j,exists:l,forall:m,toOption:n}},d=function(c){var e=function(a){return a()},f=function(){return a.die(c)()},g=function(a){return a},h=function(a){return a()},i=function(a){return d(c)},j=function(a){return d(c)},k=function(a,b){return a(c)};return{is:a.constant(!1),isValue:a.constant(!1),isError:a.constant(!0),getOr:a.identity,getOrThunk:e,getOrDie:f,or:g,orThunk:h,fold:k,map:i,each:a.noop,bind:j,exists:a.constant(!1),forall:a.constant(!0),toOption:b.none}};return{value:c,error:d}}),g("1i",["3x","1m","40","41","42","5","9"],function(a,b,c,d,e,f,g){"use strict";return function(h,i){function j(a){h.getElementsByTagName("head")[0].appendChild(a)}function k(a,b,c){function d(){for(var a=t.passed,b=a.length;b--;)a[b]();t.status=2,t.passed=[],t.failed=[]}function e(){for(var a=t.failed,b=a.length;b--;)a[b]();t.status=3,t.passed=[],t.failed=[]}function i(){var a=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(a&&a[1]<536)}function k(a,b){a()||((new Date).getTime()-s0)return r=h.createElement("style"), +r.textContent='@import "'+a+'"',p(),void j(r);o()}j(q),q.href=a}}var l,m=0,n={};i=i||{},l=i.maxLoadTime||5e3;var o=function(a){return c.nu(function(c){k(a,b.compose(c,b.constant(e.value(a))),b.compose(c,b.constant(e.error(a))))})},p=function(a){return a.fold(b.identity,b.identity)},q=function(b,c,e){d.par(a.map(b,o)).get(function(b){var d=a.partition(b,function(a){return a.isValue()});d.fail.length>0?e(d.fail.map(p)):c(d.pass.map(p))})};return{load:k,loadAll:q}}}),g("j",["9"],function(a){function b(b,c){return b=a.trim(b),b?b.split(c||" "):[]}function c(a){function c(a,c,d){function e(a,b){var c,d,e={};for(c=0,d=a.length;c

").html("
"+c).contents().slice(1).appendTo(d)}return c}}):b.html(c)},getOuterHTML:function(b){return b=this.get(b),1==b.nodeType&&"outerHTML"in b?b.outerHTML:a("
").append(a(b).clone()).html()},setOuterHTML:function(b,c){var d=this;d.$$(b).each(function(){try{if("outerHTML"in this)return void(this.outerHTML=c)}catch(a){}d.remove(a(this).html(c),!0)})},decode:h.decode,encode:h.encodeAllRaw,insertAfter:function(a,b){return b=this.get(b),this.run(a,function(a){var c,d;return c=b.parentNode,d=b.nextSibling,d?c.insertBefore(a,d):c.appendChild(a),a})},replace:function(a,b,c){var d=this;return d.run(b,function(b){return q(b,"array")&&(a=a.cloneNode(!0)),c&&p(r(b.childNodes),function(b){a.appendChild(b)}),b.parentNode.replaceChild(a,b)})},rename:function(a,b){var c,d=this;return a.nodeName!=b.toUpperCase()&&(c=d.create(b),p(d.getAttribs(a),function(b){d.setAttrib(c,b.nodeName,d.getAttrib(a,b.nodeName))}),d.replace(c,a,1)),c||a},findCommonAncestor:function(a,b){for(var c,d=a;d;){for(c=b;c&&d!=c;)c=c.parentNode;if(d==c)break;d=d.parentNode}return!d&&a.ownerDocument?a.ownerDocument.documentElement:d},toHex:function(a){return this.styles.toHex(k.trim(a))},run:function(a,b,c){var d,e=this;return"string"==typeof a&&(a=e.get(a)),!!a&&(c=c||this,a.nodeType||!a.length&&0!==a.length?b.call(c,a):(d=[],p(a,function(a,f){a&&("string"==typeof a&&(a=e.get(a)),d.push(b.call(c,a,f)))}),d))},getAttribs:function(a){var b;if(a=this.get(a),!a)return[];if(t){if(b=[],"OBJECT"==a.nodeName)return a.attributes;"OPTION"===a.nodeName&&this.getAttrib(a,"selected")&&b.push({specified:1,nodeName:"selected"});var c=/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi;return a.cloneNode(!1).outerHTML.replace(c,"").replace(/[\w:\-]+/gi,function(a){b.push({specified:1,nodeName:a})}),b}return a.attributes},isEmpty:function(a,b){var c,d,e,g,h,i,j=this,k=0;if(a=a.firstChild){h=new f(a,a.parentNode),b=b||(j.schema?j.schema.getNonEmptyElements():null),g=j.schema?j.schema.getWhiteSpaceElements():{};do{if(e=a.nodeType,1===e){var l=a.getAttribute("data-mce-bogus");if(l){a=h.next("all"===l);continue}if(i=a.nodeName.toLowerCase(),b&&b[i]){if("br"===i){k++,a=h.next();continue}return!1}for(d=j.getAttribs(a),c=d.length;c--;)if(i=d[c].nodeName,"name"===i||"data-mce-bookmark"===i)return!1}if(8==e)return!1;if(3===e&&!v.test(a.nodeValue))return!1;if(3===e&&a.parentNode&&g[a.parentNode.nodeName]&&v.test(a.nodeValue))return!1;a=h.next()}while(a)}return k<=1},createRng:function(){var a=this.doc;return a.createRange?a.createRange():new c(this)},nodeIndex:n,split:function(a,b,c){function d(a){function b(a){var b=a.previousSibling&&"SPAN"==a.previousSibling.nodeName,c=a.nextSibling&&"SPAN"==a.nextSibling.nodeName;return b&&c}var c,e=a.childNodes,f=a.nodeType;if(1!=f||"bookmark"!=a.getAttribute("data-mce-type")){for(c=e.length-1;c>=0;c--)d(e[c]);if(9!=f){if(3==f&&a.nodeValue.length>0){var g=s(a.nodeValue).length;if(!h.isBlock(a.parentNode)||g>0||0===g&&b(a))return}else if(1==f&&(e=a.childNodes,1==e.length&&e[0]&&1==e[0].nodeType&&"bookmark"==e[0].getAttribute("data-mce-type")&&a.parentNode.insertBefore(e[0],a),e.length||/^(br|hr|input|img)$/i.test(a.nodeName)))return;h.remove(a)}return a}}var e,f,g,h=this,i=h.createRng();if(a&&b)return i.setStart(a.parentNode,h.nodeIndex(a)),i.setEnd(b.parentNode,h.nodeIndex(b)),e=i.extractContents(),i=h.createRng(),i.setStart(b.parentNode,h.nodeIndex(b)+1),i.setEnd(a.parentNode,h.nodeIndex(a)+1),f=i.extractContents(),g=a.parentNode,g.insertBefore(d(e),a),c?g.insertBefore(c,a):g.insertBefore(b,a),g.insertBefore(d(f),a),h.remove(a),c||b},bind:function(a,b,c,d){var e=this;if(k.isArray(a)){for(var f=a.length;f--;)a[f]=e.bind(a[f],b,c,d);return a}return!e.settings.collect||a!==e.doc&&a!==e.win||e.boundEvents.push([a,b,c,d]),e.events.bind(a,b,c,d||e)},unbind:function(a,b,c){var d,e=this;if(k.isArray(a)){for(d=a.length;d--;)a[d]=e.unbind(a[d],b,c);return a}if(e.boundEvents&&(a===e.doc||a===e.win))for(d=e.boundEvents.length;d--;){var f=e.boundEvents[d];a!=f[0]||b&&b!=f[1]||c&&c!=f[2]||this.events.unbind(f[0],f[1],f[2])}return this.events.unbind(a,b,c)},fire:function(a,b,c){return this.events.fire(a,b,c)},getContentEditable:function(a){var b;return a&&1==a.nodeType?(b=a.getAttribute("data-mce-contenteditable"),b&&"inherit"!==b?b:"inherit"!==a.contentEditable?a.contentEditable:null):null},getContentEditableParent:function(a){for(var b=this.getRoot(),c=null;a&&a!==b&&(c=this.getContentEditable(a),null===c);a=a.parentNode);return c},destroy:function(){var a=this;if(a.boundEvents){for(var b=a.boundEvents.length;b--;){var c=a.boundEvents[b];this.events.unbind(c[0],c[1],c[2])}a.boundEvents=null}d.setDocument&&d.setDocument(),a.win=a.doc=a.root=a.events=a.frag=null},isChildOf:function(a,b){for(;a;){if(b===a)return!0;a=a.parentNode}return!1},dumpRng:function(a){return"startContainer: "+a.startContainer.nodeName+", startOffset: "+a.startOffset+", endContainer: "+a.endContainer.nodeName+", endOffset: "+a.endOffset},_findSib:function(a,b,c){var d=this,e=b;if(a)for("string"==typeof e&&(e=function(a){return d.is(a,b)}),a=a[c];a;a=a[c])if(e(a))return a;return null}},o.DOM=new o(document),o.nodeIndex=n,o}),g("f",["e","9"],function(a,b){function c(){function a(a,c,e){function f(){k.remove(j),i&&(i.onreadystatechange=i.onload=i=null),c()}function h(){g(e)?e():"undefined"!=typeof console&&console.log&&console.log("Failed to load script: "+a)}var i,j,k=d;j=k.uniqueId(),i=document.createElement("script"),i.id=j,i.type="text/javascript",i.src=b._addCacheSuffix(a),"onreadystatechange"in i?i.onreadystatechange=function(){/loaded|complete/.test(i.readyState)&&f()}:i.onload=f,i.onerror=h,(document.getElementsByTagName("head")[0]||document.body).appendChild(i)}var c,h=0,i=1,j=2,k=3,l={},m=[],n={},o=[],p=0;this.isDone=function(a){return l[a]==j},this.markDone=function(a){l[a]=j},this.add=this.load=function(a,b,d,e){var f=l[a];f==c&&(m.push(a),l[a]=h),b&&(n[a]||(n[a]=[]),n[a].push({success:b,failure:e,scope:d||this}))},this.remove=function(a){delete l[a],delete n[a]},this.loadQueue=function(a,b,c){this.loadScripts(m,a,b,c)},this.loadScripts=function(b,d,h,m){function q(a,b){e(n[b],function(b){g(b[a])&&b[a].call(b.scope)}),n[b]=c}var r,s=[];o.push({success:d,failure:m,scope:h||this}),(r=function(){var c=f(b);b.length=0,e(c,function(b){return l[b]===j?void q("success",b):l[b]===k?void q("failure",b):void(l[b]!==i&&(l[b]=i,p++,a(b,function(){l[b]=j,p--,q("success",b),r()},function(){l[b]=k,p--,s.push(b),q("failure",b),r()})))}),p||(e(o,function(a){0===s.length?g(a.success)&&a.success.call(a.scope):g(a.failure)&&a.failure.call(a.scope,s)}),o.length=0)})()}}var d=a.DOM,e=b.each,f=b.grep,g=function(a){return"function"==typeof a};return c.ScriptLoader=new c,c}),g("g",["f","9"],function(a,b){function c(){var a=this;a.items=[],a.urls={},a.lookup={}}var d=b.each;return c.prototype={get:function(a){if(this.lookup[a])return this.lookup[a].instance},dependencies:function(a){var b;return this.lookup[a]&&(b=this.lookup[a].dependencies),b||[]},requireLangPack:function(b,d){var e=c.language;if(e&&c.languageLoad!==!1){if(d)if(d=","+d+",",d.indexOf(","+e.substr(0,2)+",")!=-1)e=e.substr(0,2);else if(d.indexOf(","+e+",")==-1)return;a.ScriptLoader.add(this.urls[b]+"/langs/"+e+".js")}},add:function(a,b,c){return this.items.push(b),this.lookup[a]={instance:b,dependencies:c},b},remove:function(a){delete this.urls[a],delete this.lookup[a]},createUrl:function(a,b){return"object"==typeof b?b:{prefix:a.prefix,resource:b,suffix:a.suffix}},addComponents:function(b,c){var e=this.urls[b];d(c,function(b){a.ScriptLoader.add(e+"/"+b)})},load:function(b,e,f,g,h){function i(){var c=j.dependencies(b);d(c,function(a){var b=j.createUrl(e,a);j.load(b.resource,b,void 0,void 0)}),f&&(g?f.call(g):f.call(a))}var j=this,k=e;j.urls[b]||("object"==typeof e&&(k=e.prefix+e.resource+e.suffix),0!==k.indexOf("/")&&k.indexOf("://")==-1&&(k=c.baseURL+"/"+k),j.urls[b]=k.substring(0,k.lastIndexOf("/")),j.lookup[b]?i():a.ScriptLoader.add(k,i,g,h))}},c.PluginManager=new c,c.ThemeManager=new c,c}),g("1j",[],function(){function a(a){return function(b){return!!b&&b.nodeType==a}}function b(a){return a=a.toLowerCase().split(" "),function(b){var c,d;if(b&&b.nodeType)for(d=b.nodeName.toLowerCase(),c=0;c0&&d.charAt(0)!==b.ZWSP&&c.insertData(0,b.ZWSP),c}return null},q=function(c){if(a.isText(c)){var d=c.data;return d.length>0&&d.charAt(d.length-1)!==b.ZWSP&&c.insertData(d.length,b.ZWSP),c}return null},r=function(c){return c&&a.isText(c.container())&&c.container().data.charAt(c.offset())===b.ZWSP},s=function(c){return c&&a.isText(c.container())&&c.container().data.charAt(c.offset()-1)===b.ZWSP};return{isCaretContainer:e,isCaretContainerBlock:c,isCaretContainerInline:d,showCaretContainerBlock:l,insertInline:f,prependInline:p,appendInline:q,isBeforeInline:r, +isAfterInline:s,insertBlock:h,hasContent:o,startsWithCaretContainer:i,endsWithCaretContainer:j}}),g("h",["9","c","1j","1h","1k"],function(a,b,c,d,e){function f(a){return q(a)||r(a)}function g(a,b){var c=a.childNodes;return b--,b>c.length-1?b=c.length-1:b<0&&(b=0),c[b]||a}function h(a,b,c){for(;a&&a!==b;){if(c(a))return a;a=a.parentNode}return null}function i(a,b,c){return null!==h(a,b,c)}function j(a,b,c){return i(a,b,function(a){return a.nodeName===c})}function k(a){return"_mce_caret"===a.id}function l(a,b){return s(a)&&i(a,b,k)===!1}function m(a){this.walk=function(b,c){function d(a){var b;return b=a[0],3===b.nodeType&&b===q&&r>=b.nodeValue.length&&a.splice(0,1),b=a[a.length-1],0===t&&a.length>0&&b===s&&3===b.nodeType&&a.splice(a.length-1,1),a}function e(a,b,c){for(var d=[];a&&a!=c;a=a[b])d.push(a);return d}function f(a,b){do{if(a.parentNode==b)return a;a=a.parentNode}while(a)}function h(a,b,f){var g=f?"nextSibling":"previousSibling";for(l=a,m=l.parentNode;l&&l!=b;l=m)m=l.parentNode,n=e(l==a?l:l[g],g),n.length&&(f||n.reverse(),c(d(n)))}var i,j,k,l,m,n,o,q=b.startContainer,r=b.startOffset,s=b.endContainer,t=b.endOffset;if(o=a.select("td[data-mce-selected],th[data-mce-selected]"),o.length>0)return void p(o,function(a){c([a])});if(1==q.nodeType&&q.hasChildNodes()&&(q=q.childNodes[r]),1==s.nodeType&&s.hasChildNodes()&&(s=g(s,t)),q==s)return c(d([q]));for(i=a.findCommonAncestor(q,s),l=q;l;l=l.parentNode){if(l===s)return h(q,i,!0);if(l===i)break}for(l=s;l;l=l.parentNode){if(l===q)return h(s,i);if(l===i)break}j=f(q,i)||q,k=f(s,i)||s,h(q,j,!0),n=e(j==q?j:j.nextSibling,"nextSibling",k==s?k.nextSibling:k),n.length&&c(d(n)),h(s,k)},this.split=function(a){function b(a,b){return a.splitText(b)}var c=a.startContainer,d=a.startOffset,e=a.endContainer,f=a.endOffset;return c==e&&3==c.nodeType?d>0&&dd?(f-=d,c=e=b(e,f).previousSibling,f=e.nodeValue.length,d=0):f=0):(3==c.nodeType&&d>0&&d0&&f0)return void(j(q,w,"A")===!1&&(n=q,o=c?q.nodeValue.length:0,f=!0));if(a.isBlock(q)||t[q.nodeName.toLowerCase()])return;h=q}e&&h&&(n=h,f=!0,o=0)}var n,o,p,q,t,u,v,w=a.getRoot();if(n=c[(d?"start":"end")+"Container"],o=c[(d?"start":"end")+"Offset"],v=1==n.nodeType&&o===n.childNodes.length,t=a.schema.getNonEmptyElements(),u=d,!s(n)){if(1==n.nodeType&&o>n.childNodes.length-1&&(u=!1),9===n.nodeType&&(n=a.getRoot(),o=0),n===w){if(u&&(q=n.childNodes[o>0?o-1:0])){if(s(q))return;if(t[q.nodeName]||"TABLE"==q.nodeName)return}if(n.hasChildNodes()){if(o=Math.min(!u&&o>0?o-1:o,n.childNodes.length-1),n=n.childNodes[o],o=0,!e&&n===w.lastChild&&"TABLE"===n.nodeName)return;if(i(n)||s(n))return;if(n.hasChildNodes()&&!/TABLE/.test(n.nodeName)){q=n,p=new b(n,w);do{if(r(q)||s(q)){f=!1;break}if(3===q.nodeType&&q.nodeValue.length>0){o=u?0:q.nodeValue.length,n=q,f=!0;break}if(t[q.nodeName.toLowerCase()]&&!g(q)){o=a.nodeIndex(q),n=q.parentNode,"IMG"!=q.nodeName||u||o++,f=!0;break}}while(q=u?p.next():p.prev())}}}e&&(3===n.nodeType&&0===o&&m(!0),1===n.nodeType&&(q=n.childNodes[o],q||(q=n.childNodes[o-1]),!q||"BR"!==q.nodeName||k(q,"A")||h(q)||h(q,!0)||m(!0,q))),u&&!e&&3===n.nodeType&&o===n.nodeValue.length&&m(!1),f&&c["set"+(d?"Start":"End")](n,o)}}var e,f=!1;return e=c.collapsed,d(!0),e||d(),f&&e&&c.collapse(!0),f}}function n(b,c,d){var e,f,g;if(e=d.elementFromPoint(b,c),f=d.body.createTextRange(),e&&"HTML"!=e.tagName||(e=d.body),f.moveToElementText(e),g=a.toArray(f.getClientRects()),g=g.sort(function(a,b){return a=Math.abs(Math.max(a.top-c,a.bottom-c)),b=Math.abs(Math.max(b.top-c,b.bottom-c)),a-b}),g.length>0){c=(g[0].bottom+g[0].top)/2;try{return f.moveToPoint(b,c),f.collapse(!0),f}catch(a){}}return null}function o(a,b){var c=a&&a.parentElement?a.parentElement():null;return r(h(c,b,f))?null:a}var p=a.each,q=c.isContentEditableTrue,r=c.isContentEditableFalse,s=e.isCaretContainer;return m.compareRanges=function(a,b){if(a&&b){if(!a.item&&!a.duplicate)return a.startContainer==b.startContainer&&a.startOffset==b.startOffset;if(a.item&&b.item&&a.item(0)===b.item(0))return!0;if(a.isEqual&&b.isEqual&&b.isEqual(a))return!0}return!1},m.getCaretRangeFromPoint=function(a,b,c){var d,e;if(c.caretPositionFromPoint)e=c.caretPositionFromPoint(a,b),d=c.createRange(),d.setStart(e.offsetNode,e.offset),d.collapse(!0);else if(c.caretRangeFromPoint)d=c.caretRangeFromPoint(a,b);else if(c.body.createTextRange){d=c.body.createTextRange();try{d.moveToPoint(a,b),d.collapse(!0)}catch(e){d=n(a,b,c)}return o(d,c.body)}return d},m.getSelectedNode=function(a){var b=a.startContainer,c=a.startOffset;return b.hasChildNodes()&&a.endOffset==c+1?b.childNodes[c]:null},m.getNode=function(a,b){return 1==a.nodeType&&a.hasChildNodes()&&(b>=a.childNodes.length&&(b=a.childNodes.length-1),a=a.childNodes[b]),a},m}),g("i",[],function(){function a(a,b,c){var d,e,f=c?"lastChild":"firstChild",g=c?"prev":"next";if(a[f])return a[f];if(a!==b){if(d=a[g])return d;for(e=a.parent;e&&e!==b;e=e.parent)if(d=e[g])return d}}function b(a,b){this.name=a,this.type=b,1===b&&(this.attributes=[],this.attributes.map={})}var c=/^[ \t\r\n]*$/,d={"#text":3,"#comment":8,"#cdata":4,"#pi":7,"#doctype":10,"#document-fragment":11};return b.prototype={replace:function(a){var b=this;return a.parent&&a.remove(),b.insert(a,b),b.remove(),b},attr:function(a,b){var c,d,e,f=this;if("string"!=typeof a){for(d in a)f.attr(d,a[d]);return f}if(c=f.attributes){if(b!==e){if(null===b){if(a in c.map)for(delete c.map[a],d=c.length;d--;)if(c[d].name===a)return c=c.splice(d,1),f;return f}if(a in c.map){for(d=c.length;d--;)if(c[d].name===a){c[d].value=b;break}}else c.push({name:a,value:b});return c.map[a]=b,f}return c.map[a]}},clone:function(){var a,c,d,e,f,g=this,h=new b(g.name,g.type);if(d=g.attributes){for(f=[],f.map={},a=0,c=d.length;a]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\/|\s+)>/g,f.lastIndex=d=c;e=f.exec(b);){if(d=f.lastIndex,"/"===e[1])h--;else if(!e[1]){if(e[2]in g)continue;h++}if(0===h)break}return d}function e(e,i){function j(){}var k=this;e=e||{},k.schema=i=i||new a,e.fix_self_closing!==!1&&(e.fix_self_closing=!0),f("comment cdata text start end pi doctype".split(" "),function(a){a&&(k[a]=e[a]||j)}),k.parse=function(a){function f(a){var b,c;for(b=Q.length;b--&&Q[b].name!==a;);if(b>=0){for(c=Q.length-1;c>=b;c--)a=Q[c],a.valid&&O.end(a.name);Q.length=b}}function j(a,b,c,d,f){var h,i,j=/[\s\u0000-\u001F]+/g;if(b=b.toLowerCase(),c=b in u?b:S(c||d||f||""),w&&!r&&g(b)===!1){if(h=B[b],!h&&C){for(i=C.length;i--&&(h=C[i],!h.pattern.test(b)););i===-1&&(h=null)}if(!h)return;if(h.validValues&&!(c in h.validValues))return}if(T[b]&&!e.allow_script_urls){var k=c.replace(j,"");try{k=decodeURIComponent(k)}catch(a){k=unescape(k)}if(U.test(k))return;if(!e.allow_html_data_urls&&V.test(k)&&!/^data:image\//i.test(k))return}r&&(b in T||0===b.indexOf("on"))||(n.map[b]=c,n.push({name:b,value:c}))}var k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O=this,P=0,Q=[],R=0,S=b.decode,T=c.makeMap("src,href,data,background,formaction,poster"),U=/((java|vb)script|mhtml):/i,V=/^data:/i;for(J=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)>)|(?:([A-Za-z][A-Za-z0-9\\-_\\:\\.]*)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/|\\s+)>))","g"),K=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:[^\"])*)\")|(?:\'((?:[^\'])*)\')|([^>\s]+)))?/g,t=i.getShortEndedElements(),I=e.self_closing_elements||i.getSelfClosingElements(),u=i.getBoolAttrs(),w=e.validate,s=e.remove_internals,N=e.fix_self_closing,L=i.getSpecialElements(),G=a+">";k=J.exec(G);){if(Pa.length){O.text(S(a.substr(k.index))),P=k.index+k[0].length;continue}if(l=l.toLowerCase(),":"===l.charAt(0)&&(l=l.substr(1)),v=l in t,N&&I[l]&&Q.length>0&&Q[Q.length-1].name===l&&f(l),!w||(x=i.getElementRule(l))){if(y=!0,w&&(B=x.attributes,C=x.attributePatterns),(A=k[8])?(r=A.indexOf("data-mce-type")!==-1,r&&s&&(y=!1),n=[],n.map={},A.replace(K,j)):(n=[],n.map={}),w&&!r){if(D=x.attributesRequired,E=x.attributesDefault,F=x.attributesForced,H=x.removeEmptyAttrs,H&&!n.length&&(y=!1),F)for(o=F.length;o--;)z=F[o],q=z.name,M=z.value,"{$uid}"===M&&(M="mce_"+R++),n.map[q]=M,n.push({name:q,value:M});if(E)for(o=E.length;o--;)z=E[o],q=z.name,q in n.map||(M=z.value,"{$uid}"===M&&(M="mce_"+R++),n.map[q]=M,n.push({name:q,value:M}));if(D){for(o=D.length;o--&&!(D[o]in n.map););o===-1&&(y=!1)}if(z=n.map["data-mce-bogus"]){if("all"===z){P=d(i,a,J.lastIndex),J.lastIndex=P;continue}y=!1}}y&&O.start(l,n,v)}else y=!1;if(m=L[l]){m.lastIndex=P=k.index+k[0].length,(k=m.exec(a))?(y&&(p=a.substr(P,k.index-P)),P=k.index+k[0].length):(p=a.substr(P),P=a.length),y&&(p.length>0&&O.text(p,!0),O.end(l)),J.lastIndex=P;continue}v||(A&&A.indexOf("/")==A.length-1?y&&O.end(l):Q.push({name:l,valid:y}))}else(l=k[1])?(">"===l.charAt(0)&&(l=" "+l),e.allow_conditional_comments||"[if"!==l.substr(0,3).toLowerCase()||(l=" "+l),O.comment(l)):(l=k[2])?O.cdata(h(l)):(l=k[3])?O.doctype(l):(l=k[4])&&O.pi(l,k[5]);P=k.index+k[0].length}for(P=0;o--)l=Q[o],l.valid&&O.end(l.name)}}var f=c.each,g=function(a){return 0===a.indexOf("data-")||0===a.indexOf("aria-")},h=function(a){return a.replace(//g,"")};return e.findEndTag=d,e}),g("l",["i","j","k","9"],function(a,b,c,d){var e=d.makeMap,f=d.each,g=d.explode,h=d.extend,i=function(b,c){b.padd_empty_with_br?c.empty().append(new a("br","1")).shortEnded=!0:c.empty().append(new a("#text","3")).value="\xa0"},j=function(a,b){return a&&a.firstChild===a.lastChild&&a.firstChild.name===b};return function(k,l){function m(b){var c,d,f,g,h,i,k,m,o,p,q,r,s,t,u,v;for(r=e("tr,td,th,tbody,thead,tfoot,table"),p=l.getNonEmptyElements(),q=l.getWhiteSpaceElements(),s=l.getTextBlockElements(),t=l.getSpecialElements(),c=0;c1){for(g.reverse(),h=i=n.filterNode(g[0].clone()),o=0;o0)return void(b.value=d);if(c=b.next){if(3==c.type&&c.value.length){b=b.prev;continue}if(!f[c.name]&&"script"!=c.name&&"style"!=c.name){b=b.prev;continue}}e=b.prev,b.remove(),b=e}}function n(a){var b,c={};for(b in a)"li"!==b&&"p"!=b&&(c[b]=a[b]);return c}var s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=[];if(d=d||{},q={},r={},D=h(e("script,style,head,html,body,title,meta,param"),l.getBlockElements()),L=l.getNonEmptyElements(),K=l.children,C=k.validate,M="forced_root_block"in d?d.forced_root_block:k.forced_root_block,J=l.getWhiteSpaceElements(),E=/^[ \t\r\n]+/,G=/[ \t\r\n]+$/,H=/[ \t\r\n]+/g,I=/^[ \t\r\n]+$/,s=new c({validate:C,allow_script_urls:k.allow_script_urls,allow_conditional_comments:k.allow_conditional_comments,self_closing_elements:n(l.getSelfClosingElements()),cdata:function(a){u.append(g("#cdata",4)).value=a},text:function(a,b){var c;F||(a=a.replace(H," "),u.lastChild&&D[u.lastChild.name]&&(a=a.replace(E,""))),0!==a.length&&(c=g("#text",3),c.raw=!!b,u.append(c).value=a)},comment:function(a){u.append(g("#comment",8)).value=a},pi:function(a,b){u.append(g(a,7)).value=b,j(u)},doctype:function(a){var b;b=u.append(g("#doctype",10)),b.value=a,j(u)},start:function(a,b,c){var d,e,f,h,i;if(f=C?l.getElementRule(a):{}){for(d=g(f.outputName||a,1),d.attributes=b,d.shortEnded=c,u.append(d),i=K[u.name],i&&K[d.name]&&!i[d.name]&&N.push(d),e=p.length;e--;)h=p[e].name,h in b.map&&(A=r[h],A?A.push(d):r[h]=[d]);D[a]&&j(d),c||(u=d),!F&&J[a]&&(F=!0)}},end:function(a){var b,c,d,e,f;if(c=C?l.getElementRule(a):{}){if(D[a]&&!F){if(b=u.firstChild,b&&3===b.type)if(d=b.value.replace(E,""),d.length>0)b.value=d,b=b.next;else for(e=b.next,b.remove(),b=e;b&&3===b.type;)d=b.value,e=b.next,(0===d.length||I.test(d))&&(b.remove(),b=e),b=e;if(b=u.lastChild,b&&3===b.type)if(d=b.value.replace(G,""),d.length>0)b.value=d,b=b.prev;else for(e=b.prev,b.remove(),b=e;b&&3===b.type;)d=b.value,e=b.prev,(0===d.length||I.test(d))&&(b.remove(),b=e),b=e}if(F&&J[a]&&(F=!1),(c.removeEmpty||c.paddEmpty)&&u.isEmpty(L,J))if(c.paddEmpty)i(k,u);else if(!u.attributes.map.name&&!u.attributes.map.id)return f=u.parent,D[u.name]?u.empty().remove():u.unwrap(),void(u=f);u=u.parent}}},l),t=u=new a(d.context||k.root_name,11),s.parse(b),C&&N.length&&(d.context?d.invalid=!0:m(N)),M&&("body"==t.name||d.isRootContent)&&f(),!d.invalid){for(B in q){for(A=o[B],v=q[B],y=v.length;y--;)v[y].parent||v.splice(y,1);for(w=0,x=A.length;w0});return b.concat(["noopener"]).sort().join(" ")},f=function(a){var b=a?d.trim(a):"";return/\b(noopener)\b/g.test(b)?b:e(b)};if(!k.allow_unsafe_link_target)for(;c--;)b=a[c],"a"===b.name&&"_blank"===b.attr("target")&&b.attr("rel",f(b.attr("rel")))}),k.allow_html_in_named_anchor||n.addAttributeFilter("id,name",function(a){for(var b,c,d,e,f=a.length;f--;)if(e=a[f],"a"===e.name&&e.firstChild&&!e.attr("href")){d=e.parent,b=e.lastChild;do c=b.prev,d.insert(b,e),b=c;while(b)}}),k.fix_list_elements&&n.addNodeFilter("ul,ol",function(b){for(var c,d,e=b.length;e--;)if(c=b[e],d=c.parent,"ul"===d.name||"ol"===d.name)if(c.prev&&"li"===c.prev.name)c.prev.append(c);else{var f=new a("li",1);f.attr("style","list-style-type: none"),c.wrap(f)}}),k.validate&&l.getValidClasses()&&n.addAttributeFilter("class",function(a){for(var b,c,d,e,f,g,h,i=a.length,j=l.getValidClasses();i--;){for(b=a[i],c=b.attr("class").split(" "),f="",d=0;d0&&(m=i[i.length-1],m.length>0&&"\n"!==m&&i.push("\n")),i.push("<",a),b)for(j=0,k=b.length;j0&&(m=i[i.length-1],m.length>0&&"\n"!==m&&i.push("\n"))},end:function(a){var b;i.push(""),d&&f[a]&&i.length>0&&(b=i[i.length-1],b.length>0&&"\n"!==b&&i.push("\n"))},text:function(a,b){a.length>0&&(i[i.length]=b?a:g(a))},cdata:function(a){i.push("")},comment:function(a){i.push("")},pi:function(a,b){b?i.push(""):i.push(""),d&&i.push("\n")},doctype:function(a){i.push("",d?"\n":"")},reset:function(){i.length=0},getContent:function(){return i.join("").replace(/\n$/,"")}}}}),g("n",["m","j"],function(a,b){return function(c,d){var e=this,f=new a(c);c=c||{},c.validate=!("validate"in c)||c.validate,e.schema=d=d||new b,e.writer=f,e.serialize=function(a){function b(a){var c,h,i,j,k,l,m,n,o,p=e[a.type];if(p)p(a);else{if(c=a.name,h=a.shortEnded,i=a.attributes,g&&i&&i.length>1&&(l=[],l.map={},o=d.getElementRule(a.name))){for(m=0,n=o.attributesOrder.length;m]+data-mce-bogus[^>]+>[\u200b\ufeff]+<\\/span>","\\s?("+v.join("|")+')="[^"]+"'].join("|"),"gi");return a=j.trim(a.replace(b,""))}function p(a){var b,d,e,g,h,i=a,j=/<(\w+) [^>]*data-mce-bogus="all"[^>]*>/g,k=f.schema;for(i=o(i),h=k.getShortEndedElements();g=j.exec(i);)d=j.lastIndex,e=g[0].length,b=h[g[1]]?d:c.findEndTag(k,i,d),i=i.substring(0,d-e)+i.substring(b),j.lastIndex=d-e;return i}function q(){return p(f.getBody().innerHTML)}function r(a){i.inArray(v,a)===-1&&(u.addAttributeFilter(a,function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)}),v.push(a))}var s,t,u,v=["data-mce-selected"];return f&&(s=f.dom,t=f.schema),s=s||n,t=t||new g(a),a.entity_encoding=a.entity_encoding||"named",a.remove_trailing_brs=!("remove_trailing_brs"in a)||a.remove_trailing_brs,u=new b(a,t),u.addAttributeFilter("data-mce-tabindex",function(a,b){for(var c,d=a.length;d--;)c=a[d],c.attr("tabindex",c.attributes.map["data-mce-tabindex"]),c.attr(b,null)}),u.addAttributeFilter("src,href,style",function(b,c){for(var d,e,f,g=b.length,h="data-mce-"+c,i=a.url_converter,j=a.url_converter_scope;g--;)d=b[g],e=d.attributes.map[h],e!==f?(d.attr(c,e.length>0?e:null),d.attr(h,null)):(e=d.attributes.map[c],"style"===c?e=s.serializeStyle(s.parseStyle(e),d.name):i&&(e=i.call(j,e,c,d.name)),d.attr(c,e.length>0?e:null))}),u.addAttributeFilter("class",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("class"),c&&(c=b.attr("class").replace(/(?:^|\s)mce-item-\w+(?!\S)/g,""),b.attr("class",c.length>0?c:null))}),u.addAttributeFilter("data-mce-type",function(a,b,c){for(var d,e=a.length;e--;)d=a[e],"bookmark"!==d.attributes.map["data-mce-type"]||c.cleanup||d.remove()}),u.addNodeFilter("noscript",function(a){for(var b,c=a.length;c--;)b=a[c].firstChild,b&&(b.value=d.decode(b.value))}),u.addNodeFilter("script,style",function(a,b){function c(a){return a.replace(/()/g,"\n").replace(/^[\r\n]*|[\r\n]*$/g,"").replace(/^\s*(()?|\s*\/\/\s*\]\]>(-->)?|\/\/\s*(-->)?|\]\]>|\/\*\s*-->\s*\*\/|\s*-->\s*)\s*$/g,"")}for(var d,e,f,g=a.length;g--;)d=a[g],e=d.firstChild?d.firstChild.value:"","script"===b?(f=d.attr("type"),f&&d.attr("type","mce-no/type"==f?null:f.replace(/^mce\-/,"")),e.length>0&&(d.firstChild.value="// ")):e.length>0&&(d.firstChild.value="")}),u.addNodeFilter("#comment",function(a){for(var b,c=a.length;c--;)b=a[c],0===b.value.indexOf("[CDATA[")?(b.name="#cdata",b.type=4,b.value=b.value.replace(/^\[CDATA\[|\]\]$/g,"")):0===b.value.indexOf("mce:protected ")&&(b.name="#text",b.type=3,b.raw=!0,b.value=unescape(b.value).substr(14))}),u.addNodeFilter("xml:namespace,input",function(a,b){for(var c,d=a.length;d--;)c=a[d],7===c.type?c.remove():1===c.type&&("input"!==b||"type"in c.attributes.map||c.attr("type","text"))}),u.addAttributeFilter("data-mce-src,data-mce-href,data-mce-style,data-mce-selected,data-mce-expando,data-mce-type,data-mce-resize",function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)}),{schema:t,addNodeFilter:u.addNodeFilter,addAttributeFilter:u.addAttributeFilter,serialize:function(b,c){var d,f,g,i,n,o,p=this;return h.ie&&s.select("script,style,select,map").length>0?(n=b.innerHTML,b=b.cloneNode(!1),s.setHTML(b,n)):b=b.cloneNode(!0),d=document.implementation,d.createHTMLDocument&&(f=d.createHTMLDocument(""),l("BODY"==b.nodeName?b.childNodes:[b],function(a){f.body.appendChild(f.importNode(a,!0))}),b="BODY"!=b.nodeName?f.body.firstChild:f.body,g=s.doc,s.doc=f),c=c||{},c.format=c.format||"html",c.selection&&(c.forced_root_block=""),c.no_events||(c.node=b,p.onPreProcess(c)),o=u.parse(m(c.getInner?b.innerHTML:s.getOuterHTML(b)),c),k(o),i=new e(a,t),c.content=i.serialize(o),c.cleanup||(c.content=j.trim(c.content),c.content=c.content.replace(/\uFEFF/g,"")),c.no_events||p.onPostProcess(c),g&&(s.doc=g),c.node=null,c.content},addRules:function(a){t.addValidElements(a)},setRules:function(a){t.setValidElements(a)},onPreProcess:function(a){f&&f.fire("PreProcess",a)},onPostProcess:function(a){f&&f.fire("PostProcess",a)},addTempAttr:r,trimHtml:o,getTrimmedContent:q,trimContent:p}}}),g("p",["6"],function(a){return{BACKSPACE:8,DELETE:46,DOWN:40,ENTER:13,LEFT:37,RIGHT:39,SPACEBAR:32,TAB:9,UP:38,modifierPressed:function(a){return a.shiftKey||a.ctrlKey||a.altKey||this.metaKeyPressed(a)},metaKeyPressed:function(b){return a.mac?b.metaKey:b.ctrlKey&&!b.altKey}}}),g("43",[],function(){function a(a){return a?{left:k(a.left),top:k(a.top),bottom:k(a.bottom),right:k(a.right),width:k(a.width),height:k(a.height)}:{left:0,top:0,bottom:0,right:0,width:0,height:0}}function b(b,c){return b=a(b),c?b.right=b.left:(b.left=b.left+b.width,b.right=b.left),b.width=0,b}function c(a,b){return a.left===b.left&&a.top===b.top&&a.bottom===b.bottom&&a.right===b.right}function d(a,b,c){return a>=0&&a<=Math.min(b.height,c.height)/2}function e(a,b){return a.bottom-a.height/2b.bottom)&&d(b.top-a.bottom,a,b)}function f(a,b){return a.top>b.bottom||!(a.bottomb.right}function i(a,b){return e(a,b)?-1:f(a,b)?1:g(a,b)?-1:h(a,b)?1:0}function j(a,b,c){return b>=a.left&&b<=a.right&&c>=a.top&&c<=a.bottom}var k=Math.round;return{clone:a,collapse:b,isEqual:c,isAbove:e,isBelow:f,isLeft:g,isRight:h,compare:i,containsXY:j}}),g("1n",["3x","43"],function(a,b){var c=function(c,d,e){return!e.collapsed&&a.foldl(e.getClientRects(),function(a,e){return a||b.containsXY(e,c,d)},!1)};return{isXYWithinRange:c}}),g("q",["1m","1j","1n","6","5","9","p"],function(a,b,c,d,e,f,g){function h(a,b){for(;b&&b!=a;){if(j(b)||i(b))return b;b=b.parentNode}return null}var i=b.isContentEditableFalse,j=b.isContentEditableTrue,k=function(a){return a&&"IMG"===a.nodeName},l=function(a,b){return k(a.target)&&!c.isXYWithinRange(a.clientX,a.clientY,b)},m=function(a,b){var c=b.target;l(b,a.selection.getRng())&&!b.isDefaultPrevented()&&(b.preventDefault(),a.selection.select(c))};return function(b,c){function j(a){var b=c.settings.object_resizing;return b!==!1&&!d.iOS&&("string"!=typeof b&&(b="table,img,div"),"false"!==a.getAttribute("data-mce-resize")&&(a!=c.getBody()&&c.dom.is(a,b)))}function k(a){var b,d,e,f,h;b=a.screenX-H,d=a.screenY-I,P=b*F[2]+L,Q=d*F[3]+M,P=P<5?5:P,Q=Q<5?5:Q,e="IMG"==B.nodeName&&c.settings.resize_img_proportional!==!1?!g.modifierPressed(a):g.modifierPressed(a)||"IMG"==B.nodeName&&F[2]*F[3]!==0,e&&(Y(b)>Y(d)?(Q=Z(P*N),P=Z(Q/N)):(P=Z(Q/N),Q=Z(P*N))),T.setStyles(C,{width:P,height:Q}),f=F.startPos.x+b,h=F.startPos.y+d,f=f>0?f:0,h=h>0?h:0,T.setStyles(D,{left:f,top:h,display:"block"}),D.innerHTML=P+" × "+Q,F[2]<0&&C.clientWidth<=P&&T.setStyle(C,"left",J+(L-P)),F[3]<0&&C.clientHeight<=Q&&T.setStyle(C,"top",K+(M-Q)),b=$.scrollWidth-R,d=$.scrollHeight-S,b+d!==0&&T.setStyles(D,{left:f-b,top:h-d}),O||(c.fire("ObjectResizeStart",{target:B,width:L,height:M}),O=!0)}function l(){function a(a,b){b&&(B.style[a]||!c.schema.isValid(B.nodeName.toLowerCase(),a)?T.setStyle(B,a,b):T.setAttrib(B,a,b))}O=!1,a("width",P),a("height",Q),T.unbind(V,"mousemove",k),T.unbind(V,"mouseup",l),W!=V&&(T.unbind(W,"mousemove",k),T.unbind(W,"mouseup",l)),T.remove(C),T.remove(D),X&&"TABLE"!=B.nodeName||n(B),c.fire("ObjectResized",{target:B,width:P,height:Q}),T.setAttrib(B,"style",T.getAttrib(B,"style")),c.nodeChanged()}function n(a,b,e){var f,g,h,i,m;o(),x(),f=T.getPos(a,$),J=f.x,K=f.y,m=a.getBoundingClientRect(),g=m.width||m.right-m.left,h=m.height||m.bottom-m.top,B!=a&&(w(),B=a,P=Q=0),i=c.fire("ObjectSelected",{target:a}),j(a)&&!i.isDefaultPrevented()?U(E,function(a,c){function f(b){H=b.screenX,I=b.screenY,L=B.clientWidth,M=B.clientHeight,N=M/L,F=a,a.startPos={x:g*a[0]+J,y:h*a[1]+K},R=$.scrollWidth,S=$.scrollHeight,C=B.cloneNode(!0),T.addClass(C,"mce-clonedresizable"),T.setAttrib(C,"data-mce-bogus","all"),C.contentEditable=!1,C.unSelectabe=!0,T.setStyles(C,{left:J,top:K,margin:0}),C.removeAttribute("data-mce-selected"),$.appendChild(C),T.bind(V,"mousemove",k),T.bind(V,"mouseup",l),W!=V&&(T.bind(W,"mousemove",k),T.bind(W,"mouseup",l)),D=T.add($,"div",{"class":"mce-resize-helper","data-mce-bogus":"all"},L+" × "+M)}var i;return b?void(c==b&&f(e)):(i=T.get("mceResizeHandle"+c),i&&T.remove(i),i=T.add($,"div",{id:"mceResizeHandle"+c,"data-mce-bogus":"all","class":"mce-resizehandle",unselectable:!0,style:"cursor:"+c+"-resize; margin:0; padding:0"}),d.ie&&(i.contentEditable=!1),T.bind(i,"mousedown",function(a){a.stopImmediatePropagation(),a.preventDefault(),f(a)}),a.elm=i,void T.setStyles(i,{left:g*a[0]+J-i.offsetWidth/2,top:h*a[1]+K-i.offsetHeight/2}))}):o(),B.setAttribute("data-mce-selected","1")}function o(){var a,b;x(),B&&B.removeAttribute("data-mce-selected");for(a in E)b=T.get("mceResizeHandle"+a),b&&(T.unbind(b),T.remove(b))}function p(a){function d(a,b){if(a)do if(a===b)return!0;while(a=a.parentNode)}var e,f;if(!O&&!c.removed)return U(T.select("img[data-mce-selected],hr[data-mce-selected]"),function(a){a.removeAttribute("data-mce-selected")}),f="mousedown"==a.type?a.target:b.getNode(),f=T.$(f).closest(X?"table":"table,img,hr")[0],d(f,$)&&(y(),e=b.getStart(!0),d(e,f)&&d(b.getEnd(!0),f)&&(!X||f!=e&&"IMG"!==e.nodeName))?void n(f):void o()}function q(a,b,c){a&&a.attachEvent&&a.attachEvent("on"+b,c)}function r(a,b,c){a&&a.detachEvent&&a.detachEvent("on"+b,c)}function s(a){var b,d,e,f,g,h,i,j=a.srcElement;b=j.getBoundingClientRect(),h=G.clientX-b.left,i=G.clientY-b.top;for(d in E)if(e=E[d],f=j.offsetWidth*e[0],g=j.offsetHeight*e[1],Y(f-h)<8&&Y(g-i)<8){F=e;break}O=!0,c.fire("ObjectResizeStart",{target:B,width:B.clientWidth,height:B.clientHeight}),c.getDoc().selection.empty(),n(j,d,G)}function t(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function u(a){return i(h(c.getBody(),a))}function v(a){var b=a.srcElement;if(u(b))return void t(a);if(b!=B){if(c.fire("ObjectSelected",{target:b}),w(),0===b.id.indexOf("mceResizeHandle"))return void(a.returnValue=!1);"IMG"!=b.nodeName&&"TABLE"!=b.nodeName||(o(),B=b,q(b,"resizestart",s))}}function w(){r(B,"resizestart",s)}function x(){for(var a in E){var b=E[a];b.elm&&(T.unbind(b.elm),delete b.elm)}}function y(){try{c.getDoc().execCommand("enableObjectResizing",!1,!1); +}catch(a){}}function z(a){var b;if(X){b=V.body.createControlRange();try{return b.addElement(a),b.select(),!0}catch(a){}}}function A(){B=C=null,X&&(w(),r($,"controlselect",v))}var B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T=c.dom,U=f.each,V=c.getDoc(),W=document,X=d.ie&&d.ie<11,Y=Math.abs,Z=Math.round,$=c.getBody();E={nw:[0,0,-1,-1],ne:[1,0,1,-1],se:[1,1,1,1],sw:[0,1,-1,1]};var _=".mce-content-body";return c.contentStyles.push(_+" div.mce-resizehandle {position: absolute;border: 1px solid black;box-sizing: box-sizing;background: #FFF;width: 7px;height: 7px;z-index: 10000}"+_+" .mce-resizehandle:hover {background: #000}"+_+" img[data-mce-selected],"+_+" hr[data-mce-selected] {outline: 1px solid black;resize: none}"+_+" .mce-clonedresizable {position: absolute;"+(d.gecko?"":"outline: 1px dashed black;")+"opacity: .5;filter: alpha(opacity=50);z-index: 10000}"+_+" .mce-resize-helper {background: #555;background: rgba(0,0,0,0.75);border-radius: 3px;border: 1px;color: white;display: none;font-family: sans-serif;font-size: 12px;white-space: nowrap;line-height: 14px;margin: 5px 10px;padding: 5px;position: absolute;z-index: 10001}"),c.on("init",function(){X?(c.on("ObjectResized",function(a){"TABLE"!=a.target.nodeName&&(o(),z(a.target))}),q($,"controlselect",v),c.on("mousedown",function(a){G=a})):(y(),d.ie>=11&&(c.on("mousedown click",function(a){var b=a.target,d=b.nodeName;O||!/^(TABLE|IMG|HR)$/.test(d)||u(b)||(2!==a.button&&c.selection.select(b,"TABLE"==d),"mousedown"==a.type&&c.nodeChanged())}),c.dom.bind($,"mscontrolselect",function(a){function b(a){e.setEditorTimeout(c,function(){c.selection.select(a)})}return u(a.target)?(a.preventDefault(),void b(a.target)):void(/^(TABLE|IMG|HR)$/.test(a.target.nodeName)&&(a.preventDefault(),"IMG"==a.target.tagName&&b(a.target)))})));var b=e.throttle(function(a){c.composing||p(a)});c.on("nodechange ResizeEditor ResizeWindow drop",b),c.on("keyup compositionend",function(a){B&&"TABLE"==B.nodeName&&b(a)}),c.on("hide blur",o),c.on("contextmenu",a.curry(m,c))}),c.on("remove",x),{isResizable:j,showResizeRect:n,hideResizeRect:o,updateResizeRect:p,controlSelect:z,destroy:A}}}),g("1w",[],function(){function a(a){return function(){return a}}function b(a){return function(b){return!a(b)}}function c(a,b){return function(c){return a(b(c))}}function d(){var a=h.call(arguments);return function(b){for(var c=0;c=a.length?a.apply(this,b.slice(1)):function(){var a=b.concat([].slice.call(arguments));return f.apply(this,a)}}function g(){}var h=[].slice;return{constant:a,negate:b,and:e,or:d,curry:f,compose:c,noop:g}}),g("44",["1j","1g","1k"],function(a,b,c){function d(a){return!p(a)&&(l(a)?!m(a.parentNode):n(a)||k(a)||o(a)||j(a))}function e(a,b){for(a=a.parentNode;a&&a!=b;a=a.parentNode){if(j(a))return!1;if(i(a))return!0}return!0}function f(a){return!!j(a)&&b.reduce(a.getElementsByTagName("*"),function(a,b){return a||i(b)},!1)!==!0}function g(a){return n(a)||f(a)}function h(a,b){return d(a)&&e(a,b)}var i=a.isContentEditableTrue,j=a.isContentEditableFalse,k=a.isBr,l=a.isText,m=a.matchNodeNames("script style textarea"),n=a.matchNodeNames("img input textarea hr iframe video audio object"),o=a.matchNodeNames("table"),p=c.isCaretContainer;return{isCaretCandidate:d,isInEditable:e,isAtomic:g,isEditableCaretCandidate:h}}),g("45",[],function(){function a(a){return"string"==typeof a&&a.charCodeAt(0)>=768&&b.test(a)}var b=new RegExp("[\u0300-\u036f\u0483-\u0487\u0488-\u0489\u0591-\u05bd\u05bf\u05c1-\u05c2\u05c4-\u05c5\u05c7\u0610-\u061a\u064b-\u065f\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7-\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e3-\u0902\u093a\u093c\u0941-\u0948\u094d\u0951-\u0957\u0962-\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2-\u09e3\u0a01-\u0a02\u0a3c\u0a41-\u0a42\u0a47-\u0a48\u0a4b-\u0a4d\u0a51\u0a70-\u0a71\u0a75\u0a81-\u0a82\u0abc\u0ac1-\u0ac5\u0ac7-\u0ac8\u0acd\u0ae2-\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62-\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c00\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55-\u0c56\u0c62-\u0c63\u0c81\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc-\u0ccd\u0cd5-\u0cd6\u0ce2-\u0ce3\u0d01\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62-\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb-\u0ebc\u0ec8-\u0ecd\u0f18-\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039-\u103a\u103d-\u103e\u1058-\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085-\u1086\u108d\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752-\u1753\u1772-\u1773\u17b4-\u17b5\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927-\u1928\u1932\u1939-\u193b\u1a17-\u1a18\u1a1b\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1ab0-\u1abd\u1abe\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80-\u1b81\u1ba2-\u1ba5\u1ba8-\u1ba9\u1bab-\u1bad\u1be6\u1be8-\u1be9\u1bed\u1bef-\u1bf1\u1c2c-\u1c33\u1c36-\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1cf4\u1cf8-\u1cf9\u1dc0-\u1df5\u1dfc-\u1dff\u200c-\u200d\u20d0-\u20dc\u20dd-\u20e0\u20e1\u20e2-\u20e4\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302d\u302e-\u302f\u3099-\u309a\ua66f\ua670-\ua672\ua674-\ua67d\ua69e-\ua69f\ua6f0-\ua6f1\ua802\ua806\ua80b\ua825-\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\ua9e5\uaa29-\uaa2e\uaa31-\uaa32\uaa35-\uaa36\uaa43\uaa4c\uaa7c\uaab0\uaab2-\uaab4\uaab7-\uaab8\uaabe-\uaabf\uaac1\uaaec-\uaaed\uaaf6\uabe5\uabe8\uabed\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\uff9e-\uff9f]");return{isExtendingChar:a}}),g("1p",["1w","1j","e","h","44","43","45"],function(a,b,c,d,e,f,g){function h(a){return"createRange"in a?a.createRange():c.DOM.createRng()}function i(a){return a&&/[\r\n\t ]/.test(a)}function j(a){var b,c=a.startContainer,d=a.startOffset;return!!(i(a.toString())&&r(c.parentNode)&&(b=c.data,i(b[d-1])||i(b[d+1])))}function k(a){function b(a){var b,c=a.ownerDocument,d=h(c),e=c.createTextNode("\xa0"),g=a.parentNode;return g.insertBefore(e,a),d.setStart(e,0),d.setEnd(e,1),b=f.clone(d.getBoundingClientRect()),g.removeChild(e),b}function c(a){var c,d;return d=a.getClientRects(),c=d.length>0?f.clone(d[0]):f.clone(a.getBoundingClientRect()),t(a)&&0===c.left?b(a):c}function d(a,b){return a=f.collapse(a,b),a.width=1,a.right=a.left+1,a}function e(a){0!==a.height&&(n.length>0&&f.isEqual(a,n[n.length-1])||n.push(a))}function i(a,b){var f=h(a.ownerDocument);if(b0&&(f.setStart(a,b-1),f.setEnd(a,b),j(f)||e(d(c(f),!1))),b=b.data.length:c>=b.childNodes.length}function g(){var a;return a=h(b.ownerDocument),a.setStart(b,c),a.setEnd(b,c),a}function i(){return d||(d=k(new l(b,c))),d}function j(){return i().length>0}function m(a){return a&&b===a.container()&&c===a.offset()}function n(a){return v(b,a?c-1:c)}return{container:a.constant(b),offset:a.constant(c),toRange:g,getClientRects:i,isVisible:j,isAtStart:e,isAtEnd:f,isEqual:m,getNode:n}}var m=b.isElement,n=e.isCaretCandidate,o=b.matchStyleValues("display","block table"),p=b.matchStyleValues("float","left right"),q=a.and(m,n,a.negate(p)),r=a.negate(b.matchStyleValues("white-space","pre pre-line pre-wrap")),s=b.isText,t=b.isBr,u=c.nodeIndex,v=d.getNode;return l.fromRangeStart=function(a){return new l(a.startContainer,a.startOffset)},l.fromRangeEnd=function(a){return new l(a.endContainer,a.endOffset)},l.after=function(a){return new l(a.parentNode,u(a)+1)},l.before=function(a){return new l(a.parentNode,u(a))},l.isAtStart=function(a){return!!a&&a.isAtStart()},l.isAtEnd=function(a){return!!a&&a.isAtEnd()},l.isTextPosition=function(a){return!!a&&b.isText(a.container())},l}),g("1o",["1j","e","1w","1g","1p"],function(a,b,c,d,e){function f(a){var b=a.parentNode;return r(b)?f(b):b}function g(a){return a?d.reduce(a.childNodes,function(a,b){return r(b)&&"BR"!=b.nodeName?a=a.concat(g(b)):a.push(b),a},[]):[]}function h(a,b){for(;(a=a.previousSibling)&&q(a);)b+=a.data.length;return b}function i(a){return function(b){return a===b}}function j(b){var c,e,h;return c=g(f(b)),e=d.findIndex(c,i(b),b),c=c.slice(0,e+1),h=d.reduce(c,function(a,b,d){return q(b)&&q(c[d-1])&&a++,a},0),c=d.filter(c,a.matchNodeNames(b.nodeName)),e=d.findIndex(c,i(b),b),e-h}function k(a){var b;return b=q(a)?"text()":a.nodeName.toLowerCase(),b+"["+j(a)+"]"}function l(a,b,c){var d=[];for(b=b.parentNode;b!=a&&(!c||!c(b));b=b.parentNode)d.push(b);return d}function m(b,e){var f,g,i,j,m,n=[];return f=e.container(),g=e.offset(),q(f)?i=h(f,g):(j=f.childNodes,g>=j.length?(i="after",g=j.length-1):i="before",f=j[g]),n.push(k(f)),m=l(b,f),m=d.filter(m,c.negate(a.isBogus)),n=n.concat(d.map(m,function(a){return k(a)})),n.reverse().join("/")+","+i}function n(b,c,e){var f=g(b);return f=d.filter(f,function(a,b){return!q(a)||!q(f[b-1])}),f=d.filter(f,a.matchNodeNames(c)),f[e]}function o(a,b){for(var c,d=a,f=0;q(d);){if(c=d.data.length,b>=f&&b<=f+c){a=d,b-=f;break}if(!q(d.nextSibling)){a=d,b=c;break}f+=c,d=d.nextSibling}return b>a.data.length&&(b=a.data.length),new e(a,b)}function p(a,b){var c,f,g;return b?(c=b.split(","),b=c[0].split("/"),g=c.length>1?c[1]:"before",f=d.reduce(b,function(a,b){return(b=/([\w\-\(\)]+)\[([0-9]+)\]/.exec(b))?("text()"===b[1]&&(b[1]="#text"),n(a,b[1],parseInt(b[2],10))):null},a),f?q(f)?o(f,parseInt(g,10)):(g="after"===g?s(f)+1:s(f),new e(f.parentNode,g)):null):null}var q=a.isText,r=a.isBogus,s=b.nodeIndex;return{create:m,resolve:p}}),g("r",["1o","1k","1p","1j","h","6","1l","9"],function(a,b,c,d,e,f,g,h){function i(g){var i=g.dom;this.getBookmark=function(f,l){function m(a,b){var c=0;return h.each(i.select(a),function(a){if("all"!==a.getAttribute("data-mce-bogus"))return a!=b&&void c++}),c}function n(a){function b(b){var c,d,e,f=b?"start":"end";c=a[f+"Container"],d=a[f+"Offset"],1==c.nodeType&&"TR"==c.nodeName&&(e=c.childNodes,c=e[Math.min(b?d:d-1,e.length-1)],c&&(d=b?0:c.childNodes.length,a["set"+(b?"Start":"End")](c,d)))}return b(!0),b(),a}function o(a){function b(a,b){var d,e=a[b?"startContainer":"endContainer"],f=a[b?"startOffset":"endOffset"],g=[],h=0;for(3===e.nodeType?g.push(l?k(e,f):f):(d=e.childNodes,f>=d.length&&d.length&&(h=1,f=Math.max(0,d.length-1)),g.push(i.nodeIndex(d[f],l)+h));e&&e!=c;e=e.parentNode)g.push(i.nodeIndex(e,l));return g}var c=i.getRoot(),d={};return d.start=b(a,!0),g.isCollapsed()||(d.end=b(a)),d}function p(a){function c(a,c){var f;if(d.isElement(a)&&(a=e.getNode(a,c),j(a)))return a;if(b.isCaretContainer(a)){if(d.isText(a)&&b.isCaretContainerBlock(a)&&(a=a.parentNode),f=a.previousSibling,j(f))return f;if(f=a.nextSibling,j(f))return f}}return c(a.startContainer,a.startOffset)||c(a.endContainer,a.endOffset)}var q,r,s,t,u,v,w,x="";if(2==f)return v=g.getNode(),u=v?v.nodeName:null,q=g.getRng(),j(v)||"IMG"==u?{name:u,index:m(u,v)}:g.tridentSel?g.tridentSel.getBookmark(f):(v=p(q),v?(u=v.tagName,{name:u,index:m(u,v)}):o(q));if(3==f)return q=g.getRng(),{start:a.create(i.getRoot(),c.fromRangeStart(q)),end:a.create(i.getRoot(),c.fromRangeEnd(q))};if(f)return{rng:g.getRng()};if(q=g.getRng(),s=i.uniqueId(),t=g.isCollapsed(),w="overflow:hidden;line-height:0px",q.duplicate||q.item){if(q.item)return v=q.item(0),u=v.nodeName,{name:u,index:m(u,v)};r=q.duplicate();try{q.collapse(),q.pasteHTML(''+x+""),t||(r.collapse(!1),q.moveToElementText(r.parentElement()),0===q.compareEndPoints("StartToEnd",r)&&r.move("character",-1),r.pasteHTML(''+x+""))}catch(a){return null}}else{if(v=g.getNode(),u=v.nodeName,"IMG"==u)return{name:u,index:m(u,v)};r=n(q.cloneRange()),t||(r.collapse(!1),r.insertNode(i.create("span",{"data-mce-type":"bookmark",id:s+"_end",style:w},x))),q=n(q),q.collapse(!0),q.insertNode(i.create("span",{"data-mce-type":"bookmark",id:s+"_start",style:w},x))}return g.moveToBookmark({id:s,keep:1}),{id:s}},this.moveToBookmark=function(b){function c(a){var c,d,e,f,g=b[a?"start":"end"];if(g){for(e=g[0],d=l,c=g.length-1;c>=1;c--){if(f=d.childNodes,g[c]>f.length-1)return;d=f[g[c]]}3===d.nodeType&&(e=Math.min(g[0],d.nodeValue.length)),1===d.nodeType&&(e=Math.min(g[0],d.childNodes.length)),a?k.setStart(d,e):k.setEnd(d,e)}return!0}function d(a){var c,d,e,g,j=i.get(b.id+"_"+a),k=b.keep;if(j&&(c=j.parentNode,"start"==a?(k?(c=j.firstChild,d=1):d=i.nodeIndex(j),m=n=c,o=p=d):(k?(c=j.firstChild,d=1):d=i.nodeIndex(j),n=c,p=d),!k)){for(g=j.previousSibling,e=j.nextSibling,h.each(h.grep(j.childNodes),function(a){3==a.nodeType&&(a.nodeValue=a.nodeValue.replace(/\uFEFF/g,""))});j=i.get(b.id+"_"+a);)i.remove(j,1);g&&e&&g.nodeType==e.nodeType&&3==g.nodeType&&!f.opera&&(d=g.nodeValue.length,g.appendData(e.nodeValue),i.remove(e),"start"==a?(m=n=g,o=p=d):(n=g,p=d))}}function e(a){return!i.isBlock(a)||a.innerHTML||f.ie||(a.innerHTML='
'),a}function j(){var c,d;return c=i.createRng(),d=a.resolve(i.getRoot(),b.start),c.setStart(d.container(),d.offset()),d=a.resolve(i.getRoot(),b.end),c.setEnd(d.container(),d.offset()),c}var k,l,m,n,o,p;if(b)if(h.isArray(b.start)){if(k=i.createRng(),l=i.getRoot(),g.tridentSel)return g.tridentSel.moveToBookmark(b);c(!0)&&c()&&g.setRng(k)}else"string"==typeof b.start?g.setRng(j(b)):b.id?(d("start"),d("end"),m&&(k=i.createRng(),k.setStart(e(m),o),k.setEnd(e(n),p),g.setRng(k))):b.name?g.select(i.select(b.name)[b.index]):b.rng&&g.setRng(b.rng)}}var j=d.isContentEditableFalse,k=function(a,b){var c,d;for(d=g.trim(a.data.slice(0,b)).length,c=a.previousSibling;c&&3===c.nodeType;c=c.previousSibling)d+=g.trim(c.data).length;return d};return i.isBookmarkNode=function(a){return a&&"SPAN"===a.tagName&&"bookmark"===a.getAttribute("data-mce-type")},i}),g("6j",[],function(){return"undefined"!=typeof window?window:Function("return this;")()}),g("5u",["6j"],function(a){var b=function(b,c){for(var d=void 0!==c?c:a,e=0;e1)throw c.error("HTML does not have a single root node",a),"HTML must have a single root node";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b("Node cannot be null or undefined");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g("58",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g("48",["3x","4z","1r","58","3z","22"],function(a,b,c,d,e,f){var g=0,h=1,i=2,j=3,k=function(){var a=f.createElement("span");return void 0!==a.matches?g:void 0!==a.msMatchesSelector?h:void 0!==a.webkitMatchesSelector?i:void 0!==a.mozMatchesSelector?j:-1}(),l=d.ELEMENT,m=d.DOCUMENT,n=function(a,b){var c=a.dom();if(c.nodeType!==l)return!1;if(k===g)return c.matches(b);if(k===h)return c.msMatchesSelector(b);if(k===i)return c.webkitMatchesSelector(b);if(k===j)return c.mozMatchesSelector(b);throw new e("Browser lacks native selectors")},o=function(a){return a.nodeType!==l&&a.nodeType!==m||0===a.childElementCount},p=function(b,d){var e=void 0===d?f:d.dom();return o(e)?[]:a.map(e.querySelectorAll(b),c.fromDom)},q=function(a,d){var e=void 0===d?f:d.dom();return o(e)?b.none():b.from(e.querySelector(a)).map(c.fromDom)};return{all:p,is:n,one:q}}),g("1q",["3x","1m","46","47","48"],function(a,b,c,d,e){var f=function(a,b){return a.dom()===b.dom()},g=function(a,b){return a.dom().isEqualNode(b.dom())},h=function(c,d){return a.exists(d,b.curry(f,c))},i=function(a,b){var c=a.dom(),d=b.dom();return c!==d&&c.contains(d)},j=function(a,b){return c.documentPositionContainedBy(a.dom(),b.dom())},k=d.detect().browser,l=k.isIE()?j:i;return{eq:f,isEqualNode:g,member:h,contains:l,is:e.is}}),g("1s",["1j"],function(a){var b=function(a){for(var b=0,c=0,d=a;d&&d.nodeType;)b+=d.offsetLeft||0,c+=d.offsetTop||0,d=d.offsetParent;return{x:b,y:c}},c=function(a,b,c){var d={elm:b,alignToTop:c};return a.fire("scrollIntoView",d),d.isDefaultPrevented()},d=function(d,e,f){var g,h,i,j,k=d.dom,l=k.getRoot(),m=0;if(!c(d,e,f)&&a.isElement(e)){if(f===!1&&(m=e.offsetHeight),"BODY"!==l.nodeName){var n=d.selection.getScrollContainer();if(n)return g=b(e).y-b(n).y+m,j=n.clientHeight,i=n.scrollTop,void((gi+j)&&(n.scrollTop=gi+j)&&d.getWin().scrollTo(0,g0)e=j-1;else{if(!(m<0))return{node:h};l=j+1}if(m<0)for(h?d.collapse(!1):(d.moveToElementText(k),d.collapse(!0),h=k,f=!0),i=0;0!==d.compareEndPoints(c?"StartToStart":"StartToEnd",b)&&0!==d.move("character",1)&&k==d.parentElement();)i++;else for(d.collapse(!0),i=0;0!==d.compareEndPoints(c?"StartToStart":"StartToEnd",b)&&0!==d.move("character",-1)&&k==d.parentElement();)i++;return{node:h,position:m,offset:i,inside:f}}}function c(){function c(a){var c,d,e,f,g,h=b(k,a),i=0;if(c=h.node,d=h.offset,h.inside&&!c.hasChildNodes())return void l[a?"setStart":"setEnd"](c,0);if(d===f)return void l[a?"setStartBefore":"setEndAfter"](c);if(h.position<0){if(e=h.inside?c.firstChild:c.nextSibling,!e)return void l[a?"setStartAfter":"setEndAfter"](c);if(!d)return void(3==e.nodeType?l[a?"setStart":"setEnd"](e,0):l[a?"setStartBefore":"setEndBefore"](e));for(;e;){if(3==e.nodeType&&(g=e.nodeValue,i+=g.length,i>=d)){c=e,i-=d,i=g.length-i;break}e=e.nextSibling}}else{if(e=c.previousSibling,!e)return l[a?"setStartBefore":"setEndBefore"](c);if(!d)return void(3==c.nodeType?l[a?"setStart":"setEnd"](e,c.nodeValue.length):l[a?"setStartAfter":"setEndAfter"](e));for(;e;){if(3==e.nodeType&&(i+=e.nodeValue.length,i>=d)){c=e,i-=d;break}e=e.previousSibling}}l[a?"setStart":"setEnd"](c,i)}var f,g,h,i,j,k=a.getRng(),l=e.createRng();if(f=k.item?k.item(0):k.parentElement(),f.ownerDocument!=e.doc)return l;if(g=a.isCollapsed(),k.item)return l.setStart(f.parentNode,e.nodeIndex(f)),l.setEnd(l.startContainer,l.startOffset+1),l;try{c(!0),g||c()}catch(b){if(b.number!=-2147024809)throw b;j=d.getBookmark(2),h=k.duplicate(),h.collapse(!0),f=h.parentElement(),g||(h=k.duplicate(),h.collapse(!1),i=h.parentElement(),i.innerHTML=i.innerHTML),f.innerHTML=f.innerHTML,d.moveToBookmark(j),k=a.getRng(),c(!0),g||c()}return l}var d=this,e=a.dom,f=!1;this.getBookmark=function(c){function d(a){var b,c,d,f,g=[];for(b=a.parentNode,c=e.getRoot().parentNode;b!=c&&9!==b.nodeType;){for(d=b.children,f=d.length;f--;)if(a===d[f]){g.push(f);break}a=b,b=b.parentNode}return g}function f(a){var c;if(c=b(g,a))return{position:c.position,offset:c.offset,indexes:d(c.node),inside:c.inside}}var g=a.getRng(),h={};return 2===c&&(g.item?h.start={ctrl:!0,indexes:d(g.item(0))}:(h.start=f(!0),a.isCollapsed()||(h.end=f()))),h},this.moveToBookmark=function(a){function b(a){var b,c,d,f;for(b=e.getRoot(),c=a.length-1;c>=0;c--)f=b.children,d=a[c],d<=f.length-1&&(b=f[d]);return b}function c(c){var e,g,h,i,j=a[c?"start":"end"];j&&(e=j.position>0,g=f.createTextRange(),g.moveToElementText(b(j.indexes)),i=j.offset,i!==h?(g.collapse(j.inside||e),g.moveStart("character",e?-i:i)):g.collapse(c),d.setEndPoint(c?"StartToStart":"EndToStart",g),c&&d.collapse(!0))}var d,f=e.doc.body;a.start&&(a.start.ctrl?(d=f.createControlRange(),d.addElement(b(a.start.indexes)),d.select()):(d=f.createTextRange(),c(!0),c(),d.select()))},this.addRange=function(b){function c(a){var b,c,g,l,m;g=e.create("a"),b=a?h:j,c=a?i:k,l=d.duplicate(),b!=o&&b!=o.documentElement||(b=p,c=0),3==b.nodeType?(b.parentNode.insertBefore(g,b),l.moveToElementText(g),l.moveStart("character",c),e.remove(g),d.setEndPoint(a?"StartToStart":"EndToEnd",l)):(m=b.childNodes,m.length?(c>=m.length?e.insertAfter(g,m[m.length-1]):b.insertBefore(g,m[c]),l.moveToElementText(g)):b.canHaveHTML&&(b.innerHTML="",g=b.firstChild,l.moveToElementText(g),l.collapse(f)),d.setEndPoint(a?"StartToStart":"EndToEnd",l),e.remove(g))}var d,g,h,i,j,k,l,m,n,o=a.dom.doc,p=o.body;if(h=b.startContainer,i=b.startOffset,j=b.endContainer,k=b.endOffset,d=p.createTextRange(),h==j&&1==h.nodeType){if(i==k&&!h.hasChildNodes()){if(h.canHaveHTML)return l=h.previousSibling,l&&!l.hasChildNodes()&&e.isBlock(l)?l.innerHTML="":l=null,h.innerHTML="",d.moveToElementText(h.lastChild),d.select(),e.doc.selection.clear(),h.innerHTML="",void(l&&(l.innerHTML=""));i=e.nodeIndex(h),h=h.parentNode}if(i==k-1)try{if(n=h.childNodes[i],g=p.createControlRange(),g.addElement(n),g.select(),m=a.getRng(),m.item&&n===m.item(0))return}catch(a){}}c(!0),c(),d.select()},this.getRangeAt=c}return a}),g("60",["3y","50"],function(a,b){var c=function(c){if(null===c)return"null";var d=typeof c;return"object"===d&&a.prototype.isPrototypeOf(c)?"array":"object"===d&&b.prototype.isPrototypeOf(c)?"string":d},d=function(a){return function(b){return c(b)===a}};return{isString:d("string"),isObject:d("object"),isArray:d("array"),isNull:d("null"),isBoolean:d("boolean"),isUndefined:d("undefined"),isFunction:d("function"),isNumber:d("number")}}),g("6m",["3x","1m","3y","3z"],function(a,b,c,d){return function(){var e=arguments;return function(){for(var f=new c(arguments.length),g=0;g0&&e.unsuppMessage(m);var n={};return a.each(h,function(a){n[a]=b.constant(f[a])}),a.each(i,function(a){n[a]=b.constant(g.prototype.hasOwnProperty.call(f,a)?d.some(f[a]):d.none())}),n}}}),g("61",["6m","6n"],function(a,b){return{immutable:a,immutableBag:b}}),g("62",[],function(){var a=function(a,b){var c=[],d=function(a){return c.push(a),b(a)},e=b(a);do e=e.bind(d);while(e.isSome());return c};return{toArray:a}}),g("59",["60","3x","1m","4z","61","62","1q","1r"],function(a,b,c,d,e,f,g,h){var i=function(a){return h.fromDom(a.dom().ownerDocument)},j=function(a){var b=i(a);return h.fromDom(b.dom().documentElement)},k=function(a){var b=a.dom(),c=b.ownerDocument.defaultView;return h.fromDom(c)},l=function(a){var b=a.dom();return d.from(b.parentNode).map(h.fromDom)},m=function(a){return l(a).bind(function(c){var d=u(c);return b.findIndex(d,function(b){return g.eq(a,b)})})},n=function(b,d){for(var e=a.isFunction(d)?d:c.constant(!1),f=b.dom(),g=[];null!==f.parentNode&&void 0!==f.parentNode;){var i=f.parentNode,j=h.fromDom(i);if(g.push(j),e(j)===!0)break;f=i}return g},o=function(a){var c=function(c){return b.filter(c,function(b){return!g.eq(a,b)})};return l(a).map(u).map(c).getOr([])},p=function(a){var b=a.dom();return d.from(b.offsetParent).map(h.fromDom)},q=function(a){var b=a.dom();return d.from(b.previousSibling).map(h.fromDom)},r=function(a){var b=a.dom();return d.from(b.nextSibling).map(h.fromDom)},s=function(a){return b.reverse(f.toArray(a,q))},t=function(a){return f.toArray(a,r)},u=function(a){var c=a.dom();return b.map(c.childNodes,h.fromDom)},v=function(a,b){var c=a.dom().childNodes;return d.from(c[b]).map(h.fromDom)},w=function(a){return v(a,0)},x=function(a){return v(a,a.dom().childNodes.length-1)},y=e.immutable("element","offset"),z=function(a,b){var c=u(a);return c.length>0&&b0&&b.before(a,d),e(a)};return{empty:d,remove:e,unwrap:f}}),g("4b",["5a","1r","4a","5b","5c","59"],function(a,b,c,d,e,f){var g=function(a,c){return b.fromDom(a.dom().cloneNode(c))},h=function(a){return g(a,!1)},i=function(a){return g(a,!0)},j=function(c,d){var e=b.fromTag(d),f=a.clone(c);return a.setAll(e,f),e},k=function(a,b){var c=j(a,b),e=f.children(i(a));return d.append(c,e),c},l=function(a,b){var g=j(a,b);c.before(a,g);var h=f.children(a);return d.append(g,h),e.remove(a),g};return{shallow:h,shallowAs:j,deep:i,copy:k,mutate:l}}),g("4c",["3x","1r","22"],function(a,b,c){var d=function(d,e){var f=e||c,g=f.createDocumentFragment();return a.each(d,function(a){g.appendChild(a.dom())}),b.fromDom(g)};return{fromElements:d}}),g("4e",["3x","1m","4d"],function(a,b,c){var d=["article","aside","details","div","dt","figcaption","footer","form","fieldset","header","hgroup","html","main","nav","section","summary","body","p","dl","multicol","dd","figure","address","center","blockquote","h1","h2","h3","h4","h5","h6","listing","xmp","pre","plaintext","menu","dir","ul","ol","li","hr","table","tbody","thead","tfoot","th","tr","td","caption"],e=["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param","embed","source","wbr","track"],f=["td","th"],g=["h1","h2","h3","h4","h5","h6","p","div","address","pre","form","blockquote","center","dir","fieldset","header","footer","article","section","hgroup","aside","nav","figure"],h=["h1","h2","h3","h4","h5","h6"],i=function(d){var e;return function(f){return e=e?e:a.mapToObject(d,b.constant(!0)),e.hasOwnProperty(c.name(f))}},j=i(h),k=i(d),l=function(a){return c.isElement(a)&&!k(a)};return{isBlock:k,isInline:l,isHeading:j,isTextBlock:i(g),isVoid:i(e),isTableCell:i(f)}}),g("4f",["1m","1q","59"],function(a,b,c){var d=function(a){return a.slice(0,-1)},e=function(a,e,f){return b.contains(e,a)?d(c.parents(a,function(a){return f(a)||b.eq(a,e)})):[]},f=function(b,c){return e(b,c,a.constant(!1))},g=function(a,b){return[a].concat(f(a,b))};return{parentsUntil:e,parents:f,parentsAndSelf:g}}),g("5d",["4z"],function(a){var b=function(a){for(var b=[],c=function(a){b.push(a)},d=0;d0?f.fromElements([e]):e},n=function(b,c){var f=i.parentsAndSelf(e.fromDom(c.commonAncestorContainer),e.fromDom(b)),g=a.filter(f,function(a){return h.isInline(a)||h.isHeading(a)}),j=l(f,c);return a.map(g.concat(j),d.shallow)},o=function(a,b){return m(e.fromDom(b.cloneContents()),n(a,b))},p=function(a,b){return b.collapsed?f.fromElements([]):o(a,b)};return{read:p}}),g("s",["1q","1r","1p","r","q","1j","h","1s","c","1t","6","1u","1l","9"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(a,b,c,f){var g=this;g.dom=a,g.win=b,g.serializer=c,g.editor=f,g.bookmarkManager=new d(g),g.controlSelection=new e(g,f),g.win.getSelection||(g.tridentSel=new j(g))}var p=n.each,q=n.trim,r=k.ie,s=function(c){return!(!c||!c.ownerDocument)&&a.contains(b.fromDom(c.ownerDocument),b.fromDom(c))},t=function(a){return!!a&&(!!a.select||s(a.startContainer)&&s(a.endContainer))};return o.prototype={setCursorLocation:function(a,b){var c=this,d=c.dom.createRng();a?(d.setStart(a,b),d.setEnd(a,b),c.setRng(d),c.collapse(!1)):(c._moveEndPoint(d,c.editor.getBody(),!0),c.setRng(d))},getContent:function(a){var b,c,d,e=this,f=e.getRng(),g=e.dom.create("body"),h=e.getSel();return a=a||{},b=c="",a.get=!0,a.format=a.format||"html",a.selection=!0,e.editor.fire("BeforeGetContent",a),"text"===a.format?e.isCollapsed()?"":m.trim(f.text||(h.toString?h.toString():"")):(f.cloneContents?(d=a.contextual?l.read(e.editor.getBody(),f).dom():f.cloneContents(),d&&g.appendChild(d)):void 0!==f.item||void 0!==f.htmlText?(g.innerHTML="
"+(f.item?f.item(0).outerHTML:f.htmlText),g.removeChild(g.firstChild)):g.innerHTML=f.toString(),/^\s/.test(g.innerHTML)&&(b=" "),/\s+$/.test(g.innerHTML)&&(c=" "),a.getInner=!0,a.content=e.isCollapsed()?"":b+e.serializer.serialize(g,a)+c,e.editor.fire("GetContent",a),a.content)},setContent:function(a,b){var c,d,e,f=this,g=f.getRng(),h=f.win.document;if(b=b||{format:"html"},b.set=!0,b.selection=!0,b.content=a,b.no_events||f.editor.fire("BeforeSetContent",b),a=b.content,g.insertNode){a+='_',g.startContainer==h&&g.endContainer==h?h.body.innerHTML=a:(g.deleteContents(),0===h.body.childNodes.length?h.body.innerHTML=a:g.createContextualFragment?g.insertNode(g.createContextualFragment(a)):(d=h.createDocumentFragment(),e=h.createElement("div"),d.appendChild(e),e.outerHTML=a,g.insertNode(d))),c=f.dom.get("__caret"),g=h.createRange(),g.setStartBefore(c),g.setEndBefore(c),f.setRng(g),f.dom.remove("__caret");try{f.setRng(g)}catch(a){}}else g.item&&(h.execCommand("Delete",!1,null),g=f.getRng()),/^\s+/.test(a)?(g.pasteHTML('_'+a),f.dom.remove("__mce_tmp")):g.pasteHTML(a);b.no_events||f.editor.fire("SetContent",b)},getStart:function(a){var b,c,d,e,f=this,g=f.getRng();if(g.duplicate||g.item){if(g.item)return g.item(0);for(d=g.duplicate(),d.collapse(1),b=d.parentElement(),b.ownerDocument!==f.dom.doc&&(b=f.dom.getRoot()),c=e=g.parentElement();e=e.parentNode;)if(e==b){b=c;break}return b}return b=g.startContainer,1==b.nodeType&&b.hasChildNodes()&&(a&&g.collapsed||(b=b.childNodes[Math.min(b.childNodes.length-1,g.startOffset)])),b&&3==b.nodeType?b.parentNode:b},getEnd:function(a){var b,c,d=this,e=d.getRng();return e.duplicate||e.item?e.item?e.item(0):(e=e.duplicate(),e.collapse(0),b=e.parentElement(),b.ownerDocument!==d.dom.doc&&(b=d.dom.getRoot()),b&&"BODY"==b.nodeName?b.lastChild||b:b):(b=e.endContainer,c=e.endOffset,1==b.nodeType&&b.hasChildNodes()&&(a&&e.collapsed||(b=b.childNodes[c>0?c-1:c])),b&&3==b.nodeType?b.parentNode:b)},getBookmark:function(a,b){return this.bookmarkManager.getBookmark(a,b)},moveToBookmark:function(a){return this.bookmarkManager.moveToBookmark(a)},select:function(a,b){var c,d=this,e=d.dom,f=e.createRng();if(d.lastFocusBookmark=null,a){if(!b&&d.controlSelection.controlSelect(a))return;c=e.nodeIndex(a),f.setStart(a.parentNode,c),f.setEnd(a.parentNode,c+1),b&&(d._moveEndPoint(f,a,!0),d._moveEndPoint(f,a)),d.setRng(f)}return a},isCollapsed:function(){var a=this,b=a.getRng(),c=a.getSel();return!(!b||b.item)&&(b.compareEndPoints?0===b.compareEndPoints("StartToEnd",b):!c||b.collapsed)},collapse:function(a){var b,c=this,d=c.getRng();d.item&&(b=d.item(0),d=c.win.document.body.createTextRange(),d.moveToElementText(b)),d.collapse(!!a),c.setRng(d)},getSel:function(){var a=this.win;return a.getSelection?a.getSelection():a.document.selection},getRng:function(a){function b(a,b,c){try{return b.compareBoundaryPoints(a,c)}catch(a){return-1}}var c,d,e,f,g,h,i=this;if(!i.win)return null;if(f=i.win.document,"undefined"==typeof f||null===f)return null;if(!a&&i.lastFocusBookmark){var j=i.lastFocusBookmark;return j.startContainer?(d=f.createRange(),d.setStart(j.startContainer,j.startOffset),d.setEnd(j.endContainer,j.endOffset)):d=j,d}if(a&&i.tridentSel)return i.tridentSel.getRangeAt(0);try{(c=i.getSel())&&(d=c.rangeCount>0?c.getRangeAt(0):c.createRange?c.createRange():f.createRange())}catch(a){}if(h=i.editor.fire("GetSelectionRange",{range:d}),h.range!==d)return h.range;if(r&&d&&d.setStart&&f.selection){try{g=f.selection.createRange()}catch(a){}g&&g.item&&(e=g.item(0),d=f.createRange(),d.setStartBefore(e),d.setEndAfter(e))}return d||(d=f.createRange?f.createRange():f.body.createTextRange()),d.setStart&&9===d.startContainer.nodeType&&d.collapsed&&(e=i.dom.getRoot(),d.setStart(e,0),d.setEnd(e,0)),i.selectedRange&&i.explicitRange&&(0===b(d.START_TO_START,d,i.selectedRange)&&0===b(d.END_TO_END,d,i.selectedRange)?d=i.explicitRange:(i.selectedRange=null,i.explicitRange=null)),d},setRng:function(a,b){var c,d,e,f=this;if(t(a))if(a.select){f.explicitRange=null;try{a.select()}catch(a){}}else if(f.tridentSel){if(a.cloneRange)try{f.tridentSel.addRange(a)}catch(a){}}else{if(c=f.getSel(),e=f.editor.fire("SetSelectionRange",{range:a,forward:b}),a=e.range,c){f.explicitRange=a;try{c.removeAllRanges(),c.addRange(a)}catch(a){}b===!1&&c.extend&&(c.collapse(a.endContainer,a.endOffset),c.extend(a.startContainer,a.startOffset)),f.selectedRange=c.rangeCount>0?c.getRangeAt(0):null}a.collapsed||a.startContainer!==a.endContainer||!c.setBaseAndExtent||k.ie||a.endOffset-a.startOffset<2&&a.startContainer.hasChildNodes()&&(d=a.startContainer.childNodes[a.startOffset],d&&"IMG"===d.tagName&&(c.setBaseAndExtent(a.startContainer,a.startOffset,a.endContainer,a.endOffset),c.anchorNode===a.startContainer&&c.focusNode===a.endContainer||c.setBaseAndExtent(d,0,d,1))),f.editor.fire("AfterSetSelectionRange",{range:a,forward:b})}},setNode:function(a){var b=this;return b.setContent(b.dom.getOuterHTML(a)),a},getNode:function(){function a(a,b){for(var c=a;a&&3===a.nodeType&&0===a.length;)a=b?a.nextSibling:a.previousSibling;return a||c}var b,c,d,e,f,g=this,h=g.getRng(),i=g.dom.getRoot();return h?(c=h.startContainer,d=h.endContainer,e=h.startOffset,f=h.endOffset,h.setStart?(b=h.commonAncestorContainer,!h.collapsed&&(c==d&&f-e<2&&c.hasChildNodes()&&(b=c.childNodes[e]),3===c.nodeType&&3===d.nodeType&&(c=c.length===e?a(c.nextSibling,!0):c.parentNode,d=0===f?a(d.previousSibling,!1):d.parentNode,c&&c===d))?c:b&&3==b.nodeType?b.parentNode:b):(b=h.item?h.item(0):h.parentElement(),b.ownerDocument!==g.win.document&&(b=i),b)):i},getSelectedBlocks:function(a,b){var c,d,e=this,f=e.dom,g=[];if(d=f.getRoot(),a=f.getParent(a||e.getStart(),f.isBlock),b=f.getParent(b||e.getEnd(),f.isBlock),a&&a!=d&&g.push(a),a&&b&&a!=b){c=a;for(var h=new i(a,d);(c=h.next())&&c!=b;)f.isBlock(c)&&g.push(c)}return b&&a!=b&&b!=d&&g.push(b),g},isForward:function(){var a,b,c=this.dom,d=this.getSel();return!(d&&d.anchorNode&&d.focusNode)||(a=c.createRng(),a.setStart(d.anchorNode,d.anchorOffset),a.collapse(!0),b=c.createRng(),b.setStart(d.focusNode,d.focusOffset),b.collapse(!0),a.compareBoundaryPoints(a.START_TO_START,b)<=0)},normalize:function(){var a=this,b=a.getRng();return k.range&&new g(a.dom).normalize(b)&&a.setRng(b,a.isForward()),b},selectorChanged:function(a,b){var c,d=this;return d.selectorChangedData||(d.selectorChangedData={},c={},d.editor.on("NodeChange",function(a){var b=a.element,e=d.dom,f=e.getParents(b,null,e.getRoot()),g={};p(d.selectorChangedData,function(a,b){p(f,function(d){if(e.is(d,b))return c[b]||(p(a,function(a){a(!0,{node:d,selector:b,parents:f})}),c[b]=a),g[b]=a,!1})}),p(c,function(a,d){g[d]||(delete c[d],p(a,function(a){a(!1,{node:b,selector:d,parents:f})}))})})),d.selectorChangedData[a]||(d.selectorChangedData[a]=[]),d.selectorChangedData[a].push(b),d},getScrollContainer:function(){for(var a,b=this.dom.getRoot();b&&"BODY"!=b.nodeName;){if(b.scrollHeight>b.clientHeight){a=b;break}b=b.parentNode}return a},scrollIntoView:function(a,b){h.scrollIntoView(this.editor,a,b)},placeCaretAt:function(a,b){this.setRng(g.getCaretRangeFromPoint(a,b,this.editor.getDoc()))},_moveEndPoint:function(a,b,c){var d=b,e=new i(b,d),f=this.dom.schema.getNonEmptyElements();do{if(3==b.nodeType&&0!==q(b.nodeValue).length)return void(c?a.setStart(b,0):a.setEnd(b,b.nodeValue.length));if(f[b.nodeName]&&!/^(TD|TH)$/.test(b.nodeName))return void(c?a.setStartBefore(b):"BR"==b.nodeName?a.setEndBefore(b):a.setEndAfter(b));if(k.ie&&k.ie<11&&this.dom.isBlock(b)&&this.dom.isEmpty(b))return void(c?a.setStart(b,0):a.setEnd(b,0))}while(b=c?e.next():e.prev());"BODY"==d.nodeName&&(c?a.setStart(d,0):a.setEnd(d,d.childNodes.length))},getBoundingClientRect:function(){var a=this.getRng();return a.collapsed?c.fromRangeStart(a).getClientRects()[0]:a.getBoundingClientRect()},destroy:function(){this.win=null,this.controlSelection.destroy()}},o}),g("1v",["r","9"],function(a,b){function c(b){this.compare=function(c,e){function f(a){var c={};return d(b.getAttribs(a),function(d){var e=d.nodeName.toLowerCase();0!==e.indexOf("_")&&"style"!==e&&0!==e.indexOf("data-")&&(c[e]=b.getAttrib(a,e))}),c}function g(a,b){var c,d;for(d in a)if(a.hasOwnProperty(d)){if(c=b[d],"undefined"==typeof c)return!1;if(a[d]!=c)return!1;delete b[d]}for(d in b)if(b.hasOwnProperty(d))return!1;return!0}return c.nodeName==e.nodeName&&(!!g(f(c),f(e))&&(!!g(b.parseStyle(b.getAttrib(c,"style")),b.parseStyle(b.getAttrib(e,"style")))&&(!a.isBookmarkNode(c)&&!a.isBookmarkNode(e))))}}var d=b.each;return c}),g("1x",["e","9","j"],function(a,b,c){function d(a,d){function e(a,b){b.classes.length&&j.addClass(a,b.classes.join(" ")),j.setAttribs(a,b.attrs)}function f(a){var b;return k="string"==typeof a?{name:a,classes:[],attrs:{}}:a,b=j.create(k.name),e(b,k),b}function g(a,c){var d="string"!=typeof a?a.nodeName.toLowerCase():a,e=m.getElementRule(d),f=e&&e.parentsRequired;return!(!f||!f.length)&&(c&&b.inArray(f,c)!==-1?c:f[0])}function h(a,c,d){var e,i,k,l=c.length>0&&c[0],m=l&&l.name;if(k=g(a,m))m==k?(i=c[0],c=c.slice(1)):i=k;else if(l)i=c[0],c=c.slice(1);else if(!d)return a;return i&&(e=f(i),e.appendChild(a)),d&&(e||(e=j.create("div"),e.appendChild(a)),b.each(d,function(b){var c=f(b);e.insertBefore(c,a)})),h(e,c,i&&i.siblings)}var i,k,l,m=d&&d.schema||new c({});return a&&a.length?(k=a[0],i=f(k),l=j.create("div"),l.appendChild(h(i,a.slice(1),k.siblings)),l):""}function e(a,b){return d(g(a),b)}function f(a){var c,d={classes:[],attrs:{}};return a=d.selector=b.trim(a),"*"!==a&&(c=a.replace(/(?:([#\.]|::?)([\w\-]+)|(\[)([^\]]+)\]?)/g,function(a,c,e,f,g){switch(c){case"#":d.attrs.id=e;break;case".":d.classes.push(e);break;case":":b.inArray("checked disabled enabled read-only required".split(" "),e)!==-1&&(d.attrs[e]=e)}if("["==f){var h=g.match(/([\w\-]+)(?:\=\"([^\"]+))?/);h&&(d.attrs[h[1]]=h[2])}return""})),d.name=c||"div",d}function g(a){return a&&"string"==typeof a?(a=a.split(/\s*,\s*/)[0],a=a.replace(/\s*(~\+|~|\+|>)\s*/g,"$1"),b.map(a.split(/(?:>|\s+(?![^\[\]]+\]))/),function(a){var c=b.map(a.split(/(?:~\+|~|\+)/),f),d=c.pop();return c.length&&(d.siblings=c),d}).reverse()):[]}function h(a,b){function c(a){return a.replace(/%(\w+)/g,"")}var e,f,h,k,l,m,n="";if(m=a.settings.preview_styles,m===!1)return"";if("string"!=typeof m&&(m="font-family font-size font-weight font-style text-decoration text-transform color background-color border border-radius outline text-shadow"),"string"==typeof b){if(b=a.formatter.get(b),!b)return;b=b[0]}return"preview"in b&&(m=b.preview,m===!1)?"":(e=b.block||b.inline||"span",k=g(b.selector),k.length?(k[0].name||(k[0].name=e),e=b.selector,f=d(k,a)):f=d([e],a),h=j.select(e,f)[0]||f.firstChild,i(b.styles,function(a,b){a=c(a),a&&j.setStyle(h,b,a)}),i(b.attributes,function(a,b){a=c(a),a&&j.setAttrib(h,b,a)}),i(b.classes,function(a){a=c(a),j.hasClass(h,a)||j.addClass(h,a)}),a.fire("PreviewFormats"),j.setStyles(f,{position:"absolute",left:-65535}),a.getBody().appendChild(f),l=j.getStyle(a.getBody(),"fontSize",!0),l=/px$/.test(l)?parseInt(l,10):0,i(m.split(" "),function(b){var c=j.getStyle(h,b,!0);if(!("background-color"==b&&/transparent|rgba\s*\([^)]+,\s*0\)/.test(c)&&(c=j.getStyle(a.getBody(),b,!0),"#ffffff"==j.toHex(c).toLowerCase())||"color"==b&&"#000000"==j.toHex(c).toLowerCase())){if("font-size"==b&&/em|%$/.test(c)){if(0===l)return;c=parseFloat(c,10)/(/%$/.test(c)?100:1),c=c*l+"px"}"border"==b&&c&&(n+="padding:0 2px;"),n+=b+":"+c+";"}}),a.fire("AfterPreviewFormats"),j.remove(f),n)}var i=b.each,j=a.DOM;return{getCssText:h,parseSelector:g,selectorToHtml:e}}),g("1y",["1g","1j","a"],function(a,b,c){function d(a,b){var c=f[a];c||(f[a]=c=[]),f[a].push(b)}function e(a,b){h(f[a],function(a){a(b)})}var f={},g=a.filter,h=a.each;return d("pre",function(d){function e(b){return i(b.previousSibling)&&a.indexOf(j,b.previousSibling)!=-1}function f(a,b){c(b).remove(),c(a).append("

").append(b.childNodes)}var i,j,k=d.selection.getRng();i=b.matchNodeNames("pre"),k.collapsed||(j=d.selection.getSelectedBlocks(),h(g(g(j,i),e),function(a){f(a.previousSibling,a)}))}),{postProcess:e}}),g("t",["c","h","r","1v","1j","1w","9","1x","1y"],function(a,b,c,d,e,f,g,h,i){return function(j){function k(a){return a.nodeType&&(a=a.nodeName),!!j.schema.getTextBlockElements()[a.toLowerCase()]}function l(a){return/^(TH|TD)$/.test(a.nodeName)}function m(a){return a&&/^(IMG)$/.test(a.nodeName)}function n(a,b){return da.getParents(a,b,da.getRoot())}function o(a){return 1===a.nodeType&&"_mce_caret"===a.id}function p(){s({valigntop:[{selector:"td,th",styles:{verticalAlign:"top"}}],valignmiddle:[{selector:"td,th",styles:{verticalAlign:"middle"}}],valignbottom:[{selector:"td,th",styles:{verticalAlign:"bottom"}}],alignleft:[{selector:"figure.image",collapsed:!1,classes:"align-left",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"left"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"left"},preview:"font-family font-size"}],aligncenter:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"center"},inherit:!1,preview:!1,defaultBlock:"div"},{selector:"figure.image",collapsed:!1,classes:"align-center",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"img",collapsed:!1,styles:{display:"block",marginLeft:"auto",marginRight:"auto"},preview:!1},{selector:"table",collapsed:!1,styles:{marginLeft:"auto",marginRight:"auto"},preview:"font-family font-size"}],alignright:[{selector:"figure.image",collapsed:!1,classes:"align-right",ceFalseOverride:!0,preview:"font-family font-size"},{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"right"},inherit:!1,preview:"font-family font-size",defaultBlock:"div"},{selector:"img,table",collapsed:!1,styles:{"float":"right"},preview:"font-family font-size"}],alignjustify:[{selector:"figure,p,h1,h2,h3,h4,h5,h6,td,th,tr,div,ul,ol,li",styles:{textAlign:"justify"},inherit:!1,defaultBlock:"div",preview:"font-family font-size"}],bold:[{inline:"strong",remove:"all"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b",remove:"all"}],italic:[{inline:"em",remove:"all"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i",remove:"all"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:!0},{inline:"u",remove:"all"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:!0},{inline:"strike",remove:"all"}],forecolor:{inline:"span",styles:{color:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"},links:!0,remove_similar:!0,clear_child_styles:!0},fontname:{inline:"span",styles:{fontFamily:"%value"},clear_child_styles:!0},fontsize:{inline:"span",styles:{fontSize:"%value"},clear_child_styles:!0},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},subscript:{inline:"sub"},superscript:{inline:"sup"},code:{inline:"code"},link:{inline:"a",selector:"a",remove:"all",split:!0,deep:!0,onmatch:function(){return!0},onformat:function(a,b,c){qa(c,function(b,c){da.setAttrib(a,c,b)})}},removeformat:[{selector:"b,strong,em,i,font,u,strike,sub,sup,dfn,code,samp,kbd,var,cite,mark,q,del,ins",remove:"all",split:!0,expand:!1,block_expand:!0,deep:!0},{selector:"span",attributes:["style","class"],remove:"empty",split:!0,expand:!1,deep:!0},{selector:"*",attributes:["style","class"],split:!1,expand:!1,deep:!0}]}),qa("p h1 h2 h3 h4 h5 h6 div address pre div dt dd samp".split(/\s/),function(a){s(a,{block:a,remove:"all"})}),s(j.settings.formats)}function q(){j.addShortcut("meta+b","bold_desc","Bold"),j.addShortcut("meta+i","italic_desc","Italic"),j.addShortcut("meta+u","underline_desc","Underline");for(var a=1;a<=6;a++)j.addShortcut("access+"+a,"",["FormatBlock",!1,"h"+a]);j.addShortcut("access+7","",["FormatBlock",!1,"p"]),j.addShortcut("access+8","",["FormatBlock",!1,"div"]),j.addShortcut("access+9","",["FormatBlock",!1,"address"])}function r(a){return a?ca[a]:ca}function s(a,b){a&&("string"!=typeof a?qa(a,function(a,b){s(b,a)}):(b=b.length?b:[b],qa(b,function(a){a.deep===_&&(a.deep=!a.selector),a.split===_&&(a.split=!a.selector||a.inline),a.remove===_&&a.selector&&!a.inline&&(a.remove="none"),a.selector&&a.inline&&(a.mixed=!0,a.block_expand=!0),"string"==typeof a.classes&&(a.classes=a.classes.split(/\s+/))}),ca[a]=b))}function t(a){return a&&ca[a]&&delete ca[a],ca}function u(a,b){var c=r(b);if(c)for(var d=0;d0)return d;if(d.childNodes.length>1||d==b||"BR"==d.tagName)return d}}var c=j.selection.getRng(),e=c.startContainer,f=c.endContainer;if(e!=f&&0===c.endOffset){var g=b(e,f),h=3==g.nodeType?g.data.length:g.childNodes.length;c.setEnd(g,h)}return c}function h(a,d,g){var h,i,j=[],l=!0;h=p.inline||p.block,i=da.create(h),e(i),fa.walk(a,function(a){function d(a){var q,r,s,t;if(t=l,q=a.nodeName.toLowerCase(),r=a.parentNode.nodeName.toLowerCase(),1===a.nodeType&&oa(a)&&(t=l,l="true"===oa(a),s=!0),H(q,"br"))return m=0,void(p.block&&da.remove(a));if(p.wrapper&&A(a,b,c))return void(m=0);if(l&&!s&&p.block&&!p.wrapper&&k(q)&&ga(r,h))return a=da.rename(a,h),e(a),j.push(a),void(m=0);if(p.selector){var u=f(n,a);if(!p.inline||u)return void(m=0)}!l||s||!ga(h,q)||!ga(r,h)||!g&&3===a.nodeType&&1===a.nodeValue.length&&65279===a.nodeValue.charCodeAt(0)||o(a)||p.inline&&ha(a)?(m=0,qa(ra(a.childNodes),d),s&&(l=t),m=0):(m||(m=da.clone(i,ma),a.parentNode.insertBefore(m,a),j.push(m)),m.appendChild(a))}var m;qa(a,d)}),p.links===!0&&qa(j,function(a){function b(a){"A"===a.nodeName&&e(a,p),qa(ra(a.childNodes),b)}b(a)}),qa(j,function(a){function d(a){var b=0;return qa(a.childNodes,function(a){P(a)||pa(a)||b++}),b}function f(a){var b=!1;return qa(a.childNodes,function(a){if(J(a))return b=a,!1}),b}function g(a,b){do{if(1!==d(a))break;if(a=f(a),!a)break;if(b(a))return a}while(a);return null}function h(a){var b,c;return b=f(a),b&&!pa(b)&&G(b,p)&&(c=da.clone(b,ma),e(c),da.replace(c,a,na),da.remove(b,1)),c||a}var i;if(i=d(a),(j.length>1||!ha(a))&&0===i)return void da.remove(a,1);if(p.inline||p.wrapper){if(p.exact||1!==i||(a=h(a)),qa(n,function(b){qa(da.select(b.inline,a),function(a){J(a)&&T(b,c,a,b.exact?a:null)}),ua(b,a)}),A(a.parentNode,b,c)&&T(p,c,a)&&(a=0),p.merge_with_parents&&da.getParent(a.parentNode,function(d){if(A(d,b,c))return T(p,c,a)&&(a=0),na}),a&&!ha(a)&&!M(a,"fontSize")){var k=g(a,K("fontSize"));k&&x("fontsize",{value:M(k,"fontSize")},a)}a&&p.merge_siblings!==!1&&(a=W(V(a),a),a=W(a,V(a,na)))}})}var l,m,n=r(b),p=n[0],q=!d&&ea.isCollapsed();if("false"!==oa(ea.getNode())){if(p){if(d)d.nodeType?f(n,d)||(m=da.createRng(),m.setStartBefore(d),m.setEndAfter(d),h(R(m,n),null,!0)):h(d,null,!0);else if(q&&p.inline&&!da.select("td[data-mce-selected],th[data-mce-selected]").length)Y("apply",b,c);else{var s=j.selection.getNode();ia||!n[0].defaultBlock||da.getParent(s,da.isBlock)||x(n[0].defaultBlock),j.selection.setRng(g()),l=ea.getBookmark(),h(R(ea.getRng(na),n),l),p.styles&&((p.styles.color||p.styles.textDecoration)&&(sa(s,w,"childNodes"),w(s)),p.styles.backgroundColor&&I(s,K("fontSize"),L("backgroundColor",O(p.styles.backgroundColor,c)))),ea.moveToBookmark(l),Z(ea.getRng(na)),j.nodeChanged()}i.postProcess(b,j)}}else{d=ea.getNode();for(var t=0,u=n.length;t=0;e--){if(f=g[e].selector,!f||g[e].defaultBlock)return na;for(d=c.length-1;d>=0;d--)if(da.is(c[d],f))return na}return ma}function E(a,b,c){var d;return $||($={},d={},j.on("NodeChange",function(a){var b=n(a.element),c={};b=g.grep(b,function(a){return 1==a.nodeType&&!a.getAttribute("data-mce-bogus")}),qa($,function(a,e){qa(b,function(f){return A(f,e,{},a.similar)?(d[e]||(qa(a,function(a){a(!0,{node:f,format:e,parents:b})}),d[e]=a),c[e]=a,!1):!u(f,e)&&void 0})}),qa(d,function(e,f){c[f]||(delete d[f],qa(e,function(c){c(!1,{node:a.element,format:f,parents:b})}))})})),qa(a.split(","),function(a){$[a]||($[a]=[],$[a].similar=c),$[a].push(b)}),this}function F(a){return h.getCssText(j,a)}function G(a,b){return H(a,b.inline)?na:H(a,b.block)?na:b.selector?1==a.nodeType&&da.is(a,b.selector):void 0}function H(a,b){return a=a||"",b=b||"",a=""+(a.nodeName||a),b=""+(b.nodeName||b),a.toLowerCase()==b.toLowerCase()}function I(a,b,c){qa(a.childNodes,function(a){J(a)&&(b(a)&&c(a),a.hasChildNodes()&&I(a,b,c))})}function J(a){return a&&1===a.nodeType&&!pa(a)&&!o(a)&&!e.isBogus(a)}function K(a){return f.curry(function(a,b){return!(!b||!M(b,a))},a)}function L(a,b){return f.curry(function(a,b,c){da.setStyle(c,a,b)},a,b)}function M(a,b){return N(da.getStyle(a,b),b)}function N(a,b){return"color"!=b&&"backgroundColor"!=b||(a=da.toHex(a)),"fontWeight"==b&&700==a&&(a="bold"),"fontFamily"==b&&(a=a.replace(/[\'\"]/g,"").replace(/,\s+/g,",")),""+a}function O(a,b){return"string"!=typeof a?a=a(b):b&&(a=a.replace(/%(\w+)/g,function(a,c){return b[c]||a})),a}function P(a){return a&&3===a.nodeType&&/^([\t \r\n]+|)$/.test(a.nodeValue)}function Q(a,b,c){var d=da.create(b,c);return a.parentNode.insertBefore(d,a),d.appendChild(a),d}function R(b,c,d){function e(a){function b(a){return"BR"==a.nodeName&&a.getAttribute("data-mce-bogus")&&!a.nextSibling}var d,e,f,g,h;if(d=e=a?q:s,g=a?"previousSibling":"nextSibling",h=da.getRoot(),3==d.nodeType&&!P(d)&&(a?r>0:tf?c:f,c===-1||d||c++):(c=g.indexOf(" ",b),f=g.indexOf("\xa0",b),c=c!==-1&&(f===-1||cm?m:r],3==q.nodeType&&(r=0)),1==s.nodeType&&s.hasChildNodes()&&(m=s.childNodes.length-1,s=s.childNodes[t>m?m:t-1],3==s.nodeType&&(t=s.nodeValue.length)),q=g(q),s=g(s),(pa(q.parentNode)||pa(q))&&(q=pa(q)?q:q.parentNode,q=q.nextSibling||q,3==q.nodeType&&(r=0)),(pa(s.parentNode)||pa(s))&&(s=pa(s)?s:s.parentNode,s=s.previousSibling||s,3==s.nodeType&&(t=s.length)),c[0].inline&&(b.collapsed&&(p=h(q,r,!0),p&&(q=p.container,r=p.offset),p=h(s,t),p&&(s=p.container,t=p.offset)),o=f(s,t),o.node)){for(;o.node&&0===o.offset&&o.node.previousSibling;)o=f(o.node.previousSibling);o.node&&o.offset>0&&3===o.node.nodeType&&" "===o.node.nodeValue.charAt(o.offset-1)&&o.offset>1&&(s=o.node,s.splitText(o.offset-1))}return(c[0].inline||c[0].block_expand)&&(c[0].inline&&3==q.nodeType&&0!==r||(q=e(!0)),c[0].inline&&3==s.nodeType&&t!==s.nodeValue.length||(s=e())),c[0].selector&&c[0].expand!==ma&&!c[0].inline&&(q=i(q,"previousSibling"),s=i(s,"nextSibling")),(c[0].block||c[0].selector)&&(q=l(q,"previousSibling"),s=l(s,"nextSibling"),c[0].block&&(ha(q)||(q=e(!0)),ha(s)||(s=e()))),1==q.nodeType&&(r=ja(q),q=q.parentNode),1==s.nodeType&&(t=ja(s)+1,s=s.parentNode),{startContainer:q,startOffset:r,endContainer:s,endOffset:t}}function S(a,b){return b.links&&"A"==a.tagName}function T(a,b,c,d){var e,f,g;if(!G(c,a)&&!S(c,a))return ma;if("all"!=a.remove)for(qa(a.styles,function(e,f){e=N(O(e,b),f),"number"==typeof f&&(f=e,d=0),(a.remove_similar||!d||H(M(d,f),e))&&da.setStyle(c,f,""),g=1}),g&&""===da.getAttrib(c,"style")&&(c.removeAttribute("style"),c.removeAttribute("data-mce-style")),qa(a.attributes,function(a,e){var f;if(a=O(a,b),"number"==typeof e&&(e=a,d=0),!d||H(da.getAttrib(d,e),a)){if("class"==e&&(a=da.getAttrib(c,e),a&&(f="",qa(a.split(/\s+/),function(a){/mce\-\w+/.test(a)&&(f+=(f?" ":"")+a)}),f)))return void da.setAttrib(c,e,f);"class"==e&&c.removeAttribute("className"),la.test(e)&&c.removeAttribute("data-mce-"+e),c.removeAttribute(e)}}),qa(a.classes,function(a){a=O(a,b),d&&!da.hasClass(d,a)||da.removeClass(c,a)}),f=da.getAttribs(c),e=0;ef?f:e]),3===d.nodeType&&c&&e>=d.nodeValue.length&&(d=new a(d,j.getBody()).next()||d),3!==d.nodeType||c||0!==e||(d=new a(d,j.getBody()).prev()||d),d}function Y(b,c,d,e){function f(a){var b=da.create("span",{id:p,"data-mce-bogus":!0,style:q?"color:red":""});return a&&b.appendChild(j.getDoc().createTextNode(ka)),b}function g(a,b){for(;a;){if(3===a.nodeType&&a.nodeValue!==ka||a.childNodes.length>1)return!1;b&&1===a.nodeType&&b.push(a),a=a.firstChild}return!0}function h(a){for(;a;){if(a.id===p)return a;a=a.parentNode}}function i(b){var c;if(b)for(c=new a(b,b),b=c.current();b;b=c.next())if(3===b.nodeType)return b}function l(a,b){var c,d;if(a)d=ea.getRng(!0),g(a)?(b!==!1&&(d.setStartBefore(a),d.setEndBefore(a)),da.remove(a)):(c=i(a),c.nodeValue.charAt(0)===ka&&(c.deleteData(0,1),d.startContainer==c&&d.startOffset>0&&d.setStart(c,d.startOffset-1),d.endContainer==c&&d.endOffset>0&&d.setEnd(c,d.endOffset-1)),da.remove(a,1)),ea.setRng(d);else if(a=h(ea.getStart()),!a)for(;a=da.get(p);)l(a,!1)}function m(){var a,b,e,g,j,k,l;a=ea.getRng(!0),g=a.startOffset,k=a.startContainer,l=k.nodeValue,b=h(ea.getStart()),b&&(e=i(b));var m=/[^\s\u00a0\u00ad\u200b\ufeff]/;l&&g>0&&g=0;l--)i.appendChild(da.clone(o[l],!1)),i=i.firstChild;i.appendChild(da.doc.createTextNode(ka)),i=i.firstChild;var p=da.getParent(j,k);p&&da.isEmpty(p)?j.parentNode.replaceChild(m,j):da.insertAfter(m,j),ea.setCursorLocation(i,1),da.isEmpty(j)&&da.remove(j)}}function o(){var a;a=h(ea.getStart()),a&&!da.isEmpty(a)&&sa(a,function(a){1!=a.nodeType||a.id===p||da.isEmpty(a)||da.setAttrib(a,"data-mce-bogus",null)},"childNodes")}var p="_mce_caret",q=j.settings.caret_debug;j._hasCaretEvents||(ba=function(){var a,b=[];if(g(h(ea.getStart()),b))for(a=b.length;a--;)da.setAttrib(b[a],"data-mce-bogus","1")},aa=function(a){var b=a.keyCode;l(),8==b&&ea.isCollapsed()&&ea.getStart().innerHTML==ka&&l(h(ea.getStart())),37!=b&&39!=b||l(h(ea.getStart())),o()},j.on("SetContent",function(a){a.selection&&o()}),j._hasCaretEvents=!0),"apply"==b?m():n()}function Z(b){var c,d,e,f=b.startContainer,g=b.startOffset;if((b.startContainer!=b.endContainer||!m(b.startContainer.childNodes[b.startOffset]))&&(3==f.nodeType&&g>=f.nodeValue.length&&(g=ja(f),f=f.parentNode),1==f.nodeType))for(e=f.childNodes,gi-h?(k.push([c,d[n]]),++n):(k.push([b,e[o]]),++o);else{j(f,m.start,h,m.start-m.diag,k);for(var p=m.start;p=a&&s>=c&&d[r]===e[s];)h[q]=r--,s--;if(l%2===0&&-o<=p&&p<=o&&h[q]<=g[q+l])return k(h[q],p+a-c,b,f)}}},m=[];return j(0,d.length,0,e.length,m),m};return{KEEP:a,DELETE:c,INSERT:b,diff:d}}),g("4h",["1g","d","5e"],function(a,b,c){var d=function(a){return 1===a.nodeType?a.outerHTML:3===a.nodeType?b.encodeRaw(a.data,!1):8===a.nodeType?"":""},e=function(a){var b,c,d;for(d=document.createElement("div"),b=document.createDocumentFragment(),a&&(d.innerHTML=a);c=d.firstChild;)b.appendChild(c);return b},f=function(a,b,c){var d=e(b);if(a.hasChildNodes()&&c0})},j=function(b,e){var f=a.map(e.childNodes,d);return h(c.diff(f,b),e),e};return{read:i,write:j}}),g("1z",["1g","4h"],function(a,b){var c=function(a){return a.indexOf("")!==-1},d=function(a){return{type:"fragmented",fragments:a,content:"",bookmark:null,beforeBookmark:null}},e=function(a){return{type:"complete",fragments:null,content:a,bookmark:null,beforeBookmark:null}},f=function(f){var g,h,i;return g=b.read(f.getBody()),i=a.map(g,function(a){return f.serializer.trimContent(a)}),h=i.join(""),c(h)?d(i):e(h)},g=function(a,c,d){"fragmented"===c.type?b.write(c.fragments,a.getBody()):a.setContent(c.content,{format:"raw"}),a.selection.moveToBookmark(d?c.beforeBookmark:c.bookmark)},h=function(a){return"fragmented"===a.type?a.fragments.join(""):a.content},i=function(a,b){return h(a)===h(b)};return{createFragmentedLevel:d,createCompleteLevel:e,createFromEditor:f,applyToEditor:g,isEq:i}}),g("u",["p","9","1z"],function(a,b,c){return function(a){function d(b){a.setDirty(b)}function e(a){n(!1),i.add({},a)}function f(){i.typing&&(n(!1),i.add())}var g,h,i=this,j=0,k=[],l=0,m=function(){return 0===l},n=function(a){m()&&(i.typing=a)};return a.on("init",function(){i.add()}),a.on("BeforeExecCommand",function(a){var b=a.command;"Undo"!==b&&"Redo"!==b&&"mceRepaint"!==b&&(f(),i.beforeChange())}),a.on("ExecCommand",function(a){var b=a.command;"Undo"!==b&&"Redo"!==b&&"mceRepaint"!==b&&e(a)}),a.on("ObjectResizeStart Cut",function(){i.beforeChange()}),a.on("SaveContent ObjectResized blur",e),a.on("DragEnd",e),a.on("KeyUp",function(b){var f=b.keyCode;b.isDefaultPrevented()||((f>=33&&f<=36||f>=37&&f<=40||45===f||b.ctrlKey)&&(e(),a.nodeChanged()),46!==f&&8!==f||a.nodeChanged(),h&&i.typing&&c.isEq(c.createFromEditor(a),k[0])===!1&&(a.isDirty()===!1&&(d(!0),a.fire("change",{level:k[0],lastLevel:null})),a.fire("TypingUndo"),h=!1,a.nodeChanged()))}),a.on("KeyDown",function(a){var b=a.keyCode;if(!a.isDefaultPrevented()){if(b>=33&&b<=36||b>=37&&b<=40||45===b)return void(i.typing&&e(a));var c=a.ctrlKey&&!a.altKey||a.metaKey;!(b<16||b>20)||224===b||91===b||i.typing||c||(i.beforeChange(),n(!0),i.add({},a),h=!0)}}),a.on("MouseDown",function(a){i.typing&&e(a)}),a.addShortcut("meta+z","","Undo"),a.addShortcut("meta+y,meta+shift+z","","Redo"),a.on("AddUndo Undo Redo ClearUndos",function(b){b.isDefaultPrevented()||a.nodeChanged()}),i={data:k,typing:!1,beforeChange:function(){m()&&(g=a.selection.getBookmark(2,!0))},add:function(e,f){var h,i,l,n=a.settings;if(l=c.createFromEditor(a),e=e||{},e=b.extend(e,l),m()===!1||a.removed)return null;if(i=k[j],a.fire("BeforeAddUndo",{level:e,lastLevel:i,originalEvent:f}).isDefaultPrevented())return null;if(i&&c.isEq(i,e))return null;if(k[j]&&(k[j].beforeBookmark=g),n.custom_undo_redo_levels&&k.length>n.custom_undo_redo_levels){for(h=0;h0&&(d(!0),a.fire("change",o)),e},undo:function(){var b;return i.typing&&(i.add(),i.typing=!1,n(!1)),j>0&&(b=k[--j],c.applyToEditor(a,b,!0),d(!0),a.fire("undo",{level:b})),b},redo:function(){var b;return j0||i.typing&&k[0]&&!c.isEq(c.createFromEditor(a),k[0])},hasRedo:function(){return j0}function h(a){return a<0}function i(a,b){for(var c;c=a(b);)if(!y(c))return c;return null}function j(a,c,d,e,f){var j=new b(a,e);if(h(c)){if((v(a)||y(a))&&(a=i(j.prev,!0),d(a)))return a;for(;a=i(j.prev,f);)if(d(a))return a}if(g(c)){if((v(a)||y(a))&&(a=i(j.next,!0),d(a)))return a;for(;a=i(j.next,f);)if(d(a))return a}return null}function k(a,b){for(a=a.parentNode;a&&a!=b;a=a.parentNode)if(u(a))return a;return b}function l(a,b){for(;a&&a!=b;){if(w(a))return a;a=a.parentNode}return null}function m(a,b,c){return l(a.container(),c)==l(b.container(),c)}function n(a,b,c){return k(a.container(),c)==k(b.container(),c)}function o(a,b){var c,d;return b?(c=b.container(),d=b.offset(),A(c)?c.childNodes[d+a]:null):null}function p(a,b){var c=b.ownerDocument.createRange();return a?(c.setStartBefore(b),c.setEndBefore(b)):(c.setStartAfter(b),c.setEndAfter(b)),c}function q(a,b,c){return l(b,a)==l(c,a)}function r(a,b,c){var d,e;for(e=a?"previousSibling":"nextSibling";c&&c!=b;){if(d=c[e],x(d)&&(d=d[e]),v(d)){if(q(b,d,c))return d;break}if(B(d))break;c=c.parentNode}return null}function s(a,b,d){var f,g,h,i,j=z(r,!0,b),k=z(r,!1,b);if(g=d.startContainer,h=d.startOffset,e.isCaretContainerBlock(g)){if(A(g)||(g=g.parentNode),i=g.getAttribute("data-mce-caret"),"before"==i&&(f=g.nextSibling,v(f)))return C(f);if("after"==i&&(f=g.previousSibling,v(f)))return D(f)}if(!d.collapsed)return d;if(c.isText(g)){if(x(g)){if(1===a){if(f=k(g))return C(f);if(f=j(g))return D(f)}if(a===-1){if(f=j(g))return D(f);if(f=k(g))return C(f)}return d}if(e.endsWithCaretContainer(g)&&h>=g.data.length-1)return 1===a&&(f=k(g))?C(f):d;if(e.startsWithCaretContainer(g)&&h<=1)return a===-1&&(f=j(g))?D(f):d;if(h===g.data.length)return f=k(g),f?C(f):d;if(0===h)return f=j(g),f?D(f):d}return d}function t(a,b){return v(o(a,b))}var u=c.isContentEditableTrue,v=c.isContentEditableFalse,w=c.matchStyleValues("display","block table table-cell table-caption list-item"),x=e.isCaretContainer,y=e.isCaretContainerBlock,z=a.curry,A=c.isElement,B=f.isCaretCandidate,C=z(p,!0),D=z(p,!1);return{isForwards:g,isBackwards:h,findNode:j,getEditingHost:k,getParentBlock:l,isInSameBlock:m,isInSameEditingHost:n,isBeforeContentEditableFalse:z(t,0),isAfterContentEditableFalse:z(t,-1),normalizeRange:s}}),g("4m",["1j","44","1p","5i","1g","1w"],function(a,b,c,d,e,f){function g(a,b){for(var c=[];a&&a!=b;)c.push(a),a=a.parentNode;return c}function h(a,b){return a.hasChildNodes()&&b0)return c(v,--w);if(p(a)&&w0&&(y=h(v,w-1),r(y)))return!s(y)&&(z=d.findNode(y,a,t,y))?m(z)?c(z,z.data.length):c.after(z):m(y)?c(y,y.data.length):c.before(y);if(p(a)&&w0?b.from(m):b.none()},l=function(a,b,c){return a?i.isEmpty(b)?(d.remove(b),g.positionIn(!0,c.dom())):g.positionIn(!1,b.dom()).bind(function(d){return k(a,c,b,d)}):i.isEmpty(c)?(d.remove(c),g.positionIn(!0,b.dom())):g.positionIn(!1,c.dom()).bind(function(d){return k(a,b,c,d)})};return{mergeBlocks:l}}),g("4i",["5f","5g"],function(a,b){var c=function(c,d){var e;return e=a.read(c.getBody(),d,c.selection.getRng()).bind(function(a){return b.mergeBlocks(d,a.from().block(),a.to().block())}),e.each(function(a){c.selection.setRng(a.toRange())}),e.isSome()};return{backspaceDelete:c}}),g("4j",["5d","1q","1r","5h","5g"],function(a,b,c,d,e){var f=function(f,g){var h=g.getRng();return a.liftN([d.getParentTextBlock(f,c.fromDom(h.startContainer)),d.getParentTextBlock(f,c.fromDom(h.endContainer))],function(a,c){return b.eq(a,c)===!1&&(h.deleteContents(),e.mergeBlocks(!0,a,c).each(function(a){g.setRng(a.toRange())}),!0)}).getOr(!1)},g=function(a,b){var d=c.fromDom(a.getBody());return a.selection.isCollapsed()===!1&&f(d,a.selection)};return{backspaceDelete:g}}),g("66",["3x","63","60","3y","3z","49"],function(a,b,c,d,e,f){var g=function(g){if(!c.isArray(g))throw new e("cases must be an array");if(0===g.length)throw new e("there must be at least one case");var h=[],i={};return a.each(g,function(j,k){var l=b.keys(j);if(1!==l.length)throw new e("one and only one name per case");var m=l[0],n=j[m];if(void 0!==i[m])throw new e("duplicate key detected:"+m);if("cata"===m)throw new e("cannot have a case named cata (sorry)");if(!c.isArray(n))throw new e("case arguments must be an array");h.push(m),i[m]=function(){var c=arguments.length;if(c!==n.length)throw new e("Wrong number of arguments to case "+m+". Expected "+n.length+" ("+n+"), got "+c);for(var i=new d(c),j=0;jk.before(b).offset()},p=function(a,b){return o(b,a)?new k(b.container(),b.offset()-1):b},q=function(a){return m.isText(a)?new k(a,0):k.before(a)},r=function(a){return m.isText(a)?new k(a,a.data.length):k.after(a)},s=function(a){return j.isCaretCandidate(a.previousSibling)?b.some(r(a.previousSibling)):a.previousSibling?n.findCaretPositionIn(a.previousSibling,!1):b.none()},t=function(a){return j.isCaretCandidate(a.nextSibling)?b.some(q(a.nextSibling)):a.nextSibling?n.findCaretPositionIn(a.nextSibling,!0):b.none()},u=function(a,c){var d=k.before(c.previousSibling?c.previousSibling:c.parentNode);return n.findCaretPosition(a,!1,d).fold(function(){return n.findCaretPosition(a,!0,k.after(c))},b.some)},v=function(a,c){return n.findCaretPosition(a,!0,k.after(c)).fold(function(){return n.findCaretPosition(a,!1,k.before(c))},b.some)},w=function(a,b){return s(b).orThunk(function(){return t(b)}).orThunk(function(){return u(a,b)})},x=function(a,b){return t(b).orThunk(function(){return s(b)}).orThunk(function(){return v(a,b)})},y=function(a,b,c){return a?x(b,c):w(b,c)},z=function(b,c,d){return y(b,c,d).map(a.curry(p,d))},A=function(a,b,c){c.fold(function(){a.focus()},function(c){a.selection.setRng(c.toRange(),b)})},B=function(a){return function(b){return b.dom()===a}},C=function(a,b){return b&&a.schema.getBlockElements().hasOwnProperty(g.name(b))},D=function(a){if(l.isEmpty(a)){var c=f.fromHtml('
');return e.empty(a),d.append(a,c),b.some(k.before(c.dom()))}return b.none()},E=function(a,b){return c.liftN([i.prevSibling(a),i.nextSibling(a),b],function(b,c,d){var f,g=b.dom(),h=c.dom();return m.isText(g)&&m.isText(h)?(f=g.data.length,g.appendData(h.data),e.remove(c),e.remove(a),d.container()===h?new k(g,f):d):(e.remove(a),d)}).orThunk(function(){return e.remove(a),b})},F=function(c,d,e){var f=z(d,c.getBody(),e.dom()),g=h.ancestor(e,a.curry(C,c),B(c.getBody())),i=E(e,f);g.bind(D).fold(function(){A(c,d,i)},function(a){A(c,d,b.some(a))})};return{deleteElement:F}}),g("4k",["1r","1p","5i","5f","5j","5k","5g","1j"],function(a,b,c,d,e,f,g,h){var i=function(b,c){return function(d){return f.deleteElement(b,c,a.fromDom(d)),!0}},j=function(a,c){return function(d){var e=c?b.before(d):b.after(d);return a.selection.setRng(e.toRange()),!0}},k=function(a){return function(b){return a.selection.setRng(b.toRange()),!0}},l=function(a,b){var c=e.read(a.getBody(),b,a.selection.getRng()).map(function(c){return c.fold(i(a,b),j(a,b),k(a))});return c.getOr(!1)},m=function(b,c){var d=b.selection.getNode();return!!h.isContentEditableFalse(d)&&(f.deleteElement(b,c,a.fromDom(b.selection.getNode())),!0)},n=function(a,b){for(;b&&b!==a;){if(h.isContentEditableTrue(b)||h.isContentEditableFalse(b))return b;b=b.parentNode}return null},o=function(a){var c,d=n(a.getBody(),a.selection.getNode());return h.isContentEditableTrue(d)&&a.dom.isBlock(d)&&a.dom.isEmpty(d)&&(c=a.dom.create("br",{"data-mce-bogus":"1"}),a.dom.setHTML(d,""),d.appendChild(c),a.selection.setRng(b.before(c).toRange())),!0},p=function(a,b){return a.selection.isCollapsed()?l(a,b):m(a,b)};return{backspaceDelete:p,paddEmptyElement:o}}),g("68",["1m","1j","1l"],function(a,b,c){var d=b.isText,e=function(a){return d(a)&&a.data[0]===c.ZWSP},f=function(a){return d(a)&&a.data[a.data.length-1]===c.ZWSP},g=function(a){return a.ownerDocument.createTextNode(c.ZWSP)},h=function(a){if(d(a.previousSibling))return f(a.previousSibling)?a.previousSibling:(a.previousSibling.appendData(c.ZWSP),a.previousSibling);if(d(a))return e(a)?a:(a.insertData(0,c.ZWSP),a);var b=g(a);return a.parentNode.insertBefore(b,a),b},i=function(a){if(d(a.nextSibling))return e(a.nextSibling)?a.nextSibling:(a.nextSibling.insertData(0,c.ZWSP),a.nextSibling);if(d(a))return f(a)?a:(a.appendData(c.ZWSP),a);var b=g(a);return a.nextSibling?a.parentNode.insertBefore(b,a.nextSibling):a.parentNode.appendChild(b),b},j=function(a,b){return a?h(b):i(b)};return{insertInline:j,insertInlineBefore:a.curry(j,!0),insertInlineAfter:a.curry(j,!1)}}),g("69",["3x","1k","1p","1j","1l","9"],function(a,b,c,d,e,f){var g=d.isElement,h=d.isText,i=function(a){var b=a.parentNode;b&&b.removeChild(a)},j=function(a){try{return a.nodeValue}catch(a){return""}},k=function(a,b){0===b.length?i(a):a.nodeValue=b},l=function(a){var b=e.trim(a);return{count:a.length-b.length,text:b}},m=function(a,b){return s(a),b},n=function(a,b){var d=l(a.data.substr(0,b.offset())),e=l(a.data.substr(b.offset())),f=d.text+e.text;return f.length>0?(k(a,f),new c(a,b.offset()-d.count)):b},o=function(b,d){var e=d.container(),f=a.indexOf(e.childNodes,b).map(function(a){return a0&&h(a[a.length-1])?a.slice(0,-1):a},j=function(a,b){var c=a.getParent(b,a.isBlock);return c&&"LI"===c.nodeName?c:null},k=function(a,b){return!!j(a,b)},l=function(a,b){var c=b.cloneRange(),d=b.cloneRange();return c.setStartBefore(a),d.setEndAfter(a),[c.cloneContents(),d.cloneContents()]},m=function(a,d){var e=c.before(a),f=new b(d),g=f.next(e);return g?g.toRange():null},n=function(a,d){var e=c.after(a),f=new b(d),g=f.prev(e);return g?g.toRange():null},o=function(b,c,d,e){var f=l(b,e),g=b.parentNode;return g.insertBefore(f[0],b),a.each(c,function(a){g.insertBefore(a,b)}),g.insertBefore(f[1],b),g.removeChild(b),n(c[c.length-1],d)},p=function(b,c,d){var e=b.parentNode;return a.each(c,function(a){e.insertBefore(a,b)}),m(b,d)},q=function(a,b,c,d){return d.insertAfter(b.reverse(),a),n(b[0],c)},r=function(a,d,e,h){var k=f(d,a,h),l=j(d,e.startContainer),m=i(g(k.firstChild)),n=1,r=2,s=d.getRoot(),t=function(a){var f=c.fromRangeStart(e),g=new b(d.getRoot()),h=a===n?g.prev(f):g.next(f);return!h||j(d,h.getNode())!==l};return t(n)?p(l,m,s):t(r)?q(l,m,s,d):o(l,m,s,e)};return{isListFragment:d,insertAtCaret:r,isParentBlockLi:k,trimListItems:i,listItems:g}}),g("21",["1p","4m","1v","1j","4n","6","n","4o","9"],function(a,b,c,d,e,f,g,h,i){var j=d.matchNodeNames("td th"),k=function(a,b,c){if("all"===c.getAttribute("data-mce-bogus"))c.parentNode.insertBefore(a.dom.createFragment(b),c);else{var d=c.firstChild,e=c.lastChild;!d||d===e&&"BR"===d.nodeName?a.dom.setHTML(c,b):a.selection.setContent(b)}},l=function(d,l,m){function n(a){function b(a){return d[a]&&3==d[a].nodeType}var c,d,e;return c=I.getRng(!0),d=c.startContainer,e=c.startOffset,3==d.nodeType&&(e>0?a=a.replace(/^ /," "):b("previousSibling")||(a=a.replace(/^ /," ")),e|)$/," "):b("nextSibling")||(a=a.replace(/( | )(
|)$/," "))),a}function o(){var a,b,c;a=I.getRng(!0),b=a.startContainer,c=a.startOffset,3==b.nodeType&&a.collapsed&&("\xa0"===b.data[c]?(b.deleteData(c,1),/[\u00a0| ]$/.test(l)||(l+=" ")):"\xa0"===b.data[c-1]&&(b.deleteData(c-1,1),/[\u00a0| ]$/.test(l)||(l=" "+l)))}function p(){if(G){var a=d.getBody(),b=new c(J);i.each(J.select("*[data-mce-fragment]"),function(c){for(var d=c.parentNode;d&&d!=a;d=d.parentNode)H[c.nodeName.toLowerCase()]&&b.compare(d,c)&&J.remove(c,!0)})}}function q(a){for(var b=a;b=b.walk();)1===b.type&&b.attr("data-mce-fragment","1")}function r(a){i.each(a.getElementsByTagName("*"),function(a){a.removeAttribute("data-mce-fragment")})}function s(a){return!!a.getAttribute("data-mce-fragment")}function t(a){return a&&!d.schema.getShortEndedElements()[a.nodeName]}function u(c){function e(a){for(var b=d.getBody();a&&a!==b;a=a.parentNode)if("false"===d.dom.getContentEditable(a))return a;return null}function g(c){var e=a.fromRangeStart(c),f=new b(d.getBody());if(e=f.next(e))return e.toRange()}var h,i,k;if(c){if(I.scrollIntoView(c),h=e(c))return J.remove(c),void I.select(h);C=J.createRng(),D=c.previousSibling,D&&3==D.nodeType?(C.setStart(D,D.nodeValue.length),f.ie||(E=c.nextSibling,E&&3==E.nodeType&&(D.appendData(E.data),E.parentNode.removeChild(E)))):(C.setStartBefore(c),C.setEndBefore(c)),i=J.getParent(c,J.isBlock),J.remove(c),i&&J.isEmpty(i)&&(d.$(i).empty(),C.setStart(i,0),C.setEnd(i,0),j(i)||s(i)||!(k=g(C))?J.add(i,J.create("br",{"data-mce-bogus":"1"})):(C=k,J.remove(i))),I.setRng(C)}}var v,w,x,y,z,A,B,C,D,E,F,G,H=d.schema.getTextInlineElements(),I=d.selection,J=d.dom;/^ | $/.test(l)&&(l=n(l)),v=d.parser,G=m.merge,w=new g({validate:d.settings.validate},d.schema),F='​',A={content:l,format:"html",selection:!0},d.fire("BeforeSetContent",A),l=A.content,l.indexOf("{$caret}")==-1&&(l+="{$caret}"),l=l.replace(/\{\$caret\}/,F),C=I.getRng();var K=C.startContainer||(C.parentElement?C.parentElement():null),L=d.getBody();K===L&&I.isCollapsed()&&J.isBlock(L.firstChild)&&t(L.firstChild)&&J.isEmpty(L.firstChild)&&(C=J.createRng(),C.setStart(L.firstChild,0),C.setEnd(L.firstChild,0),I.setRng(C)),I.isCollapsed()||(d.selection.setRng(e.normalize(d.selection.getRng())),d.getDoc().execCommand("Delete",!1,null),o()),x=I.getNode();var M={context:x.nodeName.toLowerCase(),data:m.data};if(z=v.parse(l,M),m.paste===!0&&h.isListFragment(z)&&h.isParentBlockLi(J,x))return C=h.insertAtCaret(w,J,d.selection.getRng(!0),z),d.selection.setRng(C),void d.fire("SetContent",A);if(q(z),D=z.lastChild,"mce_marker"==D.attr("id"))for(B=D,D=D.prev;D;D=D.walk(!0))if(3==D.type||!J.isBlock(D.name)){d.schema.isValidChild(D.parent.name,"span")&&D.parent.insert(B,D,"br"===D.name);break}if(d._selectionOverrides.showBlockCaretContainer(x),M.invalid){for(I.setContent(F),x=I.getNode(),y=d.getBody(),9==x.nodeType?x=D=y:D=x;D!==y;)x=D,D=D.parentNode;l=x==y?y.innerHTML:J.getOuterHTML(x),l=w.serialize(v.parse(l.replace(//i,function(){return w.serialize(z)}))),x==y?J.setHTML(y,l):J.setOuterHTML(x,l)}else l=w.serialize(z),k(d,l,x);p(),u(J.get("mce_marker")),r(d.getBody()),d.fire("SetContent",A),d.addVisual()},m=function(a){var b;return"string"!=typeof a?(b=i.extend({paste:a.paste,data:{paste:a.paste}},a),{content:a.content,details:b}):{content:a,details:{}}},n=function(a,b){var c=m(b);l(a,c.content,c.details)};return{insertAtCaret:n}}),g("v",["20","1j","h","c","6","21","9"],function(a,b,c,d,e,f,g){var h=g.each,i=g.extend,j=g.map,k=g.inArray,l=g.explode,m=e.ie&&e.ie<11,n=!0,o=!1;return function(g){function p(a,b,c,d){var e,f,i=0;if(!g.removed){if(/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint)$/.test(a)||d&&d.skip_focus||g.focus(),d=g.fire("BeforeExecCommand",{command:a,ui:b,value:c}),d.isDefaultPrevented())return!1;if(f=a.toLowerCase(),e=H.exec[f])return e(f,b,c),g.fire("ExecCommand",{command:a,ui:b,value:c}),!0;if(h(g.plugins,function(d){if(d.execCommand&&d.execCommand(a,b,c))return g.fire("ExecCommand",{command:a,ui:b,value:c}),i=!0,!1}),i)return i;if(g.theme&&g.theme.execCommand&&g.theme.execCommand(a,b,c))return g.fire("ExecCommand",{command:a,ui:b,value:c}),!0;try{i=g.getDoc().execCommand(a,b,c)}catch(a){}return!!i&&(g.fire("ExecCommand",{command:a,ui:b,value:c}),!0)}}function q(a){var b;if(!g.quirks.isHidden()&&!g.removed){if(a=a.toLowerCase(),b=H.state[a])return b(a);try{return g.getDoc().queryCommandState(a)}catch(a){}return!1}}function r(a){var b;if(!g.quirks.isHidden()&&!g.removed){if(a=a.toLowerCase(),b=H.value[a])return b(a);try{return g.getDoc().queryCommandValue(a)}catch(a){}}}function s(a,b){b=b||"exec",h(a,function(a,c){h(c.toLowerCase().split(","),function(c){H[b][c]=a})})}function t(a,b,c){a=a.toLowerCase(),H.exec[a]=function(a,d,e,f){return b.call(c||g,d,e,f)}}function u(a){if(a=a.toLowerCase(),H.exec[a])return!0;try{return g.getDoc().queryCommandSupported(a)}catch(a){}return!1}function v(a,b,c){a=a.toLowerCase(),H.state[a]=function(){return b.call(c||g)}}function w(a,b,c){a=a.toLowerCase(),H.value[a]=function(){return b.call(c||g)}}function x(a){return a=a.toLowerCase(),!!H.exec[a]}function y(a,b,c){return void 0===b&&(b=o),void 0===c&&(c=null),g.getDoc().execCommand(a,b,c)}function z(a){return F.match(a)}function A(a,b){F.toggle(a,b?{value:b}:void 0),g.nodeChanged()}function B(a){G=E.getBookmark(a)}function C(){E.moveToBookmark(G)}var D,E,F,G,H={state:{},exec:{},value:{}},I=g.settings;g.on("PreInit",function(){D=g.dom,E=g.selection,I=g.settings,F=g.formatter}),i(this,{execCommand:p,queryCommandState:q,queryCommandValue:r,queryCommandSupported:u,addCommands:s,addCommand:t,addQueryStateHandler:v,addQueryValueHandler:w,hasCustomCommand:x}),s({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){g.undoManager.add()},"Cut,Copy,Paste":function(a){var b,c=g.getDoc();try{y(a)}catch(a){b=n}if("paste"!==a||c.queryCommandEnabled(a)||(b=!0),b||!c.queryCommandSupported(a)){var d=g.translate("Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X/C/V keyboard shortcuts instead.");e.mac&&(d=d.replace(/Ctrl\+/g,"\u2318+")),g.notificationManager.open({text:d,type:"error"})}},unlink:function(){if(E.isCollapsed()){var a=g.dom.getParent(g.selection.getStart(),"a");return void(a&&g.dom.remove(a,!0))}F.remove("link")},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,JustifyNone":function(a){var b=a.substring(7);"full"==b&&(b="justify"),h("left,center,right,justify".split(","),function(a){b!=a&&F.remove("align"+a)}),"none"!=b&&A("align"+b)},"InsertUnorderedList,InsertOrderedList":function(a){var b,c;y(a),b=D.getParent(E.getNode(),"ol,ul"),b&&(c=b.parentNode,/^(H[1-6]|P|ADDRESS|PRE)$/.test(c.nodeName)&&(B(),D.split(c,b),C()))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(a){A(a)},"ForeColor,HiliteColor,FontName":function(a,b,c){A(a,c)},FontSize:function(a,b,c){var d,e;c>=1&&c<=7&&(e=l(I.font_size_style_values),d=l(I.font_size_classes),c=d?d[c-1]||c:e[c-1]||c),A(a,c)},RemoveFormat:function(a){F.remove(a)},mceBlockQuote:function(){A("blockquote")},FormatBlock:function(a,b,c){return A(c||"p")},mceCleanup:function(){var a=E.getBookmark();g.setContent(g.getContent({cleanup:n}),{cleanup:n}),E.moveToBookmark(a)},mceRemoveNode:function(a,b,c){var d=c||E.getNode();d!=g.getBody()&&(B(),g.dom.remove(d,n),C())},mceSelectNodeDepth:function(a,b,c){var d=0;D.getParent(E.getNode(),function(a){if(1==a.nodeType&&d++==c)return E.select(a),o},g.getBody())},mceSelectNode:function(a,b,c){E.select(c)},mceInsertContent:function(a,b,c){f.insertAtCaret(g,c)},mceInsertRawHTML:function(a,b,c){E.setContent("tiny_mce_marker"),g.setContent(g.getContent().replace(/tiny_mce_marker/g,function(){return c}))},mceToggleFormat:function(a,b,c){A(c)},mceSetContent:function(a,b,c){g.setContent(c)},"Indent,Outdent":function(a){var b,c,d;b=I.indentation,c=/[a-z%]+$/i.exec(b),b=parseInt(b,10),q("InsertUnorderedList")||q("InsertOrderedList")?y(a):(I.forced_root_block||D.getParent(E.getNode(),D.isBlock)||F.apply("div"),h(E.getSelectedBlocks(),function(e){if("false"!==D.getContentEditable(e)&&"LI"!==e.nodeName){var f=g.getParam("indent_use_margin",!1)?"margin":"padding";f="TABLE"===e.nodeName?"margin":f,f+="rtl"==D.getStyle(e,"direction",!0)?"Right":"Left","outdent"==a?(d=Math.max(0,parseInt(e.style[f]||0,10)-b),D.setStyle(e,f,d?d+c:"")):(d=parseInt(e.style[f]||0,10)+b+c,D.setStyle(e,f,d))}}))},mceRepaint:function(){},InsertHorizontalRule:function(){g.execCommand("mceInsertContent",!1,"
")},mceToggleVisualAid:function(){g.hasVisual=!g.hasVisual,g.addVisual()},mceReplaceContent:function(a,b,c){g.execCommand("mceInsertContent",!1,c.replace(/\{\$selection\}/g,E.getContent({format:"text"})))},mceInsertLink:function(a,b,c){var d;"string"==typeof c&&(c={href:c}),d=D.getParent(E.getNode(),"a"),c.href=c.href.replace(" ","%20"),d&&c.href||F.remove("link"),c.href&&F.apply("link",c,d)},selectAll:function(){var a,c=D.getRoot();if(E.getRng().setStart){var d=D.getParent(E.getStart(),b.isContentEditableTrue);d&&(a=D.createRng(),a.selectNodeContents(d),E.setRng(a))}else a=E.getRng(),a.item||(a.moveToElementText(c),a.select())},"delete":function(){a.deleteCommand(g)},forwardDelete:function(){a.forwardDeleteCommand(g)},mceNewDocument:function(){g.setContent("")},InsertLineBreak:function(a,b,e){function f(){for(var a,b=new d(p,r),c=g.schema.getNonEmptyElements();a=b.next();)if(c[a.nodeName.toLowerCase()]||a.length>0)return!0}var h,i,j,k=e,l=E.getRng(!0);new c(D).normalize(l);var o=l.startOffset,p=l.startContainer;if(1==p.nodeType&&p.hasChildNodes()){var q=o>p.childNodes.length-1;p=p.childNodes[Math.min(o,p.childNodes.length-1)]||p,o=q&&3==p.nodeType?p.nodeValue.length:0}var r=D.getParent(p,D.isBlock),s=r?r.nodeName.toUpperCase():"",t=r?D.getParent(r.parentNode,D.isBlock):null,u=t?t.nodeName.toUpperCase():"",v=k&&k.ctrlKey;"LI"!=u||v||(r=t,s=u),p&&3==p.nodeType&&o>=p.nodeValue.length&&(m||f()||(h=D.create("br"),l.insertNode(h),l.setStartAfter(h),l.setEndAfter(h),i=!0)),h=D.create("br"),l.insertNode(h);var w=D.doc.documentMode;return m&&"PRE"==s&&(!w||w<8)&&h.parentNode.insertBefore(D.doc.createTextNode("\r"),h),j=D.create("span",{}," "),h.parentNode.insertBefore(j,h),E.scrollIntoView(j),D.remove(j),i?(l.setStartBefore(h),l.setEndBefore(h)):(l.setStartAfter(h),l.setEndAfter(h)),E.setRng(l),g.undoManager.add(),n}}),s({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(a){var b="align"+a.substring(7),c=E.isCollapsed()?[D.getParent(E.getNode(),D.isBlock)]:E.getSelectedBlocks(),d=j(c,function(a){return!!F.matchNode(a,b)});return k(d,n)!==-1},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(a){return z(a)},mceBlockQuote:function(){return z("blockquote")},Outdent:function(){var a;if(I.inline_styles){if((a=D.getParent(E.getStart(),D.isBlock))&&parseInt(a.style.paddingLeft,10)>0)return n;if((a=D.getParent(E.getEnd(),D.isBlock))&&parseInt(a.style.paddingLeft,10)>0)return n}return q("InsertUnorderedList")||q("InsertOrderedList")||!I.inline_styles&&!!D.getParent(E.getNode(),"BLOCKQUOTE")},"InsertUnorderedList,InsertOrderedList":function(a){var b=D.getParent(E.getNode(),"ul,ol");return b&&("insertunorderedlist"===a&&"UL"===b.tagName||"insertorderedlist"===a&&"OL"===b.tagName)}},"state"),s({"FontSize,FontName":function(a){var b,c=0;return(b=D.getParent(E.getNode(),"span"))&&(c="fontsize"==a?b.style.fontSize:b.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()),c}},"value"),s({Undo:function(){g.undoManager.undo()},Redo:function(){g.undoManager.redo()}})}}),g("w",["22","9"],function(a,b){function c(b,g){var h,i,j=this;if(b=e(b),g=j.settings=g||{},h=g.base_uri,/^([\w\-]+):([^\/]{2})/i.test(b)||/^\s*#/.test(b))return void(j.source=b);var k=0===b.indexOf("//");0!==b.indexOf("/")||k||(b=(h?h.protocol||"http":"http")+"://mce_host"+b),/^[\w\-]*:?\/\//.test(b)||(i=g.base_uri?g.base_uri.path:new c(a.location.href).directory,""===g.base_uri.protocol?b="//mce_host"+j.toAbsPath(i,b):(b=/([^#?]*)([#?]?.*)/.exec(b),b=(h&&h.protocol||"http")+"://mce_host"+j.toAbsPath(i,b[1])+b[2])),b=b.replace(/@@/g,"(mce_at)"),b=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(b),d(f,function(a,c){var d=b[c];d&&(d=d.replace(/\(mce_at\)/g,"@@")),j[a]=d}),h&&(j.protocol||(j.protocol=h.protocol),j.userInfo||(j.userInfo=h.userInfo),j.port||"mce_host"!==j.host||(j.port=h.port),j.host&&"mce_host"!==j.host||(j.host=h.host),j.source=""),k&&(j.protocol="")}var d=b.each,e=b.trim,f="source protocol authority userInfo user password host port relative path directory file query anchor".split(" "),g={ftp:21,http:80,https:443,mailto:25};return c.prototype={setPath:function(a){var b=this;a=/^(.*?)\/?(\w+)?$/.exec(a),b.path=a[0],b.directory=a[1],b.file=a[2],b.source="",b.getURI()},toRelative:function(a){var b,d=this;if("./"===a)return a;if(a=new c(a,{base_uri:d}),"mce_host"!=a.host&&d.host!=a.host&&a.host||d.port!=a.port||d.protocol!=a.protocol&&""!==a.protocol)return a.getURI();var e=d.getURI(),f=a.getURI();return e==f||"/"==e.charAt(e.length-1)&&e.substr(0,e.length-1)==f?e:(b=d.toRelPath(d.path,a.path),a.query&&(b+="?"+a.query),a.anchor&&(b+="#"+a.anchor),b)},toAbsolute:function(a,b){return a=new c(a,{base_uri:this}),a.getURI(b&&this.isSameOrigin(a))},isSameOrigin:function(a){if(this.host==a.host&&this.protocol==a.protocol){if(this.port==a.port)return!0;var b=g[this.protocol];if(b&&(this.port||b)==(a.port||b))return!0}return!1},toRelPath:function(a,b){var c,d,e,f=0,g="";if(a=a.substring(0,a.lastIndexOf("/")),a=a.split("/"),c=b.split("/"),a.length>=c.length)for(d=0,e=a.length;d=c.length||a[d]!=c[d]){f=d+1;break}if(a.length=a.length||a[d]!=c[d]){f=d+1;break}if(1===f)return b;for(d=0,e=a.length-(f-1);d=0;c--)0!==b[c].length&&"."!==b[c]&&(".."!==b[c]?g>0?g--:h.push(b[c]):g++);return c=a.length-g,f=c<=0?h.reverse().join("/"):a.slice(0,c).join("/")+"/"+h.reverse().join("/"),0!==f.indexOf("/")&&(f="/"+f),e&&f.lastIndexOf("/")!==f.length-1&&(f+=e),f},getURI:function(a){var b,c=this;return c.source&&!a||(b="",a||(b+=c.protocol?c.protocol+"://":"//",c.userInfo&&(b+=c.userInfo+"@"),c.host&&(b+=c.host),c.port&&(b+=":"+c.port)),c.path&&(b+=c.path),c.query&&(b+="?"+c.query),c.anchor&&(b+="#"+c.anchor),c.source=b),c.source}},c.parseDataUri=function(a){var b,c;return a=decodeURIComponent(a).split(","),c=/data:([^;]+)/.exec(a[0]),c&&(b=c[1]),{type:b,data:a[1]}},c.getDocumentBaseUrl=function(a){var b;return b=0!==a.protocol.indexOf("http")&&"file:"!==a.protocol?a.href:a.protocol+"//"+a.host+a.pathname,/^[^:]+:\/\/\/?[^\/]+\//.test(b)&&(b=b.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,""),/[\/\\]$/.test(b)||(b+="/")),b},c}),g("x",["9"],function(a){function b(){}var c,d,e=a.each,f=a.extend;return b.extend=c=function(a){function b(){var a,b,c,e=this;if(!d&&(e.init&&e.init.apply(e,arguments),b=e.Mixins))for(a=b.length;a--;)c=b[a],c.init&&c.init.apply(e,arguments)}function g(){return this}function h(a,b){return function(){var c,d=this,e=d._super;return d._super=m[a],c=b.apply(d,arguments),d._super=e,c}}var i,j,k,l=this,m=l.prototype;d=!0,i=new l,d=!1,a.Mixins&&(e(a.Mixins,function(b){for(var c in b)"init"!==c&&(a[c]=b[c])}),m.Mixins&&(a.Mixins=m.Mixins.concat(a.Mixins))),a.Methods&&e(a.Methods.split(","),function(b){a[b]=g}),a.Properties&&e(a.Properties.split(","),function(b){var c="_"+b;a[b]=function(a){var b,d=this;return a!==b?(d[c]=a,d):d[c]}}),a.Statics&&e(a.Statics,function(a,c){b[c]=a}),a.Defaults&&m.Defaults&&(a.Defaults=f({},m.Defaults,a.Defaults));for(j in a)k=a[j],"function"==typeof k&&m[j]?i[j]=h(j,k):i[j]=k;return b.prototype=i,b.constructor=b,b.extend=c,b},b}),g("y",["9"],function(a){function b(b){function c(){return!1}function d(){return!0}function e(a,e){var f,h,i,k;if(a=a.toLowerCase(),e=e||{},e.type=a,e.target||(e.target=j),e.preventDefault||(e.preventDefault=function(){e.isDefaultPrevented=d},e.stopPropagation=function(){e.isPropagationStopped=d},e.stopImmediatePropagation=function(){e.isImmediatePropagationStopped=d},e.isDefaultPrevented=c,e.isPropagationStopped=c,e.isImmediatePropagationStopped=c),b.beforeFire&&b.beforeFire(e),f=m[a])for(h=0,i=f.length;h0}function f(a,b){var c,g;if(a===b)return!0;if(null===a||null===b)return a===b;if("object"!=typeof a||"object"!=typeof b)return a===b;if(d.isArray(b)){if(a.length!==b.length)return!1;for(c=a.length;c--;)if(!f(a[c],b[c]))return!1}if(e(a)||e(b))return a===b;g={};for(c in b){if(!f(a[c],b[c]))return!1;g[c]=!0}for(c in a)if(!g[c]&&!f(a[c],b[c]))return!1;return!0}return b.extend({Mixins:[c],init:function(b){var c,d;b=b||{};for(c in b)d=b[c],d instanceof a&&(b[c]=d.create(this,c));this.data=b},set:function(b,c){var d,e,g=this.data[b];if(c instanceof a&&(c=c.create(this,b)),"object"==typeof b){for(d in b)this.set(d,b[d]);return this}return f(g,c)||(this.data[b]=c,e={target:this,name:b,value:c,oldValue:g},this.fire("change:"+b,e),this.fire("change",e)),this},get:function(a){return this.data[a]},has:function(a){return a in this.data},bind:function(b){return a.create(this,b)},destroy:function(){this.fire("destroy")}})}),g("2d",["x"],function(a){"use strict";function b(a){for(var b,c=[],d=a.length;d--;)b=a[d],b.__checked||(c.push(b),b.__checked=1);for(d=c.length;d--;)delete c[d].__checked;return c}var c,d=/^([\w\\*]+)?(?:#([\w\-\\]+))?(?:\.([\w\\\.]+))?(?:\[\@?([\w\\]+)([\^\$\*!~]?=)([\w\\]+)\])?(?:\:(.+))?/i,e=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,f=/^\s*|\s*$/g,g=a.extend({init:function(a){function b(a){if(a)return a=a.toLowerCase(),function(b){return"*"===a||b.type===a}}function c(a){if(a)return function(b){return b._name===a}}function g(a){if(a)return a=a.split("."),function(b){for(var c=a.length;c--;)if(!b.classes.contains(a[c]))return!1;return!0}}function h(a,b,c){if(a)return function(d){var e=d[a]?d[a]():"";return b?"="===b?e===c:"*="===b?e.indexOf(c)>=0:"~="===b?(" "+e+" ").indexOf(" "+c+" ")>=0:"!="===b?e!=c:"^="===b?0===e.indexOf(c):"$="===b&&e.substr(e.length-c.length)===c:!!c}}function i(a){var b;if(a)return a=/(?:not\((.+)\))|(.+)/i.exec(a),a[1]?(b=k(a[1],[]),function(a){return!l(a,b)}):(a=a[2],function(b,c,d){return"first"===a?0===c:"last"===a?c===d-1:"even"===a?c%2===0:"odd"===a?c%2===1:!!b[a]&&b[a]()})}function j(a,e,j){function k(a){a&&e.push(a)}var l;return l=d.exec(a.replace(f,"")),k(b(l[1])),k(c(l[2])),k(g(l[3])),k(h(l[4],l[5],l[6])),k(i(l[7])),e.pseudo=!!l[7],e.direct=j,e}function k(a,b){var c,d,f,g=[];do if(e.exec(""),d=e.exec(a),d&&(a=d[3],g.push(d[1]),d[2])){c=d[3];break}while(d);for(c&&k(c,b),a=[],f=0;f"!=g[f]&&a.push(j(g[f],[],">"===g[f-1]));return b.push(a),b}var l=this.match;this._selectors=k(a,[])},match:function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o;for(b=b||this._selectors,c=0,d=b.length;c=0;e--)for(j=g[e];o;){if(j.pseudo)for(m=o.parent().items(),k=l=m.length;k--&&m[k]!==o;);for(h=0,i=j.length;h1&&(h=b(h))}return c||(c=g.Collection),new c(h)}});return g}),g("2e",["9","2d","x"],function(a,b,c){"use strict";var d,e,f=Array.prototype.push,g=Array.prototype.slice;return e={length:0,init:function(a){a&&this.add(a)},add:function(b){var c=this;return a.isArray(b)?f.apply(c,b):b instanceof d?c.add(b.toArray()):f.call(c,b),c},set:function(a){var b,c=this,d=c.length;for(c.length=0,c.add(a),b=c.length;b0&&(a+=" "),a+=this.prefix+this.cls[b];return a},c}),g("2f",["5"],function(a){var b,c={};return{add:function(d){var e=d.parent();if(e){if(!e._layout||e._layout.isNative())return;c[e._id]||(c[e._id]=e),b||(b=!0,a.requestAnimationFrame(function(){var a,d;b=!1;for(a in c)d=c[a],d.state.get("rendered")&&d.reflow();c={}},document.body))}},remove:function(a){c[a._id]&&delete c[a._id]}}}),g("2g",["x","9","y","4p","2e","4q","a","4r","4s","2f"],function(a,b,c,d,e,f,g,h,i,j){"use strict";function k(a){return a._eventDispatcher||(a._eventDispatcher=new c({scope:a,toggleEvent:function(b,d){d&&c.isNative(b)&&(a._nativeEvents||(a._nativeEvents={}),a._nativeEvents[b]=!0,a.state.get("rendered")&&l(a))}})),a._eventDispatcher}function l(a){function b(b){var c=a.getParentCtrl(b.target);c&&c.fire(b.type,b)}function c(){var a=j._lastHoverCtrl;a&&(a.fire("mouseleave",{target:a.getEl()}),a.parents().each(function(a){a.fire("mouseleave",{target:a.getEl()})}),j._lastHoverCtrl=null)}function d(b){var c,d,e,f=a.getParentCtrl(b.target),g=j._lastHoverCtrl,h=0;if(f!==g){if(j._lastHoverCtrl=f,d=f.parents().toArray().reverse(),d.push(f),g){for(e=g.parents().toArray().reverse(),e.push(g),h=0;h=h;c--)g=e[c],g.fire("mouseleave",{target:g.getEl()})}for(c=h;ci.maxW?i.maxW:c,i.w=c,i.innerW=c-d),c=a.h,c!==f&&(c=ci.maxH?i.maxH:c,i.h=c,i.innerH=c-e),c=a.innerW,c!==f&&(c=ci.maxW-d?i.maxW-d:c,i.innerW=c,i.w=c+d),c=a.innerH,c!==f&&(c=ci.maxH-e?i.maxH-e:c,i.innerH=c,i.h=c+e),a.contentW!==f&&(i.contentW=a.contentW),a.contentH!==f&&(i.contentH=a.contentH),b=h._lastLayoutRect,b.x===i.x&&b.y===i.y&&b.w===i.w&&b.h===i.h||(g=m.repaintControls,g&&g.map&&!g.map[h._id]&&(g.push(h),g.map[h._id]=!0),b.x=i.x,b.y=i.y,b.w=i.w,b.h=i.h),h):i},repaint:function(){var a,b,c,d,e,f,g,h,i,j,k=this;i=document.createRange?function(a){return a}:Math.round,a=k.getEl().style,d=k._layoutRect,h=k._lastRepaintRect||{},e=k.borderBox,f=e.left+e.right,g=e.top+e.bottom,d.x!==h.x&&(a.left=i(d.x)+"px",h.x=d.x),d.y!==h.y&&(a.top=i(d.y)+"px",h.y=d.y),d.w!==h.w&&(j=i(d.w-f),a.width=(j>=0?j:0)+"px",h.w=d.w),d.h!==h.h&&(j=i(d.h-g),a.height=(j>=0?j:0)+"px",h.h=d.h),k._hasBody&&d.innerW!==h.innerW&&(j=i(d.innerW),c=k.getEl("body"),c&&(b=c.style,b.width=(j>=0?j:0)+"px"),h.innerW=d.innerW),k._hasBody&&d.innerH!==h.innerH&&(j=i(d.innerH),c=c||k.getEl("body"),c&&(b=b||c.style,b.height=(j>=0?j:0)+"px"),h.innerH=d.innerH),k._lastRepaintRect=h,k.fire("repaint",{},!1)},updateLayoutRect:function(){var a=this;a.parent()._lastRect=null,f.css(a.getEl(),{width:"",height:""}),a._layoutRect=a._lastRepaintRect=a._lastLayoutRect=null,a.initLayoutRect()},on:function(a,b){function c(a){var b,c;return"string"!=typeof a?a:function(e){return b||d.parentsAndSelf().each(function(d){var e=d.settings.callbacks;if(e&&(b=e[a]))return c=d,!1}),b?b.call(c,e):(e.action=a,void this.fire("execute",e))}}var d=this;return k(d).on(a,c(b)),d},off:function(a,b){return k(this).off(a,b),this},fire:function(a,b,c){var d=this;if(b=b||{},b.control||(b.control=d),b=k(d).fire(a,b),c!==!1&&d.parent)for(var e=d.parent();e&&!b.isPropagationStopped();)e.fire(a,b,!1),e=e.parent();return b},hasEventListeners:function(a){return k(this).has(a)},parents:function(a){var b,c=this,d=new e;for(b=c.parent();b;b=b.parent())d.add(b);return a&&(d=d.filter(a)),d},parentsAndSelf:function(a){return new e(this).add(this.parents(a))},next:function(){var a=this.parent().items();return a[a.indexOf(this)+1]},prev:function(){var a=this.parent().items();return a[a.indexOf(this)-1]},innerHtml:function(a){return this.$el.html(a),this},getEl:function(a){var b=a?this._id+"-"+a:this._id;return this._elmCache[b]||(this._elmCache[b]=g("#"+b)[0]),this._elmCache[b]},show:function(){return this.visible(!0)},hide:function(){return this.visible(!1)},focus:function(){try{this.getEl().focus()}catch(a){}return this},blur:function(){return this.getEl().blur(),this},aria:function(a,b){var c=this,d=c.getEl(c.ariaTarget);return"undefined"==typeof b?c._aria[a]:(c._aria[a]=b,c.state.get("rendered")&&d.setAttribute("role"==a?a:"aria-"+a,b),c)},encode:function(a,b){return b!==!1&&(a=this.translate(a)),(a||"").replace(/[&<>"]/g,function(a){return"&#"+a.charCodeAt(0)+";"})},translate:function(a){return m.translate?m.translate(a):a},before:function(a){var b=this,c=b.parent();return c&&c.insert(a,c.items().indexOf(b),!0),b},after:function(a){var b=this,c=b.parent();return c&&c.insert(a,c.items().indexOf(b)),b},remove:function(){var a,b,c=this,d=c.getEl(),e=c.parent();if(c.items){var f=c.items().toArray();for(b=f.length;b--;)f[b].remove()}e&&e.items&&(a=[],e.items().each(function(b){b!==c&&a.push(b)}),e.items().set(a),e._lastRect=null),c._eventsRoot&&c._eventsRoot==c&&g(d).off();var h=c.getRoot().controlIdLookup;return h&&delete h[c._id],d&&d.parentNode&&d.parentNode.removeChild(d),c.state.set("rendered",!1),c.state.destroy(),c.fire("remove"),c},renderBefore:function(a){return g(a).before(this.renderHtml()),this.postRender(),this},renderTo:function(a){return g(a||this.getContainerElm()).append(this.renderHtml()),this.postRender(),this},preRender:function(){},render:function(){},renderHtml:function(){return'
'},postRender:function(){var a,b,c,d,e,f=this,h=f.settings;f.$el=g(f.getEl()),f.state.set("rendered",!0);for(d in h)0===d.indexOf("on")&&f.on(d.substr(2),h[d]);if(f._eventsRoot){for(c=f.parent();!e&&c;c=c.parent())e=c._eventsRoot;if(e)for(d in e._nativeEvents)f._nativeEvents[d]=!0}l(f),h.style&&(a=f.getEl(),a&&(a.setAttribute("style",h.style),a.style.cssText=h.style)),f.settings.border&&(b=f.borderBox,f.$el.css({"border-top-width":b.top,"border-right-width":b.right,"border-bottom-width":b.bottom,"border-left-width":b.left}));var i=f.getRoot();i.controlIdLookup||(i.controlIdLookup={}),i.controlIdLookup[f._id]=f;for(var k in f._aria)f.aria(k,f._aria[k]);f.state.get("visible")===!1&&(f.getEl().style.display="none"),f.bindStates(),f.state.on("change:visible",function(a){var b,c=a.value;f.state.get("rendered")&&(f.getEl().style.display=c===!1?"none":"",f.getEl().getBoundingClientRect()),b=f.parent(),b&&(b._lastRect=null),f.fire(c?"show":"hide"),j.add(f)}),f.fire("postrender",{},!1)},bindStates:function(){},scrollIntoView:function(a){function b(a,b){var c,d,e=a;for(c=d=0;e&&e!=b&&e.nodeType;)c+=e.offsetLeft||0,d+=e.offsetTop||0,e=e.offsetParent;return{x:c,y:d}}var c,d,e,f,g,h,i=this.getEl(),j=i.parentNode,k=b(i,j);return c=k.x,d=k.y,e=i.offsetWidth,f=i.offsetHeight,g=j.clientWidth,h=j.clientHeight,"end"==a?(c-=g-e,d-=h-f):"center"==a&&(c-=g/2-e/2,d-=h/2-f/2),j.scrollLeft=c,j.scrollTop=d,this},getRoot:function(){for(var a,b=this,c=[];b;){if(b.rootControl){a=b.rootControl;break}c.push(b),a=b,b=b.parent()}a||(a=this);for(var d=c.length;d--;)c[d].rootControl=a;return a},reflow:function(){j.remove(this);var a=this.parent();return a&&a._layout&&!a._layout.isNative()&&a.reflow(),this}};return b.each("text title visible disabled active value".split(" "),function(a){r[a]=function(b){return 0===arguments.length?this.state.get(a):("undefined"!=typeof b&&this.state.set(a,b),this)}}),m=a.extend(r)}),g("2h",[],function(){"use strict";var a={};return{add:function(b,c){a[b.toLowerCase()]=c},has:function(b){return!!a[b.toLowerCase()]},create:function(b,c){var d;if("string"==typeof b?(c=c||{},c.type=b):(c=b,b=c.type),b=b.toLowerCase(),d=a[b],!d)throw new Error("Could not find control by type: "+b);return d=new d(c),d.type=b,d}}}),g("2i",[],function(){"use strict";var a=function(a){return!!a.getAttribute("data-mce-tabstop")};return function(b){function c(a){return a&&1===a.nodeType}function d(a){return a=a||u,c(a)?a.getAttribute("role"):null}function e(a){for(var b,c=a||u;c=c.parentNode;)if(b=d(c))return b}function f(a){var b=u;if(c(b))return b.getAttribute("aria-"+a)}function g(a){var b=a.tagName.toUpperCase();return"INPUT"==b||"TEXTAREA"==b||"SELECT"==b}function h(b){return!(!g(b)||b.hidden)||(!!a(b)||!!/^(button|menuitem|checkbox|tab|menuitemcheckbox|option|gridcell|slider)$/.test(d(b)))}function i(a){function b(a){if(1==a.nodeType&&"none"!=a.style.display&&!a.disabled){h(a)&&c.push(a);for(var d=0;d=b.length&&(a=0),b[a]&&b[a].focus(),a}function m(a,b){var c=-1,d=j();b=b||i(d.getEl());for(var e=0;e=0&&(c=b.getEl(),c&&c.parentNode.removeChild(c),c=a.getEl(),c&&c.parentNode.removeChild(c)),b.parent(this)},create:function(b){var c,e=this,g=[];return f.isArray(b)||(b=[b]),f.each(b,function(b){b&&(b instanceof a||("string"==typeof b&&(b={type:b}),c=f.extend({},e.settings.defaults,b),b.type=c.type=c.type||b.type||e.settings.defaultType||(c.defaults?c.defaults.type:null),b=d.create(c)),g.push(b))}),g},renderNew:function(){var a=this;return a.items().each(function(b,c){var d;b.parent(a),b.state.get("rendered")||(d=a.getEl("body"),d.hasChildNodes()&&c<=d.childNodes.length-1?g(d.childNodes[c]).before(b.renderHtml()):g(d).append(b.renderHtml()),b.postRender(),i.add(b))}),a._layout.applyClasses(a.items().filter(":visible")),a._lastRect=null,a},append:function(a){return this.add(a).renderNew()},prepend:function(a){var b=this;return b.items().set(b.create(a).concat(b.items().toArray())),b.renderNew()},insert:function(a,b,c){var d,e,f,g=this;return a=g.create(a),d=g.items(),!c&&b=0&&b
'+(a.settings.html||"")+b.renderHtml(a)+"
"},postRender:function(){var a,b=this;return b.items().exec("postRender"),b._super(),b._layout.postRender(b),b.state.set("rendered",!0),b.settings.style&&b.$el.css(b.settings.style),b.settings.border&&(a=b.borderBox,b.$el.css({"border-top-width":a.top,"border-right-width":a.right,"border-bottom-width":a.bottom,"border-left-width":a.left})),b.parent()||(b.keyboardNav=new e({root:b})),b},initLayoutRect:function(){var a=this,b=a._super();return a._layout.recalc(a),b},recalc:function(){var a=this,b=a._layoutRect,c=a._lastRect;if(!c||c.w!=b.w||c.h!=b.h)return a._layout.recalc(a),b=a.layoutRect(),a._lastRect={x:b.x,y:b.y,w:b.w,h:b.h},!0},reflow:function(){var b;if(i.remove(this),this.visible()){for(a.repaintControls=[],a.repaintControls.map={},this.recalc(),b=a.repaintControls.length;b--;)a.repaintControls[b].repaint();"flow"!==this.settings.layout&&"stack"!==this.settings.layout&&this.repaint(),a.repaintControls=[]}return this}})}),g("2k",["a"],function(a){"use strict";function b(a){var b,c,d,e,f,g,h,i,j=Math.max;return b=a.documentElement,c=a.body,d=j(b.scrollWidth,c.scrollWidth),e=j(b.clientWidth,c.clientWidth),f=j(b.offsetWidth,c.offsetWidth),g=j(b.scrollHeight,c.scrollHeight),h=j(b.clientHeight,c.clientHeight),i=j(b.offsetHeight,c.offsetHeight),{width:d").css({position:"absolute",top:0,left:0,width:p.width,height:p.height,zIndex:2147483647,opacity:1e-4,cursor:o}).appendTo(n.body),a(n).on("mousemove touchmove",k).on("mouseup touchend",j),e.start(d)},k=function(a){return c(a),a.button!==h?j(a):(a.deltaX=a.screenX-l,a.deltaY=a.screenY-m,a.preventDefault(),void e.drag(a))},j=function(b){c(b),a(n).off("mousemove touchmove",k).off("mouseup touchend",j),g.remove(),e.stop&&e.stop(b)},this.destroy=function(){a(f()).off()},a(f()).on("mousedown touchstart",i)}}),g("2l",["a","2k"],function(a,b){"use strict";return{init:function(){var a=this;a.on("repaint",a.renderScroll)},renderScroll:function(){function c(){function b(b,g,h,i,j,k){var l,m,n,o,p,q,r,s,t;if(m=e.getEl("scroll"+b)){if(s=g.toLowerCase(),t=h.toLowerCase(),a(e.getEl("absend")).css(s,e.layoutRect()[i]-1),!j)return void a(m).css("display","none");a(m).css("display","block"),l=e.getEl("body"),n=e.getEl("scroll"+b+"t"),o=l["client"+h]-2*f,o-=c&&d?m["client"+k]:0,p=l["scroll"+h],q=o/p,r={},r[s]=l["offset"+g]+f,r[t]=o,a(m).css(r),r={},r[s]=l["scroll"+g]*q,r[t]=o*q,a(n).css(r)}}var c,d,g;g=e.getEl("body"),c=g.scrollWidth>g.clientWidth,d=g.scrollHeight>g.clientHeight,b("h","Left","Width","contentW",c,"Height"),b("v","Top","Height","contentH",d,"Width")}function d(){function c(c,d,g,h,i){var j,k=e._id+"-scroll"+c,l=e.classPrefix;a(e.getEl()).append('
'),e.draghelper=new b(k+"t",{start:function(){j=e.getEl("body")["scroll"+d],a("#"+k).addClass(l+"active")},drag:function(a){var b,k,l,m,n=e.layoutRect();k=n.contentW>n.innerW,l=n.contentH>n.innerH,m=e.getEl("body")["client"+g]-2*f,m-=k&&l?e.getEl("scroll"+c)["client"+i]:0,b=m/e.getEl("body")["scroll"+g],e.getEl("body")["scroll"+d]=j+a["delta"+h]/b},stop:function(){a("#"+k).removeClass(l+"active")}})}e.classes.add("scroll"),c("v","Top","Height","Y","Width"),c("h","Left","Width","X","Height")}var e=this,f=2; +e.settings.autoScroll&&(e._hasScroll||(e._hasScroll=!0,d(),e.on("wheel",function(a){var b=e.getEl("body");b.scrollLeft+=10*(a.deltaX||0),b.scrollTop+=10*a.deltaY,c()}),a(e.getEl("body")).on("scroll",c)),c())}}}),g("2m",["2j","2l"],function(a,b){"use strict";return a.extend({Defaults:{layout:"fit",containerCls:"panel"},Mixins:[b],renderHtml:function(){var a=this,b=a._layout,c=a.settings.html;return a.preRender(),b.preRender(a),"undefined"==typeof c?c='
'+b.renderHtml(a)+"
":("function"==typeof c&&(c=c.call(a)),a._hasBody=!1),'
'+(a._preBodyHtml||"")+c+"
"}})}),g("2n",["4q"],function(a){"use strict";function b(b,c,d){var e,f,g,h,i,j,k,l,m,n;return m=a.getViewPort(),f=a.getPos(c),g=f.x,h=f.y,b.state.get("fixed")&&"static"==a.getRuntimeStyle(document.body,"position")&&(g-=m.x,h-=m.y),e=b.getEl(),n=a.getSize(e),i=n.width,j=n.height,n=a.getSize(c),k=n.width,l=n.height,d=(d||"").split(""),"b"===d[0]&&(h+=l),"r"===d[1]&&(g+=k),"c"===d[0]&&(h+=Math.round(l/2)),"c"===d[1]&&(g+=Math.round(k/2)),"b"===d[3]&&(h-=j),"r"===d[4]&&(g-=i),"c"===d[3]&&(h-=Math.round(j/2)),"c"===d[4]&&(g-=Math.round(i/2)),{x:g,y:h,w:i,h:j}}return{testMoveRel:function(c,d){for(var e=a.getViewPort(),f=0;f0&&g.x+g.w0&&g.y+g.he.x&&g.x+g.we.y&&g.y+g.hb?(a=b-c,a<0?0:a):a}var e=this;if(e.settings.constrainToViewport){var f=a.getViewPort(window),g=e.layoutRect();b=d(b,f.w+f.x,g.w),c=d(c,f.h+f.y,g.h)}return e.state.get("rendered")?e.layoutRect({x:b,y:c}).repaint():(e.settings.x=b,e.settings.y=c),e.fire("move",{x:b,y:c}),e}}}),g("2o",["4q"],function(a){"use strict";return{resizeToContent:function(){this._layoutRect.autoResize=!0,this._lastRect=null,this.reflow()},resizeTo:function(b,c){if(b<=1||c<=1){var d=a.getWindowSize();b=b<=1?b*d.w:b,c=c<=1?c*d.h:c}return this._layoutRect.autoResize=!1,this.layoutRect({minW:b,minH:c,w:b,h:c}).reflow()},resizeBy:function(a,b){var c=this,d=c.layoutRect();return c.resizeTo(d.w+a,d.h+b)}}}),g("2p",["2m","2n","2o","4q","a","5"],function(a,b,c,d,e,f){"use strict";function g(a,b){for(;a;){if(a==b)return!0;a=a.parent()}}function h(a){for(var b=s.length;b--;){var c=s[b],d=c.getParentCtrl(a.target);if(c.settings.autohide){if(d&&(g(d,c)||c.parent()===d))continue;a=c.fire("autohide",{target:a.target}),a.isDefaultPrevented()||c.hide()}}}function i(){o||(o=function(a){2!=a.button&&h(a)},e(document).on("click touchstart",o))}function j(){p||(p=function(){var a;for(a=s.length;a--;)l(s[a])},e(window).on("scroll",p))}function k(){if(!q){var a=document.documentElement,b=a.clientWidth,c=a.clientHeight;q=function(){document.all&&b==a.clientWidth&&c==a.clientHeight||(b=a.clientWidth,c=a.clientHeight,u.hideAll())},e(window).on("resize",q)}}function l(a){function b(b,c){for(var d,e=0;ec&&(a.fixed(!1).layoutRect({y:a._autoFixY}).repaint(),b(!1,a._autoFixY-c)):(a._autoFixY=a.layoutRect().y,a._autoFixY').appendTo(b.getContainerElm())),f.setTimeout(function(){c.addClass(d+"in"),e(b.getEl()).addClass(d+"in")}),r=!0),m(!0,b)}}),b.on("show",function(){b.parents().each(function(a){if(a.state.get("fixed"))return b.fixed(!0),!1})}),a.popover&&(b._preBodyHtml='
',b.classes.add("popover").add("bottom").add(b.isRtl()?"end":"start")),b.aria("label",a.ariaLabel),b.aria("labelledby",b._id),b.aria("describedby",b.describedBy||b._id+"-none")},fixed:function(a){var b=this;if(b.state.get("fixed")!=a){if(b.state.get("rendered")){var c=d.getViewPort();a?b.layoutRect().y-=c.y:b.layoutRect().y+=c.y}b.classes.toggle("fixed",a),b.state.set("fixed",a)}return b},show:function(){var a,b=this,c=b._super();for(a=s.length;a--&&s[a]!==b;);return a===-1&&s.push(b),c},hide:function(){return n(this),m(!1,this),this._super()},hideAll:function(){u.hideAll()},close:function(){var a=this;return a.fire("close").isDefaultPrevented()||(a.remove(),m(!1,a)),a},remove:function(){n(this),this._super()},postRender:function(){var a=this;return a.settings.bodyRole&&this.getEl("body").setAttribute("role",a.settings.bodyRole),a._super()}});return u.hideAll=function(){for(var a=s.length;a--;){var b=s[a];b&&b.settings.autohide&&(b.hide(),s.splice(a,1))}},u}),g("23",["2p","2m","4q","a","2k","4r","6","5"],function(a,b,c,d,e,f,g,h){"use strict";function i(a){var b,c="width=device-width,initial-scale=1.0,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0",e=d("meta[name=viewport]")[0];g.overrideViewPort!==!1&&(e||(e=document.createElement("meta"),e.setAttribute("name","viewport"),document.getElementsByTagName("head")[0].appendChild(e)),b=e.getAttribute("content"),b&&"undefined"!=typeof n&&(n=b),e.setAttribute("content",a?c:n))}function j(a,b){k()&&b===!1&&d([document.documentElement,document.body]).removeClass(a+"fullscreen")}function k(){for(var a=0;aa.w&&(d=a.x-Math.max(0,b/2),f.layoutRect({w:b,x:d}),e=!0)),g&&(g.layoutRect({w:f.layoutRect().innerW}).recalc(),b=g.layoutRect().minW+a.deltaW,b>a.w&&(d=a.x-Math.max(0,b-a.w),f.layoutRect({w:b,x:d}),e=!0)),e&&f.recalc()},initLayoutRect:function(){var a,b=this,d=b._super(),e=0;if(b.settings.title&&!b._fullscreen){a=b.getEl("head");var f=c.getSize(a);d.headerW=f.width,d.headerH=f.height,e+=d.headerH}b.statusbar&&(e+=b.statusbar.layoutRect().h),d.deltaH+=e,d.minH+=e,d.h+=e;var g=c.getWindowSize();return d.x=b.settings.x||Math.max(0,g.w/2-d.w/2),d.y=b.settings.y||Math.max(0,g.h/2-d.h/2),d},renderHtml:function(){var a=this,b=a._layout,c=a._id,d=a.classPrefix,e=a.settings,f="",g="",h=e.html;return a.preRender(),b.preRender(a),e.title&&(f='
'+a.encode(e.title)+'
'),e.url&&(h=''),"undefined"==typeof h&&(h=b.renderHtml(a)),a.statusbar&&(g=a.statusbar.renderHtml()),'
'+f+'
'+h+"
"+g+"
"},fullscreen:function(a){var b,e,g=this,i=document.documentElement,j=g.classPrefix;if(a!=g._fullscreen)if(d(window).on("resize",function(){var a;if(g._fullscreen)if(b)g._timer||(g._timer=h.setTimeout(function(){var a=c.getWindowSize();g.moveTo(0,0).resizeTo(a.w,a.h),g._timer=0},50));else{a=(new Date).getTime();var d=c.getWindowSize();g.moveTo(0,0).resizeTo(d.w,d.h),(new Date).getTime()-a>50&&(b=!0)}}),e=g.layoutRect(),g._fullscreen=a,a){g._initial={x:e.x,y:e.y,w:e.w,h:e.h},g.borderBox=f.parseBox("0"),g.getEl("head").style.display="none",e.deltaH-=e.headerH+2,d([i,document.body]).addClass(j+"fullscreen"),g.classes.add("fullscreen");var k=c.getWindowSize();g.moveTo(0,0).resizeTo(k.w,k.h)}else g.borderBox=f.parseBox(g.settings.border),g.getEl("head").style.display="",e.deltaH+=e.headerH,d([i,document.body]).removeClass(j+"fullscreen"),g.classes.remove("fullscreen"),g.moveTo(g._initial.x,g._initial.y).resizeTo(g._initial.w,g._initial.h);return g.reflow()},postRender:function(){var a,b=this;setTimeout(function(){b.classes.add("in"),b.fire("open")},0),b._super(),b.statusbar&&b.statusbar.postRender(),b.focus(),this.dragHelper=new e(b._id+"-dragh",{start:function(){a={x:b.layoutRect().x,y:b.layoutRect().y}},drag:function(c){b.moveTo(a.x+c.deltaX,a.y+c.deltaY)}}),b.on("submit",function(a){a.isDefaultPrevented()||b.close()}),m.push(b),i(!0)},submit:function(){return this.fire("submit",{data:this.toJSON()})},remove:function(){var a,b=this;for(b.dragHelper.destroy(),b._super(),b.statusbar&&this.statusbar.remove(),j(b.classPrefix,!1),a=m.length;a--;)m[a]===b&&m.splice(a,1);i(m.length>0)},getContentWindow:function(){var a=this.getEl().getElementsByTagName("iframe")[0];return a?a.contentWindow:null}});return l(),o}),g("24",["23"],function(a){"use strict";var b=a.extend({init:function(a){a={border:1,padding:20,layout:"flex",pack:"center",align:"center",containerCls:"panel",autoScroll:!0,buttons:{type:"button",text:"Ok",action:"ok"},items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200}},this._super(a)},Statics:{OK:1,OK_CANCEL:2,YES_NO:3,YES_NO_CANCEL:4,msgBox:function(c){function d(a,b,c){return{type:"button",text:a,subtype:c?"primary":"",onClick:function(a){a.control.parents()[1].close(),f(b)}}}var e,f=c.callback||function(){};switch(c.buttons){case b.OK_CANCEL:e=[d("Ok",!0,!0),d("Cancel",!1)];break;case b.YES_NO:case b.YES_NO_CANCEL:e=[d("Yes",1,!0),d("No",0)],c.buttons==b.YES_NO_CANCEL&&e.push(d("Cancel",-1));break;default:e=[d("Ok",!0,!0)]}return new a({padding:20,x:c.x,y:c.y,minWidth:300,minHeight:100,layout:"flex",pack:"center",align:"center",buttons:e,title:c.title,role:"alertdialog",items:{type:"label",multiline:!0,maxWidth:500,maxHeight:200,text:c.text},onPostRender:function(){this.aria("describedby",this.items()[0]._id)},onClose:c.onClose,onCancel:function(){f(!1)}}).renderTo(document.body).reflow()},alert:function(a,c){return"string"==typeof a&&(a={text:a}),a.callback=c,b.msgBox(a)},confirm:function(a,c){return"string"==typeof a&&(a={text:a}),a.callback=c,a.buttons=b.OK_CANCEL,b.msgBox(a)}}});return b}),g("10",["23","24"],function(a,b){return function(c){function d(){if(h.length)return h[h.length-1]}function e(a){c.fire("OpenWindow",{win:a})}function f(a){c.fire("CloseWindow",{win:a})}var g=this,h=[];g.windows=h,c.on("remove",function(){for(var a=h.length;a--;)h[a].close()}),g.open=function(b,d){var g;return c.editorManager.setActive(c),b.title=b.title||" ",b.url=b.url||b.file,b.url&&(b.width=parseInt(b.width||320,10),b.height=parseInt(b.height||240,10)),b.body&&(b.items={defaults:b.defaults,type:b.bodyType||"form",items:b.body,data:b.data,callbacks:b.commands}),b.url||b.buttons||(b.buttons=[{text:"Ok",subtype:"primary",onclick:function(){g.find("form")[0].submit()}},{text:"Cancel",onclick:function(){g.close()}}]),g=new a(b),h.push(g),g.on("close",function(){for(var a=h.length;a--;)h[a]===g&&h.splice(a,1);h.length||c.focus(),f(g)}),b.data&&g.on("postRender",function(){this.find("*").each(function(a){var c=a.name();c in b.data&&a.value(b.data[c])})}),g.features=b||{},g.params=d||{},1===h.length&&c.nodeChanged(),g=g.renderTo().reflow(),e(g),g},g.alert=function(a,d,g){var h;h=b.alert(a,function(){d?d.call(g||this):c.focus()}),h.on("close",function(){f(h)}),e(h)},g.confirm=function(a,c,d){var g;g=b.confirm(a,function(a){c.call(d||this,a)}),g.on("close",function(){f(g)}),e(g)},g.close=function(){d()&&d().close()},g.getParams=function(){return d()?d().params:null},g.setParams=function(a){d()&&(d().params=a)},g.getWindows=function(){return h}}}),g("2q",["2g","2n"],function(a,b){return a.extend({Mixins:[b],Defaults:{classes:"widget tooltip tooltip-n"},renderHtml:function(){var a=this,b=a.classPrefix;return'"},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.getEl().lastChild.innerHTML=a.encode(b.value)}),a._super()},repaint:function(){var a,b,c=this;a=c.getEl().style,b=c._layoutRect,a.left=b.x+"px",a.top=b.y+"px",a.zIndex=131070}})}),g("2r",["2g","2q"],function(a,b){"use strict";var c,d=a.extend({init:function(a){var b=this;b._super(a),a=b.settings,b.canFocus=!0,a.tooltip&&d.tooltips!==!1&&(b.on("mouseenter",function(c){var d=b.tooltip().moveTo(-65535);if(c.control==b){var e=d.text(a.tooltip).show().testMoveRel(b.getEl(),["bc-tc","bc-tl","bc-tr"]);d.classes.toggle("tooltip-n","bc-tc"==e),d.classes.toggle("tooltip-nw","bc-tl"==e),d.classes.toggle("tooltip-ne","bc-tr"==e),d.moveRel(b.getEl(),e)}else d.hide()}),b.on("mouseleave mousedown click",function(){b.tooltip().hide()})),b.aria("label",a.ariaLabel||a.tooltip)},tooltip:function(){return c||(c=new b({type:"tooltip"}),c.renderTo()),c},postRender:function(){var a=this,b=a.settings;a._super(),a.parent()||!b.width&&!b.height||(a.initLayoutRect(),a.repaint()),b.autofocus&&a.focus()},bindStates:function(){function a(a){c.aria("disabled",a),c.classes.toggle("disabled",a)}function b(a){c.aria("pressed",a),c.classes.toggle("active",a)}var c=this;return c.state.on("change:disabled",function(b){a(b.value)}),c.state.on("change:active",function(a){b(a.value)}),c.state.get("disabled")&&a(!0),c.state.get("active")&&b(!0),c._super()},remove:function(){this._super(),c&&(c.remove(),c=null)}});return d}),g("2s",["2r"],function(a){"use strict";return a.extend({Defaults:{value:0},init:function(a){var b=this;b._super(a),b.classes.add("progress"),b.settings.filter||(b.settings.filter=function(a){return Math.round(a)})},renderHtml:function(){var a=this,b=a._id,c=this.classPrefix;return'
0%
'},postRender:function(){var a=this;return a._super(),a.value(a.settings.value),a},bindStates:function(){function a(a){a=b.settings.filter(a),b.getEl().lastChild.innerHTML=a+"%",b.getEl().firstChild.firstChild.style.width=a+"%"}var b=this;return b.state.on("change:value",function(b){a(b.value)}),a(b.state.get("value")),b._super()}})}),g("25",["2g","2n","2s","5"],function(a,b,c,d){return a.extend({Mixins:[b],Defaults:{classes:"widget notification"},init:function(a){var b=this;b._super(a),a.text&&b.text(a.text),a.icon&&(b.icon=a.icon),a.color&&(b.color=a.color),a.type&&b.classes.add("notification-"+a.type),a.timeout&&(a.timeout<0||a.timeout>0)&&!a.closeButton?b.closeButton=!1:(b.classes.add("has-close"),b.closeButton=!0),a.progressBar&&(b.progressBar=new c),b.on("click",function(a){a.target.className.indexOf(b.classPrefix+"close")!=-1&&b.close()})},renderHtml:function(){var a=this,b=a.classPrefix,c="",d="",e="",f="";return a.icon&&(c=''),a.color&&(f=' style="background-color: '+a.color+'"'),a.closeButton&&(d=''),a.progressBar&&(e=a.progressBar.renderHtml()),'"},postRender:function(){var a=this;return d.setTimeout(function(){a.$el.addClass(a.classPrefix+"in")}),a._super()},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.getEl().childNodes[1].innerHTML=b.value}),a.progressBar&&a.progressBar.bindStates(),a._super()},close:function(){var a=this;return a.fire("close").isDefaultPrevented()||a.remove(),a},repaint:function(){var a,b,c=this;a=c.getEl().style,b=c._layoutRect,a.left=b.x+"px",a.top=b.y+"px",a.zIndex=65534}})}),g("11",["25","5","9"],function(a,b,c){return function(d){function e(){if(m.length)return m[m.length-1]}function f(){b.requestAnimationFrame(function(){g(),h()})}function g(){for(var a=0;a0){var a=m.slice(0,1)[0],b=d.inline?d.getElement():d.getContentAreaContainer();if(a.moveRel(b,"tc-tc"),m.length>1)for(var c=1;c0&&(c.timer=setTimeout(function(){c.close()},b.timeout)),c.on("close",function(){var a=m.length;for(c.timer&&d.getWin().clearTimeout(c.timer);a--;)m[a]===c&&m.splice(a,1);h()}),c.renderTo(),h()):c=e,c}},l.close=function(){e()&&e().close()},l.getNotifications=function(){return m},d.on("SkinLoaded",function(){var a=d.settings.service_message;a&&d.notificationManager.open({text:a,type:"warning",timeout:0,icon:""})})}}),g("12",["z","e","9"],function(a,b,c){function d(a,b){return"selectionchange"==b?a.getDoc():!a.inline&&/^mouse|touch|click|contextmenu|drop|dragover|dragend/.test(b)?a.getDoc().documentElement:a.settings.event_root?(a.eventRoot||(a.eventRoot=g.select(a.settings.event_root)[0]),a.eventRoot):a.getBody()}function e(a,b){function c(a){return!a.hidden&&!a.readonly}var e,h;if(a.delegates||(a.delegates={}),!a.delegates[b]&&!a.removed)if(e=d(a,b),a.settings.event_root){if(f||(f={},a.editorManager.on("removeEditor",function(){var b;if(!a.editorManager.activeEditor&&f){for(b in f)a.dom.unbind(d(a,b));f=null}})),f[b])return;h=function(d){for(var e=d.target,f=a.editorManager.editors,h=f.length;h--;){var i=f[h].getBody();(i===e||g.isChildOf(e,i))&&c(f[h])&&f[h].fire(b,d)}},f[b]=h,g.bind(e,b,h)}else h=function(d){c(a)&&a.fire(b,d)},g.bind(e,b,h),a.delegates[b]=h}var f,g=b.DOM,h={bindPendingEventDelegates:function(){var a=this;c.each(a._pendingNativeEvents,function(b){e(a,b)})},toggleNativeEvent:function(a,b){var c=this;"focus"!=a&&"blur"!=a&&(b?c.initialized?e(c,a):c._pendingNativeEvents?c._pendingNativeEvents.push(a):c._pendingNativeEvents=[a]:c.initialized&&(c.dom.unbind(d(c,a),a,c.delegates[a]),delete c.delegates[a]))},unbindAllNativeEvents:function(){var a,b=this;if(b.delegates){for(a in b.delegates)b.dom.unbind(d(b,a),a,b.delegates[a]);delete b.delegates}b.inline||(b.getBody().onload=null,b.dom.unbind(b.getWin()),b.dom.unbind(b.getDoc())),b.dom.unbind(b.getBody()),b.dom.unbind(b.getContainer())}};return h=c.extend({},a,h)}),g("13",["9","6"],function(a,b){var c=a.each,d=a.explode,e={f9:120,f10:121,f11:122},f=a.makeMap("alt,ctrl,shift,meta,access");return function(g){function h(a){var g,h,i={};c(d(a,"+"),function(a){a in f?i[a]=!0:/^[0-9]{2,}$/.test(a)?i.keyCode=parseInt(a,10):(i.charCode=a.charCodeAt(0),i.keyCode=e[a]||a.toUpperCase().charCodeAt(0))}),g=[i.keyCode];for(h in f)i[h]?g.push(h):i[h]=!1;return i.id=g.join(","),i.access&&(i.alt=!0,b.mac?i.ctrl=!0:i.shift=!0),i.meta&&(b.mac?i.meta=!0:(i.ctrl=!0,i.meta=!1)),i}function i(b,c,e,f){var i;return i=a.map(d(b,">"),h),i[i.length-1]=a.extend(i[i.length-1],{func:e,scope:f||g}),a.extend(i[0],{desc:g.translate(c),subpatterns:i.slice(1)})}function j(a){return a.altKey||a.ctrlKey||a.metaKey}function k(a){return"keydown"===a.type&&a.keyCode>=112&&a.keyCode<=123}function l(a,b){return!!b&&(b.ctrl==a.ctrlKey&&b.meta==a.metaKey&&(b.alt==a.altKey&&b.shift==a.shiftKey&&(!!(a.keyCode==b.keyCode||a.charCode&&a.charCode==b.charCode)&&(a.preventDefault(),!0))))}function m(a){return a.func?a.func.call(a.scope):null}var n=this,o={},p=[];g.on("keyup keypress keydown",function(a){!j(a)&&!k(a)||a.isDefaultPrevented()||(c(o,function(b){if(l(a,b))return p=b.subpatterns.slice(0),"keydown"==a.type&&m(b),!0}),l(a,p[0])&&(1===p.length&&"keydown"==a.type&&m(p[0]),p.shift()))}),n.add=function(b,e,f,h){var j;return j=f,"string"==typeof f?f=function(){g.execCommand(j,!1,null)}:a.isArray(j)&&(f=function(){g.execCommand(j[0],j[1],j[2])}),c(d(a.trim(b.toLowerCase())),function(a){var b=i(a,e,f,h);o[b.id]=b}),!0},n.remove=function(a){var b=i(a);return!!o[b.id]&&(delete o[b.id],!0)}}}),g("26",["9"],function(a){var b=function(b,c,d,e,f){return f=a.extend({id:c,theme:"modern",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:d,add_form_submit_trigger:!0,submit_patch:!0,add_unload_trigger:!0,convert_urls:!0,relative_urls:!0,remove_script_host:!0,object_resizing:!0,doctype:"",visual:!0,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",forced_root_block:"p",hidden_input:!0,padd_empty_editor:!0,render_ui:!0,indentation:"30px",inline_styles:!0,convert_fonts_to_spans:!0,indent:"simple",indent_before:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",indent_after:"p,h1,h2,h3,h4,h5,h6,blockquote,div,title,style,pre,script,td,th,ul,ol,li,dl,dt,dd,area,table,thead,tfoot,tbody,tr,section,article,hgroup,aside,figure,figcaption,option,optgroup,datalist",entity_encoding:"named",url_converter:b.convertURL,url_converter_scope:b,ie7_compat:!0},e,f,{validate:!0,content_editable:f.inline}),e&&e.external_plugins&&f.external_plugins&&(f.external_plugins=a.extend({},e.external_plugins,f.external_plugins)),f};return{getEditorSettings:b}}),h("4t",window),g("2b",["g"],function(a){var b=a.PluginManager,c=function(a,c){for(var d in b.urls){var e=b.urls[d]+"/plugin"+c+".js";if(e===a)return d}return null},d=function(a,b){var d=c(b,a.suffix);return d?"Failed to load plugin: "+d+" from url "+b:"Failed to load plugin url: "+b},e=function(a,b){a.notificationManager.open({type:"error",text:b})},f=function(a,b){a._skinLoaded?e(a,b):a.on("SkinLoaded",function(){e(a,b)})},g=function(a,b){f(a,"Failed to upload image: "+b)},h=function(a,b){f(a,d(a,b))},i=function(a,b){f(a,"Failed to load content css: "+b[0])},j=function(a){var b=window.console;b&&!window.test&&(b.error?b.error.apply(b,arguments):b.log.apply(b,arguments))};return{pluginLoadError:h,uploadError:g,displayError:f,contentCssError:i,initError:j}}),g("6c",["1m","1k"],function(a,b){var c=function(a){return a.dom.select("*[data-mce-caret]")[0]},d=function(a){a.selection.setRng(a.selection.getRng())},e=function(a,c){c.hasAttribute("data-mce-caret")&&(b.showCaretContainerBlock(c),d(a),a.selection.scrollIntoView(c))},f=function(a,d){var f=c(a);if(f)return"compositionstart"===d.type?(d.preventDefault(),d.stopPropagation(),void e(f)):void(b.hasContent(f)&&e(a,f))},g=function(b){b.on("keyup compositionstart",a.curry(f,b))};return{setup:g}}),g("6r",["4","9","1w"],function(a,b,c){return function(c,d){function e(a,b){return a?a.replace(/\/$/,"")+"/"+b.replace(/^\//,""):b}function f(a,b,c,f){var g,h;g=new XMLHttpRequest,g.open("POST",d.url),g.withCredentials=d.credentials,g.upload.onprogress=function(a){f(a.loaded/a.total*100)},g.onerror=function(){c("Image upload failed due to a XHR Transport error. Code: "+g.status)},g.onload=function(){var a;return g.status<200||g.status>=300?void c("HTTP Error: "+g.status):(a=JSON.parse(g.responseText),a&&"string"==typeof a.location?void b(e(d.basePath,a.location)):void c("Invalid JSON: "+g.responseText))},h=new FormData,h.append("file",a.blob(),a.filename()),g.send(h)}function g(){return new a(function(a){a([])})}function h(a,b){return{url:b,blobInfo:a,status:!0}}function i(a,b){return{url:"",blobInfo:a,status:!1,error:b}}function j(a,c){b.each(p[a],function(a){a(c)}),delete p[a]}function k(b,d,e){return c.markPending(b.blobUri()),new a(function(a){var f,g,k=function(){};try{var l=function(){f&&(f.close(),g=k)},m=function(d){l(),c.markUploaded(b.blobUri(),d),j(b.blobUri(),h(b,d)),a(h(b,d))},n=function(d){l(),c.removeFailed(b.blobUri()),j(b.blobUri(),i(b,d)),a(i(b,d))};g=function(a){a<0||a>100||(f||(f=e()),f.progressBar.value(a))},d(b,m,n,g)}catch(c){a(i(b,c.message))}})}function l(a){return a===f}function m(b){var c=b.blobUri();return new a(function(a){p[c]=p[c]||[],p[c].push(a)})}function n(e,f){return e=b.grep(e,function(a){return!c.isUploaded(a.blobUri())}),a.all(b.map(e,function(a){return c.isPending(a.blobUri())?m(a):k(a,d.handler,f)}))}function o(a,b){return!d.url&&l(d.handler)?g():n(a,b)}var p={};return d=b.extend({credentials:!1,handler:f},d),{upload:o}}}),g("7a",["4"],function(a){function b(b){return new a(function(a,c){var d=function(){c("Cannot convert "+b+" to Blob. Resource might not exist or is inaccessible.")};try{var e=new XMLHttpRequest;e.open("GET",b,!0),e.responseType="blob",e.onload=function(){200==this.status?a(this.response):d()},e.onerror=d,e.send()}catch(a){d()}})}function c(a){var b,c;return a=decodeURIComponent(a).split(","),c=/data:([^;]+)/.exec(a[0]),c&&(b=c[1]),{type:b,data:a[1]}}function d(b){return new a(function(a){var d,e,f;b=c(b);try{d=atob(b.data)}catch(b){return void a(new Blob([]))}for(e=new Uint8Array(d.length),f=0;f0&&b.moveEnd("character",f),b.select()}catch(a){}a.nodeChanged()}}},c=function(c){c.settings.forced_root_block&&c.on("NodeChange",a.curry(b,c))};return{setup:c}}),g("7f",["1g","1j","43"],function(a,b,c){function d(e){function f(b){return a.map(b,function(a){return a=c.clone(a),a.node=e,a})}if(a.isArray(e))return a.reduce(e,function(a,b){return a.concat(d(b))},[]);if(b.isElement(e))return f(e.getClientRects());if(b.isText(e)){var g=e.ownerDocument.createRange();return g.setStart(e,0),g.setEnd(e,e.data.length),f(g.getClientRects())}}return{getClientRects:d}}),g("70",["1w","1g","1j","7f","43","5i","44"],function(a,b,c,d,e,f,g){function h(a,b){return Math.abs(a.left-b)}function i(a,b){return Math.abs(a.right-b)}function j(a,c){function d(a,b){return a>=b.left&&a<=b.right}return b.reduce(a,function(a,b){var e,f;return e=Math.min(h(a,c),i(a,c)),f=Math.min(h(b,c),i(b,c)),d(c,b)?b:d(c,a)?a:f==e&&p(b.node)?b:f=a.top&&e<=a.bottom}),g=j(f,c),g&&(g=j(l(a,g),c),g&&p(g.node))?n(g,c):null}var p=c.isContentEditableFalse,q=f.findNode,r=a.curry;return{findClosestClientRect:j,findLineNodeRects:l,closestCaret:o}}),g("7i",["1w","1g","7f","44","5i","4m","1p","43"],function(a,b,c,d,e,f,g,h){function i(a,b,c,f){for(;f=e.findNode(f,a,d.isEditableCaretCandidate,b);)if(c(f))return}function j(a,d,e,f,g,h){function j(f){var h,i,j;for(j=c.getClientRects(f),a==-1&&(j=j.reverse()),h=0;h0&&d(i,b.last(n))&&m++,i.line=m,g(i))return!0;n.push(i)}}var k,l,m=0,n=[];return(l=b.last(h.getClientRects()))?(k=h.getNode(),j(k),i(a,f,j,k),n):n}function k(a,b){return b.line>a}function l(a,b){return b.line===a}function m(a,c,d,e){function i(c){return 1==a?b.last(c.getClientRects()):b.last(c.getClientRects())}var j,k,l,m,n,o,p=new f(c),q=[],r=0;1==a?(j=p.next,k=h.isBelow,l=h.isAbove,m=g.after(e)):(j=p.prev,k=h.isAbove,l=h.isBelow,m=g.before(e)),o=i(m);do if(m.isVisible()&&(n=i(m),!l(n,o))){if(q.length>0&&k(n,b.last(q))&&r++,n=h.clone(n),n.position=m,n.line=r,d(n))return q;q.push(n)}while(m=j(m));return q}var n=a.curry,o=n(j,-1,h.isAbove,h.isBelow),p=n(j,1,h.isBelow,h.isAbove);return{upUntil:o,downUntil:p,positionsUntil:m,isAboveLine:n(k),isLine:n(l)}}),g("73",["1p","5i","1j","1w"],function(a,b,c,d){var e=c.isContentEditableTrue,f=c.isContentEditableFalse,g=function(a,b,c,d){return b._selectionOverrides.showCaret(a,c,d)},h=function(a){var b=a.ownerDocument.createRange();return b.selectNode(a),b},i=function(a,b){var c;return c=a.fire("BeforeObjectSelected",{target:b}),c.isDefaultPrevented()?null:h(b)},j=function(c,h){var i,j;return h=b.normalizeRange(1,c.getBody(),h),i=a.fromRangeStart(h),f(i.getNode())?g(1,c,i.getNode(),!i.isAtEnd()):f(i.getNode(!0))?g(1,c,i.getNode(!0),!1):(j=c.dom.getParent(i.getNode(),d.or(f,e)),f(j)?g(1,c,j,!1):null)},k=function(a,b){var c;return b&&b.collapsed?(c=j(a,b),c?c:b):b};return{showCaret:g,selectNode:i,renderCaretAtRange:j,renderRangeCaret:k}}),g("7c",["1k","1p","5i","4m","70","7i","1j","h","6","73","1g","1w"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=g.isContentEditableFalse,n=h.getSelectedNode,o=c.isAfterContentEditableFalse,p=c.isBeforeContentEditableFalse,q=function(a,b){for(;b=a(b);)if(b.isVisible())return b;return b},r=function(a,b){var d=c.isInSameBlock(a,b);return!(d||!g.isBr(a.getNode()))||d},s=function(b){return a.isCaretContainerBlock(b.startContainer)},t=function(a,d,e){return e=c.normalizeRange(a,d,e),a===-1?b.fromRangeStart(e):b.fromRangeEnd(e)},u=function(a,b,c,d,e){var f,g,h,i;return!e.collapsed&&(f=n(e),m(f))?j.showCaret(a,b,f,a===-1):(i=s(e),g=t(a,b.getBody(),e),d(g)?j.selectNode(b,g.getNode(a===-1)):(g=c(g))?d(g)?j.showCaret(a,b,g.getNode(a===-1),1===a):(h=c(g),d(h)&&r(g,h)?j.showCaret(a,b,h.getNode(a===-1),1===a):i?j.renderRangeCaret(b,g.toRange()):null):i?e:null)},v=function(a,b,c,d){var g,h,i,l,q,r,s,u,v;if(v=n(d),g=t(a,b.getBody(),d),h=c(b.getBody(),f.isAboveLine(1),g),i=k.filter(h,f.isLine(1)),q=k.last(g.getClientRects()),p(g)&&(v=g.getNode()),o(g)&&(v=g.getNode(!0)),!q)return null;if(r=q.left,l=e.findClosestClientRect(i,r),l&&m(l.node))return s=Math.abs(r-l.left),u=Math.abs(r-l.right),j.showCaret(a,b,l.node,s=11)&&(b.innerHTML='
'),b},x=function(a,c,e){var f,g,h,i=new d(a.getBody()),j=l.curry(q,i.next),k=l.curry(q,i.prev);if(e.collapsed&&a.settings.forced_root_block){if(f=a.dom.getParent(e.startContainer,"PRE"),!f)return;g=1===c?j(b.fromRangeStart(e)):k(b.fromRangeStart(e)),g||(h=w(a),1===c?a.$(f).after(h):a.$(f).before(h),a.selection.select(h,!0),a.selection.collapse())}},y=function(a,b){var c,e=new d(a.getBody()),f=l.curry(q,e.next),g=l.curry(q,e.prev),h=b?1:-1,i=b?f:g,j=b?p:o,k=a.selection.getRng();return(c=u(h,a,i,j,k))?c:(c=x(a,h,k),c?c:null)},z=function(a,b){var c,d=b?1:-1,e=b?f.downUntil:f.upUntil,g=a.selection.getRng();return(c=v(d,a,e,g))?c:(c=x(a,d,g),c?c:null)},A=function(a,b){return function(){var c=y(a,b);return!!c&&(a.selection.setRng(c),!0)}},B=function(a,b){return function(){var c=z(a,b);return!!c&&(a.selection.setRng(c),!0)}};return{moveH:A,moveV:B}}),g("7j",["60","3y","3z"],function(a,b,c){var d=function(a,b){return b},e=function(b,c){var d=a.isObject(b)&&a.isObject(c);return d?g(b,c):c},f=function(a){return function(){for(var d=new b(arguments.length),e=0;e'},l=function(a,b){return a.nodeName===b||a.previousSibling&&a.previousSibling.nodeName===b},m=function(a,b){return b&&a.isBlock(b)&&!/^(TD|TH|CAPTION|FORM)$/.test(b.nodeName)&&!/^(fixed|absolute)/i.test(b.style.position)&&"true"!==a.getContentEditable(b)},n=function(a,b,c){var d;a.isBlock(c)&&(d=b.getRng(),c.appendChild(a.create("span",null,"\xa0")),b.select(c),c.lastChild.outerHTML="",b.setRng(d))},o=function(a,b,c){var d,e=c,f=[];if(e){for(;e=e.firstChild;){if(a.isBlock(e))return;1!=e.nodeType||b[e.nodeName.toLowerCase()]||f.push(e)}for(d=f.length;d--;)e=f[d],!e.hasChildNodes()||e.firstChild==e.lastChild&&""===e.firstChild.nodeValue?a.remove(e):i(e)&&a.remove(e)}},p=function(a,c,d){return b.isText(c)===!1?d:a?1===d&&c.data.charAt(d-1)===f.ZWSP?0:d:d===c.data.length-1&&c.data.charAt(d)===f.ZWSP?c.data.length:d},q=function(a){var b=a.cloneRange();return b.setStart(a.startContainer,p(!0,a.startContainer,a.startOffset)),b.setEnd(a.endContainer,p(!1,a.endContainer,a.endOffset)),b},r=function(a){for(;a;){if(1===a.nodeType||3===a.nodeType&&a.data&&/[\r\n\s]/.test(a.data))return a;a=a.nextSibling}},s=function(b){function f(f){function x(a){var b,c,f,h,j=a;if(a){if(e.ie&&e.ie<9&&N&&N.firstChild&&N.firstChild==N.lastChild&&"BR"==N.firstChild.tagName&&g.remove(N.firstChild),/^(LI|DT|DD)$/.test(a.nodeName)){var k=r(a.firstChild);k&&/^(UL|OL|DL)$/.test(k.nodeName)&&a.insertBefore(g.doc.createTextNode("\xa0"),a.firstChild)}if(f=g.createRng(),e.ie||a.normalize(),a.hasChildNodes()){for(b=new d(a,a);c=b.current();){if(3==c.nodeType){f.setStart(c,0),f.setEnd(c,0);break}if(w[c.nodeName.toLowerCase()]){f.setStartBefore(c),f.setEndBefore(c);break}j=c,c=b.next()}c||(f.setStart(j,0),f.setEnd(j,0))}else"BR"==a.nodeName?a.nextSibling&&g.isBlock(a.nextSibling)?((!O||O<9)&&(h=g.create("br"),a.parentNode.insertBefore(h,a)),f.setStartBefore(a),f.setEndBefore(a)):(f.setStartAfter(a),f.setEndAfter(a)):(f.setStart(a,0),f.setEnd(a,0));i.setRng(f),g.remove(h),i.scrollIntoView(a)}}function y(a){var b=s.forced_root_block;b&&b.toLowerCase()===a.tagName.toLowerCase()&&g.setAttribs(a,s.forced_root_block_attrs)}function z(a){var b,c,d,e=L,f=u.getTextInlineElements();if(a||"TABLE"==T||"HR"==T?(b=g.create(a||V),y(b)):b=N.cloneNode(!1),d=b,s.keep_styles===!1)g.setAttrib(b,"style",null),g.setAttrib(b,"class",null);else do if(f[e.nodeName]){if("_mce_caret"==e.id)continue;c=e.cloneNode(!1),g.setAttrib(c,"id",""),b.hasChildNodes()?(c.appendChild(b.firstChild),b.appendChild(c)):(d=c,b.appendChild(c))}while((e=e.parentNode)&&e!=K);return h||(d.innerHTML='
'),b}function A(a){var b,c,e,f;if(f=p(a,L,M),3==L.nodeType&&(a?f>0:fL.childNodes.length-1,L=L.childNodes[Math.min(M,L.childNodes.length-1)]||L,M=W&&3==L.nodeType?L.nodeValue.length:0),K=F(L)){if(t.beforeChange(),!g.isBlock(K)&&K!=g.getRoot())return void(V&&!P||D());if((V&&!P||!V&&P)&&(L=B(L,M)),N=g.getParent(L,g.isBlock),S=N?g.getParent(N.parentNode,g.isBlock):null,T=N?N.nodeName.toUpperCase():"",U=S?S.nodeName.toUpperCase():"","LI"!=U||f.ctrlKey||(N=S,T=U),b.undoManager.typing&&(b.undoManager.typing=!1,b.undoManager.add()),/^(LI|DT|DD)$/.test(T)){if(!V&&P)return void D();if(g.isEmpty(N))return void C()}if("PRE"==T&&s.br_in_pre!==!1){if(!P)return void D()}else if(!V&&!P&&"LI"!=T||V&&P)return void D();V&&N===b.getBody()||(V=V||"P",a.isCaretContainerBlock(N)?(Q=a.showCaretContainerBlock(N),g.isEmpty(N)&&k(N),x(Q)):A()?H():A(!0)?(Q=N.parentNode.insertBefore(z(),N),n(g,i,Q),x(l(N,"HR")?Q:N)):(J=q(I).cloneRange(),J.setEndAfter(N),R=J.extractContents(),E(R),Q=R.firstChild,g.insertAfter(R,N),o(g,v,Q),G(N),g.isEmpty(N)&&k(N),Q.normalize(),g.isEmpty(Q)?(g.remove(Q),H()):x(Q)),g.setAttrib(Q,"id",""),b.fire("NewBlock",{newBlock:Q}),t.typing=!1,t.add())}}}var g=b.dom,i=b.selection,s=b.settings,t=b.undoManager,u=b.schema,v=u.getNonEmptyElements(),w=u.getMoveCaretBeforeOnEnterElements();b.on("keydown",function(a){13==a.keyCode&&f(a)!==!1&&a.preventDefault()})};return{setup:s}}),g("7e",["1m","1p","1j","5n"],function(a,b,c,d){var e=function(a,b){return i(a)&&c.isText(b.container())},f=function(a,b){var c=b.container(),d=b.offset();c.insertData(d,"\xa0"),a.selection.setCursorLocation(c,d+1)},g=function(a,b,c){return!!e(c,b)&&(f(a,b),!0)},h=function(c){var e=b.fromRangeStart(c.selection.getRng()),f=d.readLocation(c.getBody(),e);return f.map(a.curry(g,c,e)).getOr(!1)},i=function(b){return b.fold(a.constant(!1),a.constant(!0),a.constant(!0),a.constant(!1))},j=function(a){return!!a.selection.isCollapsed()&&h(a)};return{insertAtSelection:j}}),g("6y",["3x","7e","7d","p"],function(a,b,c,d){var e=function(e,f){var g=c.match([{keyCode:d.SPACEBAR,action:c.action(b.insertAtSelection,e)}],f);a.find(g,function(a){return a.action()}).each(function(a){f.preventDefault()})},f=function(a){a.on("keydown",function(b){b.isDefaultPrevented()===!1&&e(a,b)})};return{setup:f}}),g("6f",["6v","5o","6w","6x","6y"],function(a,b,c,d,e){var f=function(f){var g=b.setupSelectedState(f);a.setup(f,g),c.setup(f,g),d.setup(f),e.setup(f)};return{setup:f}}),g("6g",["h","6","5"],function(a,b,c){return function(d){function e(a){var b,c;if(c=d.$(a).parentsUntil(d.getBody()).add(a),c.length===g.length){for(b=c.length;b>=0&&c[b]===g[b];b--);if(b===-1)return g=c,!0}return g=c,!1}var f,g=[];"onselectionchange"in d.getDoc()||d.on("NodeChange Click MouseUp KeyUp Focus",function(b){var c,e;c=d.selection.getRng(),e={startContainer:c.startContainer,startOffset:c.startOffset,endContainer:c.endContainer,endOffset:c.endOffset},"nodechange"!=b.type&&a.compareRanges(e,f)||d.fire("SelectionChange"),f=e}),d.on("contextmenu",function(){d.fire("SelectionChange")}),d.on("SelectionChange",function(){var a=d.selection.getStart(!0);!b.range&&d.selection.isCollapsed()||!e(a)&&d.dom.isChildOf(a,d.getBody())&&d.nodeChanged({selectionChange:!0})}),d.on("MouseUp",function(a){a.isDefaultPrevented()||("IMG"==d.selection.getNode().nodeName?c.setEditorTimeout(d,function(){d.nodeChanged()}):d.nodeChanged())}),this.nodeChanged=function(a){var b,c,e,f=d.selection;d.initialized&&f&&!d.settings.disable_nodechange&&!d.readonly&&(e=d.getBody(),b=f.getStart(!0)||e,b.ownerDocument==d.getDoc()&&d.dom.isChildOf(b,e)||(b=e),c=[],d.dom.getParent(b,function(a){return a===e||void c.push(a)}),a=a||{},a.element=b,a.parents=c,d.fire("NodeChange",a))}}}),g("6z",["1k","69","1p","a","1j","h","43","5"],function(a,b,c,d,e,f,g,h){var i=e.isContentEditableFalse,j=function(a){return a&&/^(TD|TH)$/i.test(a.nodeName)};return function(c,e){function f(a,b){var d,e,f,h,i,j=g.collapse(a.getBoundingClientRect(),b);return"BODY"==c.tagName?(d=c.ownerDocument.documentElement,e=c.scrollLeft||d.scrollLeft,f=c.scrollTop||d.scrollTop):(i=c.getBoundingClientRect(),e=c.scrollLeft-i.left,f=c.scrollTop-i.top),j.left+=e,j.right+=e,j.top+=f,j.bottom+=f,j.width=1,h=a.offsetWidth-a.clientWidth,h>0&&(b&&(h*=-1),j.left+=h,j.right+=h),j}function k(){var b,e,f,g,h;for(b=d("*[contentEditable=false]",c),g=0;g').css(h).appendTo(c),b&&r.addClass("mce-visual-caret-before"),n(),k=g.ownerDocument.createRange(),k.setStart(s,0),k.setEnd(s,0),k):(s=a.insertInline(g,b),k=g.ownerDocument.createRange(),i(s.nextSibling)?(k.setStart(s,0),k.setEnd(s,0)):(k.setStart(s,1),k.setEnd(s,1)),k)}function m(){k(),s&&(b.remove(s),s=null),r&&(r.remove(),r=null),clearInterval(q)}function n(){q=h.setInterval(function(){d("div.mce-visual-caret",c).toggleClass("mce-visual-caret-hidden")},500)}function o(){h.clearInterval(q)}function p(){return".mce-visual-caret {position: absolute;background-color: black;background-color: currentcolor;}.mce-visual-caret-hidden {display: none;}*[data-mce-caret] {position: absolute;left: -1000px;right: auto;top: 0;margin: 0;padding: 0;}"}var q,r,s;return{show:l,hide:m,getCss:p,destroy:o}}});g("7g",[],function(){var a=function(a){var b,c,d,e;return e=a.getBoundingClientRect(),b=a.ownerDocument,c=b.documentElement,d=b.defaultView,{top:e.top+d.pageYOffset-c.clientTop,left:e.left+d.pageXOffset-c.clientLeft}},b=function(b){return b.inline?a(b.getBody()):{left:0,top:0}},c=function(a){var b=a.getBody();return a.inline?{left:b.scrollLeft,top:b.scrollTop}:{left:0,top:0}},d=function(a){var b=a.getBody(),c=a.getDoc().documentElement,d={left:b.scrollLeft,top:b.scrollTop},e={left:b.scrollLeft||c.scrollLeft,top:b.scrollTop||c.scrollTop};return a.inline?d:e},e=function(b,c){if(c.target.ownerDocument!==b.getDoc()){var e=a(b.getContentAreaContainer()),f=d(b);return{left:c.pageX-e.left+f.left,top:c.pageY-e.top+f.top}}return{left:c.pageX,top:c.pageY}},f=function(a,b,c){return{pageX:c.left-a.left+b.left,pageY:c.top-a.top+b.top}},g=function(a,d){return f(b(a),c(a),e(a,d))};return{calc:g}});g("71",["1j","1g","1w","5","e","7g"],function(a,b,c,d,e,f){var g=a.isContentEditableFalse,h=a.isContentEditableTrue,i=function(a,b){return g(b)&&b!==a},j=function(a,b,c){return b!==c&&!a.dom.isChildOf(b,c)&&!g(b)},k=function(a){var b=a.cloneNode(!0);return b.removeAttribute("data-mce-selected"),b},l=function(a,b,c,d){var e=b.cloneNode(!0);a.dom.setStyles(e,{width:c,height:d}),a.dom.setAttrib(e,"data-mce-selected",null);var f=a.dom.create("div",{"class":"mce-drag-container","data-mce-bogus":"all",unselectable:"on",contenteditable:"false"});return a.dom.setStyles(f,{position:"absolute",opacity:.5,overflow:"hidden",border:0,padding:0,margin:0,width:c,height:d}),a.dom.setStyles(e,{margin:0,boxSizing:"border-box"}),f.appendChild(e),f},m=function(a,b){a.parentNode!==b&&b.appendChild(a)},n=function(a,b,c,d,e,f){var g=0,h=0;a.style.left=b.pageX+"px",a.style.top=b.pageY+"px",b.pageX+c>e&&(g=b.pageX+c-e),b.pageY+d>f&&(h=b.pageY+d-f),a.style.width=c-g+"px",a.style.height=d-h+"px"},o=function(a){a&&a.parentNode&&a.parentNode.removeChild(a)},p=function(a){return 0===a.button},q=function(a){return a.element},r=function(a,b){return{pageX:b.pageX-a.relX,pageY:b.pageY+5}},s=function(a,d){return function(e){if(p(e)){var f=b.find(d.dom.getParents(e.target),c.or(g,h));if(i(d.getBody(),f)){var j=d.dom.getPos(f),k=d.getBody(),m=d.getDoc().documentElement;a.element=f,a.screenX=e.screenX,a.screenY=e.screenY,a.maxX=(d.inline?k.scrollWidth:m.offsetWidth)-2,a.maxY=(d.inline?k.scrollHeight:m.offsetHeight)-2,a.relX=e.pageX-j.x,a.relY=e.pageY-j.y,a.width=f.offsetWidth,a.height=f.offsetHeight,a.ghost=l(d,f,a.width,a.height)}}}},t=function(a,b){var c=d.throttle(function(a,c){b._selectionOverrides.hideFakeCaret(),b.selection.placeCaretAt(a,c)},0);return function(d){var e=Math.max(Math.abs(d.screenX-a.screenX),Math.abs(d.screenY-a.screenY));if(q(a)&&!a.dragging&&e>10){var g=b.fire("dragstart",{target:a.element});if(g.isDefaultPrevented())return;a.dragging=!0,b.focus()}if(a.dragging){var h=r(a,f.calc(b,d));m(a.ghost,b.getBody()),n(a.ghost,h,a.width,a.height,a.maxX,a.maxY),c(d.clientX,d.clientY)}}},u=function(a){var b=a.getSel().getRangeAt(0),c=b.startContainer;return 3===c.nodeType?c.parentNode:c},v=function(a,b){return function(c){if(a.dragging&&j(b,u(b.selection),a.element)){var d=k(a.element),e=b.fire("drop",{targetClone:d,clientX:c.clientX,clientY:c.clientY});e.isDefaultPrevented()||(d=e.targetClone,b.undoManager.transact(function(){o(a.element),b.insertContent(b.dom.getOuterHTML(d)),b._selectionOverrides.hideFakeCaret()}))}x(a)}},w=function(a,b){return function(){x(a),a.dragging&&b.fire("dragend")}},x=function(a){a.dragging=!1,a.element=null,o(a.ghost)},y=function(a){var b,c,d,f,g,h,i={};b=e.DOM,h=document,c=s(i,a),d=t(i,a),f=v(i,a),g=w(i,a),a.on("mousedown",c),a.on("mousemove",d),a.on("mouseup",f),b.bind(h,"mousemove",d),b.bind(h,"mouseup",g),a.on("remove",function(){b.unbind(h,"mousemove",d),b.unbind(h,"mouseup",g)})},z=function(a){a.on("drop",function(b){var c="undefined"!=typeof b.clientX?a.getDoc().elementFromPoint(b.clientX,b.clientY):null;(g(c)||g(a.dom.getContentEditableParent(c)))&&b.preventDefault()})},A=function(a){y(a),z(a)};return{init:A}}),g("7k",[],function(){var a=function(a){return void 0!==a.style};return{isSupported:a}}),g("7h",["60","3x","63","4z","5a","6o","1r","4d","7k","6l","3z","49","4t"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){var n=function(b,c,d){if(!a.isString(d))throw l.error("Invalid call to CSS.set. Property ",c,":: Value ",d,":: Element ",b),new k("CSS value must be a string: "+d);i.isSupported(b)&&b.style.setProperty(c,d)},o=function(a,b){i.isSupported(a)&&a.style.removeProperty(b)},p=function(a,b,c){var d=a.dom();n(d,b,c)},q=function(a,b){var d=a.dom();c.each(b,function(a,b){n(d,b,a)})},r=function(a,b){var d=a.dom();c.each(b,function(a,b){a.fold(function(){o(d,b)},function(a){n(d,b,a)})})},s=function(a,b){var c=a.dom(),d=m.getComputedStyle(c),e=d.getPropertyValue(b),g=""!==e||f.inBody(a)?e:t(c,b);return null===g?void 0:g},t=function(a,b){return i.isSupported(a)?a.style.getPropertyValue(b):""},u=function(a,b){var c=a.dom(),e=t(c,b);return d.from(e).filter(function(a){return a.length>0})},v=function(a,b,c){var d=g.fromTag(a);p(d,b,c);var e=u(d,b);return e.isSome()},w=function(a,b){var c=a.dom();o(c,b),e.has(a,"style")&&""===j.trim(e.get(a,"style"))&&e.remove(a,"style")},x=function(a,b){var c=e.get(a,"style"),d=b(a),f=void 0===c?e.remove:e.set;return f(a,"style",c),d},y=function(a,b){var c=a.dom(),d=b.dom();i.isSupported(c)&&i.isSupported(d)&&(d.style.cssText=c.style.cssText)},z=function(a){return a.dom().offsetWidth},A=function(a,b,c){u(a,c).each(function(a){u(b,c).isNone()&&p(b,c,a)})},B=function(a,c,d){h.isElement(a)&&h.isElement(c)&&b.each(d,function(b){A(a,c,b)})};return{copy:y,set:p,preserve:x,setAll:q,setOptions:r,remove:w,get:s,getRaw:u,isValidValue:v,reflow:z,transfer:B}}),g("72",["1m","1r","7h","59"],function(a,b,c,d){var e=function(a,b){var c=b.dom();return c[a]},f=function(a,b){return parseInt(c.get(b,a),10)},g=a.curry(e,"clientWidth"),h=a.curry(e,"clientHeight"),i=a.curry(f,"margin-top"),j=a.curry(f,"margin-left"),k=function(a){return a.dom().getBoundingClientRect()},l=function(a,b,c){var d=g(a),e=h(a);return b>=0&&c>=0&&b<=d&&c<=e},m=function(a,b,c,d){var e=k(b),f=a?e.left+b.dom().clientLeft+j(b):0,g=a?e.top+b.dom().clientTop+i(b):0,h=c-f,l=d-g;return{x:h,y:l}},n=function(a,c,e){var f=b.fromDom(a.getBody()),g=a.inline?f:d.documentElement(f),h=m(a.inline,g,c,e);return l(g,h.x,h.y)};return{isXYInContentArea:n}}),g("6h",["1k","1p","5i","4m","6z","70","1j","1n","71","72","6","73","5","p"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n){function o(g){function o(a){return g.dom.hasClass(a,"mce-offscreen-selection")}function t(){var a=g.dom.get(M);return a?a.getElementsByTagName("*")[0]:a}function u(a){return g.dom.isBlock(a)}function v(a){a&&g.selection.setRng(a)}function w(){return g.selection.getRng()}function x(a,b){g.selection.scrollIntoView(a,b)}function y(a,b,c){var d;return d=g.fire("ShowCaret",{target:b,direction:a,before:c}),d.isDefaultPrevented()?null:(x(b,a===-1),L.show(c,b))}function z(a,d){return d=c.normalizeRange(a,K,d),a==-1?b.fromRangeStart(d):b.fromRangeEnd(d)}function A(b){b.hasAttribute("data-mce-caret")&&(a.showCaretContainerBlock(b),v(w()),x(b[0]))}function B(){function a(a){for(var b=g.getBody();a&&a!=b;){if(p(a)||q(a))return a;a=a.parentNode}return null}function c(b){var c=!1;b.on("touchstart",function(){c=!1}),b.on("touchmove",function(){c=!0}),b.on("touchend",function(d){var e=a(d.target);q(e)&&(c||(d.preventDefault(),F(l.selectNode(b,e))))})}g.on("mouseup",function(a){var b=w();b.collapsed&&j.isXYInContentArea(g,a.clientX,a.clientY)&&v(l.renderCaretAtRange(g,b))}),g.on("click",function(b){var c;c=a(b.target),c&&(q(c)&&(b.preventDefault(),g.focus()),p(c)&&g.dom.isChildOf(c,g.selection.getNode())&&G())}),g.on("blur NewBlock",function(){G(),I()});var e=function(a){var c=new d(a);if(!a.firstChild)return!1;var e=b.before(a.firstChild),f=c.next(e);return f&&!s(f)&&!r(f)},u=function(a,b){var c=g.dom.getParent(a,g.dom.isBlock),d=g.dom.getParent(b,g.dom.isBlock);return c===d},x=function(a,b){var c=g.dom.getParent(a,g.dom.isBlock),d=g.dom.getParent(b,g.dom.isBlock);return c&&!u(c,d)&&e(c)};c(g),g.on("mousedown",function(b){var c;if(j.isXYInContentArea(g,b.clientX,b.clientY)!==!1)if(c=a(b.target))q(c)?(b.preventDefault(),F(l.selectNode(g,c))):(G(),p(c)&&b.shiftKey||h.isXYWithinRange(b.clientX,b.clientY,g.selection.getRng())||g.selection.placeCaretAt(b.clientX,b.clientY));else{G(),I();var d=f.closestCaret(K,b.clientX,b.clientY);d&&(x(b.target,d.node)||(b.preventDefault(),g.getBody().focus(),v(y(1,d.node,d.before))))}}),g.on("keypress",function(a){if(!n.modifierPressed(a))switch(a.keyCode){default:q(g.selection.getNode())&&a.preventDefault()}}),g.on("getSelectionRange",function(a){var b=a.range;if(J){if(!J.parentNode)return void(J=null);b=b.cloneRange(),b.selectNode(J),a.range=b}}),g.on("setSelectionRange",function(a){var b;b=F(a.range,a.forward),b&&(a.range=b)}),g.on("AfterSetSelectionRange",function(a){var b=a.range;E(b)||I(),o(b.startContainer.parentNode)||G()}),g.on("focus",function(){m.setEditorTimeout(g,function(){g.selection.setRng(l.renderRangeCaret(g,g.selection.getRng()))},0)}),g.on("copy",function(a){var b=a.clipboardData;if(!a.isDefaultPrevented()&&a.clipboardData&&!k.ie){var c=t();c&&(a.preventDefault(),b.clearData(),b.setData("text/html",c.outerHTML),b.setData("text/plain",c.outerText))}}),i.init(g)}function C(){var a=g.contentStyles,b=".mce-content-body";a.push(L.getCss()),a.push(b+" .mce-offscreen-selection {position: absolute;left: -9999999999px;max-width: 1000000px;}"+b+" *[contentEditable=false] {cursor: default;}"+b+" *[contentEditable=true] {cursor: text;}")}function D(b){return a.isCaretContainer(b)||a.startsWithCaretContainer(b)||a.endsWithCaretContainer(b)}function E(a){return D(a.startContainer)||D(a.endContainer); +}function F(a,b){var c,d,e,f,h,i,j,l,m,n,o=g.$,p=g.dom;if(!a)return null;if(a.collapsed){if(!E(a))if(b===!1){if(l=z(-1,a),q(l.getNode(!0)))return y(-1,l.getNode(!0),!1);if(q(l.getNode()))return y(-1,l.getNode(),!l.isAtEnd())}else{if(l=z(1,a),q(l.getNode()))return y(1,l.getNode(),!l.isAtEnd());if(q(l.getNode(!0)))return y(1,l.getNode(!0),!1)}return null}return f=a.startContainer,h=a.startOffset,i=a.endOffset,3==f.nodeType&&0==h&&q(f.parentNode)&&(f=f.parentNode,h=p.nodeIndex(f),f=f.parentNode),1!=f.nodeType?null:(i==h+1&&(c=f.childNodes[h]),q(c)?(m=n=c.cloneNode(!0),j=g.fire("ObjectSelected",{target:c,targetClone:m}),j.isDefaultPrevented()?null:(m=j.targetClone,d=o("#"+M),0===d.length&&(d=o('
').attr("id",M),d.appendTo(g.getBody())),a=g.dom.createRng(),m===n&&k.ie?(d.empty().append('

\xa0

').append(m),a.setStartAfter(d[0].firstChild.firstChild),a.setEndAfter(m)):(d.empty().append("\xa0").append(m).append("\xa0"),a.setStart(d[0].firstChild,1),a.setEnd(d[0].lastChild,0)),d.css({top:p.getPos(c,g.getBody()).y}),d[0].focus(),e=g.selection.getSel(),e.removeAllRanges(),e.addRange(a),g.$("*[data-mce-selected]").removeAttr("data-mce-selected"),c.setAttribute("data-mce-selected",1),J=c,I(),a)):null)}function G(){J&&(J.removeAttribute("data-mce-selected"),g.$("#"+M).remove(),J=null)}function H(){L.destroy(),J=null}function I(){L.hide()}var J,K=g.getBody(),L=new e(g.getBody(),u),M="sel-"+g.dom.uniqueId();return k.ceFalse&&(B(),C()),{showCaret:y,showBlockCaretContainer:A,hideFakeCaret:I,destroy:H}}var p=g.isContentEditableTrue,q=g.isContentEditableFalse,r=c.isAfterContentEditableFalse,s=c.isBeforeContentEditableFalse;return o}),g("74",["e"],function(a){function b(b,c,d){for(var e=[];c&&c!=b;c=c.parentNode)e.push(a.nodeIndex(c,d));return e}function c(a,b){var c,d,e;for(d=a,c=b.length-1;c>=0;c--){if(e=d.childNodes,b[c]>e.length-1)return null;d=e[b[c]]}return d}return{create:b,resolve:c}}),g("6i",["p","h","c","74","i","d","6","9","5","1k","1p","4m"],function(a,b,c,d,e,f,g,h,i,j,k,l){return function(c){function d(a,b){try{c.getDoc().execCommand(a,!1,b)}catch(a){}}function m(){var a=c.getDoc().documentMode;return a?a:6}function n(a){return a.isDefaultPrevented()}function o(a){var b,d;a.dataTransfer&&(c.selection.isCollapsed()&&"IMG"==a.target.tagName&&_.select(a.target),b=c.selection.getContent(),b.length>0&&(d=ga+escape(c.id)+","+escape(b),a.dataTransfer.setData(ha,d)))}function p(a){var b;return a.dataTransfer&&(b=a.dataTransfer.getData(ha),b&&b.indexOf(ga)>=0)?(b=b.substr(ga.length).split(","),{id:unescape(b[0]),html:unescape(b[1])}):null}function q(a,b){c.queryCommandSupported("mceInsertClipboardContent")?c.execCommand("mceInsertClipboardContent",!1,{content:a,internal:b}):c.execCommand("mceInsertContent",!1,a)}function r(){function a(a){var b=$.create("body"),c=a.cloneContents();return b.appendChild(c),_.serializer.serialize(b,{format:"html"})}function d(d){if(!d.setStart){if(d.item)return!1;var e=d.duplicate();return e.moveToElementText(c.getBody()),b.compareRanges(d,e)}var f=a(d),g=$.createRng();g.selectNode(c.getBody());var h=a(g);return f===h}c.on("keydown",function(a){var b,e,f=a.keyCode;if(!n(a)&&(f==Z||f==Y)){if(b=c.selection.isCollapsed(),e=c.getBody(),b&&!$.isEmpty(e))return;if(!b&&!d(c.selection.getRng()))return;a.preventDefault(),c.setContent(""),e.firstChild&&$.isBlock(e.firstChild)?c.selection.setCursorLocation(e.firstChild,0):c.selection.setCursorLocation(e,0),c.nodeChanged()}})}function s(){c.shortcuts.add("meta+a",null,"SelectAll")}function t(){c.settings.content_editable||$.bind(c.getDoc(),"mousedown mouseup",function(a){var b;if(a.target==c.getDoc().documentElement)if(b=_.getRng(),c.getBody().focus(),"mousedown"==a.type){if(j.isCaretContainer(b.startContainer))return;_.placeCaretAt(a.clientX,a.clientY)}else _.setRng(b)})}function u(){c.on("keydown",function(a){if(!n(a)&&a.keyCode===Y){if(!c.getBody().getElementsByTagName("hr").length)return;if(_.isCollapsed()&&0===_.getRng(!0).startOffset){var b=_.getNode(),d=b.previousSibling;if("HR"==b.nodeName)return $.remove(b),void a.preventDefault();d&&d.nodeName&&"hr"===d.nodeName.toLowerCase()&&($.remove(d),a.preventDefault())}}})}function v(){window.Range.prototype.getClientRects||c.on("mousedown",function(a){if(!n(a)&&"HTML"===a.target.nodeName){var b=c.getBody();b.blur(),i.setEditorTimeout(c,function(){b.focus()})}})}function w(){c.on("click",function(a){var b=a.target;/^(IMG|HR)$/.test(b.nodeName)&&"false"!==$.getContentEditableParent(b)&&(a.preventDefault(),c.selection.select(b),c.nodeChanged()),"A"==b.nodeName&&$.hasClass(b,"mce-item-anchor")&&(a.preventDefault(),_.select(b))})}function x(){function a(){var a=$.getAttribs(_.getStart().cloneNode(!1));return function(){var b=_.getStart();b!==c.getBody()&&($.setAttrib(b,"style",null),X(a,function(a){b.setAttributeNode(a.cloneNode(!0))}))}}function b(){return!_.isCollapsed()&&$.getParent(_.getStart(),$.isBlock)!=$.getParent(_.getEnd(),$.isBlock)}c.on("keypress",function(d){var e;if(!n(d)&&(8==d.keyCode||46==d.keyCode)&&b())return e=a(),c.getDoc().execCommand("delete",!1,null),e(),d.preventDefault(),!1}),$.bind(c.getDoc(),"cut",function(d){var e;!n(d)&&b()&&(e=a(),i.setEditorTimeout(c,function(){e()}))})}function y(){document.body.setAttribute("role","application")}function z(){c.on("keydown",function(a){if(!n(a)&&a.keyCode===Y&&_.isCollapsed()&&0===_.getRng(!0).startOffset){var b=_.getNode().previousSibling;if(b&&b.nodeName&&"table"===b.nodeName.toLowerCase())return a.preventDefault(),!1}})}function A(){m()>7||(d("RespectVisibilityInDesign",!0),c.contentStyles.push(".mceHideBrInPre pre br {display: none}"),$.addClass(c.getBody(),"mceHideBrInPre"),ba.addNodeFilter("pre",function(a){for(var b,c,d,f,g=a.length;g--;)for(b=a[g].getAll("br"),c=b.length;c--;)d=b[c],f=d.prev,f&&3===f.type&&"\n"!=f.value.charAt(f.value-1)?f.value+="\n":d.parent.insert(new e("#text",3),d,!0).value="\n"}),ca.addNodeFilter("pre",function(a){for(var b,c,d,e,f=a.length;f--;)for(b=a[f].getAll("br"),c=b.length;c--;)d=b[c],e=d.prev,e&&3==e.type&&(e.value=e.value.replace(/\r?\n$/,""))}))}function B(){$.bind(c.getBody(),"mouseup",function(){var a,b=_.getNode();"IMG"==b.nodeName&&((a=$.getStyle(b,"width"))&&($.setAttrib(b,"width",a.replace(/[^0-9%]+/g,"")),$.setStyle(b,"width","")),(a=$.getStyle(b,"height"))&&($.setAttrib(b,"height",a.replace(/[^0-9%]+/g,"")),$.setStyle(b,"height","")))})}function C(){c.on("keydown",function(b){var d,e,f,g,h;if(!n(b)&&b.keyCode==a.BACKSPACE&&(d=_.getRng(),e=d.startContainer,f=d.startOffset,g=$.getRoot(),h=e,d.collapsed&&0===f)){for(;h&&h.parentNode&&h.parentNode.firstChild==h&&h.parentNode!=g;)h=h.parentNode;"BLOCKQUOTE"===h.tagName&&(c.formatter.toggle("blockquote",null,h),d=$.createRng(),d.setStart(e,0),d.setEnd(e,0),_.setRng(d))}})}function D(){function a(){U(),d("StyleWithCSS",!1),d("enableInlineTableEditing",!1),aa.object_resizing||d("enableObjectResizing",!1)}aa.readonly||c.on("BeforeExecCommand MouseDown",a)}function E(){function a(){X($.select("a"),function(a){var b=a.parentNode,c=$.getRoot();if(b.lastChild===a){for(;b&&!$.isBlock(b);){if(b.parentNode.lastChild!==b||b===c)return;b=b.parentNode}$.add(b,"br",{"data-mce-bogus":1})}})}c.on("SetContent ExecCommand",function(b){"setcontent"!=b.type&&"mceInsertLink"!==b.command||a()})}function F(){aa.forced_root_block&&c.on("init",function(){d("DefaultParagraphSeparator",aa.forced_root_block)})}function G(){c.on("keydown",function(a){var b;n(a)||a.keyCode!=Y||(b=c.getDoc().selection.createRange(),b&&b.item&&(a.preventDefault(),c.undoManager.beforeChange(),$.remove(b.item(0)),c.undoManager.add()))})}function H(){var a;m()>=10&&(a="",X("p div h1 h2 h3 h4 h5 h6".split(" "),function(b,c){a+=(c>0?",":"")+b+":empty"}),c.contentStyles.push(a+"{padding-right: 1px !important}"))}function I(){m()<9&&(ba.addNodeFilter("noscript",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.firstChild,c&&b.attr("data-mce-innertext",c.value)}),ca.addNodeFilter("noscript",function(a){for(var b,c,d,g=a.length;g--;)b=a[g],c=a[g].firstChild,c?c.value=f.decode(c.value):(d=b.attributes.map["data-mce-innertext"],d&&(b.attr("data-mce-innertext",null),c=new e("#text",3),c.value=d,c.raw=!0,b.append(c)))}))}function J(){function a(a,b){var c=h.createTextRange();try{c.moveToPoint(a,b)}catch(a){c=null}return c}function b(b){var d;b.button?(d=a(b.x,b.y),d&&(d.compareEndPoints("StartToStart",e)>0?d.setEndPoint("StartToStart",e):d.setEndPoint("EndToEnd",e),d.select())):c()}function c(){var a=g.selection.createRange();e&&!a.item&&0===a.compareEndPoints("StartToEnd",a)&&e.select(),$.unbind(g,"mouseup",c),$.unbind(g,"mousemove",b),e=d=0}var d,e,f,g=$.doc,h=g.body;g.documentElement.unselectable=!0,$.bind(g,"mousedown contextmenu",function(h){if("HTML"===h.target.nodeName){if(d&&c(),f=g.documentElement,f.scrollHeight>f.clientHeight)return;d=1,e=a(h.x,h.y),e&&($.bind(g,"mouseup",c),$.bind(g,"mousemove",b),$.getRoot().focus(),e.select())}})}function K(){c.on("keyup focusin mouseup",function(b){65==b.keyCode&&a.metaKeyPressed(b)||_.normalize()},!0)}function L(){c.contentStyles.push("img:-moz-broken {-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")}function M(){c.inline||c.on("keydown",function(){document.activeElement==document.body&&c.getWin().focus()})}function N(){c.inline||(c.contentStyles.push("body {min-height: 150px}"),c.on("click",function(a){var b;if("HTML"==a.target.nodeName){if(g.ie>11)return void c.getBody().focus();b=c.selection.getRng(),c.getBody().focus(),c.selection.setRng(b),c.selection.normalize(),c.nodeChanged()}}))}function O(){g.mac&&c.on("keydown",function(b){!a.metaKeyPressed(b)||b.shiftKey||37!=b.keyCode&&39!=b.keyCode||(b.preventDefault(),c.selection.getSel().modify("move",37==b.keyCode?"backward":"forward","lineboundary"))})}function P(){d("AutoUrlDetect",!1)}function Q(){c.on("click",function(a){var b=a.target;do if("A"===b.tagName)return void a.preventDefault();while(b=b.parentNode)}),c.contentStyles.push(".mce-content-body {-webkit-touch-callout: none}")}function R(){c.on("init",function(){c.dom.bind(c.getBody(),"submit",function(a){a.preventDefault()})})}function S(){ba.addNodeFilter("br",function(a){for(var b=a.length;b--;)"Apple-interchange-newline"==a[b].attr("class")&&a[b].remove()})}function T(){c.on("dragstart",function(a){o(a)}),c.on("drop",function(a){if(!n(a)){var d=p(a);if(d&&d.id!=c.id){a.preventDefault();var e=b.getCaretRangeFromPoint(a.x,a.y,c.getDoc());_.setRng(e),q(d.html,!0)}}})}function U(){}function V(){var a;return!da||c.removed?0:(a=c.selection.getSel(),!a||!a.rangeCount||0===a.rangeCount)}function W(){function b(a){var b=new l(a.getBody()),c=a.selection.getRng(),d=k.fromRangeStart(c),e=k.fromRangeEnd(c),f=b.prev(d),g=b.next(e);return!a.selection.isCollapsed()&&(!f||f.isAtStart()&&d.isEqual(f))&&(!g||g.isAtEnd()&&d.isEqual(g))}c.on("keypress",function(d){!n(d)&&!_.isCollapsed()&&d.charCode>31&&!a.metaKeyPressed(d)&&b(c)&&(d.preventDefault(),c.setContent(String.fromCharCode(d.charCode)),c.selection.select(c.getBody(),!0),c.selection.collapse(!1),c.nodeChanged())}),c.on("keydown",function(a){var d=a.keyCode;n(a)||d!=Z&&d!=Y||b(c)&&(a.preventDefault(),c.setContent(""),c.nodeChanged())})}var X=h.each,Y=a.BACKSPACE,Z=a.DELETE,$=c.dom,_=c.selection,aa=c.settings,ba=c.parser,ca=c.serializer,da=g.gecko,ea=g.ie,fa=g.webkit,ga="data:text/mce-internal,",ha=ea?"Text":"URL";return C(),r(),g.windowsPhone||K(),fa&&(W(),t(),w(),F(),R(),z(),S(),g.iOS?(M(),N(),Q()):s()),ea&&g.ie<11&&(u(),y(),A(),B(),G(),H(),I(),J()),g.ie>=11&&(N(),z()),g.ie&&(s(),P(),T()),da&&(W(),u(),v(),x(),D(),E(),L(),O(),z()),{refreshContentEditable:U,isHidden:V}}}),g("5r",["22","4t","6c","e","s","o","6d","2b","6e","t","l","i","j","6f","6g","6h","u","5","6i","9"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t){var u=d.DOM,v=function(a){var b=new k(a.settings,a.schema);return b.addAttributeFilter("src,href,style,tabindex",function(b,c){for(var d,e,f,g=b.length,h=a.dom;g--;)if(d=b[g],e=d.attr(c),f="data-mce-"+c,!d.attributes.map[f]){if(0===e.indexOf("data:")||0===e.indexOf("blob:"))continue;"style"===c?(e=h.serializeStyle(h.parseStyle(e),d.name),e.length||(e=null),d.attr(f,e),d.attr(c,e)):"tabindex"===c?(d.attr(f,e),d.attr(c,null)):d.attr(f,a.convertURL(e,c,d.name))}}),b.addNodeFilter("script",function(a){for(var b,c,d=a.length;d--;)b=a[d],c=b.attr("type")||"no/type",0!==c.indexOf("mce-")&&b.attr("type","mce-"+c)}),b.addNodeFilter("#cdata",function(a){for(var b,c=a.length;c--;)b=a[c],b.type=8,b.name="#comment",b.value="[CDATA["+b.value+"]]"}),b.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(b){for(var c,d=b.length,e=a.schema.getNonEmptyElements();d--;)c=b[d],c.isEmpty(e)&&0===c.getAll("br").length&&(c.append(new l("br",1)).shortEnded=!0)}),b},w=function(a){a.settings.auto_focus&&r.setEditorTimeout(a,function(){var b;b=a.settings.auto_focus===!0?a:a.editorManager.get(a.settings.auto_focus),b.destroyed||b.focus()},100)},x=function(a){a.bindPendingEventDelegates(),a.initialized=!0,a.fire("init"),a.focus(!0),a.nodeChanged({initial:!0}),a.execCallback("init_instance_callback",a),w(a)},y=function(a){return a.inline?u.styleSheetLoader:a.dom.styleSheetLoader},z=function(k,l){var r,w,z=k.settings,A=k.getElement(),B=k.getDoc();z.inline||(k.getElement().style.visibility=k.orgVisibility),l||z.content_editable||(B.open(),B.write(k.iframeHTML),B.close()),z.content_editable&&(k.on("remove",function(){var a=this.getBody();u.removeClass(a,"mce-content-body"),u.removeClass(a,"mce-edit-focus"),u.setAttrib(a,"contentEditable",null)}),u.addClass(A,"mce-content-body"),k.contentDocument=B=z.content_document||a,k.contentWindow=z.content_window||b,k.bodyElement=A,z.content_document=z.content_window=null,z.root_name=A.nodeName.toLowerCase()),r=k.getBody(),r.disabled=!0,k.readonly=z.readonly,k.readonly||(k.inline&&"static"===u.getStyle(r,"position",!0)&&(r.style.position="relative"),r.contentEditable=k.getParam("content_editable_state",!0)),r.disabled=!1,k.editorUpload=new g(k),k.schema=new m(z),k.dom=new d(B,{keep_values:!0,url_converter:k.convertURL,url_converter_scope:k,hex_colors:z.force_hex_style_colors,class_filter:z.class_filter,update_styles:!0,root_element:k.inline?k.getBody():null,collect:z.content_editable,schema:k.schema,onSetAttrib:function(a){k.fire("SetAttrib",a)}}),k.parser=v(k),k.serializer=new f(z,k),k.selection=new e(k.dom,k.getWin(),k.serializer,k),k.formatter=new j(k),k.undoManager=new q(k),k._nodeChangeDispatcher=new o(k),k._selectionOverrides=new p(k),c.setup(k),n.setup(k),i.setup(k),k.fire("PreInit"),z.browser_spellcheck||z.gecko_spellcheck||(B.body.spellcheck=!1,u.setAttrib(r,"spellcheck","false")),k.quirks=new s(k),k.fire("PostRender"),z.directionality&&(r.dir=z.directionality),z.nowrap&&(r.style.whiteSpace="nowrap"),z.protect&&k.on("BeforeSetContent",function(a){t.each(z.protect,function(b){a.content=a.content.replace(b,function(a){return""})})}),k.on("SetContent",function(){k.addVisual(k.getBody())}),z.padd_empty_editor&&k.on("PostProcess",function(a){a.content=a.content.replace(/^(]*>( | |\s|\u00a0|
|)<\/p>[\r\n]*|
[\r\n]*)$/,"")}),k.load({initial:!0,format:"html"}),k.startContent=k.getContent({format:"raw"}),k.on("compositionstart compositionend",function(a){k.composing="compositionstart"===a.type}),k.contentStyles.length>0&&(w="",t.each(k.contentStyles,function(a){w+=a+"\r\n"}),k.dom.addStyle(w)),y(k).loadAll(k.contentCSS,function(a){x(k)},function(a){x(k),h.contentCssError(k,a)})};return{initContentBody:z}}),g("4v",["g"],function(a){return a.PluginManager}),g("4w",["g"],function(a){return a.ThemeManager}),g("4u",["22","4t","e","6","5r","4v","4w","9","2a"],function(a,b,c,d,e,f,g,h,i){var j=c.DOM,k=function(a,b,c){var d,e,g=f.get(c);if(d=f.urls[c]||a.documentBaseUrl.replace(/\/$/,""),c=h.trim(c),g&&h.inArray(b,c)===-1){if(h.each(f.dependencies(c),function(c){k(a,b,c)}),a.plugins[c])return;e=new g(a,d,a.$),a.plugins[c]=e,e.init&&(e.init(a,d),b.push(c))}},l=function(a){var b=[];h.each(a.settings.plugins.replace(/\-/g,"").split(/[ ,]/),function(c){k(a,b,c)})},m=function(a){var b,c=a.settings;c.theme&&("function"!=typeof c.theme?(c.theme=c.theme.replace(/-/,""),b=g.get(c.theme),a.theme=new b(a,g.urls[c.theme]),a.theme.init&&a.theme.init(a,g.urls[c.theme]||a.documentBaseUrl.replace(/\/$/,""),a.$)):a.theme=c.theme)},n=function(a){var b,c,d,e,f,g=a.settings,h=a.getElement();return g.render_ui&&a.theme&&(a.orgDisplay=h.style.display,"function"!=typeof g.theme?(b=g.width||j.getStyle(h,"width")||"100%",c=g.height||j.getStyle(h,"height")||h.offsetHeight,d=g.min_height||100,e=/^[0-9\.]+(|px)$/i,e.test(""+b)&&(b=Math.max(parseInt(b,10),100)),e.test(""+c)&&(c=Math.max(parseInt(c,10),d)),f=a.theme.renderUI({targetNode:h,width:b,height:c,deltaWidth:g.delta_width,deltaHeight:g.delta_height}),g.content_editable||(c=(f.iframeHeight||c)+("number"==typeof c?f.deltaHeight||0:""),c",f.document_base_url!=a.documentBaseUrl&&(a.iframeHTML+=''),!d.caretAfter&&f.ie7_compat&&(a.iframeHTML+=''),a.iframeHTML+='',c=f.body_id||"tinymce",c.indexOf("=")!=-1&&(c=a.getParam("body_id","","hash"),c=c[a.id]||c),e=f.body_class||"",e.indexOf("=")!=-1&&(e=a.getParam("body_class","","hash"),e=e[a.id]||""),f.content_security_policy&&(a.iframeHTML+=''),a.iframeHTML+='
';var g=j.create("iframe",{id:a.id+"_ifr",frameBorder:"0",allowTransparency:"true",title:a.editorManager.translate("Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help"),style:{width:"100%",height:b.height,display:"block"}});g.onload=function(){g.onload=null,a.fire("load")};var h=o(a,g);return a.contentAreaContainer=b.iframeContainer,a.iframeElement=g,j.add(b.iframeContainer,g),h},q=function(a){var b,c=a.settings,d=a.getElement();if(a.rtl=c.rtl_ui||a.editorManager.i18n.rtl,a.editorManager.i18n.setCode(c.language),c.aria_label=c.aria_label||j.getAttrib(d,"aria-label",a.getLang("aria.rich_text_area")),a.fire("ScriptsLoaded"),m(a),l(a),b=n(a),c.content_css&&h.each(h.explode(c.content_css),function(b){a.contentCSS.push(a.documentBaseURI.toAbsolute(b))}),c.content_style&&a.contentStyles.push(c.content_style),c.content_editable)return e.initContentBody(a);var f=p(a,b);b.editorContainer&&(j.get(b.editorContainer).style.display=a.orgDisplay,a.hidden=j.isHidden(b.editorContainer)),a.getElement().style.display="none",j.setAttrib(a.id,"aria-hidden",!0),f||e.initContentBody(a)};return{init:q}}),g("27",["4t","e","7","f","6","2b","4u","11","4v","4w","9","10"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=b.DOM,n=function(a,b){var c=a.settings,e=d.ScriptLoader;if(c.language&&"en"!=c.language&&!c.language_url&&(c.language_url=a.editorManager.baseURL+"/langs/"+c.language+".js"),c.language_url&&e.add(c.language_url),c.theme&&"function"!=typeof c.theme&&"-"!=c.theme.charAt(0)&&!j.urls[c.theme]){var h=c.theme_url;h=h?a.documentBaseURI.toAbsolute(h):"themes/"+c.theme+"/theme"+b+".js",j.load(c.theme,h)}k.isArray(c.plugins)&&(c.plugins=c.plugins.join(" ")),k.each(c.external_plugins,function(a,b){i.load(b,a),c.plugins+=" "+b}),k.each(c.plugins.split(/[ ,]/),function(a){if(a=k.trim(a),a&&!i.urls[a])if("-"===a.charAt(0)){a=a.substr(1,a.length);var c=i.dependencies(a);k.each(c,function(a){var c={prefix:"plugins/",resource:a,suffix:"/plugin"+b+".js"};a=i.createUrl(c,a),i.load(a.resource,a)})}else i.load(a,{prefix:"plugins/",resource:a,suffix:"/plugin"+b+".js"})}),e.loadQueue(function(){a.removed||g.init(a)},a,function(b){f.pluginLoadError(a,b[0]),a.removed||g.init(a)})},o=function(b){function d(){m.unbind(a,"ready",d),b.render()}var f=b.settings,g=b.id;if(!c.Event.domLoaded)return void m.bind(a,"ready",d);if(b.getElement()&&e.contentEditable){f.inline?b.inline=!0:(b.orgVisibility=b.getElement().style.visibility,b.getElement().style.visibility="hidden");var i=b.getElement().form||m.getParent(g,"form");i&&(b.formElement=i,f.hidden_input&&!/TEXTAREA|INPUT/i.test(b.getElement().nodeName)&&(m.insertAfter(m.create("input",{type:"hidden",name:g}),g),b.hasHiddenInput=!0),b.formEventDelegate=function(a){b.fire(a.type,a)},m.bind(i,"submit reset",b.formEventDelegate),b.on("reset",function(){b.setContent(b.startContent,{format:"raw"})}),!f.submit_patch||i.submit.nodeType||i.submit.length||i._mceOldSubmit||(i._mceOldSubmit=i.submit,i.submit=function(){return b.editorManager.triggerSave(),b.setDirty(!1),i._mceOldSubmit(i)})),b.windowManager=new l(b),b.notificationManager=new h(b),"xml"===f.encoding&&b.on("GetContent",function(a){a.save&&(a.content=m.encode(a.content))}),f.add_form_submit_trigger&&b.on("submit",function(){b.initialized&&b.save()}),f.add_unload_trigger&&(b._beforeUnload=function(){!b.initialized||b.destroyed||b.isHidden()||b.save({format:"raw",no_events:!0,set_dirty:!1})},b.editorManager.on("BeforeUnload",b._beforeUnload)),b.editorManager.add(b),n(b,b.suffix)}};return{render:o}}),g("28",[],function(){function a(a,b,c){try{a.getDoc().execCommand(b,!1,c)}catch(a){}}function b(a){var b,c;return b=a.getBody(),c=function(b){a.dom.getParents(b.target,"a").length>0&&b.preventDefault()},a.dom.bind(b,"click",c),{unbind:function(){a.dom.unbind(b,"click",c)}}}function c(c,d){c._clickBlocker&&(c._clickBlocker.unbind(),c._clickBlocker=null),d?(c._clickBlocker=b(c),c.selection.controlSelection.hideResizeRect(),c.readonly=!0,c.getBody().contentEditable=!1):(c.readonly=!1,c.getBody().contentEditable=!0,a(c,"StyleWithCSS",!1),a(c,"enableInlineTableEditing",!1),a(c,"enableObjectResizing",!1),c.focus(),c.nodeChanged())}function d(a,b){var d=a.readonly?"readonly":"design";b!=d&&(a.initialized?c(a,"readonly"==b):a.on("init",function(){c(a,"readonly"==b)}),a.fire("SwitchMode",{mode:b}))}return{setMode:d}}),g("29",[],function(){var a=function(a,b,c){var d=a.sidebars?a.sidebars:[];d.push({name:b,settings:c}),a.sidebars=d};return{add:a}}),g("14",["g","a","e","v","12","26","6","n","27","28","13","29","9","w","2a"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){function p(c,e,h){var i,j,l=this;i=l.documentBaseUrl=h.documentBaseURL,j=h.baseURI,e=f.getEditorSettings(l,c,i,h.defaultSettings,e),l.settings=e,a.language=e.language||"en",a.languageLoad=e.language_load,a.baseURL=h.baseURL,l.id=c,l.setDirty(!1),l.plugins={},l.documentBaseURI=new n(e.document_base_url,{base_uri:j}),l.baseURI=j,l.contentCSS=[],l.contentStyles=[],l.shortcuts=new k(l),l.loadedCSS={},l.editorCommands=new d(l),l.suffix=h.suffix,l.editorManager=h,l.inline=e.inline,e.cache_suffix&&(g.cacheSuffix=e.cache_suffix.replace(/^[\?\&]+/,"")),e.override_viewport===!1&&(g.overrideViewPort=!1),h.fire("SetupEditor",l),l.execCallback("setup",l),l.$=b.overrideDefaults(function(){return{context:l.inline?l.getBody():l.getDoc(),element:l.getBody()}})}var q=c.DOM,r=m.extend,s=m.each,t=m.trim,u=m.resolve,v=g.gecko,w=g.ie;return p.prototype={render:function(){i.render(this)},focus:function(a){function b(a){return f.dom.getParent(a,function(a){return"true"===f.dom.getContentEditable(a)})}var c,d,e,f=this,h=f.selection,i=f.settings.content_editable,j=f.getDoc(),k=f.getBody();if(!f.removed){if(!a){if(c=h.getRng(),c.item&&(d=c.item(0)),f.quirks.refreshContentEditable(),e=b(h.getNode()),f.$.contains(k,e))return e.focus(),h.normalize(),void f.editorManager.setActive(f);if(i||(g.opera||f.getBody().focus(),f.getWin().focus()),v||i){if(k.setActive)try{k.setActive()}catch(a){k.focus()}else f.selection.setRng(f.lastRng),k.focus();i&&h.normalize()}d&&d.ownerDocument==j&&(c=j.body.createControlRange(),c.addElement(d),c.select())}f.editorManager.setActive(f)}},execCallback:function(a){var b,c=this,d=c.settings[a];if(d)return c.callbackLookup&&(b=c.callbackLookup[a])&&(d=b.func,b=b.scope),"string"==typeof d&&(b=d.replace(/\.\w+$/,""),b=b?u(b):0,d=u(d),c.callbackLookup=c.callbackLookup||{},c.callbackLookup[a]={func:d,scope:b}),d.apply(b||c,Array.prototype.slice.call(arguments,1))},translate:function(a){if(a&&m.is(a,"string")){var b=this.settings.language||"en",c=this.editorManager.i18n;a=c.data[b+"."+a]||a.replace(/\{\#([^\}]+)\}/g,function(a,d){return c.data[b+"."+d]||"{#"+d+"}"})}return this.editorManager.translate(a)},getLang:function(a,b){return this.editorManager.i18n.data[(this.settings.language||"en")+"."+a]||(void 0!==b?b:"{#"+a+"}")},getParam:function(a,b,c){var d,e=a in this.settings?this.settings[a]:b;return"hash"===c?(d={},"string"==typeof e?s(e.indexOf("=")>0?e.split(/[;,](?![^=;,]*(?:[;,]|$))/):e.split(","),function(a){a=a.split("="),a.length>1?d[t(a[0])]=t(a[1]):d[t(a[0])]=t(a)}):d=e,d):e},nodeChanged:function(a){this._nodeChangeDispatcher.nodeChanged(a)},addButton:function(a,b){var c=this;b.cmd&&(b.onclick=function(){c.execCommand(b.cmd)}),b.text||b.icon||(b.icon=a),c.buttons=c.buttons||{},b.tooltip=b.tooltip||b.title,c.buttons[a]=b},addSidebar:function(a,b){return l.add(this,a,b)},addMenuItem:function(a,b){var c=this;b.cmd&&(b.onclick=function(){c.execCommand(b.cmd)}),c.menuItems=c.menuItems||{},c.menuItems[a]=b},addContextToolbar:function(a,b){var c,d=this;d.contextToolbars=d.contextToolbars||[],"string"==typeof a&&(c=a,a=function(a){return d.dom.is(a,c)}),d.contextToolbars.push({id:o.uuid("mcet"),predicate:a,items:b})},addCommand:function(a,b,c){this.editorCommands.addCommand(a,b,c)},addQueryStateHandler:function(a,b,c){this.editorCommands.addQueryStateHandler(a,b,c)},addQueryValueHandler:function(a,b,c){this.editorCommands.addQueryValueHandler(a,b,c)},addShortcut:function(a,b,c,d){this.shortcuts.add(a,b,c,d)},execCommand:function(a,b,c,d){return this.editorCommands.execCommand(a,b,c,d)},queryCommandState:function(a){return this.editorCommands.queryCommandState(a)},queryCommandValue:function(a){return this.editorCommands.queryCommandValue(a)},queryCommandSupported:function(a){return this.editorCommands.queryCommandSupported(a)},show:function(){var a=this;a.hidden&&(a.hidden=!1,a.inline?a.getBody().contentEditable=!0:(q.show(a.getContainer()),q.hide(a.id)),a.load(),a.fire("show"))},hide:function(){var a=this,b=a.getDoc();a.hidden||(w&&b&&!a.inline&&b.execCommand("SelectAll"),a.save(),a.inline?(a.getBody().contentEditable=!1,a==a.editorManager.focusedEditor&&(a.editorManager.focusedEditor=null)):(q.hide(a.getContainer()),q.setStyle(a.id,"display",a.orgDisplay)),a.hidden=!0,a.fire("hide"))},isHidden:function(){return!!this.hidden},setProgressState:function(a,b){this.fire("ProgressState",{state:a,time:b})},load:function(a){var b,c=this,d=c.getElement();return c.removed?"":d?(a=a||{},a.load=!0,b=c.setContent(void 0!==d.value?d.value:d.innerHTML,a),a.element=d,a.no_events||c.fire("LoadContent",a),a.element=d=null,b):void 0},save:function(a){var b,c,d=this,e=d.getElement();if(e&&d.initialized&&!d.removed)return a=a||{},a.save=!0,a.element=e,b=a.content=d.getContent(a),a.no_events||d.fire("SaveContent",a),"raw"==a.format&&d.fire("RawSaveContent",a),b=a.content,/TEXTAREA|INPUT/i.test(e.nodeName)?e.value=b:(d.inline||(e.innerHTML=b),(c=q.getParent(d.id,"form"))&&s(c.elements,function(a){if(a.name==d.id)return a.value=b,!1})),a.element=e=null,a.set_dirty!==!1&&d.setDirty(!1),b},setContent:function(a,b){var c,d,e=this,f=e.getBody();return b=b||{},b.format=b.format||"html",b.set=!0,b.content=a,b.no_events||e.fire("BeforeSetContent",b),a=b.content,0===a.length||/^\s+$/.test(a)?(d=w&&w<11?"":'
',"TABLE"==f.nodeName?a=""+d+"":/^(UL|OL)$/.test(f.nodeName)&&(a="
  • "+d+"
  • "),c=e.settings.forced_root_block,c&&e.schema.isValidChild(f.nodeName.toLowerCase(),c.toLowerCase())?(a=d,a=e.dom.createHTML(c,e.settings.forced_root_block_attrs,a)):w||a||(a='
    '),e.dom.setHTML(f,a),e.fire("SetContent",b)):("raw"!==b.format&&(a=new h({validate:e.validate},e.schema).serialize(e.parser.parse(a,{isRootContent:!0}))),b.content=t(a),e.dom.setHTML(f,b.content),b.no_events||e.fire("SetContent",b)),b.content},getContent:function(a){var b,c=this,d=c.getBody();return c.removed?"":(a=a||{},a.format=a.format||"html",a.get=!0,a.getInner=!0,a.no_events||c.fire("BeforeGetContent",a),b="raw"==a.format?m.trim(c.serializer.getTrimmedContent()):"text"==a.format?d.innerText||d.textContent:c.serializer.serialize(d,a),"text"!=a.format?a.content=t(b):a.content=b,a.no_events||c.fire("GetContent",a),a.content)},insertContent:function(a,b){b&&(a=r({content:a},b)),this.execCommand("mceInsertContent",!1,a)},isDirty:function(){return!this.isNotDirty},setDirty:function(a){var b=!this.isNotDirty;this.isNotDirty=!a,a&&a!=b&&this.fire("dirty")},setMode:function(a){j.setMode(this,a)},getContainer:function(){var a=this;return a.container||(a.container=q.get(a.editorContainer||a.id+"_parent")),a.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return this.targetElm||(this.targetElm=q.get(this.id)),this.targetElm},getWin:function(){var a,b=this;return b.contentWindow||(a=b.iframeElement,a&&(b.contentWindow=a.contentWindow)),b.contentWindow},getDoc:function(){var a,b=this;return b.contentDocument||(a=b.getWin(),a&&(b.contentDocument=a.document)),b.contentDocument},getBody:function(){var a=this.getDoc();return this.bodyElement||(a?a.body:null)},convertURL:function(a,b,c){var d=this,e=d.settings;return e.urlconverter_callback?d.execCallback("urlconverter_callback",a,c,!0,b):!e.convert_urls||c&&"LINK"==c.nodeName||0===a.indexOf("file:")||0===a.length?a:e.relative_urls?d.documentBaseURI.toRelative(a):a=d.documentBaseURI.toAbsolute(a,e.remove_script_host)},addVisual:function(a){var b,c=this,d=c.settings,e=c.dom;a=a||c.getBody(),void 0===c.hasVisual&&(c.hasVisual=d.visual),s(e.select("table,a",a),function(a){var f;switch(a.nodeName){case"TABLE":return b=d.visual_table_class||"mce-item-table",f=e.getAttrib(a,"border"),void(f&&"0"!=f||!c.hasVisual?e.removeClass(a,b):e.addClass(a,b));case"A":return void(e.getAttrib(a,"href",!1)||(f=e.getAttrib(a,"name")||a.id,b=d.visual_anchor_class||"mce-item-anchor",f&&c.hasVisual?e.addClass(a,b):e.removeClass(a,b)))}}),c.fire("VisualAid",{element:a,hasVisual:c.hasVisual})},remove:function(){var a=this;a.removed||(a.save(),a.removed=1,a.unbindAllNativeEvents(),a.hasHiddenInput&&q.remove(a.getElement().nextSibling),a.inline||(w&&w<10&&a.getDoc().execCommand("SelectAll",!1,null),q.setStyle(a.id,"display",a.orgDisplay),a.getBody().onload=null),a.fire("remove"),a.editorManager.remove(a),q.remove(a.getContainer()),a._selectionOverrides.destroy(),a.editorUpload.destroy(),a.destroy())},destroy:function(a){var b,c=this;if(!c.destroyed){if(!a&&!c.removed)return void c.remove();a||(c.editorManager.off("beforeunload",c._beforeUnload),c.theme&&c.theme.destroy&&c.theme.destroy(),c.selection.destroy(),c.dom.destroy()),b=c.formElement,b&&(b._mceOldSubmit&&(b.submit=b._mceOldSubmit,b._mceOldSubmit=null),q.unbind(b,"submit reset",c.formEventDelegate)),c.contentAreaContainer=c.formElement=c.container=c.editorContainer=null,c.bodyElement=c.contentDocument=c.contentWindow=null,c.iframeElement=c.targetElm=null,c.selection&&(c.selection=c.selection.win=c.selection.dom=c.selection.dom.doc=null), +c.destroyed=1}},uploadImages:function(a){return this.editorUpload.uploadImages(a)},_scanForImages:function(){return this.editorUpload.scanForImages()}},r(p.prototype,e),p}),g("15",["9"],function(a){"use strict";var b={},c="en";return{setCode:function(a){a&&(c=a,this.rtl=!!this.data[a]&&"rtl"===this.data[a]._dir)},getCode:function(){return c},rtl:!1,add:function(a,c){var d=b[a];d||(b[a]=d={});for(var e in c)d[e]=c[e];this.setCode(a)},translate:function(d){function e(b){return a.is(b,"function")?Object.prototype.toString.call(b):f(b)?"":""+b}function f(b){return""===b||null===b||a.is(b,"undefined")}function g(b){return b=e(b),a.hasOwn(h,b)?e(h[b]):b}var h=b[c]||{};if(f(d))return"";if(a.is(d,"object")&&a.hasOwn(d,"raw"))return e(d.raw);if(a.is(d,"array")){var i=d.slice(1);d=g(d[0]).replace(/\{([0-9]+)\}/g,function(b,c){return a.hasOwn(i,c)?e(i[c]):b})}return g(d).replace(/{context:\w+}$/,"")},data:b}}),g("16",["e","5","6"],function(a,b,c){function d(a){function d(){try{return document.activeElement}catch(a){return document.body}}function j(a,b){if(b&&b.startContainer){if(!a.isChildOf(b.startContainer,a.getRoot())||!a.isChildOf(b.endContainer,a.getRoot()))return;return{startContainer:b.startContainer,startOffset:b.startOffset,endContainer:b.endContainer,endOffset:b.endOffset}}return b}function l(a,b){var c;return b.startContainer?(c=a.getDoc().createRange(),c.setStart(b.startContainer,b.startOffset),c.setEnd(b.endContainer,b.endOffset)):c=b,c}function m(m){var n=m.editor;n.on("init",function(){(n.inline||c.ie)&&("onbeforedeactivate"in document&&c.ie<9?n.dom.bind(n.getBody(),"beforedeactivate",function(a){if(a.target==n.getBody())try{n.lastRng=n.selection.getRng()}catch(a){}}):n.on("nodechange mouseup keyup",function(a){var b=d();"nodechange"==a.type&&a.selectionChange||(b&&b.id==n.id+"_ifr"&&(b=n.getBody()),n.dom.isChildOf(b,n.getBody())&&(n.lastRng=n.selection.getRng()))}),c.webkit&&!e&&(e=function(){var b=a.activeEditor;if(b&&b.selection){var c=b.selection.getRng();c&&!c.collapsed&&(n.lastRng=c)}},h.bind(document,"selectionchange",e)))}),n.on("setcontent",function(){n.lastRng=null}),n.on("mousedown",function(){n.selection.lastFocusBookmark=null}),n.on("focusin",function(){var b,c=a.focusedEditor;n.selection.lastFocusBookmark&&(b=l(n,n.selection.lastFocusBookmark),n.selection.lastFocusBookmark=null,n.selection.setRng(b)),c!=n&&(c&&c.fire("blur",{focusedEditor:n}),a.setActive(n),a.focusedEditor=n,n.fire("focus",{blurredEditor:c}),n.focus(!0)),n.lastRng=null}),n.on("focusout",function(){b.setEditorTimeout(n,function(){var b=a.focusedEditor;i(n,d())||b!=n||(n.fire("blur",{focusedEditor:null}),a.focusedEditor=null,n.selection&&(n.selection.lastFocusBookmark=null))})}),f||(f=function(b){var c,d=a.activeEditor;c=b.target,d&&c.ownerDocument===document&&(d.selection&&c!==d.getBody()&&k(n,c)&&(d.selection.lastFocusBookmark=j(d.dom,d.lastRng)),c===document.body||i(d,c)||a.focusedEditor!==d||(d.fire("blur",{focusedEditor:null}),a.focusedEditor=null))},h.bind(document,"focusin",f)),n.inline&&!g&&(g=function(b){var c=a.activeEditor,d=c.dom;if(c.inline&&d&&!d.isChildOf(b.target,c.getBody())){var e=c.selection.getRng();e.collapsed||(c.lastRng=e)}},h.bind(document,"mouseup",g))}function n(b){a.focusedEditor==b.editor&&(a.focusedEditor=null),a.activeEditor||(h.unbind(document,"selectionchange",e),h.unbind(document,"focusin",f),h.unbind(document,"mouseup",g),e=f=g=null)}a.on("AddEditor",m),a.on("RemoveEditor",n)}var e,f,g,h=a.DOM,i=function(a,b){var c=a?a.settings.custom_ui_selector:"",e=h.getParent(b,function(b){return d.isEditorUIElement(b)||!!c&&a.dom.is(b,c)});return null!==e},j=function(a){return a.inline===!0},k=function(a,b){return j(a)===!1||a.dom.isChildOf(b,a.getBody())===!1};return d.isEditorUIElement=function(a){return a.className.toString().indexOf("mce-")!==-1},d._isUIElement=i,d}),g("2c",["9"],function(a){var b=a.each,c=a.explode,d=function(a){a.on("AddEditor",function(a){var d=a.editor;d.on("preInit",function(){function a(a,c){b(c,function(b,c){b&&h.setStyle(a,c,b)}),h.rename(a,"span")}function e(a){h=d.dom,i.convert_fonts_to_spans&&b(h.select("font,u,strike",a.node),function(a){f[a.nodeName.toLowerCase()](h,a)})}var f,g,h,i=d.settings;i.inline_styles&&(g=c(i.font_size_legacy_values),f={font:function(b,c){a(c,{backgroundColor:c.style.backgroundColor,color:c.color,fontFamily:c.face,fontSize:g[parseInt(c.size,10)-1]})},u:function(b,c){"html4"===d.settings.schema&&a(c,{textDecoration:"underline"})},strike:function(b,c){a(c,{textDecoration:"line-through"})}},d.on("PreProcess SetContent",e))})})};return{register:d}}),g("17",["g","a","e","14","6","2b","16","2c","15","z","4","9","w"],function(a,b,c,d,e,f,g,h,i,j,k,l,m){function n(a){v(s.editors,function(b){"scroll"===a.type?b.fire("ScrollWindow",a):b.fire("ResizeWindow",a)})}function o(a,c){c!==y&&(c?b(window).on("resize scroll",n):b(window).off("resize scroll",n),y=c)}function p(a){var b,c=s.editors;delete c[a.id];for(var d=0;d0&&v(u(b),function(a){var b;(b=t.get(a))?c.push(b):v(document.forms,function(b){v(b.elements,function(b){b.name===a&&(a="mce_editor_"+x++,t.setAttrib(b,"id",a),c.push(b))})})});break;case"textareas":case"specific_textareas":v(t.select("textarea"),function(b){a.editor_deselector&&i(b,a.editor_deselector)||a.editor_selector&&!i(b,a.editor_selector)||c.push(b)})}return c}function m(){function e(a,b,c){var e=new d(a,b,p);n.push(e),e.on("init",function(){++k===i.length&&r(n)}),e.targetElm=e.targetElm||c,e.render()}var i,k=0,n=[];return t.unbind(window,"ready",m),h("onpageload"),i=b.unique(j(a)),a.types?void v(a.types,function(b){l.each(i,function(c){return!t.is(c,b.selector)||(e(g(c),w({},a,b),c),!1)})}):(l.each(i,function(a){q(p.get(a.id))}),i=l.grep(i,function(a){return!p.get(a.id)}),void(0===i.length?r([]):v(i,function(b){c(a,b)?f.initError("Could not initialize inline editor on invalid inline target element",b):e(g(b),a,b)})))}var n,o,p=this;o=l.makeMap("area base basefont br col frame hr img input isindex link meta param embed source wbr track colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu"," ");var r=function(a){n=a};return p.settings=a,t.bind(window,"ready",m),new k(function(a){n?a(n):r=function(b){a(b)}})},get:function(a){return arguments.length?a in this.editors?this.editors[a]:null:this.editors},add:function(a){var b=this,c=b.editors;return c[a.id]=a,c.push(a),o(c,!0),b.activeEditor=a,b.fire("AddEditor",{editor:a}),r||(r=function(){b.fire("BeforeUnload")},t.bind(window,"beforeunload",r)),a},createEditor:function(a,b){return this.add(new d(a,b,this))},remove:function(a){var b,c,d=this,e=d.editors;{if(a)return"string"==typeof a?(a=a.selector||a,void v(t.select(a),function(a){c=e[a.id],c&&d.remove(c)})):(c=a,e[c.id]?(p(c)&&d.fire("RemoveEditor",{editor:c}),e.length||t.unbind(window,"beforeunload",r),c.remove(),o(e,e.length>0),c):null);for(b=e.length-1;b>=0;b--)d.remove(e[b])}},execCommand:function(a,b,c){var e=this,f=e.get(c);switch(a){case"mceAddEditor":return e.get(c)||new d(c,e.settings,e).render(),!0;case"mceRemoveEditor":return f&&f.remove(),!0;case"mceToggleEditor":return f?(f.isHidden()?f.show():f.hide(),!0):(e.execCommand("mceAddEditor",0,c),!0)}return!!e.activeEditor&&e.activeEditor.execCommand(a,b,c)},triggerSave:function(){v(this.editors,function(a){a.save()})},addI18n:function(a,b){i.add(a,b)},translate:function(a){return i.translate(a)},setActive:function(a){var b=this.activeEditor;this.activeEditor!=a&&(b&&b.fire("deactivate",{relatedTarget:a}),a.fire("activate",{relatedTarget:b})),this.activeEditor=a}},w(s,j),s.setup(),h.register(s),s}),g("18",["z","9"],function(a,b){var c={send:function(a){function d(){!a.async||4==e.readyState||f++>1e4?(a.success&&f<1e4&&200==e.status?a.success.call(a.success_scope,""+e.responseText,e,a):a.error&&a.error.call(a.error_scope,f>1e4?"TIMED_OUT":"GENERAL",e,a),e=null):setTimeout(d,10)}var e,f=0;if(a.scope=a.scope||this,a.success_scope=a.success_scope||a.scope,a.error_scope=a.error_scope||a.scope,a.async=a.async!==!1,a.data=a.data||"",c.fire("beforeInitialize",{settings:a}),e=new XMLHttpRequest){if(e.overrideMimeType&&e.overrideMimeType(a.content_type),e.open(a.type||(a.data?"POST":"GET"),a.url,a.async),a.crossDomain&&(e.withCredentials=!0),a.content_type&&e.setRequestHeader("Content-Type",a.content_type),a.requestheaders&&b.each(a.requestheaders,function(a){e.setRequestHeader(a.key,a.value)}),e.setRequestHeader("X-Requested-With","XMLHttpRequest"),e=c.fire("beforeSend",{xhr:e,settings:a}).xhr,e.send(a.data),!a.async)return d();setTimeout(d,10)}}};return b.extend(c,a),c}),g("19",[],function(){function a(b,c){var d,e,f,g;if(c=c||'"',null===b)return"null";if(f=typeof b,"string"==f)return e="\bb\tt\nn\ff\rr\"\"''\\\\",c+b.replace(/([\u0080-\uFFFF\x00-\x1f\"\'\\])/g,function(a,b){return'"'===c&&"'"===a?a:(d=e.indexOf(b),d+1?"\\"+e.charAt(d+1):(a=b.charCodeAt().toString(16),"\\u"+"0000".substring(a.length)+a))})+c;if("object"==f){if(b.hasOwnProperty&&"[object Array]"===Object.prototype.toString.call(b)){for(d=0,e="[";d0?",":"")+a(b[d],c);return e+"]"}e="{";for(g in b)b.hasOwnProperty(g)&&(e+="function"!=typeof b[g]?(e.length>1?","+c:c)+g+c+":"+a(b[g],c):"");return e+"}"}return""+b}return{serialize:a,parse:function(a){try{return window[String.fromCharCode(101)+"val"]("("+a+")")}catch(a){}}}}),g("1a",["19","18","9"],function(a,b,c){function d(a){this.settings=e({},a),this.count=0}var e=c.extend;return d.sendRPC=function(a){return(new d).send(a)},d.prototype={send:function(c){var d=c.error,f=c.success;c=e(this.settings,c),c.success=function(b,e){b=a.parse(b),"undefined"==typeof b&&(b={error:"JSON Parse error."}),b.error?d.call(c.error_scope||c.scope,b.error,e):f.call(c.success_scope||c.scope,b.result)},c.error=function(a,b){d&&d.call(c.error_scope||c.scope,a,b)},c.data=a.serialize({id:c.id||"c"+this.count++,method:c.method,params:c.params}),c.content_type="application/json",b.send(c)}},d}),g("1b",["e"],function(a){return{callbacks:{},count:0,send:function(b){var c=this,d=a.DOM,e=void 0!==b.count?b.count:c.count,f="tinymce_jsonp_"+e;c.callbacks[e]=function(a){d.remove(f),delete c.callbacks[e],b.callback(a)},d.add(d.doc.body,"script",{id:f,src:b.url,type:"text/javascript"}),c.count++}}}),g("1c",[],function(){function a(){g=[];for(var a in f)g.push(a);d.length=g.length}function b(){function b(a){var b,c;return c=void 0!==a?j+a:d.indexOf(",",j),c===-1||c>d.length?null:(b=d.substring(j,c),j=c+1,b)}var c,d,g,j=0;if(f={},i){e.load(h),d=e.getAttribute(h)||"";do{var k=b();if(null===k)break;if(c=b(parseInt(k,32)||0),null!==c){if(k=b(),null===k)break;g=b(parseInt(k,32)||0),c&&(f[c]=g)}}while(null!==c);a()}}function c(){var b,c="";if(i){for(var d in f)b=f[d],c+=(c?",":"")+d.length.toString(32)+","+d+","+b.length.toString(32)+","+b;e.setAttribute(h,c);try{e.save(h)}catch(a){}a()}}var d,e,f,g,h,i;try{if(window.localStorage)return localStorage}catch(a){}return h="tinymce",e=document.documentElement,i=!!e.addBehavior,i&&e.addBehavior("#default#userData"),d={key:function(a){return g[a]},getItem:function(a){return a in f?f[a]:null},setItem:function(a,b){f[a]=""+b,c()},removeItem:function(a){delete f[a],c()},clear:function(){f={},c()}},b(),d}),g("1d",["e","7","f","g","9","6"],function(a,b,c,d,e,f){var g=function(g){g.DOM=a.DOM,g.ScriptLoader=c.ScriptLoader,g.PluginManager=d.PluginManager,g.ThemeManager=d.ThemeManager,g.dom=g.dom||{},g.dom.Event=b.Event,e.each("trim isArray is toArray makeMap each map grep inArray extend create walk createNS resolve explode _addCacheSuffix".split(" "),function(a){g[a]=e[a]}),e.each("isOpera isWebKit isIE isGecko isMac".split(" "),function(a){g[a]=f[a.substr(2).toLowerCase()]})};return{register:g}}),g("1e",[],function(){function a(a){function e(a,e,f){var g,h,i,j,k,l;return g=0,h=0,i=0,a/=255,e/=255,f/=255,k=b(a,b(e,f)),l=c(a,c(e,f)),k==l?(i=k,{h:0,s:0,v:100*i}):(j=a==k?e-f:f==k?a-e:f-a,g=a==k?3:f==k?1:5,g=60*(g-j/(l-k)),h=(l-k)/l,i=l,{h:d(g),s:d(100*h),v:d(100*i)})}function f(a,e,f){var g,h,i,j;if(a=(parseInt(a,10)||0)%360,e=parseInt(e,10)/100,f=parseInt(f,10)/100,e=c(0,b(e,1)),f=c(0,b(f,1)),0===e)return void(l=m=n=d(255*f));switch(g=a/60,h=f*e,i=h*(1-Math.abs(g%2-1)),j=f-h,Math.floor(g)){case 0:l=h,m=i,n=0;break;case 1:l=i,m=h,n=0;break;case 2:l=0,m=h,n=i;break;case 3:l=0,m=i,n=h;break;case 4:l=i,m=0,n=h;break;case 5:l=h,m=0,n=i;break;default:l=m=n=0}l=d(255*(l+j)),m=d(255*(m+j)),n=d(255*(n+j))}function g(){function a(a){return a=parseInt(a,10).toString(16),a.length>1?a:"0"+a}return"#"+a(l)+a(m)+a(n)}function h(){return{r:l,g:m,b:n}}function i(){return e(l,m,n)}function j(a){var b;return"object"==typeof a?"r"in a?(l=a.r,m=a.g,n=a.b):"v"in a&&f(a.h,a.s,a.v):(b=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)[^\)]*\)/gi.exec(a))?(l=parseInt(b[1],10),m=parseInt(b[2],10),n=parseInt(b[3],10)):(b=/#([0-F]{2})([0-F]{2})([0-F]{2})/gi.exec(a))?(l=parseInt(b[1],16),m=parseInt(b[2],16),n=parseInt(b[3],16)):(b=/#([0-F])([0-F])([0-F])/gi.exec(a))&&(l=parseInt(b[1]+b[1],16),m=parseInt(b[2]+b[2],16),n=parseInt(b[3]+b[3],16)),l=l<0?0:l>255?255:l,m=m<0?0:m>255?255:m,n=n<0?0:n>255?255:n,k}var k=this,l=0,m=0,n=0;a&&j(a),k.toRgb=h,k.toHsv=i,k.toHex=g,k.parse=j}var b=Math.min,c=Math.max,d=Math.round;return a}),g("2t",["x","9"],function(a,b){"use strict";return a.extend({Defaults:{firstControlClass:"first",lastControlClass:"last"},init:function(a){this.settings=b.extend({},this.Defaults,a)},preRender:function(a){a.bodyClasses.add(this.settings.containerClass)},applyClasses:function(a){var b,c,d,e,f=this,g=f.settings;b=g.firstControlClass,c=g.lastControlClass,a.each(function(a){a.classes.remove(b).remove(c).add(g.controlClass),a.visible()&&(d||(d=a),e=a)}),d&&d.classes.add(b),e&&e.classes.add(c)},renderHtml:function(a){var b=this,c="";return b.applyClasses(a.items()),a.items().each(function(a){c+=a.renderHtml()}),c},recalc:function(){},postRender:function(){},isNative:function(){return!1}})}),g("2u",["2t"],function(a){"use strict";return a.extend({Defaults:{containerClass:"abs-layout",controlClass:"abs-layout-item"},recalc:function(a){a.items().filter(":visible").each(function(a){var b=a.settings;a.layoutRect({x:b.x,y:b.y,w:b.w,h:b.h}),a.recalc&&a.recalc()})},renderHtml:function(a){return'
    '+this._super(a)}})}),g("2v",["2r"],function(a){"use strict";return a.extend({Defaults:{classes:"widget btn",role:"button"},init:function(a){var b,c=this;c._super(a),a=c.settings,b=c.settings.size,c.on("click mousedown",function(a){a.preventDefault()}),c.on("touchstart",function(a){c.fire("click",a),a.preventDefault()}),a.subtype&&c.classes.add(a.subtype),b&&c.classes.add("btn-"+b),a.icon&&c.icon(a.icon)},icon:function(a){return arguments.length?(this.state.set("icon",a),this):this.state.get("icon")},repaint:function(){var a,b=this.getEl().firstChild;b&&(a=b.style,a.width=a.height="100%"),this._super()},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get("icon"),f=b.state.get("text"),g="";return a=b.settings.image,a?(e="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",f&&(b.classes.add("btn-has-text"),g=''+b.encode(f)+""),e=e?d+"ico "+d+"i-"+e:"",'
    "},bindStates:function(){function a(a){var e=c("span."+d,b.getEl());a?(e[0]||(c("button:first",b.getEl()).append(''),e=c("span."+d,b.getEl())),e.html(b.encode(a))):e.remove(),b.classes.toggle("btn-has-text",!!a)}var b=this,c=b.$,d=b.classPrefix+"txt";return b.state.on("change:text",function(b){a(b.value)}),b.state.on("change:icon",function(c){var d=c.value,e=b.classPrefix;b.settings.icon=d,d=d?e+"ico "+e+"i-"+b.settings.icon:"";var f=b.getEl().firstChild,g=f.getElementsByTagName("i")[0];d?(g&&g==f.firstChild||(g=document.createElement("i"),f.insertBefore(g,f.firstChild)),g.className=d):g&&f.removeChild(g),a(b.state.get("text"))}),b._super()}})}),g("2w",["2j"],function(a){"use strict";return a.extend({Defaults:{defaultType:"button",role:"group"},renderHtml:function(){var a=this,b=a._layout;return a.classes.add("btn-group"),a.preRender(),b.preRender(a),'
    '+(a.settings.html||"")+b.renderHtml(a)+"
    "}})}),g("2x",["2r"],function(a){"use strict";return a.extend({Defaults:{classes:"checkbox",role:"checkbox",checked:!1},init:function(a){var b=this;b._super(a),b.on("click mousedown",function(a){a.preventDefault()}),b.on("click",function(a){a.preventDefault(),b.disabled()||b.checked(!b.checked())}),b.checked(b.settings.checked)},checked:function(a){return arguments.length?(this.state.set("checked",a),this):this.state.get("checked")},value:function(a){return arguments.length?this.checked(a):this.checked()},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'
    '+a.encode(a.state.get("text"))+"
    "},bindStates:function(){function a(a){b.classes.toggle("checked",a),b.aria("checked",a)}var b=this;return b.state.on("change:text",function(a){b.getEl("al").firstChild.data=b.translate(a.value)}),b.state.on("change:checked change:value",function(c){b.fire("change"),a(c.value)}),b.state.on("change:icon",function(a){var c=a.value,d=b.classPrefix;if("undefined"==typeof c)return b.settings.icon;b.settings.icon=c,c=c?d+"ico "+d+"i-"+b.settings.icon:"";var e=b.getEl().firstChild,f=e.getElementsByTagName("i")[0];c?(f&&f==e.firstChild||(f=document.createElement("i"),e.insertBefore(f,e.firstChild)),f.className=c):f&&e.removeChild(f)}),b.state.get("checked")&&a(!0),b._super()}})}),g("2y",["2r","2h","4q","a","p","9"],function(a,b,c,d,e,f){"use strict";return a.extend({init:function(a){var b=this;b._super(a),a=b.settings,b.classes.add("combobox"),b.subinput=!0,b.ariaTarget="inp",a.menu=a.menu||a.values,a.menu&&(a.icon="caret"),b.on("click",function(c){var e=c.target,f=b.getEl();if(d.contains(f,e)||e==f)for(;e&&e!=f;)e.id&&e.id.indexOf("-open")!=-1&&(b.fire("action"),a.menu&&(b.showMenu(),c.aria&&b.menu.items()[0].focus())),e=e.parentNode}),b.on("keydown",function(a){var c;13==a.keyCode&&"INPUT"===a.target.nodeName&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))}),b.on("keyup",function(a){if("INPUT"==a.target.nodeName){var c=b.state.get("value"),d=a.target.value;d!==c&&(b.state.set("value",d),b.fire("autocomplete",a))}}),b.on("mouseover",function(a){var c=b.tooltip().moveTo(-65535);if(b.statusLevel()&&a.target.className.indexOf(b.classPrefix+"status")!==-1){var d=b.statusMessage()||"Ok",e=c.text(d).show().testMoveRel(a.target,["bc-tc","bc-tl","bc-tr"]);c.classes.toggle("tooltip-n","bc-tc"==e),c.classes.toggle("tooltip-nw","bc-tl"==e),c.classes.toggle("tooltip-ne","bc-tr"==e),c.moveRel(a.target,e)}})},statusLevel:function(a){return arguments.length>0&&this.state.set("statusLevel",a),this.state.get("statusLevel")},statusMessage:function(a){return arguments.length>0&&this.state.set("statusMessage",a),this.state.get("statusMessage")},showMenu:function(){var a,c=this,d=c.settings;c.menu||(a=d.menu||[],a.length?a={type:"menu",items:a}:a.type=a.type||"menu",c.menu=b.create(a).parent(c).renderTo(c.getContainerElm()),c.fire("createmenu"),c.menu.reflow(),c.menu.on("cancel",function(a){a.control===c.menu&&c.focus()}),c.menu.on("show hide",function(a){a.control.items().each(function(a){a.active(a.value()==c.value())})}).fire("show"),c.menu.on("select",function(a){c.value(a.control.value())}),c.on("focusin",function(a){"INPUT"==a.target.tagName.toUpperCase()&&c.menu.hide()}),c.aria("expanded",!0)),c.menu.show(),c.menu.layoutRect({w:c.layoutRect().w}),c.menu.moveRel(c.getEl(),c.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},focus:function(){this.getEl("inp").focus()},repaint:function(){var a,b,e=this,f=e.getEl(),g=e.getEl("open"),h=e.layoutRect(),i=0,j=f.firstChild;e.statusLevel()&&"none"!==e.statusLevel()&&(i=parseInt(c.getRuntimeStyle(j,"padding-right"),10)-parseInt(c.getRuntimeStyle(j,"padding-left"),10)),a=g?h.w-c.getSize(g).width-10:h.w-10;var k=document;return k.all&&(!k.documentMode||k.documentMode<=8)&&(b=e.layoutRect().h-2+"px"),d(j).css({width:a-i,lineHeight:b}),e._super(),e},postRender:function(){var a=this;return d(this.getEl("inp")).on("change",function(b){a.state.set("value",b.target.value),a.fire("change",b)}),a._super()},renderHtml:function(){var a,b,c=this,d=c._id,e=c.settings,f=c.classPrefix,g=c.state.get("value")||"",h="",i="",j="";return"spellcheck"in e&&(i+=' spellcheck="'+e.spellcheck+'"'),e.maxLength&&(i+=' maxlength="'+e.maxLength+'"'),e.size&&(i+=' size="'+e.size+'"'),e.subtype&&(i+=' type="'+e.subtype+'"'),j='',c.disabled()&&(i+=' disabled="disabled"'),a=e.icon,a&&"caret"!=a&&(a=f+"ico "+f+"i-"+e.icon),b=c.state.get("text"),(a||b)&&(h='
    ",c.classes.add("has-open")),'
    '+j+h+"
    "},value:function(a){return arguments.length?(this.state.set("value",a),this):(this.state.get("rendered")&&this.state.set("value",this.getEl("inp").value),this.state.get("value"))},showAutoComplete:function(a,c){var d=this;if(0===a.length)return void d.hideMenu();var e=function(a,b){return function(){d.fire("selectitem",{title:b,value:a})}};d.menu?d.menu.items().remove():d.menu=b.create({type:"menu",classes:"combobox-menu",layout:"flow"}).parent(d).renderTo(),f.each(a,function(a){d.menu.add({text:a.title,url:a.previewUrl,match:c,classes:"menu-item-ellipsis",onclick:e(a.value,a.title)})}),d.menu.renderNew(),d.hideMenu(),d.menu.on("cancel",function(a){a.control.parent()===d.menu&&(a.stopPropagation(),d.focus(),d.hideMenu())}),d.menu.on("select",function(){d.focus()});var g=d.layoutRect().w;d.menu.layoutRect({w:g,minW:0,maxW:g}),d.menu.reflow(),d.menu.show(),d.menu.moveRel(d.getEl(),d.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"])},hideMenu:function(){this.menu&&this.menu.hide()},bindStates:function(){var a=this;a.state.on("change:value",function(b){a.getEl("inp").value!=b.value&&(a.getEl("inp").value=b.value)}),a.state.on("change:disabled",function(b){a.getEl("inp").disabled=b.value}),a.state.on("change:statusLevel",function(b){var d=a.getEl("status"),e=a.classPrefix,f=b.value;c.css(d,"display","none"===f?"none":""),c.toggleClass(d,e+"i-checkmark","ok"===f),c.toggleClass(d,e+"i-warning","warn"===f),c.toggleClass(d,e+"i-error","error"===f),a.classes.toggle("has-status","none"!==f),a.repaint()}),c.on(a.getEl("status"),"mouseleave",function(){a.tooltip().hide()}),a.on("cancel",function(b){a.menu&&a.menu.visible()&&(b.stopPropagation(),a.hideMenu())});var b=function(a,b){b&&b.items().length>0&&b.items().eq(a)[0].focus()};return a.on("keydown",function(c){var d=c.keyCode;"INPUT"===c.target.nodeName&&(d===e.DOWN?(c.preventDefault(),a.fire("autocomplete"),b(0,a.menu)):d===e.UP&&(c.preventDefault(),b(-1,a.menu)))}),a._super()},remove:function(){d(this.getEl("inp")).off(),this.menu&&this.menu.remove(),this._super()}})}),g("2z",["2y"],function(a){"use strict";return a.extend({init:function(a){var b=this;a.spellcheck=!1,a.onaction&&(a.icon="none"),b._super(a),b.classes.add("colorbox"),b.on("change keyup postrender",function(){b.repaintColor(b.value())})},repaintColor:function(a){var b=this.getEl("open"),c=b?b.getElementsByTagName("i")[0]:null;if(c)try{c.style.background=a}catch(a){}},bindStates:function(){var a=this;return a.state.on("change:value",function(b){a.state.get("rendered")&&a.repaintColor(b.value)}),a._super()}})}),g("30",["2v","2p"],function(a,b){"use strict";return a.extend({showPanel:function(){var a=this,c=a.settings;if(a.active(!0),a.panel)a.panel.show();else{var d=c.panel;d.type&&(d={layout:"grid",items:d}),d.role=d.role||"dialog",d.popover=!0,d.autohide=!0,d.ariaRoot=!0,a.panel=new b(d).on("hide",function(){a.active(!1)}).on("cancel",function(b){b.stopPropagation(),a.focus(),a.hidePanel()}).parent(a).renderTo(a.getContainerElm()),a.panel.fire("show"),a.panel.reflow()}var e=a.panel.testMoveRel(a.getEl(),c.popoverAlign||(a.isRtl()?["bc-tc","bc-tl","bc-tr"]:["bc-tc","bc-tr","bc-tl"]));a.panel.classes.toggle("start","bc-tl"===e),a.panel.classes.toggle("end","bc-tr"===e),a.panel.moveRel(a.getEl(),e)},hidePanel:function(){var a=this;a.panel&&a.panel.hide()},postRender:function(){var a=this;return a.aria("haspopup",!0),a.on("click",function(b){b.control===a&&(a.panel&&a.panel.visible()?a.hidePanel():(a.showPanel(),a.panel.focus(!!b.aria)))}),a._super()},remove:function(){return this.panel&&(this.panel.remove(),this.panel=null),this._super()}})}),g("31",["30","e"],function(a,b){"use strict";var c=b.DOM;return a.extend({init:function(a){this._super(a),this.classes.add("colorbutton")},color:function(a){return a?(this._color=a,this.getEl("preview").style.backgroundColor=a,this):this._color},resetColor:function(){return this._color=null,this.getEl("preview").style.backgroundColor=null,this},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix,d=a.state.get("text"),e=a.settings.icon?c+"ico "+c+"i-"+a.settings.icon:"",f=a.settings.image?" style=\"background-image: url('"+a.settings.image+"')\"":"",g="";return d&&(a.classes.add("btn-has-text"),g=''+a.encode(d)+""),'
    '},postRender:function(){var a=this,b=a.settings.onclick;return a.on("click",function(d){d.aria&&"down"==d.aria.key||d.control!=a||c.getParent(d.target,"."+a.classPrefix+"open")||(d.stopImmediatePropagation(),b.call(a,d))}),delete a.settings.onclick,a._super()}})}),g("32",["2r","2k","4q","1e"],function(a,b,c,d){"use strict";return a.extend({Defaults:{classes:"widget colorpicker"},init:function(a){this._super(a)},postRender:function(){function a(a,b){var d,e,f=c.getPos(a);return d=b.pageX-f.x,e=b.pageY-f.y,d=Math.max(0,Math.min(d/a.clientWidth,1)),e=Math.max(0,Math.min(e/a.clientHeight,1)),{x:d,y:e}}function e(a,b){var e=(360-a.h)/360;c.css(j,{top:100*e+"%"}),b||c.css(l,{left:a.s+"%",top:100-a.v+"%"}),k.style.background=new d({s:100,v:100,h:a.h}).toHex(),m.color().parse({s:a.s,v:a.v,h:a.h})}function f(b){var c;c=a(k,b),h.s=100*c.x,h.v=100*(1-c.y),e(h),m.fire("change")}function g(b){var c;c=a(i,b),h=n.toHsv(),h.h=360*(1-c.y),e(h,!0),m.fire("change")}var h,i,j,k,l,m=this,n=m.color();i=m.getEl("h"),j=m.getEl("hp"),k=m.getEl("sv"),l=m.getEl("svp"),m._repaint=function(){h=n.toHsv(),e(h)},m._super(),m._svdraghelper=new b(m._id+"-sv",{start:f,drag:f}),m._hdraghelper=new b(m._id+"-h",{start:g,drag:g}),m._repaint()},rgb:function(){return this.color().toRgb()},value:function(a){var b=this;return arguments.length?(b.color().parse(a),void(b._rendered&&b._repaint())):b.color().toHex()},color:function(){return this._color||(this._color=new d),this._color},renderHtml:function(){function a(){var a,b,c,d,g="";for(c="filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr=",d=f.split(","),a=0,b=d.length-1;a';return g}var b,c=this,d=c._id,e=c.classPrefix,f="#ff0000,#ff0080,#ff00ff,#8000ff,#0000ff,#0080ff,#00ffff,#00ff80,#00ff00,#80ff00,#ffff00,#ff8000,#ff0000",g="background: -ms-linear-gradient(top,"+f+");background: linear-gradient(to bottom,"+f+");";return b='
    '+a()+'
    ','
    '+b+"
    "}})}),g("33",["2r"],function(a){"use strict";return a.extend({init:function(a){var b=this;a.delimiter||(a.delimiter="\xbb"),b._super(a),b.classes.add("path"),b.canFocus=!0,b.on("click",function(a){var c,d=a.target;(c=d.getAttribute("data-index"))&&b.fire("select",{value:b.row()[c],index:c})}),b.row(b.settings.row)},focus:function(){var a=this;return a.getEl().firstChild.focus(),a},row:function(a){return arguments.length?(this.state.set("row",a),this):this.state.get("row")},renderHtml:function(){var a=this;return'
    '+a._getDataPathHtml(a.state.get("row"))+"
    "},bindStates:function(){var a=this;return a.state.on("change:row",function(b){a.innerHtml(a._getDataPathHtml(b.value))}),a._super()},_getDataPathHtml:function(a){var b,c,d=this,e=a||[],f="",g=d.classPrefix;for(b=0,c=e.length;b0?'":"")+'
    '+e[b].name+"
    "; +return f||(f='
    \xa0
    '),f}})}),g("34",["33"],function(a){return a.extend({postRender:function(){function a(a){if(1===a.nodeType){if("BR"==a.nodeName||a.getAttribute("data-mce-bogus"))return!0;if("bookmark"===a.getAttribute("data-mce-type"))return!0}return!1}var b=this,c=b.settings.editor;return c.settings.elementpath!==!1&&(b.on("select",function(a){c.focus(),c.selection.select(this.row()[a.index].element),c.nodeChanged()}),c.on("nodeChange",function(d){for(var e=[],f=d.parents,g=f.length;g--;)if(1==f[g].nodeType&&!a(f[g])){var h=c.fire("ResolveName",{name:f[g].nodeName.toLowerCase(),target:f[g]});if(h.isDefaultPrevented()||e.push({name:h.name,element:f[g]}),h.isPropagationStopped())break}b.row(e)})),b._super()}})}),g("35",["2j"],function(a){"use strict";return a.extend({Defaults:{layout:"flex",align:"center",defaults:{flex:1}},renderHtml:function(){var a=this,b=a._layout,c=a.classPrefix;return a.classes.add("formitem"),b.preRender(a),'
    '+(a.settings.title?'
    '+a.settings.title+"
    ":"")+'
    '+(a.settings.html||"")+b.renderHtml(a)+"
    "}})}),g("36",["2j","35","9"],function(a,b,c){"use strict";return a.extend({Defaults:{containerCls:"form",layout:"flex",direction:"column",align:"stretch",flex:1,padding:20,labelGap:30,spacing:10,callbacks:{submit:function(){this.submit()}}},preRender:function(){var a=this,d=a.items();a.settings.formItemDefaults||(a.settings.formItemDefaults={layout:"flex",autoResize:"overflow",defaults:{flex:1}}),d.each(function(d){var e,f=d.settings.label;f&&(e=new b(c.extend({items:{type:"label",id:d._id+"-l",text:f,flex:0,forId:d._id,disabled:d.disabled()}},a.settings.formItemDefaults)),e.type="formitem",d.aria("labelledby",d._id+"-l"),"undefined"==typeof d.settings.flex&&(d.settings.flex=1),a.replace(d,e),e.add(d))})},submit:function(){return this.fire("submit",{data:this.toJSON()})},postRender:function(){var a=this;a._super(),a.fromJSON(a.settings.data)},bindStates:function(){function a(){var a,c,d,e=0,f=[];if(b.settings.labelGapCalc!==!1)for(d="children"==b.settings.labelGapCalc?b.find("formitem"):b.items(),d.filter("formitem").each(function(a){var b=a.items()[0],c=b.getEl().clientWidth;e=c>e?c:e,f.push(b)}),c=b.settings.labelGap||0,a=f.length;a--;)f[a].settings.minWidth=e+c}var b=this;b._super(),b.on("show",a),a()}})}),g("37",["36"],function(a){"use strict";return a.extend({Defaults:{containerCls:"fieldset",layout:"flex",direction:"column",align:"stretch",flex:1,padding:"25 15 5 15",labelGap:30,spacing:10,border:1},renderHtml:function(){var a=this,b=a._layout,c=a.classPrefix;return a.preRender(),b.preRender(a),'
    '+(a.settings.title?''+a.settings.title+"":"")+'
    '+(a.settings.html||"")+b.renderHtml(a)+"
    "}})}),g("4x",["e","1j","1g","1w","9","2a"],function(a,b,c,d,e,f){var g=e.trim,h=function(a,b,c,d,e){return{type:a,title:b,url:c,level:d,attach:e}},i=function(a){for(;a=a.parentNode;){var c=a.contentEditable;if(c&&"inherit"!==c)return b.isContentEditableTrue(a)}return!1},j=function(b,c){return a.DOM.select(b,c)},k=function(a){return a.innerText||a.textContent},l=function(a){return a.id?a.id:f.uuid("h")},m=function(a){return a&&"A"===a.nodeName&&(a.id||a.name)},n=function(a){return m(a)&&p(a)},o=function(a){return a&&/^(H[1-6])$/.test(a.nodeName)},p=function(a){return i(a)&&!b.isContentEditableFalse(a)},q=function(a){return o(a)&&p(a)},r=function(a){return o(a)?parseInt(a.nodeName.substr(1),10):0},s=function(a){var b=l(a),c=function(){a.id=b};return h("header",k(a),"#"+b,r(a),c)},t=function(a){var b=a.id||a.name,c=k(a);return h("anchor",c?c:"#"+b,"#"+b,0,d.noop)},u=function(a){return c.map(c.filter(a,q),s)},v=function(a){return c.map(c.filter(a,n),t)},w=function(a){var b=j("h1,h2,h3,h4,h5,h6,a:not([href])",a);return b},x=function(a){return g(a.title).length>0},y=function(a){var b=w(a);return c.filter(u(b).concat(v(b)),x)};return{find:y}}),g("38",["4t","4x","17","2y","1g","1w","9"],function(a,b,c,d,e,f,g){"use strict";var h=function(){return a.tinymce?a.tinymce.activeEditor:c.activeEditor},i={},j=5,k=function(a){return{title:a.title,value:{title:{raw:a.title},url:a.url,attach:a.attach}}},l=function(a){return g.map(a,k)},m=function(a,b){return{title:a,value:{title:a,url:b,attach:f.noop}}},n=function(a,b){var c=e.find(b,function(b){return b.url===a});return!c},o=function(a,b,c){var d=b in a?a[b]:c;return d===!1?null:d},p=function(a,b,c,d){var h={title:"-"},j=function(a){var d=e.filter(a[c],function(a){return n(a,b)});return g.map(d,function(a){return{title:a,value:{title:a,url:a,attach:f.noop}}})},k=function(a){var c=e.filter(b,function(b){return b.type==a});return l(c)},p=function(){var a=k("anchor"),b=o(d,"anchor_top","#top"),c=o(d,"anchor_bottom","#bottom");return null!==b&&a.unshift(m("",b)),null!==c&&a.push(m("",c)),a},q=function(a){return e.reduce(a,function(a,b){var c=0===a.length||0===b.length;return c?a.concat(b):a.concat(h,b)},[])};return d.typeahead_urls===!1?[]:"file"===c?q([r(a,j(i)),r(a,k("header")),r(a,p())]):r(a,j(i))},q=function(a,b){var c=i[b];/^https?/.test(a)&&(c?e.indexOf(c,a)===-1&&(i[b]=c.slice(0,j).concat(a)):i[b]=[a])},r=function(a,b){var c=a.toLowerCase(),d=g.grep(b,function(a){return a.title.toLowerCase().indexOf(c)!==-1});return 1===d.length&&d[0].title===a?[]:d},s=function(a){var b=a.title;return b.raw?b.raw:b},t=function(a,c,d,e){var f=function(f){var g=b.find(d),h=p(f,g,e,c);a.showAutoComplete(h,f)};a.on("autocomplete",function(){f(a.value())}),a.on("selectitem",function(b){var c=b.value;a.value(c.url);var d=s(c);"image"===e?a.fire("change",{meta:{alt:d,attach:c.attach}}):a.fire("change",{meta:{text:d,attach:c.attach}}),a.focus()}),a.on("click",function(b){0===a.value().length&&"INPUT"===b.target.nodeName&&f("")}),a.on("PostRender",function(){a.getRoot().on("submit",function(b){b.isDefaultPrevented()||q(a.value(),e)})})},u=function(a){var b=a.status,c=a.message;return"valid"===b?{status:"ok",message:c}:"unknown"===b?{status:"warn",message:c}:"invalid"===b?{status:"warn",message:c}:{status:"none",message:""}},v=function(a,b,c){var d=b.filepicker_validator_handler;if(d){var e=function(b){return 0===b.length?void a.statusLevel("none"):void d({url:b,type:c},function(b){var c=u(b);a.statusMessage(c.message),a.statusLevel(c.status)})};a.state.on("change:value",function(a){e(a.value)})}};return d.extend({init:function(b){var c,d,e,f=this,i=h(),j=i.settings,k=b.filetype;b.spellcheck=!1,e=j.file_picker_types||j.file_browser_callback_types,e&&(e=g.makeMap(e,/[, ]/)),e&&!e[k]||(d=j.file_picker_callback,!d||e&&!e[k]?(d=j.file_browser_callback,!d||e&&!e[k]||(c=function(){d(f.getEl("inp").id,f.value(),k,a)})):c=function(){var a=f.fire("beforecall").meta;a=g.extend({filetype:k},a),d.call(i,function(a,b){f.value(a).fire("change",{meta:b})},f.value(),a)}),c&&(b.icon="browse",b.onaction=c),f._super(b),t(f,j,i.getBody(),k),v(f,j,k)}})}),g("39",["2u"],function(a){"use strict";return a.extend({recalc:function(a){var b=a.layoutRect(),c=a.paddingBox;a.items().filter(":visible").each(function(a){a.layoutRect({x:c.left,y:c.top,w:b.innerW-c.right-c.left,h:b.innerH-c.top-c.bottom}),a.recalc&&a.recalc()})}})}),g("3a",["2u"],function(a){"use strict";return a.extend({recalc:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=[],O=Math.max,P=Math.min;for(d=a.items().filter(":visible"),e=a.layoutRect(),f=a.paddingBox,g=a.settings,m=a.isRtl()?g.direction||"row-reversed":g.direction,h=g.align,i=a.isRtl()?g.pack||"end":g.pack,j=g.spacing||0,"row-reversed"!=m&&"column-reverse"!=m||(d=d.set(d.toArray().reverse()),m=m.split("-")[0]),"column"==m?(z="y",x="h",y="minH",A="maxH",C="innerH",B="top",D="deltaH",E="contentH",J="left",H="w",F="x",G="innerW",I="minW",K="right",L="deltaW",M="contentW"):(z="x",x="w",y="minW",A="maxW",C="innerW",B="left",D="deltaW",E="contentW",J="top",H="h",F="y",G="innerH",I="minH",K="bottom",L="deltaH",M="contentH"),l=e[C]-f[B]-f[B],w=k=0,b=0,c=d.length;b0&&(k+=q,o[A]&&N.push(n),o.flex=q),l-=o[y],r=f[J]+o[I]+f[K],r>w&&(w=r);if(u={},l<0?u[y]=e[y]-l+e[D]:u[y]=e[C]-l+e[D],u[I]=w+e[L],u[E]=e[C]-l,u[M]=w,u.minW=P(u.minW,e.maxW),u.minH=P(u.minH,e.maxH),u.minW=O(u.minW,e.startMinWidth),u.minH=O(u.minH,e.startMinHeight),!e.autoResize||u.minW==e.minW&&u.minH==e.minH){for(t=l/k,b=0,c=N.length;bs?(l-=o[A]-o[y],k-=o.flex,o.flex=0,o.maxFlexSize=s):o.maxFlexSize=0;for(t=l/k,v=f[B],u={},0===k&&("end"==i?v=l+f[B]:"center"==i?(v=Math.round(e[C]/2-(e[C]-l)/2)+f[B],v<0&&(v=f[B])):"justify"==i&&(v=f[B],j=Math.floor(l/(d.length-1)))),u[F]=f[J],b=0,c=d.length;b0&&(r+=o.flex*t),u[x]=r,u[z]=v,n.layoutRect(u),n.recalc&&n.recalc(),v+=r+j}else if(u.w=u.minW,u.h=u.minH,a.layoutRect(u),this.recalc(a),null===a._lastRect){var Q=a.parent();Q&&(Q._lastRect=null,Q.recalc())}}})}),g("3b",["2t"],function(a){return a.extend({Defaults:{containerClass:"flow-layout",controlClass:"flow-layout-item",endClass:"break"},recalc:function(a){a.items().filter(":visible").each(function(a){a.recalc&&a.recalc()})},isNative:function(){return!0}})}),g("4y",["1m","4z","1r","4d","e"],function(a,b,c,d,e){var f=function(a,c,d){for(;d!==c;){if(d.style[a]){var e=d.style[a];return""!==e?b.some(e):b.none()}d=d.parentNode}return b.none()},g=function(a){return/[0-9.]+px$/.test(a)?Math.round(72*parseInt(a,10)/96)+"pt":a},h=function(a){return a.replace(/[\'\"]/g,"").replace(/,\s+/g,",")},i=function(a,c){return b.from(e.DOM.getStyle(c,a,!0))},j=function(a){return function(e,g){return b.from(g).map(c.fromDom).filter(d.isElement).bind(function(b){return f(a,e,b.dom()).or(i(a,b.dom()))}).getOr("")}};return{getFontSize:j("fontSize"),getFontFamily:a.compose(h,j("fontFamily")),toPt:g}}),g("3c",["2g","2r","2p","9","1g","e","17","6","4y"],function(a,b,c,d,e,f,g,h,i){function j(a){a.settings.ui_container&&(h.container=f.DOM.select(a.settings.ui_container)[0])}function k(b){b.on("ScriptsLoaded",function(){b.rtl&&(a.rtl=!0)})}function l(a){function b(b,c){return function(){var d=this;a.on("nodeChange",function(e){var f=a.formatter,g=null;m(e.parents,function(a){if(m(b,function(b){if(c?f.matchNode(a,c,{value:b.value})&&(g=b.value):f.matchNode(a,b.value)&&(g=b.value),g)return!1}),g)return!1}),d.value(g)})}}function e(b){return function(){var c=this,d=function(a){return a?a.split(",")[0]:""};a.on("init nodeChange",function(e){var f,g=null;f=i.getFontFamily(a.getBody(),e.element),m(b,function(a){a.value.toLowerCase()===f.toLowerCase()&&(g=a.value)}),m(b,function(a){g||d(a.value).toLowerCase()!==d(f).toLowerCase()||(g=a.value)}),c.value(g),!g&&f&&c.text(d(f))})}}function f(b){return function(){var c=this;a.on("init nodeChange",function(d){var e,f,g=null;e=i.getFontSize(a.getBody(),d.element),f=i.toPt(e),m(b,function(a){a.value===e?g=e:a.value===f&&(g=f)}),c.value(g),g||c.text(f)})}}function g(a){a=a.replace(/;$/,"").split(";");for(var b=a.length;b--;)a[b]=a[b].split("=");return a}function h(){function b(a){var c=[];if(a)return m(a,function(a){var f={text:a.title,icon:a.icon};if(a.items)f.menu=b(a.items);else{var g=a.format||"custom"+d++;a.format||(a.name=g,e.push(a)),f.format=g,f.cmd=a.cmd}c.push(f)}),c}function c(){var c;return c=b(a.settings.style_formats_merge?a.settings.style_formats?f.concat(a.settings.style_formats):f:a.settings.style_formats||f)}var d=0,e=[],f=[{title:"Headings",items:[{title:"Heading 1",format:"h1"},{title:"Heading 2",format:"h2"},{title:"Heading 3",format:"h3"},{title:"Heading 4",format:"h4"},{title:"Heading 5",format:"h5"},{title:"Heading 6",format:"h6"}]},{title:"Inline",items:[{title:"Bold",icon:"bold",format:"bold"},{title:"Italic",icon:"italic",format:"italic"},{title:"Underline",icon:"underline",format:"underline"},{title:"Strikethrough",icon:"strikethrough",format:"strikethrough"},{title:"Superscript",icon:"superscript",format:"superscript"},{title:"Subscript",icon:"subscript",format:"subscript"},{title:"Code",icon:"code",format:"code"}]},{title:"Blocks",items:[{title:"Paragraph",format:"p"},{title:"Blockquote",format:"blockquote"},{title:"Div",format:"div"},{title:"Pre",format:"pre"}]},{title:"Alignment",items:[{title:"Left",icon:"alignleft",format:"alignleft"},{title:"Center",icon:"aligncenter",format:"aligncenter"},{title:"Right",icon:"alignright",format:"alignright"},{title:"Justify",icon:"alignjustify",format:"alignjustify"}]}];return a.on("init",function(){m(e,function(b){a.formatter.register(b.name,b)})}),{type:"menu",items:c(),onPostRender:function(b){a.fire("renderFormatsMenu",{control:b.control})},itemDefaults:{preview:!0,textStyle:function(){if(this.settings.format)return a.formatter.getCssText(this.settings.format)},onPostRender:function(){var b=this;b.parent().on("show",function(){var c,d;c=b.settings.format,c&&(b.disabled(!a.formatter.canApply(c)),b.active(a.formatter.match(c))),d=b.settings.cmd,d&&b.active(a.queryCommandState(d))})},onclick:function(){this.settings.format&&o(this.settings.format),this.settings.cmd&&a.execCommand(this.settings.cmd)}}}}function j(b){return function(){var c=this;a.formatter?a.formatter.formatChanged(b,function(a){c.active(a)}):a.on("init",function(){a.formatter.formatChanged(b,function(a){c.active(a)})})}}function k(b){return function(){function c(){var c="redo"==b?"hasRedo":"hasUndo";return!!a.undoManager&&a.undoManager[c]()}var d=this;d.disabled(!c()),a.on("Undo Redo AddUndo TypingUndo ClearUndos SwitchMode",function(){d.disabled(a.readonly||!c())})}}function l(){var b=this;a.on("VisualAid",function(a){b.active(a.hasVisual)}),b.active(a.hasVisual)}function o(b){b.control&&(b=b.control.value()),b&&a.execCommand("mceToggleFormat",!1,b)}function p(b){var c=b.length;return d.each(b,function(b){b.menu&&(b.hidden=0===p(b.menu));var d=b.format;d&&(b.hidden=!a.formatter.canApply(d)),b.hidden&&c--}),c}function q(b){var c=b.items().length;return b.items().each(function(b){b.menu&&b.visible(q(b.menu)>0),!b.menu&&b.settings.menu&&b.visible(p(b.settings.menu)>0);var d=b.settings.format;d&&b.visible(a.formatter.canApply(d)),b.visible()||c--}),c}var r;r=h(),m({bold:"Bold",italic:"Italic",underline:"Underline",strikethrough:"Strikethrough",subscript:"Subscript",superscript:"Superscript"},function(b,c){a.addButton(c,{tooltip:b,onPostRender:j(c),onclick:function(){o(c)}})}),m({outdent:["Decrease indent","Outdent"],indent:["Increase indent","Indent"],cut:["Cut","Cut"],copy:["Copy","Copy"],paste:["Paste","Paste"],help:["Help","mceHelp"],selectall:["Select all","SelectAll"],removeformat:["Clear formatting","RemoveFormat"],visualaid:["Visual aids","mceToggleVisualAid"],newdocument:["New document","mceNewDocument"]},function(b,c){a.addButton(c,{tooltip:b[0],cmd:b[1]})}),m({blockquote:["Blockquote","mceBlockQuote"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],alignleft:["Align left","JustifyLeft"],aligncenter:["Align center","JustifyCenter"],alignright:["Align right","JustifyRight"],alignjustify:["Justify","JustifyFull"],alignnone:["No alignment","JustifyNone"]},function(b,c){a.addButton(c,{tooltip:b[0],cmd:b[1],onPostRender:j(c)})});var s=function(a){var b=a;return b.length>0&&"-"===b[0].text&&(b=b.slice(1)),b.length>0&&"-"===b[b.length-1].text&&(b=b.slice(0,b.length-1)),b},t=function(b){var c,e;if("string"==typeof b)e=b.split(" ");else if(d.isArray(b))return n(d.map(b,t));return c=d.grep(e,function(b){return"|"===b||b in a.menuItems}),d.map(c,function(b){return"|"===b?{text:"-"}:a.menuItems[b]})},u=function(b){var c=[{text:"-"}],e=d.grep(a.menuItems,function(a){return a.context===b});return d.each(e,function(a){"before"==a.separator&&c.push({text:"|"}),a.prependToContext?c.unshift(a):c.push(a),"after"==a.separator&&c.push({text:"|"})}),c},v=function(a){return s(a.insert_button_items?t(a.insert_button_items):u("insert"))};a.addButton("undo",{tooltip:"Undo",onPostRender:k("undo"),cmd:"undo"}),a.addButton("redo",{tooltip:"Redo",onPostRender:k("redo"),cmd:"redo"}),a.addMenuItem("newdocument",{text:"New document",icon:"newdocument",cmd:"mceNewDocument"}),a.addMenuItem("undo",{text:"Undo",icon:"undo",shortcut:"Meta+Z",onPostRender:k("undo"),cmd:"undo"}),a.addMenuItem("redo",{text:"Redo",icon:"redo",shortcut:"Meta+Y",onPostRender:k("redo"),cmd:"redo"}),a.addMenuItem("visualaid",{text:"Visual aids",selectable:!0,onPostRender:l,cmd:"mceToggleVisualAid"}),a.addButton("remove",{tooltip:"Remove",icon:"remove",cmd:"Delete"}),a.addButton("insert",{type:"menubutton",icon:"insert",menu:[],oncreatemenu:function(){this.menu.add(v(a.settings)),this.menu.renderNew()}}),m({cut:["Cut","Cut","Meta+X"],copy:["Copy","Copy","Meta+C"],paste:["Paste","Paste","Meta+V"],selectall:["Select all","SelectAll","Meta+A"],bold:["Bold","Bold","Meta+B"],italic:["Italic","Italic","Meta+I"],underline:["Underline","Underline","Meta+U"],strikethrough:["Strikethrough","Strikethrough"],subscript:["Subscript","Subscript"],superscript:["Superscript","Superscript"],removeformat:["Clear formatting","RemoveFormat"]},function(b,c){a.addMenuItem(c,{text:b[0],icon:c,shortcut:b[2],cmd:b[1]})}),a.on("mousedown",function(){c.hideAll()}),a.addButton("styleselect",{type:"menubutton",text:"Formats",menu:r,onShowMenu:function(){a.settings.style_formats_autohide&&q(this.menu)}}),a.addButton("formatselect",function(){var c=[],d=g(a.settings.block_formats||"Paragraph=p;Heading 1=h1;Heading 2=h2;Heading 3=h3;Heading 4=h4;Heading 5=h5;Heading 6=h6;Preformatted=pre");return m(d,function(b){c.push({text:b[0],value:b[1],textStyle:function(){return a.formatter.getCssText(b[1])}})}),{type:"listbox",text:d[0][0],values:c,fixedWidth:!0,onselect:o,onPostRender:b(c)}}),a.addButton("fontselect",function(){var b="Andale Mono=andale mono,monospace;Arial=arial,helvetica,sans-serif;Arial Black=arial black,sans-serif;Book Antiqua=book antiqua,palatino,serif;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,palatino,serif;Helvetica=helvetica,arial,sans-serif;Impact=impact,sans-serif;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco,monospace;Times New Roman=times new roman,times,serif;Trebuchet MS=trebuchet ms,geneva,sans-serif;Verdana=verdana,geneva,sans-serif;Webdings=webdings;Wingdings=wingdings,zapf dingbats",c=[],d=g(a.settings.font_formats||b);return m(d,function(a){c.push({text:{raw:a[0]},value:a[1],textStyle:a[1].indexOf("dings")==-1?"font-family:"+a[1]:""})}),{type:"listbox",text:"Font Family",tooltip:"Font Family",values:c,fixedWidth:!0,onPostRender:e(c),onselect:function(b){b.control.settings.value&&a.execCommand("FontName",!1,b.control.settings.value)}}}),a.addButton("fontsizeselect",function(){var b=[],c="8pt 10pt 12pt 14pt 18pt 24pt 36pt",d=a.settings.fontsize_formats||c;return m(d.split(" "),function(a){var c=a,d=a,e=a.split("=");e.length>1&&(c=e[0],d=e[1]),b.push({text:c,value:d})}),{type:"listbox",text:"Font Sizes",tooltip:"Font Sizes",values:b,fixedWidth:!0,onPostRender:f(b),onclick:function(b){b.control.settings.value&&a.execCommand("FontSize",!1,b.control.settings.value)}}}),a.addMenuItem("formats",{text:"Formats",menu:r})}var m=d.each,n=function(a){return e.reduce(a,function(a,b){return a.concat(b)},[])};return g.on("AddEditor",function(a){var b=a.editor;k(b),l(b),j(b)}),a.translate=function(a){return g.translate(a)},b.tooltips=!h.iOS,{}}),g("3d",["2u"],function(a){"use strict";return a.extend({recalc:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E=[],F=[];b=a.settings,e=a.items().filter(":visible"),f=a.layoutRect(),d=b.columns||Math.ceil(Math.sqrt(e.length)),c=Math.ceil(e.length/d),s=b.spacingH||b.spacing||0,t=b.spacingV||b.spacing||0,u=b.alignH||b.align,v=b.alignV||b.align,q=a.paddingBox,C="reverseRows"in b?b.reverseRows:a.isRtl(),u&&"string"==typeof u&&(u=[u]),v&&"string"==typeof v&&(v=[v]);for(l=0;lE[l]?y:E[l],F[m]=z>F[m]?z:F[m];for(A=f.innerW-q.left-q.right,w=0,l=0;l0?s:0),A-=(l>0?s:0)+E[l];for(B=f.innerH-q.top-q.bottom,x=0,m=0;m0?t:0),B-=(m>0?t:0)+F[m];if(w+=q.left+q.right,x+=q.top+q.bottom,i={},i.minW=w+(f.w-f.innerW),i.minH=x+(f.h-f.innerH),i.contentW=i.minW-f.deltaW,i.contentH=i.minH-f.deltaH,i.minW=Math.min(i.minW,f.maxW),i.minH=Math.min(i.minH,f.maxH),i.minW=Math.max(i.minW,f.startMinWidth),i.minH=Math.max(i.minH,f.startMinHeight),!f.autoResize||i.minW==f.minW&&i.minH==f.minH){f.autoResize&&(i=a.layoutRect(i),i.contentW=i.minW-f.deltaW,i.contentH=i.minH-f.deltaH);var G;G="start"==b.packV?0:B>0?Math.floor(B/c):0;var H=0,I=b.flexWidths;if(I)for(l=0;l'},src:function(a){this.getEl().src=a},html:function(a,c){var d=this,e=this.getEl().contentWindow.document.body;return e?(e.innerHTML=a,c&&c()):b.setTimeout(function(){d.html(a)}),this}})}),g("3f",["2r"],function(a){"use strict";return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("widget").add("infobox"),b.canFocus=!1},severity:function(a){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(a)},help:function(a){this.state.set("help",a)},renderHtml:function(){var a=this,b=a.classPrefix;return'
    '+a.encode(a.state.get("text"))+'
    '},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.getEl("body").firstChild.data=a.encode(b.value),a.state.get("rendered")&&a.updateLayoutRect()}),a.state.on("change:help",function(b){a.classes.toggle("has-help",b.value),a.state.get("rendered")&&a.updateLayoutRect()}),a._super()}})}),g("3g",["2r","4q"],function(a,b){"use strict";return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("widget").add("label"),b.canFocus=!1,a.multiline&&b.classes.add("autoscroll"),a.strong&&b.classes.add("strong")},initLayoutRect:function(){var a=this,c=a._super();if(a.settings.multiline){var d=b.getSize(a.getEl());d.width>c.maxW&&(c.minW=c.maxW,a.classes.add("multiline")),a.getEl().style.width=c.minW+"px",c.startMinH=c.h=c.minH=Math.min(c.maxH,b.getSize(a.getEl()).height)}return c},repaint:function(){var a=this;return a.settings.multiline||(a.getEl().style.lineHeight=a.layoutRect().h+"px"),a._super()},severity:function(a){this.classes.remove("error"),this.classes.remove("warning"),this.classes.remove("success"),this.classes.add(a)},renderHtml:function(){var a,b,c=this,d=c.settings.forId,e=c.settings.html?c.settings.html:c.encode(c.state.get("text"));return!d&&(b=c.settings.forName)&&(a=c.getRoot().find("#"+b)[0],a&&(d=a._id)),d?'":''+e+""},bindStates:function(){var a=this;return a.state.on("change:text",function(b){a.innerHtml(a.encode(b.value)),a.state.get("rendered")&&a.updateLayoutRect()}),a._super()}})}),g("3h",["2j"],function(a){"use strict";return a.extend({Defaults:{role:"toolbar",layout:"flow"},init:function(a){var b=this;b._super(a),b.classes.add("toolbar")},postRender:function(){var a=this;return a.items().each(function(a){a.classes.add("toolbar-item")}),a._super()}})}),g("3i",["3h"],function(a){"use strict";return a.extend({Defaults:{role:"menubar",containerCls:"menubar",ariaRoot:!0,defaults:{type:"menubutton"}}})}),g("3j",["2v","2h","3i"],function(a,b,c){"use strict";function d(a,b){for(;a;){if(b===a)return!0;a=a.parentNode}return!1}var e=a.extend({init:function(a){var b=this;b._renderOpen=!0,b._super(a),a=b.settings,b.classes.add("menubtn"),a.fixedWidth&&b.classes.add("fixed-width"),b.aria("haspopup",!0),b.state.set("menu",a.menu||b.render())},showMenu:function(a){var c,d=this;return d.menu&&d.menu.visible()&&a!==!1?d.hideMenu():(d.menu||(c=d.state.get("menu")||[],c.length?c={type:"menu",items:c}:c.type=c.type||"menu",c.renderTo?d.menu=c.parent(d).show().renderTo():d.menu=b.create(c).parent(d).renderTo(),d.fire("createmenu"),d.menu.reflow(),d.menu.on("cancel",function(a){a.control.parent()===d.menu&&(a.stopPropagation(),d.focus(),d.hideMenu())}),d.menu.on("select",function(){d.focus()}),d.menu.on("show hide",function(a){a.control==d.menu&&d.activeMenu("show"==a.type),d.aria("expanded","show"==a.type)}).fire("show")),d.menu.show(),d.menu.layoutRect({w:d.layoutRect().w}),d.menu.moveRel(d.getEl(),d.isRtl()?["br-tr","tr-br"]:["bl-tl","tl-bl"]),void d.fire("showmenu"))},hideMenu:function(){var a=this;a.menu&&(a.menu.items().each(function(a){a.hideMenu&&a.hideMenu()}),a.menu.hide())},activeMenu:function(a){this.classes.toggle("active",a)},renderHtml:function(){var a,b=this,d=b._id,e=b.classPrefix,f=b.settings.icon,g=b.state.get("text"),h="";return a=b.settings.image,a?(f="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",g&&(b.classes.add("btn-has-text"),h=''+b.encode(g)+""),f=b.settings.icon?e+"ico "+e+"i-"+f:"",b.aria("role",b.parent()instanceof c?"menuitem":"button"),'
    '},postRender:function(){var a=this;return a.on("click",function(b){b.control===a&&d(b.target,a.getEl())&&(a.focus(),a.showMenu(!b.aria),b.aria&&a.menu.items().filter(":visible")[0].focus())}),a.on("mouseenter",function(b){var c,d=b.control,f=a.parent();d&&f&&d instanceof e&&d.parent()==f&&(f.items().filter("MenuButton").each(function(a){a.hideMenu&&a!=d&&(a.menu&&a.menu.visible()&&(c=!0),a.hideMenu())}),c&&(d.focus(),d.showMenu()))}),a._super()},bindStates:function(){var a=this;return a.state.on("change:menu",function(){a.menu&&a.menu.remove(),a.menu=null}),a._super()},remove:function(){this._super(),this.menu&&this.menu.remove()}});return e}),g("3k",["2r","2h","6","5"],function(a,b,c,d){"use strict";return a.extend({Defaults:{border:0,role:"menuitem"},init:function(a){var b,c=this;c._super(a),a=c.settings,c.classes.add("menu-item"),a.menu&&c.classes.add("menu-item-expand"),a.preview&&c.classes.add("menu-item-preview"),b=c.state.get("text"),"-"!==b&&"|"!==b||(c.classes.add("menu-item-sep"),c.aria("role","separator"),c.state.set("text","-")),a.selectable&&(c.aria("role","menuitemcheckbox"),c.classes.add("menu-item-checkbox"),a.icon="selected"),a.preview||a.selectable||c.classes.add("menu-item-normal"),c.on("mousedown",function(a){a.preventDefault()}),a.menu&&!a.ariaHideMenu&&c.aria("haspopup",!0)},hasMenus:function(){return!!this.settings.menu},showMenu:function(){var a,c=this,d=c.settings,e=c.parent();if(e.items().each(function(a){a!==c&&a.hideMenu()}),d.menu){a=c.menu,a?a.show():(a=d.menu,a.length?a={type:"menu",items:a}:a.type=a.type||"menu",e.settings.itemDefaults&&(a.itemDefaults=e.settings.itemDefaults),a=c.menu=b.create(a).parent(c).renderTo(),a.reflow(),a.on("cancel",function(b){b.stopPropagation(),c.focus(),a.hide()}),a.on("show hide",function(a){a.control.items&&a.control.items().each(function(a){a.active(a.settings.selected)})}).fire("show"),a.on("hide",function(b){b.control===a&&c.classes.remove("selected")}),a.submenu=!0),a._parentMenu=e,a.classes.add("menu-sub");var f=a.testMoveRel(c.getEl(),c.isRtl()?["tl-tr","bl-br","tr-tl","br-bl"]:["tr-tl","br-bl","tl-tr","bl-br"]);a.moveRel(c.getEl(),f),a.rel=f,f="menu-sub-"+f,a.classes.remove(a._lastRel).add(f),a._lastRel=f,c.classes.add("selected"),c.aria("expanded",!0)}},hideMenu:function(){var a=this;return a.menu&&(a.menu.items().each(function(a){a.hideMenu&&a.hideMenu()}),a.menu.hide(),a.aria("expanded",!1)),a},renderHtml:function(){function a(a){var b,d,e={};for(e=c.mac?{alt:"⌥",ctrl:"⌘",shift:"⇧",meta:"⌘"}:{meta:"Ctrl"},a=a.split("+"),b=0;b").replace(new RegExp(b("]mce~match!"),"g"),"
    ")}var f=this,g=f._id,h=f.settings,i=f.classPrefix,j=f.state.get("text"),k=f.settings.icon,l="",m=h.shortcut,n=f.encode(h.url),o="";return k&&f.parent().classes.add("menu-has-icons"),h.image&&(l=" style=\"background-image: url('"+h.image+"')\""),m&&(m=a(m)),k=i+"ico "+i+"i-"+(f.settings.icon||"none"),o="-"!==j?'\xa0":"",j=e(f.encode(d(j))),n=e(f.encode(d(n))),'
    '+o+("-"!==j?''+j+"":"")+(m?'
    '+m+"
    ":"")+(h.menu?'
    ':"")+(n?'":"")+"
    "},postRender:function(){var a=this,b=a.settings,c=b.textStyle;if("function"==typeof c&&(c=c.call(this)),c){var e=a.getEl("text");e&&e.setAttribute("style",c)}return a.on("mouseenter click",function(c){c.control===a&&(b.menu||"click"!==c.type?(a.showMenu(),c.aria&&a.menu.focus(!0)):(a.fire("select"),d.requestAnimationFrame(function(){a.parent().hideAll()})))}),a._super(),a},hover:function(){var a=this;return a.parent().items().each(function(a){a.classes.remove("selected")}),a.classes.toggle("selected",!0),a},active:function(a){return"undefined"!=typeof a&&this.aria("checked",a),this._super(a)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),g("3l",["a","2g","5"],function(a,b,c){"use strict";return function(d,e){var f,g,h=this,i=b.classPrefix;h.show=function(b,j){function k(){f&&(a(d).append('
    '),j&&j())}return h.hide(),f=!0,b?g=c.setTimeout(k,b):k(),h},h.hide=function(){var a=d.lastChild;return c.clearTimeout(g),a&&a.className.indexOf("throbber")!=-1&&a.parentNode.removeChild(a),f=!1,h}}}),g("3m",["2p","3k","3l","9"],function(a,b,c,d){"use strict";return a.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(a){var b=this;if(a.autohide=!0,a.constrainToViewport=!0,"function"==typeof a.items&&(a.itemsFactory=a.items,a.items=[]),a.itemDefaults)for(var c=a.items,e=c.length;e--;)c[e]=d.extend({},a.itemDefaults,c[e]);b._super(a),b.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0), +this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var a=this;a.hideAll(),a.fire("select")},load:function(){function a(){e.throbber&&(e.throbber.hide(),e.throbber=null)}var b,d,e=this;d=e.settings.itemsFactory,d&&(e.throbber||(e.throbber=new c(e.getEl("body"),!0),0===e.items().length?(e.throbber.show(),e.fire("loading")):e.throbber.show(100,function(){e.items().remove(),e.fire("loading")}),e.on("hide close",a)),e.requestTime=b=(new Date).getTime(),e.settings.itemsFactory(function(c){return 0===c.length?void e.hide():void(e.requestTime===b&&(e.getEl().style.width="",e.getEl("body").style.width="",a(),e.items().remove(),e.getEl("body").innerHTML="",e.add(c),e.renderNew(),e.fire("loaded")))}))},hideAll:function(){var a=this;return this.find("menuitem").exec("hideMenu"),a._super()},preRender:function(){var a=this;return a.items().each(function(b){var c=b.settings;if(c.icon||c.image||c.selectable)return a._hasIcons=!0,!1}),a.settings.itemsFactory&&a.on("postrender",function(){a.settings.itemsFactory&&a.load()}),a._super()}})}),g("3n",["3j","3m"],function(a,b){"use strict";return a.extend({init:function(a){function b(c){for(var f=0;f0&&(e=c[0].text,g.state.set("value",c[0].value)),g.state.set("menu",c)),g.state.set("text",a.text||e),g.classes.add("listbox"),g.on("select",function(b){var c=b.control;f&&(b.lastControl=f),a.multiple?c.active(!c.active()):g.value(b.control.value()),f=c})},bindStates:function(){function a(a,c){a instanceof b&&a.items().each(function(a){a.hasMenus()||a.active(a.value()===c)})}function c(a,b){var d;if(a)for(var e=0;e'},postRender:function(){var a=this;a._super(),a.resizeDragHelper=new b(this._id,{start:function(){a.fire("ResizeStart")},drag:function(b){"both"!=a.settings.direction&&(b.deltaX=0),a.fire("Resize",b)},stop:function(){a.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),g("3q",["2r"],function(a){"use strict";function b(a){var b="";if(a)for(var c=0;c'+a[c]+"";return b}return a.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(a){var b=this;b._super(a),b.settings.size&&(b.size=b.settings.size),b.settings.options&&(b._options=b.settings.options),b.on("keydown",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))})},options:function(a){return arguments.length?(this.state.set("options",a),this):this.state.get("options")},renderHtml:function(){var a,c=this,d="";return a=b(c._options),c.size&&(d=' size = "'+c.size+'"'),'"},bindStates:function(){var a=this;return a.state.on("change:options",function(c){a.getEl().innerHTML=b(c.value)}),a._super()}})}),g("3r",["2r","2k","4q"],function(a,b,c){"use strict";function d(a,b,c){return ac&&(a=c),a}function e(a,b,c){a.setAttribute("aria-"+b,c)}function f(a,b){var d,f,g,h,i,j;"v"==a.settings.orientation?(h="top",g="height",f="h"):(h="left",g="width",f="w"),j=a.getEl("handle"),d=(a.layoutRect()[f]||100)-c.getSize(j)[g],i=d*((b-a._minValue)/(a._maxValue-a._minValue))+"px",j.style[h]=i,j.style.height=a.layoutRect().h+"px",e(j,"valuenow",b),e(j,"valuetext",""+a.settings.previewFilter(b)),e(j,"valuemin",a._minValue),e(j,"valuemax",a._maxValue)}return a.extend({init:function(a){var b=this;a.previewFilter||(a.previewFilter=function(a){return Math.round(100*a)/100}),b._super(a),b.classes.add("slider"),"v"==a.orientation&&b.classes.add("vertical"),b._minValue=a.minValue||0,b._maxValue=a.maxValue||100,b._initValue=b.state.get("value")},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'
    '},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function a(a,b,c){return(c+a)/(b-a)}function e(a,b,c){return c*(b-a)-a}function f(b,c){function f(f){var g;g=n.value(),g=e(b,c,a(b,c,g)+.05*f),g=d(g,b,c),n.value(g),n.fire("dragstart",{value:g}),n.fire("drag",{value:g}),n.fire("dragend",{value:g})}n.on("keydown",function(a){switch(a.keyCode){case 37:case 38:f(-1);break;case 39:case 40:f(1)}})}function g(a,e,f){var g,h,i,o,p;n._dragHelper=new b(n._id,{handle:n._id+"-handle",start:function(a){g=a[j],h=parseInt(n.getEl("handle").style[k],10),i=(n.layoutRect()[m]||100)-c.getSize(f)[l],n.fire("dragstart",{value:p})},drag:function(b){var c=b[j]-g;o=d(h+c,0,i),f.style[k]=o+"px",p=a+o/i*(e-a),n.value(p),n.tooltip().text(""+n.settings.previewFilter(p)).show().moveRel(f,"bc tc"),n.fire("drag",{value:p})},stop:function(){n.tooltip().hide(),n.fire("dragend",{value:p})}})}var h,i,j,k,l,m,n=this;h=n._minValue,i=n._maxValue,"v"==n.settings.orientation?(j="screenY",k="top",l="height",m="h"):(j="screenX",k="left",l="width",m="w"),n._super(),f(h,i,n.getEl("handle")),g(h,i,n.getEl("handle"))},repaint:function(){this._super(),f(this,this.value())},bindStates:function(){var a=this;return a.state.on("change:value",function(b){f(a,b.value)}),a._super()}})}),g("3s",["2r"],function(a){"use strict";return a.extend({renderHtml:function(){var a=this;return a.classes.add("spacer"),a.canFocus=!1,'
    '}})}),g("3t",["3j","4q","a"],function(a,b,c){return a.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var a,d,e=this,f=e.getEl(),g=e.layoutRect();return e._super(),a=f.firstChild,d=f.lastChild,c(a).css({width:g.w-b.getSize(d).width,height:g.h-2}),c(d).css({height:g.h-2}),e},activeMenu:function(a){var b=this;c(b.getEl().lastChild).toggleClass(b.classPrefix+"active",a)},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get("icon"),f=b.state.get("text"),g="";return a=b.settings.image,a?(e="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",e=b.settings.icon?d+"ico "+d+"i-"+e:"",f&&(b.classes.add("btn-has-text"),g=''+b.encode(f)+""),'
    '},postRender:function(){var a=this,b=a.settings.onclick;return a.on("click",function(a){var c=a.target;if(a.control==this)for(;c;){if(a.aria&&"down"!=a.aria.key||"BUTTON"==c.nodeName&&c.className.indexOf("open")==-1)return a.stopImmediatePropagation(),void(b&&b.call(this,a));c=c.parentNode}}),delete a.settings.onclick,a._super()}})}),g("3u",["3b"],function(a){"use strict";return a.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),g("3v",["2m","a","4q"],function(a,b,c){"use strict";return a.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(a){var c;this.activeTabId&&(c=this.getEl(this.activeTabId),b(c).removeClass(this.classPrefix+"active"),c.setAttribute("aria-selected","false")),this.activeTabId="t"+a,c=this.getEl("t"+a),c.setAttribute("aria-selected","true"),b(c).addClass(this.classPrefix+"active"),this.items()[a].show().fire("showtab"),this.reflow(),this.items().each(function(b,c){a!=c&&b.hide()})},renderHtml:function(){var a=this,b=a._layout,c="",d=a.classPrefix;return a.preRender(),b.preRender(a),a.items().each(function(b,e){var f=a._id+"-t"+e;b.aria("role","tabpanel"),b.aria("labelledby",f),c+='"}),'
    '+c+'
    '+b.renderHtml(a)+"
    "},postRender:function(){var a=this;a._super(),a.settings.activeTab=a.settings.activeTab||0,a.activateTab(a.settings.activeTab),this.on("click",function(b){var c=b.target.parentNode;if(c&&c.id==a._id+"-head")for(var d=c.childNodes.length;d--;)c.childNodes[d]==b.target&&a.activateTab(d)})},initLayoutRect:function(){var a,b,d,e=this;b=c.getSize(e.getEl("head")).width,b=b<0?0:b,d=0,e.items().each(function(a){b=Math.max(b,a.layoutRect().minW),d=Math.max(d,a.layoutRect().minH)}),e.items().each(function(a){a.settings.x=0,a.settings.y=0,a.settings.w=b,a.settings.h=d,a.layoutRect({x:0,y:0,w:b,h:d})});var f=c.getSize(e.getEl("head")).height;return e.settings.minWidth=b,e.settings.minHeight=d+f,a=e._super(),a.deltaH+=f,a.innerH=a.h-a.deltaH,a}})}),g("3w",["2r","9","4q"],function(a,b,c){return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("textbox"),a.multiline?b.classes.add("multiline"):(b.on("keydown",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))}),b.on("keyup",function(a){b.state.set("value",a.target.value)}))},repaint:function(){var a,b,c,d,e,f=this,g=0;a=f.getEl().style,b=f._layoutRect,e=f._lastRepaintRect||{};var h=document;return!f.settings.multiline&&h.all&&(!h.documentMode||h.documentMode<=8)&&(a.lineHeight=b.h-g+"px"),c=f.borderBox,d=c.left+c.right+8,g=c.top+c.bottom+(f.settings.multiline?8:0),b.x!==e.x&&(a.left=b.x+"px",e.x=b.x),b.y!==e.y&&(a.top=b.y+"px",e.y=b.y),b.w!==e.w&&(a.width=b.w-d+"px",e.w=b.w),b.h!==e.h&&(a.height=b.h-g+"px",e.h=b.h),f._lastRepaintRect=e,f.fire("repaint",{},!1),f},renderHtml:function(){var a,d,e=this,f=e.settings;return a={id:e._id,hidefocus:"1"},b.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(b){a[b]=f[b]}),e.disabled()&&(a.disabled="disabled"),f.subtype&&(a.type=f.subtype),d=c.create(f.multiline?"textarea":"input",a),d.value=e.state.get("value"),d.className=e.classes,d.outerHTML},value:function(a){return arguments.length?(this.state.set("value",a),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var a=this;a.getEl().value=a.state.get("value"),a._super(),a.$el.on("change",function(b){a.state.set("value",b.target.value),a.fire("change",b)})},bindStates:function(){var a=this;return a.state.on("change:value",function(b){a.getEl().value!=b.value&&(a.getEl().value=b.value)}),a.state.on("change:disabled",function(b){a.getEl().disabled=b.value}),a._super()},remove:function(){this.$el.off(),this._super()}})}),g("1f",["2d","2e","2f","2g","2h","2i","2j","2k","2l","2m","2n","2o","2p","23","24","2q","2r","2s","25","2t","2u","2v","2w","2x","2y","2z","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","3g","3h","3i","3j","3k","3l","3m","3n","3o","3p","3q","3r","3s","3t","3u","3v","3w"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea){"use strict";var fa=function(a,b){e.add(a.split(".").pop(),b)},ga=function(a,b,c){var d,e;for(e=b.split(/[.\/]/),d=0;d + + {% endblock %} {% block header %} From d25300a7fbf4681f0afdc78b89d401211ce1046d Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Wed, 5 Jul 2017 22:26:53 -0700 Subject: [PATCH 06/47] Add padding to bottom of buttons on shelf page This adds some space between the buttons when viewing them on a mobile device. --- cps/static/css/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index e136fedf..a9f42fa5 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -43,7 +43,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .btn-file {position: relative; overflow: hidden;} .btn-file input[type=file] {position: absolute; top: 0; right: 0; min-width: 100%; min-height: 100%; font-size: 100px; text-align: right; filter: alpha(opacity=0); opacity: 0; outline: none; background: white; cursor: inherit; display: block;} -.btn-toolbar .btn { margin-bottom: 5px; } +.btn-toolbar .btn,.discover .btn { margin-bottom: 5px; } .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary{ background-color: #1C5484; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #89B9E2; } From 4fe1536b7e05e4bfc01cad6728ff591d86e6042c Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 6 Jul 2017 10:33:47 -0700 Subject: [PATCH 07/47] Simplify the read functionality's code * Use block label to toggle the checkbox * Submit form when checkbox's value changes (regardless of whether mouse is used or not) * Remove unused code --- cps/static/css/style.css | 1 + cps/templates/detail.html | 34 +++++++++------------------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index e136fedf..6e6d1c9d 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -52,3 +52,4 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .spinner {margin:0 41%;} .spinner2 {margin:0 41%;} +.block-label {display: block;} diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 44fc8f55..1d80cb05 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -109,10 +109,12 @@ {% endif %} {% if not g.user.is_anonymous() %}

    -

    -
    - - +
    + +

    @@ -222,28 +224,10 @@ {% endblock %} From 7631eea32e90bae91f58589d95f7981a242bea4f Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Wed, 5 Jul 2017 19:09:01 -0700 Subject: [PATCH 08/47] Add sort options when viewing books Default view still shows the most recently added books, but adds ability to sort by newest/oldest books and books sorted alphabetically (ascending & descending). I did not include translations for the next text, but they are split up for easy translating and are otherwise ready for translating. --- cps/templates/layout.html | 14 +++++++++++++- cps/web.py | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/cps/templates/layout.html b/cps/templates/layout.html index 1833df5c..a0080322 100644 --- a/cps/templates/layout.html +++ b/cps/templates/layout.html @@ -121,7 +121,19 @@
    +
    + + +

    {{_('Default Settings for new users')}}

    diff --git a/cps/templates/login.html b/cps/templates/login.html index 435b95f6..3e8ebe1e 100644 --- a/cps/templates/login.html +++ b/cps/templates/login.html @@ -3,6 +3,7 @@

    {{_('Login')}}

    +
    @@ -17,6 +18,9 @@
    + {% if remote_login %} + {{_('Log in with magic link')}} + {% endif %}
    {% if error %} diff --git a/cps/templates/remote_login.html b/cps/templates/remote_login.html new file mode 100644 index 00000000..92c89c78 --- /dev/null +++ b/cps/templates/remote_login.html @@ -0,0 +1,40 @@ +{% extends "layout.html" %} +{% block body %} +
    +

    {{_('Remote Login')}}

    +

    + {{_('Using your another device, visit')}} {{verify_url}} {{_('and log in')}}. +

    +

    + {{_('Once you do so, you will automatically get logged in on this device.')}} +

    +

    + {{_('The link will expire after %s minutes.' % 10)}} +

    +
    +{% endblock %} + +{% block js %} + +{% endblock %} diff --git a/cps/ub.py b/cps/ub.py index 373053db..dc377cba 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -11,6 +11,8 @@ import logging from werkzeug.security import generate_password_hash from flask_babel import gettext as _ import json +import datetime +from binascii import hexlify dbpath = os.path.join(os.path.normpath(os.getenv("CALIBRE_DBPATH", os.path.dirname(os.path.realpath(__file__)) + os.sep + ".." + os.sep)), "app.db") engine = create_engine('sqlite:///{0}'.format(dbpath), echo=False) @@ -260,11 +262,29 @@ class Settings(Base): config_google_drive_calibre_url_base = Column(String) config_google_drive_watch_changes_response = Column(String) config_columns_to_ignore = Column(String) + config_remote_login = Column(Boolean) def __repr__(self): pass +class RemoteAuthToken(Base): + __tablename__ = 'remote_auth_token' + + id = Column(Integer, primary_key=True) + auth_token = Column(String(8), unique=True) + user_id = Column(Integer, ForeignKey('user.id')) + verified = Column(Boolean, default=False) + expiration = Column(DateTime) + + def __init__(self): + self.auth_token = hexlify(os.urandom(4)) + self.expiration = datetime.datetime.now() + datetime.timedelta(minutes=10) # 10 min from now + + def __repr__(self): + return '' % self.id + + # Class holds all application specific settings in calibre-web class Config: def __init__(self): @@ -299,6 +319,7 @@ class Config: self.config_columns_to_ignore = data.config_columns_to_ignore self.db_configured = bool(self.config_calibre_dir is not None and (not self.config_use_google_drive or os.path.exists(self.config_calibre_dir + '/metadata.db'))) + self.config_remote_login = data.config_remote_login @property def get_main_dir(self): @@ -449,6 +470,16 @@ def migrate_Database(): session.commit() if session.query(User).filter(User.role.op('&')(ROLE_ANONYMOUS) == ROLE_ANONYMOUS).first() is None: create_anonymous_user() + try: + session.query(exists().where(Settings.config_remote_login)).scalar() + except exc.OperationalError: + conn = engine.connect() + conn.execute("ALTER TABLE Settings ADD column `config_remote_login` INTEGER DEFAULT 0") + +def clean_database(): + # Remove expired remote login tokens + now = datetime.datetime.now() + session.query(RemoteAuthToken).filter(now > RemoteAuthToken.expiration).delete() def create_default_config(): settings = Settings() @@ -529,7 +560,9 @@ if not os.path.exists(dbpath): except Exception: raise else: + Base.metadata.create_all(engine) migrate_Database() + clean_database() # Generate global Settings Object accecable from every file config = Config() diff --git a/cps/web.py b/cps/web.py index c810ee7f..456ed0fb 100755 --- a/cps/web.py +++ b/cps/web.py @@ -58,6 +58,7 @@ import shutil import gdriveutils import tempfile import hashlib +from redirect import redirect_back, is_safe_url from tornado import version as tornadoVersion @@ -372,6 +373,21 @@ def login_required_if_no_ano(func): return login_required(func) +def remote_login_required(f): + @wraps(f) + def inner(*args, **kwargs): + if config.config_remote_login: + return f(*args, **kwargs) + if request.is_xhr: + data = {'status': 'error', 'message': 'Forbidden'} + response = make_response(json.dumps(data, ensure_ascii=false)) + response.headers["Content-Type"] = "application/json; charset=utf-8" + return response, 403 + abort(403) + + return inner + + # custom jinja filters @app.template_filter('shortentitle') def shortentitle_filter(s): @@ -1805,14 +1821,20 @@ def login(): if user and check_password_hash(user.password, form['password']): login_user(user, remember=True) + flash(_(u"you are now logged in as: '%(nickname)s'", nickname=user.nickname), category="success") - return redirect(url_for("index")) + return redirect_back(url_for("index")) else: ipAdress=request.headers.get('X-Forwarded-For', request.remote_addr) app.logger.info('Login failed for user "' + form['username'] + '" IP-adress: ' + ipAdress) flash(_(u"Wrong Username or Password"), category="error") - return render_title_template('login.html', title=_(u"login")) + next_url = request.args.get('next') + if next_url is None or not is_safe_url(next_url): + next_url = url_for('index') + + return render_title_template('login.html', title=_(u"login"), next_url=next_url, + remote_login=config.config_remote_login) @app.route('/logout') @@ -1823,6 +1845,87 @@ def logout(): return redirect(url_for('login')) +@app.route('/remote/login') +@remote_login_required +def remote_login(): + auth_token = ub.RemoteAuthToken() + ub.session.add(auth_token) + ub.session.commit() + + verify_url = url_for('verify_token', token=auth_token.auth_token, _external=true) + + return render_title_template('remote_login.html', title=_(u"login"), token=auth_token.auth_token, + verify_url=verify_url) + + +@app.route('/verify/') +@remote_login_required +@login_required +def verify_token(token): + auth_token = ub.session.query(ub.RemoteAuthToken).filter(ub.RemoteAuthToken.auth_token == token).first() + + # Token not found + if auth_token is None: + flash(_(u"Token not found"), category="error") + return redirect(url_for('index')) + + # Token expired + if datetime.datetime.now() > auth_token.expiration: + ub.session.delete(auth_token) + ub.session.commit() + + flash(_(u"Token has expired"), category="error") + return redirect(url_for('index')) + + # Update token with user information + auth_token.user_id = current_user.id + auth_token.verified = True + ub.session.commit() + + flash(_(u"Success! Please return to your device"), category="success") + return redirect(url_for('index')) + + +@app.route('/ajax/verify_token', methods=['POST']) +@remote_login_required +def token_verified(): + token = request.form['token'] + auth_token = ub.session.query(ub.RemoteAuthToken).filter(ub.RemoteAuthToken.auth_token == token).first() + + data = {} + + # Token not found + if auth_token is None: + data['status'] = 'error' + data['message'] = _(u"Token not found") + + # Token expired + elif datetime.datetime.now() > auth_token.expiration: + ub.session.delete(auth_token) + ub.session.commit() + + data['status'] = 'error' + data['message'] = _(u"Token has expired") + + elif not auth_token.verified: + data['status'] = 'not_verified' + + else: + user = ub.session.query(ub.User).filter(ub.User.id == auth_token.user_id).first() + login_user(user) + + ub.session.delete(auth_token) + ub.session.commit() + + data['status'] = 'success' + flash(_(u"you are now logged in as: '%(nickname)s'", nickname=user.nickname), category="success") + + response = make_response(json.dumps(data, ensure_ascii=false)) + response.headers["Content-Type"] = "application/json; charset=utf-8" + + return response + + @app.route('/send/') @login_required @download_required @@ -2178,6 +2281,10 @@ def configuration_helper(origin): content.config_anonbrowse = 1 if "config_public_reg" in to_save and to_save["config_public_reg"] == "on": content.config_public_reg = 1 + content.config_remote_login = ("config_remote_login" in to_save and to_save["config_remote_login"] == "on") + + if not content.config_remote_login: + ub.session.query(ub.RemoteAuthToken).delete() content.config_default_role = 0 if "admin_role" in to_save: diff --git a/readme.md b/readme.md index b6567365..038b1da5 100755 --- a/readme.md +++ b/readme.md @@ -26,6 +26,7 @@ Calibre Web is a web app providing a clean interface for browsing, reading and d - Support for Calibre custom columns - Fine grained per-user permissions - Self update capability +- "Magic Link" login to make it easy to log on eReaders ## Quick start @@ -55,6 +56,9 @@ Tick to allow not logged in users to browse the catalog, anonymous user permissi Enable uploading: Tick to enable uploading of PDF, epub, FB2. This requires the imagemagick library to be installed. +Enable remote login ("magic link"): +Tick to enable remote login, i.e. a link that allows user to log in via a different device. + ## Requirements Python 2.7+ From b876a03f2643cd036b47e7486ace1ae0590c77cb Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 10:57:40 +0200 Subject: [PATCH 11/47] - Changed link color on download button to white - removed file icons on download button - removed shadow style on download button --- cps/static/css/style.css | 67 ++------------------------------------- cps/templates/detail.html | 17 ++++++++-- cps/templates/shelf.html | 2 ++ cps/templates/stats.html | 14 -------- 4 files changed, 18 insertions(+), 82 deletions(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 0d9df899..dad0d1d2 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -22,17 +22,7 @@ a{color: #45b29d}a:hover{color: #444;} .container-fluid .book .meta .rating{margin-top:5px}.rating .glyphicon-star{color:#999}.rating .glyphicon-star.good{color:#45b29d} .navbar-brand{font-family: 'Grand Hotel', cursive; font-size: 35px; color: #45b29d !important;} .more-stuff{margin-top: 20px; padding-top: 20px;border-top: 1px solid #ccc} -@media all and (min-height: 100vh){ - .more-stuff{ - position: fixed; - bottom: 2em; - height: 20vh; - filter:drop-shadow(1em 1em 1em black); - } - body { - padding-bottom: 20vh; - } -} + .more-stuff>li{margin-bottom: 10px;} .navbar-collapse.in .navbar-nav{margin: 0;} span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: text-top;} @@ -41,7 +31,6 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .book-meta .identifiers a {display: inline;} .container-fluid .single .cover img { border: 1px solid #fff; - /*border-radius: 7px;*/ box-sizeing: border-box; -webkit-box-shadow: 0 5px 8px -6px #777; -moz-box-shadow: 0 5px 8px -6px #777; @@ -55,7 +44,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .btn-file input[type=file] {position: absolute; top: 0; right: 0; min-width: 100%; min-height: 100%; font-size: 100px; text-align: right; filter: alpha(opacity=0); opacity: 0; outline: none; background: white; cursor: inherit; display: block;} .btn-toolbar .btn,.discover .btn { margin-bottom: 5px; } - +.button-link {color:#fff;} .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary{ background-color: #1C5484; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #89B9E2; } .btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left:0px; } @@ -63,56 +52,4 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .spinner {margin:0 41%;} .spinner2 {margin:0 41%;} -* .ebook-icon{ - background-size: contain; - background-repeat: no-repeat; - background-position: center; -} -.ebook-icon.ebook-epub{ - background-image: - url( - data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTMwLjcsNjkuNiAgICBjMCwxLjItMC44LDItMiwycy0xLjktMC44LTEuOS0yYzAtMS4xLDAuOC0xLjksMS45LTEuOVMzMC43LDY4LjUsMzAuNyw2OS42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik0zOC4xLDY4LjEgICAgYzAsMC42LDAuNCwwLjksMSwwLjloMTAuMWMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjctMC40LDEuMi0xLjEsMS4ySDM4LjRjLTIsMC0yLjktMC45LTIuOS0zVjUyLjVjMC0yLjIsMC45LTMuMSwyLjktMy4xSDQ5ICAgIGMwLjcsMCwxLjEsMC41LDEuMSwxLjJzLTAuNCwxLjItMS4xLDEuMmgtOS45Yy0wLjcsMC0xLDAuMy0xLDF2NS44aDkuNmMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjYtMC40LDEuMi0xLjEsMS4yaC05LjZWNjguMXoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNTUuOCw3Ni40ICAgIGMwLDAuNy0wLjUsMS4xLTEuMiwxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43YzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC4zLDEuMiwxdjAuNWMwLDAuNCwwLDEuMS0wLjEsMS42ICAgIGMxLTIsMi41LTMuMyw1LjMtMy4zYzQuMiwwLDYuNiwzLjEsNi42LDguMXMtMi41LDguNC02LjgsOC40Yy0yLjYsMC00LjItMS4zLTUuMi0zLjNjMC4xLDAuNSwwLjEsMS4xLDAuMSwxLjZWNzYuNHogTTU1LjgsNjMuNiAgICBjMCwzLjUsMS44LDYsNC44LDZjMi45LDAsNC41LTIuNCw0LjUtNi4xYzAtMy43LTEuNi02LTQuNC02QzU3LjUsNTcuNiw1NS44LDYwLjEsNTUuOCw2My42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik03MC45LDU2LjcgICAgYzAtMC44LDAuNS0xLjEsMS4zLTEuMXMxLjMsMC40LDEuMywxLjF2OWMwLDIuNCwxLDMuOCwzLjEsMy44YzEuNSwwLDIuNy0wLjcsMy43LTJjMC43LTEsMS0xLjgsMS0yLjl2LTcuOWMwLTAuOCwwLjUtMS4xLDEuMy0xLjEgICAgYzAuNywwLDEuMywwLjQsMS4zLDEuMXYxMy43YzAsMC44LTAuNSwxLjEtMS4yLDEuMWMtMC44LDAtMS4zLTAuMy0xLjMtMXYtMC44YzAtMC4zLDAuMS0wLjksMC4yLTEuM2MtMC45LDItMi41LDMuNC01LjMsMy40ICAgIGMtMy4zLDAtNS4yLTIuMS01LjItNS41VjU2Ljd6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTkwLjQsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNOTAuMyw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDOTIuMSw1Ny42LDkwLjMsNjAuMSw5MC4zLDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PC9nPjwvZz48L3N2Zz4= - ) - ; - padding: 1em; - background-size: contain; - background-repeat: no-repeat; - background-position: center; -} - -.ebook-icon.ebook-pdf{ - background-image: - url( - data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTQwLjIsNjkuNiAgICBjMCwxLjItMC44LDItMiwycy0xLjktMC44LTEuOS0yYzAtMS4xLDAuOC0xLjksMS45LTEuOVM0MC4yLDY4LjUsNDAuMiw2OS42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik00Nyw3Ni40ICAgIGMwLDAuNy0wLjUsMS4xLTEuMiwxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43YzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC4zLDEuMiwxdjAuNWMwLDAuNCwwLDEuMS0wLjEsMS42ICAgIGMxLTIsMi41LTMuMyw1LjMtMy4zYzQuMiwwLDYuNiwzLjEsNi42LDguMXMtMi41LDguNC02LjgsOC40Yy0yLjYsMC00LjItMS4zLTUuMi0zLjNjMC4xLDAuNSwwLjEsMS4xLDAuMSwxLjZWNzYuNHogTTQ3LDYzLjYgICAgYzAsMy41LDEuOCw2LDQuOCw2YzIuOSwwLDQuNS0yLjQsNC41LTYuMWMwLTMuNy0xLjYtNi00LjQtNkM0OC43LDU3LjYsNDcsNjAuMSw0Nyw2My42eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjxwYXRoIGQ9Ik03My4zLDUwLjQgICAgYzAtMC44LDAuNS0xLjEsMS4yLTEuMWMwLjgsMCwxLjMsMC40LDEuMywxLjF2MjAuMWMwLDAuOC0wLjUsMS4xLTEuMywxLjFjLTAuOCwwLTEuMi0wLjUtMS4yLTF2LTAuNmMwLTAuMywwLjEtMC45LDAuMS0xLjMgICAgYy0xLDItMi42LDMuMi01LjIsMy4yYy00LjEsMC02LjctMy4yLTYuNy04LjNjMC00LjksMi42LTguMSw2LjgtOC4xYzIuNiwwLDQuMiwxLjIsNS4yLDMuMmMtMC4xLTAuNi0wLjEtMS41LTAuMS0yLjFWNTAuNHogICAgIE02NCw2My41YzAsMy43LDEuNiw2LjEsNC41LDYuMWMzLDAsNC44LTIuNiw0LjgtNi4xYzAtMy40LTEuNy02LTQuOC02QzY1LjcsNTcuNiw2NCw1OS45LDY0LDYzLjV6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTgxLjcsNTMuNyAgICBjMC0zLjYsMi4yLTQuNiw0LjQtNC42YzAuOSwwLDEuNiwwLjEsMi40LDAuM2MwLjUsMC4yLDAuOCwwLjYsMC44LDFjMCwwLjIsMCwwLjQtMC4xLDAuNWMtMC4yLDAuNS0wLjYsMC44LTEuMSwwLjggICAgYy0wLjEsMC0wLjMsMC0wLjUtMC4xYy0wLjUtMC4yLTEtMC4zLTEuNi0wLjNjLTEsMC0xLjgsMC42LTEuOCwyLjZ2MS43aDMuNGMwLjcsMCwxLDAuNSwxLDEuMmMwLDAuNi0wLjQsMS4xLTEsMS4xaC0zLjR2MTIuNSAgICBjMCwwLjgtMC41LDEuMS0xLjMsMS4xYy0wLjgsMC0xLjMtMC40LTEuMy0xLjFWNThoLTIuNGMtMC43LDAtMS0wLjQtMS0xLjFzMC4zLTEuMiwxLTEuMmgyLjRWNTMuN3oiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48L2c+PC9nPjwvc3ZnPg== - ) - ; - padding: 1em; - background-size: contain; - background-repeat: no-repeat; - background-position: center; -} - -.ebook-icon.ebook-fb2{ - background-image: - url( - data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTM4LjYsNjkuNiAgICBjMCwxLjItMC44LDItMiwyYy0xLjEsMC0yLTAuOC0yLTJjMC0xLjEsMC44LTEuOSwyLTEuOUMzNy44LDY3LjcsMzguNiw2OC41LDM4LjYsNjkuNnoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNDYuMSw3MC40ICAgIGMwLDAuOC0wLjYsMS4yLTEuNCwxLjJjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMlY1Mi40YzAtMi4yLDAuOS0zLDIuOS0zaDExLjJjMC44LDAsMS4yLDAuNSwxLjIsMS4ycy0wLjQsMS4yLTEuMiwxLjJINDcgICAgYy0wLjUsMC0wLjksMC4zLTAuOSwwLjl2Ni4xaDkuOGMwLjcsMCwxLjEsMC41LDEuMSwxLjJjMCwwLjYtMC40LDEuMi0xLjEsMS4yaC05LjhWNzAuNHoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNjQsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNNjMuOSw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDNjUuNyw1Ny42LDYzLjksNjAuMSw2My45LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTkzLjEsNjkgICAgYzAuNywwLDEsMC41LDEsMS4ycy0wLjQsMS4zLTEsMS4zSDgwLjJjLTEuMSwwLTEuNy0wLjYtMS43LTEuN2MwLTEsMC42LTIuNCwxLjEtMy4yYzEtMS45LDIuNy0zLjcsNS40LTUuNGwxLjktMS4zICAgIGMyLjgtMS44LDQtMi45LDQtNS4xYzAtMi4xLTEuOC0zLjQtNC40LTMuNGMtMy4zLDAtNC40LDEuOS00LjksMy45Yy0wLjIsMC42LTAuNywwLjktMS4yLDAuOWMtMC4xLDAtMC4zLDAtMC40LDAgICAgYy0wLjYtMC4xLTEuMS0wLjUtMS4xLTEuMmMwLTAuMSwwLTAuMywwLjEtMC40YzAuMy0xLjIsMC45LTIuNSwxLjktMy40YzEuMy0xLjIsMy4xLTIsNS44LTJjNC4zLDAsNywyLjIsNyw1LjggICAgYzAsMy40LTIuMiw1LTQuNyw2LjZsLTEuOSwxLjFjLTMuMSwyLTQuOSwzLjgtNS42LDYuNEg5My4xeiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48L2c+PC9zdmc+ - ) - ; - padding: 1em; - background-size: contain; - background-repeat: no-repeat; - background-position: center; -} - -.ebook-icon.ebook-mobi{ - background-image: - url( - data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/PjwhRE9DVFlQRSBzdmcgIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz48c3ZnIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDEyOCAxMjgiIGlkPSLQodC70L7QuV8xIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAxMjggMTI4IiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Zz48Zz48cGF0aCBkPSJNMTA5LDM0djc1YzAsOC4zLTYuNywxNS0xNSwxNUgzNGMtOC4zLDAtMTUtNi43LTE1LTE1VjE5YzAtOC4zLDYuNy0xNSwxNS0xNWg0NUwxMDksMzR6IiBmaWxsPSIjRjZGM0UwIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCwxMjUuMkgzNGMtOSwwLTE2LjItNy4zLTE2LjItMTYuMlYxOUMxNy44LDEwLDI1LDIuOCwzNCwyLjhoNDVjMC4zLDAsMC42LDAuMSwwLjksMC40bDMwLDMwICAgIGMwLjIsMC4yLDAuNCwwLjYsMC40LDAuOXY3NUMxMTAuMiwxMTgsMTAzLDEyNS4yLDk0LDEyNS4yeiBNMzQsNS4yYy03LjYsMC0xMy44LDYuMi0xMy44LDEzLjh2OTBjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDYwICAgIGM3LjYsMCwxMy44LTYuMiwxMy44LTEzLjhWMzQuNUw3OC41LDUuMkgzNHoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTk0LDExMC4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDExMC4yLDk0LDExMC4yeiIgZmlsbD0iIzJEMkUyRCIvPjwvZz48Zz48cGF0aCBkPSJNOTQsOTguMkgzNGMtMC43LDAtMS4yLTAuNi0xLjItMS4yczAuNi0xLjIsMS4yLTEuMmg2MGMwLjcsMCwxLjIsMC42LDEuMiwxLjJTOTQuNyw5OC4yLDk0LDk4LjJ6IiBmaWxsPSIjMkQyRTJEIi8+PC9nPjxnPjxwYXRoIGQ9Ik05NCw4Ni4ySDM0Yy0wLjcsMC0xLjItMC42LTEuMi0xLjJzMC42LTEuMiwxLjItMS4yaDYwYzAuNywwLDEuMiwwLjYsMS4yLDEuMlM5NC43LDg2LjIsOTQsODYuMnoiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGcgb3BhY2l0eT0iMC4xIj48cGF0aCBkPSJNMTA5LDM4di00TDc5LDRoLTR2MTVjMCwxMC41LDguNSwxOSwxOSwxOUgxMDl6IiBmaWxsPSIjMDMwNTA1Ii8+PC9nPjxnPjxwYXRoIGQ9Ik03OSwxOWMwLDguMyw2LjcsMTUsMTUsMTVoMTVMNzksNFYxOXoiIGZpbGw9IiNGOUUzNzMiLz48L2c+PGc+PHBhdGggZD0iTTEwOSwzNS4ySDk0Yy05LDAtMTYuMi03LjMtMTYuMi0xNi4yVjRjMC0wLjUsMC4zLTEsMC44LTEuMmMwLjUtMC4yLDEtMC4xLDEuNCwwLjNsMzAsMzAgICAgYzAuNCwwLjQsMC41LDAuOSwwLjMsMS40QzExMCwzNC45LDEwOS41LDM1LjIsMTA5LDM1LjJ6IE04MC4yLDd2MTJjMCw3LjYsNi4yLDEzLjgsMTMuOCwxMy44aDEyTDgwLjIsN3oiIGZpbGw9IiMyRDJFMkQiLz48L2c+PGc+PHBhdGggZD0iTTMxLjgsNjkuNiAgICBjMCwxLjItMC44LDItMiwyYy0xLjEsMC0yLTAuOC0yLTJjMC0xLjEsMC44LTEuOSwyLTEuOUMzMC45LDY3LjcsMzEuOCw2OC41LDMxLjgsNjkuNnoiIGZpbGw9IiMyRDJFMkQiIHN0cm9rZT0iIzJEMkUyRCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbWl0ZXJsaW1pdD0iMTAiLz48cGF0aCBkPSJNNDkuNCw3MC4zICAgIGMtMC40LDEtMC45LDEuMy0xLjgsMS4zYy0wLjksMC0xLjQtMC4zLTEuOC0xLjNsLTQuMy0xMC43Yy0wLjgtMi0yLjItNi4xLTIuNy03LjljMC4xLDEuOCwwLjQsNywwLjQsMTAuOXY3LjkgICAgYzAsMC44LTAuNSwxLjEtMS4zLDEuMWMtMC44LDAtMS4zLTAuNC0xLjMtMS4xVjUwLjljMC0xLDAuNy0xLjcsMS44LTEuN2MxLjIsMCwxLjgsMC41LDIuMywxLjVsNS4yLDEzLjFjMC42LDEuNCwxLjUsNCwxLjgsNS4zICAgIGMwLjMtMS4yLDEuMS0zLjcsMS44LTUuM2w1LjEtMTIuOWMwLjUtMS4xLDEuMS0xLjYsMi4zLTEuNmMxLDAsMS44LDAuNiwxLjgsMS43djE5LjZjMCwwLjgtMC42LDEuMS0xLjMsMS4xICAgIGMtMC44LDAtMS4zLTAuNC0xLjMtMS4xdi03LjhjMC00LDAuMy05LjEsMC41LTExYy0wLjUsMS44LTEuOSw1LjgtMi43LDcuOEw0OS40LDcwLjN6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTc2LjksNjMuNiAgICBjMCw0LjktMi43LDguMy03LjEsOC4zYy00LjcsMC03LjQtMy4zLTcuNC04LjNjMC00LjksMi43LTguMiw3LjMtOC4yQzc0LjIsNTUuNCw3Ni45LDU4LjYsNzYuOSw2My42eiBNNjUsNjMuNmMwLDMuNiwxLjcsNiw0LjYsNiAgICBjMy4xLDAsNC43LTIuNCw0LjctNi4yYzAtMy42LTEuNi02LTQuNS02QzY2LjcsNTcuNSw2NSw1OS45LDY1LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTgyLjcsNzAuNSAgICBjMCwwLjYtMC40LDEtMS4yLDFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1MC40YzAtMC44LDAuNS0xLjEsMS4zLTEuMWMwLjcsMCwxLjIsMC40LDEuMiwxLjF2Ni4yYzAsMC42LTAuMSwxLjQtMC4xLDIuMSAgICBjMS0yLDIuNy0zLjIsNS4zLTMuMmM0LjIsMCw2LjcsMy4xLDYuNyw4LjFjMCw1LTIuNiw4LjMtNi44LDguM2MtMi42LDAtNC4zLTEuMy01LjItMy4yYzAuMSwwLjQsMC4xLDEsMC4xLDEuNFY3MC41eiBNODIuNiw2My42ICAgIGMwLDMuNSwxLjgsNiw0LjgsNmMyLjksMCw0LjUtMi40LDQuNS02LjFjMC0zLjctMS42LTYtNC40LTZDODQuNCw1Ny42LDgyLjYsNjAuMSw4Mi42LDYzLjZ6IiBmaWxsPSIjMkQyRTJEIiBzdHJva2U9IiMyRDJFMkQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIi8+PHBhdGggZD0iTTEwMSw1MS4xICAgIGMwLDEuMS0wLjgsMS45LTEuOSwxLjljLTEuMSwwLTEuOS0wLjgtMS45LTEuOWMwLTEuMSwwLjgtMS45LDEuOS0xLjlDMTAwLjEsNDkuMiwxMDEsNTAsMTAxLDUxLjF6IE05Ny44LDU2LjcgICAgYzAtMC43LDAuNS0xLjEsMS4zLTEuMWMwLjgsMCwxLjMsMC40LDEuMywxLjF2MTMuOGMwLDAuOC0wLjUsMS4xLTEuMywxLjFjLTAuOCwwLTEuMy0wLjQtMS4zLTEuMVY1Ni43eiIgZmlsbD0iIzJEMkUyRCIgc3Ryb2tlPSIjMkQyRTJEIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIvPjwvZz48L2c+PC9zdmc+ - ) - ; - padding: 1em; - background-size: contain; - background-repeat: no-repeat; - background-position: center; -} diff --git a/cps/templates/detail.html b/cps/templates/detail.html index c53c5fd3..bf9634df 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -130,18 +130,29 @@
    {% if g.user.role_download() %}
    + {% if entry.data|length < 3 %} {% for format in entry.data %} - {%endfor%} + {% endfor %} + {% else %} + + + {% endif %}
    {% endif %} diff --git a/cps/templates/shelf.html b/cps/templates/shelf.html index b6e5d854..a8c52ce8 100644 --- a/cps/templates/shelf.html +++ b/cps/templates/shelf.html @@ -22,7 +22,9 @@

    {{entry.title|shortentitle}}

    + {% if entry.authors|length > 0 %}

    {{entry.authors[0].name}}

    + {% endif %} {% if entry.ratings.__len__() > 0 %}
    {% for number in range((entry.ratings[0].rating/2)|int(2)) %} diff --git a/cps/templates/stats.html b/cps/templates/stats.html index 6745e908..83f2fa98 100644 --- a/cps/templates/stats.html +++ b/cps/templates/stats.html @@ -88,18 +88,4 @@ - - - - - - - - - - - - - -
    {{_('File License')}}{{_('License Type')}}
    File Document Icon By Sergei KokotaCreative Commons (Attribution 3.0 Unported)
    {% endblock %} From 4f08608d751efea51369ce6436cbfd264032ad31 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 11:01:40 +0200 Subject: [PATCH 12/47] Move download button to top of detail page (#174) --- cps/templates/detail.html | 102 +++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/cps/templates/detail.html b/cps/templates/detail.html index bf9634df..85a51804 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -12,6 +12,57 @@
    +
    +

    {{entry.title}}

    {% for author in entry.authors %} @@ -125,57 +176,6 @@ {% endif %} -

    -
    {% if g.user.is_authenticated %} {% if g.user.shelf.all() or g.public_shelfes %} From 15531324eabf15100af2a03e69caa3bcf18bde7e Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 11:19:36 +0200 Subject: [PATCH 13/47] Add translation of rich text editor --- cps/static/js/libs/tinymce/langs/de.js | 230 ++++++++++++++++++ cps/static/js/libs/tinymce/langs/es.js | 230 ++++++++++++++++++ cps/static/js/libs/tinymce/langs/fr.js | 230 ++++++++++++++++++ cps/static/js/libs/tinymce/langs/nl.js | 230 ++++++++++++++++++ cps/static/js/libs/tinymce/langs/pl.js | 230 ++++++++++++++++++ cps/static/js/libs/tinymce/langs/ru.js | 230 ++++++++++++++++++ .../js/libs/tinymce/langs/zh_Hans_CN.js | 230 ++++++++++++++++++ cps/templates/book_edit.html | 3 +- 8 files changed, 1612 insertions(+), 1 deletion(-) create mode 100644 cps/static/js/libs/tinymce/langs/de.js create mode 100644 cps/static/js/libs/tinymce/langs/es.js create mode 100644 cps/static/js/libs/tinymce/langs/fr.js create mode 100644 cps/static/js/libs/tinymce/langs/nl.js create mode 100644 cps/static/js/libs/tinymce/langs/pl.js create mode 100644 cps/static/js/libs/tinymce/langs/ru.js create mode 100644 cps/static/js/libs/tinymce/langs/zh_Hans_CN.js diff --git a/cps/static/js/libs/tinymce/langs/de.js b/cps/static/js/libs/tinymce/langs/de.js new file mode 100644 index 00000000..8ea79ab6 --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/de.js @@ -0,0 +1,230 @@ +tinymce.addI18n('de',{ +"Cut": "Ausschneiden", +"Heading 5": "\u00dcberschrift 5", +"Header 2": "\u00dcberschrift 2", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Ihr Browser unterst\u00fctzt leider keinen direkten Zugriff auf die Zwischenablage. Bitte benutzen Sie die Strg + X \/ C \/ V Tastenkombinationen.", +"Heading 4": "\u00dcberschrift 4", +"Div": "Textblock", +"Heading 2": "\u00dcberschrift 2", +"Paste": "Einf\u00fcgen", +"Close": "Schlie\u00dfen", +"Font Family": "Schriftart", +"Pre": "Vorformatierter Text", +"Align right": "Rechtsb\u00fcndig ausrichten", +"New document": "Neues Dokument", +"Blockquote": "Zitat", +"Numbered list": "Nummerierte Liste", +"Heading 1": "\u00dcberschrift 1", +"Headings": "\u00dcberschriften", +"Increase indent": "Einzug vergr\u00f6\u00dfern", +"Formats": "Formate", +"Headers": "\u00dcberschriften", +"Select all": "Alles ausw\u00e4hlen", +"Header 3": "\u00dcberschrift 3", +"Blocks": "Absatzformate", +"Undo": "R\u00fcckg\u00e4ngig", +"Strikethrough": "Durchgestrichen", +"Bullet list": "Aufz\u00e4hlung", +"Header 1": "\u00dcberschrift 1", +"Superscript": "Hochgestellt", +"Clear formatting": "Formatierung entfernen", +"Font Sizes": "Schriftgr\u00f6\u00dfe", +"Subscript": "Tiefgestellt", +"Header 6": "\u00dcberschrift 6", +"Redo": "Wiederholen", +"Paragraph": "Absatz", +"Ok": "Ok", +"Bold": "Fett", +"Code": "Quelltext", +"Italic": "Kursiv", +"Align center": "Zentriert ausrichten", +"Header 5": "\u00dcberschrift 5", +"Heading 6": "\u00dcberschrift 6", +"Heading 3": "\u00dcberschrift 3", +"Decrease indent": "Einzug verkleinern", +"Header 4": "\u00dcberschrift 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Einf\u00fcgen ist nun im einfachen Textmodus. Inhalte werden ab jetzt als unformatierter Text eingef\u00fcgt, bis Sie diese Einstellung wieder ausschalten!", +"Underline": "Unterstrichen", +"Cancel": "Abbrechen", +"Justify": "Blocksatz", +"Inline": "Zeichenformate", +"Copy": "Kopieren", +"Align left": "Linksb\u00fcndig ausrichten", +"Visual aids": "Visuelle Hilfen", +"Lower Greek": "Griechische Kleinbuchstaben", +"Square": "Quadrat", +"Default": "Standard", +"Lower Alpha": "Kleinbuchstaben", +"Circle": "Kreis", +"Disc": "Punkt", +"Upper Alpha": "Gro\u00dfbuchstaben", +"Upper Roman": "R\u00f6mische Zahlen (Gro\u00dfbuchstaben)", +"Lower Roman": "R\u00f6mische Zahlen (Kleinbuchstaben)", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Die Kennung sollte mit einem Buchstaben anfangen. Nachfolgend nur Buchstaben, Zahlen, Striche (Minus), Punkte, Kommas und Unterstriche.", +"Name": "Name", +"Anchor": "Textmarke", +"Id": "Kennung", +"You have unsaved changes are you sure you want to navigate away?": "Die \u00c4nderungen wurden noch nicht gespeichert, sind Sie sicher, dass Sie diese Seite verlassen wollen?", +"Restore last draft": "Letzten Entwurf wiederherstellen", +"Special character": "Sonderzeichen", +"Source code": "Quelltext", +"Language": "Sprache", +"Insert\/Edit code sample": "Codebeispiel einf\u00fcgen\/bearbeiten", +"B": "B", +"R": "R", +"G": "G", +"Color": "Farbe", +"Right to left": "Von rechts nach links", +"Left to right": "Von links nach rechts", +"Emoticons": "Emoticons", +"Robots": "Robots", +"Document properties": "Dokumenteigenschaften", +"Title": "Titel", +"Keywords": "Sch\u00fcsselw\u00f6rter", +"Encoding": "Zeichenkodierung", +"Description": "Beschreibung", +"Author": "Verfasser", +"Fullscreen": "Vollbild", +"Horizontal line": "Horizontale Linie", +"Horizontal space": "Horizontaler Abstand", +"Insert\/edit image": "Bild einf\u00fcgen\/bearbeiten", +"General": "Allgemein", +"Advanced": "Erweitert", +"Source": "Quelle", +"Border": "Rahmen", +"Constrain proportions": "Seitenverh\u00e4ltnis beibehalten", +"Vertical space": "Vertikaler Abstand", +"Image description": "Bildbeschreibung", +"Style": "Stil", +"Dimensions": "Abmessungen", +"Insert image": "Bild einf\u00fcgen", +"Image": "Bild", +"Zoom in": "Ansicht vergr\u00f6\u00dfern", +"Contrast": "Kontrast", +"Back": "Zur\u00fcck", +"Gamma": "Gamma", +"Flip horizontally": "Horizontal spiegeln", +"Resize": "Skalieren", +"Sharpen": "Sch\u00e4rfen", +"Zoom out": "Ansicht verkleinern", +"Image options": "Bildeigenschaften", +"Apply": "Anwenden", +"Brightness": "Helligkeit", +"Rotate clockwise": "Im Uhrzeigersinn drehen", +"Rotate counterclockwise": "Gegen den Uhrzeigersinn drehen", +"Edit image": "Bild bearbeiten", +"Color levels": "Farbwerte", +"Crop": "Bescheiden", +"Orientation": "Ausrichtung", +"Flip vertically": "Vertikal spiegeln", +"Invert": "Invertieren", +"Date\/time": "Datum\/Uhrzeit", +"Insert date\/time": "Datum\/Uhrzeit einf\u00fcgen ", +"Remove link": "Link entfernen", +"Url": "URL", +"Text to display": "Anzuzeigender Text", +"Anchors": "Textmarken", +"Insert link": "Link einf\u00fcgen", +"Link": "Link", +"New window": "Neues Fenster", +"None": "Keine", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http:\/\/\" voranstellen?", +"Paste or type a link": "Link einf\u00fcgen oder eintippen", +"Target": "Ziel", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?", +"Insert\/edit link": "Link einf\u00fcgen\/bearbeiten", +"Insert\/edit video": "Video einf\u00fcgen\/bearbeiten", +"Media": "Medium", +"Alternative source": "Alternative Quelle", +"Paste your embed code below:": "F\u00fcgen Sie Ihren Einbettungscode hier ein:", +"Insert video": "Video einf\u00fcgen", +"Poster": "Poster", +"Insert\/edit media": "Medien einf\u00fcgen\/bearbeiten", +"Embed": "Einbetten", +"Nonbreaking space": "Gesch\u00fctztes Leerzeichen", +"Page break": "Seitenumbruch", +"Paste as text": "Als Text einf\u00fcgen", +"Preview": "Vorschau", +"Print": "Drucken", +"Save": "Speichern", +"Could not find the specified string.": "Die Zeichenfolge wurde nicht gefunden.", +"Replace": "Ersetzen", +"Next": "Weiter", +"Whole words": "Nur ganze W\u00f6rter", +"Find and replace": "Suchen und ersetzen", +"Replace with": "Ersetzen durch", +"Find": "Suchen", +"Replace all": "Alles ersetzen", +"Match case": "Gro\u00df-\/Kleinschreibung beachten", +"Prev": "Zur\u00fcck", +"Spellcheck": "Rechtschreibpr\u00fcfung", +"Finish": "Ende", +"Ignore all": "Alles Ignorieren", +"Ignore": "Ignorieren", +"Add to Dictionary": "Zum W\u00f6rterbuch hinzuf\u00fcgen", +"Insert row before": "Neue Zeile davor einf\u00fcgen ", +"Rows": "Zeilen", +"Height": "H\u00f6he", +"Paste row after": "Zeile danach einf\u00fcgen", +"Alignment": "Ausrichtung", +"Border color": "Rahmenfarbe", +"Column group": "Spaltengruppe", +"Row": "Zeile", +"Insert column before": "Neue Spalte davor einf\u00fcgen", +"Split cell": "Zelle aufteilen", +"Cell padding": "Zelleninnenabstand", +"Cell spacing": "Zellenabstand", +"Row type": "Zeilentyp", +"Insert table": "Tabelle einf\u00fcgen", +"Body": "Inhalt", +"Caption": "Beschriftung", +"Footer": "Fu\u00dfzeile", +"Delete row": "Zeile l\u00f6schen", +"Paste row before": "Zeile davor einf\u00fcgen", +"Scope": "G\u00fcltigkeitsbereich", +"Delete table": "Tabelle l\u00f6schen", +"H Align": "Horizontale Ausrichtung", +"Top": "Oben", +"Header cell": "Kopfzelle", +"Column": "Spalte", +"Row group": "Zeilengruppe", +"Cell": "Zelle", +"Middle": "Mitte", +"Cell type": "Zellentyp", +"Copy row": "Zeile kopieren", +"Row properties": "Zeileneigenschaften", +"Table properties": "Tabelleneigenschaften", +"Bottom": "Unten", +"V Align": "Vertikale Ausrichtung", +"Header": "Kopfzeile", +"Right": "Rechtsb\u00fcndig", +"Insert column after": "Neue Spalte danach einf\u00fcgen", +"Cols": "Spalten", +"Insert row after": "Neue Zeile danach einf\u00fcgen", +"Width": "Breite", +"Cell properties": "Zelleneigenschaften", +"Left": "Linksb\u00fcndig", +"Cut row": "Zeile ausschneiden", +"Delete column": "Spalte l\u00f6schen", +"Center": "Zentriert", +"Merge cells": "Zellen verbinden", +"Insert template": "Vorlage einf\u00fcgen ", +"Templates": "Vorlagen", +"Background color": "Hintergrundfarbe", +"Custom...": "Benutzerdefiniert...", +"Custom color": "Benutzerdefinierte Farbe", +"No color": "Keine Farbe", +"Text color": "Textfarbe", +"Table of Contents": "Inhaltsverzeichnis", +"Show blocks": " Bl\u00f6cke anzeigen", +"Show invisible characters": "Unsichtbare Zeichen anzeigen", +"Words: {0}": "W\u00f6rter: {0}", +"Insert": "Einf\u00fcgen", +"File": "Datei", +"Edit": "Bearbeiten", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich-Text- Area. Dr\u00fccken Sie ALT-F9 f\u00fcr das Men\u00fc. Dr\u00fccken Sie ALT-F10 f\u00fcr Symbolleiste. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe", +"Tools": "Werkzeuge", +"View": "Ansicht", +"Table": "Tabelle", +"Format": "Format" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/es.js b/cps/static/js/libs/tinymce/langs/es.js new file mode 100644 index 00000000..f4bd99db --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/es.js @@ -0,0 +1,230 @@ +tinymce.addI18n('es',{ +"Cut": "Cortar", +"Heading 5": "Encabezado 5", +"Header 2": "Encabezado 2 ", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Tu navegador no soporta acceso directo al portapapeles. Por favor usa las teclas Crtl+X\/C\/V de tu teclado", +"Heading 4": "Encabezado 4", +"Div": "Capa", +"Heading 2": "Encabezado 2", +"Paste": "Pegar", +"Close": "Cerrar", +"Font Family": "Familia de fuentes", +"Pre": "Pre", +"Align right": "Alinear a la derecha", +"New document": "Nuevo documento", +"Blockquote": "Bloque de cita", +"Numbered list": "Lista numerada", +"Heading 1": "Encabezado 1", +"Headings": "Encabezados", +"Increase indent": "Incrementar sangr\u00eda", +"Formats": "Formatos", +"Headers": "Encabezados", +"Select all": "Seleccionar todo", +"Header 3": "Encabezado 3", +"Blocks": "Bloques", +"Undo": "Deshacer", +"Strikethrough": "Tachado", +"Bullet list": "Lista de vi\u00f1etas", +"Header 1": "Encabezado 1", +"Superscript": "Super\u00edndice", +"Clear formatting": "Limpiar formato", +"Font Sizes": "Tama\u00f1os de fuente", +"Subscript": "Sub\u00edndice", +"Header 6": "Encabezado 6", +"Redo": "Rehacer", +"Paragraph": "P\u00e1rrafo", +"Ok": "Ok", +"Bold": "Negrita", +"Code": "C\u00f3digo", +"Italic": "It\u00e1lica", +"Align center": "Alinear al centro", +"Header 5": "Encabezado 5 ", +"Heading 6": "Encabezado 6", +"Heading 3": "Encabezado 3", +"Decrease indent": "Disminuir sangr\u00eda", +"Header 4": "Encabezado 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Pegar est\u00e1 ahora en modo de texto plano. El contenido se pegar\u00e1 como texto plano hasta que desactive esta opci\u00f3n.", +"Underline": "Subrayado", +"Cancel": "Cancelar", +"Justify": "Justificar", +"Inline": "en l\u00ednea", +"Copy": "Copiar", +"Align left": "Alinear a la izquierda", +"Visual aids": "Ayudas visuales", +"Lower Greek": "Inferior Griega", +"Square": "Cuadrado", +"Default": "Por defecto", +"Lower Alpha": "Inferior Alfa", +"Circle": "C\u00edrculo", +"Disc": "Disco", +"Upper Alpha": "Superior Alfa", +"Upper Roman": "Superior Romana", +"Lower Roman": "Inferior Romana", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Deber\u00eda comenzar por una letra, seguida solo de letras, n\u00fameros, guiones, puntos, dos puntos o guiones bajos.", +"Name": "Nombre", +"Anchor": "Ancla", +"Id": "Id", +"You have unsaved changes are you sure you want to navigate away?": "Tiene cambios sin guardar. \u00bfEst\u00e1 seguro de que quiere salir?", +"Restore last draft": "Restaurar el \u00faltimo borrador", +"Special character": "Car\u00e1cter especial", +"Source code": "C\u00f3digo fuente", +"Language": "Idioma", +"Insert\/Edit code sample": "Insertar\/editar c\u00f3digo de prueba", +"B": "A", +"R": "R", +"G": "V", +"Color": "Color", +"Right to left": "De derecha a izquierda", +"Left to right": "De izquierda a derecha", +"Emoticons": "Emoticonos", +"Robots": "Robots", +"Document properties": "Propiedades del documento", +"Title": "T\u00edtulo", +"Keywords": "Palabras clave", +"Encoding": "Codificaci\u00f3n", +"Description": "Descripci\u00f3n", +"Author": "Autor", +"Fullscreen": "Pantalla completa", +"Horizontal line": "L\u00ednea horizontal", +"Horizontal space": "Espacio horizontal", +"Insert\/edit image": "Insertar\/editar imagen", +"General": "General", +"Advanced": "Avanzado", +"Source": "Enlace", +"Border": "Borde", +"Constrain proportions": "Restringir proporciones", +"Vertical space": "Espacio vertical", +"Image description": "Descripci\u00f3n de la imagen", +"Style": "Estilo", +"Dimensions": "Dimensiones", +"Insert image": "Insertar imagen", +"Image": "Imagen", +"Zoom in": "Acercar", +"Contrast": "Contraste", +"Back": "Atr\u00e1s", +"Gamma": "Gamma", +"Flip horizontally": "Invertir horizontalmente", +"Resize": "Redimensionar", +"Sharpen": "Forma", +"Zoom out": "Alejar", +"Image options": "Opciones de imagen", +"Apply": "Aplicar", +"Brightness": "Brillo", +"Rotate clockwise": "Girar a la derecha", +"Rotate counterclockwise": "Girar a la izquierda", +"Edit image": "Editar imagen", +"Color levels": "Niveles de color", +"Crop": "Recortar", +"Orientation": "Orientaci\u00f3n", +"Flip vertically": "Invertir verticalmente", +"Invert": "Invertir", +"Date\/time": "Fecha\/hora", +"Insert date\/time": "Insertar fecha\/hora", +"Remove link": "Quitar enlace", +"Url": "URL", +"Text to display": "Texto para mostrar", +"Anchors": "Anclas", +"Insert link": "Insertar enlace", +"Link": "Enlace", +"New window": "Nueva ventana", +"None": "Ninguno", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "El enlace que has introducido no parece ser una enlace externo. Quieres a\u00f1adir el prefijo necesario http:\/\/ ?", +"Paste or type a link": "Pega o introduce un enlace", +"Target": "Destino", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "El enlace que has introducido no parece ser una direcci\u00f3n de correo electr\u00f3nico. Quieres a\u00f1adir el prefijo necesario mailto: ?", +"Insert\/edit link": "Insertar\/editar enlace", +"Insert\/edit video": "Insertar\/editar video", +"Media": "Media", +"Alternative source": "Enlace alternativo", +"Paste your embed code below:": "Pega tu c\u00f3digo embebido debajo", +"Insert video": "Insertar video", +"Poster": "Miniatura", +"Insert\/edit media": "Insertar\/editar medio", +"Embed": "Incrustado", +"Nonbreaking space": "Espacio fijo", +"Page break": "Salto de p\u00e1gina", +"Paste as text": "Pegar como texto", +"Preview": "Previsualizar", +"Print": "Imprimir", +"Save": "Guardar", +"Could not find the specified string.": "No se encuentra la cadena de texto especificada", +"Replace": "Reemplazar", +"Next": "Siguiente", +"Whole words": "Palabras completas", +"Find and replace": "Buscar y reemplazar", +"Replace with": "Reemplazar con", +"Find": "Buscar", +"Replace all": "Reemplazar todo", +"Match case": "Coincidencia exacta", +"Prev": "Anterior", +"Spellcheck": "Corrector ortogr\u00e1fico", +"Finish": "Finalizar", +"Ignore all": "Ignorar todos", +"Ignore": "Ignorar", +"Add to Dictionary": "A\u00f1adir al Diccionario", +"Insert row before": "Insertar fila antes", +"Rows": "Filas", +"Height": "Alto", +"Paste row after": "Pegar la fila despu\u00e9s", +"Alignment": "Alineaci\u00f3n", +"Border color": "Color del borde", +"Column group": "Grupo de columnas", +"Row": "Fila", +"Insert column before": "Insertar columna antes", +"Split cell": "Dividir celdas", +"Cell padding": "Relleno de celda", +"Cell spacing": "Espacio entre celdas", +"Row type": "Tipo de fila", +"Insert table": "Insertar tabla", +"Body": "Cuerpo", +"Caption": "Subt\u00edtulo", +"Footer": "Pie de p\u00e1gina", +"Delete row": "Eliminar fila", +"Paste row before": "Pegar la fila antes", +"Scope": "\u00c1mbito", +"Delete table": "Eliminar tabla", +"H Align": "Alineamiento Horizontal", +"Top": "Arriba", +"Header cell": "Celda de la cebecera", +"Column": "Columna", +"Row group": "Grupo de filas", +"Cell": "Celda", +"Middle": "Centro", +"Cell type": "Tipo de celda", +"Copy row": "Copiar fila", +"Row properties": "Propiedades de la fila", +"Table properties": "Propiedades de la tabla", +"Bottom": "Abajo", +"V Align": "Alineamiento Vertical", +"Header": "Cabecera", +"Right": "Derecha", +"Insert column after": "Insertar columna despu\u00e9s", +"Cols": "Columnas", +"Insert row after": "Insertar fila despu\u00e9s ", +"Width": "Ancho", +"Cell properties": "Propiedades de la celda", +"Left": "Izquierda", +"Cut row": "Cortar fila", +"Delete column": "Eliminar columna", +"Center": "Centrado", +"Merge cells": "Combinar celdas", +"Insert template": "Insertar plantilla", +"Templates": "Plantillas", +"Background color": "Color de fondo", +"Custom...": "Personalizar...", +"Custom color": "Color personalizado", +"No color": "Sin color", +"Text color": "Color del texto", +"Table of Contents": "Tabla de contenidos", +"Show blocks": "Mostrar bloques", +"Show invisible characters": "Mostrar caracteres invisibles", +"Words: {0}": "Palabras: {0}", +"Insert": "Insertar", +"File": "Archivo", +"Edit": "Editar", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u00c1rea de texto enriquecido. Pulse ALT-F9 para el menu. Pulse ALT-F10 para la barra de herramientas. Pulse ALT-0 para ayuda", +"Tools": "Herramientas", +"View": "Ver", +"Table": "Tabla", +"Format": "Formato" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/fr.js b/cps/static/js/libs/tinymce/langs/fr.js new file mode 100644 index 00000000..64053084 --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/fr.js @@ -0,0 +1,230 @@ +tinymce.addI18n('fr_FR',{ +"Cut": "Couper", +"Heading 5": "En-t\u00eate 5", +"Header 2": "Titre 2", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Votre navigateur ne supporte pas la copie directe. Merci d'utiliser les touches Ctrl+X\/C\/V.", +"Heading 4": "En-t\u00eate 4", +"Div": "Div", +"Heading 2": "En-t\u00eate 2", +"Paste": "Coller", +"Close": "Fermer", +"Font Family": "Police", +"Pre": "Pre", +"Align right": "Aligner \u00e0 droite", +"New document": "Nouveau document", +"Blockquote": "Citation", +"Numbered list": "Num\u00e9rotation", +"Heading 1": "En-t\u00eate 1", +"Headings": "En-t\u00eates", +"Increase indent": "Augmenter le retrait", +"Formats": "Formats", +"Headers": "Titres", +"Select all": "Tout s\u00e9lectionner", +"Header 3": "Titre 3", +"Blocks": "Blocs", +"Undo": "Annuler", +"Strikethrough": "Barr\u00e9", +"Bullet list": "Puces", +"Header 1": "Titre 1", +"Superscript": "Exposant", +"Clear formatting": "Effacer la mise en forme", +"Font Sizes": "Taille de police", +"Subscript": "Indice", +"Header 6": "Titre 6", +"Redo": "R\u00e9tablir", +"Paragraph": "Paragraphe", +"Ok": "Ok", +"Bold": "Gras", +"Code": "Code", +"Italic": "Italique", +"Align center": "Centrer", +"Header 5": "Titre 5", +"Heading 6": "En-t\u00eate 6", +"Heading 3": "En-t\u00eate 3", +"Decrease indent": "Diminuer le retrait", +"Header 4": "Titre 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Le presse-papiers est maintenant en mode \"texte plein\". Les contenus seront coll\u00e9s sans retenir les formatages jusqu'\u00e0 ce que vous d\u00e9sactiviez cette option.", +"Underline": "Soulign\u00e9", +"Cancel": "Annuler", +"Justify": "Justifier", +"Inline": "En ligne", +"Copy": "Copier", +"Align left": "Aligner \u00e0 gauche", +"Visual aids": "Aides visuelle", +"Lower Greek": "Grec minuscule", +"Square": "Carr\u00e9", +"Default": "Par d\u00e9faut", +"Lower Alpha": "Alpha minuscule", +"Circle": "Cercle", +"Disc": "Disque", +"Upper Alpha": "Alpha majuscule", +"Upper Roman": "Romain majuscule", +"Lower Roman": "Romain minuscule", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "L'Id doit commencer par une lettre suivi par des lettres, nombres, tirets, points, deux-points ou underscores", +"Name": "Nom", +"Anchor": "Ancre", +"Id": "Id", +"You have unsaved changes are you sure you want to navigate away?": "Vous avez des modifications non enregistr\u00e9es, \u00eates-vous s\u00fbr de quitter la page?", +"Restore last draft": "Restaurer le dernier brouillon", +"Special character": "Caract\u00e8res sp\u00e9ciaux", +"Source code": "Code source", +"Language": "Langue", +"Insert\/Edit code sample": "Ins\u00e9rer \/ modifier une exemple de code", +"B": "B", +"R": "R", +"G": "V", +"Color": "Couleur", +"Right to left": "Droite \u00e0 gauche", +"Left to right": "Gauche \u00e0 droite", +"Emoticons": "Emotic\u00f4nes", +"Robots": "Robots", +"Document properties": "Propri\u00e9t\u00e9 du document", +"Title": "Titre", +"Keywords": "Mots-cl\u00e9s", +"Encoding": "Encodage", +"Description": "Description", +"Author": "Auteur", +"Fullscreen": "Plein \u00e9cran", +"Horizontal line": "Ligne horizontale", +"Horizontal space": "Espacement horizontal", +"Insert\/edit image": "Ins\u00e9rer\/modifier une image", +"General": "G\u00e9n\u00e9ral", +"Advanced": "Avanc\u00e9", +"Source": "Source", +"Border": "Bordure", +"Constrain proportions": "Conserver les proportions", +"Vertical space": "Espacement vertical", +"Image description": "Description de l'image", +"Style": "Style", +"Dimensions": "Dimensions", +"Insert image": "Ins\u00e9rer une image", +"Image": "Image", +"Zoom in": "Zoomer", +"Contrast": "Contraste", +"Back": "Retour", +"Gamma": "Gamma", +"Flip horizontally": "Retournement horizontal", +"Resize": "Redimensionner", +"Sharpen": "Affiner", +"Zoom out": "D\u00e9zoomer", +"Image options": "Options de l'image", +"Apply": "Appliquer", +"Brightness": "Luminosit\u00e9", +"Rotate clockwise": "Rotation horaire", +"Rotate counterclockwise": "Rotation anti-horaire", +"Edit image": "Modifier l'image", +"Color levels": "Niveaux de couleur", +"Crop": "Rogner", +"Orientation": "Orientation", +"Flip vertically": "Retournement vertical", +"Invert": "Inverser", +"Date\/time": "Date\/heure", +"Insert date\/time": "Ins\u00e9rer date\/heure", +"Remove link": "Enlever le lien", +"Url": "Url", +"Text to display": "Texte \u00e0 afficher", +"Anchors": "Ancres", +"Insert link": "Ins\u00e9rer un lien", +"Link": "Lien", +"New window": "Nouvelle fen\u00eatre", +"None": "n\/a", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre un lien externe. Voulez-vous ajouter le pr\u00e9fixe http:\/\/ n\u00e9cessaire?", +"Paste or type a link": "Coller ou taper un lien", +"Target": "Cible", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "L'URL que vous avez entr\u00e9e semble \u00eatre une adresse e-mail. Voulez-vous ajouter le pr\u00e9fixe mailto: n\u00e9cessaire?", +"Insert\/edit link": "Ins\u00e9rer\/modifier un lien", +"Insert\/edit video": "Ins\u00e9rer\/modifier une vid\u00e9o", +"Media": "M\u00e9dia", +"Alternative source": "Source alternative", +"Paste your embed code below:": "Collez votre code d'int\u00e9gration ci-dessous :", +"Insert video": "Ins\u00e9rer une vid\u00e9o", +"Poster": "Publier", +"Insert\/edit media": "Ins\u00e9rer\/modifier un m\u00e9dia", +"Embed": "Int\u00e9grer", +"Nonbreaking space": "Espace ins\u00e9cable", +"Page break": "Saut de page", +"Paste as text": "Coller comme texte", +"Preview": "Pr\u00e9visualiser", +"Print": "Imprimer", +"Save": "Enregistrer", +"Could not find the specified string.": "Impossible de trouver la cha\u00eene sp\u00e9cifi\u00e9e.", +"Replace": "Remplacer", +"Next": "Suiv", +"Whole words": "Mots entiers", +"Find and replace": "Trouver et remplacer", +"Replace with": "Remplacer par", +"Find": "Chercher", +"Replace all": "Tout remplacer", +"Match case": "Respecter la casse", +"Prev": "Pr\u00e9c ", +"Spellcheck": "V\u00e9rification orthographique", +"Finish": "Finie", +"Ignore all": "Tout ignorer", +"Ignore": "Ignorer", +"Add to Dictionary": "Ajouter au dictionnaire", +"Insert row before": "Ins\u00e9rer une ligne avant", +"Rows": "Lignes", +"Height": "Hauteur", +"Paste row after": "Coller la ligne apr\u00e8s", +"Alignment": "Alignement", +"Border color": "Couleur de la bordure", +"Column group": "Groupe de colonnes", +"Row": "Ligne", +"Insert column before": "Ins\u00e9rer une colonne avant", +"Split cell": "Diviser la cellule", +"Cell padding": "Espacement interne cellule", +"Cell spacing": "Espacement inter-cellulles", +"Row type": "Type de ligne", +"Insert table": "Ins\u00e9rer un tableau", +"Body": "Corps", +"Caption": "Titre", +"Footer": "Pied", +"Delete row": "Effacer la ligne", +"Paste row before": "Coller la ligne avant", +"Scope": "Etendue", +"Delete table": "Supprimer le tableau", +"H Align": "Alignement H", +"Top": "Haut", +"Header cell": "Cellule d'en-t\u00eate", +"Column": "Colonne", +"Row group": "Groupe de lignes", +"Cell": "Cellule", +"Middle": "Milieu", +"Cell type": "Type de cellule", +"Copy row": "Copier la ligne", +"Row properties": "Propri\u00e9t\u00e9s de la ligne", +"Table properties": "Propri\u00e9t\u00e9s du tableau", +"Bottom": "Bas", +"V Align": "Alignement V", +"Header": "En-t\u00eate", +"Right": "Droite", +"Insert column after": "Ins\u00e9rer une colonne apr\u00e8s", +"Cols": "Colonnes", +"Insert row after": "Ins\u00e9rer une ligne apr\u00e8s", +"Width": "Largeur", +"Cell properties": "Propri\u00e9t\u00e9s de la cellule", +"Left": "Gauche", +"Cut row": "Couper la ligne", +"Delete column": "Effacer la colonne", +"Center": "Centr\u00e9", +"Merge cells": "Fusionner les cellules", +"Insert template": "Ajouter un th\u00e8me", +"Templates": "Th\u00e8mes", +"Background color": "Couleur d'arri\u00e8re-plan", +"Custom...": "Personnalis\u00e9...", +"Custom color": "Couleur personnalis\u00e9e", +"No color": "Aucune couleur", +"Text color": "Couleur du texte", +"Table of Contents": "Table des mati\u00e8res", +"Show blocks": "Afficher les blocs", +"Show invisible characters": "Afficher les caract\u00e8res invisibles", +"Words: {0}": "Mots : {0}", +"Insert": "Ins\u00e9rer", +"File": "Fichier", +"Edit": "Editer", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Zone Texte Riche. Appuyer sur ALT-F9 pour le menu. Appuyer sur ALT-F10 pour la barre d'outils. Appuyer sur ALT-0 pour de l'aide.", +"Tools": "Outils", +"View": "Voir", +"Table": "Tableau", +"Format": "Format" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/nl.js b/cps/static/js/libs/tinymce/langs/nl.js new file mode 100644 index 00000000..f9c3269b --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/nl.js @@ -0,0 +1,230 @@ +tinymce.addI18n('nl',{ +"Cut": "Knippen", +"Heading 5": "Kop 5", +"Header 2": "Kop 2", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Uw browser ondersteunt geen toegang tot het clipboard. Gelieve ctrl+X\/C\/V sneltoetsen te gebruiken.", +"Heading 4": "Kop 4", +"Div": "Div", +"Heading 2": "Kop 2", +"Paste": "Plakken", +"Close": "Sluiten", +"Font Family": "Lettertype", +"Pre": "Pre", +"Align right": "Rechts uitlijnen", +"New document": "Nieuw document", +"Blockquote": "Quote", +"Numbered list": "Nummering", +"Heading 1": "Kop 1", +"Headings": "Koppen", +"Increase indent": "Inspringen vergroten", +"Formats": "Opmaak", +"Headers": "Kopteksten", +"Select all": "Alles selecteren", +"Header 3": "Kop 3", +"Blocks": "Blok", +"Undo": "Ongedaan maken", +"Strikethrough": "Doorhalen", +"Bullet list": "Opsommingsteken", +"Header 1": "Kop 1", +"Superscript": "Superscript", +"Clear formatting": "Opmaak verwijderen", +"Font Sizes": "Tekengrootte", +"Subscript": "Subscript", +"Header 6": "Kop 6", +"Redo": "Opnieuw", +"Paragraph": "Paragraaf", +"Ok": "Ok\u00e9", +"Bold": "Vet", +"Code": "Code", +"Italic": "Cursief", +"Align center": "Centreren", +"Header 5": "Kop 5", +"Heading 6": "Kop 6", +"Heading 3": "Kop 3", +"Decrease indent": "Inspringen verkleinen", +"Header 4": "Kop 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Plakken gebeurt nu als platte tekst. Tekst wordt nu ingevoegd zonder opmaak tot deze optie uitgeschakeld wordt.", +"Underline": "Onderstreept", +"Cancel": "Annuleren", +"Justify": "Uitlijnen", +"Inline": "Inlijn", +"Copy": "Kopi\u00ebren", +"Align left": "Links uitlijnen", +"Visual aids": "Hulpmiddelen", +"Lower Greek": "Griekse letters", +"Square": "Vierkant", +"Default": "Standaard", +"Lower Alpha": "Kleine letters", +"Circle": "Cirkel", +"Disc": "Bolletje", +"Upper Alpha": "Hoofdletters", +"Upper Roman": "Romeinse cijfers groot", +"Lower Roman": "Romeinse cijfers klein", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "ID moet beginnen met een letter, gevolgd door letters, nummers, streepjes, punten, dubbele punten of underscores.", +"Name": "Naam", +"Anchor": "Anker", +"Id": "ID", +"You have unsaved changes are you sure you want to navigate away?": "U hebt niet alles opgeslagen bent u zeker dat u de pagina wenst te verlaten?", +"Restore last draft": "Herstel het laatste concept", +"Special character": "Speciale karakters", +"Source code": "Broncode", +"Language": "Programmeertaal", +"Insert\/Edit code sample": "Broncode invoegen\/bewerken", +"B": "Blauw", +"R": "Rood", +"G": "Groen", +"Color": "Kleur", +"Right to left": "Rechts naar links", +"Left to right": "Links naar rechts", +"Emoticons": "Emoticons", +"Robots": "Robots", +"Document properties": "Document eigenschappen", +"Title": "Titel", +"Keywords": "Sleutelwoorden", +"Encoding": "Codering", +"Description": "Omschrijving", +"Author": "Auteur", +"Fullscreen": "Volledig scherm", +"Horizontal line": "Horizontale lijn", +"Horizontal space": "Horizontale ruimte", +"Insert\/edit image": "Afbeelding invoegen\/bewerken", +"General": "Algemeen", +"Advanced": "Geavanceerd", +"Source": "Bron", +"Border": "Rand", +"Constrain proportions": "Verhoudingen behouden", +"Vertical space": "Verticale ruimte", +"Image description": "Afbeelding omschrijving", +"Style": "Stijl", +"Dimensions": "Afmetingen", +"Insert image": "Afbeelding invoegen", +"Image": "Afbeelding", +"Zoom in": "Inzoomen", +"Contrast": "Contrast", +"Back": "Terug", +"Gamma": "Gamma", +"Flip horizontally": "Horizontaal spiegelen", +"Resize": "Formaat aanpassen", +"Sharpen": "Scherpte", +"Zoom out": "Uitzoomen", +"Image options": "Afbeelding opties", +"Apply": "Toepassen", +"Brightness": "Helderheid", +"Rotate clockwise": "Rechtsom draaien", +"Rotate counterclockwise": "Linksom draaien", +"Edit image": "Bewerk afbeelding", +"Color levels": "Kleurniveau's", +"Crop": "Uitsnijden", +"Orientation": "Orientatie", +"Flip vertically": "Verticaal spiegelen", +"Invert": "Omkeren", +"Date\/time": "Datum\/tijd", +"Insert date\/time": "Voeg datum\/tijd in", +"Remove link": "Link verwijderen", +"Url": "Url", +"Text to display": "Linktekst", +"Anchors": "Anker", +"Insert link": "Hyperlink invoegen", +"Link": "Link", +"New window": "Nieuw venster", +"None": "Geen", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "De ingegeven URL verwijst naar een extern adres. Wil je er \"http:\/\/\" aan toevoegen?", +"Paste or type a link": "Plak of typ een link", +"Target": "Doel", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "De ingegeven URL lijkt op een e-mailadres. Wil je er \"mailto:\" aan toevoegen?", +"Insert\/edit link": "Hyperlink invoegen\/bewerken", +"Insert\/edit video": "Video invoegen\/bewerken", +"Media": "Media", +"Alternative source": "Alternatieve bron", +"Paste your embed code below:": "Plak u in te sluiten code hieronder:", +"Insert video": "Video invoegen", +"Poster": "Poster", +"Insert\/edit media": "Media invoegen\/bewerken", +"Embed": "Insluiten", +"Nonbreaking space": "Vaste spatie invoegen", +"Page break": "Pagina einde", +"Paste as text": "Plakken als tekst", +"Preview": "Voorbeeld", +"Print": "Print", +"Save": "Opslaan", +"Could not find the specified string.": "Geen resultaten gevonden", +"Replace": "Vervangen", +"Next": "Volgende", +"Whole words": "Alleen hele woorden", +"Find and replace": "Zoek en vervang", +"Replace with": "Vervangen door", +"Find": "Zoeken", +"Replace all": "Alles vervangen", +"Match case": "Identieke hoofd\/kleine letters", +"Prev": "Vorige", +"Spellcheck": "Spellingscontrole", +"Finish": "Einde", +"Ignore all": "Alles negeren", +"Ignore": "Negeren", +"Add to Dictionary": "Toevoegen aan woordenlijst", +"Insert row before": "Voeg rij boven toe", +"Rows": "Rijen", +"Height": "Hoogte", +"Paste row after": "Plak rij onder", +"Alignment": "Uitlijning", +"Border color": "Randkleur", +"Column group": "Kolomgroep", +"Row": "Rij", +"Insert column before": "Voeg kolom in voor", +"Split cell": "Cel splitsen", +"Cell padding": "Ruimte binnen cel", +"Cell spacing": "Celruimte", +"Row type": "Rijtype", +"Insert table": "Tabel invoegen", +"Body": "Body", +"Caption": "Onderschrift", +"Footer": "Voettekst", +"Delete row": "Verwijder rij", +"Paste row before": "Plak rij boven", +"Scope": "Bereik", +"Delete table": "Verwijder tabel", +"H Align": "Links uitlijnen", +"Top": "Bovenaan", +"Header cell": "Kopcel", +"Column": "Kolom", +"Row group": "Rijgroep", +"Cell": "Cel", +"Middle": "Centreren", +"Cell type": "Celtype", +"Copy row": "Kopieer rij", +"Row properties": "Rij eigenschappen", +"Table properties": "Tabel eigenschappen", +"Bottom": "Onderaan", +"V Align": "Boven uitlijnen", +"Header": "Koptekst", +"Right": "Rechts", +"Insert column after": "Voeg kolom in na", +"Cols": "Kolommen", +"Insert row after": "Voeg rij onder toe", +"Width": "Breedte", +"Cell properties": "Cel eigenschappen", +"Left": "Links", +"Cut row": "Knip rij", +"Delete column": "Verwijder kolom", +"Center": "Midden", +"Merge cells": "Cellen samenvoegen", +"Insert template": "Sjabloon invoegen", +"Templates": "Sjablonen", +"Background color": "Achtergrondkleur", +"Custom...": "Eigen...", +"Custom color": "Eigen kleur", +"No color": "Geen kleur", +"Text color": "Tekstkleur", +"Table of Contents": "Inhoudsopgave", +"Show blocks": "Blokken tonen", +"Show invisible characters": "Onzichtbare karakters tonen", +"Words: {0}": "Woorden: {0}", +"Insert": "Invoegen", +"File": "Bestand", +"Edit": "Bewerken", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Rich Text Area. Druk ALT-F9 voor het menu. Druk ALT-F10 voor de toolbar. Druk ALT-0 voor help.", +"Tools": "Gereedschap", +"View": "Beeld", +"Table": "Tabel", +"Format": "Opmaak" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/pl.js b/cps/static/js/libs/tinymce/langs/pl.js new file mode 100644 index 00000000..f76d750d --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/pl.js @@ -0,0 +1,230 @@ +tinymce.addI18n('pl',{ +"Cut": "Wytnij", +"Heading 5": "Nag\u0142\u00f3wek 5", +"Header 2": "Nag\u0142\u00f3wek 2", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "Twoja przegl\u0105darka nie obs\u0142uguje bezpo\u015bredniego dost\u0119pu do schowka. U\u017cyj zamiast tego kombinacji klawiszy Ctrl+X\/C\/V.", +"Heading 4": "Nag\u0142\u00f3wek 4", +"Div": "Div", +"Heading 2": "Nag\u0142\u00f3wek 2", +"Paste": "Wklej", +"Close": "Zamknij", +"Font Family": "Kr\u00f3j fontu", +"Pre": "Sformatowany tekst", +"Align right": "Wyr\u00f3wnaj do prawej", +"New document": "Nowy dokument", +"Blockquote": "Blok cytatu", +"Numbered list": "Lista numerowana", +"Heading 1": "Nag\u0142\u00f3wek 1", +"Headings": "Nag\u0142\u00f3wki", +"Increase indent": "Zwi\u0119ksz wci\u0119cie", +"Formats": "Formaty", +"Headers": "Nag\u0142\u00f3wki", +"Select all": "Zaznacz wszystko", +"Header 3": "Nag\u0142\u00f3wek 3", +"Blocks": "Bloki", +"Undo": "Cofnij", +"Strikethrough": "Przekre\u015blenie", +"Bullet list": "Lista wypunktowana", +"Header 1": "Nag\u0142\u00f3wek 1", +"Superscript": "Indeks g\u00f3rny", +"Clear formatting": "Wyczy\u015b\u0107 formatowanie", +"Font Sizes": "Rozmiar fontu", +"Subscript": "Indeks dolny", +"Header 6": "Nag\u0142\u00f3wek 6", +"Redo": "Pon\u00f3w", +"Paragraph": "Akapit", +"Ok": "Ok", +"Bold": "Pogrubienie", +"Code": "Kod \u017ar\u00f3d\u0142owy", +"Italic": "Kursywa", +"Align center": "Wyr\u00f3wnaj do \u015brodka", +"Header 5": "Nag\u0142\u00f3wek 5", +"Heading 6": "Nag\u0142\u00f3wek 6", +"Heading 3": "Nag\u0142\u00f3wek 3", +"Decrease indent": "Zmniejsz wci\u0119cie", +"Header 4": "Nag\u0142\u00f3wek 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "Wklejanie jest w trybie tekstowym. Zawarto\u015b\u0107 zostanie wklejona jako zwyk\u0142y tekst dop\u00f3ki nie wy\u0142\u0105czysz tej opcji.", +"Underline": "Podkre\u015blenie", +"Cancel": "Anuluj", +"Justify": "Do lewej i prawej", +"Inline": "W tek\u015bcie", +"Copy": "Kopiuj", +"Align left": "Wyr\u00f3wnaj do lewej", +"Visual aids": "Pomoce wizualne", +"Lower Greek": "Ma\u0142e greckie", +"Square": "Kwadrat", +"Default": "Domy\u015blne", +"Lower Alpha": "Ma\u0142e litery", +"Circle": "K\u00f3\u0142ko", +"Disc": "Dysk", +"Upper Alpha": "Wielkie litery", +"Upper Roman": "Wielkie rzymskie", +"Lower Roman": "Ma\u0142e rzymskie", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Identyfikator powinien zaczyna\u0107 si\u0119 liter\u0105, dozwolone s\u0105 tylko litery, numery, uko\u015bniki, kropki, dwukropki i podkre\u015blniki - tzw. pod\u0142ogi", +"Name": "Nazwa", +"Anchor": "Kotwica", +"Id": "Identyfikator", +"You have unsaved changes are you sure you want to navigate away?": "Masz niezapisane zmiany. Czy na pewno chcesz opu\u015bci\u0107 stron\u0119?", +"Restore last draft": "Przywr\u00f3\u0107 ostatni szkic", +"Special character": "Znak specjalny", +"Source code": "Kod \u017ar\u00f3d\u0142owy", +"Language": "J\u0119zyk", +"Insert\/Edit code sample": "Dodaj\/Edytuj przyk\u0142adowy kod", +"B": "B", +"R": "R", +"G": "G", +"Color": "Kolor", +"Right to left": "Od prawej do lewej", +"Left to right": "Od lewej do prawej", +"Emoticons": "Ikony emocji", +"Robots": "Roboty", +"Document properties": "W\u0142a\u015bciwo\u015bci dokumentu", +"Title": "Tytu\u0142", +"Keywords": "S\u0142owa kluczowe", +"Encoding": "Kodowanie", +"Description": "Opis", +"Author": "Autor", +"Fullscreen": "Pe\u0142ny ekran", +"Horizontal line": "Pozioma linia", +"Horizontal space": "Odst\u0119p poziomy", +"Insert\/edit image": "Wstaw\/edytuj obrazek", +"General": "Og\u00f3lne", +"Advanced": "Zaawansowane", +"Source": "\u0179r\u00f3d\u0142o", +"Border": "Ramka", +"Constrain proportions": "Zachowaj proporcje", +"Vertical space": "Odst\u0119p pionowy", +"Image description": "Opis obrazka", +"Style": "Styl", +"Dimensions": "Wymiary", +"Insert image": "Wstaw obrazek", +"Image": "Obraz", +"Zoom in": "Powi\u0119ksz", +"Contrast": "Kontrast", +"Back": "Cofnij", +"Gamma": "Gamma", +"Flip horizontally": "Przerzu\u0107 w poziomie", +"Resize": "Zmiana rozmiaru", +"Sharpen": "Wyostrz", +"Zoom out": "Pomniejsz", +"Image options": "Opcje obrazu", +"Apply": "Zaakceptuj", +"Brightness": "Jasno\u015b\u0107", +"Rotate clockwise": "Obr\u00f3\u0107 w prawo", +"Rotate counterclockwise": "Obr\u00f3\u0107 w lewo", +"Edit image": "Edytuj obrazek", +"Color levels": "Poziom koloru", +"Crop": "Przytnij", +"Orientation": "Orientacja", +"Flip vertically": "Przerzu\u0107 w pionie", +"Invert": "Odwr\u00f3\u0107", +"Date\/time": "Data\/Czas", +"Insert date\/time": "Wstaw dat\u0119\/czas", +"Remove link": "Usu\u0144 \u0142\u0105cze", +"Url": "URL", +"Text to display": "Tekst do wy\u015bwietlenia", +"Anchors": "Kotwice", +"Insert link": "Wstaw \u0142\u0105cze", +"Link": "Adres \u0142\u0105cza", +"New window": "Nowe okno", +"None": "\u017baden", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "URL, kt\u00f3ry wprowadzi\u0142e\u015b wygl\u0105da na link zewn\u0119trzny. Czy chcesz doda\u0107 http:\/\/ jako prefiks?", +"Paste or type a link": "Wklej lub wpisz adres \u0142\u0105cza", +"Target": "Cel", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "URL, kt\u00f3ry wprowadzi\u0142e\u015b wygl\u0105da na adres e-mail. Czy chcesz doda\u0107 mailto: jako prefiks?", +"Insert\/edit link": "Wstaw\/edytuj \u0142\u0105cze", +"Insert\/edit video": "Wstaw\/edytuj wideo", +"Media": "Media", +"Alternative source": "Alternatywne \u017ar\u00f3d\u0142o", +"Paste your embed code below:": "Wklej tutaj kod do osadzenia:", +"Insert video": "Wstaw wideo", +"Poster": "Plakat", +"Insert\/edit media": "Wstaw\/Edytuj media", +"Embed": "Osad\u017a", +"Nonbreaking space": "Nie\u0142amliwa spacja", +"Page break": "Podzia\u0142 strony", +"Paste as text": "Wklej jako zwyk\u0142y tekst", +"Preview": "Podgl\u0105d", +"Print": "Drukuj", +"Save": "Zapisz", +"Could not find the specified string.": "Nie znaleziono szukanego tekstu.", +"Replace": "Zamie\u0144", +"Next": "Nast.", +"Whole words": "Ca\u0142e s\u0142owa", +"Find and replace": "Znajd\u017a i zamie\u0144", +"Replace with": "Zamie\u0144 na", +"Find": "Znajd\u017a", +"Replace all": "Zamie\u0144 wszystko", +"Match case": "Dopasuj wielko\u015b\u0107 liter", +"Prev": "Poprz.", +"Spellcheck": "Sprawdzanie pisowni", +"Finish": "Zako\u0144cz", +"Ignore all": "Ignoruj wszystko", +"Ignore": "Ignoruj", +"Add to Dictionary": "Dodaj do s\u0142ownika", +"Insert row before": "Wstaw wiersz przed", +"Rows": "Wiersz.", +"Height": "Wysoko\u015b\u0107", +"Paste row after": "Wklej wiersz po", +"Alignment": "Wyr\u00f3wnanie", +"Border color": "Kolor ramki", +"Column group": "Grupa kolumn", +"Row": "Wiersz", +"Insert column before": "Wstaw kolumn\u0119 przed", +"Split cell": "Podziel kom\u00f3rk\u0119", +"Cell padding": "Dope\u0142nienie kom\u00f3rki", +"Cell spacing": "Odst\u0119py kom\u00f3rek", +"Row type": "Typ wiersza", +"Insert table": "Wstaw tabel\u0119", +"Body": "Tre\u015b\u0107", +"Caption": "Tytu\u0142", +"Footer": "Stopka", +"Delete row": "Usu\u0144 wiersz", +"Paste row before": "Wklej wiersz przed", +"Scope": "Kontekst", +"Delete table": "Usu\u0144 tabel\u0119", +"H Align": "Wyr\u00f3wnanie w pionie", +"Top": "G\u00f3ra", +"Header cell": "Kom\u00f3rka nag\u0142\u00f3wka", +"Column": "Kolumna", +"Row group": "Grupa wierszy", +"Cell": "Kom\u00f3rka", +"Middle": "\u015arodek", +"Cell type": "Typ kom\u00f3rki", +"Copy row": "Kopiuj wiersz", +"Row properties": "W\u0142a\u015bciwo\u015bci wiersza", +"Table properties": "W\u0142a\u015bciwo\u015bci tabeli", +"Bottom": "D\u00f3\u0142", +"V Align": "Wyr\u00f3wnanie w poziomie", +"Header": "Nag\u0142\u00f3wek", +"Right": "Prawo", +"Insert column after": "Wstaw kolumn\u0119 po", +"Cols": "Kol.", +"Insert row after": "Wstaw wiersz po", +"Width": "Szeroko\u015b\u0107", +"Cell properties": "W\u0142a\u015bciwo\u015bci kom\u00f3rki", +"Left": "Lewo", +"Cut row": "Wytnij wiersz", +"Delete column": "Usu\u0144 kolumn\u0119", +"Center": "\u015arodek", +"Merge cells": "\u0141\u0105cz kom\u00f3rki", +"Insert template": "Wstaw szablon", +"Templates": "Szablony", +"Background color": "Kolor t\u0142a", +"Custom...": "Niestandardowy...", +"Custom color": "Kolor niestandardowy", +"No color": "Bez koloru", +"Text color": "Kolor tekstu", +"Table of Contents": "Spis tre\u015bci", +"Show blocks": "Poka\u017c bloki", +"Show invisible characters": "Poka\u017c niewidoczne znaki", +"Words: {0}": "S\u0142\u00f3w: {0}", +"Insert": "Wstaw", +"File": "Plik", +"Edit": "Edycja", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "Obszar Edycji. ALT-F9 - menu. ALT-F10 - pasek narz\u0119dzi. ALT-0 - pomoc", +"Tools": "Narz\u0119dzia", +"View": "Widok", +"Table": "Tabela", +"Format": "Format" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/ru.js b/cps/static/js/libs/tinymce/langs/ru.js new file mode 100644 index 00000000..1fccfdbf --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/ru.js @@ -0,0 +1,230 @@ +tinymce.addI18n('ru',{ +"Cut": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c", +"Heading 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5", +"Header 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u0412\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0443\u0444\u0435\u0440\u0443 \u043e\u0431\u043c\u0435\u043d\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448: Ctrl+X\/C\/V.", +"Heading 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4", +"Div": "\u0411\u043b\u043e\u043a", +"Heading 2": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2", +"Paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c", +"Close": "\u0417\u0430\u043a\u0440\u044b\u0442\u044c", +"Font Family": "\u0428\u0440\u0438\u0444\u0442", +"Pre": "\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435", +"Align right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", +"New document": "\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", +"Blockquote": "\u0426\u0438\u0442\u0430\u0442\u0430", +"Numbered list": "\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", +"Heading 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1", +"Headings": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438", +"Increase indent": "\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f", +"Formats": "\u0424\u043e\u0440\u043c\u0430\u0442", +"Headers": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438", +"Select all": "\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435", +"Header 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3", +"Blocks": "\u0411\u043b\u043e\u043a\u0438", +"Undo": "\u0412\u0435\u0440\u043d\u0443\u0442\u044c", +"Strikethrough": "\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439", +"Bullet list": "\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a", +"Header 1": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1", +"Superscript": "\u0412\u0435\u0440\u0445\u043d\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441", +"Clear formatting": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442", +"Font Sizes": "\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430", +"Subscript": "\u041d\u0438\u0436\u043d\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441", +"Header 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6", +"Redo": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", +"Paragraph": "\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444", +"Ok": "\u041e\u043a", +"Bold": "\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439", +"Code": "\u041a\u043e\u0434", +"Italic": "\u041a\u0443\u0440\u0441\u0438\u0432", +"Align center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", +"Header 5": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5", +"Heading 6": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6", +"Heading 3": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3", +"Decrease indent": "\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f", +"Header 4": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u0443\u044e \u043e\u043f\u0446\u0438\u044e.", +"Underline": "\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439", +"Cancel": "\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c", +"Justify": "\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435", +"Inline": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435", +"Copy": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c", +"Align left": "\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", +"Visual aids": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0443\u0440\u044b", +"Lower Greek": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b", +"Square": "\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b", +"Default": "\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439", +"Lower Alpha": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b", +"Circle": "\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438", +"Disc": "\u041a\u0440\u0443\u0433\u0438", +"Upper Alpha": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b", +"Upper Roman": "\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b", +"Lower Roman": "\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "Id \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0431\u0443\u043a\u0432\u044b, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0431\u0443\u043a\u0432\u044b, \u0446\u0438\u0444\u0440\u044b, \u0442\u0438\u0440\u0435, \u0442\u043e\u0447\u043a\u0438, \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0438\u043b\u0438 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.", +"Name": "\u0418\u043c\u044f", +"Anchor": "\u042f\u043a\u043e\u0440\u044c", +"Id": "Id", +"You have unsaved changes are you sure you want to navigate away?": "\u0423 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0439\u0442\u0438?", +"Restore last draft": "\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430", +"Special character": "\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b", +"Source code": "\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434", +"Language": "\u042f\u0437\u044b\u043a", +"Insert\/Edit code sample": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c\/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430", +"B": "B", +"R": "R", +"G": "G", +"Color": "\u0426\u0432\u0435\u0442", +"Right to left": "\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e", +"Left to right": "\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e", +"Emoticons": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b", +"Robots": "\u0420\u043e\u0431\u043e\u0442\u044b", +"Document properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", +"Title": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", +"Keywords": "\u041a\u043b\u044e\u0447\u0438\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430", +"Encoding": "\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430", +"Description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", +"Author": "\u0410\u0432\u0442\u043e\u0440", +"Fullscreen": "\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c", +"Horizontal line": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f", +"Horizontal space": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b", +"Insert\/edit image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", +"General": "\u041e\u0431\u0449\u0435\u0435", +"Advanced": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435", +"Source": "\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a", +"Border": "\u0420\u0430\u043c\u043a\u0430", +"Constrain proportions": "\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438", +"Vertical space": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b", +"Image description": "\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", +"Style": "\u0421\u0442\u0438\u043b\u044c", +"Dimensions": "\u0420\u0430\u0437\u043c\u0435\u0440", +"Insert image": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", +"Image": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", +"Zoom in": "\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c", +"Contrast": "\u041a\u043e\u043d\u0442\u0440\u0430\u0441\u0442", +"Back": "\u041d\u0430\u0437\u0430\u0434", +"Gamma": "\u0413\u0430\u043c\u043c\u0430", +"Flip horizontally": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0438", +"Resize": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440", +"Sharpen": "\u0427\u0435\u0442\u043a\u043e\u0441\u0442\u044c", +"Zoom out": "\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c", +"Image options": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f", +"Apply": "\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c", +"Brightness": "\u042f\u0440\u043a\u043e\u0441\u0442\u044c", +"Rotate clockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435", +"Rotate counterclockwise": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438", +"Edit image": "\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", +"Color levels": "\u0426\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438", +"Crop": "\u041e\u0431\u0440\u0435\u0437\u0430\u0442\u044c", +"Orientation": "\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f", +"Flip vertically": "\u041e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438", +"Invert": "\u0418\u043d\u0432\u0435\u0440\u0441\u0438\u044f", +"Date\/time": "\u0414\u0430\u0442\u0430\/\u0432\u0440\u0435\u043c\u044f", +"Insert date\/time": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443\/\u0432\u0440\u0435\u043c\u044f", +"Remove link": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", +"Url": "\u0410\u0434\u0440\u0435\u0441 \u0441\u0441\u044b\u043b\u043a\u0438", +"Text to display": "\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442", +"Anchors": "\u042f\u043a\u043e\u0440\u044f", +"Insert link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", +"Link": "\u0421\u0441\u044b\u043b\u043a\u0430", +"New window": "\u0412 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435", +"None": "\u041d\u0435\u0442", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abhttp:\/\/\u00bb?", +"Paste or type a link": "\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443", +"Target": "\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u0412\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 URL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b. \u0412\u044b \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abmailto:\u00bb?", +"Insert\/edit link": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443", +"Insert\/edit video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e", +"Media": "\u0412\u0438\u0434\u0435\u043e", +"Alternative source": "\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a", +"Paste your embed code below:": "\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0432\u0430\u0448 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435:", +"Insert video": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e", +"Poster": "\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435", +"Insert\/edit media": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c\/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0435\u043e", +"Embed": "\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438", +"Nonbreaking space": "\u041d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b", +"Page break": "\u0420\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b", +"Paste as text": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442", +"Preview": "\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440", +"Print": "\u041f\u0435\u0447\u0430\u0442\u044c", +"Save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c", +"Could not find the specified string.": "\u0417\u0430\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430", +"Replace": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c", +"Next": "\u0412\u043d\u0438\u0437", +"Whole words": "\u0421\u043b\u043e\u0432\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c", +"Find and replace": "\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430", +"Replace with": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430", +"Find": "\u041d\u0430\u0439\u0442\u0438", +"Replace all": "\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435", +"Match case": "\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440", +"Prev": "\u0412\u0432\u0435\u0440\u0445", +"Spellcheck": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435", +"Finish": "\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c", +"Ignore all": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435", +"Ignore": "\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c", +"Add to Dictionary": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c", +"Insert row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443", +"Rows": "\u0421\u0442\u0440\u043e\u043a\u0438", +"Height": "\u0412\u044b\u0441\u043e\u0442\u0430", +"Paste row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443", +"Alignment": "\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", +"Border color": "\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438", +"Column group": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a", +"Row": "\u0421\u0442\u0440\u043e\u043a\u0430", +"Insert column before": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430", +"Split cell": "\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443", +"Cell padding": "\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f", +"Cell spacing": "\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0442\u0441\u0442\u0443\u043f", +"Row type": "\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438", +"Insert table": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443", +"Body": "\u0422\u0435\u043b\u043e", +"Caption": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", +"Footer": "\u041d\u0438\u0437", +"Delete row": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443", +"Paste row before": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443", +"Scope": "Scope", +"Delete table": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443", +"H Align": "\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", +"Top": "\u041f\u043e \u0432\u0435\u0440\u0445\u0443", +"Header cell": "\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a", +"Column": "\u0421\u0442\u043e\u043b\u0431\u0435\u0446", +"Row group": "\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a", +"Cell": "\u042f\u0447\u0435\u0439\u043a\u0430", +"Middle": "\u041f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435", +"Cell type": "\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438", +"Copy row": "\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443", +"Row properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438", +"Table properties": "\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b", +"Bottom": "\u041f\u043e \u043d\u0438\u0437\u0443", +"V Align": "\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435", +"Header": "\u0428\u0430\u043f\u043a\u0430", +"Right": "\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", +"Insert column after": "\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430", +"Cols": "\u0421\u0442\u043e\u043b\u0431\u0446\u044b", +"Insert row after": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443", +"Width": "\u0428\u0438\u0440\u0438\u043d\u0430", +"Cell properties": "\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438", +"Left": "\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e", +"Cut row": "\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443", +"Delete column": "\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446", +"Center": "\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443", +"Merge cells": "\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438", +"Insert template": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d", +"Templates": "\u0428\u0430\u0431\u043b\u043e\u043d\u044b", +"Background color": "\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430", +"Custom...": "\u0412\u044b\u0431\u0440\u0430\u0442\u044c\u2026", +"Custom color": "\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0446\u0432\u0435\u0442", +"No color": "\u0411\u0435\u0437 \u0446\u0432\u0435\u0442\u0430", +"Text color": "\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430", +"Table of Contents": "\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435", +"Show blocks": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438", +"Show invisible characters": "\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b", +"Words: {0}": "\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432: {0}", +"Insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c", +"File": "\u0424\u0430\u0439\u043b", +"Edit": "\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F9 \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e, ALT-F10 \u043f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, ALT-0 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u043e\u043c\u043e\u0449\u0438.", +"Tools": "\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b", +"View": "\u0412\u0438\u0434", +"Table": "\u0422\u0430\u0431\u043b\u0438\u0446\u0430", +"Format": "\u0424\u043e\u0440\u043c\u0430\u0442" +}); \ No newline at end of file diff --git a/cps/static/js/libs/tinymce/langs/zh_Hans_CN.js b/cps/static/js/libs/tinymce/langs/zh_Hans_CN.js new file mode 100644 index 00000000..a0af6b8b --- /dev/null +++ b/cps/static/js/libs/tinymce/langs/zh_Hans_CN.js @@ -0,0 +1,230 @@ +tinymce.addI18n('zh_Hans_CN',{ +"Cut": "\u526a\u5207", +"Heading 5": "\u6807\u98985", +"Header 2": "\u6807\u98982", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002", +"Heading 4": "\u6807\u98984", +"Div": "Div\u533a\u5757", +"Heading 2": "\u6807\u98982", +"Paste": "\u7c98\u8d34", +"Close": "\u5173\u95ed", +"Font Family": "\u5b57\u4f53", +"Pre": "\u9884\u683c\u5f0f\u6587\u672c", +"Align right": "\u53f3\u5bf9\u9f50", +"New document": "\u65b0\u6587\u6863", +"Blockquote": "\u5f15\u7528", +"Numbered list": "\u7f16\u53f7\u5217\u8868", +"Heading 1": "\u6807\u98981", +"Headings": "\u6807\u9898", +"Increase indent": "\u589e\u52a0\u7f29\u8fdb", +"Formats": "\u683c\u5f0f", +"Headers": "\u6807\u9898", +"Select all": "\u5168\u9009", +"Header 3": "\u6807\u98983", +"Blocks": "\u533a\u5757", +"Undo": "\u64a4\u6d88", +"Strikethrough": "\u5220\u9664\u7ebf", +"Bullet list": "\u9879\u76ee\u7b26\u53f7", +"Header 1": "\u6807\u98981", +"Superscript": "\u4e0a\u6807", +"Clear formatting": "\u6e05\u9664\u683c\u5f0f", +"Font Sizes": "\u5b57\u53f7", +"Subscript": "\u4e0b\u6807", +"Header 6": "\u6807\u98986", +"Redo": "\u91cd\u590d", +"Paragraph": "\u6bb5\u843d", +"Ok": "\u786e\u5b9a", +"Bold": "\u7c97\u4f53", +"Code": "\u4ee3\u7801", +"Italic": "\u659c\u4f53", +"Align center": "\u5c45\u4e2d", +"Header 5": "\u6807\u98985", +"Heading 6": "\u6807\u98986", +"Heading 3": "\u6807\u98983", +"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb", +"Header 4": "\u6807\u98984", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002", +"Underline": "\u4e0b\u5212\u7ebf", +"Cancel": "\u53d6\u6d88", +"Justify": "\u4e24\u7aef\u5bf9\u9f50", +"Inline": "\u6587\u672c", +"Copy": "\u590d\u5236", +"Align left": "\u5de6\u5bf9\u9f50", +"Visual aids": "\u7f51\u683c\u7ebf", +"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd", +"Square": "\u65b9\u5757", +"Default": "\u9ed8\u8ba4", +"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd", +"Circle": "\u7a7a\u5fc3\u5706", +"Disc": "\u5b9e\u5fc3\u5706", +"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd", +"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd", +"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002", +"Name": "\u540d\u79f0", +"Anchor": "\u951a\u70b9", +"Id": "\u6807\u8bc6\u7b26", +"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f", +"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f", +"Special character": "\u7279\u6b8a\u7b26\u53f7", +"Source code": "\u6e90\u4ee3\u7801", +"Language": "\u8bed\u8a00", +"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b", +"B": "B", +"R": "R", +"G": "G", +"Color": "\u989c\u8272", +"Right to left": "\u4ece\u53f3\u5230\u5de6", +"Left to right": "\u4ece\u5de6\u5230\u53f3", +"Emoticons": "\u8868\u60c5", +"Robots": "\u673a\u5668\u4eba", +"Document properties": "\u6587\u6863\u5c5e\u6027", +"Title": "\u6807\u9898", +"Keywords": "\u5173\u952e\u8bcd", +"Encoding": "\u7f16\u7801", +"Description": "\u63cf\u8ff0", +"Author": "\u4f5c\u8005", +"Fullscreen": "\u5168\u5c4f", +"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf", +"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd", +"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247", +"General": "\u666e\u901a", +"Advanced": "\u9ad8\u7ea7", +"Source": "\u5730\u5740", +"Border": "\u8fb9\u6846", +"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4", +"Vertical space": "\u5782\u76f4\u8fb9\u8ddd", +"Image description": "\u56fe\u7247\u63cf\u8ff0", +"Style": "\u6837\u5f0f", +"Dimensions": "\u5927\u5c0f", +"Insert image": "\u63d2\u5165\u56fe\u7247", +"Image": "\u56fe\u7247", +"Zoom in": "\u653e\u5927", +"Contrast": "\u5bf9\u6bd4\u5ea6", +"Back": "\u540e\u9000", +"Gamma": "\u4f3d\u9a6c\u503c", +"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c", +"Resize": "\u8c03\u6574\u5927\u5c0f", +"Sharpen": "\u9510\u5316", +"Zoom out": "\u7f29\u5c0f", +"Image options": "\u56fe\u7247\u9009\u9879", +"Apply": "\u5e94\u7528", +"Brightness": "\u4eae\u5ea6", +"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c", +"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c", +"Edit image": "\u7f16\u8f91\u56fe\u7247", +"Color levels": "\u989c\u8272\u5c42\u6b21", +"Crop": "\u88c1\u526a", +"Orientation": "\u65b9\u5411", +"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c", +"Invert": "\u53cd\u8f6c", +"Date\/time": "\u65e5\u671f\/\u65f6\u95f4", +"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4", +"Remove link": "\u5220\u9664\u94fe\u63a5", +"Url": "\u5730\u5740", +"Text to display": "\u663e\u793a\u6587\u5b57", +"Anchors": "\u951a\u70b9", +"Insert link": "\u63d2\u5165\u94fe\u63a5", +"Link": "\u94fe\u63a5", +"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00", +"None": "\u65e0", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f", +"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5", +"Target": "\u6253\u5f00\u65b9\u5f0f", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f", +"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", +"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891", +"Media": "\u5a92\u4f53", +"Alternative source": "\u955c\u50cf", +"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:", +"Insert video": "\u63d2\u5165\u89c6\u9891", +"Poster": "\u5c01\u9762", +"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53", +"Embed": "\u5185\u5d4c", +"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c", +"Page break": "\u5206\u9875\u7b26", +"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c", +"Preview": "\u9884\u89c8", +"Print": "\u6253\u5370", +"Save": "\u4fdd\u5b58", +"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.", +"Replace": "\u66ff\u6362", +"Next": "\u4e0b\u4e00\u4e2a", +"Whole words": "\u5168\u5b57\u5339\u914d", +"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362", +"Replace with": "\u66ff\u6362\u4e3a", +"Find": "\u67e5\u627e", +"Replace all": "\u5168\u90e8\u66ff\u6362", +"Match case": "\u533a\u5206\u5927\u5c0f\u5199", +"Prev": "\u4e0a\u4e00\u4e2a", +"Spellcheck": "\u62fc\u5199\u68c0\u67e5", +"Finish": "\u5b8c\u6210", +"Ignore all": "\u5168\u90e8\u5ffd\u7565", +"Ignore": "\u5ffd\u7565", +"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178", +"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165", +"Rows": "\u884c", +"Height": "\u9ad8", +"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9", +"Alignment": "\u5bf9\u9f50\u65b9\u5f0f", +"Border color": "\u8fb9\u6846\u989c\u8272", +"Column group": "\u5217\u7ec4", +"Row": "\u884c", +"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165", +"Split cell": "\u62c6\u5206\u5355\u5143\u683c", +"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd", +"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd", +"Row type": "\u884c\u7c7b\u578b", +"Insert table": "\u63d2\u5165\u8868\u683c", +"Body": "\u8868\u4f53", +"Caption": "\u6807\u9898", +"Footer": "\u8868\u5c3e", +"Delete row": "\u5220\u9664\u884c", +"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9", +"Scope": "\u8303\u56f4", +"Delete table": "\u5220\u9664\u8868\u683c", +"H Align": "\u6c34\u5e73\u5bf9\u9f50", +"Top": "\u9876\u90e8\u5bf9\u9f50", +"Header cell": "\u8868\u5934\u5355\u5143\u683c", +"Column": "\u5217", +"Row group": "\u884c\u7ec4", +"Cell": "\u5355\u5143\u683c", +"Middle": "\u5782\u76f4\u5c45\u4e2d", +"Cell type": "\u5355\u5143\u683c\u7c7b\u578b", +"Copy row": "\u590d\u5236\u884c", +"Row properties": "\u884c\u5c5e\u6027", +"Table properties": "\u8868\u683c\u5c5e\u6027", +"Bottom": "\u5e95\u90e8\u5bf9\u9f50", +"V Align": "\u5782\u76f4\u5bf9\u9f50", +"Header": "\u8868\u5934", +"Right": "\u53f3\u5bf9\u9f50", +"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165", +"Cols": "\u5217", +"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165", +"Width": "\u5bbd", +"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027", +"Left": "\u5de6\u5bf9\u9f50", +"Cut row": "\u526a\u5207\u884c", +"Delete column": "\u5220\u9664\u5217", +"Center": "\u5c45\u4e2d", +"Merge cells": "\u5408\u5e76\u5355\u5143\u683c", +"Insert template": "\u63d2\u5165\u6a21\u677f", +"Templates": "\u6a21\u677f", +"Background color": "\u80cc\u666f\u8272", +"Custom...": "\u81ea\u5b9a\u4e49...", +"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272", +"No color": "\u65e0", +"Text color": "\u6587\u5b57\u989c\u8272", +"Table of Contents": "\u5185\u5bb9\u5217\u8868", +"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846", +"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26", +"Words: {0}": "\u5b57\u6570\uff1a{0}", +"Insert": "\u63d2\u5165", +"File": "\u6587\u4ef6", +"Edit": "\u7f16\u8f91", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9", +"Tools": "\u5de5\u5177", +"View": "\u89c6\u56fe", +"Table": "\u8868\u683c", +"Format": "\u683c\u5f0f" +}); \ No newline at end of file diff --git a/cps/templates/book_edit.html b/cps/templates/book_edit.html index 413913aa..4eb5b00e 100644 --- a/cps/templates/book_edit.html +++ b/cps/templates/book_edit.html @@ -193,7 +193,8 @@ tinymce.init({ selector: '#description', branding: false, - menubar: 'edit view format' + menubar: 'edit view format', + language: '{{ g.user.locale }}' }); {% endblock %} From 2929d95b264b27986a10262c07df453442dd030d Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 13:50:21 +0200 Subject: [PATCH 14/47] Display all authors names in shelf, like on all other pages (#202) --- cps/templates/shelf.html | 11 ++++++++--- cps/web.py | 10 +++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/cps/templates/shelf.html b/cps/templates/shelf.html index a8c52ce8..a81538e1 100644 --- a/cps/templates/shelf.html +++ b/cps/templates/shelf.html @@ -22,9 +22,14 @@

    {{entry.title|shortentitle}}

    - {% if entry.authors|length > 0 %} -

    {{entry.authors[0].name}}

    - {% endif %} +

    + {% for author in entry.authors %} + {{author.name}} + {% if not loop.last %} + & + {% endif %} + {% endfor %} +

    {% if entry.ratings.__len__() > 0 %}
    {% for number in range((entry.ratings[0].rating/2)|int(2)) %} diff --git a/cps/web.py b/cps/web.py index 6be3c448..935f6df3 100755 --- a/cps/web.py +++ b/cps/web.py @@ -1979,15 +1979,19 @@ def show_shelf(shelf_id): ub.and_(ub.Shelf.is_public == 1, ub.Shelf.id == shelf_id))).first() result = list() + # user is allowed to access shelf if shelf: books_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id).order_by( ub.BookShelf.order.asc()).all() for book in books_in_shelf: cur_book = db.session.query(db.Books).filter(db.Books.id == book.book_id).first() result.append(cur_book) - - return render_title_template('shelf.html', entries=result, title=_(u"Shelf: '%(name)s'", name=shelf.name), + return render_title_template('shelf.html', entries=result, title=_(u"Shelf: '%(name)s'", name=shelf.name), shelf=shelf) + else: + flash(_(u"Error opening shelf. Shelf does not exist or file is not accessible"), category="error") + return redirect(url_for("index")) + @app.route("/shelf/order/", methods=["GET", "POST"]) @@ -2673,7 +2677,7 @@ def edit_book(book_id): return render_title_template('book_edit.html', book=book, authors=author_names, cc=cc, title=_(u"edit metadata")) else: - flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error") + flash(_(u"Error opening eBook. File does not exist or file is not accessible"), category="error") return redirect(url_for("index")) From 21778105560dcf4115133d6452728db197d9383e Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 14:00:34 +0200 Subject: [PATCH 15/47] Fix #188 --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index b6567365..e78c34f5 100755 --- a/readme.md +++ b/readme.md @@ -33,6 +33,7 @@ Calibre Web is a web app providing a clean interface for browsing, reading and d 2. Execute the command: `python cps.py` (or `nohup python cps.py` - recommended if you want to exit the terminal window) 3. Point your browser to `http://localhost:8083` or `http://localhost:8083/opds` for the OPDS catalog 4. Set `Location of Calibre database` to the path of the folder where your Calibre library (metadata.db) lives, push "submit" button + optionally a google drive can be used to host the calibre library (-> Using Google Drive integration) 5. Go to Login page **Default admin login:** From f446e292763ef266ee66697032dc4775672142e1 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 14:57:39 +0200 Subject: [PATCH 16/47] Updater now uses correct "gid" instead of "uid" for change ownership of files (Fix for #213 ) -> update should now working if user id differs from groupid --- cps/helper.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index eb898b48..a0ab98de 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -455,11 +455,13 @@ class Updater(threading.Thread): logging.getLogger('cps.web').debug('Move File '+src_file+' to '+dst_dir) if change_permissions: try: - os.chown(dst_file, permission.st_uid, permission.st_uid) - # print('Permissions: User '+str(new_permissions.st_uid)+' Group '+str(new_permissions.st_uid)) + os.chown(dst_file, permission.st_uid, permission.st_gid) except Exception as e: e = sys.exc_info() - logging.getLogger('cps.web').debug('Fail '+str(dst_file)+' error: '+str(e)) + old_permissions = os.stat(dst_file) + logging.getLogger('cps.web').debug('Fail change permissions of ' + str(dst_file) + '. Before: ' + + str(old_permissions.st_uid) + ':' + str(old_permissions.st_gid) + ' After: ' + + str(permission.st_uid) + ':' + str(permission.st_gid) + ' error: '+str(e)) return def update_source(self, source, destination): From 93dfb961749085a416c18a34bbb225581a9e28c0 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 16:47:07 +0200 Subject: [PATCH 17/47] Added Translation of title for read/unread books --- cps/web.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/web.py b/cps/web.py index 935f6df3..8b588650 100755 --- a/cps/web.py +++ b/cps/web.py @@ -1633,10 +1633,10 @@ def render_read_books(page, are_read, as_xml=False): return response else: if are_read: - name = u'Read Books' + ' (' + str(len(readBookIds)) + ')' + name = _(u'Read Books') + ' (' + str(len(readBookIds)) + ')' else: total_books = db.session.query(func.count(db.Books.id)).scalar() - name = u'Unread Books' + ' (' + str(total_books - len(readBookIds)) + ')' + name = _(u'Unread Books') + ' (' + str(total_books - len(readBookIds)) + ')' return render_title_template('index.html', random=random, entries=entries, pagination=pagination, title=_(name, name=name)) From 675e8dd5cdcb7303d0d90cc955925bfb4a8f00f4 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 6 Jul 2017 09:21:35 -0700 Subject: [PATCH 18/47] Show book details in modal dialog With them shown in a modal, you don't lose your place in the pagination. If the request comes via Ajax, the minimal layout is used. If via a normal request, the full layout is used. That lets you open the details in a new tab and have the full experience, but if you're clicking through the results of a search, you can view many without losing your place. --- cps/static/js/main.js | 11 +++++++++++ cps/templates/detail.html | 2 +- cps/templates/discover.html | 2 +- cps/templates/fragment.html | 4 ++++ cps/templates/index.html | 4 ++-- cps/templates/layout.html | 14 ++++++++++++++ cps/templates/search.html | 2 +- cps/templates/shelf.html | 2 +- cps/web.py | 7 ++++++- 9 files changed, 41 insertions(+), 7 deletions(-) create mode 100644 cps/templates/fragment.html diff --git a/cps/static/js/main.js b/cps/static/js/main.js index d759a3b8..55ea42b3 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -121,6 +121,17 @@ $(function() { }); }); + $('#bookDetailsModal') + .on('show.bs.modal', function(e) { + var $modalBody = $(this).find('.modal-body'); + $.get(e.relatedTarget.href).done(function(content) { + $modalBody.html(content); + }); + }) + .on('hidden.bs.modal', function() { + $(this).find('.modal-body').html('...'); + }); + $(window).resize(function(event) { $(".discover .row").isotope("reLayout"); }); diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 14389809..1d6efe0e 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -1,4 +1,4 @@ -{% extends "layout.html" %} +{% extends is_xhr|yesno("fragment.html", "layout.html") %} {% block body %}
    diff --git a/cps/templates/discover.html b/cps/templates/discover.html index 32f89a47..ff79c23b 100644 --- a/cps/templates/discover.html +++ b/cps/templates/discover.html @@ -8,7 +8,7 @@
    {% if entry.has_cover is defined %} - + {% endif %} diff --git a/cps/templates/fragment.html b/cps/templates/fragment.html new file mode 100644 index 00000000..1421ea6a --- /dev/null +++ b/cps/templates/fragment.html @@ -0,0 +1,4 @@ +
    + {% block body %}{% endblock %} +
    +{% block js %}{% endblock %} diff --git a/cps/templates/index.html b/cps/templates/index.html index 768c28bd..72df252a 100755 --- a/cps/templates/index.html +++ b/cps/templates/index.html @@ -8,7 +8,7 @@ {% for entry in random %}
    + {% block modal %}{% endblock %} {% block js %}{% endblock %} diff --git a/cps/templates/search.html b/cps/templates/search.html index 7e82c1fc..3f705c47 100644 --- a/cps/templates/search.html +++ b/cps/templates/search.html @@ -15,7 +15,7 @@
    {% if entry.has_cover is defined %} - + {% endif %} diff --git a/cps/templates/shelf.html b/cps/templates/shelf.html index a81538e1..46586925 100644 --- a/cps/templates/shelf.html +++ b/cps/templates/shelf.html @@ -15,7 +15,7 @@
    {% if entry.has_cover is defined %} - + {% endif %} diff --git a/cps/web.py b/cps/web.py index 8b588650..9d73b173 100755 --- a/cps/web.py +++ b/cps/web.py @@ -411,6 +411,11 @@ def timestamptodate(date, fmt=None): return native.strftime(time_format) +@app.template_filter('yesno') +def yesno(str, yes, no): + return yes if str else no + + def admin_required(f): """ Checks if current_user.role == 1 @@ -1233,7 +1238,7 @@ def show_book(book_id): else: have_read = None - return render_title_template('detail.html', entry=entries, cc=cc, + return render_title_template('detail.html', entry=entries, cc=cc, is_xhr=request.is_xhr, title=entries.title, books_shelfs=book_in_shelfs, have_read=have_read) else: flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error") From 649579eccd6e99116dbae272e53dcec590899194 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 6 Jul 2017 10:18:51 -0700 Subject: [PATCH 19/47] Move jquery.form to layout.html This prevents it from getting loaded each time the details are viewed in a modal dialog. --- cps/templates/detail.html | 1 - cps/templates/layout.html | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 1d6efe0e..ba521f37 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -235,7 +235,6 @@ {% endblock %} {% block js %} - + {% block header %}{% endblock %} From d799b859eae33c897eb940d63db0650d28ede5d4 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Fri, 7 Jul 2017 18:22:05 -0700 Subject: [PATCH 20/47] Make changes suggested by codacy --- cps/static/js/main.js | 10 +++++----- cps/web.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cps/static/js/main.js b/cps/static/js/main.js index 55ea42b3..04b00712 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -121,15 +121,15 @@ $(function() { }); }); - $('#bookDetailsModal') - .on('show.bs.modal', function(e) { - var $modalBody = $(this).find('.modal-body'); + $("#bookDetailsModal") + .on("show.bs.modal", function(e) { + var $modalBody = $(this).find(".modal-body"); $.get(e.relatedTarget.href).done(function(content) { $modalBody.html(content); }); }) - .on('hidden.bs.modal', function() { - $(this).find('.modal-body').html('...'); + .on("hidden.bs.modal", function() { + $(this).find(".modal-body").html("..."); }); $(window).resize(function(event) { diff --git a/cps/web.py b/cps/web.py index 9d73b173..ba7d92fc 100755 --- a/cps/web.py +++ b/cps/web.py @@ -412,8 +412,8 @@ def timestamptodate(date, fmt=None): @app.template_filter('yesno') -def yesno(str, yes, no): - return yes if str else no +def yesno(value, yes, no): + return yes if value else no def admin_required(f): From 31e0025099e3c94d57a0d71307c4ecf6e0fdfa68 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sat, 8 Jul 2017 19:50:44 +0200 Subject: [PATCH 21/47] Update Translation --- cps/translations/de/LC_MESSAGES/messages.po | 421 ++++++++++-------- cps/translations/es/LC_MESSAGES/messages.po | 419 +++++++++-------- cps/translations/fr/LC_MESSAGES/messages.po | 419 +++++++++-------- cps/translations/nl/LC_MESSAGES/messages.po | 355 ++++++++------- cps/translations/pl/LC_MESSAGES/messages.po | 419 +++++++++-------- cps/translations/ru/LC_MESSAGES/messages.po | 419 +++++++++-------- .../zh_Hans_CN/LC_MESSAGES/messages.po | 419 +++++++++-------- cps/web.py | 2 +- messages.pot | 350 ++++++++------- 9 files changed, 1845 insertions(+), 1378 deletions(-) diff --git a/cps/translations/de/LC_MESSAGES/messages.po b/cps/translations/de/LC_MESSAGES/messages.po index 5450098a..b778e164 100644 --- a/cps/translations/de/LC_MESSAGES/messages.po +++ b/cps/translations/de/LC_MESSAGES/messages.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-04-14 20:25+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2016-07-12 19:54+0200\n" "Last-Translator: Ozzie Isaacs\n" "Language: de\n" @@ -30,366 +30,416 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:113 cps/book_formats.py:117 cps/web.py:1258 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "Nicht installiert" -#: cps/helper.py:165 +#: cps/helper.py:77 +#, python-format +msgid "kindlegen binary %(kindlepath)s not found" +msgstr "Kindlegen Programm %(kindlepath)s nicht gefunden" + +#: cps/helper.py:83 +#, python-format +msgid "epub format not found for book id: %(book)d" +msgstr "epub Format für Bücher-ID %(book)d nicht gefunden" + +#: cps/helper.py:93 +msgid "kindlegen failed, no excecution permissions" +msgstr "Kindlegen Aufruf fehlgeschlagen, keine Ausführungsberechtigung" + +#: cps/helper.py:109 +#, python-format +msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" +msgstr "Kindlegen Aufruf mit Fehler %(error)s. Text: %(message)s fehlgeschlagen " + +#: cps/helper.py:186 #, python-format msgid "Failed to send mail: %s" msgstr "E-Mail: %s konnte nicht gesendet werden" -#: cps/helper.py:172 +#: cps/helper.py:193 msgid "Calibre-web test email" msgstr "Calibre-web Test E-Mail" -#: cps/helper.py:173 cps/helper.py:185 +#: cps/helper.py:194 cps/helper.py:206 msgid "This email has been sent via calibre web." msgstr "Die E-Mail wurde via calibre-web versendet" -#: cps/helper.py:182 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "An Kindle senden" -#: cps/helper.py:202 cps/helper.py:217 +#: cps/helper.py:223 cps/helper.py:236 msgid "Could not find any formats suitable for sending by email" msgstr "" "Konnte keine Formate finden welche für das versenden per E-Mail geeignet " "sind" -#: cps/helper.py:211 -msgid "Could not convert epub to mobi" -msgstr "Konnte .epub nicht nach .mobi konvertieren" - -#: cps/ub.py:481 +#: cps/ub.py:518 msgid "Guest" msgstr "Gast" -#: cps/web.py:917 +#: cps/web.py:937 msgid "Requesting update package" msgstr "Frage Update Paket an" -#: cps/web.py:918 +#: cps/web.py:938 msgid "Downloading update package" msgstr "Lade Update Paket herunter" -#: cps/web.py:919 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "Entpacke Update Paket" -#: cps/web.py:920 +#: cps/web.py:940 msgid "Files are replaced" msgstr "Ersetze Dateien" -#: cps/web.py:921 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "Schließe Datenbankverbindungen" -#: cps/web.py:922 +#: cps/web.py:942 msgid "Server is stopped" msgstr "Stoppe Server" -#: cps/web.py:923 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "Update abgeschlossen, bitte okay drücken und Seite neu laden" -#: cps/web.py:997 +#: cps/web.py:1017 msgid "Latest Books" msgstr "Letzte Bücher" -#: cps/web.py:1028 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "Beliebte Bücher (die meisten Downloads)" -#: cps/web.py:1038 +#: cps/web.py:1058 msgid "Best rated books" msgstr "Best bewertete Bücher" -#: cps/templates/index.xml:36 cps/web.py:1047 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "Zufällige Bücher" -#: cps/web.py:1060 +#: cps/web.py:1080 msgid "Author list" msgstr "Autorenliste" -#: cps/web.py:1072 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "Autor: %(name)s" -#: cps/web.py:1074 cps/web.py:1102 cps/web.py:1235 cps/web.py:1672 -#: cps/web.py:2655 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht " "zugänglich." -#: cps/templates/index.xml:71 cps/web.py:1088 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "Liste Serien" -#: cps/web.py:1100 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "Serie: %(serie)s" -#: cps/web.py:1133 +#: cps/web.py:1153 msgid "Available languages" msgstr "Verfügbare Sprachen" -#: cps/web.py:1148 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "Sprache: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1161 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "Kategorieliste" -#: cps/web.py:1173 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "Kategorie: %(name)s" -#: cps/web.py:1280 +#: cps/web.py:1289 +msgid "Excecution permissions missing" +msgstr "Ausführungsberechtigung nicht vorhanden" + +#: cps/web.py:1303 msgid "Statistics" msgstr "Statistiken" -#: cps/web.py:1415 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "Server neu gestartet,bitte Seite neu laden" -#: cps/web.py:1417 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "Server wird runtergefahren, bitte Fenster schließen" -#: cps/web.py:1433 +#: cps/web.py:1485 msgid "Update done" msgstr "Update durchgeführt" -#: cps/web.py:1511 cps/web.py:1524 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "Suche" -#: cps/web.py:1648 cps/web.py:1655 cps/web.py:1662 cps/web.py:1669 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "Gelesene Bücher" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "Ungelesene Bücher" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "Lese ein Buch" -#: cps/web.py:1725 cps/web.py:2207 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "Bitte alle Felder ausfüllen!" -#: cps/web.py:1726 cps/web.py:1742 cps/web.py:1747 cps/web.py:1749 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "Registieren" -#: cps/web.py:1741 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "Es ist ein unbekannter Fehler aufgetreten. Bitte später erneut versuchen." -#: cps/web.py:1746 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "Der Benutzername oder die E-Mailadresse ist in bereits in Benutzung." -#: cps/web.py:1764 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Du bist nun eingeloggt als '%(nickname)s'" -#: cps/web.py:1769 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "Falscher Benutzername oder Passwort" -#: cps/web.py:1771 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "Login" -#: cps/web.py:1788 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "Token wurde nicht gefunden" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "Das Token ist abgelaufen" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "Erfolg! Bitte zum Gerät zurückkehren" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "Bitte zuerst die SMTP Mail Einstellung konfigurieren ..." -#: cps/web.py:1792 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Buch erfolgreich versandt an %(kindlemail)s" -#: cps/web.py:1796 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Beim Senden des Buchs trat ein Fehler auf: %(res)s" -#: cps/web.py:1798 cps/web.py:2291 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "Bitte die Kindle E-Mail Adresse zuuerst konfigurieren..." -#: cps/web.py:1823 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Das Buch wurde dem Bücherregal: %(sname)s hinzugefügt" -#: cps/web.py:1843 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Das Buch wurde aus dem Bücherregal: %(sname)s entfernt" -#: cps/web.py:1861 cps/web.py:1885 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Es existiert bereits ein Bücheregal mit dem Titel '%(title)s'" -#: cps/web.py:1866 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "Bücherregal %(title)s erzeugt" -#: cps/web.py:1868 cps/web.py:1896 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "Es trat ein Fehler auf" -#: cps/web.py:1869 cps/web.py:1871 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "Bücherregal erzeugen" -#: cps/web.py:1894 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "Bücherregal %(title)s verändert" -#: cps/web.py:1897 cps/web.py:1899 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "Bücherregal editieren" -#: cps/web.py:1919 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Bücherregal %(name)s erfolgreich gelöscht" -#: cps/web.py:1941 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "Bücherregal: '%(name)s'" -#: cps/web.py:1972 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "Fehler beim Öffnen. Bücherregel exisitert nicht oder ist nicht zugänglich" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Reihenfolge in Bücherregal '%(name)s' verändern" -#: cps/web.py:2036 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "Es existiert ein Benutzerkonto für diese E-Mailadresse" -#: cps/web.py:2038 cps/web.py:2042 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's Profil" -#: cps/web.py:2039 +#: cps/web.py:2194 msgid "Profile updated" msgstr "Profil aktualisiert" -#: cps/web.py:2053 +#: cps/web.py:2208 msgid "Admin page" msgstr "Admin Seite" -#: cps/web.py:2161 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "Calibre-web Konfiguration wurde aktualisiert" -#: cps/web.py:2168 cps/web.py:2174 cps/web.py:2188 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "Basis Konfiguration" -#: cps/web.py:2172 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "DB Speicherort ist ungültig, bitte Pfad korrigieren" -#: cps/templates/admin.html:34 cps/web.py:2209 cps/web.py:2261 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "Neuen Benutzer hinzufügen" -#: cps/web.py:2253 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "Benutzer '%(user)s' angelegt" -#: cps/web.py:2257 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "" "Es existiert ein Benutzerkonto für diese Emailadresse oder den " "Benutzernamen." -#: cps/web.py:2279 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "E-Mail Einstellungen aktualisiert" -#: cps/web.py:2286 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test E-Mail erfolgreich an %(kindlemail)s versendet" -#: cps/web.py:2289 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Fehler beim versenden der Test E-Mail: %(res)s" -#: cps/web.py:2293 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "E-Mail Einstellungen wurde aktualisiert" -#: cps/web.py:2294 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "E-Mail Einstellungen editieren" -#: cps/web.py:2322 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "Benutzer '%(nick)s' gelöscht" -#: cps/web.py:2418 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "Benutzer '%(nick)s' aktualisiert" -#: cps/web.py:2421 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "Es ist ein unbekanter Fehler aufgetreten" -#: cps/web.py:2424 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "Benutzer %(nick)s bearbeiten" -#: cps/web.py:2459 cps/web.py:2463 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "Unbekannt" -#: cps/web.py:2650 cps/web.py:2653 cps/web.py:2763 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "Metadaten editieren" -#: cps/web.py:2674 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" +"Buch öffnen fehlgeschlagen. Datei existiert nicht, oder ist nicht " +"zugänglich" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Die Dateiendung \"%s\" kann nicht auf diesen Server hochgeladen werden" -#: cps/web.py:2680 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "Datei müssen eine Erweiterung haben, um hochgeladen zu werden" -#: cps/web.py:2697 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fehler beim Erzeugen des Pfads %s (Zugriff verweigert)" -#: cps/web.py:2702 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fehler beim speichern der Datei %s (Zugriff verweigert)" -#: cps/web.py:2707 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fehler beim Löschen von Datei %s (Zugriff verweigert)" @@ -418,7 +468,8 @@ msgstr "DLS" msgid "Admin" msgstr "Admin" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "Download" @@ -466,7 +517,7 @@ msgstr "Absenderadresse" msgid "Change SMTP settings" msgstr "SMTP Einstellungen ändern" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "Konfiguration" @@ -498,60 +549,64 @@ msgstr "Öffentliche Registrierung" msgid "Anonymous browsing" msgstr "Anonymer Zugriff" -#: cps/templates/admin.html:78 +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" +msgstr "Remote Login" + +#: cps/templates/admin.html:80 msgid "Administration" msgstr "Administration" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "Aktuelles Commit Datum" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "Neuestes Commit Datum" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "Calibre-DB neu verbinden" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "Calibre-web Neustarten" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "Stoppe Calibre-web" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "Suche nach Update" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "Update durchführen" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "Calibre-web wirklich neustarten?" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "Ok" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 -#: cps/templates/book_edit.html:115 cps/templates/book_edit.html:134 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 +#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "Zurück" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "Calibre-web wirklich stoppen" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "Updatevorgang, bitte Seite nicht neu laden" @@ -563,12 +618,12 @@ msgstr "Buch löschen" msgid "Book Title" msgstr "Buchtitel" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:173 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Autor" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:175 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 msgid "Description" msgstr "Beschreibung" @@ -605,74 +660,74 @@ msgstr "Ja" msgid "No" msgstr "Nein" -#: cps/templates/book_edit.html:110 +#: cps/templates/book_edit.html:115 msgid "view book after edit" msgstr "Buch nach Bearbeitung ansehen" -#: cps/templates/book_edit.html:113 cps/templates/book_edit.html:146 +#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 msgid "Get metadata" msgstr "Metadaten laden" -#: cps/templates/book_edit.html:114 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "Abschicken" -#: cps/templates/book_edit.html:125 +#: cps/templates/book_edit.html:133 msgid "Are really you sure?" msgstr "Sicher?" -#: cps/templates/book_edit.html:128 +#: cps/templates/book_edit.html:136 msgid "Book will be deleted from Calibre database" msgstr "Das Buch wird aus der Calibre Datenbank" -#: cps/templates/book_edit.html:129 +#: cps/templates/book_edit.html:137 msgid "and from hard disk" msgstr "und der Festplatte gelöscht" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:141 msgid "Delete" msgstr "Löschen" -#: cps/templates/book_edit.html:149 +#: cps/templates/book_edit.html:157 msgid "Keyword" msgstr "Suchbegriff" -#: cps/templates/book_edit.html:150 +#: cps/templates/book_edit.html:158 msgid " Search keyword " msgstr "Suchbegriff" -#: cps/templates/book_edit.html:152 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 msgid "Go!" msgstr "Los!" -#: cps/templates/book_edit.html:153 +#: cps/templates/book_edit.html:161 msgid "Click the cover to load metadata to the form" msgstr "Klicke auf das Bild um die Metadaten zu übertragen" -#: cps/templates/book_edit.html:157 cps/templates/book_edit.html:170 +#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 msgid "Loading..." msgstr "Lade..." -#: cps/templates/book_edit.html:160 +#: cps/templates/book_edit.html:168 msgid "Close" msgstr "Schließen" -#: cps/templates/book_edit.html:171 +#: cps/templates/book_edit.html:179 msgid "Search error!" msgstr "Fehler bei Suche!" -#: cps/templates/book_edit.html:172 +#: cps/templates/book_edit.html:180 msgid "No Result! Please try anonther keyword." msgstr "Kein Ergebniss! Bitte anderen Begriff versuchen" -#: cps/templates/book_edit.html:174 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Herausgeber" -#: cps/templates/book_edit.html:176 +#: cps/templates/book_edit.html:184 msgid "Source" msgstr "Quelle" @@ -736,76 +791,80 @@ msgstr "Anonymes Browsen aktivieren" msgid "Enable public registration" msgstr "Öffentliche Registrierung aktivieren" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "Remote login aktivieren (\"Magischer Link\")" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "Default Einstellungen für neue Benutzer" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "Admin Benutzer" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "Downloads erlauben" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "Uploads erlauben" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "Bearbeiten erlauben" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "Bücher löschen erlauben" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "Passwort ändern erlauben" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "Öffentliche Bücherregale editieren erlauben" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "Buch" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "von" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "Sprache" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "Herausgabedatum" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "Gelesen" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "Beschreibung" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "Im Browser lesen" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "Buch" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "von" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "Sprache" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "Herausgabedatum" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "Gelesen" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "Beschreibung" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "Zu Bücherregal hinzufügen" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "Metadaten bearbeiten" @@ -887,16 +946,6 @@ msgstr "Die neuesten Bücher" msgid "Show Random Books" msgstr "Zeige zufällige Bücher" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "Gelesene Bücher" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "Ungelesene Bücher" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "Autoren" @@ -961,20 +1010,24 @@ msgstr "Bücherregal erzeugen" msgid "About" msgstr "Über" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "Benutzername" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "Passwort" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "Merken" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "Einloggen mit magischem Link" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "Calibre Web Ebook Katalog" @@ -1011,6 +1064,18 @@ msgstr "E-Mail Adresse" msgid "Your email address" msgstr "Deine E-Mail Adresse" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "Benutze das andere Gerät und besuche" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "und logge Dich ein" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "Danach wirst Du automatisch auf diesem Gerät eingeloggt sein" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "Keine Ergebnisse für:" @@ -1047,11 +1112,11 @@ msgstr "Bücherregal umbenennen" msgid "Change order" msgstr "Reihenfolge ändern" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "Wirklich das Bücherregal löschen?" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "Das Bücherregal wird für alle und für immer gelöscht" diff --git a/cps/translations/es/LC_MESSAGES/messages.po b/cps/translations/es/LC_MESSAGES/messages.po index 2177c623..c5a9138e 100644 --- a/cps/translations/es/LC_MESSAGES/messages.po +++ b/cps/translations/es/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-04-14 20:25+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2017-04-04 15:09+0200\n" "Last-Translator: Juan F. Villa \n" "Language: es\n" @@ -23,362 +23,410 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:113 cps/book_formats.py:117 cps/web.py:1258 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "No instalado" -#: cps/helper.py:165 +#: cps/helper.py:77 +#, python-format +msgid "kindlegen binary %(kindlepath)s not found" +msgstr "" + +#: cps/helper.py:83 +#, python-format +msgid "epub format not found for book id: %(book)d" +msgstr "" + +#: cps/helper.py:93 +msgid "kindlegen failed, no excecution permissions" +msgstr "" + +#: cps/helper.py:109 +#, python-format +msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" +msgstr "" + +#: cps/helper.py:186 #, python-format msgid "Failed to send mail: %s" msgstr "Fallo al enviar el correo : %s" -#: cps/helper.py:172 +#: cps/helper.py:193 msgid "Calibre-web test email" msgstr "Prueba de Correo Calibre-web" -#: cps/helper.py:173 cps/helper.py:185 +#: cps/helper.py:194 cps/helper.py:206 msgid "This email has been sent via calibre web." msgstr "Este mensaje ha sido enviado via Calibre Web." -#: cps/helper.py:182 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "Enviar a Kindle" -#: cps/helper.py:202 cps/helper.py:217 +#: cps/helper.py:223 cps/helper.py:236 msgid "Could not find any formats suitable for sending by email" msgstr "Formato no compatible para enviar por correo electronico" -#: cps/helper.py:211 -msgid "Could not convert epub to mobi" -msgstr "No fue posible convertir de epub a mobi" - -#: cps/ub.py:481 +#: cps/ub.py:518 msgid "Guest" msgstr "Invitado" -#: cps/web.py:917 +#: cps/web.py:937 msgid "Requesting update package" msgstr "Solicitando paquete de actualización" -#: cps/web.py:918 +#: cps/web.py:938 msgid "Downloading update package" msgstr "Descargando paquete de actualización" -#: cps/web.py:919 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "Descomprimiendo paquete de actualización" -#: cps/web.py:920 +#: cps/web.py:940 msgid "Files are replaced" msgstr "Ficheros sustituidos" -#: cps/web.py:921 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "Los conexiones de base datos están cerradas" -#: cps/web.py:922 +#: cps/web.py:942 msgid "Server is stopped" msgstr "El servidor está detenido" -#: cps/web.py:923 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "Actualización finalizada. Por favor, pulse OK y recargue la página" -#: cps/web.py:997 +#: cps/web.py:1017 msgid "Latest Books" msgstr "Libros recientes" -#: cps/web.py:1028 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "Libros populares (los mas descargados)" -#: cps/web.py:1038 +#: cps/web.py:1058 msgid "Best rated books" msgstr "Libros mejor valorados" -#: cps/templates/index.xml:36 cps/web.py:1047 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "Libros al azar" -#: cps/web.py:1060 +#: cps/web.py:1080 msgid "Author list" msgstr "Lista de autores" -#: cps/web.py:1072 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "Autor:%(name)s" -#: cps/web.py:1074 cps/web.py:1102 cps/web.py:1235 cps/web.py:1672 -#: cps/web.py:2655 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Error en la apertura del eBook. El archivo no existe o no es accesible:" -#: cps/templates/index.xml:71 cps/web.py:1088 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "Lista de series" -#: cps/web.py:1100 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "Series : %(serie)s" -#: cps/web.py:1133 +#: cps/web.py:1153 msgid "Available languages" msgstr "Lenguajes disponibles" -#: cps/web.py:1148 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "Lenguaje: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1161 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "Lista de categorias" -#: cps/web.py:1173 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "Categoría : %(name)s" -#: cps/web.py:1280 +#: cps/web.py:1289 +msgid "Excecution permissions missing" +msgstr "" + +#: cps/web.py:1303 msgid "Statistics" msgstr "Estadisticas" -#: cps/web.py:1415 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "Servidor reiniciado. Por favor, recargue la página" -#: cps/web.py:1417 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "Servidor en proceso de apagado. Por favor, cierre la ventana." -#: cps/web.py:1433 +#: cps/web.py:1485 msgid "Update done" msgstr "Actualización realizada" -#: cps/web.py:1511 cps/web.py:1524 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "búsqueda" -#: cps/web.py:1648 cps/web.py:1655 cps/web.py:1662 cps/web.py:1669 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "Libros leídos" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "Libros no leídos" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "Leer un libro" -#: cps/web.py:1725 cps/web.py:2207 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "¡Por favor completar todos los campos!" -#: cps/web.py:1726 cps/web.py:1742 cps/web.py:1747 cps/web.py:1749 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "registrarse" -#: cps/web.py:1741 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "Error desconocido. Por favor, inténtelo de nuevo mas tarde." -#: cps/web.py:1746 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "Usuario o dirección de correo en uso." -#: cps/web.py:1764 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Sesion iniciada como : '%(nickname)s'" -#: cps/web.py:1769 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "Usuario o contraseña invalido" -#: cps/web.py:1771 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "Iniciar sesión" -#: cps/web.py:1788 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "Configurar primero los parametros SMTP por favor..." -#: cps/web.py:1792 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Envio de Libro a %(kindlemail)s correctamente" -#: cps/web.py:1796 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ha sucedido un error en el envio del Libro: %(res)s" -#: cps/web.py:1798 cps/web.py:2291 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "Configurar primero la dirección de correo Kindle por favor..." -#: cps/web.py:1823 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "El libro fue agregado a el estante: %(sname)s" -#: cps/web.py:1843 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "El libro fue removido del estante: %(sname)s" -#: cps/web.py:1861 cps/web.py:1885 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Une étagère de ce nom '%(title)s' existe déjà." -#: cps/web.py:1866 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "Estante %(title)s creado" -#: cps/web.py:1868 cps/web.py:1896 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "Ha sucedido un error" -#: cps/web.py:1869 cps/web.py:1871 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "crear un estante" -#: cps/web.py:1894 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "Estante %(title)s cambiado" -#: cps/web.py:1897 cps/web.py:1899 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "Editar un estante" -#: cps/web.py:1919 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Estante %(name)s fue borrado correctamente" -#: cps/web.py:1941 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "Estante: '%(name)s'" -#: cps/web.py:1972 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Cambiar orden del estante: '%(name)s'" -#: cps/web.py:2036 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "Existe una cuenta vinculada a esta dirección de correo." -#: cps/web.py:2038 cps/web.py:2042 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "Perfil de %(name)s" -#: cps/web.py:2039 +#: cps/web.py:2194 msgid "Profile updated" msgstr "Perfil actualizado" -#: cps/web.py:2053 +#: cps/web.py:2208 msgid "Admin page" msgstr "Página de administración" -#: cps/web.py:2161 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "Configuración de Calibre-web actualizada" -#: cps/web.py:2168 cps/web.py:2174 cps/web.py:2188 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "Configuración básica" -#: cps/web.py:2172 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "Localicación de la BD inválida. Por favor, introduzca la ruta correcta." -#: cps/templates/admin.html:34 cps/web.py:2209 cps/web.py:2261 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "Agregar un nuevo usuario" -#: cps/web.py:2253 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "Usuario '%(user)s' creado" -#: cps/web.py:2257 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "" "Se ha encontrado una cuenta vinculada a esta dirección de correo o nombre" " de usuario." -#: cps/web.py:2279 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "Parámetros de correo actualizados" -#: cps/web.py:2286 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Exito al realizar envio de prueba a %(kindlemail)s" -#: cps/web.py:2289 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Error al realizar envio de prueba a E-Mail: %(res)s" -#: cps/web.py:2293 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "Ajustes de correo electrónico actualizados" -#: cps/web.py:2294 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "Editar parametros de correo" -#: cps/web.py:2322 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "Usuario '%(nick)s' borrado" -#: cps/web.py:2418 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "Usuario '%(nick)s' actualizado" -#: cps/web.py:2421 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "Error inesperado." -#: cps/web.py:2424 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "Editar Usuario %(nick)s" -#: cps/web.py:2459 cps/web.py:2463 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "" -#: cps/web.py:2650 cps/web.py:2653 cps/web.py:2763 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "editar metainformación" -#: cps/web.py:2674 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "No se permite subir archivos con la extensión \"%s\" a este servidor" -#: cps/web.py:2680 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "El archivo a subir debe tener una extensión" -#: cps/web.py:2697 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Fallo al crear la ruta %s (permiso negado)" -#: cps/web.py:2702 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Fallo al almacenar el archivo %s (permiso negado)" -#: cps/web.py:2707 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Fallo al borrar el archivo %s (permiso negado)" @@ -407,7 +455,8 @@ msgstr "DLS" msgid "Admin" msgstr "Administración" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "Descarga" @@ -455,7 +504,7 @@ msgstr "Desde el correo" msgid "Change SMTP settings" msgstr "Cambiar parametros smtp" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "Configuración" @@ -487,60 +536,64 @@ msgstr "Registro público" msgid "Anonymous browsing" msgstr "Navegación anónima" -#: cps/templates/admin.html:78 +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" +msgstr "" + +#: cps/templates/admin.html:80 msgid "Administration" msgstr "Administración" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "Marca temporal del commit actual" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "Marca temporal del commit más reciente" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "Reconectar la BD Calibre" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "Reinicial Calibre-web" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "Detener Calibre-web" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "Buscar actualizaciones" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "Actualizar" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "¿Seguro que quiere reiniciar Calibre-web?" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "Ok" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 -#: cps/templates/book_edit.html:115 cps/templates/book_edit.html:134 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 +#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "Regresar" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "¿Seguro que quiere detener Calibre-web?" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "Actualizando. Por favor, no recargue la página." @@ -552,12 +605,12 @@ msgstr "" msgid "Book Title" msgstr "Titulo del Libro" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:173 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Autor" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:175 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 msgid "Description" msgstr "Descripcion" @@ -594,74 +647,74 @@ msgstr "Si" msgid "No" msgstr "No" -#: cps/templates/book_edit.html:110 +#: cps/templates/book_edit.html:115 msgid "view book after edit" msgstr "Ver libro tras la edicion" -#: cps/templates/book_edit.html:113 cps/templates/book_edit.html:146 +#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 msgid "Get metadata" msgstr "Obtener metainformación" -#: cps/templates/book_edit.html:114 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "Enviar" -#: cps/templates/book_edit.html:125 +#: cps/templates/book_edit.html:133 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:128 +#: cps/templates/book_edit.html:136 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:129 +#: cps/templates/book_edit.html:137 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:141 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:149 +#: cps/templates/book_edit.html:157 msgid "Keyword" msgstr "Palabra clave" -#: cps/templates/book_edit.html:150 +#: cps/templates/book_edit.html:158 msgid " Search keyword " msgstr "Buscar palabras clave" -#: cps/templates/book_edit.html:152 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 msgid "Go!" msgstr "¡Vamos!" -#: cps/templates/book_edit.html:153 +#: cps/templates/book_edit.html:161 msgid "Click the cover to load metadata to the form" msgstr "Haga clic en la portada para cargar la metainformación en el formulario" -#: cps/templates/book_edit.html:157 cps/templates/book_edit.html:170 +#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 msgid "Loading..." msgstr "Cargando..." -#: cps/templates/book_edit.html:160 +#: cps/templates/book_edit.html:168 msgid "Close" msgstr "Cerrar" -#: cps/templates/book_edit.html:171 +#: cps/templates/book_edit.html:179 msgid "Search error!" msgstr "¡Error en la búsqueda!" -#: cps/templates/book_edit.html:172 +#: cps/templates/book_edit.html:180 msgid "No Result! Please try anonther keyword." msgstr "¡Sin resultados! Por favor, pruebe otra palabra clave." -#: cps/templates/book_edit.html:174 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Editor" -#: cps/templates/book_edit.html:176 +#: cps/templates/book_edit.html:184 msgid "Source" msgstr "Origen" @@ -725,76 +778,80 @@ msgstr "Permitir navegación anónima" msgid "Enable public registration" msgstr "Permitir registro público" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "Ajustes por defecto para nuevos usuarios" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "Usuario Administrador" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "Permitir descargas" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "Permitir subidas de archivos" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "Permitir editar" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "Permitir cambiar la clave" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Inicio de Sesion" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "Libro" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "de" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "Lenguaje" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "Fecha de publicación" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "Leer" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "Descripcion :" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "Ver en el navegador" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "Libro" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "de" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "Lenguaje" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "Fecha de publicación" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "Leer" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "Descripcion :" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "Agregar al estante" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "Editar la metadata" @@ -876,16 +933,6 @@ msgstr "Libros recientes" msgid "Show Random Books" msgstr "Mostrar libros al azar" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "Libros leídos" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "Libros no leídos" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "Autores" @@ -950,20 +997,24 @@ msgstr "Crear un estante" msgid "About" msgstr "Acerca de" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "Nombre de usuario" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "Clave" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "Recordarme" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "Catálogo de libros electrónicos Calibre Web" @@ -1000,6 +1051,18 @@ msgstr "Direccion de correo" msgid "Your email address" msgstr "Tu direccion de correo" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "Sin resultados para:" @@ -1036,11 +1099,11 @@ msgstr "Editar nombre del estante" msgid "Change order" msgstr "Cambiar orden" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "" diff --git a/cps/translations/fr/LC_MESSAGES/messages.po b/cps/translations/fr/LC_MESSAGES/messages.po index 22ccde26..edd13cf5 100644 --- a/cps/translations/fr/LC_MESSAGES/messages.po +++ b/cps/translations/fr/LC_MESSAGES/messages.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-04-14 20:25+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2016-11-13 18:35+0100\n" "Last-Translator: Nicolas Roudninski \n" "Language: fr\n" @@ -29,362 +29,410 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:113 cps/book_formats.py:117 cps/web.py:1258 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "" -#: cps/helper.py:165 +#: cps/helper.py:77 +#, python-format +msgid "kindlegen binary %(kindlepath)s not found" +msgstr "" + +#: cps/helper.py:83 +#, python-format +msgid "epub format not found for book id: %(book)d" +msgstr "" + +#: cps/helper.py:93 +msgid "kindlegen failed, no excecution permissions" +msgstr "" + +#: cps/helper.py:109 +#, python-format +msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" +msgstr "" + +#: cps/helper.py:186 #, python-format msgid "Failed to send mail: %s" msgstr "Impossible d'envoyer le courriel : %s" -#: cps/helper.py:172 +#: cps/helper.py:193 msgid "Calibre-web test email" msgstr "" -#: cps/helper.py:173 cps/helper.py:185 +#: cps/helper.py:194 cps/helper.py:206 msgid "This email has been sent via calibre web." msgstr "Ce message a été envoyé depuis calibre web." -#: cps/helper.py:182 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "Envoyer ver Kindle" -#: cps/helper.py:202 cps/helper.py:217 +#: cps/helper.py:223 cps/helper.py:236 msgid "Could not find any formats suitable for sending by email" msgstr "Impossible de trouver un format adapté à envoyer par courriel" -#: cps/helper.py:211 -msgid "Could not convert epub to mobi" -msgstr "Impossible de convertir epub vers mobi" - -#: cps/ub.py:481 +#: cps/ub.py:518 msgid "Guest" msgstr "" -#: cps/web.py:917 +#: cps/web.py:937 msgid "Requesting update package" msgstr "" -#: cps/web.py:918 +#: cps/web.py:938 msgid "Downloading update package" msgstr "" -#: cps/web.py:919 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "" -#: cps/web.py:920 +#: cps/web.py:940 msgid "Files are replaced" msgstr "" -#: cps/web.py:921 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "" -#: cps/web.py:922 +#: cps/web.py:942 msgid "Server is stopped" msgstr "" -#: cps/web.py:923 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:997 +#: cps/web.py:1017 msgid "Latest Books" msgstr "Derniers livres" -#: cps/web.py:1028 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "Livres populaires (les plus téléchargés)" -#: cps/web.py:1038 +#: cps/web.py:1058 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:1047 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "Livres au hasard" -#: cps/web.py:1060 +#: cps/web.py:1080 msgid "Author list" msgstr "Liste des auteurs" -#: cps/web.py:1072 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "" -#: cps/web.py:1074 cps/web.py:1102 cps/web.py:1235 cps/web.py:1672 -#: cps/web.py:2655 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Erreur d'ouverture du livre numérique. Le fichier n'existe pas ou n'est " "pas accessible :" -#: cps/templates/index.xml:71 cps/web.py:1088 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "Liste des séries" -#: cps/web.py:1100 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "Séries : %(serie)s" -#: cps/web.py:1133 +#: cps/web.py:1153 msgid "Available languages" msgstr "Langues disponibles" -#: cps/web.py:1148 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "Langue : %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1161 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "Liste des catégories" -#: cps/web.py:1173 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "Catégorie : %(name)s" -#: cps/web.py:1280 +#: cps/web.py:1289 +msgid "Excecution permissions missing" +msgstr "" + +#: cps/web.py:1303 msgid "Statistics" msgstr "Statistiques" -#: cps/web.py:1415 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1417 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1433 +#: cps/web.py:1485 msgid "Update done" msgstr "" -#: cps/web.py:1511 cps/web.py:1524 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "" -#: cps/web.py:1648 cps/web.py:1655 cps/web.py:1662 cps/web.py:1669 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "Lire un livre" -#: cps/web.py:1725 cps/web.py:2207 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "SVP, complétez tous les champs !" -#: cps/web.py:1726 cps/web.py:1742 cps/web.py:1747 cps/web.py:1749 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "S'enregistrer" -#: cps/web.py:1741 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "Une erreur a eu lieu. Merci de réessayez plus tard." -#: cps/web.py:1746 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "Ce nom d'utilisateur ou cette adresse de courriel est déjà utilisée." -#: cps/web.py:1764 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Vous êtes maintenant connecté sous : '%(nickname)s'" -#: cps/web.py:1769 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "Mauvais nom d'utilisateur ou mot de passe" -#: cps/web.py:1771 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "Connexion" -#: cps/web.py:1788 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "Veillez configurer les paramètres smtp d'abord..." -#: cps/web.py:1792 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Livres envoyés à %(kindlemail)s avec succès" -#: cps/web.py:1796 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Il y a eu une erreur en envoyant ce livre : %(res)s" -#: cps/web.py:1798 cps/web.py:2291 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "Veuillez configurer votre adresse kindle d'abord..." -#: cps/web.py:1823 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Le livre a bien été ajouté à l'étagère : %(sname)s" -#: cps/web.py:1843 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Le livre a été supprimé de l'étagère %(sname)s" -#: cps/web.py:1861 cps/web.py:1885 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Une étagère de ce nom '%(title)s' existe déjà." -#: cps/web.py:1866 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "Étagère %(title)s créée" -#: cps/web.py:1868 cps/web.py:1896 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "Il y a eu une erreur" -#: cps/web.py:1869 cps/web.py:1871 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "Créer une étagère" -#: cps/web.py:1894 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:1897 cps/web.py:1899 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "" -#: cps/web.py:1919 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "L'étagère %(name)s a été supprimé avec succès" -#: cps/web.py:1941 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "Étagère : '%(name)s'" -#: cps/web.py:1972 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2036 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "Un compte avec cette adresse de courriel existe déjà." -#: cps/web.py:2038 cps/web.py:2042 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "Profil de %(name)s" -#: cps/web.py:2039 +#: cps/web.py:2194 msgid "Profile updated" msgstr "Profil mis à jour" -#: cps/web.py:2053 +#: cps/web.py:2208 msgid "Admin page" msgstr "" -#: cps/web.py:2161 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:2168 cps/web.py:2174 cps/web.py:2188 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2172 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2209 cps/web.py:2261 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "Ajouter un nouvel utilisateur" -#: cps/web.py:2253 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "Utilisateur '%(user)s' créé" -#: cps/web.py:2257 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "Un compte avec cette adresse de courriel ou ce surnom existe déjà." -#: cps/web.py:2279 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "Paramètres de courriel mis à jour" -#: cps/web.py:2286 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2289 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2293 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2294 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "Éditer les paramètres de courriel" -#: cps/web.py:2322 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "Utilisateur '%(nick)s' supprimé" -#: cps/web.py:2418 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "Utilisateur '%(nick)s' mis à jour" -#: cps/web.py:2421 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "Oups ! Une erreur inconnue a eu lieu." -#: cps/web.py:2424 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "Éditer l'utilisateur %(nick)s" -#: cps/web.py:2459 cps/web.py:2463 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "" -#: cps/web.py:2650 cps/web.py:2653 cps/web.py:2763 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "" -#: cps/web.py:2674 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2680 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:2697 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Impossible de créer le chemin %s (permission refusée)" -#: cps/web.py:2702 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Impossible d'enregistrer le fichier %s (permission refusée)" -#: cps/web.py:2707 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Impossible de supprimer le fichier %s (permission refusée)" @@ -413,7 +461,8 @@ msgstr "DLS" msgid "Admin" msgstr "Administration" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "Télécharger" @@ -461,7 +510,7 @@ msgstr "Expéditeur des courriels" msgid "Change SMTP settings" msgstr "Changer les paramètre smtp" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "" @@ -493,60 +542,64 @@ msgstr "" msgid "Anonymous browsing" msgstr "" -#: cps/templates/admin.html:78 -msgid "Administration" +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" msgstr "" #: cps/templates/admin.html:80 +msgid "Administration" +msgstr "" + +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 -#: cps/templates/book_edit.html:115 cps/templates/book_edit.html:134 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 +#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "Retour" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "" @@ -558,12 +611,12 @@ msgstr "" msgid "Book Title" msgstr "Titre du livre" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:173 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Auteur" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:175 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 msgid "Description" msgstr "Description" @@ -600,74 +653,74 @@ msgstr "Oui" msgid "No" msgstr "Non" -#: cps/templates/book_edit.html:110 +#: cps/templates/book_edit.html:115 msgid "view book after edit" msgstr "Voir le livre après l'édition" -#: cps/templates/book_edit.html:113 cps/templates/book_edit.html:146 +#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 msgid "Get metadata" msgstr "" -#: cps/templates/book_edit.html:114 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "Soumettre" -#: cps/templates/book_edit.html:125 +#: cps/templates/book_edit.html:133 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:128 +#: cps/templates/book_edit.html:136 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:129 +#: cps/templates/book_edit.html:137 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:141 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:149 +#: cps/templates/book_edit.html:157 msgid "Keyword" msgstr "" -#: cps/templates/book_edit.html:150 +#: cps/templates/book_edit.html:158 msgid " Search keyword " msgstr "" -#: cps/templates/book_edit.html:152 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 msgid "Go!" msgstr "Allez !" -#: cps/templates/book_edit.html:153 +#: cps/templates/book_edit.html:161 msgid "Click the cover to load metadata to the form" msgstr "" -#: cps/templates/book_edit.html:157 cps/templates/book_edit.html:170 +#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 msgid "Loading..." msgstr "" -#: cps/templates/book_edit.html:160 +#: cps/templates/book_edit.html:168 msgid "Close" msgstr "" -#: cps/templates/book_edit.html:171 +#: cps/templates/book_edit.html:179 msgid "Search error!" msgstr "" -#: cps/templates/book_edit.html:172 +#: cps/templates/book_edit.html:180 msgid "No Result! Please try anonther keyword." msgstr "" -#: cps/templates/book_edit.html:174 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "" -#: cps/templates/book_edit.html:176 +#: cps/templates/book_edit.html:184 msgid "Source" msgstr "" @@ -731,76 +784,80 @@ msgstr "" msgid "Enable public registration" msgstr "" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "Utilisateur admin" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "Permettre les téléchargements" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "Permettre les téléversements" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "Permettre l'édition" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "Permettre le changement de mot de passe" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Connexion" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "Livre" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "Langue" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "Description :" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "Lire dans le navigateur" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "Livre" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "Langue" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "Description :" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "Ajouter à l'étagère" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "Éditer les métadonnées" @@ -880,16 +937,6 @@ msgstr "Les derniers livres" msgid "Show Random Books" msgstr "Montrer des livres au hasard" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "Auteurs" @@ -954,20 +1001,24 @@ msgstr "Créer une étagère" msgid "About" msgstr "À popos" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "Nom d'utilisateur" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "Mot de passe" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "Se rappeler de moi" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "" @@ -1004,6 +1055,18 @@ msgstr "Adresse de courriel" msgid "Your email address" msgstr "Votre adresse de courriel" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "Aucun résultat pour :" @@ -1040,11 +1103,11 @@ msgstr "" msgid "Change order" msgstr "" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "" diff --git a/cps/translations/nl/LC_MESSAGES/messages.po b/cps/translations/nl/LC_MESSAGES/messages.po index 42650924..ca8e23b7 100644 --- a/cps/translations/nl/LC_MESSAGES/messages.po +++ b/cps/translations/nl/LC_MESSAGES/messages.po @@ -1,12 +1,11 @@ -# Dutch translations for Calibre-web +# Dutch translations for Calibre-web # Copyright (C) 2017 Calibre-web # This file is distributed under the same license as the Calibre-web # project. -# translation by Ed Driesen +# translation by Ed Driesen # FIRST AUTHOR , 2017. # # Copyright (C) 2011 Kovid Goyal -# # Translators: # Alex, 2016 # Freek de Kruijf , 2009-2011 @@ -23,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web dutch translation by Ed Driesen (GPL V3)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-06-24 12:58+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2017-06-21 20:15+0200\n" "Last-Translator: \n" "Language: nl\n" @@ -32,9 +31,9 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1262 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "niet geïnstalleerd" @@ -70,7 +69,7 @@ msgstr "Calibre-web test email" msgid "This email has been sent via calibre web." msgstr "Deze mail werd verstuurd met calibre web." -#: cps/helper.py:203 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "Stuur naar Kindle:" @@ -78,335 +77,364 @@ msgstr "Stuur naar Kindle:" msgid "Could not find any formats suitable for sending by email" msgstr "Kon geen geschikte formaten vinden om te verzenden per email" -#: cps/ub.py:487 +#: cps/ub.py:518 msgid "Guest" msgstr "Gast" -#: cps/web.py:921 +#: cps/web.py:937 msgid "Requesting update package" msgstr "Update pakket wordt aangevraagd" -#: cps/web.py:922 +#: cps/web.py:938 msgid "Downloading update package" msgstr "Update pakket wordt gedownload" -#: cps/web.py:923 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "Update pakket wordt uitgepakt" -#: cps/web.py:924 +#: cps/web.py:940 msgid "Files are replaced" msgstr "Bestanden zijn vervangen" -#: cps/web.py:925 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "Database verbindingen zijn gesloten" -#: cps/web.py:926 +#: cps/web.py:942 msgid "Server is stopped" msgstr "Server is gestopt" -#: cps/web.py:927 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "Update voltooid, klik op ok en herlaad de pagina" -#: cps/web.py:1001 +#: cps/web.py:1017 msgid "Latest Books" msgstr "Recentste boeken" -#: cps/web.py:1032 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "Populaire boeken (meeste downloads)" -#: cps/web.py:1042 +#: cps/web.py:1058 msgid "Best rated books" msgstr "Best beoordeelde boeken" -#: cps/templates/index.xml:36 cps/web.py:1051 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "Willekeurige boeken" -#: cps/web.py:1064 +#: cps/web.py:1080 msgid "Author list" msgstr "Auteur lijst" -#: cps/web.py:1076 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "Auteur:%(name)s" -#: cps/web.py:1078 cps/web.py:1106 cps/web.py:1239 cps/web.py:1716 -#: cps/web.py:2672 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" "Fout bij openen van het boek. Bestand bestaat niet of is niet " "toegankelijk:" -#: cps/templates/index.xml:71 cps/web.py:1092 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "Series lijst" -#: cps/web.py:1104 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "Series: %(serie)s" -#: cps/web.py:1137 +#: cps/web.py:1153 msgid "Available languages" msgstr "Beschikbare talen" -#: cps/web.py:1152 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "Taal: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1165 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "Categorie lijst" -#: cps/web.py:1177 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "Categorie: %(name)s" -#: cps/web.py:1273 +#: cps/web.py:1289 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1287 +#: cps/web.py:1303 msgid "Statistics" msgstr "Statistieken" -#: cps/web.py:1451 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "Server herstart, gelieve de pagina herladen" -#: cps/web.py:1453 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "Bezig met het stoppen vande server, gelieve venster afsluiten" -#: cps/web.py:1469 +#: cps/web.py:1485 msgid "Update done" msgstr "Update voltooid" -#: cps/web.py:1547 cps/web.py:1560 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "zoek" -#: cps/web.py:1702 cps/web.py:1704 cps/web.py:1706 cps/web.py:1713 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "Lees Boeken" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "Ongelezen Boeken" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "Lees een boek" -#: cps/web.py:1769 cps/web.py:2251 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "Gelieve alle velden in te vullen!" -#: cps/web.py:1770 cps/web.py:1786 cps/web.py:1791 cps/web.py:1793 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "registreer" -#: cps/web.py:1785 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "Een onbekende fout deed zich voor. Gelieve later nog eens te proberen." -#: cps/web.py:1790 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "Deze gebruikersnaam of email adres is reeds in gebruik." -#: cps/web.py:1808 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "je bent nu ingelogd als: '%(nickname)s'" -#: cps/web.py:1813 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "Verkeerde gebruikersnaam of Wachtwoord" -#: cps/web.py:1815 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "login" -#: cps/web.py:1832 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "Gelieve de SMTP mail instellingen eerstte configureren..." -#: cps/web.py:1836 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Boek met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:1840 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Er trad een fout op bij het versturen van dit boek: %(res)s" -#: cps/web.py:1842 cps/web.py:2335 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "Gelieve eerst je kindle email adres te configureren..." -#: cps/web.py:1867 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Boek werd toegevoegd aan boekenplank: %(sname)s" -#: cps/web.py:1887 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Boek werd verwijderd van boekenplank: %(sname)s" -#: cps/web.py:1905 cps/web.py:1929 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Een boekenplank met de naam '%(title)s' bestaat reeds." -#: cps/web.py:1910 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "Boekenplank %(title)s aangemaakt" -#: cps/web.py:1912 cps/web.py:1940 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "Er deed zich een fout voor" -#: cps/web.py:1913 cps/web.py:1915 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "maak een boekenplank" -#: cps/web.py:1938 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "Boekenplank %(title)s gewijzigd" -#: cps/web.py:1941 cps/web.py:1943 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "Bewerk een boekenplank" -#: cps/web.py:1963 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Succesvol boekenplank %(name)s gewist" -#: cps/web.py:1985 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "Boekenplank: '%(name)s'" -#: cps/web.py:2016 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Verander volgorde van Boekenplank: '%(name)s'" -#: cps/web.py:2080 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "Een bestaand gebruiker gevonden voor dit email adres." -#: cps/web.py:2082 cps/web.py:2086 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "%(name)s's profiel" -#: cps/web.py:2083 +#: cps/web.py:2194 msgid "Profile updated" msgstr "Profiel aangepast" -#: cps/web.py:2097 +#: cps/web.py:2208 msgid "Admin page" msgstr "Administratie pagina" -#: cps/web.py:2205 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "Calibre-web configuratie aangepast" -#: cps/web.py:2212 cps/web.py:2218 cps/web.py:2232 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "Basis configuratie" -#: cps/web.py:2216 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "DB locatie is niet geldig, gelieve het correcte pad in te geven" -#: cps/templates/admin.html:34 cps/web.py:2253 cps/web.py:2305 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "Voeg nieuwe gebruiker toe" -#: cps/web.py:2297 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "Gebruiker '%(user)s' aangemaakt" -#: cps/web.py:2301 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "Een bestaand gebruiker gevonden voor dit email adres of gebruikersnaam." -#: cps/web.py:2323 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "Mail instellingen aangepast" -#: cps/web.py:2330 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Test email met succes verstuurd naar %(kindlemail)s" -#: cps/web.py:2333 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Er trad een fout op met het versturen van de test email: %(res)s" -#: cps/web.py:2337 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "Email instellingen aangepast" -#: cps/web.py:2338 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "Bewerk mail instellingen" -#: cps/web.py:2367 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "Gebruiker '%(nick)s' verwijderd" -#: cps/web.py:2463 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "Gebruiker '%(nick)s' aangepast" -#: cps/web.py:2466 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "Een onbekende fout deed zich voor." -#: cps/web.py:2469 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "Bewerk gebruiker '%(nick)s'" -#: cps/web.py:2504 cps/web.py:2508 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "onbekend" -#: cps/web.py:2667 cps/web.py:2670 cps/web.py:2780 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "Bewerk metadata" -#: cps/web.py:2691 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Het uploaden van bestandsextensie \"%s\" is niet toegestaan op deze server" -#: cps/web.py:2697 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "Up te loaden bestanden dienen een extentie te hebben" -#: cps/web.py:2714 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Het pad %s aanmaken gefaald (Geen toestemming)." -#: cps/web.py:2719 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Bestand %s opslaan gefaald (Geen toestemming)." -#: cps/web.py:2724 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Bestand %s wissen gefaald (Geen toestemming)." @@ -435,7 +463,8 @@ msgstr "DLS" msgid "Admin" msgstr "Administratie" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "Download" @@ -483,7 +512,7 @@ msgstr "Van mail" msgid "Change SMTP settings" msgstr "Bewerk SMTP instellingen" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "Configuratie" @@ -515,60 +544,64 @@ msgstr "Publieke registratie" msgid "Anonymous browsing" msgstr "Anoniem verkennen" -#: cps/templates/admin.html:78 +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" +msgstr "" + +#: cps/templates/admin.html:80 msgid "Administration" msgstr "Administratie" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "Huidige commit tijdsstempel" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "Nieuwste commit tijdsstempel" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "Herverbinden met calibre DB" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "Herstart Calibre-web" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "Stop Calibre-web" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "Controleer voor update" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "Voer update uit" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "Wil je Calibre-web echt herstarten?" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "Ok" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "Terug" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "Wil je Calibre-web echt stoppen?" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "Aan het updaten, gelieve de pagina niet te herladen" @@ -630,8 +663,8 @@ msgstr "bekijk boek na bewerking" msgid "Get metadata" msgstr "Verkrijg metadata" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "Indienen" @@ -684,7 +717,7 @@ msgstr "Zoek fout!" msgid "No Result! Please try anonther keyword." msgstr "Geen resultaat! Gelieve een ander zoekwoord proberen" -#: cps/templates/book_edit.html:182 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Uitgever" @@ -753,76 +786,80 @@ msgstr "Anoniem verkennen aanzetten" msgid "Enable public registration" msgstr "Publieke registratie aanzetten" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "Standaard instellingen voor nieuwe gebruikers" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "Administratie gebruiker" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "Downloads toestaan" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "Uploads toestaan" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "Bewerken toestaan" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "Het wissen van boeken toestaan" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "Wachtwoord wijzigen toestaan" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "Publieke boekenplanken bewerken toestaan" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Login" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "Bozk" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "van" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "taal" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "Publicatie datum" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "Lees" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "Omschrijving:" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "Lees in browser" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "Bozk" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "van" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "taal" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "Publicatie datum" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "Lees" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "Omschrijving:" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "Voeg toe aan boekenplank" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "Bewerk metadata" @@ -904,16 +941,6 @@ msgstr "Recentste boeken" msgid "Show Random Books" msgstr "Toon Willekeurige Boeken" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "Lees Boeken" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "Ongelezen Boeken" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "Auteurs" @@ -978,20 +1005,24 @@ msgstr "Maak een boekenplank" msgid "About" msgstr "Over" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "Gebruikersnaam" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "Wachtwoord" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "Onthoumij" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "Calible web ebook cataloog" @@ -1028,6 +1059,18 @@ msgstr "Email adres" msgid "Your email address" msgstr "Jou email adres" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "Geen resultaat voor:" @@ -1064,11 +1107,11 @@ msgstr "Bewerk boekenplank naam" msgid "Change order" msgstr "Verander volgorde" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "Wil je echt deze boekenplank verwijderen?" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "Boekenplank zal verdwijnen voor iedereen en altijd!" diff --git a/cps/translations/pl/LC_MESSAGES/messages.po b/cps/translations/pl/LC_MESSAGES/messages.po index f1d24704..ba7c7ee4 100644 --- a/cps/translations/pl/LC_MESSAGES/messages.po +++ b/cps/translations/pl/LC_MESSAGES/messages.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre Web - polski (POT: 2017-04-11 22:51)\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-04-14 20:25+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2017-04-11 22:51+0200\n" "Last-Translator: Radosław Kierznowski \n" "Language: pl\n" @@ -22,362 +22,410 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:113 cps/book_formats.py:117 cps/web.py:1258 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "nie zainstalowane" -#: cps/helper.py:165 +#: cps/helper.py:77 +#, python-format +msgid "kindlegen binary %(kindlepath)s not found" +msgstr "" + +#: cps/helper.py:83 +#, python-format +msgid "epub format not found for book id: %(book)d" +msgstr "" + +#: cps/helper.py:93 +msgid "kindlegen failed, no excecution permissions" +msgstr "" + +#: cps/helper.py:109 +#, python-format +msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" +msgstr "" + +#: cps/helper.py:186 #, python-format msgid "Failed to send mail: %s" msgstr "Nie można wysłać poczty: %s" -#: cps/helper.py:172 +#: cps/helper.py:193 msgid "Calibre-web test email" msgstr "Calibre-web testowy email" -#: cps/helper.py:173 cps/helper.py:185 +#: cps/helper.py:194 cps/helper.py:206 msgid "This email has been sent via calibre web." msgstr "Ten e-mail został wysłany przez Calibre Web." -#: cps/helper.py:182 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "Wyślij do Kindle" -#: cps/helper.py:202 cps/helper.py:217 +#: cps/helper.py:223 cps/helper.py:236 msgid "Could not find any formats suitable for sending by email" msgstr "" "Nie można znaleźć żadnych formatów przystosowane do wysyłania pocztą " "e-mail" -#: cps/helper.py:211 -msgid "Could not convert epub to mobi" -msgstr "Nie można konwertować epub do mobi" - -#: cps/ub.py:481 +#: cps/ub.py:518 msgid "Guest" msgstr "Gość" -#: cps/web.py:917 +#: cps/web.py:937 msgid "Requesting update package" msgstr "Żądanie o pakiet aktualizacji" -#: cps/web.py:918 +#: cps/web.py:938 msgid "Downloading update package" msgstr "Pobieranie pakietu aktualizacji" -#: cps/web.py:919 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "Rozpakowywanie pakietu aktualizacji" -#: cps/web.py:920 +#: cps/web.py:940 msgid "Files are replaced" msgstr "Pliki zostały zastąpione" -#: cps/web.py:921 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "Połączenia z bazą danych zostały zakończone" -#: cps/web.py:922 +#: cps/web.py:942 msgid "Server is stopped" msgstr "Serwer jest zatrzymany" -#: cps/web.py:923 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "Aktualizacja zakończona, proszę nacisnąć OK i odświeżyć stronę" -#: cps/web.py:997 +#: cps/web.py:1017 msgid "Latest Books" msgstr "Ostatnie książki" -#: cps/web.py:1028 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "Najpopularniejsze książki (najczęściej pobierane)" -#: cps/web.py:1038 +#: cps/web.py:1058 msgid "Best rated books" msgstr "Najlepiej oceniane książki" -#: cps/templates/index.xml:36 cps/web.py:1047 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "Losowe książki" -#: cps/web.py:1060 +#: cps/web.py:1080 msgid "Author list" msgstr "Lista autorów" -#: cps/web.py:1072 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "Autor: %(name)s" -#: cps/web.py:1074 cps/web.py:1102 cps/web.py:1235 cps/web.py:1672 -#: cps/web.py:2655 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Błąd otwierania e-booka. Plik nie istnieje lub plik nie jest dostępny:" -#: cps/templates/index.xml:71 cps/web.py:1088 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "Lista serii" -#: cps/web.py:1100 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "Seria: %(serie)s" -#: cps/web.py:1133 +#: cps/web.py:1153 msgid "Available languages" msgstr "Dostępne języki" -#: cps/web.py:1148 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "Język: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1161 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "Lista kategorii" -#: cps/web.py:1173 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "Kategoria: %(name)s" -#: cps/web.py:1280 +#: cps/web.py:1289 +msgid "Excecution permissions missing" +msgstr "" + +#: cps/web.py:1303 msgid "Statistics" msgstr "Statystyki" -#: cps/web.py:1415 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "Serwer uruchomiony ponownie, proszę odświeżyć stronę" -#: cps/web.py:1417 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "Wykonano wyłączenie serwera, proszę zamknąć okno" -#: cps/web.py:1433 +#: cps/web.py:1485 msgid "Update done" msgstr "Aktualizacja zakończona" -#: cps/web.py:1511 cps/web.py:1524 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "szukaj" -#: cps/web.py:1648 cps/web.py:1655 cps/web.py:1662 cps/web.py:1669 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "Przeczytane książki" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "Nieprzeczytane książki" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "Czytaj książkę" -#: cps/web.py:1725 cps/web.py:2207 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "Proszę wypełnić wszystkie pola!" -#: cps/web.py:1726 cps/web.py:1742 cps/web.py:1747 cps/web.py:1749 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "rejestracja" -#: cps/web.py:1741 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "Wystąpił nieznany błąd. Spróbuj ponownie później." -#: cps/web.py:1746 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "Nazwa użytkownika lub adres e-mail jest już w użyciu." -#: cps/web.py:1764 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Zalogowałeś się jako: '%(nickname)s'" -#: cps/web.py:1769 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "Błędna nazwa użytkownika lub hasło" -#: cps/web.py:1771 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "logowanie" -#: cps/web.py:1788 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "Proszę najpierw skonfigurować ustawienia SMTP poczty e-mail..." -#: cps/web.py:1792 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Książka została pomyślnie wysłana do %(kindlemail)s" -#: cps/web.py:1796 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Wystąpił błąd podczas wysyłania tej książki: %(res)s" -#: cps/web.py:1798 cps/web.py:2291 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "Proszę najpierw skonfigurować adres e-mail swojego kindla..." -#: cps/web.py:1823 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Książka została dodana do półki: %(sname)s" -#: cps/web.py:1843 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Książka została usunięta z półki: %(sname)s" -#: cps/web.py:1861 cps/web.py:1885 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Półka o nazwie '%(title)s' już istnieje." -#: cps/web.py:1866 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "Półka %(title)s została utworzona" -#: cps/web.py:1868 cps/web.py:1896 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "Wystąpił błąd" -#: cps/web.py:1869 cps/web.py:1871 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "utwórz półkę" -#: cps/web.py:1894 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "Półka %(title)s została zmieniona" -#: cps/web.py:1897 cps/web.py:1899 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "Edytuj półkę" -#: cps/web.py:1919 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "pomyślnie usunięto półkę %(name)s" -#: cps/web.py:1941 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "Półka: '%(name)s'" -#: cps/web.py:1972 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Zmieniono kolejność półki: '%(name)s'" -#: cps/web.py:2036 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "Znaleziono istniejące konto dla tego adresu e-mail." -#: cps/web.py:2038 cps/web.py:2042 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "Profil użytkownika %(name)s" -#: cps/web.py:2039 +#: cps/web.py:2194 msgid "Profile updated" msgstr "Zaktualizowano profil" -#: cps/web.py:2053 +#: cps/web.py:2208 msgid "Admin page" msgstr "Portal administracyjny" -#: cps/web.py:2161 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "Konfiguracja Calibre-web została zaktualizowana" -#: cps/web.py:2168 cps/web.py:2174 cps/web.py:2188 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "Podstawowa konfiguracja" -#: cps/web.py:2172 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "Lokalizacja bazy danych jest nieprawidłowa, wpisz poprawną ścieżkę" -#: cps/templates/admin.html:34 cps/web.py:2209 cps/web.py:2261 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "Dodaj nowego użytkownika" -#: cps/web.py:2253 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "Użytkownik '%(user)s' został utworzony" -#: cps/web.py:2257 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "Znaleziono istniejące konto dla tego adresu e-mail lub nazwy użytkownika." -#: cps/web.py:2279 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "Zaktualizowano ustawienia poczty e-mail" -#: cps/web.py:2286 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Testowy e-mail został pomyślnie wysłany do %(kindlemail)s" -#: cps/web.py:2289 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Wystąpił błąd podczas wysyłania testowej wiadomości e-mail: %(res)s" -#: cps/web.py:2293 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "Zaktualizowano ustawienia e-mail" -#: cps/web.py:2294 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "Edytuj ustawienia poczty e-mail" -#: cps/web.py:2322 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "Użytkownik '%(nick)s' został usunięty" -#: cps/web.py:2418 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "Użytkownik '%(nick)s' został zaktualizowany" -#: cps/web.py:2421 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "Wystąpił nieznany błąd." -#: cps/web.py:2424 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "Edytuj użytkownika %(nick)s" -#: cps/web.py:2459 cps/web.py:2463 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "" -#: cps/web.py:2650 cps/web.py:2653 cps/web.py:2763 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "edytuj metadane" -#: cps/web.py:2674 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Rozszerzenie pliku \"%s\" nie jest dozwolone do przesłania na ten serwer" -#: cps/web.py:2680 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "Plik do przesłania musi mieć rozszerzenie" -#: cps/web.py:2697 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Nie udało się utworzyć łącza %s (Odmowa dostępu)." -#: cps/web.py:2702 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Nie można przechowywać pliku %s (Odmowa dostępu)." -#: cps/web.py:2707 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Nie udało się usunąć pliku %s (Odmowa dostępu)." @@ -406,7 +454,8 @@ msgstr "DLS" msgid "Admin" msgstr "Portal administracyjny" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "Pobierz" @@ -454,7 +503,7 @@ msgstr "Wyślij z adresu e-mail" msgid "Change SMTP settings" msgstr "Zmień ustawienia SMTP" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "Konfiguracja" @@ -486,60 +535,64 @@ msgstr "Publiczna rejestracja" msgid "Anonymous browsing" msgstr "Anonimowe przeglądanie" -#: cps/templates/admin.html:78 +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" +msgstr "" + +#: cps/templates/admin.html:80 msgid "Administration" msgstr "Zarządzanie" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "Znacznik czasowy zainstalowanej wersji" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "Znacznik czasowy nowej wersji" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "Połącz ponownie z bazą danych Calibre" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "Uruchom ponownie Calibre Web" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "Zatrzymaj Calibre Web" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "Sprawdź aktualizacje" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "Wykonaj aktualizację" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "Na pewno chcesz uruchomić ponownie Calibre Web?" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "OK" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 -#: cps/templates/book_edit.html:115 cps/templates/book_edit.html:134 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 +#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "Wróć" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "Na pewno chcesz zatrzymać Calibre Web?" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "Aktualizowanie, proszę nie odświeżać strony" @@ -551,12 +604,12 @@ msgstr "" msgid "Book Title" msgstr "Tytuł książki" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:173 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Autor" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:175 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 msgid "Description" msgstr "Opis" @@ -593,74 +646,74 @@ msgstr "Tak" msgid "No" msgstr "Nie" -#: cps/templates/book_edit.html:110 +#: cps/templates/book_edit.html:115 msgid "view book after edit" msgstr "wyświetl książkę po edycji" -#: cps/templates/book_edit.html:113 cps/templates/book_edit.html:146 +#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 msgid "Get metadata" msgstr "Uzyskaj metadane" -#: cps/templates/book_edit.html:114 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "Wyślij" -#: cps/templates/book_edit.html:125 +#: cps/templates/book_edit.html:133 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:128 +#: cps/templates/book_edit.html:136 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:129 +#: cps/templates/book_edit.html:137 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:141 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:149 +#: cps/templates/book_edit.html:157 msgid "Keyword" msgstr "Słowo kluczowe" -#: cps/templates/book_edit.html:150 +#: cps/templates/book_edit.html:158 msgid " Search keyword " msgstr " Szukaj słowa kluczowego " -#: cps/templates/book_edit.html:152 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 msgid "Go!" msgstr "Idź!" -#: cps/templates/book_edit.html:153 +#: cps/templates/book_edit.html:161 msgid "Click the cover to load metadata to the form" msgstr "Kliknij okładkę, aby załadować metadane do formularza" -#: cps/templates/book_edit.html:157 cps/templates/book_edit.html:170 +#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 msgid "Loading..." msgstr "Ładowanie..." -#: cps/templates/book_edit.html:160 +#: cps/templates/book_edit.html:168 msgid "Close" msgstr "Zamknij" -#: cps/templates/book_edit.html:171 +#: cps/templates/book_edit.html:179 msgid "Search error!" msgstr "Błąd wyszukiwania!" -#: cps/templates/book_edit.html:172 +#: cps/templates/book_edit.html:180 msgid "No Result! Please try anonther keyword." msgstr "Brak wyników! Spróbuj innego słowa kluczowego." -#: cps/templates/book_edit.html:174 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Wydawca" -#: cps/templates/book_edit.html:176 +#: cps/templates/book_edit.html:184 msgid "Source" msgstr "Źródło" @@ -725,76 +778,80 @@ msgstr "Włącz anonimowe przeglądanie" msgid "Enable public registration" msgstr "Włącz publiczną rejestrację" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "Domyślne ustawienia dla nowych użytkowników" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "Użytkownik z uprawnieniami administratora" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "Zezwalaj na pobieranie" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "Zezwalaj na wysyłanie" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "Zezwalaj na edycję" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "Zezwalaj na zmianę hasła" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Zaloguj się" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "Książka" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "z" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "język" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "Data publikacji" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "Czytaj" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "Opis:" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "Czytaj w przeglądarce" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "Książka" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "z" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "język" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "Data publikacji" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "Czytaj" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "Opis:" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "Dodaj do półki" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "Edytuj metadane" @@ -876,16 +933,6 @@ msgstr "Ostatnie książki" msgid "Show Random Books" msgstr "Pokazuj losowe książki" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "Przeczytane książki" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "Nieprzeczytane książki" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "Autorzy" @@ -950,20 +997,24 @@ msgstr "Utwórz półkę" msgid "About" msgstr "O programie" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "Nazwa użytkownika" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "Hasło" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "Zapamiętaj mnie" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "Calibre Web katalog ebooków" @@ -1001,6 +1052,18 @@ msgstr "Adres e-mail" msgid "Your email address" msgstr "Twój adres e-mail" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "Brak wyników dla:" @@ -1037,11 +1100,11 @@ msgstr "Edytuj nazwę półki" msgid "Change order" msgstr "Zmień sortowanie" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "" diff --git a/cps/translations/ru/LC_MESSAGES/messages.po b/cps/translations/ru/LC_MESSAGES/messages.po index 6d8ee529..67a27697 100644 --- a/cps/translations/ru/LC_MESSAGES/messages.po +++ b/cps/translations/ru/LC_MESSAGES/messages.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-05-01 16:20+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2017-04-30 00:47+0300\n" "Last-Translator: Pavel Korovin \n" "Language: ru\n" @@ -24,360 +24,408 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1262 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "Отсутствует" -#: cps/helper.py:165 +#: cps/helper.py:77 +#, python-format +msgid "kindlegen binary %(kindlepath)s not found" +msgstr "" + +#: cps/helper.py:83 +#, python-format +msgid "epub format not found for book id: %(book)d" +msgstr "" + +#: cps/helper.py:93 +msgid "kindlegen failed, no excecution permissions" +msgstr "" + +#: cps/helper.py:109 +#, python-format +msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" +msgstr "" + +#: cps/helper.py:186 #, python-format msgid "Failed to send mail: %s" msgstr "Ошибка отправки письма: %s" -#: cps/helper.py:172 +#: cps/helper.py:193 msgid "Calibre-web test email" msgstr "Тестовое письмо от Calibre-web" -#: cps/helper.py:173 cps/helper.py:185 +#: cps/helper.py:194 cps/helper.py:206 msgid "This email has been sent via calibre web." msgstr "Письмо было отправлено через calibre web" -#: cps/helper.py:182 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "Отправить на Kindle" -#: cps/helper.py:202 cps/helper.py:217 +#: cps/helper.py:223 cps/helper.py:236 msgid "Could not find any formats suitable for sending by email" msgstr "Невозоможно найти формат, подходящий для отправки по email" -#: cps/helper.py:211 -msgid "Could not convert epub to mobi" -msgstr "Невозможно конвертировать epub в mobi" - -#: cps/ub.py:487 +#: cps/ub.py:518 msgid "Guest" msgstr "Гость" -#: cps/web.py:921 +#: cps/web.py:937 msgid "Requesting update package" msgstr "Проверка обновлений" -#: cps/web.py:922 +#: cps/web.py:938 msgid "Downloading update package" msgstr "Загрузка обновлений" -#: cps/web.py:923 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "Распаковка обновлений" -#: cps/web.py:924 +#: cps/web.py:940 msgid "Files are replaced" msgstr "Файлы заменены" -#: cps/web.py:925 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "Соеднинения с базой данных закрыты" -#: cps/web.py:926 +#: cps/web.py:942 msgid "Server is stopped" msgstr "Сервер остановлен" -#: cps/web.py:927 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "Обновления установлены, нажмите okay и перезагрузите страницу" -#: cps/web.py:1001 +#: cps/web.py:1017 msgid "Latest Books" msgstr "Последние поступления" -#: cps/web.py:1032 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "Популярные книги (часто загружаемые)" -#: cps/web.py:1042 +#: cps/web.py:1058 msgid "Best rated books" msgstr "Книги с наивысшим рейтингом" -#: cps/templates/index.xml:36 cps/web.py:1051 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "Случайный выбор" -#: cps/web.py:1064 +#: cps/web.py:1080 msgid "Author list" msgstr "Авторы" -#: cps/web.py:1076 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "Автор:%(name)s" -#: cps/web.py:1078 cps/web.py:1106 cps/web.py:1239 cps/web.py:1699 -#: cps/web.py:2638 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "Невозможно открыть книгу. Файл не существует или недоступен." -#: cps/templates/index.xml:71 cps/web.py:1092 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "Серии" -#: cps/web.py:1104 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "Серии: %(serie)s" -#: cps/web.py:1137 +#: cps/web.py:1153 msgid "Available languages" msgstr "Языки" -#: cps/web.py:1152 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "Язык: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1165 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "Категории" -#: cps/web.py:1177 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "Категория: %(name)s" -#: cps/web.py:1284 +#: cps/web.py:1289 +msgid "Excecution permissions missing" +msgstr "" + +#: cps/web.py:1303 msgid "Statistics" msgstr "Статистика" -#: cps/web.py:1442 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "Сервер перезагружен, пожалуйста, перезагрузите страницу" -#: cps/web.py:1444 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "Производится остановка сервера, пожалуйста, закройте окно" -#: cps/web.py:1460 +#: cps/web.py:1485 msgid "Update done" msgstr "Обновление закончено" -#: cps/web.py:1538 cps/web.py:1551 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "поиск" -#: cps/web.py:1675 cps/web.py:1682 cps/web.py:1689 cps/web.py:1696 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "Прочитанные" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "Непрочитанные" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "Читать книгу" -#: cps/web.py:1752 cps/web.py:2234 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "Пожалуйста, заполните все поля!" -#: cps/web.py:1753 cps/web.py:1769 cps/web.py:1774 cps/web.py:1776 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "зарегистрироваться" -#: cps/web.py:1768 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "Неизвестная ошибка. Пожалуйста, попробуйте позже." -#: cps/web.py:1773 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "Имя пользователя или адрес эл. почты уже используется" -#: cps/web.py:1791 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "Вы вошли как пользователь '%(nickname)s'" -#: cps/web.py:1796 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "Ошибка в имени пользователя или пароле" -#: cps/web.py:1798 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "войти" -#: cps/web.py:1815 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "Пожалуйста, сначала сконфигурируйте параметры SMTP" -#: cps/web.py:1819 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "Книга успешно отправлена на %(kindlemail)s" -#: cps/web.py:1823 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "Ошибка при отправке книги: %(res)s" -#: cps/web.py:1825 cps/web.py:2318 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "Пожалуйста, сначала укажите ваш kindle email..." -#: cps/web.py:1850 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "Книга добавлена на книжную полку: %(sname)s" -#: cps/web.py:1870 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "Книга удалена с книжной полки: %(sname)s" -#: cps/web.py:1888 cps/web.py:1912 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "Книжкная полка с названием '%(title)s' уже существует." -#: cps/web.py:1893 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "Создана книжная полка %(title)s" -#: cps/web.py:1895 cps/web.py:1923 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "Произошла ошибка" -#: cps/web.py:1896 cps/web.py:1898 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "создать книжную полку" -#: cps/web.py:1921 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "Книжная полка %(title)s изменена" -#: cps/web.py:1924 cps/web.py:1926 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "Изменить книжную полку" -#: cps/web.py:1946 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "Книжная полка %(name)s удалена" -#: cps/web.py:1968 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "Книжная полка: '%(name)s'" -#: cps/web.py:1999 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "Изменить расположение книжной полки '%(name)s'" -#: cps/web.py:2063 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "Найдена учётная запись для для данного адреса email." -#: cps/web.py:2065 cps/web.py:2069 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "Профиль %(name)s" -#: cps/web.py:2066 +#: cps/web.py:2194 msgid "Profile updated" msgstr "Профиль обновлён" -#: cps/web.py:2080 +#: cps/web.py:2208 msgid "Admin page" msgstr "Администрирование" -#: cps/web.py:2188 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "Конфигурация Calibre-web обновлена" -#: cps/web.py:2195 cps/web.py:2201 cps/web.py:2215 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "Настройки сервера" -#: cps/web.py:2199 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "Неверный путь к фалу БД, пожалуйста, укажите правильное расположение БД" -#: cps/templates/admin.html:34 cps/web.py:2236 cps/web.py:2288 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "Добавить пользователя" -#: cps/web.py:2280 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "Пользователь '%(user)s' добавлен" -#: cps/web.py:2284 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "Для указанного адреса или имени найдена существующая учётная запись." -#: cps/web.py:2306 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "Настройки почты изменены" -#: cps/web.py:2313 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "Тестовое сообщение успешно отправлено на адрес %(kindlemail)s" -#: cps/web.py:2316 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "Ошибка отправки тестового сообщения: %(res)s" -#: cps/web.py:2320 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "Обновлены настройки e-mail" -#: cps/web.py:2321 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "Изменить почтовые настройки" -#: cps/web.py:2349 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "Пользователь '%(nick)s' удалён" -#: cps/web.py:2445 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "Пользователь '%(nick)s' обновлён" -#: cps/web.py:2448 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "Произошла неизвестная ошибка." -#: cps/web.py:2451 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "Изменить пользователя %(nick)s" -#: cps/web.py:2486 cps/web.py:2490 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "неизвестно" -#: cps/web.py:2633 cps/web.py:2636 cps/web.py:2746 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "изменить метаданные" -#: cps/web.py:2657 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "Запрещена загрузка файлов с расширением \"%s\"" -#: cps/web.py:2663 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "Загружаемый файл должен иметь расширение" -#: cps/web.py:2680 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "Ошибка при создании пути %s (доступ запрещён)" -#: cps/web.py:2685 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "Ошибка записи файоа %s (доступ запрещён)" -#: cps/web.py:2690 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "Ошибка удаления файла %s (доступ запрещён)" @@ -406,7 +454,8 @@ msgstr "DLS" msgid "Admin" msgstr "Управление" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "Скачать" @@ -454,7 +503,7 @@ msgstr "Отправитель" msgid "Change SMTP settings" msgstr "Изменить настройки SMTP" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "Настройки сервера" @@ -486,60 +535,64 @@ msgstr "Публичная регистрация" msgid "Anonymous browsing" msgstr "Анонимный просмотр" -#: cps/templates/admin.html:78 +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" +msgstr "" + +#: cps/templates/admin.html:80 msgid "Administration" msgstr "Управление" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "Переподключиться к БД Calibre" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "Перезагрузить Calibre-web" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "Остановить Calibre-web" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "Проверка обновлений" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "Установить обновления" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "Вы действительно хотите перезагрузить Calibre-web?" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "Ok" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 -#: cps/templates/book_edit.html:115 cps/templates/book_edit.html:137 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 +#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "Назад" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "Вы действительно хотите остановить Calibre-web?" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "Установка обновлений, пожалуйста, не обновляйте страницу." @@ -551,12 +604,12 @@ msgstr "Удалить книгу" msgid "Book Title" msgstr "Название" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:176 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 #: cps/templates/search_form.html:10 msgid "Author" msgstr "Автор" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:178 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 msgid "Description" msgstr "Описание" @@ -593,74 +646,74 @@ msgstr "Да" msgid "No" msgstr "Нет" -#: cps/templates/book_edit.html:110 +#: cps/templates/book_edit.html:115 msgid "view book after edit" msgstr "смотреть книгу после редактирования" -#: cps/templates/book_edit.html:113 cps/templates/book_edit.html:149 +#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 msgid "Get metadata" msgstr "Получить метаданные" -#: cps/templates/book_edit.html:114 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "Отправить" -#: cps/templates/book_edit.html:128 +#: cps/templates/book_edit.html:133 msgid "Are really you sure?" msgstr "Вы действительно уверены?" -#: cps/templates/book_edit.html:131 +#: cps/templates/book_edit.html:136 msgid "Book will be deleted from Calibre database" msgstr "Книга будет удалена из БД Calibre" -#: cps/templates/book_edit.html:132 +#: cps/templates/book_edit.html:137 msgid "and from hard disk" msgstr "и с диска" -#: cps/templates/book_edit.html:136 +#: cps/templates/book_edit.html:141 msgid "Delete" msgstr "Удалить" -#: cps/templates/book_edit.html:152 +#: cps/templates/book_edit.html:157 msgid "Keyword" msgstr "Ключевое слово" -#: cps/templates/book_edit.html:153 +#: cps/templates/book_edit.html:158 msgid " Search keyword " msgstr " Поиск по ключевому слову" -#: cps/templates/book_edit.html:155 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 msgid "Go!" msgstr "Искать" -#: cps/templates/book_edit.html:156 +#: cps/templates/book_edit.html:161 msgid "Click the cover to load metadata to the form" msgstr "Нажмите на обложку, чтобы получить метаданные" -#: cps/templates/book_edit.html:160 cps/templates/book_edit.html:173 +#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 msgid "Loading..." msgstr "Загрузка..." -#: cps/templates/book_edit.html:163 +#: cps/templates/book_edit.html:168 msgid "Close" msgstr "Закрыть" -#: cps/templates/book_edit.html:174 +#: cps/templates/book_edit.html:179 msgid "Search error!" msgstr "Ошибка поиска!" -#: cps/templates/book_edit.html:175 +#: cps/templates/book_edit.html:180 msgid "No Result! Please try anonther keyword." msgstr "Нет результатов. Пожалуйста, попробуйте другое ключевое слово" -#: cps/templates/book_edit.html:177 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "Издатель" -#: cps/templates/book_edit.html:179 +#: cps/templates/book_edit.html:184 msgid "Source" msgstr "Источник" @@ -724,76 +777,80 @@ msgstr "Разрешить анонимный просмотр" msgid "Enable public registration" msgstr "Разрешить публичную регистрацию" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "Настройки по умолчанию для новых пользователей" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "Управление сервером" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "Разрешить скачивание с сервера" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "Разрешить загрузку на сервер" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "Разрешить редактирование книг" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "Разрешить удаление книг" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "Разрешить смену пароля" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "Разрешить редактирование публичных книжных полок" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "Имя пользователя" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "Книга" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "из" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "Язык" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "Опубликовано" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "Прочитано" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "Описание:" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "Открыть в браузере" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "Книга" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "из" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "Язык" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "Опубликовано" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "Прочитано" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "Описание:" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "Добавить на книжную полку" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "Редактировать метаданные" @@ -873,16 +930,6 @@ msgstr "Последние поступления" msgid "Show Random Books" msgstr "Показывать случайные книги" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "Прочитанные" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "Непрочитанные" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "Авторы" @@ -947,20 +994,24 @@ msgstr "Создать книжную полку" msgid "About" msgstr "О программе" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "Имя пользователя" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "Пароль" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "Запомнить меня" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "Каталог электронных книг Calibre Web" @@ -997,6 +1048,18 @@ msgstr "Электронная почта" msgid "Your email address" msgstr "Ваш email-адрес" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "Ничего не найдено по запросу:" @@ -1033,11 +1096,11 @@ msgstr "Изменить имя книжной полки" msgid "Change order" msgstr "Изменить порядок" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "Вы действительно хотите удалить эту книжную полку?" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "Книжная полка будет безвозвратно удалена для всех" diff --git a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po index 3751fb8d..44b85c3c 100644 --- a/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po +++ b/cps/translations/zh_Hans_CN/LC_MESSAGES/messages.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: Calibre-web\n" "Report-Msgid-Bugs-To: https://github.com/janeczku/calibre-web\n" -"POT-Creation-Date: 2017-04-14 20:25+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: 2017-01-06 17:00+0000\n" "Last-Translator: dalin \n" "Language: zh_Hans_CN\n" @@ -24,360 +24,408 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:113 cps/book_formats.py:117 cps/web.py:1258 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "未安装" -#: cps/helper.py:165 +#: cps/helper.py:77 +#, python-format +msgid "kindlegen binary %(kindlepath)s not found" +msgstr "" + +#: cps/helper.py:83 +#, python-format +msgid "epub format not found for book id: %(book)d" +msgstr "" + +#: cps/helper.py:93 +msgid "kindlegen failed, no excecution permissions" +msgstr "" + +#: cps/helper.py:109 +#, python-format +msgid "Kindlegen failed with Error %(error)s. Message: %(message)s" +msgstr "" + +#: cps/helper.py:186 #, python-format msgid "Failed to send mail: %s" msgstr "发送邮件失败: %s" -#: cps/helper.py:172 +#: cps/helper.py:193 msgid "Calibre-web test email" msgstr "Calibre-web 测试邮件" -#: cps/helper.py:173 cps/helper.py:185 +#: cps/helper.py:194 cps/helper.py:206 msgid "This email has been sent via calibre web." msgstr "此邮件由calibre web发送" -#: cps/helper.py:182 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "发送到Kindle" -#: cps/helper.py:202 cps/helper.py:217 +#: cps/helper.py:223 cps/helper.py:236 msgid "Could not find any formats suitable for sending by email" msgstr "无法找到适合邮件发送的格式" -#: cps/helper.py:211 -msgid "Could not convert epub to mobi" -msgstr "无法转换epub到mobi" - -#: cps/ub.py:481 +#: cps/ub.py:518 msgid "Guest" msgstr "游客" -#: cps/web.py:917 +#: cps/web.py:937 msgid "Requesting update package" msgstr "正在请求更新包" -#: cps/web.py:918 +#: cps/web.py:938 msgid "Downloading update package" msgstr "正在下载更新包" -#: cps/web.py:919 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "正在解压更新包" -#: cps/web.py:920 +#: cps/web.py:940 msgid "Files are replaced" msgstr "文件已替换" -#: cps/web.py:921 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "数据库连接已关闭" -#: cps/web.py:922 +#: cps/web.py:942 msgid "Server is stopped" msgstr "服务器已停止" -#: cps/web.py:923 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "更新完成,请按确定并刷新页面" -#: cps/web.py:997 +#: cps/web.py:1017 msgid "Latest Books" msgstr "最新书籍" -#: cps/web.py:1028 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "热门书籍(最多下载)" -#: cps/web.py:1038 +#: cps/web.py:1058 msgid "Best rated books" msgstr "最高评分书籍" -#: cps/templates/index.xml:36 cps/web.py:1047 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "随机书籍" -#: cps/web.py:1060 +#: cps/web.py:1080 msgid "Author list" msgstr "作者列表" -#: cps/web.py:1072 +#: cps/web.py:1092 #, python-forma, python-format msgid "Author: %(name)s" msgstr "作者: %(name)s" -#: cps/web.py:1074 cps/web.py:1102 cps/web.py:1235 cps/web.py:1672 -#: cps/web.py:2655 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "无法打开电子书。 文件不存在或者文件不可访问:" -#: cps/templates/index.xml:71 cps/web.py:1088 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "丛书列表" -#: cps/web.py:1100 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "丛书: %(serie)s" -#: cps/web.py:1133 +#: cps/web.py:1153 msgid "Available languages" msgstr "可用语言" -#: cps/web.py:1148 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "语言: %(name)s" -#: cps/templates/index.xml:64 cps/web.py:1161 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "分类列表" -#: cps/web.py:1173 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "分类: %(name)s" -#: cps/web.py:1280 +#: cps/web.py:1289 +msgid "Excecution permissions missing" +msgstr "" + +#: cps/web.py:1303 msgid "Statistics" msgstr "统计" -#: cps/web.py:1415 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "服务器已重启,请刷新页面" -#: cps/web.py:1417 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "正在关闭服务器,请关闭窗口" -#: cps/web.py:1433 +#: cps/web.py:1485 msgid "Update done" msgstr "更新完成" -#: cps/web.py:1511 cps/web.py:1524 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "搜索" -#: cps/web.py:1648 cps/web.py:1655 cps/web.py:1662 cps/web.py:1669 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "已读书籍" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "未读书籍" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "阅读一本书" -#: cps/web.py:1725 cps/web.py:2207 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "请填写所有字段" -#: cps/web.py:1726 cps/web.py:1742 cps/web.py:1747 cps/web.py:1749 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "注册" -#: cps/web.py:1741 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "发生一个未知错误。请稍后再试。" -#: cps/web.py:1746 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "此用户名或邮箱已被使用。" -#: cps/web.py:1764 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "您现在已以'%(nickname)s'身份登录" -#: cps/web.py:1769 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "用户名或密码错误" -#: cps/web.py:1771 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "登录" -#: cps/web.py:1788 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "请先配置SMTP邮箱..." -#: cps/web.py:1792 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "此书已被成功发给 %(kindlemail)s" -#: cps/web.py:1796 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "发送这本书的时候出现错误: %(res)s" -#: cps/web.py:1798 cps/web.py:2291 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "请先配置您的kindle电子邮箱地址..." -#: cps/web.py:1823 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "此书已被添加到书架: %(sname)s" -#: cps/web.py:1843 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "此书已从书架 %(sname)s 中删除" -#: cps/web.py:1861 cps/web.py:1885 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "已存在书架 '%(title)s'。" -#: cps/web.py:1866 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "书架 %(title)s 已被创建" -#: cps/web.py:1868 cps/web.py:1896 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "发生错误" -#: cps/web.py:1869 cps/web.py:1871 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "创建书架" -#: cps/web.py:1894 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "书架 %(title)s 已被修改" -#: cps/web.py:1897 cps/web.py:1899 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "编辑书架" -#: cps/web.py:1919 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "成功删除书架 %(name)s" -#: cps/web.py:1941 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "书架: '%(name)s'" -#: cps/web.py:1972 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "修改书架 '%(name)s' 顺序" -#: cps/web.py:2036 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "找到已使用此邮箱的账号。" -#: cps/web.py:2038 cps/web.py:2042 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "%(name)s 的资料" -#: cps/web.py:2039 +#: cps/web.py:2194 msgid "Profile updated" msgstr "资料已更新" -#: cps/web.py:2053 +#: cps/web.py:2208 msgid "Admin page" msgstr "管理页" -#: cps/web.py:2161 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "Calibre-web配置已更新" -#: cps/web.py:2168 cps/web.py:2174 cps/web.py:2188 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "基本配置" -#: cps/web.py:2172 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "DB位置无效,请输入正确路径" -#: cps/templates/admin.html:34 cps/web.py:2209 cps/web.py:2261 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "添加新用户" -#: cps/web.py:2253 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "用户 '%(user)s' 已被创建" -#: cps/web.py:2257 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "已存在使用此邮箱或昵称的账号。" -#: cps/web.py:2279 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "邮箱设置已更新" -#: cps/web.py:2286 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "测试邮件已成功发送到 %(kindlemail)s" -#: cps/web.py:2289 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "发送测试邮件时发生错误: %(res)s" -#: cps/web.py:2293 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "E-Mail 设置已更新" -#: cps/web.py:2294 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "编辑邮箱设置" -#: cps/web.py:2322 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "用户 '%(nick)s' 已被删除" -#: cps/web.py:2418 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "用户 '%(nick)s' 已被更新" -#: cps/web.py:2421 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "发生未知错误。" -#: cps/web.py:2424 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "编辑用户 %(nick)s" -#: cps/web.py:2459 cps/web.py:2463 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "" -#: cps/web.py:2650 cps/web.py:2653 cps/web.py:2763 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "编辑元数据" -#: cps/web.py:2674 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "不能上传后缀为 \"%s\" 的文件到此服务器" -#: cps/web.py:2680 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "要上传的文件必须有一个后缀" -#: cps/web.py:2697 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "创建路径 %s 失败(权限拒绝)。" -#: cps/web.py:2702 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "存储文件 %s 失败(权限拒绝)。" -#: cps/web.py:2707 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "删除文件 %s 失败(权限拒绝)。" @@ -406,7 +454,8 @@ msgstr "" msgid "Admin" msgstr "管理" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "下载" @@ -454,7 +503,7 @@ msgstr "来自邮箱" msgid "Change SMTP settings" msgstr "修改SMTP设置" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "配置" @@ -486,60 +535,64 @@ msgstr "开放注册" msgid "Anonymous browsing" msgstr "匿名浏览" -#: cps/templates/admin.html:78 +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" +msgstr "" + +#: cps/templates/admin.html:80 msgid "Administration" msgstr "管理" -#: cps/templates/admin.html:80 +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "当前提交时间戳" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "最新提交时间戳" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "重新连接到Calibre数据库" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "重启 Calibre-web" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "停止 Calibre-web" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "检查更新" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "执行更新" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "您确定要重启 Calibre-web 吗?" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "确定" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 -#: cps/templates/book_edit.html:115 cps/templates/book_edit.html:134 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 +#: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "后退" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "您确定要关闭 Calibre-web 吗?" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "正在更新,请不要刷新页面" @@ -551,12 +604,12 @@ msgstr "" msgid "Book Title" msgstr "书名" -#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:173 +#: cps/templates/book_edit.html:26 cps/templates/book_edit.html:181 #: cps/templates/search_form.html:10 msgid "Author" msgstr "作者" -#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:175 +#: cps/templates/book_edit.html:30 cps/templates/book_edit.html:183 msgid "Description" msgstr "简介" @@ -593,74 +646,74 @@ msgstr "确认" msgid "No" msgstr "" -#: cps/templates/book_edit.html:110 +#: cps/templates/book_edit.html:115 msgid "view book after edit" msgstr "编辑后查看书籍" -#: cps/templates/book_edit.html:113 cps/templates/book_edit.html:146 +#: cps/templates/book_edit.html:118 cps/templates/book_edit.html:154 msgid "Get metadata" msgstr "获取元数据" -#: cps/templates/book_edit.html:114 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "提交" -#: cps/templates/book_edit.html:125 +#: cps/templates/book_edit.html:133 msgid "Are really you sure?" msgstr "" -#: cps/templates/book_edit.html:128 +#: cps/templates/book_edit.html:136 msgid "Book will be deleted from Calibre database" msgstr "" -#: cps/templates/book_edit.html:129 +#: cps/templates/book_edit.html:137 msgid "and from hard disk" msgstr "" -#: cps/templates/book_edit.html:133 +#: cps/templates/book_edit.html:141 msgid "Delete" msgstr "" -#: cps/templates/book_edit.html:149 +#: cps/templates/book_edit.html:157 msgid "Keyword" msgstr "关键字" -#: cps/templates/book_edit.html:150 +#: cps/templates/book_edit.html:158 msgid " Search keyword " msgstr "搜索关键字" -#: cps/templates/book_edit.html:152 cps/templates/layout.html:60 +#: cps/templates/book_edit.html:160 cps/templates/layout.html:60 msgid "Go!" msgstr "走起!" -#: cps/templates/book_edit.html:153 +#: cps/templates/book_edit.html:161 msgid "Click the cover to load metadata to the form" msgstr "点击封面加载元数据到表单" -#: cps/templates/book_edit.html:157 cps/templates/book_edit.html:170 +#: cps/templates/book_edit.html:165 cps/templates/book_edit.html:178 msgid "Loading..." msgstr "加载中..." -#: cps/templates/book_edit.html:160 +#: cps/templates/book_edit.html:168 msgid "Close" msgstr "关闭" -#: cps/templates/book_edit.html:171 +#: cps/templates/book_edit.html:179 msgid "Search error!" msgstr "搜索错误" -#: cps/templates/book_edit.html:172 +#: cps/templates/book_edit.html:180 msgid "No Result! Please try anonther keyword." msgstr "没有结果!请尝试别的关键字." -#: cps/templates/book_edit.html:174 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "出版社" -#: cps/templates/book_edit.html:176 +#: cps/templates/book_edit.html:184 msgid "Source" msgstr "来源" @@ -724,76 +777,80 @@ msgstr "启用匿名浏览" msgid "Enable public registration" msgstr "启用注册" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "新用户默认设置" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "管理用户" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "允许下载" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "允许上传" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "允许编辑" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "允许修改密码" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "登录" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "语言" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "出版日期" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "简介:" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "在浏览器中阅读" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "语言" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "出版日期" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "简介:" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "添加到书架" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "编辑元数据" @@ -873,16 +930,6 @@ msgstr "最新书籍" msgid "Show Random Books" msgstr "显示随机书籍" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "已读书籍" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "未读书籍" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "作者" @@ -947,20 +994,24 @@ msgstr "创建书架" msgid "About" msgstr "关于" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "用户名" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "密码" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "记住我" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "" @@ -997,6 +1048,18 @@ msgstr "邮箱地址" msgid "Your email address" msgstr "您的邮箱地址" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "找不到结果:" @@ -1033,11 +1096,11 @@ msgstr "编辑书架名" msgid "Change order" msgstr "修改顺序" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "" diff --git a/cps/web.py b/cps/web.py index d093ec5d..5d4d0fef 100755 --- a/cps/web.py +++ b/cps/web.py @@ -2092,7 +2092,7 @@ def show_shelf(shelf_id): return render_title_template('shelf.html', entries=result, title=_(u"Shelf: '%(name)s'", name=shelf.name), shelf=shelf) else: - flash(_(u"Error opening shelf. Shelf does not exist or file is not accessible"), category="error") + flash(_(u"Error opening shelf. Shelf does not exist or is not accessible"), category="error") return redirect(url_for("index")) diff --git a/messages.pot b/messages.pot index 8fc4f38b..e5f64e14 100644 --- a/messages.pot +++ b/messages.pot @@ -8,16 +8,16 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2017-06-24 12:58+0200\n" +"POT-Creation-Date: 2017-07-08 19:46+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.3.4\n" +"Generated-By: Babel 2.4.0\n" -#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1262 +#: cps/book_formats.py:118 cps/book_formats.py:122 cps/web.py:1278 msgid "not installed" msgstr "" @@ -53,7 +53,7 @@ msgstr "" msgid "This email has been sent via calibre web." msgstr "" -#: cps/helper.py:203 cps/templates/detail.html:146 +#: cps/helper.py:203 cps/templates/detail.html:47 msgid "Send to Kindle" msgstr "" @@ -61,333 +61,362 @@ msgstr "" msgid "Could not find any formats suitable for sending by email" msgstr "" -#: cps/ub.py:487 +#: cps/ub.py:518 msgid "Guest" msgstr "" -#: cps/web.py:921 +#: cps/web.py:937 msgid "Requesting update package" msgstr "" -#: cps/web.py:922 +#: cps/web.py:938 msgid "Downloading update package" msgstr "" -#: cps/web.py:923 +#: cps/web.py:939 msgid "Unzipping update package" msgstr "" -#: cps/web.py:924 +#: cps/web.py:940 msgid "Files are replaced" msgstr "" -#: cps/web.py:925 +#: cps/web.py:941 msgid "Database connections are closed" msgstr "" -#: cps/web.py:926 +#: cps/web.py:942 msgid "Server is stopped" msgstr "" -#: cps/web.py:927 +#: cps/web.py:943 msgid "Update finished, please press okay and reload page" msgstr "" -#: cps/web.py:1001 +#: cps/web.py:1017 msgid "Latest Books" msgstr "" -#: cps/web.py:1032 +#: cps/web.py:1048 msgid "Hot Books (most downloaded)" msgstr "" -#: cps/web.py:1042 +#: cps/web.py:1058 msgid "Best rated books" msgstr "" -#: cps/templates/index.xml:36 cps/web.py:1051 +#: cps/templates/index.xml:36 cps/web.py:1067 msgid "Random Books" msgstr "" -#: cps/web.py:1064 +#: cps/web.py:1080 msgid "Author list" msgstr "" -#: cps/web.py:1076 +#: cps/web.py:1092 #, python-format msgid "Author: %(name)s" msgstr "" -#: cps/web.py:1078 cps/web.py:1106 cps/web.py:1239 cps/web.py:1716 -#: cps/web.py:2672 +#: cps/web.py:1094 cps/web.py:1122 cps/web.py:1255 cps/web.py:1736 msgid "Error opening eBook. File does not exist or file is not accessible:" msgstr "" -#: cps/templates/index.xml:71 cps/web.py:1092 +#: cps/templates/index.xml:71 cps/web.py:1108 msgid "Series list" msgstr "" -#: cps/web.py:1104 +#: cps/web.py:1120 #, python-format msgid "Series: %(serie)s" msgstr "" -#: cps/web.py:1137 +#: cps/web.py:1153 msgid "Available languages" msgstr "" -#: cps/web.py:1152 +#: cps/web.py:1168 #, python-format msgid "Language: %(name)s" msgstr "" -#: cps/templates/index.xml:64 cps/web.py:1165 +#: cps/templates/index.xml:64 cps/web.py:1181 msgid "Category list" msgstr "" -#: cps/web.py:1177 +#: cps/web.py:1193 #, python-format msgid "Category: %(name)s" msgstr "" -#: cps/web.py:1273 +#: cps/web.py:1289 msgid "Excecution permissions missing" msgstr "" -#: cps/web.py:1287 +#: cps/web.py:1303 msgid "Statistics" msgstr "" -#: cps/web.py:1451 +#: cps/web.py:1467 msgid "Server restarted, please reload page" msgstr "" -#: cps/web.py:1453 +#: cps/web.py:1469 msgid "Performing shutdown of server, please close window" msgstr "" -#: cps/web.py:1469 +#: cps/web.py:1485 msgid "Update done" msgstr "" -#: cps/web.py:1547 cps/web.py:1560 +#: cps/web.py:1563 cps/web.py:1576 msgid "search" msgstr "" -#: cps/web.py:1702 cps/web.py:1704 cps/web.py:1706 cps/web.py:1713 +#: cps/templates/index.xml:43 cps/templates/index.xml:47 +#: cps/templates/layout.html:132 cps/web.py:1652 +msgid "Read Books" +msgstr "" + +#: cps/templates/index.xml:50 cps/templates/index.xml:54 +#: cps/templates/layout.html:133 cps/web.py:1655 +msgid "Unread Books" +msgstr "" + +#: cps/web.py:1722 cps/web.py:1724 cps/web.py:1726 cps/web.py:1733 msgid "Read a Book" msgstr "" -#: cps/web.py:1769 cps/web.py:2251 +#: cps/web.py:1789 cps/web.py:2366 msgid "Please fill out all fields!" msgstr "" -#: cps/web.py:1770 cps/web.py:1786 cps/web.py:1791 cps/web.py:1793 +#: cps/web.py:1790 cps/web.py:1806 cps/web.py:1811 cps/web.py:1813 msgid "register" msgstr "" -#: cps/web.py:1785 +#: cps/web.py:1805 msgid "An unknown error occured. Please try again later." msgstr "" -#: cps/web.py:1790 +#: cps/web.py:1810 msgid "This username or email address is already in use." msgstr "" -#: cps/web.py:1808 +#: cps/web.py:1829 cps/web.py:1925 #, python-format msgid "you are now logged in as: '%(nickname)s'" msgstr "" -#: cps/web.py:1813 +#: cps/web.py:1834 msgid "Wrong Username or Password" msgstr "" -#: cps/web.py:1815 +#: cps/web.py:1840 cps/web.py:1861 msgid "login" msgstr "" -#: cps/web.py:1832 +#: cps/web.py:1873 cps/web.py:1904 +msgid "Token not found" +msgstr "" + +#: cps/web.py:1881 cps/web.py:1912 +msgid "Token has expired" +msgstr "" + +#: cps/web.py:1889 +msgid "Success! Please return to your device" +msgstr "" + +#: cps/web.py:1939 msgid "Please configure the SMTP mail settings first..." msgstr "" -#: cps/web.py:1836 +#: cps/web.py:1943 #, python-format msgid "Book successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:1840 +#: cps/web.py:1947 #, python-format msgid "There was an error sending this book: %(res)s" msgstr "" -#: cps/web.py:1842 cps/web.py:2335 +#: cps/web.py:1949 cps/web.py:2450 msgid "Please configure your kindle email address first..." msgstr "" -#: cps/web.py:1867 +#: cps/web.py:1974 #, python-format msgid "Book has been added to shelf: %(sname)s" msgstr "" -#: cps/web.py:1887 +#: cps/web.py:1994 #, python-format msgid "Book has been removed from shelf: %(sname)s" msgstr "" -#: cps/web.py:1905 cps/web.py:1929 +#: cps/web.py:2012 cps/web.py:2036 #, python-format msgid "A shelf with the name '%(title)s' already exists." msgstr "" -#: cps/web.py:1910 +#: cps/web.py:2017 #, python-format msgid "Shelf %(title)s created" msgstr "" -#: cps/web.py:1912 cps/web.py:1940 +#: cps/web.py:2019 cps/web.py:2047 msgid "There was an error" msgstr "" -#: cps/web.py:1913 cps/web.py:1915 +#: cps/web.py:2020 cps/web.py:2022 msgid "create a shelf" msgstr "" -#: cps/web.py:1938 +#: cps/web.py:2045 #, python-format msgid "Shelf %(title)s changed" msgstr "" -#: cps/web.py:1941 cps/web.py:1943 +#: cps/web.py:2048 cps/web.py:2050 msgid "Edit a shelf" msgstr "" -#: cps/web.py:1963 +#: cps/web.py:2070 #, python-format msgid "successfully deleted shelf %(name)s" msgstr "" -#: cps/web.py:1985 +#: cps/web.py:2092 #, python-format msgid "Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2016 +#: cps/web.py:2095 +msgid "Error opening shelf. Shelf does not exist or is not accessible" +msgstr "" + +#: cps/web.py:2127 #, python-format msgid "Change order of Shelf: '%(name)s'" msgstr "" -#: cps/web.py:2080 +#: cps/web.py:2191 msgid "Found an existing account for this email address." msgstr "" -#: cps/web.py:2082 cps/web.py:2086 +#: cps/web.py:2193 cps/web.py:2197 #, python-format msgid "%(name)s's profile" msgstr "" -#: cps/web.py:2083 +#: cps/web.py:2194 msgid "Profile updated" msgstr "" -#: cps/web.py:2097 +#: cps/web.py:2208 msgid "Admin page" msgstr "" -#: cps/web.py:2205 +#: cps/web.py:2320 msgid "Calibre-web configuration updated" msgstr "" -#: cps/web.py:2212 cps/web.py:2218 cps/web.py:2232 +#: cps/web.py:2327 cps/web.py:2333 cps/web.py:2347 msgid "Basic Configuration" msgstr "" -#: cps/web.py:2216 +#: cps/web.py:2331 msgid "DB location is not valid, please enter correct path" msgstr "" -#: cps/templates/admin.html:34 cps/web.py:2253 cps/web.py:2305 +#: cps/templates/admin.html:34 cps/web.py:2368 cps/web.py:2420 msgid "Add new user" msgstr "" -#: cps/web.py:2297 +#: cps/web.py:2412 #, python-format msgid "User '%(user)s' created" msgstr "" -#: cps/web.py:2301 +#: cps/web.py:2416 msgid "Found an existing account for this email address or nickname." msgstr "" -#: cps/web.py:2323 +#: cps/web.py:2438 msgid "Mail settings updated" msgstr "" -#: cps/web.py:2330 +#: cps/web.py:2445 #, python-format msgid "Test E-Mail successfully send to %(kindlemail)s" msgstr "" -#: cps/web.py:2333 +#: cps/web.py:2448 #, python-format msgid "There was an error sending the Test E-Mail: %(res)s" msgstr "" -#: cps/web.py:2337 +#: cps/web.py:2452 msgid "E-Mail settings updated" msgstr "" -#: cps/web.py:2338 +#: cps/web.py:2453 msgid "Edit mail settings" msgstr "" -#: cps/web.py:2367 +#: cps/web.py:2482 #, python-format msgid "User '%(nick)s' deleted" msgstr "" -#: cps/web.py:2463 +#: cps/web.py:2578 #, python-format msgid "User '%(nick)s' updated" msgstr "" -#: cps/web.py:2466 +#: cps/web.py:2581 msgid "An unknown error occured." msgstr "" -#: cps/web.py:2469 +#: cps/web.py:2584 #, python-format msgid "Edit User %(nick)s" msgstr "" -#: cps/web.py:2504 cps/web.py:2508 +#: cps/web.py:2619 cps/web.py:2623 msgid "unknown" msgstr "" -#: cps/web.py:2667 cps/web.py:2670 cps/web.py:2780 +#: cps/web.py:2782 cps/web.py:2785 cps/web.py:2895 msgid "edit metadata" msgstr "" -#: cps/web.py:2691 +#: cps/web.py:2787 +msgid "Error opening eBook. File does not exist or file is not accessible" +msgstr "" + +#: cps/web.py:2806 #, python-format msgid "File extension \"%s\" is not allowed to be uploaded to this server" msgstr "" -#: cps/web.py:2697 +#: cps/web.py:2812 msgid "File to be uploaded must have an extension" msgstr "" -#: cps/web.py:2714 +#: cps/web.py:2829 #, python-format msgid "Failed to create path %s (Permission denied)." msgstr "" -#: cps/web.py:2719 +#: cps/web.py:2834 #, python-format msgid "Failed to store file %s (Permission denied)." msgstr "" -#: cps/web.py:2724 +#: cps/web.py:2839 #, python-format msgid "Failed to delete file %s (Permission denied)." msgstr "" @@ -416,7 +445,8 @@ msgstr "" msgid "Admin" msgstr "" -#: cps/templates/admin.html:13 cps/templates/detail.html:134 +#: cps/templates/admin.html:13 cps/templates/detail.html:22 +#: cps/templates/detail.html:34 msgid "Download" msgstr "" @@ -464,7 +494,7 @@ msgstr "" msgid "Change SMTP settings" msgstr "" -#: cps/templates/admin.html:57 cps/templates/admin.html:77 +#: cps/templates/admin.html:57 cps/templates/admin.html:79 msgid "Configuration" msgstr "" @@ -496,60 +526,64 @@ msgstr "" msgid "Anonymous browsing" msgstr "" -#: cps/templates/admin.html:78 -msgid "Administration" +#: cps/templates/admin.html:67 cps/templates/remote_login.html:4 +msgid "Remote Login" msgstr "" #: cps/templates/admin.html:80 +msgid "Administration" +msgstr "" + +#: cps/templates/admin.html:82 msgid "Current commit timestamp" msgstr "" -#: cps/templates/admin.html:81 +#: cps/templates/admin.html:83 msgid "Newest commit timestamp" msgstr "" -#: cps/templates/admin.html:83 +#: cps/templates/admin.html:85 msgid "Reconnect to Calibre DB" msgstr "" -#: cps/templates/admin.html:84 +#: cps/templates/admin.html:86 msgid "Restart Calibre-web" msgstr "" -#: cps/templates/admin.html:85 +#: cps/templates/admin.html:87 msgid "Stop Calibre-web" msgstr "" -#: cps/templates/admin.html:86 +#: cps/templates/admin.html:88 msgid "Check for update" msgstr "" -#: cps/templates/admin.html:87 +#: cps/templates/admin.html:89 msgid "Perform Update" msgstr "" -#: cps/templates/admin.html:97 +#: cps/templates/admin.html:99 msgid "Do you really want to restart Calibre-web?" msgstr "" -#: cps/templates/admin.html:102 cps/templates/admin.html:116 -#: cps/templates/admin.html:137 cps/templates/shelf.html:52 +#: cps/templates/admin.html:104 cps/templates/admin.html:118 +#: cps/templates/admin.html:139 cps/templates/shelf.html:59 msgid "Ok" msgstr "" -#: cps/templates/admin.html:103 cps/templates/admin.html:117 +#: cps/templates/admin.html:105 cps/templates/admin.html:119 #: cps/templates/book_edit.html:120 cps/templates/book_edit.html:142 -#: cps/templates/config_edit.html:127 cps/templates/email_edit.html:36 -#: cps/templates/shelf.html:53 cps/templates/shelf_edit.html:19 +#: cps/templates/config_edit.html:131 cps/templates/email_edit.html:36 +#: cps/templates/shelf.html:60 cps/templates/shelf_edit.html:19 #: cps/templates/shelf_order.html:12 cps/templates/user_edit.html:128 msgid "Back" msgstr "" -#: cps/templates/admin.html:115 +#: cps/templates/admin.html:117 msgid "Do you really want to stop Calibre-web?" msgstr "" -#: cps/templates/admin.html:128 +#: cps/templates/admin.html:130 msgid "Updating, please do not reload page" msgstr "" @@ -611,8 +645,8 @@ msgstr "" msgid "Get metadata" msgstr "" -#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:125 -#: cps/templates/login.html:19 cps/templates/search_form.html:79 +#: cps/templates/book_edit.html:119 cps/templates/config_edit.html:129 +#: cps/templates/login.html:20 cps/templates/search_form.html:79 #: cps/templates/shelf_edit.html:17 cps/templates/user_edit.html:126 msgid "Submit" msgstr "" @@ -665,7 +699,7 @@ msgstr "" msgid "No Result! Please try anonther keyword." msgstr "" -#: cps/templates/book_edit.html:182 cps/templates/detail.html:76 +#: cps/templates/book_edit.html:182 cps/templates/detail.html:127 #: cps/templates/search_form.html:14 msgid "Publisher" msgstr "" @@ -734,76 +768,80 @@ msgstr "" msgid "Enable public registration" msgstr "" -#: cps/templates/config_edit.html:96 +#: cps/templates/config_edit.html:98 +msgid "Enable remote login (\"magic link\")" +msgstr "" + +#: cps/templates/config_edit.html:100 msgid "Default Settings for new users" msgstr "" -#: cps/templates/config_edit.html:99 cps/templates/user_edit.html:87 +#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:87 msgid "Admin user" msgstr "" -#: cps/templates/config_edit.html:103 cps/templates/user_edit.html:92 +#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:92 msgid "Allow Downloads" msgstr "" -#: cps/templates/config_edit.html:107 cps/templates/user_edit.html:96 +#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:96 msgid "Allow Uploads" msgstr "" -#: cps/templates/config_edit.html:111 cps/templates/user_edit.html:100 +#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:100 msgid "Allow Edit" msgstr "" -#: cps/templates/config_edit.html:115 cps/templates/user_edit.html:104 +#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:104 msgid "Allow Delete books" msgstr "" -#: cps/templates/config_edit.html:119 cps/templates/user_edit.html:109 +#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:109 msgid "Allow Changing Password" msgstr "" -#: cps/templates/config_edit.html:123 cps/templates/user_edit.html:113 +#: cps/templates/config_edit.html:127 cps/templates/user_edit.html:113 msgid "Allow Editing Public Shelfs" msgstr "" -#: cps/templates/config_edit.html:130 cps/templates/layout.html:93 +#: cps/templates/config_edit.html:134 cps/templates/layout.html:93 #: cps/templates/login.html:4 msgid "Login" msgstr "" -#: cps/templates/detail.html:40 -msgid "Book" -msgstr "" - -#: cps/templates/detail.html:40 -msgid "of" -msgstr "" - -#: cps/templates/detail.html:46 -msgid "language" -msgstr "" - -#: cps/templates/detail.html:81 -msgid "Publishing date" -msgstr "" - -#: cps/templates/detail.html:115 -msgid "Read" -msgstr "" - -#: cps/templates/detail.html:123 -msgid "Description:" -msgstr "" - -#: cps/templates/detail.html:151 +#: cps/templates/detail.html:52 msgid "Read in browser" msgstr "" -#: cps/templates/detail.html:171 +#: cps/templates/detail.html:91 +msgid "Book" +msgstr "" + +#: cps/templates/detail.html:91 +msgid "of" +msgstr "" + +#: cps/templates/detail.html:97 +msgid "language" +msgstr "" + +#: cps/templates/detail.html:132 +msgid "Publishing date" +msgstr "" + +#: cps/templates/detail.html:167 +msgid "Read" +msgstr "" + +#: cps/templates/detail.html:176 +msgid "Description:" +msgstr "" + +#: cps/templates/detail.html:187 msgid "Add to shelf" msgstr "" -#: cps/templates/detail.html:211 +#: cps/templates/detail.html:227 msgid "Edit metadata" msgstr "" @@ -883,16 +921,6 @@ msgstr "" msgid "Show Random Books" msgstr "" -#: cps/templates/index.xml:43 cps/templates/index.xml:47 -#: cps/templates/layout.html:132 -msgid "Read Books" -msgstr "" - -#: cps/templates/index.xml:50 cps/templates/index.xml:54 -#: cps/templates/layout.html:133 -msgid "Unread Books" -msgstr "" - #: cps/templates/index.xml:57 cps/templates/layout.html:144 msgid "Authors" msgstr "" @@ -957,20 +985,24 @@ msgstr "" msgid "About" msgstr "" -#: cps/templates/login.html:7 cps/templates/login.html:8 +#: cps/templates/login.html:8 cps/templates/login.html:9 #: cps/templates/register.html:7 cps/templates/user_edit.html:8 msgid "Username" msgstr "" -#: cps/templates/login.html:11 cps/templates/login.html:12 +#: cps/templates/login.html:12 cps/templates/login.html:13 #: cps/templates/register.html:11 cps/templates/user_edit.html:18 msgid "Password" msgstr "" -#: cps/templates/login.html:16 +#: cps/templates/login.html:17 msgid "Remember me" msgstr "" +#: cps/templates/login.html:22 +msgid "Log in with magic link" +msgstr "" + #: cps/templates/osd.xml:5 msgid "Calibre Web ebook catalog" msgstr "" @@ -1007,6 +1039,18 @@ msgstr "" msgid "Your email address" msgstr "" +#: cps/templates/remote_login.html:6 +msgid "Using your another device, visit" +msgstr "" + +#: cps/templates/remote_login.html:6 +msgid "and log in" +msgstr "" + +#: cps/templates/remote_login.html:9 +msgid "Once you do so, you will automatically get logged in on this device." +msgstr "" + #: cps/templates/search.html:6 msgid "No Results for:" msgstr "" @@ -1043,11 +1087,11 @@ msgstr "" msgid "Change order" msgstr "" -#: cps/templates/shelf.html:47 +#: cps/templates/shelf.html:54 msgid "Do you really want to delete the shelf?" msgstr "" -#: cps/templates/shelf.html:50 +#: cps/templates/shelf.html:57 msgid "Shelf will be lost for everybody and forever!" msgstr "" From fe68c8a7f837b9d4ffe520979218880a3b8b64ec Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Sat, 8 Jul 2017 16:05:20 -0700 Subject: [PATCH 22/47] Add support for displaying author information from Goodreads Requires the "goodread" module (added to optional-requirements.txt) and an API key Retrieves Goodreads author information and displays their photo and "about" text --- cps/static/css/style.css | 3 ++ cps/static/img/goodreads.svg | 1 + cps/static/js/main.js | 16 +++++++++ cps/templates/author.html | 65 ++++++++++++++++++++++++++++++++++ cps/templates/config_edit.html | 18 ++++++++++ cps/ub.py | 13 +++++++ cps/web.py | 35 ++++++++++++++---- optional-requirements.txt | 1 + 8 files changed, 145 insertions(+), 7 deletions(-) create mode 100644 cps/static/img/goodreads.svg create mode 100644 cps/templates/author.html diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 8b299002..47ad9e24 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -53,3 +53,6 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .spinner2 {margin:0 41%;} .block-label {display: block;} + +.author-bio img {margin: 0 1em 1em 0;} +.author-link img {display: inline-block;max-width: 100px;} \ No newline at end of file diff --git a/cps/static/img/goodreads.svg b/cps/static/img/goodreads.svg new file mode 100644 index 00000000..f89130e9 --- /dev/null +++ b/cps/static/img/goodreads.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cps/static/js/main.js b/cps/static/js/main.js index d759a3b8..6c41bdf2 100644 --- a/cps/static/js/main.js +++ b/cps/static/js/main.js @@ -2,6 +2,20 @@ var displaytext; var updateTimerID; var updateText; +// Generic control/related handler to show/hide fields based on a checkbox' value +// e.g. +// +//
    ...
    +$(document).on("change", "input[type=\"checkbox\"][data-control]", function () { + var $this = $(this); + var name = $this.data("control"); + var showOrHide = $this.prop("checked"); + + $("[data-related=\""+name+"\"]").each(function () { + $(this).toggle(showOrHide); + }); +}); + $(function() { function restartTimer() { @@ -121,6 +135,8 @@ $(function() { }); }); + $("input[data-control]").trigger("change"); + $(window).resize(function(event) { $(".discover .row").isotope("reLayout"); }); diff --git a/cps/templates/author.html b/cps/templates/author.html new file mode 100644 index 00000000..4d194f99 --- /dev/null +++ b/cps/templates/author.html @@ -0,0 +1,65 @@ +{% extends "layout.html" %} +{% block body %} +

    {{title}}

    + +{% if author is not none %} +
    + {%if author['image_url'] is not none %} + {{author.name}} + {% endif %} + + {%if author.about is not none %} +

    {{author.about|safe}}

    + {% endif %} +
    + + + Goodreads + + +
    +{% endif %} + +
    +
    + {% if entries[0] %} + {% for entry in entries %} +
    + +
    +

    {{entry.title|shortentitle}}

    +

    + {% for author in entry.authors %} + {{author.name}} + {% if not loop.last %} + & + {% endif %} + {% endfor %} +

    + {% if entry.ratings.__len__() > 0 %} +
    + {% for number in range((entry.ratings[0].rating/2)|int(2)) %} + + {% if loop.last and loop.index < 5 %} + {% for numer in range(5 - loop.index) %} + + {% endfor %} + {% endif %} + {% endfor %} +
    + {% endif %} +
    +
    + {% endfor %} + {% endif %} +
    +
    +{% endblock %} diff --git a/cps/templates/config_edit.html b/cps/templates/config_edit.html index 52b5d09c..ab901c6b 100644 --- a/cps/templates/config_edit.html +++ b/cps/templates/config_edit.html @@ -97,6 +97,24 @@
    + {% if goodreads %} +
    + + + {{_('Obtain an API Key')}} +
    +
    +
    + + +
    +
    + + +
    +
    + {% endif %} +

    {{_('Default Settings for new users')}}

    diff --git a/cps/ub.py b/cps/ub.py index dc377cba..1a8b0b0c 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -263,6 +263,9 @@ class Settings(Base): config_google_drive_watch_changes_response = Column(String) config_columns_to_ignore = Column(String) config_remote_login = Column(Boolean) + config_use_goodreads = Column(Boolean) + config_goodreads_api_key = Column(String) + config_goodreads_api_secret = Column(String) def __repr__(self): pass @@ -320,6 +323,9 @@ class Config: self.db_configured = bool(self.config_calibre_dir is not None and (not self.config_use_google_drive or os.path.exists(self.config_calibre_dir + '/metadata.db'))) self.config_remote_login = data.config_remote_login + self.config_use_goodreads = data.config_use_goodreads + self.config_goodreads_api_key = data.config_goodreads_api_key + self.config_goodreads_api_secret = data.config_goodreads_api_secret @property def get_main_dir(self): @@ -475,6 +481,13 @@ def migrate_Database(): except exc.OperationalError: conn = engine.connect() conn.execute("ALTER TABLE Settings ADD column `config_remote_login` INTEGER DEFAULT 0") + try: + session.query(exists().where(Settings.config_use_goodreads)).scalar() + except exc.OperationalError: + conn = engine.connect() + conn.execute("ALTER TABLE Settings ADD column `config_use_goodreads` INTEGER DEFAULT 0") + conn.execute("ALTER TABLE Settings ADD column `config_goodreads_api_key` String DEFAULT ''") + conn.execute("ALTER TABLE Settings ADD column `config_goodreads_api_secret` String DEFAULT ''") def clean_database(): # Remove expired remote login tokens diff --git a/cps/web.py b/cps/web.py index 5d4d0fef..92ea27b1 100755 --- a/cps/web.py +++ b/cps/web.py @@ -7,6 +7,12 @@ try: except ImportError: gdrive_support = False +try: + from goodreads import client as gr_client + goodreads_support = True +except ImportError: + goodreads_support = False + import mimetypes import logging from logging.handlers import RotatingFileHandler @@ -1086,10 +1092,16 @@ def author_list(): def author(book_id, page): entries, random, pagination = fill_indexpage(page, db.Books, db.Books.authors.any(db.Authors.id == book_id), db.Books.timestamp.desc()) - name = db.session.query(db.Authors).filter(db.Authors.id == book_id).first().name if entries: - return render_title_template('index.html', random=random, entries=entries, pagination=pagination, - title=_(u"Author: %(name)s", name=name)) + name = db.session.query(db.Authors).filter(db.Authors.id == book_id).first().name + + author_info = None + if goodreads_support and config.config_use_goodreads: + gc = gr_client.GoodreadsClient(config.config_goodreads_api_key, config.config_goodreads_api_secret) + author_info = gc.find_author(author_name=name) + + return render_title_template('author.html', entries=entries, pagination=pagination, + title=name, author=author_info) else: flash(_(u"Error opening eBook. File does not exist or file is not accessible:"), category="error") return redirect(url_for("index")) @@ -2289,11 +2301,20 @@ def configuration_helper(origin): content.config_anonbrowse = 1 if "config_public_reg" in to_save and to_save["config_public_reg"] == "on": content.config_public_reg = 1 - content.config_remote_login = ("config_remote_login" in to_save and to_save["config_remote_login"] == "on") + # Remote login configuration + content.config_remote_login = ("config_remote_login" in to_save and to_save["config_remote_login"] == "on") if not content.config_remote_login: ub.session.query(ub.RemoteAuthToken).delete() + # Goodreads configuration + content.config_use_goodreads = ("config_use_goodreads" in to_save and to_save["config_use_goodreads"] == "on") + if "config_goodreads_api_key" in to_save: + content.config_goodreads_api_key = to_save["config_goodreads_api_key"] + if "config_goodreads_api_secret" in to_save: + content.config_goodreads_api_secret = to_save["config_goodreads_api_secret"] + + content.config_default_role = 0 if "admin_role" in to_save: content.config_default_role = content.config_default_role + ub.ROLE_ADMIN @@ -2324,13 +2345,13 @@ def configuration_helper(origin): except e: flash(e, category="error") return render_title_template("config_edit.html", content=config, origin=origin, gdrive=gdrive_support, - title=_(u"Basic Configuration")) + goodreads=goodreads_support, title=_(u"Basic Configuration")) if db_change: reload(db) if not db.setup_db(): flash(_(u'DB location is not valid, please enter correct path'), category="error") return render_title_template("config_edit.html", content=config, origin=origin, gdrive=gdrive_support, - title=_(u"Basic Configuration")) + goodreads=goodreads_support, title=_(u"Basic Configuration")) if reboot_required: # db.engine.dispose() # ToDo verify correct ub.session.close() @@ -2344,7 +2365,7 @@ def configuration_helper(origin): success = True return render_title_template("config_edit.html", origin=origin, success=success, content=config, show_authenticate_google_drive=not is_gdrive_ready(), gdrive=gdrive_support, - title=_(u"Basic Configuration")) + goodreads=goodreads_support, title=_(u"Basic Configuration")) @app.route("/admin/user/new", methods=["GET", "POST"]) diff --git a/optional-requirements.txt b/optional-requirements.txt index 71c7b4ea..5e4c4414 100644 --- a/optional-requirements.txt +++ b/optional-requirements.txt @@ -11,3 +11,4 @@ PyYAML==3.12 rsa==3.4.2 six==1.10.0 uritemplate==3.0.0 +goodreads==0.3.2 \ No newline at end of file From 979bcdffd43c92721fde6a17a2f729dfd5400d41 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sun, 9 Jul 2017 12:41:09 +0200 Subject: [PATCH 23/47] Bugfix non working download links Bugfix missing divider in detail page --- cps/static/css/style.css | 2 +- cps/templates/detail.html | 36 ++++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/cps/static/css/style.css b/cps/static/css/style.css index 8b299002..f0ea4cb1 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -44,7 +44,7 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .btn-file input[type=file] {position: absolute; top: 0; right: 0; min-width: 100%; min-height: 100%; font-size: 100px; text-align: right; filter: alpha(opacity=0); opacity: 0; outline: none; background: white; cursor: inherit; display: block;} .btn-toolbar .btn,.discover .btn { margin-bottom: 5px; } -.button-link {color:#fff;} + .btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active, .open .dropdown-toggle.btn-primary{ background-color: #1C5484; } .btn-primary.disabled, .btn-primary[disabled], fieldset[disabled] .btn-primary, .btn-primary.disabled:hover, .btn-primary[disabled]:hover, fieldset[disabled] .btn-primary:hover, .btn-primary.disabled:focus, .btn-primary[disabled]:focus, fieldset[disabled] .btn-primary:focus, .btn-primary.disabled:active, .btn-primary[disabled]:active, fieldset[disabled] .btn-primary:active, .btn-primary.disabled.active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary.active { background-color: #89B9E2; } .btn-toolbar>.btn+.btn, .btn-toolbar>.btn-group+.btn, .btn-toolbar>.btn+.btn-group, .btn-toolbar>.btn-group+.btn-group { margin-left:0px; } diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 14389809..6d6ecdab 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -12,7 +12,6 @@
    -
    +

    {{entry.title}}

    {% for author in entry.authors %} @@ -106,20 +103,22 @@ {% for identifier in entry.identifiers %} {{identifier.formatType()}} {%endfor%} -

    +
    {% endif %} {% if entry.tags|length > 0 %} -

    +

    +

    {% for tag in entry.tags %} {{tag.name}} {%endfor%} -

    + +
    {% endif %} {% if entry.publishers|length > 0 %}
    @@ -132,8 +131,9 @@

    {{_('Publishing date')}}: {{entry.pubdate|formatdate}}

    {% endif %} {% if cc|length > 0 %} -

    +

    +

    {% for c in cc %} {% if entry['custom_column_' ~ c.id]|length > 0 %} {{ c.name }}: @@ -155,20 +155,21 @@
    {% endif %} {% endfor %} -

    +
    {% endif %} {% if not g.user.is_anonymous() %} -

    +

    +

    +

    -

    {% endif %} @@ -178,7 +179,8 @@ {% endif %} -
    +
    + {% if g.user.is_authenticated %} {% if g.user.shelf.all() or g.public_shelfes %}
    {% endif %} + {% endif %} {% if g.user.role_edit() %} {% endif %} +
    -
    {% endblock %} {% block js %} From 470aea6106313247ded97e6e8e7bac10e8be605c Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sun, 9 Jul 2017 13:27:56 +0200 Subject: [PATCH 24/47] Fix #214 Update epub.js lib --- cps/static/js/libs/epub.min.js | 9 ++---- cps/static/js/libs/epub.min.map | 1 - cps/static/js/libs/hooks.min.js | 2 +- cps/static/js/libs/hooks.min.map | 1 - cps/static/js/libs/reader.min.js | 2 +- cps/static/js/libs/reader.min.map | 1 - cps/templates/read.html | 47 ++++++++++++------------------- 7 files changed, 23 insertions(+), 40 deletions(-) delete mode 100644 cps/static/js/libs/epub.min.map delete mode 100644 cps/static/js/libs/hooks.min.map delete mode 100644 cps/static/js/libs/reader.min.map diff --git a/cps/static/js/libs/epub.min.js b/cps/static/js/libs/epub.min.js index dae92fce..4d43f06a 100644 --- a/cps/static/js/libs/epub.min.js +++ b/cps/static/js/libs/epub.min.js @@ -1,11 +1,8 @@ /*! * @overview RSVP - a tiny implementation of Promises/A+. - * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors + * @copyright Copyright (c) 2016 Yehuda Katz, Tom Dale, Stefan Penner and contributors * @license Licensed under MIT license * See https://raw.githubusercontent.com/tildeio/rsvp.js/master/LICENSE - * @version 3.1.0 + * @version 3.5.0 */ -"use strict";(function(){function a(a){return"function"==typeof a||"object"==typeof a&&null!==a}function b(a){return"function"==typeof a}function c(a){return"object"==typeof a&&null!==a}function d(){}function e(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1}function f(a){var b=a._promiseCallbacks;return b||(b=a._promiseCallbacks={}),b}function g(a,b){return"onerror"===a?void vb.on("error",b):2!==arguments.length?vb[a]:void(vb[a]=b)}function h(){setTimeout(function(){for(var a,b=0;bh;h++)u(e.resolve(a[h]),void 0,c,d);return f}function E(a,b){var c=this;if(a&&"object"==typeof a&&a.constructor===c)return a;var d=new c(k,b);return q(d,a),d}function F(a,b){var c=this,d=new c(k,b);return t(d,a),d}function G(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function H(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function I(a,c){var d=this;d._id=Jb++,d._label=c,d._state=void 0,d._result=void 0,d._subscribers=[],vb.instrument&&xb("created",d),k!==a&&(b(a)||G(),d instanceof I||H(),z(d,a))}function J(a,b,c){this._superConstructor(a,b,!1,c)}function K(a,b){return new J(Kb,a,b).promise}function L(a,b){return Kb.all(a,b)}function M(a,b){Wb[Pb]=a,Wb[Pb+1]=b,Pb+=2,2===Pb&&Mb()}function N(){var a=process.nextTick,b=process.versions.node.match(/^(?:(\d+)\.)?(?:(\d+)\.)?(\*|\d+)$/);return Array.isArray(b)&&"0"===b[1]&&"10"===b[2]&&(a=setImmediate),function(){a(S)}}function O(){return function(){Lb(S)}}function P(){var a=0,b=new Tb(S),c=document.createTextNode("");return b.observe(c,{characterData:!0}),function(){c.data=a=++a%2}}function Q(){var a=new MessageChannel;return a.port1.onmessage=S,function(){a.port2.postMessage(0)}}function R(){return function(){setTimeout(S,1)}}function S(){for(var a=0;Pb>a;a+=2){var b=Wb[a],c=Wb[a+1];b(c),Wb[a]=void 0,Wb[a+1]=void 0}Pb=0}function T(){try{var a=require,b=a("vertx");return Lb=b.runOnLoop||b.runOnContext,O()}catch(c){return R()}}function U(a){var b={};return b.promise=new Kb(function(a,c){b.resolve=a,b.reject=c},a),b}function V(a,c,d){return Kb.all(a,d).then(function(a){if(!b(c))throw new TypeError("You must pass a function as filter's second argument.");for(var e=a.length,f=new Array(e),g=0;e>g;g++)f[g]=c(a[g]);return Kb.all(f,d).then(function(b){for(var c=new Array(e),d=0,f=0;e>f;f++)b[f]&&(c[d]=a[f],d++);return c.length=d,c})})}function W(a,b,c){this._superConstructor(a,b,!0,c)}function X(a,b,c){this._superConstructor(a,b,!1,c)}function Y(a,b){return new X(Kb,a,b).promise}function Z(a,b){return new Zb(Kb,a,b).promise}function $(a,c,d){return Kb.all(a,d).then(function(a){if(!b(c))throw new TypeError("You must pass a function as map's second argument.");for(var e=a.length,f=new Array(e),g=0;e>g;g++)f[g]=c(a[g]);return Kb.all(f,d)})}function _(){this.value=void 0}function ab(a){try{return a.then}catch(b){return cc.value=b,cc}}function bb(a,b,c){try{a.apply(b,c)}catch(d){return cc.value=d,cc}}function cb(a,b){for(var c,d,e={},f=a.length,g=new Array(f),h=0;f>h;h++)g[h]=a[h];for(d=0;dd;d++)c[d-1]=a[d];return c}function eb(a,b){return{then:function(c,d){return a.call(b,c,d)}}}function fb(a,b){var c=function(){for(var c,d=this,e=arguments.length,f=new Array(e+1),g=!1,h=0;e>h;++h){if(c=arguments[h],!g){if(g=ib(c),g===dc){var i=new Kb(k);return t(i,dc.value),i}g&&g!==!0&&(c=eb(g,c))}f[h]=c}var j=new Kb(k);return f[e]=function(a,c){a?t(j,a):void 0===b?q(j,c):b===!0?q(j,db(arguments)):rb(b)?q(j,cb(arguments,b)):q(j,c)},g?hb(j,f,a,d):gb(j,f,a,d)};return c.__proto__=a,c}function gb(a,b,c,d){var e=bb(c,d,b);return e===cc&&t(a,e.value),a}function hb(a,b,c,d){return Kb.all(b).then(function(b){var e=bb(c,d,b);return e===cc&&t(a,e.value),a})}function ib(a){return a&&"object"==typeof a?a.constructor===Kb?!0:ab(a):!1}function jb(a,b){return Kb.race(a,b)}function kb(a,b){return Kb.reject(a,b)}function lb(a,b){return Kb.resolve(a,b)}function mb(a){throw setTimeout(function(){throw a}),a}function nb(a,b){vb.async(a,b)}function ob(){vb.on.apply(vb,arguments)}function pb(){vb.off.apply(vb,arguments)}var qb;qb=Array.isArray?Array.isArray:function(a){return"[object Array]"===Object.prototype.toString.call(a)};var rb=qb,sb=Date.now||function(){return(new Date).getTime()},tb=Object.create||function(a){if(arguments.length>1)throw new Error("Second argument not supported");if("object"!=typeof a)throw new TypeError("Argument must be an object");return d.prototype=a,new d},ub={mixin:function(a){return a.on=this.on,a.off=this.off,a.trigger=this.trigger,a._promiseCallbacks=void 0,a},on:function(a,b){if("function"!=typeof b)throw new TypeError("Callback must be a function");var c,d=f(this);c=d[a],c||(c=d[a]=[]),-1===e(c,b)&&c.push(b)},off:function(a,b){var c,d,g=f(this);return b?(c=g[a],d=e(c,b),void(-1!==d&&c.splice(d,1))):void(g[a]=[])},trigger:function(a,b,c){var d,e,g=f(this);if(d=g[a])for(var h=0;he;e++)a._eachEntry(d[e],e)},B.prototype._eachEntry=function(a,b){var d=this,e=d._instanceConstructor;c(a)?a.constructor===e&&a._state!==yb?(a._onError=null,d._settledAt(a._state,b,a._result)):d._willSettleAt(e.resolve(a),b):(d._remaining--,d._result[b]=d._makeResult(zb,b,a))},B.prototype._settledAt=function(a,b,c){var d=this,e=d.promise;e._state===yb&&(d._remaining--,d._abortOnReject&&a===Ab?t(e,c):d._result[b]=d._makeResult(a,b,c)),0===d._remaining&&s(e,d._result)},B.prototype._makeResult=function(a,b,c){return c},B.prototype._willSettleAt=function(a,b){var c=this;u(a,void 0,function(a){c._settledAt(zb,b,a)},function(a){c._settledAt(Ab,b,a)})};var Eb=C,Fb=D,Gb=E,Hb=F,Ib="rsvp_"+sb()+"-",Jb=0,Kb=I;I.cast=Gb,I.all=Eb,I.race=Fb,I.resolve=Gb,I.reject=Hb,I.prototype={constructor:I,_guidKey:Ib,_onError:function(a){var b=this;vb.after(function(){b._onError&&vb.trigger("error",a,b._label)})},then:function(a,b,c){var d=this,e=d._state;if(e===zb&&!a||e===Ab&&!b)return vb.instrument&&xb("chained",d,d),d;d._onError=null;var f=new d.constructor(k,c),g=d._result;if(vb.instrument&&xb("chained",d,f),e){var h=arguments[e-1];vb.async(function(){y(e,f,h,g)})}else u(d,f,a,b);return f},"catch":function(a,b){return this.then(void 0,a,b)},"finally":function(a,b){var c=this,d=c.constructor;return c.then(function(b){return d.resolve(a()).then(function(){return b})},function(b){return d.resolve(a()).then(function(){throw b})},b)}},J.prototype=tb(Db.prototype),J.prototype._superConstructor=Db,J.prototype._makeResult=A,J.prototype._validationError=function(){return new Error("allSettled must be called with an array")};var Lb,Mb,Nb=K,Ob=L,Pb=0,Qb=({}.toString,M),Rb="undefined"!=typeof window?window:void 0,Sb=Rb||{},Tb=Sb.MutationObserver||Sb.WebKitMutationObserver,Ub="undefined"==typeof self&&"undefined"!=typeof process&&"[object process]"==={}.toString.call(process),Vb="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Wb=new Array(1e3);Mb=Ub?N():Tb?P():Vb?Q():void 0===Rb&&"function"==typeof require?T():R();var Xb=U,Yb=V,Zb=W;W.prototype=tb(Db.prototype),W.prototype._superConstructor=Db,W.prototype._init=function(){this._result={}},W.prototype._validateInput=function(a){return a&&"object"==typeof a},W.prototype._validationError=function(){return new Error("Promise.hash must be called with an object")},W.prototype._enumerate=function(){var a=this,b=a.promise,c=a._input,d=[];for(var e in c)b._state===yb&&Object.prototype.hasOwnProperty.call(c,e)&&d.push({position:e,entry:c[e]});var f=d.length;a._remaining=f;for(var g,h=0;b._state===yb&&f>h;h++)g=d[h],a._eachEntry(g.entry,g.position)},X.prototype=tb(Zb.prototype),X.prototype._superConstructor=Db,X.prototype._makeResult=A,X.prototype._validationError=function(){return new Error("hashSettled must be called with an object")};var $b,_b=Y,ac=Z,bc=$,cc=new _,dc=new _,ec=fb;if("object"==typeof self)$b=self;else{if("object"!=typeof global)throw new Error("no global: `self` or `global` found");$b=global}var fc=$b,gc=jb,hc=kb,ic=lb,jc=mb;vb.async=Qb,vb.after=function(a){setTimeout(a,0)};if("undefined"!=typeof window&&"object"==typeof window.__PROMISE_INSTRUMENTATION__){var kc=window.__PROMISE_INSTRUMENTATION__;g("instrument",!0);for(var lc in kc)kc.hasOwnProperty(lc)&&ob(lc,kc[lc])}var mc={race:gc,Promise:Kb,allSettled:Nb,hash:ac,hashSettled:_b,denodeify:ec,on:ob,off:pb,map:bc,filter:Yb,resolve:ic,reject:hc,all:Ob,rethrow:jc,defer:Xb,EventTarget:ub,configure:g,async:nb};"function"==typeof define&&define.amd?define(function(){return mc}):"undefined"!=typeof module&&module.exports?module.exports=mc:"undefined"!=typeof fc&&(fc.RSVP=mc)}).call(this);var EPUBJS=EPUBJS||{};EPUBJS.VERSION="0.2.14",EPUBJS.plugins=EPUBJS.plugins||{},EPUBJS.filePath=EPUBJS.filePath||"/epubjs/",EPUBJS.Render={},function(a){var b=(a.ePub||{},a.ePub=function(){var a,b;return"undefined"!=typeof arguments[0]&&("string"==typeof arguments[0]||arguments[0]instanceof ArrayBuffer)&&(a=arguments[0],arguments[1]&&"object"==typeof arguments[1]?(b=arguments[1],b.bookPath=a):b={bookPath:a}),!arguments[0]||"object"!=typeof arguments[0]||arguments[0]instanceof ArrayBuffer||(b=arguments[0]),new EPUBJS.Book(b)});"function"==typeof define&&define.amd?define(["rsvp","jszip","localforage"],function(){return b}):"undefined"!=typeof module&&module.exports&&(global.RSVP=require("rsvp"),global.JSZip=require("jszip"),global.localForage=require("localforage"),module.exports=b)}(window),EPUBJS.Book=function(a){this.settings=EPUBJS.core.defaults(a||{},{bookPath:void 0,bookKey:void 0,packageUrl:void 0,storage:!1,fromStorage:!1,saved:!1,online:!0,contained:!1,width:void 0,height:void 0,layoutOveride:void 0,orientation:void 0,minSpreadWidth:768,gap:"auto",version:1,restore:!1,reload:!1,"goto":!1,styles:{},headTags:{},withCredentials:!1,render_method:"Iframe"}),this.settings.EPUBJSVERSION=EPUBJS.VERSION,this.spinePos=0,this.stored=!1,this.online=this.settings.online||navigator.onLine,this.networkListeners(),this.ready={manifest:new RSVP.defer,spine:new RSVP.defer,metadata:new RSVP.defer,cover:new RSVP.defer,toc:new RSVP.defer,pageList:new RSVP.defer},this.readyPromises=[this.ready.manifest.promise,this.ready.spine.promise,this.ready.metadata.promise,this.ready.cover.promise,this.ready.toc.promise],this.pageList=[],this.pagination=new EPUBJS.Pagination,this.pageListReady=this.ready.pageList.promise,this.ready.all=RSVP.all(this.readyPromises),this.ready.all.then(this._ready.bind(this)),this.isRendered=!1,this._q=EPUBJS.core.queue(this),this._rendering=!1,this._displayQ=EPUBJS.core.queue(this),this._moving=!1,this._gotoQ=EPUBJS.core.queue(this),this.renderer=new EPUBJS.Renderer(this.settings.render_method),this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth),this.renderer.setGap(this.settings.gap),this.listenToRenderer(this.renderer),this.defer_opened=new RSVP.defer,this.opened=this.defer_opened.promise,this.store=!1,this.settings.storage!==!1&&this.fromStorage(!0),("string"==typeof this.settings.bookPath||this.settings.bookPath instanceof ArrayBuffer)&&this.open(this.settings.bookPath,this.settings.reload),window.addEventListener("beforeunload",this.unload.bind(this),!1)},EPUBJS.Book.prototype.open=function(a,b){var c,d=this,e=new RSVP.defer;return this.settings.bookPath=a,this.settings.contained||this.isContained(a)?(this.settings.contained=this.contained=!0,this.bookUrl="",c=this.unarchive(a).then(function(){return d.loadPackage()})):(this.bookUrl=this.urlFrom(a),c=this.loadPackage()),c.then(this.settings.restore&&!b&&localStorage?function(a){var b=d.packageIdentifier(a),c=d.restore(b);c||d.unpack(a),e.resolve(),d.defer_opened.resolve()}:function(a){d.unpack(a),e.resolve(),d.defer_opened.resolve()}),this._registerReplacements(this.renderer),e.promise},EPUBJS.Book.prototype.loadPackage=function(a){var b,c=this,d=new EPUBJS.Parser,e=a||"META-INF/container.xml";return b=this.settings.packageUrl?c.loadXml(c.settings.packageUrl):c.loadXml(c.bookUrl+e).then(function(a){return d.container(a)}).then(function(a){return c.settings.contentsPath=c.bookUrl+a.basePath,c.settings.packageUrl=c.bookUrl+a.packagePath,c.settings.encoding=a.encoding,c.loadXml(c.settings.packageUrl)}),b.catch(function(){console.error("Could not load book at: "+e),c.trigger("book:loadFailed",e)}),b},EPUBJS.Book.prototype.packageIdentifier=function(a){var b=new EPUBJS.Parser;return b.identifier(a)},EPUBJS.Book.prototype.unpack=function(a){var b=this,c=new EPUBJS.Parser;b.contents=c.packageContents(a,b.settings.contentsPath),b.manifest=b.contents.manifest,b.spine=b.contents.spine,b.spineIndexByURL=b.contents.spineIndexByURL,b.metadata=b.contents.metadata,b.settings.bookKey||(b.settings.bookKey=b.generateBookKey(b.metadata.identifier)),b.globalLayoutProperties=b.parseLayoutProperties(b.metadata),b.contents.coverPath&&(b.cover=b.contents.cover=b.settings.contentsPath+b.contents.coverPath),b.spineNodeIndex=b.contents.spineNodeIndex,b.ready.manifest.resolve(b.contents.manifest),b.ready.spine.resolve(b.contents.spine),b.ready.metadata.resolve(b.contents.metadata),b.ready.cover.resolve(b.contents.cover),b.locations=new EPUBJS.Locations(b.spine,b.store,b.settings.withCredentials),b.contents.navPath?(b.settings.navUrl=b.settings.contentsPath+b.contents.navPath,b.loadXml(b.settings.navUrl).then(function(a){return c.nav(a,b.spineIndexByURL,b.spine)}).then(function(a){b.toc=b.contents.toc=a,b.ready.toc.resolve(b.contents.toc)},function(){b.ready.toc.resolve(!1)}),b.loadXml(b.settings.navUrl).then(function(a){return c.pageList(a,b.spineIndexByURL,b.spine)}).then(function(a){var c=new EPUBJS.EpubCFI,d=0;0!==a.length&&(b.pageList=b.contents.pageList=a,b.pageList.forEach(function(a){a.cfi||(d+=1,c.generateCfiFromHref(a.href,b).then(function(c){a.cfi=c,a.packageUrl=b.settings.packageUrl,d-=1,0===d&&(b.pagination.process(b.pageList),b.ready.pageList.resolve(b.pageList))}))}),d||(b.pagination.process(b.pageList),b.ready.pageList.resolve(b.pageList)))},function(){b.ready.pageList.resolve([])})):b.contents.tocPath?(b.settings.tocUrl=b.settings.contentsPath+b.contents.tocPath,b.loadXml(b.settings.tocUrl).then(function(a){return c.toc(a,b.spineIndexByURL,b.spine)},function(a){console.error(a)}).then(function(a){b.toc=b.contents.toc=a,b.ready.toc.resolve(b.contents.toc)},function(){b.ready.toc.resolve(!1)})):b.ready.toc.resolve(!1)},EPUBJS.Book.prototype.createHiddenRender=function(a,b,c){var d,e,f=this.element.getBoundingClientRect(),g=b||this.settings.width||f.width,h=c||this.settings.height||f.height;return a.setMinSpreadWidth(this.settings.minSpreadWidth),a.setGap(this.settings.gap),this._registerReplacements(a),this.settings.forceSingle&&a.forceSingle(!0),d=document.createElement("div"),d.style.visibility="hidden",d.style.overflow="hidden",d.style.width="0",d.style.height="0",this.element.appendChild(d),e=document.createElement("div"),e.style.visibility="hidden",e.style.overflow="hidden",e.style.width=g+"px",e.style.height=h+"px",d.appendChild(e),a.initialize(e,this.settings.width,this.settings.height),d},EPUBJS.Book.prototype.generatePageList=function(a,b,c){{var d=[],e=new EPUBJS.Renderer(this.settings.render_method,!1),f=this.createHiddenRender(e,a,b),g=new RSVP.defer,h=-1,i=this.spine.length,j=0,k=function(a){var b,g=h+1,l=a||new RSVP.defer;if(g>=i)l.resolve();else{if(c&&c.cancelled)return e.remove(),this.element.removeChild(f),void l.reject(new Error("User cancelled"));h=g,b=new EPUBJS.Chapter(this.spine[h],this.store),e.displayChapter(b,this.globalLayoutProperties).then(function(){e.pageMap.forEach(function(a){j+=1,d.push({cfi:a.start,page:j})}),e.pageMap.length%2>0&&e.spreads&&(j+=1,d.push({cfi:e.pageMap[e.pageMap.length-1].end,page:j})),setTimeout(function(){k(l)},1)})}return l.promise}.bind(this);k().then(function(){e.remove(),this.element.removeChild(f),g.resolve(d)}.bind(this),function(a){g.reject(a)})}return g.promise},EPUBJS.Book.prototype.generatePagination=function(a,b,c){var d=this,e=new RSVP.defer;return this.ready.spine.promise.then(function(){d.generatePageList(a,b,c).then(function(a){d.pageList=d.contents.pageList=a,d.pagination.process(a),d.ready.pageList.resolve(d.pageList),e.resolve(d.pageList)},function(a){e.reject(a)})}),e.promise},EPUBJS.Book.prototype.loadPagination=function(a){var b=JSON.parse(a);return b&&b.length&&(this.pageList=b,this.pagination.process(this.pageList),this.ready.pageList.resolve(this.pageList)),this.pageList},EPUBJS.Book.prototype.getPageList=function(){return this.ready.pageList.promise},EPUBJS.Book.prototype.getMetadata=function(){return this.ready.metadata.promise},EPUBJS.Book.prototype.getToc=function(){return this.ready.toc.promise},EPUBJS.Book.prototype.networkListeners=function(){var a=this;window.addEventListener("offline",function(){a.online=!1,a.settings.storage&&a.fromStorage(!0),a.trigger("book:offline")},!1),window.addEventListener("online",function(){a.online=!0,a.settings.storage&&a.fromStorage(!1),a.trigger("book:online")},!1)},EPUBJS.Book.prototype.listenToRenderer=function(a){var b=this;a.Events.forEach(function(c){a.on(c,function(a){b.trigger(c,a)})}),a.on("renderer:visibleRangeChanged",function(a){var b,c,d,e=[];this.pageList.length>0&&(b=this.pagination.pageFromCfi(a.start),d=this.pagination.percentageFromPage(b),e.push(b),a.end&&(c=this.pagination.pageFromCfi(a.end),e.push(c)),this.trigger("book:pageChanged",{anchorPage:b,percentage:d,pageRange:e}))}.bind(this)),a.on("render:loaded",this.loadChange.bind(this))},EPUBJS.Book.prototype.loadChange=function(a){var b,c,d=EPUBJS.core.uri(a),e=EPUBJS.core.uri(this.currentChapter.absolute);d.path!=e.path?(console.warn("Miss Match",d.path,this.currentChapter.absolute),b=this.spineIndexByURL[d.filename],c=new EPUBJS.Chapter(this.spine[b],this.store),this.currentChapter=c,this.renderer.currentChapter=c,this.renderer.afterLoad(this.renderer.render.docEl),this.renderer.beforeDisplay(function(){this.renderer.afterDisplay()}.bind(this))):this._rendering||this.renderer.reformat()},EPUBJS.Book.prototype.unlistenToRenderer=function(a){a.Events.forEach(function(b){a.off(b)})},EPUBJS.Book.prototype.coverUrl=function(){var a=this.ready.cover.promise.then(function(){return this.settings.fromStorage?this.store.getUrl(this.contents.cover):this.settings.contained?this.zip.getUrl(this.contents.cover):this.contents.cover}.bind(this));return a.then(function(a){this.cover=a}.bind(this)),a},EPUBJS.Book.prototype.loadXml=function(a){return this.settings.fromStorage?this.store.getXml(a,this.settings.encoding):this.settings.contained?this.zip.getXml(a,this.settings.encoding):EPUBJS.core.request(a,"xml",this.settings.withCredentials)},EPUBJS.Book.prototype.urlFrom=function(a){var b,c=EPUBJS.core.uri(a),d=c.protocol,e="/"==c.path[0],f=window.location,g=f.origin||f.protocol+"//"+f.host,h=document.getElementsByTagName("base");return h.length&&(b=h[0].href),c.protocol?c.origin+c.path:!d&&e?(b||g)+c.path:d||e?void 0:EPUBJS.core.resolveUrl(b||f.pathname,c.path)},EPUBJS.Book.prototype.unarchive=function(a){return this.zip=new EPUBJS.Unarchiver,this.store=this.zip,this.zip.open(a)},EPUBJS.Book.prototype.isContained=function(a){if(a instanceof ArrayBuffer)return!0;var b=EPUBJS.core.uri(a);return!b.extension||"epub"!=b.extension&&"zip"!=b.extension?!1:!0},EPUBJS.Book.prototype.isSaved=function(a){var b;return localStorage?(b=localStorage.getItem(a),localStorage&&null!==b?!0:!1):!1},EPUBJS.Book.prototype.generateBookKey=function(a){return"epubjs:"+EPUBJS.VERSION+":"+window.location.host+":"+a},EPUBJS.Book.prototype.saveContents=function(){return localStorage?void localStorage.setItem(this.settings.bookKey,JSON.stringify(this.contents)):!1},EPUBJS.Book.prototype.removeSavedContents=function(){return localStorage?void localStorage.removeItem(this.settings.bookKey):!1},EPUBJS.Book.prototype.renderTo=function(a){var b,c=this;if(EPUBJS.core.isElement(a))this.element=a;else{if("string"!=typeof a)return void console.error("Not an Element");this.element=EPUBJS.core.getEl(a)}return b=this.opened.then(function(){return c.renderer.initialize(c.element,c.settings.width,c.settings.height),c.metadata.direction&&c.renderer.setDirection(c.metadata.direction),c._rendered(),c.startDisplay()})},EPUBJS.Book.prototype.startDisplay=function(){var a;return a=this.settings.goto?this.goto(this.settings.goto):this.settings.previousLocationCfi?this.gotoCfi(this.settings.previousLocationCfi):this.displayChapter(this.spinePos)},EPUBJS.Book.prototype.restore=function(a){var b,c=this,d=["manifest","spine","metadata","cover","toc","spineNodeIndex","spineIndexByURL","globalLayoutProperties"],e=!1,f=this.generateBookKey(a),g=localStorage.getItem(f),h=d.length;if(this.settings.clearSaved&&(e=!0),!e&&"undefined"!=g&&null!==g)for(c.contents=JSON.parse(g),b=0;h>b;b++){var i=d[b];if(!c.contents[i]){e=!0;break}c[i]=c.contents[i]}return!e&&g&&this.contents&&this.settings.contentsPath?(this.settings.bookKey=f,this.ready.manifest.resolve(this.manifest),this.ready.spine.resolve(this.spine),this.ready.metadata.resolve(this.metadata),this.ready.cover.resolve(this.cover),this.ready.toc.resolve(this.toc),!0):!1},EPUBJS.Book.prototype.displayChapter=function(a,b,c){var d,e,f,g,h=this,i=c||new RSVP.defer;return this.isRendered?this._rendering||this.renderer._moving?(this._displayQ.enqueue("displayChapter",[a,b,i]),i.promise):(EPUBJS.core.isNumber(a)?f=a:(e=new EPUBJS.EpubCFI(a),f=e.spinePos),(0>f||f>=this.spine.length)&&(console.warn("Not A Valid Location"),f=0,b=!1,e=!1),g=new EPUBJS.Chapter(this.spine[f],this.store),this._rendering=!0,this._needsAssetReplacement()&&g.registerHook("beforeChapterRender",[EPUBJS.replace.head,EPUBJS.replace.resources,EPUBJS.replace.svg],!0),h.currentChapter=g,d=h.renderer.displayChapter(g,this.globalLayoutProperties),e?h.renderer.gotoCfi(e):b&&h.renderer.lastPage(),d.then(function(){h.spinePos=f,i.resolve(h.renderer),h.settings.fromStorage===!1&&h.settings.contained===!1&&h.preloadNextChapter(),h._rendering=!1,h._displayQ.dequeue(),0===h._displayQ.length()&&h._gotoQ.dequeue()},function(a){console.error("Could not load Chapter: "+g.absolute,a),h.trigger("book:chapterLoadFailed",g.absolute),h._rendering=!1,i.reject(a)}),i.promise):(this._q.enqueue("displayChapter",arguments),i.reject({message:"Rendering",stack:(new Error).stack}),i.promise)},EPUBJS.Book.prototype.nextPage=function(a){var a=a||new RSVP.defer;if(!this.isRendered)return this._q.enqueue("nextPage",[a]),a.promise;var b=this.renderer.nextPage();return b?(a.resolve(!0),a.promise):this.nextChapter(a)},EPUBJS.Book.prototype.prevPage=function(a){var a=a||new RSVP.defer;if(!this.isRendered)return this._q.enqueue("prevPage",[a]),a.promise;var b=this.renderer.prevPage();return b?(a.resolve(!0),a.promise):this.prevChapter(a)},EPUBJS.Book.prototype.nextChapter=function(a){var a=a||new RSVP.defer;if(this.spinePos0){for(var b=this.spinePos-1;this.spine[b]&&this.spine[b].linear&&"no"==this.spine[b].linear;)b--;if(b>=0)return this.displayChapter(b,!0,a)}return this.trigger("book:atStart"),a.resolve(!0),a.promise},EPUBJS.Book.prototype.getCurrentLocationCfi=function(){return this.isRendered?this.renderer.currentLocationCfi:!1},EPUBJS.Book.prototype.goto=function(a){return 0===a.indexOf("epubcfi(")?this.gotoCfi(a):a.indexOf("%")===a.length-1?this.gotoPercentage(parseInt(a.substring(0,a.length-1))/100):"number"==typeof a||isNaN(a)===!1?this.gotoPage(a):this.gotoHref(a)},EPUBJS.Book.prototype.gotoCfi=function(a,b){var c,d,e,f,g,h=b||new RSVP.defer;return this.isRendered?this._moving||this._rendering?(console.warn("Renderer is moving"),this._gotoQ.enqueue("gotoCfi",[a,h]),!1):(c=new EPUBJS.EpubCFI(a),d=c.spinePos,-1==d?!1:(e=this.spine[d],f=h.promise,this._moving=!0,this.currentChapter&&this.spinePos===d?(this.renderer.gotoCfi(c),this._moving=!1,h.resolve(this.renderer.currentLocationCfi)):(e&&-1!=d||(d=0,e=this.spine[d]),g=this.displayChapter(a),g.then(function(a){this._moving=!1,h.resolve(a.currentLocationCfi)}.bind(this),function(){this._moving=!1}.bind(this))),f.then(function(){this._gotoQ.dequeue()}.bind(this)),f)):(console.warn("Not yet Rendered"),this.settings.previousLocationCfi=a,!1)},EPUBJS.Book.prototype.gotoHref=function(a,b){var c,d,e,f,g,h=b||new RSVP.defer;return this.isRendered?this._moving||this._rendering?(this._gotoQ.enqueue("gotoHref",[a,h]),!1):(c=a.split("#"),d=c[0],e=c[1]||!1,f=-1==d.search("://")?d.replace(EPUBJS.core.uri(this.settings.contentsPath).path,""):d.replace(this.settings.contentsPath,""),g=this.spineIndexByURL[f],d||(g=this.currentChapter?this.currentChapter.spinePos:0),"number"!=typeof g?!1:this.currentChapter&&g==this.currentChapter.spinePos?(e?this.renderer.section(e):this.renderer.firstPage(),h.resolve(this.renderer.currentLocationCfi),h.promise.then(function(){this._gotoQ.dequeue()}.bind(this)),h.promise):this.displayChapter(g).then(function(){e&&this.renderer.section(e),h.resolve(this.renderer.currentLocationCfi)}.bind(this))):(this.settings.goto=a,!1)},EPUBJS.Book.prototype.gotoPage=function(a){var b=this.pagination.cfiFromPage(a);return this.gotoCfi(b)},EPUBJS.Book.prototype.gotoPercentage=function(a){var b=this.pagination.pageFromPercentage(a);return this.gotoPage(b)},EPUBJS.Book.prototype.preloadNextChapter=function(){var a,b=this.spinePos+1;return b>=this.spine.length?!1:(a=new EPUBJS.Chapter(this.spine[b]),void(a&&EPUBJS.core.request(a.absolute)))},EPUBJS.Book.prototype.storeOffline=function(){var a=this,b=EPUBJS.core.values(this.manifest);return this.store.put(b).then(function(){a.settings.stored=!0,a.trigger("book:stored")})},EPUBJS.Book.prototype.availableOffline=function(){return this.settings.stored>0?!0:!1},EPUBJS.Book.prototype.toStorage=function(){var a=this.settings.bookKey;this.store.isStored(a).then(function(b){return b===!0?(this.settings.stored=!0,!0):this.storeOffline().then(function(){this.store.token(a,!0)}.bind(this))}.bind(this))},EPUBJS.Book.prototype.fromStorage=function(a){[EPUBJS.replace.head,EPUBJS.replace.resources,EPUBJS.replace.svg];this.contained||this.settings.contained||(this.online&&this.opened.then(this.toStorage.bind(this)),this.store&&this.settings.fromStorage&&a===!1?(this.settings.fromStorage=!1,this.store.off("offline"),this.store=!1):this.settings.fromStorage||(this.store=new EPUBJS.Storage(this.settings.credentials),this.store.on("offline",function(a){a?(this.offline=!0,this.settings.fromStorage=!0,this.trigger("book:offline")):(this.offline=!1,this.settings.fromStorage=!1,this.trigger("book:online"))}.bind(this))))},EPUBJS.Book.prototype.setStyle=function(a,b,c){var d=["color","background","background-color"];return this.isRendered?(this.settings.styles[a]=b,this.renderer.setStyle(a,b,c),void(-1===d.indexOf(a)&&this.renderer.reformat())):this._q.enqueue("setStyle",arguments)},EPUBJS.Book.prototype.removeStyle=function(a){return this.isRendered?(this.renderer.removeStyle(a),this.renderer.reformat(),void delete this.settings.styles[a]):this._q.enqueue("removeStyle",arguments)},EPUBJS.Book.prototype.addHeadTag=function(a,b){return this.isRendered?void(this.settings.headTags[a]=b):this._q.enqueue("addHeadTag",arguments)},EPUBJS.Book.prototype.useSpreads=function(a){console.warn("useSpreads is deprecated, use forceSingle or set a layoutOveride instead"),this.forceSingle(a===!1?!0:!1)},EPUBJS.Book.prototype.forceSingle=function(a){var b="undefined"==typeof a?!0:a;this.renderer.forceSingle(b),this.settings.forceSingle=b,this.isRendered&&this.renderer.reformat()},EPUBJS.Book.prototype.setMinSpreadWidth=function(a){this.settings.minSpreadWidth=a,this.isRendered&&(this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth),this.renderer.reformat())},EPUBJS.Book.prototype.setGap=function(a){this.settings.gap=a,this.isRendered&&(this.renderer.setGap(this.settings.gap),this.renderer.reformat())},EPUBJS.Book.prototype.chapter=function(a){var b,c,d=this.spineIndexByURL[a];return d&&(b=this.spine[d],c=new EPUBJS.Chapter(b,this.store,this.settings.withCredentials),c.load()),c},EPUBJS.Book.prototype.unload=function(){this.settings.restore&&localStorage&&this.saveContents(),this.unlistenToRenderer(this.renderer),this.trigger("book:unload")},EPUBJS.Book.prototype.destroy=function(){window.removeEventListener("beforeunload",this.unload),this.currentChapter&&this.currentChapter.unload(),this.unload(),this.renderer&&this.renderer.remove()},EPUBJS.Book.prototype._ready=function(){this.trigger("book:ready")},EPUBJS.Book.prototype._rendered=function(){this.isRendered=!0,this.trigger("book:rendered"),this._q.flush() -},EPUBJS.Book.prototype.applyStyles=function(a,b){a.applyStyles(this.settings.styles),b()},EPUBJS.Book.prototype.applyHeadTags=function(a,b){a.applyHeadTags(this.settings.headTags),b()},EPUBJS.Book.prototype._registerReplacements=function(a){a.registerHook("beforeChapterDisplay",this.applyStyles.bind(this,a),!0),a.registerHook("beforeChapterDisplay",this.applyHeadTags.bind(this,a),!0),a.registerHook("beforeChapterDisplay",EPUBJS.replace.hrefs.bind(this),!0)},EPUBJS.Book.prototype._needsAssetReplacement=function(){return this.settings.fromStorage?!0:this.settings.contained?!0:!1},EPUBJS.Book.prototype.parseLayoutProperties=function(a){var b=this.settings.layoutOveride&&this.settings.layoutOveride.layout||a.layout||"reflowable",c=this.settings.layoutOveride&&this.settings.layoutOveride.spread||a.spread||"auto",d=this.settings.layoutOveride&&this.settings.layoutOveride.orientation||a.orientation||"auto";return{layout:b,spread:c,orientation:d}},RSVP.EventTarget.mixin(EPUBJS.Book.prototype),RSVP.on("error",function(a){console.error(a)}),EPUBJS.Chapter=function(a,b,c){this.href=a.href,this.absolute=a.url,this.id=a.id,this.spinePos=a.index,this.cfiBase=a.cfiBase,this.properties=a.properties,this.manifestProperties=a.manifestProperties,this.linear=a.linear,this.pages=1,this.store=b,this.credentials=c,this.epubcfi=new EPUBJS.EpubCFI,this.deferred=new RSVP.defer,this.loaded=this.deferred.promise,EPUBJS.Hooks.mixin(this),this.getHooks("beforeChapterRender"),this.caches={}},EPUBJS.Chapter.prototype.load=function(a,b){var c,d=a||this.store,e=b||this.credentials;return c=d?d.getXml(this.absolute):EPUBJS.core.request(this.absolute,!1,e),c.then(function(a){try{this.setDocument(a),this.deferred.resolve(this)}catch(b){this.deferred.reject({message:this.absolute+" -> "+b.message,stack:(new Error).stack})}}.bind(this)),c},EPUBJS.Chapter.prototype.render=function(){return this.load().then(function(a){var b=a.querySelector("head"),c=a.createElement("base");return c.setAttribute("href",this.absolute),b.insertBefore(c,b.firstChild),this.contents=a,new RSVP.Promise(function(b){this.triggerHooks("beforeChapterRender",function(){b(a)}.bind(this),this)}.bind(this))}.bind(this)).then(function(a){var b=new XMLSerializer,c=b.serializeToString(a);return c}.bind(this))},EPUBJS.Chapter.prototype.url=function(a){var b,c=new RSVP.defer,d=a||this.store,e=this;return d?this.tempUrl?(b=this.tempUrl,c.resolve(b)):d.getUrl(this.absolute).then(function(a){e.tempUrl=a,c.resolve(a)}):(b=this.absolute,c.resolve(b)),c.promise},EPUBJS.Chapter.prototype.setPages=function(a){this.pages=a},EPUBJS.Chapter.prototype.getPages=function(){return this.pages},EPUBJS.Chapter.prototype.getID=function(){return this.ID},EPUBJS.Chapter.prototype.unload=function(a){this.document=null,this.tempUrl&&a&&(a.revokeUrl(this.tempUrl),this.tempUrl=!1)},EPUBJS.Chapter.prototype.setDocument=function(a){{var b=a.namespaceURI;a.doctype}this.document=a.implementation.createDocument(b,null,null),this.contents=this.document.importNode(a.documentElement,!0),this.document.appendChild(this.contents),!this.document.evaluate&&document.evaluate&&(this.document.evaluate=document.evaluate)},EPUBJS.Chapter.prototype.cfiFromRange=function(a){var b,c,d,e,f,g;if(this.document){if("undefined"!=typeof document.evaluate){if(c=EPUBJS.core.getElementXPath(a.startContainer),d=EPUBJS.core.getElementXPath(a.endContainer),e=this.document.evaluate(c,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,a.collapsed||(f=this.document.evaluate(d,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue),b=this.document.createRange(),e)try{b.setStart(e,a.startOffset),!a.collapsed&&f&&b.setEnd(f,a.endOffset)}catch(h){console.log("missed"),e=!1}e||(console.log("not found, try fuzzy match"),cleanStartTextContent=EPUBJS.core.cleanStringForXpath(a.startContainer.textContent),c="//text()[contains(.,"+cleanStartTextContent+")]",e=this.document.evaluate(c,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,e&&(b.setStart(e,a.startOffset),a.collapsed||(g=EPUBJS.core.cleanStringForXpath(a.endContainer.textContent),d="//text()[contains(.,"+g+")]",f=this.document.evaluate(d,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,f&&b.setEnd(f,a.endOffset))))}else b=a;return this.epubcfi.generateCfiFromRange(b,this.cfiBase)}},EPUBJS.Chapter.prototype.find=function(a){var b=this,c=[],d=a.toLowerCase(),e=function(a){for(var e,f,g,h=a.textContent.toLowerCase(),i=b.document.createRange(),j=-1,k=150;-1!=f;)f=h.indexOf(d,j+1),-1!=f&&(i=b.document.createRange(),i.setStart(a,f),i.setEnd(a,f+d.length),e=b.cfiFromRange(i),a.textContent.length=g&&c&&c(!0),e=!0)};b(a,f)}.bind(this))},EPUBJS.Chapter.prototype.replaceWithStored=function(a,b,c,d){var e,f={},g=this.store,h=this.caches[a],i=EPUBJS.core.uri(this.absolute),j=i.base,k=b,l=5,m=function(a,b){f[b]=a},n=function(){d&&d(),EPUBJS.core.values(e).forEach(function(a){g.revokeUrl(a)}),h=f};g&&(h||(h={}),e=EPUBJS.core.clone(h),this.replace(a,function(b,d){var h=b.getAttribute(k),i=EPUBJS.core.resolveUrl(j,h),m=function(c){var e;b.onload=function(){clearTimeout(e),d(c,i)},b.onerror=function(a){clearTimeout(e),d(c,i),console.error(a)},"svg image"==a&&b.setAttribute("externalResourcesRequired","true"),"link[href]"==a&&"stylesheet"!==b.getAttribute("rel")?d(c,i):e=setTimeout(function(){d(c,i)},l),c&&b.setAttribute(k,c)};i in e?(m(e[i]),f[i]=e[i],delete e[i]):c(g,i,m,b)},n,m))};var EPUBJS=EPUBJS||{};EPUBJS.core={},EPUBJS.core.getEl=function(a){return document.getElementById(a)},EPUBJS.core.getEls=function(a){return document.getElementsByClassName(a)},EPUBJS.core.request=function(a,b,c){var d,e=window.URL,f=e?"blob":"arraybuffer",g=new RSVP.defer,h=new XMLHttpRequest,i=XMLHttpRequest.prototype,j=function(){var a;this.readyState==this.DONE&&(200!==this.status&&0!==this.status||!this.response?g.reject({message:this.response,stack:(new Error).stack}):(a="xml"==b?this.responseXML?this.responseXML:(new DOMParser).parseFromString(this.response,"application/xml"):"xhtml"==b?this.responseXML?this.responseXML:(new DOMParser).parseFromString(this.response,"application/xhtml+xml"):"html"==b?this.responseXML?this.responseXML:(new DOMParser).parseFromString(this.response,"text/html"):"json"==b?JSON.parse(this.response):"blob"==b?e?this.response:new Blob([this.response]):this.response,g.resolve(a)))};return"overrideMimeType"in i||Object.defineProperty(i,"overrideMimeType",{value:function(){}}),h.onreadystatechange=j,h.open("GET",a,!0),c&&(h.withCredentials=!0),b||(d=EPUBJS.core.uri(a),b=d.extension,b={htm:"html"}[b]||b),"blob"==b&&(h.responseType=f),"json"==b&&h.setRequestHeader("Accept","application/json"),"xml"==b&&(h.responseType="document",h.overrideMimeType("text/xml")),"xhtml"==b&&(h.responseType="document"),"html"==b&&(h.responseType="document"),"binary"==b&&(h.responseType="arraybuffer"),h.send(),g.promise},EPUBJS.core.toArray=function(a){var b=[];for(var c in a){var d;a.hasOwnProperty(c)&&(d=a[c],d.ident=c,b.push(d))}return b},EPUBJS.core.uri=function(a){var b,c,d,e={protocol:"",host:"",path:"",origin:"",directory:"",base:"",filename:"",extension:"",fragment:"",href:a},f=a.indexOf("blob:"),g=a.indexOf("://"),h=a.indexOf("?"),i=a.indexOf("#");return 0===f?(e.protocol="blob",e.base=a.indexOf(0,i),e):(-1!=i&&(e.fragment=a.slice(i+1),a=a.slice(0,i)),-1!=h&&(e.search=a.slice(h+1),a=a.slice(0,h),href=a),-1!=g?(e.protocol=a.slice(0,g),b=a.slice(g+3),d=b.indexOf("/"),-1===d?(e.host=e.path,e.path=""):(e.host=b.slice(0,d),e.path=b.slice(d)),e.origin=e.protocol+"://"+e.host,e.directory=EPUBJS.core.folder(e.path),e.base=e.origin+e.directory):(e.path=a,e.directory=EPUBJS.core.folder(a),e.base=e.directory),e.filename=a.replace(e.base,""),c=e.filename.lastIndexOf("."),-1!=c&&(e.extension=e.filename.slice(c+1)),e)},EPUBJS.core.folder=function(a){var b=a.lastIndexOf("/");if(-1==b)var c="";return c=a.slice(0,b+1)},EPUBJS.core.dataURLToBlob=function(a){var b,c,d,e,f,g=";base64,";if(-1==a.indexOf(g))return b=a.split(","),c=b[0].split(":")[1],d=b[1],new Blob([d],{type:c});b=a.split(g),c=b[0].split(":")[1],d=window.atob(b[1]),e=d.length,f=new Uint8Array(e);for(var h=0;e>h;++h)f[h]=d.charCodeAt(h);return new Blob([f],{type:c})},EPUBJS.core.addScript=function(a,b,c){var d,e;e=!1,d=document.createElement("script"),d.type="text/javascript",d.async=!1,d.src=a,d.onload=d.onreadystatechange=function(){e||this.readyState&&"complete"!=this.readyState||(e=!0,b&&b())},c=c||document.body,c.appendChild(d)},EPUBJS.core.addScripts=function(a,b,c){var d=a.length,e=0,f=function(){e++,d==e?b&&b():EPUBJS.core.addScript(a[e],f,c)};EPUBJS.core.addScript(a[e],f,c)},EPUBJS.core.addCss=function(a,b,c){var d,e;e=!1,d=document.createElement("link"),d.type="text/css",d.rel="stylesheet",d.href=a,d.onload=d.onreadystatechange=function(){e||this.readyState&&"complete"!=this.readyState||(e=!0,b&&b())},c=c||document.body,c.appendChild(d)},EPUBJS.core.prefixed=function(a){var b=["Webkit","Moz","O","ms"],c=a[0].toUpperCase()+a.slice(1),d=b.length;if("undefined"!=typeof document.documentElement.style[a])return a;for(var e=0;d>e;e++)if("undefined"!=typeof document.documentElement.style[b[e]+c])return b[e]+c;return a},EPUBJS.core.resolveUrl=function(a,b){var c,d,e=[],f=EPUBJS.core.uri(b),g=a.split("/");return f.host?b:(g.pop(),d=b.split("/"),d.forEach(function(a){".."===a?g.pop():e.push(a)}),c=g.concat(e),c.join("/"))},EPUBJS.core.uuid=function(){var a=(new Date).getTime(),b="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(b){var c=(a+16*Math.random())%16|0;return a=Math.floor(a/16),("x"==b?c:7&c|8).toString(16)});return b},EPUBJS.core.insert=function(a,b,c){var d=EPUBJS.core.locationOf(a,b,c);return b.splice(d,0,a),d},EPUBJS.core.locationOf=function(a,b,c,d,e){var f,g=d||0,h=e||b.length,i=parseInt(g+(h-g)/2);return c||(c=function(a,b){return a>b?1:b>a?-1:(a=b)?0:void 0}),0>=h-g?i:(f=c(b[i],a),h-g===1?f>0?i:i+1:0===f?i:-1===f?EPUBJS.core.locationOf(a,b,c,i,h):EPUBJS.core.locationOf(a,b,c,g,i))},EPUBJS.core.indexOfSorted=function(a,b,c,d,e){var f,g=d||0,h=e||b.length,i=parseInt(g+(h-g)/2);return c||(c=function(a,b){return a>b?1:b>a?-1:(a=b)?0:void 0}),0>=h-g?-1:(f=c(b[i],a),h-g===1?0===f?i:-1:0===f?i:-1===f?EPUBJS.core.indexOfSorted(a,b,c,i,h):EPUBJS.core.indexOfSorted(a,b,c,g,i))},EPUBJS.core.queue=function(a){var b=[],c=a,d=function(a,c,d){return b.push({funcName:a,args:c,context:d}),b},e=function(){var a;b.length&&(a=b.shift(),c[a.funcName].apply(a.context||c,a.args))},f=function(){for(;b.length;)e()},g=function(){b=[]},h=function(){return b.length};return{enqueue:d,dequeue:e,flush:f,clear:g,length:h}},EPUBJS.core.getElementXPath=function(a){return a&&a.id?'//*[@id="'+a.id+'"]':EPUBJS.core.getElementTreeXPath(a)},EPUBJS.core.getElementTreeXPath=function(a){var b,c,d,e,f=[],g="http://www.w3.org/1999/xhtml"===a.ownerDocument.documentElement.getAttribute("xmlns");for(a.nodeType===Node.TEXT_NODE&&(b=EPUBJS.core.indexOfTextNode(a)+1,f.push("text()["+b+"]"),a=a.parentNode);a&&1==a.nodeType;a=a.parentNode){b=0;for(var h=a.previousSibling;h;h=h.previousSibling)h.nodeType!=Node.DOCUMENT_TYPE_NODE&&h.nodeName==a.nodeName&&++b;c=a.nodeName.toLowerCase(),d=g?"xhtml:"+c:c,e=b?"["+(b+1)+"]":"",f.splice(0,0,d+e)}return f.length?"./"+f.join("/"):null},EPUBJS.core.nsResolver=function(a){var b={xhtml:"http://www.w3.org/1999/xhtml",epub:"http://www.idpf.org/2007/ops"};return b[a]||null},EPUBJS.core.cleanStringForXpath=function(a){var b=a.match(/[^'"]+|['"]/g);return b=b.map(function(a){return"'"===a?'"\'"':'"'===a?"'\"'":"'"+a+"'"}),"concat('',"+b.join(",")+")"},EPUBJS.core.indexOfTextNode=function(a){for(var b,c=a.parentNode,d=c.childNodes,e=-1,f=0;fb;b++){var d=arguments[b];for(var e in d)void 0===a[e]&&(a[e]=d[e])}return a},EPUBJS.core.extend=function(a){var b=[].slice.call(arguments,1);return b.forEach(function(b){b&&Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}),a},EPUBJS.core.clone=function(a){return EPUBJS.core.isArray(a)?a.slice():EPUBJS.core.extend({},a)},EPUBJS.core.isElement=function(a){return!(!a||1!=a.nodeType)},EPUBJS.core.isNumber=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},EPUBJS.core.isString=function(a){return"string"==typeof a||a instanceof String},EPUBJS.core.isArray=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},EPUBJS.core.values=function(a){var b,c,d,e=-1;if(!a)return[];for(b=Object.keys(a),c=b.length,d=Array(c);++e0;){if(c=d.shift(),"text"===c.type?(e=g.childNodes[c.index],g=e.parentNode||g):g=c.id?f.getElementById(c.id):h[c.index],!g||"undefined"==typeof g)return console.error("No Element For",c,a.str),!1;h=Array.prototype.slice.call(g.children)}return g},EPUBJS.EpubCFI.prototype.compare=function(a,b){if("string"==typeof a&&(a=new EPUBJS.EpubCFI(a)),"string"==typeof b&&(b=new EPUBJS.EpubCFI(b)),a.spinePos>b.spinePos)return 1;if(a.spinePosb.steps[c].index)return 1;if(a.steps[c].indexb.characterOffset?1:a.characterOffset")},EPUBJS.EpubCFI.prototype.generateRangeFromCfi=function(a,b){var c,d,e,f,g,h,i=b||document,j=i.createRange();return"string"==typeof a&&(a=this.parse(a)),-1===a.spinePos?!1:(c=a.steps[a.steps.length-1],"undefined"!=typeof document.evaluate?(d=this.generateXpathFromSteps(a.steps),e=i.evaluate(d,i,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue):(g=this.generateQueryFromSteps(a.steps),h=i.querySelector(g),h&&"text"==c.type&&(e=h.childNodes[c.index])),e?(e&&a.characterOffset>=0?(f=e.length,a.characterOffset-1&&this.hooks[a].splice(c,1)):Array.isArray(b)&&b.forEach(function(b){c=this.hooks[a].indexOf(b),c>-1&&this.hooks[a].splice(c,1)},this))},a.prototype.triggerHooks=function(a,b,c){function d(){f--,0>=f&&b&&b()}var e,f;return"undefined"==typeof this.hooks[a]?!1:(e=this.hooks[a],f=e.length,0===f&&b&&b(),void e.forEach(function(a){a(d,c)}))},{register:function(a){if(void 0===EPUBJS.hooks[a]&&(EPUBJS.hooks[a]={}),"object"!=typeof EPUBJS.hooks[a])throw"Already registered: "+a;return EPUBJS.hooks[a]},mixin:function(b){for(var c in a.prototype)b[c]=a.prototype[c]}}}(),EPUBJS.Layout=EPUBJS.Layout||{},EPUBJS.Layout.Reflowable=function(){this.documentElement=null,this.spreadWidth=null},EPUBJS.Layout.Reflowable.prototype.format=function(a,b,c,d){var e=EPUBJS.core.prefixed("columnAxis"),f=EPUBJS.core.prefixed("columnGap"),g=EPUBJS.core.prefixed("columnWidth"),h=EPUBJS.core.prefixed("columnFill"),i=Math.floor(b),j=Math.floor(i/8),k=d>=0?d:j%2===0?j:j-1;return this.documentElement=a,this.spreadWidth=i+k,a.style.overflow="hidden",a.style.width=i+"px",a.style.height=c+"px",a.style[e]="horizontal",a.style[h]="auto",a.style[g]=i+"px",a.style[f]=k+"px",this.colWidth=i,this.gap=k,{pageWidth:this.spreadWidth,pageHeight:c}},EPUBJS.Layout.Reflowable.prototype.calculatePages=function(){var a,b;return this.documentElement.style.width="auto",a=this.documentElement.scrollWidth,b=Math.ceil(a/this.spreadWidth),{displayedPages:b,pageCount:b}},EPUBJS.Layout.ReflowableSpreads=function(){this.documentElement=null,this.spreadWidth=null},EPUBJS.Layout.ReflowableSpreads.prototype.format=function(a,b,c,d){var e=EPUBJS.core.prefixed("columnAxis"),f=EPUBJS.core.prefixed("columnGap"),g=EPUBJS.core.prefixed("columnWidth"),h=EPUBJS.core.prefixed("columnFill"),i=2,j=Math.floor(b),k=j%2===0?j:j-1,l=Math.floor(k/8),m=d>=0?d:l%2===0?l:l-1,n=Math.floor((k-m)/i);return this.documentElement=a,this.spreadWidth=(n+m)*i,a.style.overflow="hidden",a.style.width=k+"px",a.style.height=c+"px",a.style[e]="horizontal",a.style[h]="auto",a.style[f]=m+"px",a.style[g]=n+"px",this.colWidth=n,this.gap=m,{pageWidth:this.spreadWidth,pageHeight:c}},EPUBJS.Layout.ReflowableSpreads.prototype.calculatePages=function(){var a=this.documentElement.scrollWidth,b=Math.ceil(a/this.spreadWidth);return this.documentElement.style.width=b*this.spreadWidth-this.gap+"px",{displayedPages:b,pageCount:2*b}},EPUBJS.Layout.Fixed=function(){this.documentElement=null},EPUBJS.Layout.Fixed.prototype.format=function(a){var b,c,d,e,f=EPUBJS.core.prefixed("columnWidth"),g=a.querySelector("[name=viewport]");return this.documentElement=a,g&&g.hasAttribute("content")&&(b=g.getAttribute("content"),c=b.split(","),c[0]&&(d=c[0].replace("width=","")),c[1]&&(e=c[1].replace("height=",""))),a.style.width=d+"px"||"auto",a.style.height=e+"px"||"auto",a.style[f]="auto",a.style.overflow="auto",this.colWidth=d,this.gap=0,{pageWidth:d,pageHeight:e}},EPUBJS.Layout.Fixed.prototype.calculatePages=function(){return{displayedPages:1,pageCount:1}},EPUBJS.Locations=function(a,b,c){this.spine=a,this.store=b,this.credentials=c,this.epubcfi=new EPUBJS.EpubCFI,this._locations=[],this.total=0,this.break=150,this._current=0},EPUBJS.Locations.prototype.generate=function(a){var b,c=new RSVP.defer,d=-1,e=this.spine.length,f=function(a){var b,c=d+1,g=a||new RSVP.defer;return c>=e?g.resolve():(d=c,b=new EPUBJS.Chapter(this.spine[d],this.store,this.credentials),this.process(b).then(function(){setTimeout(function(){f(g)},1)})),g.promise}.bind(this);return"number"==typeof a&&(this.break=a),b=f().then(function(){this.total=this._locations.length-1,this._currentCfi&&(this.currentLocation=this._currentCfi),c.resolve(this._locations)}.bind(this)),c.promise},EPUBJS.Locations.prototype.process=function(a){return a.load().then(function(b){var c,d,e,f=b,g=f.documentElement.querySelector("body"),h=0;this.sprint(g,function(b){var g,i=b.length,j=0;for(0===h&&(c=f.createRange(),c.setStart(b,0)),g=this.break-h,g>i&&(h+=i,j=i);i>j;)h=this.break,j+=this.break,j>=i?h=i-(j-this.break):(c.setEnd(b,j),e=a.cfiFromRange(c),this._locations.push(e),h=0,j+=1,c=f.createRange(),c.setStart(b,j));d=b}.bind(this)),c&&(c.setEnd(d,d.length),e=a.cfiFromRange(c),this._locations.push(e),h=0)}.bind(this))},EPUBJS.Locations.prototype.sprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);c=d.nextNode();)b(c)},EPUBJS.Locations.prototype.locationFromCfi=function(a){return 0===this._locations.length?-1:EPUBJS.core.locationOf(a,this._locations,this.epubcfi.compare)},EPUBJS.Locations.prototype.percentageFromCfi=function(a){var b=this.locationFromCfi(a);return this.percentageFromLocation(b)},EPUBJS.Locations.prototype.percentageFromLocation=function(a){return a&&this.total?a/this.total:0},EPUBJS.Locations.prototype.cfiFromLocation=function(a){var b=-1;return"number"!=typeof a&&(a=parseInt(a)),a>=0&&a1?a/100:a,c=Math.ceil(this.total*b);return this.cfiFromLocation(c)},EPUBJS.Locations.prototype.load=function(a){return this._locations=JSON.parse(a),this.total=this._locations.length-1,this._locations},EPUBJS.Locations.prototype.save=function(){return JSON.stringify(this._locations)},EPUBJS.Locations.prototype.getCurrent=function(){return this._current},EPUBJS.Locations.prototype.setCurrent=function(a){var b;if("string"==typeof a)this._currentCfi=a;else{if("number"!=typeof a)return;this._current=a}0!==this._locations.length&&("string"==typeof a?(b=this.locationFromCfi(a),this._current=b):b=a,this.trigger("changed",{percentage:this.percentageFromLocation(b)}))},Object.defineProperty(EPUBJS.Locations.prototype,"currentLocation",{get:function(){return this._current},set:function(a){this.setCurrent(a)}}),RSVP.EventTarget.mixin(EPUBJS.Locations.prototype),EPUBJS.Pagination=function(a){this.pages=[],this.locations=[],this.epubcfi=new EPUBJS.EpubCFI,a&&a.length&&this.process(a)},EPUBJS.Pagination.prototype.process=function(a){a.forEach(function(a){this.pages.push(a.page),this.locations.push(a.cfi)},this),this.pageList=a,this.firstPage=parseInt(this.pages[0]),this.lastPage=parseInt(this.pages[this.pages.length-1]),this.totalPages=this.lastPage-this.firstPage},EPUBJS.Pagination.prototype.pageFromCfi=function(a){var b=-1;if(0===this.locations.length)return-1;var c=EPUBJS.core.indexOfSorted(a,this.locations,this.epubcfi.compare);return-1!=c?b=this.pages[c]:(c=EPUBJS.core.locationOf(a,this.locations,this.epubcfi.compare),b=c-1>=0?this.pages[c-1]:this.pages[0],void 0!==b||(b=-1)),b},EPUBJS.Pagination.prototype.cfiFromPage=function(a){var b=-1;"number"!=typeof a&&(a=parseInt(a));var c=this.pages.indexOf(a);return-1!=c&&(b=this.locations[c]),b},EPUBJS.Pagination.prototype.pageFromPercentage=function(a){var b=Math.round(this.totalPages*a);return b},EPUBJS.Pagination.prototype.percentageFromPage=function(a){var b=(a-this.firstPage)/this.totalPages;return Math.round(1e3*b)/1e3},EPUBJS.Pagination.prototype.percentageFromCfi=function(a){var b=this.pageFromCfi(a),c=this.percentageFromPage(b);return c},EPUBJS.Parser=function(a){this.baseUrl=a||""},EPUBJS.Parser.prototype.container=function(a){var b,c,d,e;return a?(b=a.querySelector("rootfile"))?(c=b.getAttribute("full-path"),d=EPUBJS.core.uri(c).directory,e=a.xmlEncoding,{packagePath:c,basePath:d,encoding:e}):void console.error("No RootFile Found"):void console.error("Container File Not Found")},EPUBJS.Parser.prototype.identifier=function(a){var b;return a?(b=a.querySelector("metadata"),b?this.getElementText(b,"identifier"):void console.error("No Metadata Found")):void console.error("Package File Not Found")},EPUBJS.Parser.prototype.packageContents=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=this;return b&&(this.baseUrl=b),a?(c=a.querySelector("metadata"))?(d=a.querySelector("manifest"))?(e=a.querySelector("spine"))?(f=n.manifest(d),g=n.findNavPath(d),h=n.findTocPath(d,e),i=n.findCoverPath(a),j=Array.prototype.indexOf.call(e.parentNode.childNodes,e),k=n.spine(e,f),l={},k.forEach(function(a){l[a.href]=a.index}),m=n.metadata(c),m.direction=e.getAttribute("page-progression-direction"),{metadata:m,spine:k,manifest:f,navPath:g,tocPath:h,coverPath:i,spineNodeIndex:j,spineIndexByURL:l}):void console.error("No Spine Found"):void console.error("No Manifest Found"):void console.error("No Metadata Found"):void console.error("Package File Not Found")},EPUBJS.Parser.prototype.findNavPath=function(a){var b=a.querySelector("item[properties$='nav'], item[properties^='nav '], item[properties*=' nav ']");return b?b.getAttribute("href"):!1},EPUBJS.Parser.prototype.findTocPath=function(a,b){var c,d=a.querySelector("item[media-type='application/x-dtbncx+xml']");return d||(c=b.getAttribute("toc"),c&&(d=a.querySelector("item[id='"+c+"']"))),d?d.getAttribute("href"):!1},EPUBJS.Parser.prototype.metadata=function(a){var b={},c=this;return b.bookTitle=c.getElementText(a,"title"),b.creator=c.getElementText(a,"creator"),b.description=c.getElementText(a,"description"),b.pubdate=c.getElementText(a,"date"),b.publisher=c.getElementText(a,"publisher"),b.identifier=c.getElementText(a,"identifier"),b.language=c.getElementText(a,"language"),b.rights=c.getElementText(a,"rights"),b.modified_date=c.querySelectorText(a,"meta[property='dcterms:modified']"),b.layout=c.querySelectorText(a,"meta[property='rendition:layout']"),b.orientation=c.querySelectorText(a,"meta[property='rendition:orientation']"),b.spread=c.querySelectorText(a,"meta[property='rendition:spread']"),b},EPUBJS.Parser.prototype.findCoverPath=function(a){var b=a.querySelector("package").getAttribute("version");if("2.0"===b){var c=a.querySelector('meta[name="cover"]');if(c){var d=c.getAttribute("content"),e=a.querySelector("item[id='"+d+"']");return e?e.getAttribute("href"):!1}return!1}var f=a.querySelector("item[properties='cover-image']");return f?f.getAttribute("href"):!1},EPUBJS.Parser.prototype.getElementText=function(a,b){var c,d=a.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/",b);return d&&0!==d.length?(c=d[0],c.childNodes.length?c.childNodes[0].nodeValue:""):""},EPUBJS.Parser.prototype.querySelectorText=function(a,b){var c=a.querySelector(b); -return c&&c.childNodes.length?c.childNodes[0].nodeValue:""},EPUBJS.Parser.prototype.manifest=function(a){var b=this.baseUrl,c={},d=a.querySelectorAll("item"),e=Array.prototype.slice.call(d);return e.forEach(function(a){var d=a.getAttribute("id"),e=a.getAttribute("href")||"",f=a.getAttribute("media-type")||"",g=a.getAttribute("properties")||"";c[d]={href:e,url:b+e,type:f,properties:g}}),c},EPUBJS.Parser.prototype.spine=function(a,b){var c=[],d=a.getElementsByTagName("itemref"),e=Array.prototype.slice.call(d),f=Array.prototype.indexOf.call(a.parentNode.childNodes,a),g=new EPUBJS.EpubCFI;return e.forEach(function(a,d){var e=a.getAttribute("idref"),h=g.generateChapterComponent(f,d,e),i=a.getAttribute("properties")||"",j=i.length?i.split(" "):[],k=b[e].properties,l=k.length?k.split(" "):[],m={id:e,linear:a.getAttribute("linear")||"",properties:j,manifestProperties:l,href:b[e].href,url:b[e].url,index:d,cfiBase:h,cfi:"epubcfi("+h+")"};c.push(m)}),c},EPUBJS.Parser.prototype.querySelectorByType=function(a,b,c){var d=a.querySelector(b+'[*|type="'+c+'"]');if(null!==d&&0!==d.length)return d;d=a.querySelectorAll(b);for(var e=0;ed;++d)e=this.navItem(h[d],b,c),j[e.id]=e,e.parent?(f=j[e.parent],f.subitems.push(e)):k.push(e);return k},EPUBJS.Parser.prototype.navItem=function(a,b,c){var d,e=a.getAttribute("id")||!1,f=a.querySelector("a, span"),g=f.getAttribute("href")||"",h=f.textContent||"",i=g.split("#"),j=i[0],k=b[j],l=c[k],m=[],n=a.parentNode,o=l?l.cfi:"";return n&&"navPoint"===n.nodeName&&(d=n.getAttribute("id")),e||(k?(l=c[k],e=l.id,o=l.cfi):(e="epubjs-autogen-toc-id-"+EPUBJS.core.uuid(),a.setAttribute("id",e))),{id:e,href:g,label:h,spinePos:k,subitems:m,parent:d,cfi:o}},EPUBJS.Parser.prototype.toc=function(a,b,c){var d,e,f,g=a.querySelectorAll("navMap navPoint"),h=g.length,i={},j=[];if(!g||0===h)return j;for(d=0;h>d;++d)e=this.tocItem(g[d],b,c),i[e.id]=e,e.parent?(f=i[e.parent],f.subitems.push(e)):j.push(e);return j},EPUBJS.Parser.prototype.tocItem=function(a,b,c){var d,e=a.getAttribute("id")||!1,f=a.querySelector("content"),g=f.getAttribute("src"),h=a.querySelector("navLabel"),i=h.textContent?h.textContent:"",j=g.split("#"),k=j[0],l=b[k],m=c[l],n=[],o=a.parentNode,p=m?m.cfi:"";return o&&"navPoint"===o.nodeName&&(d=o.getAttribute("id")),e||(l?(m=c[l],e=m.id,p=m.cfi):(e="epubjs-autogen-toc-id-"+EPUBJS.core.uuid(),a.setAttribute("id",e))),{id:e,href:g,label:i,spinePos:l,subitems:n,parent:d,cfi:p}},EPUBJS.Parser.prototype.pageList=function(a,b,c){var d,e,f=this.querySelectorByType(a,"nav","page-list"),g=f?f.querySelectorAll("ol li"):[],h=g.length,i=[];if(!g||0===h)return i;for(d=0;h>d;++d)e=this.pageListItem(g[d],b,c),i.push(e);return i},EPUBJS.Parser.prototype.pageListItem=function(a){var b,c,d,e=(a.getAttribute("id")||!1,a.querySelector("a")),f=e.getAttribute("href")||"",g=e.textContent||"",h=parseInt(g),i=f.indexOf("epubcfi");return-1!=i?(b=f.split("#"),c=b[0],d=b.length>1?b[1]:!1,{cfi:d,href:f,packageUrl:c,page:h}):{href:f,page:h}},EPUBJS.Render.Iframe=function(){this.iframe=null,this.document=null,this.window=null,this.docEl=null,this.bodyEl=null,this.leftPos=0,this.pageWidth=0},EPUBJS.Render.Iframe.prototype.create=function(){return this.iframe=document.createElement("iframe"),this.iframe.id="epubjs-iframe:"+EPUBJS.core.uuid(),this.iframe.scrolling="no",this.iframe.seamless="seamless",this.iframe.style.border="none",this.iframe.addEventListener("load",this.loaded.bind(this),!1),this.isMobile=navigator.userAgent.match(/(iPad|iPhone|iPod|Mobile|Android)/g),this.transform=EPUBJS.core.prefixed("transform"),this.iframe},EPUBJS.Render.Iframe.prototype.load=function(a){var b=this,c=new RSVP.defer;return this.window&&this.unload(),this.iframe.onload=function(){b.document=b.iframe.contentDocument,b.docEl=b.document.documentElement,b.headEl=b.document.head,b.bodyEl=b.document.body||b.document.querySelector("body"),b.window=b.iframe.contentWindow,b.window.addEventListener("resize",b.resized.bind(b),!1),b.leftPos=0,b.setLeft(0),b.bodyEl&&(b.bodyEl.style.margin="0"),"rtl"==b.direction&&"rtl"!=b.docEl.dir&&(b.docEl.dir="rtl",b.docEl.style.position="absolute",b.docEl.style.right="0"),c.resolve(b.docEl)},this.iframe.onerror=function(a){c.reject({message:"Error Loading Contents: "+a,stack:(new Error).stack})},this.document=this.iframe.contentDocument,this.document?(this.document.open(),this.document.write(a),this.document.close(),c.promise):(c.reject(new Error("No Document Available")),c.promise)},EPUBJS.Render.Iframe.prototype.loaded=function(){var a,b,c=this.iframe.contentWindow.location.href;this.document=this.iframe.contentDocument,this.docEl=this.document.documentElement,this.headEl=this.document.head,this.bodyEl=this.document.body||this.document.querySelector("body"),this.window=this.iframe.contentWindow,"about:blank"!=c&&(a=this.iframe.contentDocument.querySelector("base"),b=a.getAttribute("href"),this.trigger("render:loaded",b))},EPUBJS.Render.Iframe.prototype.resize=function(a,b){this.iframe&&(this.iframe.height=b,isNaN(a)||a%2===0||(a+=1),this.iframe.width=a,this.width=this.iframe.getBoundingClientRect().width||a,this.height=this.iframe.getBoundingClientRect().height||b)},EPUBJS.Render.Iframe.prototype.resized=function(){this.width=this.iframe.getBoundingClientRect().width,this.height=this.iframe.getBoundingClientRect().height},EPUBJS.Render.Iframe.prototype.totalWidth=function(){return this.docEl.scrollWidth},EPUBJS.Render.Iframe.prototype.totalHeight=function(){return this.docEl.scrollHeight},EPUBJS.Render.Iframe.prototype.setPageDimensions=function(a,b){this.pageWidth=a,this.pageHeight=b},EPUBJS.Render.Iframe.prototype.setDirection=function(a){this.direction=a,this.docEl&&"rtl"==this.docEl.dir&&(this.docEl.dir="rtl",this.docEl.style.position="static",this.docEl.style.right="auto")},EPUBJS.Render.Iframe.prototype.setLeft=function(a){this.isMobile?this.docEl.style[this.transform]="translate("+-a+"px, 0)":this.document.defaultView.scrollTo(a,0)},EPUBJS.Render.Iframe.prototype.setStyle=function(a,b,c){c&&(a=EPUBJS.core.prefixed(a)),this.bodyEl&&(this.bodyEl.style[a]=b)},EPUBJS.Render.Iframe.prototype.removeStyle=function(a){this.bodyEl&&(this.bodyEl.style[a]="")},EPUBJS.Render.Iframe.prototype.addHeadTag=function(a,b,c){var d=c||this.document,e=d.createElement(a),f=d.head;for(var g in b)e.setAttribute(g,b[g]);f&&f.insertBefore(e,f.firstChild)},EPUBJS.Render.Iframe.prototype.page=function(a){this.leftPos=this.pageWidth*(a-1),"rtl"===this.direction&&(this.leftPos=-1*this.leftPos),this.setLeft(this.leftPos)},EPUBJS.Render.Iframe.prototype.getPageNumberByElement=function(a){var b,c;if(a)return b=this.leftPos+a.getBoundingClientRect().left,c=Math.floor(b/this.pageWidth)+1},EPUBJS.Render.Iframe.prototype.getPageNumberByRect=function(a){var b,c;return b=this.leftPos+a.left,c=Math.floor(b/this.pageWidth)+1},EPUBJS.Render.Iframe.prototype.getBaseElement=function(){return this.bodyEl},EPUBJS.Render.Iframe.prototype.getDocumentElement=function(){return this.docEl},EPUBJS.Render.Iframe.prototype.isElementVisible=function(a){var b,c;return a&&"function"==typeof a.getBoundingClientRect&&(b=a.getBoundingClientRect(),c=b.left,0!==b.width&&0!==b.height&&c>=0&&c=1&&a<=this.displayedPages?(this.chapterPos=a,this.render.page(a),this.visibleRangeCfi=this.getVisibleRangeCfi(),this.currentLocationCfi=this.visibleRangeCfi.start,this.trigger("renderer:locationChanged",this.currentLocationCfi),this.trigger("renderer:visibleRangeChanged",this.visibleRangeCfi),!0):!1:(console.warn("pageMap not set, queuing"),this._q.enqueue("page",arguments),!0)},EPUBJS.Renderer.prototype.nextPage=function(){return this.page(this.chapterPos+1)},EPUBJS.Renderer.prototype.prevPage=function(){return this.page(this.chapterPos-1)},EPUBJS.Renderer.prototype.pageByElement=function(a){var b;a&&(b=this.render.getPageNumberByElement(a),this.page(b))},EPUBJS.Renderer.prototype.lastPage=function(){return this._moving?this._q.enqueue("lastPage",arguments):void this.page(this.displayedPages)},EPUBJS.Renderer.prototype.firstPage=function(){return this._moving?this._q.enqueue("firstPage",arguments):void this.page(1)},EPUBJS.Renderer.prototype.section=function(a){var b=this.doc.getElementById(a);b&&this.pageByElement(b)},EPUBJS.Renderer.prototype.firstElementisTextNode=function(a){var b=a.childNodes,c=b.length;return c&&b[0]&&3===b[0].nodeType&&b[0].textContent.trim().length?!0:!1},EPUBJS.Renderer.prototype.isGoodNode=function(a){var b=["audio","canvas","embed","iframe","img","math","object","svg","video"];return-1!==b.indexOf(a.tagName.toLowerCase())?!0:this.firstElementisTextNode(a)},EPUBJS.Renderer.prototype.walk=function(a,b,c){for(var d,e,f,g,h=a,i=[h],j=1e4,k=0;!d&&i.length;){if(a=i.shift(),this.containsPoint(a,b,c)&&this.isGoodNode(a)&&(d=a),!d&&a&&a.childElementCount>0){if(e=a.children,!e||!e.length)return d;f=e.length?e.length:0;for(var l=f-1;l>=0;l--)e[l]!=g&&i.unshift(e[l])}if(!d&&0===i.length&&h&&null!==h.parentNode&&(i.push(h.parentNode),g=h,h=h.parentNode),k++,k>j){console.error("ENDLESS LOOP");break}}return d},EPUBJS.Renderer.prototype.containsPoint=function(a,b){var c;return a&&"function"==typeof a.getBoundingClientRect&&(c=a.getBoundingClientRect(),0!==c.width&&0!==c.height&&c.left>=b&&b<=c.left+c.width)?!0:!1},EPUBJS.Renderer.prototype.textSprint=function(a,b){var c,d,e=function(a){return/^\s*$/.test(a.data)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT};try{for(c=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,{acceptNode:e},!1);d=c.nextNode();)b(d)}catch(f){for(c=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,e,!1);d=c.nextNode();)b(d)}},EPUBJS.Renderer.prototype.sprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_ELEMENT,null,!1);c=d.nextNode();)b(c)},EPUBJS.Renderer.prototype.mapPage=function(){var a,b,c,d,e,f,g,h,i=this,j=[],k=this.render.getBaseElement(),l=1,m=this.layout.colWidth+this.layout.gap,n=this.formated.pageWidth*(this.chapterPos-1),o=m*l-n,p=0,q=function(b){var c,e,f;if(b.nodeType==Node.TEXT_NODE){if(e=document.createRange(),e.selectNodeContents(b),c=e.getBoundingClientRect(),!c||0===c.width&&0===c.height)return;c.left>p&&(f=r(b)),c.right>p&&(f=r(b)),d=b,f&&(a=null)}},r=function(e){var f,g=i.splitTextNodeIntoWordsRanges(e);return g.forEach(function(e){var g=e.getBoundingClientRect();!g||0===g.width&&0===g.height||(g.left+g.width0&&(b&&(b.setEnd(a,e),c.push(b)),b=this.doc.createRange(),b.setStart(a,e+1));return b&&(b.setEnd(a,d.length),c.push(b)),c},EPUBJS.Renderer.prototype.rangePosition=function(a){var b,c;return c=a.getClientRects(),c.length?b=c[0]:null},EPUBJS.Renderer.prototype.getPageCfi=function(){var a=2*this.chapterPos-1;return this.pageMap[a].start},EPUBJS.Renderer.prototype.getRange=function(a,b,c){var d,e=this.doc.createRange();return c=!0,"undefined"==typeof document.caretPositionFromPoint||c?"undefined"==typeof document.caretRangeFromPoint||c?(this.visibileEl=this.findElementAfter(a,b),e.setStart(this.visibileEl,1)):e=this.doc.caretRangeFromPoint(a,b):(d=this.doc.caretPositionFromPoint(a,b),e.setStart(d.offsetNode,d.offset)),e},EPUBJS.Renderer.prototype.pagesInCurrentChapter=function(){var a,b;return this.pageMap?(b=this.pageMap.length,a=this.spreads?Math.ceil(b/2):b):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.currentRenderedPage=function(){var a;return this.pageMap?a=this.spreads&&this.pageMap.length>1?2*this.chapterPos:this.chapterPos:(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.getRenderedPagesLeft=function(){var a,b,c;return this.pageMap?(b=this.pageMap.length,a=this.spreads?2*this.chapterPos:this.chapterPos,c=b-a):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.getVisibleRangeCfi=function(){var a,b,c;return this.pageMap?(this.spreads?(a=2*this.chapterPos,b=this.pageMap[a-2],c=b,this.pageMap.length>1&&this.pageMap.length>a-1&&(c=this.pageMap[a-1])):(a=this.chapterPos,b=this.pageMap[a-1],c=b),b||(console.warn("page range miss:",a,this.pageMap),b=this.pageMap[this.pageMap.length-1],c=b),{start:b.start,end:c.end}):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.gotoCfi=function(a){var b,c,d;if(this._moving)return this._q.enqueue("gotoCfi",arguments);if(EPUBJS.core.isString(a)&&(a=this.epubcfi.parse(a)),"undefined"==typeof document.evaluate)c=this.epubcfi.addMarker(a,this.doc),c&&(b=this.render.getPageNumberByElement(c),this.epubcfi.removeMarker(c,this.doc),this.page(b));else if(d=this.epubcfi.generateRangeFromCfi(a,this.doc)){var e=d.getBoundingClientRect();b=e?this.render.getPageNumberByRect(e):1,this.page(b),this.currentLocationCfi=a.str}else this.page(1)},EPUBJS.Renderer.prototype.findFirstVisible=function(a){var b,c=a||this.render.getBaseElement();return b=this.walk(c,0,0),b?b:a},EPUBJS.Renderer.prototype.findElementAfter=function(a,b,c){var d,e=c||this.render.getBaseElement();return d=this.walk(e,a,b),d?d:e},EPUBJS.Renderer.prototype.resize=function(a,b,c){this.width=a,this.height=b,c!==!1&&this.render.resize(this.width,this.height),this.contents&&this.reformat(),this.trigger("renderer:resized",{width:this.width,height:this.height})},EPUBJS.Renderer.prototype.onResized=function(){var a=this.container.clientWidth,b=this.container.clientHeight;this.resize(a,b,!1)},EPUBJS.Renderer.prototype.addEventListeners=function(){this.render.document&&this.listenedEvents.forEach(function(a){this.render.document.addEventListener(a,this.triggerEvent.bind(this),!1)},this)},EPUBJS.Renderer.prototype.removeEventListeners=function(){this.render.document&&this.listenedEvents.forEach(function(a){this.render.document.removeEventListener(a,this.triggerEvent,!1)},this)},EPUBJS.Renderer.prototype.triggerEvent=function(a){this.trigger("renderer:"+a.type,a)},EPUBJS.Renderer.prototype.addSelectionListeners=function(){this.render.document.addEventListener("selectionchange",this.onSelectionChange.bind(this),!1)},EPUBJS.Renderer.prototype.removeSelectionListeners=function(){this.render.document&&this.doc.removeEventListener("selectionchange",this.onSelectionChange,!1)},EPUBJS.Renderer.prototype.onSelectionChange=function(){this.selectionEndTimeout&&clearTimeout(this.selectionEndTimeout),this.selectionEndTimeout=setTimeout(function(){this.selectedRange=this.render.window.getSelection(),this.trigger("renderer:selected",this.selectedRange)}.bind(this),500)},EPUBJS.Renderer.prototype.setMinSpreadWidth=function(a){this.minSpreadWidth=a,this.spreads=this.determineSpreads(a)},EPUBJS.Renderer.prototype.determineSpreads=function(a){return this.isForcedSingle||!a||this.width=g&&c&&c(!0),e=!0)};b(a,f)}.bind(this))},RSVP.EventTarget.mixin(EPUBJS.Renderer.prototype);var EPUBJS=EPUBJS||{};EPUBJS.replace={},EPUBJS.replace.hrefs=function(a,b){var c=this,d=function(a,d){var e,f,g,h,i,j=a.getAttribute("href"),k=j.search("://");-1!=k?a.setAttribute("target","_blank"):(g=b.render.docEl.querySelector("base"),i=g.getAttribute("href"),h=EPUBJS.core.uri(i),e=h.directory,f=e?"file"===h.protocol?EPUBJS.core.resolveUrl(h.base,j):EPUBJS.core.resolveUrl(e,j):j,a.onclick=function(){return c.goto(f),!1}),d()};b.replace("a[href]",d,a)},EPUBJS.replace.head=function(a,b){b.replaceWithStored("link[href]","href",EPUBJS.replace.links,a)},EPUBJS.replace.resources=function(a,b){b.replaceWithStored("[src]","src",EPUBJS.replace.srcs,a)},EPUBJS.replace.svg=function(a,b){b.replaceWithStored("svg image","xlink:href",function(a,b,c){a.getUrl(b).then(c)},a)},EPUBJS.replace.srcs=function(a,b,c){a.getUrl(b).then(c)},EPUBJS.replace.links=function(a,b,c,d){"stylesheet"===d.getAttribute("rel")?EPUBJS.replace.stylesheets(a,b).then(function(a,b){c(a,b)},function(){c(null)}):a.getUrl(b).then(c,function(){c(null)})},EPUBJS.replace.stylesheets=function(a,b){var c=new RSVP.defer;if(a)return a.getText(b).then(function(d){EPUBJS.replace.cssUrls(a,b,d).then(function(a){var b=window.URL||window.webkitURL||window.mozURL,d=new Blob([a],{type:"text/css"}),e=b.createObjectURL(d);c.resolve(e)},function(a){c.reject(a)})},function(a){c.reject(a)}),c.promise},EPUBJS.replace.cssUrls=function(a,b,c){var d=new RSVP.defer,e=[],f=c.match(/url\(\'?\"?((?!data:)[^\'|^\"^\)]*)\'?\"?\)/g);if(a)return f?(f.forEach(function(f){var g=EPUBJS.core.resolveUrl(b,f.replace(/url\(|[|\)|\'|\"]|\?.*$/g,"")),h=a.getUrl(g).then(function(a){c=c.replace(f,'url("'+a+'")')},function(a){d.reject(a)});e.push(h)}),RSVP.all(e).then(function(){d.resolve(c)}),d.promise):(d.resolve(c),d.promise)},EPUBJS.Storage=function(a){this.checkRequirements(),this.urlCache={},this.withCredentials=a,this.URL=window.URL||window.webkitURL||window.mozURL,this.offline=!1},EPUBJS.Storage.prototype.checkRequirements=function(){"undefined"==typeof localforage&&console.error("localForage library not loaded")},EPUBJS.Storage.prototype.put=function(a){var b=new RSVP.defer,c=a.length,d=0,e=function(b){var f,g,h=b||new RSVP.defer;return d>=c?h.resolve():(f=a[d].url,g=window.encodeURIComponent(f),EPUBJS.core.request(f,"binary").then(function(a){return localforage.setItem(g,a)}).then(function(){d++,setTimeout(function(){e(h)},1)})),h.promise}.bind(this);return Array.isArray(a)||(a=[a]),e().then(function(){b.resolve()}.bind(this)),b.promise},EPUBJS.Storage.prototype.token=function(a,b){var c=window.encodeURIComponent(a);return localforage.setItem(c,b).then(function(a){return null===a?!1:!0})},EPUBJS.Storage.prototype.isStored=function(a){var b=window.encodeURIComponent(a);return localforage.getItem(b).then(function(a){return null===a?!1:!0})},EPUBJS.Storage.prototype.getText=function(a){var b=window.encodeURIComponent(a);return EPUBJS.core.request(a,"arraybuffer",this.withCredentials).then(function(a){return this.offline&&(this.offline=!1,this.trigger("offline",!1)),localforage.setItem(b,a),a}.bind(this)).then(function(b){var c=new RSVP.defer,d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;return f.addEventListener("loadend",function(){c.resolve(f.result)}),f.readAsText(e,d),c.promise}).catch(function(){var c=new RSVP.defer,d=localforage.getItem(b);return this.offline||(this.offline=!0,this.trigger("offline",!0)),d?(d.then(function(b){var d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;f.addEventListener("loadend",function(){c.resolve(f.result)}),f.readAsText(e,d)}),c.promise):(c.reject({message:"File not found in the storage: "+a,stack:(new Error).stack}),c.promise)}.bind(this))},EPUBJS.Storage.prototype.getUrl=function(a){var b=window.encodeURIComponent(a);return EPUBJS.core.request(a,"arraybuffer",this.withCredentials).then(function(c){return this.offline&&(this.offline=!1,this.trigger("offline",!1)),localforage.setItem(b,c),a}.bind(this)).catch(function(){var c,d,e=new RSVP.defer,f=window.URL||window.webkitURL||window.mozURL;return this.offline||(this.offline=!0,this.trigger("offline",!0)),b in this.urlCache?(e.resolve(this.urlCache[b]),e.promise):(c=localforage.getItem(b))?(c.then(function(c){var g=new Blob([c],{type:EPUBJS.core.getMimeType(a)});d=f.createObjectURL(g),e.resolve(d),this.urlCache[b]=d}.bind(this)),e.promise):(e.reject({message:"File not found in the storage: "+a,stack:(new Error).stack}),e.promise)}.bind(this))},EPUBJS.Storage.prototype.getXml=function(a){var b=window.encodeURIComponent(a);return EPUBJS.core.request(a,"arraybuffer",this.withCredentials).then(function(a){return this.offline&&(this.offline=!1,this.trigger("offline",!1)),localforage.setItem(b,a),a}.bind(this)).then(function(b){var c=new RSVP.defer,d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;return f.addEventListener("loadend",function(){var a=new DOMParser,b=a.parseFromString(f.result,"text/xml");c.resolve(b)}),f.readAsText(e,d),c.promise}).catch(function(){var c=new RSVP.defer,d=localforage.getItem(b);return this.offline||(this.offline=!0,this.trigger("offline",!0)),d?(d.then(function(b){var d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;f.addEventListener("loadend",function(){var a=new DOMParser,b=a.parseFromString(f.result,"text/xml");c.resolve(b)}),f.readAsText(e,d)}),c.promise):(c.reject({message:"File not found in the storage: "+a,stack:(new Error).stack}),c.promise)}.bind(this))},EPUBJS.Storage.prototype.revokeUrl=function(a){var b=window.URL||window.webkitURL||window.mozURL,c=this.urlCache[a];c&&b.revokeObjectURL(c)},EPUBJS.Storage.prototype.failed=function(a){console.error(a)},RSVP.EventTarget.mixin(EPUBJS.Storage.prototype),EPUBJS.Unarchiver=function(){this.checkRequirements(),this.urlCache={}},EPUBJS.Unarchiver.prototype.checkRequirements=function(){"undefined"==typeof JSZip&&console.error("JSZip lib not loaded")},EPUBJS.Unarchiver.prototype.open=function(a){if(a instanceof ArrayBuffer){this.zip=new JSZip(a);var b=new RSVP.defer;return b.resolve(),b.promise}return EPUBJS.core.request(a,"binary").then(function(a){this.zip=new JSZip(a)}.bind(this))},EPUBJS.Unarchiver.prototype.getXml=function(a,b){var c=window.decodeURIComponent(a);return this.getText(c,b).then(function(b){var c=new DOMParser,d=EPUBJS.core.getMimeType(a);return c.parseFromString(b,d)})},EPUBJS.Unarchiver.prototype.getUrl=function(a){var b,c,d=this,e=new RSVP.defer,f=window.decodeURIComponent(a),g=this.zip.file(f),h=window.URL||window.webkitURL||window.mozURL;return g?a in this.urlCache?(e.resolve(this.urlCache[a]),e.promise):(c=new Blob([g.asUint8Array()],{type:EPUBJS.core.getMimeType(g.name)}),b=h.createObjectURL(c),e.resolve(b),d.urlCache[a]=b,e.promise):(e.reject({message:"File not found in the epub: "+a,stack:(new Error).stack}),e.promise)},EPUBJS.Unarchiver.prototype.getText=function(a){var b,c=new RSVP.defer,d=window.decodeURIComponent(a),e=this.zip.file(d);return e?(b=e.asText(),c.resolve(b),c.promise):(c.reject({message:"File not found in the epub: "+a,stack:(new Error).stack}),c.promise)},EPUBJS.Unarchiver.prototype.revokeUrl=function(a){var b=window.URL||window.webkitURL||window.mozURL,c=this.urlCache[a];c&&b.revokeObjectURL(c)},EPUBJS.Unarchiver.prototype.failed=function(a){console.error(a)},EPUBJS.Unarchiver.prototype.afterSaved=function(){this.callback()},EPUBJS.Unarchiver.prototype.toStorage=function(a){function b(){f--,0===f&&e.afterSaved()}var c=0,d=20,e=this,f=a.length;a.forEach(function(a){setTimeout(function(a){e.saveEntryFileToStorage(a,b)},c,a),c+=d}),console.log("time",c)},function(){var a={application:{ecmascript:["es","ecma"],javascript:"js",ogg:"ogx",pdf:"pdf",postscript:["ps","ai","eps","epsi","epsf","eps2","eps3"],"rdf+xml":"rdf",smil:["smi","smil"],"xhtml+xml":["xhtml","xht"],xml:["xml","xsl","xsd","opf","ncx"],zip:"zip","x-httpd-eruby":"rhtml","x-latex":"latex","x-maker":["frm","maker","frame","fm","fb","book","fbdoc"],"x-object":"o","x-shockwave-flash":["swf","swfl"],"x-silverlight":"scr","epub+zip":"epub","font-tdpfr":"pfr","inkml+xml":["ink","inkml"],json:"json","jsonml+json":"jsonml","mathml+xml":"mathml","metalink+xml":"metalink",mp4:"mp4s","omdoc+xml":"omdoc",oxps:"oxps","vnd.amazon.ebook":"azw",widget:"wgt","x-dtbook+xml":"dtb","x-dtbresource+xml":"res","x-font-bdf":"bdf","x-font-ghostscript":"gsf","x-font-linux-psf":"psf","x-font-otf":"otf","x-font-pcf":"pcf","x-font-snf":"snf","x-font-ttf":["ttf","ttc"],"x-font-type1":["pfa","pfb","pfm","afm"],"x-font-woff":"woff","x-mobipocket-ebook":["prc","mobi"],"x-mspublisher":"pub","x-nzb":"nzb","x-tgif":"obj","xaml+xml":"xaml","xml-dtd":"dtd","xproc+xml":"xpl","xslt+xml":"xslt","internet-property-stream":"acx","x-compress":"z","x-compressed":"tgz","x-gzip":"gz"},audio:{flac:"flac",midi:["mid","midi","kar","rmi"],mpeg:["mpga","mpega","mp2","mp3","m4a","mp2a","m2a","m3a"],mpegurl:"m3u",ogg:["oga","ogg","spx"],"x-aiff":["aif","aiff","aifc"],"x-ms-wma":"wma","x-wav":"wav",adpcm:"adp",mp4:"mp4a",webm:"weba","x-aac":"aac","x-caf":"caf","x-matroska":"mka","x-pn-realaudio-plugin":"rmp",xm:"xm",mid:["mid","rmi"]},image:{gif:"gif",ief:"ief",jpeg:["jpeg","jpg","jpe"],pcx:"pcx",png:"png","svg+xml":["svg","svgz"],tiff:["tiff","tif"],"x-icon":"ico",bmp:"bmp",webp:"webp","x-pict":["pic","pct"],"x-tga":"tga","cis-cod":"cod"},message:{rfc822:["eml","mime","mht","mhtml","nws"]},text:{"cache-manifest":["manifest","appcache"],calendar:["ics","icz","ifb"],css:"css",csv:"csv",h323:"323",html:["html","htm","shtml","stm"],iuls:"uls",mathml:"mml",plain:["txt","text","brf","conf","def","list","log","in","bas"],richtext:"rtx","tab-separated-values":"tsv","x-bibtex":"bib","x-dsrc":"d","x-diff":["diff","patch"],"x-haskell":"hs","x-java":"java","x-literate-haskell":"lhs","x-moc":"moc","x-pascal":["p","pas"],"x-pcs-gcd":"gcd","x-perl":["pl","pm"],"x-python":"py","x-scala":"scala","x-setext":"etx","x-tcl":["tcl","tk"],"x-tex":["tex","ltx","sty","cls"],"x-vcard":"vcf",sgml:["sgml","sgm"],"x-c":["c","cc","cxx","cpp","h","hh","dic"],"x-fortran":["f","for","f77","f90"],"x-opml":"opml","x-nfo":"nfo","x-sfv":"sfv","x-uuencode":"uu",webviewhtml:"htt"},video:{mpeg:["mpeg","mpg","mpe","m1v","m2v","mp2","mpa","mpv2"],mp4:["mp4","mp4v","mpg4"],quicktime:["qt","mov"],ogg:"ogv","vnd.mpegurl":["mxu","m4u"],"x-flv":"flv","x-la-asf":["lsf","lsx"],"x-mng":"mng","x-ms-asf":["asf","asx","asr"],"x-ms-wm":"wm","x-ms-wmv":"wmv","x-ms-wmx":"wmx","x-ms-wvx":"wvx","x-msvideo":"avi","x-sgi-movie":"movie","x-matroska":["mpv","mkv","mk3d","mks"],"3gpp2":"3g2",h261:"h261",h263:"h263",h264:"h264",jpeg:"jpgv",jpm:["jpm","jpgm"],mj2:["mj2","mjp2"],"vnd.ms-playready.media.pyv":"pyv","vnd.uvvu.mp4":["uvu","uvvu"],"vnd.vivo":"viv",webm:"webm","x-f4v":"f4v","x-m4v":"m4v","x-ms-vob":"vob","x-smv":"smv"}},b=function(){var b,c,d,e,f={}; -for(b in a)if(a.hasOwnProperty(b))for(c in a[b])if(a[b].hasOwnProperty(c))if(d=a[b][c],"string"==typeof d)f[d]=b+"/"+c;else for(e=0;e1)throw new Error("Second argument not supported");if("object"!=typeof a)throw new TypeError("Argument must be an object");return h.prototype=a,new h},Aa=[],Ba=void 0,Ca=1,Da=2,Ea=new y,Fa=new y;E.prototype._validateInput=function(a){return xa(a)},E.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},E.prototype._init=function(){this._result=new Array(this.length)},E.prototype._enumerate=function(){for(var a=this.length,b=this.promise,c=this._input,d=0;b._state===Ba&&d=i)l.resolve();else{if(c&&c.cancelled)return e.remove(),this.element.removeChild(f),void l.reject(new Error("User cancelled"));h=g,b=new EPUBJS.Chapter(this.spine[h],this.store),e.displayChapter(b,this.globalLayoutProperties).then(function(a){e.pageMap.forEach(function(a){j+=1,d.push({cfi:a.start,page:j})}),e.pageMap.length%2>0&&e.spreads&&(j+=1,d.push({cfi:e.pageMap[e.pageMap.length-1].end,page:j})),setTimeout(function(){k(l)},1)})}return l.promise}.bind(this);k().then(function(){e.remove(),this.element.removeChild(f),g.resolve(d)}.bind(this),function(a){g.reject(a)});return g.promise},EPUBJS.Book.prototype.generatePagination=function(a,b,c){var d=this,e=new RSVP.defer;return this.ready.spine.promise.then(function(){d.generatePageList(a,b,c).then(function(a){d.pageList=d.contents.pageList=a,d.pagination.process(a),d.ready.pageList.resolve(d.pageList),e.resolve(d.pageList)},function(a){e.reject(a)})}),e.promise},EPUBJS.Book.prototype.loadPagination=function(a){var b;return b="string"==typeof a?JSON.parse(a):a,b&&b.length&&(this.pageList=b,this.pagination.process(this.pageList),this.ready.pageList.resolve(this.pageList)),this.pageList},EPUBJS.Book.prototype.getPageList=function(){return this.ready.pageList.promise},EPUBJS.Book.prototype.getMetadata=function(){return this.ready.metadata.promise},EPUBJS.Book.prototype.getToc=function(){return this.ready.toc.promise},EPUBJS.Book.prototype.networkListeners=function(){var a=this;window.addEventListener("offline",function(b){a.online=!1,a.settings.storage&&a.fromStorage(!0),a.trigger("book:offline")},!1),window.addEventListener("online",function(b){a.online=!0,a.settings.storage&&a.fromStorage(!1),a.trigger("book:online")},!1)},EPUBJS.Book.prototype.listenToRenderer=function(a){var b=this;a.Events.forEach(function(c){a.on(c,function(a){b.trigger(c,a)})}),a.on("renderer:visibleRangeChanged",function(a){var b,c,d,e=[];this.pageList.length>0&&(b=this.pagination.pageFromCfi(a.start),d=this.pagination.percentageFromPage(b),e.push(b),a.end&&(c=this.pagination.pageFromCfi(a.end),e.push(c)),this.trigger("book:pageChanged",{anchorPage:b,percentage:d,pageRange:e}))}.bind(this)),a.on("render:loaded",this.loadChange.bind(this))},EPUBJS.Book.prototype.loadChange=function(a){var b,c,d=EPUBJS.core.uri(a),e=EPUBJS.core.uri(this.currentChapter.absolute);d.path!=e.path?(console.warn("Miss Match",d.path,this.currentChapter.absolute),b=this.spineIndexByURL[d.filename],c=new EPUBJS.Chapter(this.spine[b],this.store),this.currentChapter=c,this.renderer.currentChapter=c,this.renderer.afterLoad(this.renderer.render.docEl),this.renderer.beforeDisplay(function(){this.renderer.afterDisplay()}.bind(this))):this._rendering||this.renderer.reformat()},EPUBJS.Book.prototype.unlistenToRenderer=function(a){a.Events.forEach(function(b){a.off(b)})},EPUBJS.Book.prototype.coverUrl=function(){var a=this.ready.cover.promise.then(function(a){return this.settings.fromStorage?this.store.getUrl(this.contents.cover):this.settings.contained?this.zip.getUrl(this.contents.cover):this.contents.cover}.bind(this));return a.then(function(a){this.cover=a}.bind(this)),a},EPUBJS.Book.prototype.loadXml=function(a){return this.settings.fromStorage?this.store.getXml(a,this.settings.encoding):this.settings.contained?this.zip.getXml(a,this.settings.encoding):EPUBJS.core.request(a,"xml",this.settings.withCredentials)},EPUBJS.Book.prototype.urlFrom=function(a){var b,c=EPUBJS.core.uri(a),d=c.protocol,e="/"==c.path[0],f=window.location,g=f.origin||f.protocol+"//"+f.host,h=document.getElementsByTagName("base");return h.length&&(b=h[0].href),c.protocol?c.origin+c.path:!d&&e?(b||g)+c.path:d||e?void 0:EPUBJS.core.resolveUrl(b||f.pathname,c.path)},EPUBJS.Book.prototype.unarchive=function(a){return this.zip=new EPUBJS.Unarchiver,this.store=this.zip,this.zip.open(a)},EPUBJS.Book.prototype.isContained=function(a){if(a instanceof ArrayBuffer)return!0;var b=EPUBJS.core.uri(a);return!(!b.extension||"epub"!=b.extension&&"zip"!=b.extension)},EPUBJS.Book.prototype.isSaved=function(a){var b;return!!localStorage&&(b=localStorage.getItem(a),!(!localStorage||null===b))},EPUBJS.Book.prototype.generateBookKey=function(a){return"epubjs:"+EPUBJS.VERSION+":"+window.location.host+":"+a},EPUBJS.Book.prototype.saveContents=function(){if(!localStorage)return!1;localStorage.setItem(this.settings.bookKey,JSON.stringify(this.contents))},EPUBJS.Book.prototype.removeSavedContents=function(){if(!localStorage)return!1;localStorage.removeItem(this.settings.bookKey)},EPUBJS.Book.prototype.renderTo=function(a){var b=this;if(EPUBJS.core.isElement(a))this.element=a;else{if("string"!=typeof a)return void console.error("Not an Element");this.element=EPUBJS.core.getEl(a)}return this.opened.then(function(){return b.renderer.initialize(b.element,b.settings.width,b.settings.height),b.metadata.direction&&b.renderer.setDirection(b.metadata.direction),b._rendered(),b.startDisplay()})},EPUBJS.Book.prototype.startDisplay=function(){return this.settings.goto?this.goto(this.settings.goto):this.settings.previousLocationCfi?this.gotoCfi(this.settings.previousLocationCfi):this.displayChapter(this.spinePos,this.settings.displayLastPage)},EPUBJS.Book.prototype.restore=function(a){var b,c=this,d=["manifest","spine","metadata","cover","toc","spineNodeIndex","spineIndexByURL","globalLayoutProperties"],e=!1,f=this.generateBookKey(a),g=localStorage.getItem(f),h=d.length;if(this.settings.clearSaved&&(e=!0),!e&&"undefined"!=g&&null!==g)for(c.contents=JSON.parse(g),b=0;b=this.spine.length)&&(console.warn("Not A Valid Location"),f=0,b=!1,e=!1),g=new EPUBJS.Chapter(this.spine[f],this.store),this._rendering=!0,this._needsAssetReplacement()&&g.registerHook("beforeChapterRender",[EPUBJS.replace.head,EPUBJS.replace.resources,EPUBJS.replace.svg],!0),h.currentChapter=g,d=h.renderer.displayChapter(g,this.globalLayoutProperties),e?h.renderer.gotoCfi(e):b&&h.renderer.lastPage(),d.then(function(a){h.spinePos=f,i.resolve(h.renderer),h.settings.fromStorage===!1&&h.settings.contained===!1&&h.preloadNextChapter(),h._rendering=!1,h._displayQ.dequeue(),0===h._displayQ.length()&&h._gotoQ.dequeue()},function(a){console.error("Could not load Chapter: "+g.absolute,a),h.trigger("book:chapterLoadFailed",g.absolute),h._rendering=!1,i.reject(a)}),i.promise):(this._q.enqueue("displayChapter",arguments),i.reject({message:"Rendering",stack:(new Error).stack}),i.promise)},EPUBJS.Book.prototype.nextPage=function(a){var a=a||new RSVP.defer;return this.isRendered?this.renderer.nextPage()?(a.resolve(!0),a.promise):this.nextChapter(a):(this._q.enqueue("nextPage",[a]),a.promise)},EPUBJS.Book.prototype.prevPage=function(a){var a=a||new RSVP.defer;return this.isRendered?this.renderer.prevPage()?(a.resolve(!0),a.promise):this.prevChapter(a):(this._q.enqueue("prevPage",[a]),a.promise)},EPUBJS.Book.prototype.nextChapter=function(a){var a=a||new RSVP.defer;if(this.spinePos0){for(var b=this.spinePos-1;this.spine[b]&&this.spine[b].linear&&"no"==this.spine[b].linear;)b--;if(b>=0)return this.displayChapter(b,!0,a)}return this.trigger("book:atStart"),a.resolve(!0),a.promise},EPUBJS.Book.prototype.getCurrentLocationCfi=function(){return!!this.isRendered&&this.renderer.currentLocationCfi},EPUBJS.Book.prototype.goto=function(a){return 0===a.indexOf("epubcfi(")?this.gotoCfi(a):a.indexOf("%")===a.length-1?this.gotoPercentage(parseInt(a.substring(0,a.length-1))/100):"number"==typeof a||isNaN(a)===!1?this.gotoPage(a):this.gotoHref(a)},EPUBJS.Book.prototype.gotoCfi=function(a,b){var c,d,e,f,g,h=b||new RSVP.defer;return this.isRendered?this._moving||this._rendering?(console.warn("Renderer is moving"),this._gotoQ.enqueue("gotoCfi",[a,h]),!1):(c=new EPUBJS.EpubCFI(a),(d=c.spinePos)!=-1&&(e=this.spine[d],f=h.promise,this._moving=!0,this.currentChapter&&this.spinePos===d?(this.renderer.gotoCfi(c),this._moving=!1,h.resolve(this.renderer.currentLocationCfi)):(e&&d!=-1||(d=0,e=this.spine[d]),g=this.displayChapter(a),g.then(function(a){this._moving=!1,h.resolve(a.currentLocationCfi)}.bind(this),function(){this._moving=!1}.bind(this))),f.then(function(){this._gotoQ.dequeue()}.bind(this)),f)):(console.warn("Not yet Rendered"),this.settings.previousLocationCfi=a,!1)},EPUBJS.Book.prototype.gotoHref=function(a,b){var c,d,e,f,g,h=b||new RSVP.defer;return this.isRendered?this._moving||this._rendering?(this._gotoQ.enqueue("gotoHref",[a,h]),!1):(c=a.split("#"),d=c[0],e=c[1]||!1,f=d.search("://")==-1?d.replace(EPUBJS.core.uri(this.settings.contentsPath).path,""):d.replace(this.settings.contentsPath,""),g=this.spineIndexByURL[f],d||(g=this.currentChapter?this.currentChapter.spinePos:0),"number"==typeof g&&(this.currentChapter&&g==this.currentChapter.spinePos?(e?this.renderer.section(e):this.renderer.firstPage(),h.resolve(this.renderer.currentLocationCfi),h.promise.then(function(){this._gotoQ.dequeue()}.bind(this)),h.promise):this.displayChapter(g).then(function(){e&&this.renderer.section(e),h.resolve(this.renderer.currentLocationCfi)}.bind(this)))):(this.settings.goto=a,!1)},EPUBJS.Book.prototype.gotoPage=function(a){var b=this.pagination.cfiFromPage(a);return this.gotoCfi(b)},EPUBJS.Book.prototype.gotoPercentage=function(a){var b=this.pagination.pageFromPercentage(a);return this.gotoPage(b)},EPUBJS.Book.prototype.preloadNextChapter=function(){var a,b=this.spinePos+1;if(b>=this.spine.length)return!1;(a=new EPUBJS.Chapter(this.spine[b]))&&EPUBJS.core.request(a.absolute)},EPUBJS.Book.prototype.storeOffline=function(){var a=this,b=EPUBJS.core.values(this.manifest);return this.store.put(b).then(function(){a.settings.stored=!0,a.trigger("book:stored")})},EPUBJS.Book.prototype.availableOffline=function(){return this.settings.stored>0},EPUBJS.Book.prototype.toStorage=function(){var a=this.settings.bookKey;this.store.isStored(a).then(function(b){return b===!0?(this.settings.stored=!0,!0):this.storeOffline().then(function(){this.store.token(a,!0)}.bind(this))}.bind(this))},EPUBJS.Book.prototype.fromStorage=function(a){EPUBJS.replace.head,EPUBJS.replace.resources,EPUBJS.replace.svg;this.contained||this.settings.contained||(this.online&&this.opened.then(this.toStorage.bind(this)),this.store&&this.settings.fromStorage&&a===!1?(this.settings.fromStorage=!1,this.store.off("offline"),this.store=!1):this.settings.fromStorage||(this.store=new EPUBJS.Storage(this.settings.credentials),this.store.on("offline",function(a){a?(this.offline=!0,this.settings.fromStorage=!0,this.trigger("book:offline")):(this.offline=!1,this.settings.fromStorage=!1,this.trigger("book:online"))}.bind(this))))},EPUBJS.Book.prototype.setStyle=function(a,b,c){var d=["color","background","background-color"];if(!this.isRendered)return this._q.enqueue("setStyle",arguments);this.settings.styles[a]=b,this.renderer.setStyle(a,b,c),d.indexOf(a)===-1&&this.renderer.reformat()},EPUBJS.Book.prototype.removeStyle=function(a){if(!this.isRendered)return this._q.enqueue("removeStyle",arguments);this.renderer.removeStyle(a),this.renderer.reformat(),delete this.settings.styles[a]},EPUBJS.Book.prototype.resetClasses=function(a){if(!this.isRendered)return this._q.enqueue("setClasses",arguments);a.constructor===String&&(a=[a]),this.settings.classes=a,this.renderer.setClasses(this.settings.classes),this.renderer.reformat()},EPUBJS.Book.prototype.addClass=function(a){if(!this.isRendered)return this._q.enqueue("addClass",arguments);this.settings.classes.indexOf(a)==-1&&this.settings.classes.push(a),this.renderer.setClasses(this.settings.classes),this.renderer.reformat()},EPUBJS.Book.prototype.removeClass=function(a){if(!this.isRendered)return this._q.enqueue("removeClass",arguments);var b=this.settings.classes.indexOf(a);b!=-1&&(delete this.settings.classes[b],this.renderer.setClasses(this.settings.classes),this.renderer.reformat())},EPUBJS.Book.prototype.addHeadTag=function(a,b){if(!this.isRendered)return this._q.enqueue("addHeadTag",arguments);this.settings.headTags[a]=b},EPUBJS.Book.prototype.useSpreads=function(a){console.warn("useSpreads is deprecated, use forceSingle or set a layoutOveride instead"),a===!1?this.forceSingle(!0):this.forceSingle(!1)},EPUBJS.Book.prototype.forceSingle=function(a){var b=void 0===a||a;this.renderer.forceSingle(b),this.settings.forceSingle=b,this.isRendered&&this.renderer.reformat()},EPUBJS.Book.prototype.setMinSpreadWidth=function(a){this.settings.minSpreadWidth=a,this.isRendered&&(this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth),this.renderer.reformat())},EPUBJS.Book.prototype.setGap=function(a){this.settings.gap=a,this.isRendered&&(this.renderer.setGap(this.settings.gap),this.renderer.reformat())},EPUBJS.Book.prototype.chapter=function(a){var b,c,d=this.spineIndexByURL[a];return d&&(b=this.spine[d],c=new EPUBJS.Chapter(b,this.store,this.settings.withCredentials),c.load()),c},EPUBJS.Book.prototype.unload=function(){this.settings.restore&&localStorage&&this.saveContents(),this.unlistenToRenderer(this.renderer),this.trigger("book:unload")},EPUBJS.Book.prototype.destroy=function(){window.removeEventListener("beforeunload",this.unload),this.currentChapter&&this.currentChapter.unload(),this.unload(),this.renderer&&this.renderer.remove()},EPUBJS.Book.prototype._ready=function(){this.trigger("book:ready")},EPUBJS.Book.prototype._rendered=function(a){this.isRendered=!0,this.trigger("book:rendered"),this._q.flush()},EPUBJS.Book.prototype.applyStyles=function(a,b){a.applyStyles(this.settings.styles),b()},EPUBJS.Book.prototype.applyClasses=function(a,b){a.setClasses(this.settings.classes),b()},EPUBJS.Book.prototype.applyHeadTags=function(a,b){a.applyHeadTags(this.settings.headTags),b()},EPUBJS.Book.prototype._registerReplacements=function(a){a.registerHook("beforeChapterDisplay",this.applyStyles.bind(this,a),!0),a.registerHook("beforeChapterDisplay",this.applyHeadTags.bind(this,a),!0),a.registerHook("beforeChapterDisplay",this.applyClasses.bind(this,a),!0),a.registerHook("beforeChapterDisplay",EPUBJS.replace.hrefs.bind(this),!0)},EPUBJS.Book.prototype._needsAssetReplacement=function(){return!!this.settings.fromStorage||!!this.settings.contained},EPUBJS.Book.prototype.parseLayoutProperties=function(a){return{layout:this.settings.layoutOveride&&this.settings.layoutOveride.layout||a.layout||"reflowable",spread:this.settings.layoutOveride&&this.settings.layoutOveride.spread||a.spread||"auto",orientation:this.settings.layoutOveride&&this.settings.layoutOveride.orientation||a.orientation||"auto"}},RSVP.EventTarget.mixin(EPUBJS.Book.prototype),RSVP.on("error",function(a){console.error(a)}),EPUBJS.Chapter=function(a,b,c){this.href=a.href,this.absolute=a.url,this.id=a.id,this.spinePos=a.index,this.cfiBase=a.cfiBase,this.properties=a.properties,this.manifestProperties=a.manifestProperties,this.linear=a.linear,this.pages=1,this.store=b,this.credentials=c,this.epubcfi=new EPUBJS.EpubCFI,this.deferred=new RSVP.defer,this.loaded=this.deferred.promise,EPUBJS.Hooks.mixin(this),this.getHooks("beforeChapterRender"),this.caches={}},EPUBJS.Chapter.prototype.load=function(a,b){var c,d=a||this.store,e=b||this.credentials;return c=d?d.getXml(this.absolute):EPUBJS.core.request(this.absolute,!1,e),c.then(function(a){try{this.setDocument(a),this.deferred.resolve(this)}catch(a){this.deferred.reject({message:this.absolute+" -> "+a.message,stack:(new Error).stack})}}.bind(this)),c},EPUBJS.Chapter.prototype.render=function(a){return this.load().then(function(a){var b=a.querySelector("head"),c=a.createElement("base");return c.setAttribute("href",this.absolute),b.insertBefore(c,b.firstChild),this.contents=a,new RSVP.Promise(function(b,c){this.triggerHooks("beforeChapterRender",function(){b(a)}.bind(this),this)}.bind(this))}.bind(this)).then(function(a){return(new XMLSerializer).serializeToString(a)}.bind(this))},EPUBJS.Chapter.prototype.url=function(a){var b,c=new RSVP.defer,d=a||this.store,e=this;return d?this.tempUrl?(b=this.tempUrl,c.resolve(b)):d.getUrl(this.absolute).then(function(a){e.tempUrl=a,c.resolve(a)}):(b=this.absolute,c.resolve(b)),c.promise},EPUBJS.Chapter.prototype.setPages=function(a){this.pages=a},EPUBJS.Chapter.prototype.getPages=function(a){return this.pages},EPUBJS.Chapter.prototype.getID=function(){return this.ID},EPUBJS.Chapter.prototype.unload=function(a){this.document=null,this.tempUrl&&a&&(a.revokeUrl(this.tempUrl),this.tempUrl=!1)},EPUBJS.Chapter.prototype.setDocument=function(a){this.document=a,this.contents=a.documentElement,!this.document.evaluate&&document.evaluate&&(this.document.evaluate=document.evaluate)},EPUBJS.Chapter.prototype.cfiFromRange=function(a){var b,c,d,e,f,g,h;if(this.document){if(void 0!==document.evaluate){if(c=EPUBJS.core.getElementXPath(a.startContainer),d=EPUBJS.core.getElementXPath(a.endContainer),e=this.document.evaluate(c,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,a.collapsed||(f=this.document.evaluate(d,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue),b=this.document.createRange(),e)try{b.setStart(e,a.startOffset),!a.collapsed&&f&&b.setEnd(f,a.endOffset)}catch(a){console.log("missed"),e=!1}e||(console.log("not found, try fuzzy match"),g=EPUBJS.core.cleanStringForXpath(a.startContainer.textContent),c="//text()[contains(.,"+g+")]",(e=this.document.evaluate(c,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue)&&(b.setStart(e,a.startOffset),a.collapsed||(h=EPUBJS.core.cleanStringForXpath(a.endContainer.textContent),d="//text()[contains(.,"+h+")]",(f=this.document.evaluate(d,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue)&&b.setEnd(f,a.endOffset))))}else b=a;return this.epubcfi.generateCfiFromRange(b,this.cfiBase)}},EPUBJS.Chapter.prototype.find=function(a){var b=this,c=[],d=a.toLowerCase(),e=function(a){for(var e,f,g,h=a.textContent.toLowerCase(),i=b.document.createRange(),j=-1,k=150;f!=-1;)f=h.indexOf(d,j+1),f!=-1&&(i=b.document.createRange(),i.setStart(a,f),i.setEnd(a,f+d.length),e=b.cfiFromRange(i),a.textContent.lengthb?1:a0?i:i+1:0===f?i:f===-1?EPUBJS.core.locationOf(a,b,c,i,h):EPUBJS.core.locationOf(a,b,c,g,i))},EPUBJS.core.indexOfSorted=function(a,b,c,d,e){var f,g=d||0,h=e||b.length,i=parseInt(g+(h-g)/2);return c||(c=function(a,b){return a>b?1:a0;){if(c=d.shift(),"text"===c.type?(e=g.childNodes[c.index],g=e.parentNode||g):g=c.id?f.getElementById(c.id):h[c.index],!g||void 0===g)return console.error("No Element For",c,a.str),!1;h=Array.prototype.slice.call(g.children)}return g},EPUBJS.EpubCFI.prototype.compare=function(a,b){if("string"==typeof a&&(a=new EPUBJS.EpubCFI(a)),"string"==typeof b&&(b=new EPUBJS.EpubCFI(b)),a.spinePos>b.spinePos)return 1;if(a.spinePosb.steps[c].index)return 1;if(a.steps[c].indexb.characterOffset?1:a.characterOffset")},EPUBJS.EpubCFI.prototype.generateRangeFromCfi=function(a,b){var c,d,e,f,g,h,i=b||document,j=i.createRange();return"string"==typeof a&&(a=this.parse(a)),a.spinePos!==-1&&(c=a.steps[a.steps.length-1],void 0!==document.evaluate?(d=this.generateXpathFromSteps(a.steps),e=i.evaluate(d,i,null,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue):(g=this.generateQueryFromSteps(a.steps),(h=i.querySelector(g))&&"text"==c.type&&(e=h.childNodes[c.index])),e?(e&&a.characterOffset>=0?(f=e.length,a.characterOffset-1&&this.hooks[a].splice(c,1):Array.isArray(b)&&b.forEach(function(b){(c=this.hooks[a].indexOf(b))>-1&&this.hooks[a].splice(c,1)},this))},a.prototype.triggerHooks=function(a,b,c){function d(){--f<=0&&b&&b()}var e,f;if(void 0===this.hooks[a])return!1;e=this.hooks[a],f=e.length,0===f&&b&&b(),e.forEach(function(a){a(d,c)})},{register:function(a){if(void 0===EPUBJS.hooks[a]&&(EPUBJS.hooks[a]={}),"object"!=typeof EPUBJS.hooks[a])throw"Already registered: "+a;return EPUBJS.hooks[a]},mixin:function(b){for(var c in a.prototype)b[c]=a.prototype[c]}}}(),EPUBJS.Layout=EPUBJS.Layout||{},EPUBJS.Layout.isFixedLayout=function(a){var b=a.querySelector("[name=viewport]");if(!b||!b.hasAttribute("content"))return!1;var c=b.getAttribute("content");return/width=(\d+)/.test(c)&&/height=(\d+)/.test(c)},EPUBJS.Layout.Reflowable=function(){this.documentElement=null,this.spreadWidth=null},EPUBJS.Layout.Reflowable.prototype.format=function(a,b,c,d){var e=EPUBJS.core.prefixed("columnAxis"),f=EPUBJS.core.prefixed("columnGap"),g=EPUBJS.core.prefixed("columnWidth"),h=EPUBJS.core.prefixed("columnFill"),i=Math.floor(b),j=Math.floor(i/8),k=d>=0?d:j%2==0?j:j-1;return this.documentElement=a,this.spreadWidth=i+k,a.style.overflow="hidden",a.style.width=i+"px",a.style.height=c+"px",a.style[e]="horizontal",a.style[h]="auto",a.style[g]=i+"px",a.style[f]=k+"px",this.colWidth=i,this.gap=k,{pageWidth:this.spreadWidth,pageHeight:c}},EPUBJS.Layout.Reflowable.prototype.calculatePages=function(){var a,b;return this.documentElement.style.width="auto",a=this.documentElement.scrollWidth,b=Math.ceil(a/this.spreadWidth),{displayedPages:b,pageCount:b}},EPUBJS.Layout.ReflowableSpreads=function(){this.documentElement=null,this.spreadWidth=null},EPUBJS.Layout.ReflowableSpreads.prototype.format=function(a,b,c,d){var e=EPUBJS.core.prefixed("columnAxis"),f=EPUBJS.core.prefixed("columnGap"),g=EPUBJS.core.prefixed("columnWidth"),h=EPUBJS.core.prefixed("columnFill"),i=2,j=Math.floor(b),k=j%2==0?j:j-1,l=Math.floor(k/8),m=d>=0?d:l%2==0?l:l-1,n=Math.floor((k-m)/i);return this.documentElement=a,this.spreadWidth=(n+m)*i,a.style.overflow="hidden",a.style.width=k+"px",a.style.height=c+"px",a.style[e]="horizontal",a.style[h]="auto",a.style[f]=m+"px",a.style[g]=n+"px",this.colWidth=n,this.gap=m,{pageWidth:this.spreadWidth,pageHeight:c}},EPUBJS.Layout.ReflowableSpreads.prototype.calculatePages=function(){var a=this.documentElement.scrollWidth,b=Math.ceil(a/this.spreadWidth);return this.documentElement.style.width=b*this.spreadWidth-this.gap+"px",{displayedPages:b,pageCount:2*b}},EPUBJS.Layout.Fixed=function(){this.documentElement=null},EPUBJS.Layout.Fixed.prototype.format=function(a,b,c,d){var e,f,g,h,i=EPUBJS.core.prefixed("columnWidth"),j=EPUBJS.core.prefixed("transform"),k=EPUBJS.core.prefixed("transformOrigin"),l=a.querySelector("[name=viewport]");this.documentElement=a,l&&l.hasAttribute("content")&&(e=l.getAttribute("content"),f=e.split(","),f[0]&&(g=f[0].replace("width=","")),f[1]&&(h=f[1].replace("height=","")));var m=b/g,n=c/h,o=m=d?g.resolve():(c=f,b=new EPUBJS.Chapter(this.spine[c],this.store,this.credentials),this.process(b).then(function(){setTimeout(function(){e(g)},1)})),g.promise}.bind(this);return"number"==typeof a&&(this.break=a),e().then(function(){this.total=this._locations.length-1,this._currentCfi&&(this.currentLocation=this._currentCfi),b.resolve(this._locations)}.bind(this)),b.promise},EPUBJS.Locations.prototype.process=function(a){return a.load().then(function(b){var c,d,e,f=b,g=f.documentElement.querySelector("body"),h=0;this.sprint(g,function(b){var g,i=b.length,j=0;for(0===h&&(c=f.createRange(),c.setStart(b,0)),g=this.break-h,g>i&&(h+=i,j=i);j=i?h=i-(j-this.break):(c.setEnd(b,j),e=a.cfiFromRange(c),this._locations.push(e),h=0,j+=1,c=f.createRange(),c.setStart(b,j));d=b}.bind(this)),c&&(c.setEnd(d,d.length),e=a.cfiFromRange(c),this._locations.push(e),h=0)}.bind(this))},EPUBJS.Locations.prototype.sprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,null,!1);c=d.nextNode();)b(c)},EPUBJS.Locations.prototype.locationFromCfi=function(a){return 0===this._locations.length?-1:EPUBJS.core.locationOf(a,this._locations,this.epubcfi.compare)},EPUBJS.Locations.prototype.percentageFromCfi=function(a){var b=this.locationFromCfi(a);return this.percentageFromLocation(b)},EPUBJS.Locations.prototype.percentageFromLocation=function(a){return a&&this.total?a/this.total:0},EPUBJS.Locations.prototype.cfiFromLocation=function(a){var b=-1;return"number"!=typeof a&&(a=parseInt(a)),a>=0&&a1?a/100:a,c=Math.ceil(this.total*b);return this.cfiFromLocation(c)},EPUBJS.Locations.prototype.load=function(a){return this._locations=JSON.parse(a),this.total=this._locations.length-1,this._locations},EPUBJS.Locations.prototype.save=function(a){return JSON.stringify(this._locations)},EPUBJS.Locations.prototype.getCurrent=function(a){return this._current},EPUBJS.Locations.prototype.setCurrent=function(a){var b;if("string"==typeof a)this._currentCfi=a;else{if("number"!=typeof a)return;this._current=a}0!==this._locations.length&&("string"==typeof a?(b=this.locationFromCfi(a),this._current=b):b=a,this.trigger("changed",{percentage:this.percentageFromLocation(b)}))},Object.defineProperty(EPUBJS.Locations.prototype,"currentLocation",{get:function(){return this._current},set:function(a){this.setCurrent(a)}}),RSVP.EventTarget.mixin(EPUBJS.Locations.prototype),EPUBJS.Pagination=function(a){this.pages=[],this.locations=[],this.epubcfi=new EPUBJS.EpubCFI,a&&a.length&&this.process(a)},EPUBJS.Pagination.prototype.process=function(a){a.forEach(function(a){this.pages.push(a.page),this.locations.push(a.cfi)},this),this.pageList=a,this.firstPage=parseInt(this.pages[0]),this.lastPage=parseInt(this.pages[this.pages.length-1]),this.totalPages=this.lastPage-this.firstPage},EPUBJS.Pagination.prototype.pageFromCfi=function(a){var b=-1;if(0===this.locations.length)return-1;var c=EPUBJS.core.indexOfSorted(a,this.locations,this.epubcfi.compare);return c!=-1?b=this.pages[c]:(c=EPUBJS.core.locationOf(a,this.locations,this.epubcfi.compare),void 0!==(b=c-1>=0?this.pages[c-1]:this.pages[0])||(b=-1)),b},EPUBJS.Pagination.prototype.cfiFromPage=function(a){var b=-1;"number"!=typeof a&&(a=parseInt(a));var c=this.pages.indexOf(a);return c!=-1&&(b=this.locations[c]),b},EPUBJS.Pagination.prototype.pageFromPercentage=function(a){return Math.round(this.totalPages*a)},EPUBJS.Pagination.prototype.percentageFromPage=function(a){var b=(a-this.firstPage)/this.totalPages;return Math.round(1e3*b)/1e3},EPUBJS.Pagination.prototype.percentageFromCfi=function(a){var b=this.pageFromCfi(a);return this.percentageFromPage(b)},EPUBJS.Parser=function(a){this.baseUrl=a||""},EPUBJS.Parser.prototype.container=function(a){var b,c,d,e;return a?(b=a.querySelector("rootfile"))?(c=b.getAttribute("full-path"),d=EPUBJS.core.uri(c).directory,e=a.xmlEncoding,{packagePath:c,basePath:d,encoding:e}):void console.error("No RootFile Found"):void console.error("Container File Not Found")},EPUBJS.Parser.prototype.identifier=function(a){var b;return a?(b=a.querySelector("metadata"),b?this.getElementText(b,"identifier"):void console.error("No Metadata Found")):void console.error("Package File Not Found")},EPUBJS.Parser.prototype.packageContents=function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=this;return b&&(this.baseUrl=b),a?(c=a.querySelector("metadata"))?(d=a.querySelector("manifest"))?(e=a.querySelector("spine"))?(f=n.manifest(d),g=n.findNavPath(d),h=n.findTocPath(d,e),i=n.findCoverPath(a),j=Array.prototype.indexOf.call(e.parentNode.childNodes,e),k=n.spine(e,f),l={},k.forEach(function(a){l[a.href]=a.index}),m=n.metadata(c),m.direction=e.getAttribute("page-progression-direction"),{metadata:m,spine:k,manifest:f,navPath:g,tocPath:h,coverPath:i,spineNodeIndex:j,spineIndexByURL:l}):void console.error("No Spine Found"):void console.error("No Manifest Found"):void console.error("No Metadata Found"):void console.error("Package File Not Found")},EPUBJS.Parser.prototype.findNavPath=function(a){var b=a.querySelector("item[properties$='nav'], item[properties^='nav '], item[properties*=' nav ']");return!!b&&b.getAttribute("href")},EPUBJS.Parser.prototype.findTocPath=function(a,b){var c,d=a.querySelector("item[media-type='application/x-dtbncx+xml']");return d||(c=b.getAttribute("toc"))&&(d=a.querySelector("item[id='"+c+"']")),!!d&&d.getAttribute("href")},EPUBJS.Parser.prototype.metadata=function(a){var b={},c=this;return b.bookTitle=c.getElementText(a,"title"),b.creator=c.getElementText(a,"creator"),b.description=c.getElementText(a,"description"),b.pubdate=c.getElementText(a,"date"),b.publisher=c.getElementText(a,"publisher"),b.identifier=c.getElementText(a,"identifier"),b.language=c.getElementText(a,"language"),b.rights=c.getElementText(a,"rights"),b.modified_date=c.querySelectorText(a,"meta[property='dcterms:modified']"),b.layout=c.querySelectorText(a,"meta[property='rendition:layout']"),b.orientation=c.querySelectorText(a,"meta[property='rendition:orientation']"),b.spread=c.querySelectorText(a,"meta[property='rendition:spread']"),b},EPUBJS.Parser.prototype.findCoverPath=function(a){if("2.0"===a.querySelector("package").getAttribute("version")){var b=a.querySelector('meta[name="cover"]');if(b){var c=b.getAttribute("content"),d=a.querySelector("item[id='"+c+"']");return!!d&&d.getAttribute("href")}return!1}var e=a.querySelector("item[properties='cover-image']");return!!e&&e.getAttribute("href")},EPUBJS.Parser.prototype.getElementText=function(a,b){var c,d=a.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/",b);return d&&0!==d.length?(c=d[0],c.childNodes.length?c.childNodes[0].nodeValue:""):""},EPUBJS.Parser.prototype.querySelectorText=function(a,b){var c=a.querySelector(b);return c&&c.childNodes.length?c.childNodes[0].nodeValue:""},EPUBJS.Parser.prototype.manifest=function(a){var b=this.baseUrl,c={},d=a.querySelectorAll("item");return Array.prototype.slice.call(d).forEach(function(a){var d=a.getAttribute("id"),e=a.getAttribute("href")||"",f=a.getAttribute("media-type")||"",g=a.getAttribute("properties")||"";c[d]={href:e,url:b+e,type:f,properties:g}}),c},EPUBJS.Parser.prototype.spine=function(a,b){var c=a.getElementsByTagName("itemref"),d=Array.prototype.slice.call(c),e=EPUBJS.core.indexOfElementNode(a),f=new EPUBJS.EpubCFI;return d.map(function(a,c){var d=a.getAttribute("idref"),g=f.generateChapterComponent(e,c,d),h=a.getAttribute("properties")||"",i=h.length?h.split(" "):[],j=b[d].properties,k=j.length?j.split(" "):[];return{id:d,linear:a.getAttribute("linear")||"",properties:i,manifestProperties:k,href:b[d].href,url:b[d].url,index:c,cfiBase:g,cfi:"epubcfi("+g+")"}})},EPUBJS.Parser.prototype.querySelectorByType=function(a,b,c){var d=a.querySelector(b+'[*|type="'+c+'"]');if(null!==d&&0!==d.length)return d;d=a.querySelectorAll(b);for(var e=0;e1&&d[1],{cfi:f,href:h,packageUrl:e,page:j}):{href:h,page:j}},EPUBJS.Render.Iframe=function(){this.iframe=null,this.document=null,this.window=null,this.docEl=null,this.bodyEl=null,this.leftPos=0,this.pageWidth=0,this.id=EPUBJS.core.uuid()},EPUBJS.Render.Iframe.prototype.create=function(){return this.element=document.createElement("div"),this.element.id="epubjs-view:"+this.id,this.isMobile=navigator.userAgent.match(/(iPad|iPhone|iPod|Mobile|Android)/g),this.transform=EPUBJS.core.prefixed("transform"),this.element},EPUBJS.Render.Iframe.prototype.addIframe=function(){return this.iframe=document.createElement("iframe"),this.iframe.id="epubjs-iframe:"+this.id,this.iframe.scrolling=this.scrolling||"no",this.iframe.seamless="seamless",this.iframe.style.border="none",this.iframe.addEventListener("load",this.loaded.bind(this),!1),(this._width||this._height)&&(this.iframe.height=this._height,this.iframe.width=this._width),this.iframe},EPUBJS.Render.Iframe.prototype.load=function(a,b){var c=this,d=new RSVP.defer;return this.window&&this.unload(),this.iframe&&this.element.removeChild(this.iframe),this.iframe=this.addIframe(),this.element.appendChild(this.iframe),this.iframe.onload=function(a){c.document=c.iframe.contentDocument,c.docEl=c.document.documentElement,c.headEl=c.document.head,c.bodyEl=c.document.body||c.document.querySelector("body"),c.window=c.iframe.contentWindow,c.window.addEventListener("resize",c.resized.bind(c),!1),c.leftPos=0,c.setLeft(0),c.bodyEl&&(c.bodyEl.style.margin="0"),d.resolve(c.docEl)},this.iframe.onerror=function(a){d.reject({message:"Error Loading Contents: "+a,stack:(new Error).stack})},this.document=this.iframe.contentDocument,this.document?(this.iframe.contentDocument.open(),this.iframe.contentDocument.write(a),this.iframe.contentDocument.close(),d.promise):(d.reject(new Error("No Document Available")),d.promise)},EPUBJS.Render.Iframe.prototype.loaded=function(a){var b,c,d=this.iframe.contentWindow.location.href;this.document=this.iframe.contentDocument,this.docEl=this.document.documentElement,this.headEl=this.document.head,this.bodyEl=this.document.body||this.document.querySelector("body"),this.window=this.iframe.contentWindow,this.window.focus(),"about:blank"!=d&&(b=this.iframe.contentDocument.querySelector("base"),c=b.getAttribute("href"),this.trigger("render:loaded",c))},EPUBJS.Render.Iframe.prototype.resize=function(a,b){this.element&&(this.element.style.height=b,isNaN(a)||a%2==0||(a+=1),this.element.style.width=a,this.iframe&&(this.iframe.height=b,this.iframe.width=a),this._height=b,this._width=a,this.width=this.element.getBoundingClientRect().width||a,this.height=this.element.getBoundingClientRect().height||b)},EPUBJS.Render.Iframe.prototype.resized=function(a){this.width=this.iframe.getBoundingClientRect().width,this.height=this.iframe.getBoundingClientRect().height},EPUBJS.Render.Iframe.prototype.totalWidth=function(){return this.docEl.scrollWidth},EPUBJS.Render.Iframe.prototype.totalHeight=function(){return this.docEl.scrollHeight},EPUBJS.Render.Iframe.prototype.setPageDimensions=function(a,b){this.pageWidth=a,this.pageHeight=b},EPUBJS.Render.Iframe.prototype.setDirection=function(a){this.direction=a,this.docEl&&"rtl"==this.docEl.dir&&(this.docEl.dir="rtl","pre-paginated"!==this.layout&&(this.docEl.style.position="static",this.docEl.style.right="auto"))},EPUBJS.Render.Iframe.prototype.setLeft=function(a){this.isMobile?this.docEl.style[this.transform]="translate("+-a+"px, 0)":this.document.defaultView.scrollTo(a,0)},EPUBJS.Render.Iframe.prototype.setLayout=function(a){this.layout=a},EPUBJS.Render.Iframe.prototype.setStyle=function(a,b,c){c&&(a=EPUBJS.core.prefixed(a)),this.bodyEl&&(this.bodyEl.style[a]=b)},EPUBJS.Render.Iframe.prototype.removeStyle=function(a){this.bodyEl&&(this.bodyEl.style[a]="")},EPUBJS.Render.Iframe.prototype.setClasses=function(a){this.bodyEl&&(this.bodyEl.className=a.join(" "))},EPUBJS.Render.Iframe.prototype.addHeadTag=function(a,b,c){var d=c||this.document,e=d.createElement(a),f=d.head;for(var g in b)e.setAttribute(g,b[g]);f&&f.insertBefore(e,f.firstChild)},EPUBJS.Render.Iframe.prototype.page=function(a){this.leftPos=this.pageWidth*(a-1),"rtl"===this.direction&&(this.leftPos=this.leftPos*-1),this.setLeft(this.leftPos)},EPUBJS.Render.Iframe.prototype.getPageNumberByElement=function(a){var b;if(a)return b=this.leftPos+a.getBoundingClientRect().left,Math.floor(b/this.pageWidth)+1},EPUBJS.Render.Iframe.prototype.getPageNumberByRect=function(a){var b;return b=this.leftPos+a.left,Math.floor(b/this.pageWidth)+1},EPUBJS.Render.Iframe.prototype.getBaseElement=function(){return this.bodyEl},EPUBJS.Render.Iframe.prototype.getDocumentElement=function(){return this.docEl},EPUBJS.Render.Iframe.prototype.isElementVisible=function(a){var b,c;return!!(a&&"function"==typeof a.getBoundingClientRect&&(b=a.getBoundingClientRect(),c=b.left,0!==b.width&&0!==b.height&&c>=0&&c=1&&a<=this.displayedPages&&(this.chapterPos=a,this.render.page(a),this.visibleRangeCfi=this.getVisibleRangeCfi(),this.currentLocationCfi=this.visibleRangeCfi.start,this.trigger("renderer:locationChanged",this.currentLocationCfi),this.trigger("renderer:visibleRangeChanged",this.visibleRangeCfi),!0):(console.warn("pageMap not set, queuing"),this._q.enqueue("page",arguments),!0)},EPUBJS.Renderer.prototype.nextPage=function(){return this.page(this.chapterPos+1)},EPUBJS.Renderer.prototype.prevPage=function(){return this.page(this.chapterPos-1)},EPUBJS.Renderer.prototype.pageByElement=function(a){var b;a&&(b=this.render.getPageNumberByElement(a),this.page(b))},EPUBJS.Renderer.prototype.lastPage=function(){if(this._moving)return this._q.enqueue("lastPage",arguments);this.page(this.displayedPages)},EPUBJS.Renderer.prototype.firstPage=function(){if(this._moving)return this._q.enqueue("firstPage",arguments);this.page(1)},EPUBJS.Renderer.prototype.section=function(a){var b=this.doc.getElementById(a);b&&this.pageByElement(b)},EPUBJS.Renderer.prototype.firstElementisTextNode=function(a){var b=a.childNodes;return!!(b.length&&b[0]&&3===b[0].nodeType&&b[0].textContent.trim().length)},EPUBJS.Renderer.prototype.isGoodNode=function(a){return["audio","canvas","embed","iframe","img","math","object","svg","video"].indexOf(a.tagName.toLowerCase())!==-1||this.firstElementisTextNode(a)},EPUBJS.Renderer.prototype.walk=function(a,b,c){for(var d,e,f,g,h=a,i=[h],j=1e4,k=0;!d&&i.length;){if(a=i.shift(),this.containsPoint(a,b,c)&&this.isGoodNode(a)&&(d=a),!d&&a&&a.childElementCount>0){if(!(e=a.children)||!e.length)return d;f=e.length?e.length:0;for(var l=f-1;l>=0;l--)e[l]!=g&&i.unshift(e[l])}if(!d&&0===i.length&&h&&null!==h.parentNode&&(i.push(h.parentNode),g=h,h=h.parentNode),++k>j){console.error("ENDLESS LOOP");break}}return d},EPUBJS.Renderer.prototype.containsPoint=function(a,b,c){var d;return!!(a&&"function"==typeof a.getBoundingClientRect&&(d=a.getBoundingClientRect(),0!==d.width&&0!==d.height&&d.left>=b&&b<=d.left+d.width))},EPUBJS.Renderer.prototype.textSprint=function(a,b){var c,d,e=function(a){return/^\s*$/.test(a.data)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT};try{for(c=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,{acceptNode:e},!1);d=c.nextNode();)b(d)}catch(f){for(c=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,e,!1);d=c.nextNode();)b(d)}},EPUBJS.Renderer.prototype.sprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_ELEMENT,null,!1);c=d.nextNode();)b(c)},EPUBJS.Renderer.prototype.mapPage=function(){var a,b,c,d,e,f,g,h,i=this,j=[],k=this.render.getBaseElement(),l=1,m=this.layout.colWidth+this.layout.gap,n=this.formated.pageWidth*(this.chapterPos-1),o=m*l-n,p=0,q=function(b){var c,e,f;if(b.nodeType==Node.TEXT_NODE){if(e=document.createRange(),e.selectNodeContents(b),!(c=e.getBoundingClientRect())||0===c.width&&0===c.height)return;c.left>p&&(f=r(b)),c.right>p&&(f=r(b)),d=b,f&&(a=null)}},r=function(e){var f;return i.splitTextNodeIntoWordsRanges(e).forEach(function(e){var g=e.getBoundingClientRect();!g||0===g.width&&0===g.height||(g.left+g.width0&&(b&&(b.setEnd(a,e),c.push(b)),b=this.doc.createRange(),b.setStart(a,e+1));return b&&(b.setEnd(a,d.length),c.push(b)),c},EPUBJS.Renderer.prototype.rangePosition=function(a){var b;return b=a.getClientRects(),b.length?b[0]:null},EPUBJS.Renderer.prototype.getPageCfi=function(){var a=2*this.chapterPos-1;return this.pageMap[a].start},EPUBJS.Renderer.prototype.getRange=function(a,b,c){var d,e=this.doc.createRange();return c=!0,void 0===document.caretPositionFromPoint||c?void 0===document.caretRangeFromPoint||c?(this.visibileEl=this.findElementAfter(a,b),e.setStart(this.visibileEl,1)):e=this.doc.caretRangeFromPoint(a,b):(d=this.doc.caretPositionFromPoint(a,b),e.setStart(d.offsetNode,d.offset)),e},EPUBJS.Renderer.prototype.pagesInCurrentChapter=function(){return this.pageMap?this.pageMap.length:(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.currentRenderedPage=function(){return this.pageMap?this.spreads&&this.pageMap.length>1?2*this.chapterPos-1:this.chapterPos:(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.getRenderedPagesLeft=function(){var a,b;return this.pageMap?(b=this.pageMap.length,a=this.spreads?2*this.chapterPos-1:this.chapterPos,b-a):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.getVisibleRangeCfi=function(){var a,b,c;return this.pageMap?(this.spreads?(a=2*this.chapterPos,b=this.pageMap[a-2],c=b,this.pageMap.length>1&&this.pageMap.length>a-1&&(c=this.pageMap[a-1])):(a=this.chapterPos,b=this.pageMap[a-1],c=b),b||(console.warn("page range miss:",a,this.pageMap),b=this.pageMap[this.pageMap.length-1],c=b),{start:b.start,end:c.end}):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.gotoCfi=function(a){var b,c,d;if(this._moving)return this._q.enqueue("gotoCfi",arguments);if(EPUBJS.core.isString(a)&&(a=this.epubcfi.parse(a)),void 0===document.evaluate)(c=this.epubcfi.addMarker(a,this.doc))&&(b=this.render.getPageNumberByElement(c),this.epubcfi.removeMarker(c,this.doc),this.page(b));else if(d=this.epubcfi.generateRangeFromCfi(a,this.doc)){var e=d.getBoundingClientRect();b=e?this.render.getPageNumberByRect(e):1,this.page(b),this.currentLocationCfi=a.str}else this.page(1)},EPUBJS.Renderer.prototype.findFirstVisible=function(a){var b,c=a||this.render.getBaseElement();return b=this.walk(c,0,0),b?b:a},EPUBJS.Renderer.prototype.findElementAfter=function(a,b,c){var d,e=c||this.render.getBaseElement();return d=this.walk(e,a,b),d?d:e},EPUBJS.Renderer.prototype.resize=function(a,b,c){this.width=a,this.height=b,c!==!1&&this.render.resize(this.width,this.height),this.contents&&this.reformat(),this.trigger("renderer:resized",{width:this.width,height:this.height})},EPUBJS.Renderer.prototype.onResized=function(a){this.trigger("renderer:beforeResize");var b=this.container.clientWidth,c=this.container.clientHeight;this.resize(b,c,!1)},EPUBJS.Renderer.prototype.addEventListeners=function(){this.render.document&&this.listenedEvents.forEach(function(a){this.render.document.addEventListener(a,this.triggerEvent.bind(this),!1)},this)},EPUBJS.Renderer.prototype.removeEventListeners=function(){this.render.document&&this.listenedEvents.forEach(function(a){this.render.document.removeEventListener(a,this.triggerEvent,!1)},this)},EPUBJS.Renderer.prototype.triggerEvent=function(a){this.trigger("renderer:"+a.type,a)},EPUBJS.Renderer.prototype.addSelectionListeners=function(){this.render.document.addEventListener("selectionchange",this.onSelectionChange.bind(this),!1)},EPUBJS.Renderer.prototype.removeSelectionListeners=function(){this.render.document&&this.doc.removeEventListener("selectionchange",this.onSelectionChange,!1)},EPUBJS.Renderer.prototype.onSelectionChange=function(a){this.selectionEndTimeout&&clearTimeout(this.selectionEndTimeout),this.selectionEndTimeout=setTimeout(function(){this.selectedRange=this.render.window.getSelection(),this.trigger("renderer:selected",this.selectedRange)}.bind(this),500)},EPUBJS.Renderer.prototype.setMinSpreadWidth=function(a){this.minSpreadWidth=a,this.spreads=this.determineSpreads(a)},EPUBJS.Renderer.prototype.determineSpreads=function(a){return!(this.isForcedSingle||!a||this.width=d?h.resolve():(c=a[e].url,g=window.encodeURIComponent(c),EPUBJS.core.request(c,"binary").then(function(a){return localforage.setItem(g,a)}).then(function(a){e++,setTimeout(function(){f(h)},1)})),h.promise}.bind(this);return Array.isArray(a)||(a=[a]),f().then(function(){c.resolve()}.bind(this)),c.promise},EPUBJS.Storage.prototype.token=function(a,b){var c=window.encodeURIComponent(a);return localforage.setItem(c,b).then(function(a){return null!==a})},EPUBJS.Storage.prototype.isStored=function(a){var b=window.encodeURIComponent(a);return localforage.getItem(b).then(function(a){return null!==a})},EPUBJS.Storage.prototype.getText=function(a){var b=window.encodeURIComponent(a);return EPUBJS.core.request(a,"arraybuffer",this.withCredentials).then(function(a){return this.offline&&(this.offline=!1,this.trigger("offline",!1)),localforage.setItem(b,a),a}.bind(this)).then(function(b){var c=new RSVP.defer,d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;return f.addEventListener("loadend",function(){c.resolve(f.result)}),f.readAsText(e,d),c.promise}).catch(function(){var c=new RSVP.defer,d=localforage.getItem(b);return this.offline||(this.offline=!0,this.trigger("offline",!0)),d?(d.then(function(b){var d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;f.addEventListener("loadend",function(){c.resolve(f.result)}),f.readAsText(e,d)}),c.promise):(c.reject({message:"File not found in the storage: "+a,stack:(new Error).stack}),c.promise)}.bind(this))},EPUBJS.Storage.prototype.getUrl=function(a){var b=window.encodeURIComponent(a);return EPUBJS.core.request(a,"arraybuffer",this.withCredentials).then(function(c){return this.offline&&(this.offline=!1,this.trigger("offline",!1)),localforage.setItem(b,c),a}.bind(this)).catch(function(){var c,d,e=new RSVP.defer,f=window.URL||window.webkitURL||window.mozURL;return this.offline||(this.offline=!0,this.trigger("offline",!0)),b in this.urlCache?(e.resolve(this.urlCache[b]),e.promise):(c=localforage.getItem(b))?(c.then(function(c){var g=new Blob([c],{type:EPUBJS.core.getMimeType(a)});d=f.createObjectURL(g),e.resolve(d),this.urlCache[b]=d}.bind(this)),e.promise):(e.reject({message:"File not found in the storage: "+a,stack:(new Error).stack}),e.promise)}.bind(this))},EPUBJS.Storage.prototype.getXml=function(a){var b=window.encodeURIComponent(a);return EPUBJS.core.request(a,"arraybuffer",this.withCredentials).then(function(a){return this.offline&&(this.offline=!1,this.trigger("offline",!1)),localforage.setItem(b,a),a}.bind(this)).then(function(b){var c=new RSVP.defer,d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;return f.addEventListener("loadend",function(){var a=new DOMParser,b=a.parseFromString(f.result,"text/xml");c.resolve(b)}),f.readAsText(e,d),c.promise}).catch(function(){var c=new RSVP.defer,d=localforage.getItem(b);return this.offline||(this.offline=!0,this.trigger("offline",!0)),d?(d.then(function(b){var d=EPUBJS.core.getMimeType(a),e=new Blob([b],{type:d}),f=new FileReader;f.addEventListener("loadend",function(){var a=new DOMParser,b=a.parseFromString(f.result,"text/xml");c.resolve(b)}),f.readAsText(e,d)}),c.promise):(c.reject({message:"File not found in the storage: "+a,stack:(new Error).stack}),c.promise)}.bind(this))},EPUBJS.Storage.prototype.revokeUrl=function(a){var b=window.URL||window.webkitURL||window.mozURL,c=this.urlCache[a];c&&b.revokeObjectURL(c)},EPUBJS.Storage.prototype.failed=function(a){console.error(a)},RSVP.EventTarget.mixin(EPUBJS.Storage.prototype),EPUBJS.Unarchiver=function(a){this.checkRequirements(),this.urlCache={}},EPUBJS.Unarchiver.prototype.checkRequirements=function(a){"undefined"==typeof JSZip&&console.error("JSZip lib not loaded")},EPUBJS.Unarchiver.prototype.open=function(a,b){if(a instanceof ArrayBuffer){this.zip=new JSZip(a);var c=new RSVP.defer;return c.resolve(),c.promise}return EPUBJS.core.request(a,"binary").then(function(a){this.zip=new JSZip(a)}.bind(this))},EPUBJS.Unarchiver.prototype.getXml=function(a,b){var c=window.decodeURIComponent(a);return this.getText(c,b).then(function(b){var c=new DOMParser,d=EPUBJS.core.getMimeType(a);return 65279===b.charCodeAt(0)&&(b=b.slice(1)),c.parseFromString(b,d)})},EPUBJS.Unarchiver.prototype.getUrl=function(a,b){var c,d,e=this,f=new RSVP.defer,g=window.decodeURIComponent(a),h=this.zip.file(g),i=window.URL||window.webkitURL||window.mozURL;return h?a in this.urlCache?(f.resolve(this.urlCache[a]),f.promise):(d=new Blob([h.asUint8Array()],{type:EPUBJS.core.getMimeType(h.name)}),c=i.createObjectURL(d),f.resolve(c),e.urlCache[a]=c,f.promise):(f.reject({message:"File not found in the epub: "+a,stack:(new Error).stack}),f.promise)},EPUBJS.Unarchiver.prototype.getText=function(a,b){var c,d=new RSVP.defer,e=window.decodeURIComponent(a),f=this.zip.file(e);return f?(c=f.asText(),d.resolve(c),d.promise):(d.reject({message:"File not found in the epub: "+a,stack:(new Error).stack}),d.promise)},EPUBJS.Unarchiver.prototype.revokeUrl=function(a){var b=window.URL||window.webkitURL||window.mozURL,c=this.urlCache[a];c&&b.revokeObjectURL(c)},EPUBJS.Unarchiver.prototype.failed=function(a){console.error(a)},EPUBJS.Unarchiver.prototype.afterSaved=function(a){this.callback()},EPUBJS.Unarchiver.prototype.toStorage=function(a){function b(){0===--e&&d.afterSaved()}var c=0,d=this,e=a.length;a.forEach(function(a){setTimeout(function(a){d.saveEntryFileToStorage(a,b)},c,a),c+=20}),console.log("time",c)},function(){var a={application:{ecmascript:["es","ecma"],javascript:"js",ogg:"ogx",pdf:"pdf",postscript:["ps","ai","eps","epsi","epsf","eps2","eps3"],"rdf+xml":"rdf",smil:["smi","smil"],"xhtml+xml":["xhtml","xht"],xml:["xml","xsl","xsd","opf","ncx"],zip:"zip","x-httpd-eruby":"rhtml","x-latex":"latex","x-maker":["frm","maker","frame","fm","fb","book","fbdoc"],"x-object":"o","x-shockwave-flash":["swf","swfl"],"x-silverlight":"scr","epub+zip":"epub","font-tdpfr":"pfr","inkml+xml":["ink","inkml"],json:"json","jsonml+json":"jsonml","mathml+xml":"mathml","metalink+xml":"metalink",mp4:"mp4s","omdoc+xml":"omdoc",oxps:"oxps","vnd.amazon.ebook":"azw",widget:"wgt","x-dtbook+xml":"dtb","x-dtbresource+xml":"res","x-font-bdf":"bdf","x-font-ghostscript":"gsf","x-font-linux-psf":"psf","x-font-otf":"otf","x-font-pcf":"pcf","x-font-snf":"snf","x-font-ttf":["ttf","ttc"],"x-font-type1":["pfa","pfb","pfm","afm"],"x-font-woff":"woff","x-mobipocket-ebook":["prc","mobi"],"x-mspublisher":"pub","x-nzb":"nzb","x-tgif":"obj","xaml+xml":"xaml","xml-dtd":"dtd","xproc+xml":"xpl","xslt+xml":"xslt","internet-property-stream":"acx","x-compress":"z","x-compressed":"tgz","x-gzip":"gz"},audio:{flac:"flac",midi:["mid","midi","kar","rmi"],mpeg:["mpga","mpega","mp2","mp3","m4a","mp2a","m2a","m3a"],mpegurl:"m3u",ogg:["oga","ogg","spx"],"x-aiff":["aif","aiff","aifc"],"x-ms-wma":"wma","x-wav":"wav",adpcm:"adp",mp4:"mp4a",webm:"weba","x-aac":"aac","x-caf":"caf","x-matroska":"mka","x-pn-realaudio-plugin":"rmp",xm:"xm",mid:["mid","rmi"]},image:{gif:"gif",ief:"ief",jpeg:["jpeg","jpg","jpe"],pcx:"pcx",png:"png","svg+xml":["svg","svgz"],tiff:["tiff","tif"],"x-icon":"ico",bmp:"bmp",webp:"webp","x-pict":["pic","pct"],"x-tga":"tga","cis-cod":"cod"},message:{rfc822:["eml","mime","mht","mhtml","nws"]},text:{"cache-manifest":["manifest","appcache"],calendar:["ics","icz","ifb"],css:"css",csv:"csv",h323:"323",html:["html","htm","shtml","stm"],iuls:"uls",mathml:"mml",plain:["txt","text","brf","conf","def","list","log","in","bas"],richtext:"rtx","tab-separated-values":"tsv","x-bibtex":"bib","x-dsrc":"d","x-diff":["diff","patch"],"x-haskell":"hs","x-java":"java","x-literate-haskell":"lhs","x-moc":"moc","x-pascal":["p","pas"],"x-pcs-gcd":"gcd","x-perl":["pl","pm"],"x-python":"py","x-scala":"scala","x-setext":"etx","x-tcl":["tcl","tk"],"x-tex":["tex","ltx","sty","cls"],"x-vcard":"vcf",sgml:["sgml","sgm"],"x-c":["c","cc","cxx","cpp","h","hh","dic"],"x-fortran":["f","for","f77","f90"],"x-opml":"opml","x-nfo":"nfo","x-sfv":"sfv","x-uuencode":"uu",webviewhtml:"htt"},video:{mpeg:["mpeg","mpg","mpe","m1v","m2v","mp2","mpa","mpv2"],mp4:["mp4","mp4v","mpg4"],quicktime:["qt","mov"],ogg:"ogv","vnd.mpegurl":["mxu","m4u"],"x-flv":"flv","x-la-asf":["lsf","lsx"],"x-mng":"mng","x-ms-asf":["asf","asx","asr"],"x-ms-wm":"wm","x-ms-wmv":"wmv","x-ms-wmx":"wmx","x-ms-wvx":"wvx","x-msvideo":"avi","x-sgi-movie":"movie","x-matroska":["mpv","mkv","mk3d","mks"],"3gpp2":"3g2",h261:"h261",h263:"h263",h264:"h264",jpeg:"jpgv",jpm:["jpm","jpgm"],mj2:["mj2","mjp2"],"vnd.ms-playready.media.pyv":"pyv","vnd.uvvu.mp4":["uvu","uvvu"],"vnd.vivo":"viv",webm:"webm","x-f4v":"f4v","x-m4v":"m4v","x-ms-vob":"vob","x-smv":"smv"}},b=function(){var b,c,d,e,f={};for(b in a)if(a.hasOwnProperty(b))for(c in a[b])if(a[b].hasOwnProperty(c))if("string"==typeof(d=a[b][c]))f[d]=b+"/"+c;else for(e=0;ef/2.5&&(p=f/2.5,pop_content.style.maxHeight=p+"px"),popRect.height+n>=f-25?(c.style.top=n-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),m-popRect.width<=0?(c.style.left=m+"px",c.classList.add("left")):c.classList.remove("left"),m+popRect.width/2>=j?(c.style.left=m-300+"px",popRect=c.getBoundingClientRect(),c.style.left=m-popRect.width+"px",popRect.height+n>=f-25?(c.style.top=n-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),c.classList.add("right")):c.classList.remove("right")}function d(){h[k].classList.add("on")}function g(){h[k].classList.remove("on")}function i(){setTimeout(function(){h[k].classList.remove("show")},100)}var j,k,l,m,n,o,p=a.getAttribute(e);p==f&&(j=a.getAttribute("href"),k=j.replace("#",""),l=b.render.document.getElementById(k),a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",i,!1))}),a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").mathml=function(a,b){if(-1!==b.currentChapter.manifestProperties.indexOf("mathml")){b.render.iframe.contentWindow.mathmlCallback=a;var c=document.createElement("script");c.type="text/x-mathjax-config",c.innerHTML=' MathJax.Hub.Register.StartupHook("End",function () { window.mathmlCallback(); }); MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); ',b.doc.body.appendChild(c),EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML",null,b.doc.head)}else a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").smartimages=function(a,b){var c=b.contents.querySelectorAll("img"),d=Array.prototype.slice.call(c),e=b.height;return"reflowable"!=b.layoutSettings.layout?void a():(d.forEach(function(a){var c=function(){var c,d=a.getBoundingClientRect(),f=d.height,g=d.top,h=a.getAttribute("data-height"),i=h||f,j=Number(getComputedStyle(a,"").fontSize.match(/(\d*(\.\d*)?)px/)[1]),k=j?j/2:0;e=b.contents.clientHeight,0>g&&(g=0),i+g>=e?(e/2>g?(c=e-g-k,a.style.maxHeight=c+"px",a.style.width="auto"):(i>e&&(a.style.maxHeight=e+"px",a.style.width="auto",d=a.getBoundingClientRect(),i=d.height),a.style.display="block",a.style.WebkitColumnBreakBefore="always",a.style.breakBefore="column"),a.setAttribute("data-height",c)):(a.style.removeProperty("max-height"),a.style.removeProperty("margin-top"))},d=function(){b.off("renderer:resized",c),b.off("renderer:chapterUnload",this)};a.addEventListener("load",c,!1),b.on("renderer:resized",c),b.on("renderer:chapterUnload",d),c()}),void(a&&a()))},EPUBJS.Hooks.register("beforeChapterDisplay").transculsions=function(a,b){var c=b.contents.querySelectorAll("[transclusion]"),d=Array.prototype.slice.call(c);d.forEach(function(a){function c(){j=g,k=h,j>chapter.colWidth&&(d=chapter.colWidth/j,j=chapter.colWidth,k*=d),f.width=j,f.height=k}var d,e=a.getAttribute("ref"),f=document.createElement("iframe"),g=a.getAttribute("width"),h=a.getAttribute("height"),i=a.parentNode,j=g,k=h;c(),b.listenUntil("renderer:resized","renderer:chapterUnloaded",c),f.src=e,i.replaceChild(f,a)}),a&&a()}; \ No newline at end of file +EPUBJS.Hooks.register("beforeChapterDisplay").endnotes=function(a,b){var c=b.contents.querySelectorAll("a[href]"),d=Array.prototype.slice.call(c),e=EPUBJS.core.folder(location.pathname),f=(EPUBJS.cssPath,{});EPUBJS.core.addCss(EPUBJS.cssPath+"popup.css",!1,b.render.document.head),d.forEach(function(a){function c(){var c,h,n=b.height,o=b.width,p=225;m||(c=j.cloneNode(!0),m=c.querySelector("p")),f[i]||(f[i]=document.createElement("div"),f[i].setAttribute("class","popup"),pop_content=document.createElement("div"),f[i].appendChild(pop_content),pop_content.appendChild(m),pop_content.setAttribute("class","pop_content"),b.render.document.body.appendChild(f[i]),f[i].addEventListener("mouseover",d,!1),f[i].addEventListener("mouseout",e,!1),b.on("renderer:pageChanged",g,this),b.on("renderer:pageChanged",e,this)),c=f[i],h=a.getBoundingClientRect(),k=h.left,l=h.top,c.classList.add("show"),popRect=c.getBoundingClientRect(),c.style.left=k-popRect.width/2+"px",c.style.top=l+"px",p>n/2.5&&(p=n/2.5,pop_content.style.maxHeight=p+"px"),popRect.height+l>=n-25?(c.style.top=l-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),k-popRect.width<=0?(c.style.left=k+"px",c.classList.add("left")):c.classList.remove("left"),k+popRect.width/2>=o?(c.style.left=k-300+"px",popRect=c.getBoundingClientRect(),c.style.left=k-popRect.width+"px",popRect.height+l>=n-25?(c.style.top=l-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),c.classList.add("right")):c.classList.remove("right")}function d(){f[i].classList.add("on")}function e(){f[i].classList.remove("on")}function g(){setTimeout(function(){f[i].classList.remove("show")},100)}var h,i,j,k,l,m;"noteref"==a.getAttribute("epub:type")&&(h=a.getAttribute("href"),i=h.replace("#",""),j=b.render.document.getElementById(i),a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",g,!1))}),a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").mathml=function(a,b){if(b.currentChapter.manifestProperties.indexOf("mathml")!==-1){b.render.iframe.contentWindow.mathmlCallback=a;var c=document.createElement("script");c.type="text/x-mathjax-config",c.innerHTML=' MathJax.Hub.Register.StartupHook("End",function () { window.mathmlCallback(); }); MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); ',b.doc.body.appendChild(c),EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML",null,b.doc.head)}else a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").smartimages=function(a,b){var c=b.contents.querySelectorAll("img"),d=Array.prototype.slice.call(c),e=b.height;if("reflowable"!=b.layoutSettings.layout)return void a();d.forEach(function(a){var c=function(){var c,d=a.getBoundingClientRect(),f=d.height,g=d.top,h=a.getAttribute("data-height"),i=h||f,j=Number(getComputedStyle(a,"").fontSize.match(/(\d*(\.\d*)?)px/)[1]),k=j?j/2:0;e=b.contents.clientHeight,g<0&&(g=0),i+g>=e?(ge&&(a.style.maxHeight=e+"px",a.style.width="auto",d=a.getBoundingClientRect(),i=d.height),a.style.display="block",a.style.WebkitColumnBreakBefore="always",a.style.breakBefore="column"),a.setAttribute("data-height",c)):(a.style.removeProperty("max-height"),a.style.removeProperty("margin-top"))},d=function(){b.off("renderer:resized",c),b.off("renderer:chapterUnload",this)};a.addEventListener("load",c,!1),b.on("renderer:resized",c),b.on("renderer:chapterUnload",d),c()}),a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").transculsions=function(a,b){var c=b.contents.querySelectorAll("[transclusion]");Array.prototype.slice.call(c).forEach(function(a){function c(){j=g,k=h,j>chapter.colWidth&&(d=chapter.colWidth/j,j=chapter.colWidth,k*=d),f.width=j,f.height=k}var d,e=a.getAttribute("ref"),f=document.createElement("iframe"),g=a.getAttribute("width"),h=a.getAttribute("height"),i=a.parentNode,j=g,k=h;c(),b.listenUntil("renderer:resized","renderer:chapterUnloaded",c),f.src=e,i.replaceChild(f,a)}),a&&a()}; \ No newline at end of file diff --git a/cps/static/js/libs/hooks.min.map b/cps/static/js/libs/hooks.min.map deleted file mode 100644 index 5da22bee..00000000 --- a/cps/static/js/libs/hooks.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"hooks.min.js","sources":["../../hooks/default/endnotes.js","../../hooks/default/mathml.js","../../hooks/default/smartimages.js","../../hooks/default/transculsions.js"],"names":["EPUBJS","Hooks","register","endnotes","callback","renderer","notes","contents","querySelectorAll","items","Array","prototype","slice","call","attr","type","folder","core","location","pathname","popups","cssPath","addCss","render","document","head","forEach","item","showPop","pop","itemRect","iheight","height","iwidth","width","maxHeight","txt","el","cloneNode","querySelector","id","createElement","setAttribute","pop_content","appendChild","body","addEventListener","onPop","offPop","on","hidePop","this","getBoundingClientRect","left","top","classList","add","popRect","style","remove","setTimeout","href","epubType","getAttribute","replace","getElementById","mathml","currentChapter","manifestProperties","indexOf","iframe","contentWindow","mathmlCallback","s","innerHTML","doc","addScript","smartimages","images","layoutSettings","layout","size","newHeight","rectHeight","oHeight","fontSize","Number","getComputedStyle","match","fontAdjust","clientHeight","display","removeProperty","unloaded","off","transculsions","trans","orginal_width","orginal_height","chapter","colWidth","ratio","src","parent","parentNode","listenUntil","replaceChild"],"mappings":"AAAAA,OAAOC,MAAMC,SAAS,wBAAwBC,SAAW,SAASC,EAAUC,GAE1E,GAAIC,GAAQD,EAASE,SAASC,iBAAiB,WAC9CC,EAAQC,MAAMC,UAAUC,MAAMC,KAAKP,GACnCQ,EAAO,YACPC,EAAO,UACPC,EAAShB,OAAOiB,KAAKD,OAAOE,SAASC,UAErCC,GADWJ,EAAShB,OAAOqB,SAAYL,KAGxChB,QAAOiB,KAAKK,OAAOtB,OAAOqB,QAAU,aAAa,EAAOhB,EAASkB,OAAOC,SAASC,MAGjFhB,EAAMiB,QAAQ,SAASC,GAqBtB,QAASC,KACR,GAICC,GAEAC,EALAC,EAAU1B,EAAS2B,OACnBC,EAAS5B,EAAS6B,MAGlBC,EAAY,GAGTC,KACHP,EAAMQ,EAAGC,WAAU,GACnBF,EAAMP,EAAIU,cAAc,MAKrBnB,EAAOoB,KACVpB,EAAOoB,GAAMhB,SAASiB,cAAc,OACpCrB,EAAOoB,GAAIE,aAAa,QAAS,SAEjCC,YAAcnB,SAASiB,cAAc,OAErCrB,EAAOoB,GAAII,YAAYD,aAEvBA,YAAYC,YAAYR,GACxBO,YAAYD,aAAa,QAAS,eAElCrC,EAASkB,OAAOC,SAASqB,KAAKD,YAAYxB,EAAOoB,IAGjDpB,EAAOoB,GAAIM,iBAAiB,YAAaC,GAAO,GAChD3B,EAAOoB,GAAIM,iBAAiB,WAAYE,GAAQ,GAKhD3C,EAAS4C,GAAG,uBAAwBC,EAASC,MAC7C9C,EAAS4C,GAAG,uBAAwBD,EAAQG,OAI7CtB,EAAMT,EAAOoB,GAIbV,EAAWH,EAAKyB,wBAChBC,EAAOvB,EAASuB,KAChBC,EAAMxB,EAASwB,IAGfzB,EAAI0B,UAAUC,IAAI,QAGlBC,QAAU5B,EAAIuB,wBAGdvB,EAAI6B,MAAML,KAAOA,EAAOI,QAAQvB,MAAQ,EAAI,KAC5CL,EAAI6B,MAAMJ,IAAMA,EAAM,KAInBnB,EAAYJ,EAAU,MACxBI,EAAYJ,EAAU,IACtBY,YAAYe,MAAMvB,UAAYA,EAAY,MAIxCsB,QAAQzB,OAASsB,GAAOvB,EAAU,IACpCF,EAAI6B,MAAMJ,IAAMA,EAAMG,QAAQzB,OAAU,KACxCH,EAAI0B,UAAUC,IAAI,UAElB3B,EAAI0B,UAAUI,OAAO,SAInBN,EAAOI,QAAQvB,OAAS,GAC1BL,EAAI6B,MAAML,KAAOA,EAAO,KACxBxB,EAAI0B,UAAUC,IAAI,SAElB3B,EAAI0B,UAAUI,OAAO,QAInBN,EAAOI,QAAQvB,MAAQ,GAAKD,GAE9BJ,EAAI6B,MAAML,KAAOA,EAAO,IAAM,KAE9BI,QAAU5B,EAAIuB,wBACdvB,EAAI6B,MAAML,KAAOA,EAAOI,QAAQvB,MAAQ,KAErCuB,QAAQzB,OAASsB,GAAOvB,EAAU,IACpCF,EAAI6B,MAAMJ,IAAMA,EAAMG,QAAQzB,OAAU,KACxCH,EAAI0B,UAAUC,IAAI,UAElB3B,EAAI0B,UAAUI,OAAO,SAGtB9B,EAAI0B,UAAUC,IAAI,UAElB3B,EAAI0B,UAAUI,OAAO,SAMvB,QAASZ,KACR3B,EAAOoB,GAAIe,UAAUC,IAAI,MAG1B,QAASR,KACR5B,EAAOoB,GAAIe,UAAUI,OAAO,MAG7B,QAAST,KACRU,WAAW,WACVxC,EAAOoB,GAAIe,UAAUI,OAAO,SAC1B,KAxIJ,GACCE,GACArB,EACAH,EAGAgB,EACAC,EACAlB,EARG0B,EAAWnC,EAAKoC,aAAajD,EAU9BgD,IAAY/C,IAEf8C,EAAOlC,EAAKoC,aAAa,QACzBvB,EAAKqB,EAAKG,QAAQ,IAAK,IACvB3B,EAAKhC,EAASkB,OAAOC,SAASyC,eAAezB,GAG7Cb,EAAKmB,iBAAiB,YAAalB,GAAS,GAC5CD,EAAKmB,iBAAiB,WAAYI,GAAS,MA4HzC9C,GAAUA,KC5JfJ,OAAOC,MAAMC,SAAS,wBAAwBgE,OAAS,SAAS9D,EAAUC,GAGtE,GAAoE,KAAjEA,EAAS8D,eAAeC,mBAAmBC,QAAQ,UAAkB,CAGpEhE,EAASkB,OAAO+C,OAAOC,cAAcC,eAAiBpE,CAGtD,IAAIqE,GAAIjD,SAASiB,cAAc,SAC/BgC,GAAE1D,KAAO,wBACT0D,EAAEC,UAAY,6ZAMdrE,EAASsE,IAAI9B,KAAKD,YAAY6B,GAE9BzE,OAAOiB,KAAK2D,UAAU,gFAAiF,KAAMvE,EAASsE,IAAIlD,UAGvHrB,IAAUA,KCtBrBJ,OAAOC,MAAMC,SAAS,wBAAwB2E,YAAc,SAASzE,EAAUC,GAC7E,GAAIyE,GAASzE,EAASE,SAASC,iBAAiB,OAC/CC,EAAQC,MAAMC,UAAUC,MAAMC,KAAKiE,GACnC/C,EAAU1B,EAAS2B,MAGpB,OAAqC,cAAlC3B,EAAS0E,eAAeC,WAC1B5E,MAIDK,EAAMiB,QAAQ,SAASC,GAEtB,GAAIsD,GAAO,WACV,GAKCC,GALGpD,EAAWH,EAAKyB,wBACnB+B,EAAarD,EAASE,OACtBsB,EAAMxB,EAASwB,IACf8B,EAAUzD,EAAKoC,aAAa,eAC5B/B,EAASoD,GAAWD,EAEpBE,EAAWC,OAAOC,iBAAiB5D,EAAM,IAAI0D,SAASG,MAAM,mBAAmB,IAC/EC,EAAaJ,EAAWA,EAAW,EAAI,CAExCtD,GAAU1B,EAASE,SAASmF,aACnB,EAANpC,IAASA,EAAM,GAEftB,EAASsB,GAAOvB,GAETA,EAAQ,EAAduB,GAEF4B,EAAYnD,EAAUuB,EAAMmC,EAC5B9D,EAAK+B,MAAMvB,UAAY+C,EAAY,KACnCvD,EAAK+B,MAAMxB,MAAO,SAEfF,EAASD,IACXJ,EAAK+B,MAAMvB,UAAYJ,EAAU,KACjCJ,EAAK+B,MAAMxB,MAAO,OAClBJ,EAAWH,EAAKyB,wBAChBpB,EAASF,EAASE,QAEnBL,EAAK+B,MAAMiC,QAAU,QACrBhE,EAAK+B,MAA+B,wBAAI,SACxC/B,EAAK+B,MAAmB,YAAI,UAI7B/B,EAAKe,aAAa,cAAewC,KAGjCvD,EAAK+B,MAAMkC,eAAe,cAC1BjE,EAAK+B,MAAMkC,eAAe,gBAIxBC,EAAW,WAEdxF,EAASyF,IAAI,mBAAoBb,GACjC5E,EAASyF,IAAI,yBAA0B3C,MAGxCxB,GAAKmB,iBAAiB,OAAQmC,GAAM,GAEpC5E,EAAS4C,GAAG,mBAAoBgC,GAEhC5E,EAAS4C,GAAG,yBAA0B4C,GAEtCZ,WAIE7E,GAAUA,OCtEfJ,OAAOC,MAAMC,SAAS,wBAAwB6F,cAAgB,SAAS3F,EAAUC,GAO/E,GAAI2F,GAAQ3F,EAASE,SAASC,iBAAiB,kBAC7CC,EAAQC,MAAMC,UAAUC,MAAMC,KAAKmF,EAErCvF,GAAMiB,QAAQ,SAASC,GAWtB,QAASsD,KACR/C,EAAQ+D,EACRjE,EAASkE,EAENhE,EAAQiE,QAAQC,WAClBC,EAAQF,QAAQC,SAAWlE,EAE3BA,EAAQiE,QAAQC,SAChBpE,GAAkBqE,GAGnB/B,EAAOpC,MAAQA,EACfoC,EAAOtC,OAASA,EAtBjB,GAOCqE,GAPGC,EAAM3E,EAAKoC,aAAa,OAC3BO,EAAS9C,SAASiB,cAAc,UAChCwD,EAAgBtE,EAAKoC,aAAa,SAClCmC,EAAiBvE,EAAKoC,aAAa,UACnCwC,EAAS5E,EAAK6E,WACdtE,EAAQ+D,EACRjE,EAASkE,CAoBVjB,KAKA5E,EAASoG,YAAY,mBAAoB,2BAA4BxB,GAErEX,EAAOgC,IAAMA,EAGbC,EAAOG,aAAapC,EAAQ3C,KAQ1BvB,GAAUA"} \ No newline at end of file diff --git a/cps/static/js/libs/reader.min.js b/cps/static/js/libs/reader.min.js index fd0a2a99..72ffc5f4 100644 --- a/cps/static/js/libs/reader.min.js +++ b/cps/static/js/libs/reader.min.js @@ -1 +1 @@ -EPUBJS.reader={},EPUBJS.reader.plugins={},function(a){var b=(a.ePubReader||{},a.ePubReader=function(a,b){return new EPUBJS.Reader(a,b)});"function"==typeof define&&define.amd?define(function(){return Reader}):"undefined"!=typeof module&&module.exports&&(module.exports=b)}(window,jQuery),EPUBJS.Reader=function(a,b){var c,d,e,f=this,g=$("#viewer"),h=window.location.search;this.settings=EPUBJS.core.defaults(b||{},{bookPath:a,restore:!1,reload:!1,bookmarks:void 0,annotations:void 0,contained:void 0,bookKey:void 0,styles:void 0,sidebarReflow:!1,generatePagination:!1,history:!0}),h&&(e=h.slice(1).split("&"),e.forEach(function(a){var b=a.split("="),c=b[0],d=b[1]||"";f.settings[c]=decodeURIComponent(d)})),this.setBookKey(this.settings.bookPath),this.settings.restore&&this.isSaved()&&this.applySavedSettings(),this.settings.styles=this.settings.styles||{fontSize:"100%"},this.book=c=new EPUBJS.Book(this.settings),this.settings.previousLocationCfi&&c.gotoCfi(this.settings.previousLocationCfi),this.offline=!1,this.sidebarOpen=!1,this.settings.bookmarks||(this.settings.bookmarks=[]),this.settings.annotations||(this.settings.annotations=[]),this.settings.generatePagination&&c.generatePagination(g.width(),g.height()),c.renderTo("viewer"),f.ReaderController=EPUBJS.reader.ReaderController.call(f,c),f.SettingsController=EPUBJS.reader.SettingsController.call(f,c),f.ControlsController=EPUBJS.reader.ControlsController.call(f,c),f.SidebarController=EPUBJS.reader.SidebarController.call(f,c),f.BookmarksController=EPUBJS.reader.BookmarksController.call(f,c),f.NotesController=EPUBJS.reader.NotesController.call(f,c);for(d in EPUBJS.reader.plugins)EPUBJS.reader.plugins.hasOwnProperty(d)&&(f[d]=EPUBJS.reader.plugins[d].call(f,c));return c.ready.all.then(function(){f.ReaderController.hideLoader()}),c.getMetadata().then(function(a){f.MetaController=EPUBJS.reader.MetaController.call(f,a)}),c.getToc().then(function(a){f.TocController=EPUBJS.reader.TocController.call(f,a)}),window.addEventListener("beforeunload",this.unload.bind(this),!1),window.addEventListener("hashchange",this.hashChanged.bind(this),!1),document.addEventListener("keydown",this.adjustFontSize.bind(this),!1),c.on("renderer:keydown",this.adjustFontSize.bind(this)),c.on("renderer:keydown",f.ReaderController.arrowKeys.bind(this)),c.on("renderer:selected",this.selectedRange.bind(this)),this},EPUBJS.Reader.prototype.adjustFontSize=function(a){var b,c=2,d=187,e=189,f=48,g=a.ctrlKey||a.metaKey;this.settings.styles&&(this.settings.styles.fontSize||(this.settings.styles.fontSize="100%"),b=parseInt(this.settings.styles.fontSize.slice(0,-1)),g&&a.keyCode==d&&(a.preventDefault(),this.book.setStyle("fontSize",b+c+"%")),g&&a.keyCode==e&&(a.preventDefault(),this.book.setStyle("fontSize",b-c+"%")),g&&a.keyCode==f&&(a.preventDefault(),this.book.setStyle("fontSize","100%")))},EPUBJS.Reader.prototype.addBookmark=function(a){var b=this.isBookmarked(a);b>-1||(this.settings.bookmarks.push(a),this.trigger("reader:bookmarked",a))},EPUBJS.Reader.prototype.removeBookmark=function(a){var b=this.isBookmarked(a);-1!==b&&(this.settings.bookmarks.splice(b,1),this.trigger("reader:unbookmarked",b))},EPUBJS.Reader.prototype.isBookmarked=function(a){var b=this.settings.bookmarks;return b.indexOf(a)},EPUBJS.Reader.prototype.clearBookmarks=function(){this.settings.bookmarks=[]},EPUBJS.Reader.prototype.addNote=function(a){this.settings.annotations.push(a)},EPUBJS.Reader.prototype.removeNote=function(a){var b=this.settings.annotations.indexOf(a);-1!==b&&delete this.settings.annotations[b]},EPUBJS.Reader.prototype.clearNotes=function(){this.settings.annotations=[]},EPUBJS.Reader.prototype.setBookKey=function(a){return this.settings.bookKey||(this.settings.bookKey="epubjsreader:"+EPUBJS.VERSION+":"+window.location.host+":"+a),this.settings.bookKey},EPUBJS.Reader.prototype.isSaved=function(){var a;return localStorage?(a=localStorage.getItem(this.settings.bookKey),null===a?!1:!0):!1},EPUBJS.Reader.prototype.removeSavedSettings=function(){return localStorage?void localStorage.removeItem(this.settings.bookKey):!1},EPUBJS.Reader.prototype.applySavedSettings=function(){var a;if(!localStorage)return!1;try{a=JSON.parse(localStorage.getItem(this.settings.bookKey))}catch(b){return!1}return a?(a.styles&&(this.settings.styles=EPUBJS.core.defaults(this.settings.styles||{},a.styles)),this.settings=EPUBJS.core.defaults(this.settings,a),!0):!1},EPUBJS.Reader.prototype.saveSettings=function(){return this.book&&(this.settings.previousLocationCfi=this.book.getCurrentLocationCfi()),localStorage?void localStorage.setItem(this.settings.bookKey,JSON.stringify(this.settings)):!1},EPUBJS.Reader.prototype.unload=function(){this.settings.restore&&localStorage&&this.saveSettings()},EPUBJS.Reader.prototype.hashChanged=function(){var a=window.location.hash.slice(1);this.book.goto(a)},EPUBJS.Reader.prototype.selectedRange=function(a){var b=new EPUBJS.EpubCFI,c=b.generateCfiFromRangeAnchor(a,this.book.renderer.currentChapter.cfiBase),d="#"+c;this.settings.history&&window.location.hash!=d&&(history.pushState({},"",d),this.currentLocationCfi=c)},RSVP.EventTarget.mixin(EPUBJS.Reader.prototype),EPUBJS.reader.BookmarksController=function(){var a=this.book,b=$("#bookmarksView"),c=b.find("#bookmarks"),d=document.createDocumentFragment(),e=function(){b.show()},f=function(){b.hide()},g=0,h=function(b){var c=document.createElement("li"),d=document.createElement("a");return c.id="bookmark-"+g,c.classList.add("list_item"),d.textContent=b,d.href=b,d.classList.add("bookmark_link"),d.addEventListener("click",function(b){var c=this.getAttribute("href");a.gotoCfi(c),b.preventDefault()},!1),c.appendChild(d),g++,c};return this.settings.bookmarks.forEach(function(a){var b=h(a);d.appendChild(b)}),c.append(d),this.on("reader:bookmarked",function(a){var b=h(a);c.append(b)}),this.on("reader:unbookmarked",function(a){var b=$("#bookmark-"+a);b.remove()}),{show:e,hide:f}},EPUBJS.reader.ControlsController=function(a){var b=this,c=($("#store"),$("#fullscreen")),d=($("#fullscreenicon"),$("#cancelfullscreenicon"),$("#slider")),e=($("#main"),$("#sidebar"),$("#setting")),f=$("#bookmark"),g=function(){b.offline=!1},h=function(){b.offline=!0},i=!1;return a.on("book:online",g),a.on("book:offline",h),d.on("click",function(){b.sidebarOpen?(b.SidebarController.hide(),d.addClass("icon-menu"),d.removeClass("icon-right")):(b.SidebarController.show(),d.addClass("icon-right"),d.removeClass("icon-menu"))}),"undefined"!=typeof screenfull&&(c.on("click",function(){screenfull.toggle($("#container")[0])}),screenfull.raw&&document.addEventListener(screenfull.raw.fullscreenchange,function(){i=screenfull.isFullscreen,i?c.addClass("icon-resize-small").removeClass("icon-resize-full"):c.addClass("icon-resize-full").removeClass("icon-resize-small")})),e.on("click",function(){b.SettingsController.show()}),f.on("click",function(){var a=b.book.getCurrentLocationCfi(),c=b.isBookmarked(a);-1===c?(b.addBookmark(a),f.addClass("icon-bookmark").removeClass("icon-bookmark-empty")):(b.removeBookmark(a),f.removeClass("icon-bookmark").addClass("icon-bookmark-empty"))}),a.on("renderer:locationChanged",function(a){var c="#"+a,d=b.isBookmarked(a);-1===d?f.removeClass("icon-bookmark").addClass("icon-bookmark-empty"):f.addClass("icon-bookmark").removeClass("icon-bookmark-empty"),b.currentLocationCfi=a,b.settings.history&&window.location.hash!=c&&history.pushState({},"",c)}),a.on("book:pageChanged",function(){}),{}},EPUBJS.reader.MetaController=function(a){var b=a.bookTitle,c=a.creator,d=$("#book-title"),e=$("#chapter-title"),f=$("#title-seperator");document.title=b+" – "+c,d.html(b),e.html(c),f.show()},EPUBJS.reader.NotesController=function(){var a=this.book,b=this,c=$("#notesView"),d=$("#notes"),e=$("#note-text"),f=$("#note-anchor"),g=b.settings.annotations,h=a.renderer,i=[],j=new EPUBJS.EpubCFI,k=function(){c.show()},l=function(){c.hide()},m=function(c){var d,g,h,i,k,l=a.renderer.doc;if(l.caretPositionFromPoint?(d=l.caretPositionFromPoint(c.clientX,c.clientY),g=d.offsetNode,h=d.offset):l.caretRangeFromPoint&&(d=l.caretRangeFromPoint(c.clientX,c.clientY),g=d.startContainer,h=d.startOffset),3!==g.nodeType)for(var p=0;pm/2.5&&(o=m/2.5,pop_content.style.maxHeight=o+"px"),popRect.height+l>=m-25?(b.style.top=l-popRect.height+"px",b.classList.add("above")):b.classList.remove("above"),k-popRect.width<=0?(b.style.left=k+"px",b.classList.add("left")):b.classList.remove("left"),k+popRect.width/2>=n?(b.style.left=k-300+"px",popRect=b.getBoundingClientRect(),b.style.left=k-popRect.width+"px",popRect.height+l>=m-25?(b.style.top=l-popRect.height+"px",b.classList.add("above")):b.classList.remove("above"),b.classList.add("right")):b.classList.remove("right")},f=function(){i[d].classList.add("on")},g=function(){i[d].classList.remove("on")},j=function(){setTimeout(function(){i[d].classList.remove("show")},100)},l=function(){b.ReaderController.slideOut(),k()};a.addEventListener("mouseover",e,!1),a.addEventListener("mouseout",j,!1),a.addEventListener("click",l,!1)};return f.on("click",function(){f.text("Cancel"),e.prop("disabled","true"),a.on("renderer:click",m)}),g.forEach(function(a){n(a)}),h.registerHook("beforeChapterDisplay",function(a,b){var c=b.currentChapter;g.forEach(function(a){var b=j.parse(a.anchor);if(b.spinePos===c.spinePos)try{o(a)}catch(d){console.log("anchoring failed",a.anchor)}}),a()},!0),{show:k,hide:l}},EPUBJS.reader.ReaderController=function(a){var b=$("#main"),c=$("#divider"),d=$("#loader"),e=$("#next"),f=$("#prev"),g=this,a=this.book,h=function(){var c=a.getCurrentLocationCfi();g.settings.sidebarReflow?(b.removeClass("single"),b.one("transitionend",function(){a.gotoCfi(c)})):b.removeClass("closed")},i=function(){var c=a.getCurrentLocationCfi();g.settings.sidebarReflow?(b.addClass("single"),b.one("transitionend",function(){a.gotoCfi(c)})):b.addClass("closed")},j=function(){d.show(),m()},k=function(){d.hide()},l=function(){c.addClass("show")},m=function(){c.removeClass("show")},n=!1,o=function(b){37==b.keyCode&&("rtl"===a.metadata.direction?a.nextPage():a.prevPage(),f.addClass("active"),n=!0,setTimeout(function(){n=!1,f.removeClass("active")},100),b.preventDefault()),39==b.keyCode&&("rtl"===a.metadata.direction?a.prevPage():a.nextPage(),e.addClass("active"),n=!0,setTimeout(function(){n=!1,e.removeClass("active")},100),b.preventDefault())};return document.addEventListener("keydown",o,!1),e.on("click",function(b){"rtl"===a.metadata.direction?a.prevPage():a.nextPage(),b.preventDefault()}),f.on("click",function(b){"rtl"===a.metadata.direction?a.nextPage():a.prevPage(),b.preventDefault()}),a.on("renderer:spreads",function(a){a?l():m()}),{slideOut:i,slideIn:h,showLoader:j,hideLoader:k,showDivider:l,hideDivider:m,arrowKeys:o}},EPUBJS.reader.SettingsController=function(){var a=(this.book,this),b=$("#settings-modal"),c=$(".overlay"),d=function(){b.addClass("md-show")},e=function(){b.removeClass("md-show")},f=$("#sidebarReflow");return f.on("click",function(){a.settings.sidebarReflow=!a.settings.sidebarReflow}),b.find(".closer").on("click",function(){e()}),c.on("click",function(){e()}),{show:d,hide:e}},EPUBJS.reader.SidebarController=function(){var a=this,b=$("#sidebar"),c=$("#panels"),d="Toc",e=function(b){var e=b+"Controller";d!=b&&"undefined"!=typeof a[e]&&(a[d+"Controller"].hide(),a[e].show(),d=b,c.find(".active").removeClass("active"),c.find("#show-"+b).addClass("active"))},f=function(){return d},g=function(){a.sidebarOpen=!0,a.ReaderController.slideOut(),b.addClass("open")},h=function(){a.sidebarOpen=!1,a.ReaderController.slideIn(),b.removeClass("open")};return c.find(".show_view").on("click",function(a){var b=$(this).data("view");e(b),a.preventDefault()}),{show:g,hide:h,getActivePanel:f,changePanelTo:e}},EPUBJS.reader.TocController=function(a){var b=this.book,c=$("#tocView"),d=document.createDocumentFragment(),e=!1,f=function(a,b){var c=document.createElement("ul");return b||(b=1),a.forEach(function(a){var d=document.createElement("li"),e=document.createElement("a");toggle=document.createElement("a");var g;d.id="toc-"+a.id,d.classList.add("list_item"),e.textContent=a.label,e.href=a.href,e.classList.add("toc_link"),d.appendChild(e),a.subitems.length>0&&(b++,g=f(a.subitems,b),toggle.classList.add("toc_toggle"),d.insertBefore(toggle,e),d.appendChild(g)),c.appendChild(d)}),c},g=function(){c.show()},h=function(){c.hide()},i=function(a){{var b=a.id,d=c.find("#toc-"+b),f=c.find(".currentChapter");c.find(".openChapter")}d.length&&(d!=f&&d.has(e).length>0&&f.removeClass("currentChapter"),d.addClass("currentChapter"),d.parents("li").addClass("openChapter"))};b.on("renderer:chapterDisplayed",i);var j=f(a);return d.appendChild(j),c.append(d),c.find(".toc_link").on("click",function(a){var d=this.getAttribute("href");a.preventDefault(),b.goto(d),c.find(".currentChapter").addClass("openChapter").removeClass("currentChapter"),$(this).parent("li").addClass("currentChapter")}),c.find(".toc_toggle").on("click",function(a){var b=$(this).parent("li"),c=b.hasClass("openChapter");a.preventDefault(),c?b.removeClass("openChapter"):b.addClass("openChapter")}),{show:g,hide:h}}; \ No newline at end of file +EPUBJS.reader={},EPUBJS.reader.plugins={},function(a,b){var c=(a.ePubReader,a.ePubReader=function(a,b){return new EPUBJS.Reader(a,b)});"function"==typeof define&&define.amd?define(function(){return Reader}):"undefined"!=typeof module&&module.exports&&(module.exports=c)}(window,jQuery),EPUBJS.Reader=function(a,b){var c,d,e,f=this,g=$("#viewer"),h=window.location.search;this.settings=EPUBJS.core.defaults(b||{},{bookPath:a,restore:!1,reload:!1,bookmarks:void 0,annotations:void 0,contained:void 0,bookKey:void 0,styles:void 0,sidebarReflow:!1,generatePagination:!1,history:!0}),h&&(e=h.slice(1).split("&"),e.forEach(function(a){var b=a.split("="),c=b[0],d=b[1]||"";f.settings[c]=decodeURIComponent(d)})),this.setBookKey(this.settings.bookPath),this.settings.restore&&this.isSaved()&&this.applySavedSettings(),this.settings.styles=this.settings.styles||{fontSize:"100%"},this.book=c=new EPUBJS.Book(this.settings),this.settings.previousLocationCfi&&c.gotoCfi(this.settings.previousLocationCfi),this.offline=!1,this.sidebarOpen=!1,this.settings.bookmarks||(this.settings.bookmarks=[]),this.settings.annotations||(this.settings.annotations=[]),this.settings.generatePagination&&c.generatePagination(g.width(),g.height()),c.renderTo("viewer"),f.ReaderController=EPUBJS.reader.ReaderController.call(f,c),f.SettingsController=EPUBJS.reader.SettingsController.call(f,c),f.ControlsController=EPUBJS.reader.ControlsController.call(f,c),f.SidebarController=EPUBJS.reader.SidebarController.call(f,c),f.BookmarksController=EPUBJS.reader.BookmarksController.call(f,c),f.NotesController=EPUBJS.reader.NotesController.call(f,c);for(d in EPUBJS.reader.plugins)EPUBJS.reader.plugins.hasOwnProperty(d)&&(f[d]=EPUBJS.reader.plugins[d].call(f,c));return c.ready.all.then(function(){f.ReaderController.hideLoader()}),c.getMetadata().then(function(a){f.MetaController=EPUBJS.reader.MetaController.call(f,a)}),c.getToc().then(function(a){f.TocController=EPUBJS.reader.TocController.call(f,a)}),window.addEventListener("beforeunload",this.unload.bind(this),!1),window.addEventListener("hashchange",this.hashChanged.bind(this),!1),document.addEventListener("keydown",this.adjustFontSize.bind(this),!1),c.on("renderer:keydown",this.adjustFontSize.bind(this)),c.on("renderer:keydown",f.ReaderController.arrowKeys.bind(this)),c.on("renderer:selected",this.selectedRange.bind(this)),this},EPUBJS.Reader.prototype.adjustFontSize=function(a){var b,c=2,d=a.ctrlKey||a.metaKey;this.settings.styles&&(this.settings.styles.fontSize||(this.settings.styles.fontSize="100%"),b=parseInt(this.settings.styles.fontSize.slice(0,-1)),d&&187==a.keyCode&&(a.preventDefault(),this.book.setStyle("fontSize",b+c+"%")),d&&189==a.keyCode&&(a.preventDefault(),this.book.setStyle("fontSize",b-c+"%")),d&&48==a.keyCode&&(a.preventDefault(),this.book.setStyle("fontSize","100%")))},EPUBJS.Reader.prototype.addBookmark=function(a){this.isBookmarked(a)>-1||(this.settings.bookmarks.push(a),this.trigger("reader:bookmarked",a))},EPUBJS.Reader.prototype.removeBookmark=function(a){var b=this.isBookmarked(a);b!==-1&&(this.settings.bookmarks.splice(b,1),this.trigger("reader:unbookmarked",b))},EPUBJS.Reader.prototype.isBookmarked=function(a){return this.settings.bookmarks.indexOf(a)},EPUBJS.Reader.prototype.clearBookmarks=function(){this.settings.bookmarks=[]},EPUBJS.Reader.prototype.addNote=function(a){this.settings.annotations.push(a)},EPUBJS.Reader.prototype.removeNote=function(a){var b=this.settings.annotations.indexOf(a);b!==-1&&delete this.settings.annotations[b]},EPUBJS.Reader.prototype.clearNotes=function(){this.settings.annotations=[]},EPUBJS.Reader.prototype.setBookKey=function(a){return this.settings.bookKey||(this.settings.bookKey="epubjsreader:"+EPUBJS.VERSION+":"+window.location.host+":"+a),this.settings.bookKey},EPUBJS.Reader.prototype.isSaved=function(a){return!!localStorage&&null!==localStorage.getItem(this.settings.bookKey)},EPUBJS.Reader.prototype.removeSavedSettings=function(){if(!localStorage)return!1;localStorage.removeItem(this.settings.bookKey)},EPUBJS.Reader.prototype.applySavedSettings=function(){var a;if(!localStorage)return!1;try{a=JSON.parse(localStorage.getItem(this.settings.bookKey))}catch(a){return!1}return!!a&&(a.styles&&(this.settings.styles=EPUBJS.core.defaults(this.settings.styles||{},a.styles)),this.settings=EPUBJS.core.defaults(this.settings,a),!0)},EPUBJS.Reader.prototype.saveSettings=function(){if(this.book&&(this.settings.previousLocationCfi=this.book.getCurrentLocationCfi()),!localStorage)return!1;localStorage.setItem(this.settings.bookKey,JSON.stringify(this.settings))},EPUBJS.Reader.prototype.unload=function(){this.settings.restore&&localStorage&&this.saveSettings()},EPUBJS.Reader.prototype.hashChanged=function(){var a=window.location.hash.slice(1);this.book.goto(a)},EPUBJS.Reader.prototype.selectedRange=function(a){var b=new EPUBJS.EpubCFI,c=b.generateCfiFromRangeAnchor(a,this.book.renderer.currentChapter.cfiBase),d="#"+c;this.settings.history&&window.location.hash!=d&&(history.pushState({},"",d),this.currentLocationCfi=c)},RSVP.EventTarget.mixin(EPUBJS.Reader.prototype),EPUBJS.reader.BookmarksController=function(){var a=this.book,b=$("#bookmarksView"),c=b.find("#bookmarks"),d=document.createDocumentFragment(),e=function(){b.show()},f=function(){b.hide()},g=0,h=function(b){var c=document.createElement("li"),d=document.createElement("a");return c.id="bookmark-"+g,c.classList.add("list_item"),d.textContent=b,d.href=b,d.classList.add("bookmark_link"),d.addEventListener("click",function(b){var c=this.getAttribute("href");a.gotoCfi(c),b.preventDefault()},!1),c.appendChild(d),g++,c};return this.settings.bookmarks.forEach(function(a){var b=h(a);d.appendChild(b)}),c.append(d),this.on("reader:bookmarked",function(a){var b=h(a);c.append(b)}),this.on("reader:unbookmarked",function(a){$("#bookmark-"+a).remove()}),{show:e,hide:f}},EPUBJS.reader.ControlsController=function(a){var b=this,c=($("#store"),$("#fullscreen")),d=($("#fullscreenicon"),$("#cancelfullscreenicon"),$("#slider")),e=($("#main"),$("#sidebar"),$("#setting")),f=$("#bookmark"),g=function(){b.offline=!1},h=function(){b.offline=!0},i=!1;return a.on("book:online",g),a.on("book:offline",h),d.on("click",function(){b.sidebarOpen?(b.SidebarController.hide(),d.addClass("icon-menu"),d.removeClass("icon-right")):(b.SidebarController.show(),d.addClass("icon-right"),d.removeClass("icon-menu"))}),"undefined"!=typeof screenfull&&(c.on("click",function(){screenfull.toggle($("#container")[0])}),screenfull.raw&&document.addEventListener(screenfull.raw.fullscreenchange,function(){i=screenfull.isFullscreen,i?c.addClass("icon-resize-small").removeClass("icon-resize-full"):c.addClass("icon-resize-full").removeClass("icon-resize-small")})),e.on("click",function(){b.SettingsController.show()}),f.on("click",function(){var a=b.book.getCurrentLocationCfi();b.isBookmarked(a)===-1?(b.addBookmark(a),f.addClass("icon-bookmark").removeClass("icon-bookmark-empty")):(b.removeBookmark(a),f.removeClass("icon-bookmark").addClass("icon-bookmark-empty"))}),a.on("renderer:locationChanged",function(a){var c="#"+a;b.isBookmarked(a)===-1?f.removeClass("icon-bookmark").addClass("icon-bookmark-empty"):f.addClass("icon-bookmark").removeClass("icon-bookmark-empty"),b.currentLocationCfi=a,b.settings.history&&window.location.hash!=c&&history.pushState({},"",c)}),a.on("book:pageChanged",function(a){}),{}},EPUBJS.reader.MetaController=function(a){var b=a.bookTitle,c=a.creator,d=$("#book-title"),e=$("#chapter-title"),f=$("#title-seperator");document.title=b+" – "+c,d.html(b),e.html(c),f.show()},EPUBJS.reader.NotesController=function(){var a=this.book,b=this,c=$("#notesView"),d=$("#notes"),e=$("#note-text"),f=$("#note-anchor"),g=b.settings.annotations,h=a.renderer,i=[],j=new EPUBJS.EpubCFI,k=function(){c.show()},l=function(){c.hide()},m=function(c){var d,g,h,i,k,l=a.renderer.doc;if(l.caretPositionFromPoint?(d=l.caretPositionFromPoint(c.clientX,c.clientY),g=d.offsetNode,h=d.offset):l.caretRangeFromPoint&&(d=l.caretRangeFromPoint(c.clientX,c.clientY),g=d.startContainer,h=d.startOffset),3!==g.nodeType)for(var p=0;pm/2.5&&(o=m/2.5,pop_content.style.maxHeight=o+"px"),popRect.height+l>=m-25?(b.style.top=l-popRect.height+"px",b.classList.add("above")):b.classList.remove("above"),k-popRect.width<=0?(b.style.left=k+"px",b.classList.add("left")):b.classList.remove("left"),k+popRect.width/2>=n?(b.style.left=k-300+"px",popRect=b.getBoundingClientRect(),b.style.left=k-popRect.width+"px",popRect.height+l>=m-25?(b.style.top=l-popRect.height+"px",b.classList.add("above")):b.classList.remove("above"),b.classList.add("right")):b.classList.remove("right")},f=function(){i[d].classList.add("on")},g=function(){i[d].classList.remove("on")},j=function(){setTimeout(function(){i[d].classList.remove("show")},100)},l=function(){b.ReaderController.slideOut(),k()};a.addEventListener("mouseover",e,!1),a.addEventListener("mouseout",j,!1),a.addEventListener("click",l,!1)};return f.on("click",function(b){f.text("Cancel"),e.prop("disabled","true"),a.on("renderer:click",m)}),g.forEach(function(a){n(a)}),h.registerHook("beforeChapterDisplay",function(a,b){var c=b.currentChapter;g.forEach(function(a){if(j.parse(a.anchor).spinePos===c.spinePos)try{o(a)}catch(b){console.log("anchoring failed",a.anchor)}}),a()},!0),{show:k,hide:l}},EPUBJS.reader.ReaderController=function(a){var b=$("#main"),c=$("#divider"),d=$("#loader"),e=$("#next"),f=$("#prev"),g=this,a=this.book,h=function(){var c=a.getCurrentLocationCfi();g.settings.sidebarReflow?(b.removeClass("single"),b.one("transitionend",function(){a.gotoCfi(c)})):b.removeClass("closed")},i=function(){var c=a.getCurrentLocationCfi();g.settings.sidebarReflow?(b.addClass("single"),b.one("transitionend",function(){a.gotoCfi(c)})):b.addClass("closed")},j=function(){d.show(),m()},k=function(){d.hide()},l=function(){c.addClass("show")},m=function(){c.removeClass("show")},n=!1,o=function(b){37==b.keyCode&&("rtl"===a.metadata.direction?a.nextPage():a.prevPage(),f.addClass("active"),n=!0,setTimeout(function(){n=!1,f.removeClass("active")},100),b.preventDefault()),39==b.keyCode&&("rtl"===a.metadata.direction?a.prevPage():a.nextPage(),e.addClass("active"),n=!0,setTimeout(function(){n=!1,e.removeClass("active")},100),b.preventDefault())};return document.addEventListener("keydown",o,!1),e.on("click",function(b){"rtl"===a.metadata.direction?a.prevPage():a.nextPage(),b.preventDefault()}),f.on("click",function(b){"rtl"===a.metadata.direction?a.nextPage():a.prevPage(),b.preventDefault()}),a.on("renderer:spreads",function(a){a?l():m()}),{slideOut:i,slideIn:h,showLoader:j,hideLoader:k,showDivider:l,hideDivider:m,arrowKeys:o}},EPUBJS.reader.SettingsController=function(){var a=(this.book,this),b=$("#settings-modal"),c=$(".overlay"),d=function(){b.addClass("md-show")},e=function(){b.removeClass("md-show")};return $("#sidebarReflow").on("click",function(){a.settings.sidebarReflow=!a.settings.sidebarReflow}),b.find(".closer").on("click",function(){e()}),c.on("click",function(){e()}),{show:d,hide:e}},EPUBJS.reader.SidebarController=function(a){var b=this,c=$("#sidebar"),d=$("#panels"),e="Toc",f=function(a){var c=a+"Controller";e!=a&&void 0!==b[c]&&(b[e+"Controller"].hide(),b[c].show(),e=a,d.find(".active").removeClass("active"),d.find("#show-"+a).addClass("active"))},g=function(){return e},h=function(){b.sidebarOpen=!0,b.ReaderController.slideOut(),c.addClass("open")},i=function(){b.sidebarOpen=!1,b.ReaderController.slideIn(),c.removeClass("open")};return d.find(".show_view").on("click",function(a){f($(this).data("view")),a.preventDefault()}),{show:h,hide:i,getActivePanel:g,changePanelTo:f}},EPUBJS.reader.TocController=function(a){var b=this.book,c=$("#tocView"),d=document.createDocumentFragment(),e=!1,f=function(a,b){var c=document.createElement("ul");return b||(b=1),a.forEach(function(a){var d=document.createElement("li"),e=document.createElement("a");toggle=document.createElement("a");var g;d.id="toc-"+a.id,d.classList.add("list_item"),e.textContent=a.label,e.href=a.href,e.classList.add("toc_link"),d.appendChild(e),a.subitems.length>0&&(b++,g=f(a.subitems,b),toggle.classList.add("toc_toggle"),d.insertBefore(toggle,e),d.appendChild(g)),c.appendChild(d)}),c},g=function(){c.show()},h=function(){c.hide()},i=function(a){var b=a.id,d=c.find("#toc-"+b),f=c.find(".currentChapter");c.find(".openChapter");d.length&&(d!=f&&d.has(e).length>0&&f.removeClass("currentChapter"),d.addClass("currentChapter"),d.parents("li").addClass("openChapter"))};b.on("renderer:chapterDisplayed",i);var j=f(a);return d.appendChild(j),c.append(d),c.find(".toc_link").on("click",function(a){var d=this.getAttribute("href");a.preventDefault(),b.goto(d),c.find(".currentChapter").addClass("openChapter").removeClass("currentChapter"),$(this).parent("li").addClass("currentChapter")}),c.find(".toc_toggle").on("click",function(a){var b=$(this).parent("li"),c=b.hasClass("openChapter");a.preventDefault(),c?b.removeClass("openChapter"):b.addClass("openChapter")}),{show:g,hide:h}}; \ No newline at end of file diff --git a/cps/static/js/libs/reader.min.map b/cps/static/js/libs/reader.min.map deleted file mode 100644 index 6a234461..00000000 --- a/cps/static/js/libs/reader.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"reader.min.js","sources":["../../reader_src/reader.js","../../reader_src/controllers/bookmarks_controller.js","../../reader_src/controllers/controls_controller.js","../../reader_src/controllers/meta_controller.js","../../reader_src/controllers/notes_controller.js","../../reader_src/controllers/reader_controller.js","../../reader_src/controllers/settings_controller.js","../../reader_src/controllers/sidebar_controller.js","../../reader_src/controllers/toc_controller.js"],"names":["EPUBJS","reader","plugins","root","ePubReader","path","options","Reader","define","amd","module","exports","window","jQuery","bookPath","_options","book","plugin","parameters","this","$viewer","$","search","location","settings","core","defaults","restore","reload","bookmarks","undefined","annotations","contained","bookKey","styles","sidebarReflow","generatePagination","history","slice","split","forEach","p","name","value","decodeURIComponent","setBookKey","isSaved","applySavedSettings","fontSize","Book","previousLocationCfi","gotoCfi","offline","sidebarOpen","width","height","renderTo","ReaderController","call","SettingsController","ControlsController","SidebarController","BookmarksController","NotesController","hasOwnProperty","ready","all","then","hideLoader","getMetadata","meta","MetaController","getToc","toc","TocController","addEventListener","unload","bind","hashChanged","document","adjustFontSize","on","arrowKeys","selectedRange","prototype","e","interval","PLUS","MINUS","ZERO","MOD","ctrlKey","metaKey","parseInt","keyCode","preventDefault","setStyle","addBookmark","cfi","present","isBookmarked","push","trigger","removeBookmark","bookmark","splice","indexOf","clearBookmarks","addNote","note","removeNote","index","clearNotes","identifier","VERSION","host","storedSettings","localStorage","getItem","removeSavedSettings","removeItem","stored","JSON","parse","saveSettings","getCurrentLocationCfi","setItem","stringify","hash","goto","range","epubcfi","EpubCFI","generateCfiFromRangeAnchor","renderer","currentChapter","cfiBase","cfiFragment","pushState","currentLocationCfi","RSVP","EventTarget","mixin","$bookmarks","$list","find","docfrag","createDocumentFragment","show","hide","counter","createBookmarkItem","listitem","createElement","link","id","classList","add","textContent","href","event","getAttribute","appendChild","append","item","$item","remove","$fullscreen","$slider","$settings","$bookmark","goOnline","goOffline","fullscreen","addClass","removeClass","screenfull","toggle","raw","fullscreenchange","isFullscreen","bookmarked","title","bookTitle","author","creator","$title","$author","$dash","html","$notesView","$notes","$text","$anchor","popups","insertAtPoint","textNode","offset","annotation","doc","caretPositionFromPoint","clientX","clientY","offsetNode","caretRangeFromPoint","startContainer","startOffset","nodeType","i","childNodes","length","generateCfiFromTextNode","annotatedAt","Date","anchor","body","val","addAnnotation","placeMarker","text","prop","off","innerHTML","onclick","marker","mark","style","verticalAlign","lineHeight","padding","backgroundColor","borderRadius","cursor","uuid","addMarker","markerEvents","txt","showPop","pop","itemRect","left","top","iheight","iwidth","maxHeight","setAttribute","pop_content","render","onPop","offPop","hidePop","getBoundingClientRect","popRect","setTimeout","openSidebar","slideOut","registerHook","callback","chapter","spinePos","console","log","$main","$divider","$loader","$next","$prev","slideIn","currentPosition","one","showLoader","hideDivider","showDivider","keylock","metadata","direction","nextPage","prevPage","bool","$overlay","$sidebarReflowSetting","$sidebar","$panels","activePanel","changePanelTo","viewName","controllerName","getActivePanel","view","data","generateTocItems","level","container","subitems","label","insertBefore","onShow","onHide","chapterChange","$current","has","parents","tocitems","url","parent","$el","open","hasClass"],"mappings":"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"} \ No newline at end of file diff --git a/cps/templates/read.html b/cps/templates/read.html index f35b0e91..d02f76d1 100644 --- a/cps/templates/read.html +++ b/cps/templates/read.html @@ -14,9 +14,20 @@ + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - -
    - +
    {% if not origin %} From 66231c87378ecc0057c7ea0ef0d1a8c042b006af Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Mon, 10 Jul 2017 10:26:57 -0700 Subject: [PATCH 29/47] Associate label with correct input (#228) --- cps/templates/user_edit.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/templates/user_edit.html b/cps/templates/user_edit.html index 04eb4716..6e8730a8 100644 --- a/cps/templates/user_edit.html +++ b/cps/templates/user_edit.html @@ -110,7 +110,7 @@
    - +
    {% endif %} {% endif %} From 802eb628c81ef9a5fa7af6523bb0c053fbffda24 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Mon, 10 Jul 2017 13:03:58 -0700 Subject: [PATCH 30/47] Split event listener and selector string Event and selectors appear to have been accidentally combined. The result is that typing in any input triggers a call to the `/get_matching_tags` route. We can probably limit the selector farther to only fire when `#tags` is typed into. --- cps/static/js/edit_books.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/static/js/edit_books.js b/cps/static/js/edit_books.js index 8a1a36d1..f8d61e4e 100644 --- a/cps/static/js/edit_books.js +++ b/cps/static/js/edit_books.js @@ -162,7 +162,7 @@ var promiseLanguages = languages.initialize(); }); }); -$("form").on("change input typeahead:selected", function(data){ +$("form").on("change", "input.typeahead:selected", function(){ var form = $("form").serialize(); $.getJSON( getPath()+"/get_matching_tags", form, function( data ) { $(".tags_click").each(function() { From f79fb420ba8227b59cfb98e95085f85f549c855f Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Tue, 11 Jul 2017 16:13:33 +0200 Subject: [PATCH 31/47] Removed whitespaces --- cps/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/helper.py b/cps/helper.py index 765448bf..d2b0c954 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -342,7 +342,7 @@ def update_dir_structure_gdrive(book_id): gFile['title']= new_titledir gFile.Upload() book.path = book.path.split('/')[0] + '/' + new_titledir - + if authordir != new_authordir: gFile=gd.getFileFromEbooksFolder(web.Gdrive.Instance().drive,None,authordir) gFile['title'] = new_authordir From 9683d50f36faf34e5f829e19424ec5c56cfa1118 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Tue, 11 Jul 2017 07:16:19 -0700 Subject: [PATCH 32/47] Send mail from the FROM address instead of the login MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When SMTP is configured to use a service that doesn't use an email address to log in – e.g. AWS SES or Postmark – the sendmail request fails saying the FROM address is invalid. --- cps/helper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/helper.py b/cps/helper.py index 765448bf..c50279ef 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -176,7 +176,7 @@ def send_raw_email(kindle_mail, msg): if settings["mail_password"]: mailserver.login(settings["mail_login"], settings["mail_password"]) - mailserver.sendmail(settings["mail_login"], kindle_mail, msg) + mailserver.sendmail(settings["mail_from"], kindle_mail, msg) mailserver.quit() smtplib.stderr = org_stderr From 5985342b79e4af1c509db9a9cb7a7ab6a7d1fa27 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Tue, 11 Jul 2017 18:08:12 +0200 Subject: [PATCH 33/47] Bugfix for typeahead in search function and on edit books page --- cps/static/js/edit_books.js | 2 +- cps/templates/search_form.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cps/static/js/edit_books.js b/cps/static/js/edit_books.js index f8d61e4e..14f38f63 100644 --- a/cps/static/js/edit_books.js +++ b/cps/static/js/edit_books.js @@ -162,7 +162,7 @@ var promiseLanguages = languages.initialize(); }); }); -$("form").on("change", "input.typeahead:selected", function(){ +$("#search").on("change input.typeahead:selected", function(){ var form = $("form").serialize(); $.getJSON( getPath()+"/get_matching_tags", form, function( data ) { $(".tags_click").each(function() { diff --git a/cps/templates/search_form.html b/cps/templates/search_form.html index e61195ec..6dbd17a8 100644 --- a/cps/templates/search_form.html +++ b/cps/templates/search_form.html @@ -1,7 +1,7 @@ {% extends "layout.html" %} {% block body %}
    -
    +
    From c9c65295675efa75220be40b12c976ce53f5e938 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Tue, 11 Jul 2017 09:35:55 -0700 Subject: [PATCH 34/47] Use SECRET_KEY from environment variable (#232) --- cps/web.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/web.py b/cps/web.py index 237dc4ef..dbcaa5bd 100755 --- a/cps/web.py +++ b/cps/web.py @@ -218,7 +218,7 @@ lm = LoginManager(app) lm.init_app(app) lm.login_view = 'login' lm.anonymous_user = ub.Anonymous -app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT' +app.secret_key = os.getenv('SECRET_KEY', 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT') db.setup_db() if config.config_log_level == logging.DEBUG: From f8d0a7d35c152365cce49336c58dc9cd30f063fe Mon Sep 17 00:00:00 2001 From: janeczku Date: Thu, 13 Jul 2017 14:24:35 +0200 Subject: [PATCH 35/47] Add new Docker Hub image --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 668dcd4b..42ad54e9 100755 --- a/readme.md +++ b/readme.md @@ -104,7 +104,7 @@ If your calibre web is using https, it is possible to add a "watch" to the drive ## Docker image -Calibre Web can be run as Docker container. The latest image is available on [Docker Hub](https://registry.hub.docker.com/u/janeczku/calibre-web/). +Calibre Web can be run as Docker container. Pre-built Docker images based on Alpine Linux are available in this Docker Hub repository: [technosoft2000/calibre-web](https://hub.docker.com/r/technosoft2000/calibre-web/). ## Reverse Proxy From 51bd2f89df03b665d5962c6328be08bc3341785c Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 13 Jul 2017 18:09:33 -0700 Subject: [PATCH 36/47] Use dot notation --- cps/templates/author.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/templates/author.html b/cps/templates/author.html index 4d194f99..15dc3f1b 100644 --- a/cps/templates/author.html +++ b/cps/templates/author.html @@ -4,7 +4,7 @@ {% if author is not none %}
    - {%if author['image_url'] is not none %} + {%if author.image_url is not none %} {{author.name}} {% endif %} From 91ba0f03621aee4dadb47e7cb74425ceb04c8609 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 13 Jul 2017 21:22:34 -0700 Subject: [PATCH 37/47] Resolve issues with unicode characters in author's name I've been unable to reproduce the issue on macOS with Python 2.7/3.6 and Fedora with Python 2.7, but if it happens for others, then it's worth the change. --- cps/templates/author.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/templates/author.html b/cps/templates/author.html index 15dc3f1b..bf33c812 100644 --- a/cps/templates/author.html +++ b/cps/templates/author.html @@ -5,7 +5,7 @@ {% if author is not none %}
    {%if author.image_url is not none %} - {{author.name}} + {{author.name|safe}} {% endif %} {%if author.about is not none %} From 85ce06850cf8f7e6bdf6d392d775c0efbbb38835 Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Thu, 13 Jul 2017 21:28:00 -0700 Subject: [PATCH 38/47] Fix for Python 3 --- cps/redirect.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cps/redirect.py b/cps/redirect.py index fa3fa5c7..b521bc28 100644 --- a/cps/redirect.py +++ b/cps/redirect.py @@ -1,6 +1,9 @@ # http://flask.pocoo.org/snippets/62/ -from urlparse import urlparse, urljoin +try: + from urllib.parse import urlparse, urljoin +except ImportError: + from urlparse import urlparse, urljoin from flask import request, url_for, redirect From 6a9d8efc9309658880853320fe90745e7b655673 Mon Sep 17 00:00:00 2001 From: OzzieIsaacs Date: Sun, 16 Jul 2017 22:04:40 +0200 Subject: [PATCH 39/47] Fixes for #233 (detection of permission errors) --- cps/helper.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/cps/helper.py b/cps/helper.py index 6dab5710..d90e15dc 100755 --- a/cps/helper.py +++ b/cps/helper.py @@ -88,12 +88,11 @@ def make_mobi(book_id, calibrepath): if os.path.exists(file_path + u".epub"): try: p = subprocess.Popen((kindlegen + " \"" + file_path + u".epub\"").encode(sys.getfilesystemencoding()), - stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) except Exception: error_message = _(u"kindlegen failed, no excecution permissions") app.logger.error("make_mobi: " + error_message) return error_message, RET_FAIL - # Poll process for new output until finished while True: nextline = p.stdout.readline() @@ -122,11 +121,13 @@ def make_mobi(book_id, calibrepath): db.session.commit() return file_path + ".mobi", RET_SUCCESS else: - app.logger.error("make_mobi: kindlegen failed with error while converting book") - return None, RET_FAIL + app.logger.info("make_mobi: kindlegen failed with error while converting book") + if not error_message: + error_message='kindlegen failed, no excecution permissions' + return error_message, RET_FAIL else: - app.logger.error("make_mobi: epub not found: %s.epub" % file_path) - return None, RET_FAIL + error_message = "make_mobi: epub not found: %s.epub" % file_path + return error_message, RET_FAIL class StderrLogger(object): @@ -226,11 +227,10 @@ def send_mail(book_id, kindle_mail, calibrepath): msg.attach(get_attachment(formats['mobi'])) elif 'epub' in formats: data, resultCode = make_mobi(book.id, calibrepath) - app.logger.error = (data) if resultCode == RET_SUCCESS: msg.attach(get_attachment(data)) else: - + app.logger.error = (data) return data #_("Could not convert epub to mobi") elif 'pdf' in formats: msg.attach(get_attachment(formats['pdf'])) From 2e8a268dfabbb731e2ba0ae4bcb2937874f7f2b7 Mon Sep 17 00:00:00 2001 From: Ozzie Isaacs Date: Tue, 18 Jul 2017 20:39:35 +0200 Subject: [PATCH 40/47] Fix #241 No1 --- cps/static/js/shelforder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/static/js/shelforder.js b/cps/static/js/shelforder.js index 0bf693f0..5ae3acbf 100644 --- a/cps/static/js/shelforder.js +++ b/cps/static/js/shelforder.js @@ -11,7 +11,7 @@ function sendData(path){ var maxElements; var tmp=[]; - elements=sortable.utils.find(sortTrue,"div"); + elements=Sortable.utils.find(sortTrue,"div"); maxElements=elements.length; var form = document.createElement("form"); From 5c3a5b6c39f5bdd63a2baf35c78711d7445d512b Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Fri, 21 Jul 2017 20:42:01 -0700 Subject: [PATCH 41/47] Use ajax to add/remove books from shelves Gracefully fall back to standard requests if JavaScript is disabled --- cps/static/css/style.css | 5 ++ cps/static/js/details.js | 39 ++++++++++++++++ cps/templates/detail.html | 96 ++++++++++++++++++++++----------------- cps/templates/layout.html | 6 +-- cps/web.py | 63 +++++++++++++++++++------ 5 files changed, 151 insertions(+), 58 deletions(-) create mode 100644 cps/static/js/details.js diff --git a/cps/static/css/style.css b/cps/static/css/style.css index f0ea4cb1..7f053629 100644 --- a/cps/static/css/style.css +++ b/cps/static/css/style.css @@ -53,3 +53,8 @@ span.glyphicon.glyphicon-tags {padding-right: 5px;color: #999;vertical-align: te .spinner2 {margin:0 41%;} .block-label {display: block;} + +#remove-from-shelves .btn, +#shelf-action-errors { + margin-left: 5px; +} diff --git a/cps/static/js/details.js b/cps/static/js/details.js new file mode 100644 index 00000000..ba45da17 --- /dev/null +++ b/cps/static/js/details.js @@ -0,0 +1,39 @@ +$( document ).ready(function() { + $("#have_read_form").ajaxForm(); +}); + +$("#have_read_cb").on("change", function() { + $(this).closest("form").submit(); +}); + +$(document).on("click", "[data-shelf-action]", function (e) { + e.preventDefault(); + + $.get(this.href) + .done(() => { + const $this = $(this); + switch ($this.data("shelf-action")) { + case "add": + $("#remove-from-shelves").append(` ${this.textContent}`); + break; + case "remove": + $("#add-to-shelves").append(`
  • ${this.textContent}
  • `); + break; + } + this.parentNode.removeChild(this); + }) + .fail(xhr => { + const $msg = $("", { "class": "text-danger"}).text(xhr.responseText); + $("#shelf-action-status").html($msg); + + setTimeout(() => { + $msg.remove(); + }, 10000); + }); +}); \ No newline at end of file diff --git a/cps/templates/detail.html b/cps/templates/detail.html index 6d6ecdab..37cdd01f 100644 --- a/cps/templates/detail.html +++ b/cps/templates/detail.html @@ -185,41 +185,62 @@ {% if g.user.shelf.all() or g.public_shelfes %} {% endif %} @@ -233,19 +254,12 @@ {% endif %}
    -
    +
    {% endblock %} {% block js %} - + {% endblock %} diff --git a/cps/templates/layout.html b/cps/templates/layout.html index 1833df5c..0dd9583e 100644 --- a/cps/templates/layout.html +++ b/cps/templates/layout.html @@ -99,17 +99,17 @@
    {% for message in get_flashed_messages(with_categories=True) %} {%if message[0] == "error" %} -
    +
    {{ message[1] }}
    {%endif%} {%if message[0] == "info" %} -
    +
    {{ message[1] }}
    {%endif%} {%if message[0] == "success" %} -
    +
    {{ message[1] }}
    {%endif%} diff --git a/cps/web.py b/cps/web.py index dbcaa5bd..32a3d3e4 100755 --- a/cps/web.py +++ b/cps/web.py @@ -1949,45 +1949,80 @@ def send_to_kindle(book_id): @login_required def add_to_shelf(shelf_id, book_id): shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.id == shelf_id).first() + if shelf is None: + app.logger.info("Invalid shelf specified") + if not request.is_xhr: + return redirect(url_for('index')) + return "Invalid shelf specified", 400 + if not shelf.is_public and not shelf.user_id == int(current_user.id): app.logger.info("Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name) - return redirect(url_for('index')) - maxOrder = ub.session.query(func.max(ub.BookShelf.order)).filter(ub.BookShelf.shelf == shelf_id).first() + if not request.is_xhr: + return redirect(url_for('index')) + return "Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name, 403 + + if shelf.is_public and not current_user.role_edit_shelfs(): + app.logger.info("User is not allowed to edit public shelves") + if not request.is_xhr: + return redirect(url_for('index')) + return "User is not allowed to edit public shelves", 403 + book_in_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id, ub.BookShelf.book_id == book_id).first() if book_in_shelf: app.logger.info("Book is already part of the shelf: %s" % shelf.name) - return redirect(url_for('index')) + if not request.is_xhr: + return redirect(url_for('index')) + return "Book is already part of the shelf: %s" % shelf.name, 400 + + maxOrder = ub.session.query(func.max(ub.BookShelf.order)).filter(ub.BookShelf.shelf == shelf_id).first() if maxOrder[0] is None: maxOrder = 0 else: maxOrder = maxOrder[0] - if (shelf.is_public and current_user.role_edit_shelfs()) or not shelf.is_public: - ins = ub.BookShelf(shelf=shelf.id, book_id=book_id, order=maxOrder + 1) - ub.session.add(ins) - ub.session.commit() + + ins = ub.BookShelf(shelf=shelf.id, book_id=book_id, order=maxOrder + 1) + ub.session.add(ins) + ub.session.commit() + if not request.is_xhr: flash(_(u"Book has been added to shelf: %(sname)s", sname=shelf.name), category="success") return redirect(request.environ["HTTP_REFERER"]) - else: - app.logger.info("User is not allowed to edit public shelfs") - return redirect(url_for('index')) + return "", 204 @app.route("/shelf/remove//") @login_required def remove_from_shelf(shelf_id, book_id): shelf = ub.session.query(ub.Shelf).filter(ub.Shelf.id == shelf_id).first() + if shelf is None: + app.logger.info("Invalid shelf specified") + if not request.is_xhr: + return redirect(url_for('index')) + return "Invalid shelf specified", 400 + if not shelf.is_public and not shelf.user_id == int(current_user.id) \ or (shelf.is_public and current_user.role_edit_shelfs()): - app.logger.info("Sorry you are not allowed to remove a book from this shelf: %s" % shelf.name) - return redirect(url_for('index')) + if not request.is_xhr: + app.logger.info("Sorry you are not allowed to remove a book from this shelf: %s" % shelf.name) + return redirect(url_for('index')) + return "Sorry you are not allowed to add a book to the the shelf: %s" % shelf.name, 403 book_shelf = ub.session.query(ub.BookShelf).filter(ub.BookShelf.shelf == shelf_id, ub.BookShelf.book_id == book_id).first() + + if book_shelf is None: + app.logger.info("Book already removed from shelf") + if not request.is_xhr: + return redirect(url_for('index')) + return "Book already removed from shelf", 410 + ub.session.delete(book_shelf) ub.session.commit() - flash(_(u"Book has been removed from shelf: %(sname)s", sname=shelf.name), category="success") - return redirect(request.environ["HTTP_REFERER"]) + + if not request.is_xhr: + flash(_(u"Book has been removed from shelf: %(sname)s", sname=shelf.name), category="success") + return redirect(request.environ["HTTP_REFERER"]) + return "", 204 @app.route("/shelf/create", methods=["GET", "POST"]) From e1a88aa0abb4d0e039016dfb989d308ad6f6767e Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Sat, 22 Jul 2017 07:34:38 -0700 Subject: [PATCH 42/47] Make change requested by Codacy --- cps/static/js/details.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cps/static/js/details.js b/cps/static/js/details.js index ba45da17..c3aaf4e4 100644 --- a/cps/static/js/details.js +++ b/cps/static/js/details.js @@ -28,7 +28,7 @@ $(document).on("click", "[data-shelf-action]", function (e) { } this.parentNode.removeChild(this); }) - .fail(xhr => { + .fail((xhr) => { const $msg = $("", { "class": "text-danger"}).text(xhr.responseText); $("#shelf-action-status").html($msg); From d85e0b96dca88a770e5e0082249cdcd2a2b7828a Mon Sep 17 00:00:00 2001 From: Jonathan Rehm Date: Sat, 22 Jul 2017 11:11:14 -0700 Subject: [PATCH 43/47] Prevent jQuery from cache busting static assets If the HTML that's returned from the `$.get` request contains a `