diff options
Diffstat (limited to 'admin/themes/default')
69 files changed, 3554 insertions, 1138 deletions
diff --git a/admin/themes/default/fix-ie7.css b/admin/themes/default/fix-ie7.css index a9e5a21a2..d61e0294a 100644 --- a/admin/themes/default/fix-ie7.css +++ b/admin/themes/default/fix-ie7.css @@ -5,4 +5,7 @@ UL.thumbnails li.rank-of-image { text-align:left; +} +.groups li { + display: inline; }
\ No newline at end of file diff --git a/admin/themes/default/fontello/LICENSE.txt b/admin/themes/default/fontello/LICENSE.txt new file mode 100644 index 000000000..8d0e89fff --- /dev/null +++ b/admin/themes/default/fontello/LICENSE.txt @@ -0,0 +1,66 @@ +Font license info + + +## Fontelico + + Copyright (C) 2012 by Fontello project + + Author: Crowdsourced, for Fontello project + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://fontello.com + + +## Elusive + + Copyright (C) 2013 by Aristeides Stathopoulos + + Author: Aristeides Stathopoulos + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://aristeides.com/ + + +## Font Awesome + + Copyright (C) 2012 by Dave Gandy + + Author: Dave Gandy + License: SIL () + Homepage: http://fortawesome.github.com/Font-Awesome/ + + +## Entypo + + Copyright (C) 2012 by Daniel Bruce + + Author: Daniel Bruce + License: CC BY-SA (http://creativecommons.org/licenses/by-sa/2.0/) + Homepage: http://www.entypo.com + + +## Typicons + + (c) Stephen Hutchings 2012 + + Author: Stephen Hutchings + License: CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/) + Homepage: http://typicons.com/ + + +## Iconic + + Copyright (C) 2012 by P.J. Onori + + Author: P.J. Onori + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://somerandomdude.com/work/iconic/ + + +## MFG Labs + + Copyright (C) 2012 by Daniel Bruce + + Author: MFG Labs + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://www.mfglabs.com/ + + diff --git a/admin/themes/default/fontello/README.txt b/admin/themes/default/fontello/README.txt new file mode 100644 index 000000000..43e23f283 --- /dev/null +++ b/admin/themes/default/fontello/README.txt @@ -0,0 +1,75 @@ +This webfont is generated by http://fontello.com open source project. + + +================================================================================ +Please, note, that you should obey original font licences, used to make this +webfont pack. Details available in LICENSE.txt file. + +- Usually, it's enough to publish content of LICENSE.txt file somewhere on your + site in "About" section. + +- If your project is open-source, usually, it will be ok to make LICENSE.txt + file publically available in your repository. + +- Fonts, used in Fontello, don't require to make clickable links on your site. + But any kind of additional authors crediting is welcome. +================================================================================ + + +Comments on archive content +--------------------------- + +- /font/* - fonts in different formats + +- /css/* - different kinds of css, for all situations. Should be ok with + twitter bootstrap. Also, you can skip <i> style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back to fontello anytime, + to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, <your_font_name>.css - is usually enougth, in contains @font-face + and character codes definition + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit of css generation. That can be very + convenient for automated assets build systems. When you need to update font - + no needs to manually edit files, just override old version with archive + content. See fontello source codes for example. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with <IE9, when + string is too long. + +- animate.css - use it to get ideas about spinner rotation animation. + + +Attention for server setup +-------------------------- + +You MUST setup server to reply with proper `mime-types` for font files. In other +case, some browsers will fail to show fonts. + +Usually, `apache` already has necessary settings, but `nginx` and other +webservers should be tuned. Here is list of mime types for our file extentions: + +- `application/vnd.ms-fontobject` - eot +- `application/x-font-woff` - woff +- `application/x-font-ttf` - ttf +- `image/svg+xml` - svg diff --git a/admin/themes/default/fontello/config.json b/admin/themes/default/fontello/config.json new file mode 100644 index 000000000..1387aa0d6 --- /dev/null +++ b/admin/themes/default/fontello/config.json @@ -0,0 +1,364 @@ +{ + "name": "", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "9bc2902722abb366a213a052ade360bc", + "css": "spin6", + "code": 59421, + "src": "fontelico" + }, + { + "uid": "bf882b30900da12fca090d9796bc3030", + "css": "mail", + "code": 9993, + "src": "fontawesome" + }, + { + "uid": "ccc2329632396dc096bb638d4b46fb98", + "css": "mail-alt", + "code": 61664, + "src": "fontawesome" + }, + { + "uid": "474656633f79ea2f1dad59ff63f6bf07", + "css": "star", + "code": 9733, + "src": "fontawesome" + }, + { + "uid": "d17030afaecc1e1c22349b99f3c4992a", + "css": "star-empty", + "code": 9734, + "src": "fontawesome" + }, + { + "uid": "8b80d36d4ef43889db10bc1f0dc9a862", + "css": "user", + "code": 128100, + "src": "fontawesome" + }, + { + "uid": "381da2c2f7fd51f8de877c044d7f439d", + "css": "picture", + "code": 127748, + "src": "fontawesome" + }, + { + "uid": "0f4cae16f34ae243a6144c18a003f2d8", + "css": "cancel-circled", + "code": 59425, + "src": "fontawesome" + }, + { + "uid": "4ba33d2607902cf690dd45df09774cb0", + "css": "plus-circled", + "code": 10133, + "src": "fontawesome" + }, + { + "uid": "0ddd3e8201ccc7d41f7b7c9d27eca6c1", + "css": "link", + "code": 128279, + "src": "fontawesome" + }, + { + "uid": "c1f1975c885aa9f3dad7810c53b82074", + "css": "lock", + "code": 128274, + "src": "fontawesome" + }, + { + "uid": "c5fd349cbd3d23e4ade333789c29c729", + "css": "eye", + "code": 59146, + "src": "fontawesome" + }, + { + "uid": "a3f89e106175a5c5c4e9738870b12e55", + "css": "tags", + "code": 59149, + "src": "fontawesome" + }, + { + "uid": "7034e4d22866af82bef811f52fb1ba46", + "css": "code", + "code": 59402, + "src": "fontawesome" + }, + { + "uid": "d35a1d35efeb784d1dc9ac18b9b6c2b6", + "css": "pencil", + "code": 9998, + "src": "fontawesome" + }, + { + "uid": "dcedf50ab1ede3283d7a6c70e2fe32f3", + "css": "chat", + "code": 59168, + "src": "fontawesome" + }, + { + "uid": "f48ae54adfb27d8ada53d0fd9e34ee10", + "css": "trash", + "code": 59177, + "src": "fontawesome" + }, + { + "uid": "c95735c17a10af81448c7fed98a04546", + "css": "folder-open", + "code": 59398, + "src": "fontawesome" + }, + { + "uid": "559647a6f430b3aeadbecd67194451dd", + "css": "menu", + "code": 59401, + "src": "fontawesome" + }, + { + "uid": "e99461abfef3923546da8d745372c995", + "css": "cog", + "code": 9881, + "src": "fontawesome" + }, + { + "uid": "98687378abd1faf8f6af97c254eb6cd6", + "css": "cog-alt", + "code": 9967, + "src": "fontawesome" + }, + { + "uid": "5bb103cd29de77e0e06a52638527b575", + "css": "wrench", + "code": 128295, + "src": "fontawesome" + }, + { + "uid": "9affc98d652b86628d650ee58dbf0357", + "css": "basket", + "code": 59197, + "src": "fontawesome" + }, + { + "uid": "0d20938846444af8deb1920dc85a29fb", + "css": "logout", + "code": 59419, + "src": "fontawesome" + }, + { + "uid": "598a5f2bcf3521d1615de8e1881ccd17", + "css": "clock", + "code": 128340, + "src": "fontawesome" + }, + { + "uid": "98d9c83c1ee7c2c25af784b518c522c5", + "css": "block", + "code": 128683, + "src": "fontawesome" + }, + { + "uid": "6605ee6441bf499ffa3c63d3c7409471", + "css": "move", + "code": 59410, + "src": "fontawesome" + }, + { + "uid": "bc71f4c6e53394d5ba46b063040014f1", + "css": "cw", + "code": 59404, + "src": "fontawesome" + }, + { + "uid": "a73c5deb486c8d66249811642e5d719a", + "css": "arrows-cw", + "code": 59396, + "src": "fontawesome" + }, + { + "uid": "37c5ab63f10d7ad0b84d0978dcd0c7a8", + "css": "shuffle", + "code": 128256, + "src": "fontawesome" + }, + { + "uid": "6020aff067fc3c119cdd75daa5249220", + "css": "exchange", + "code": 59397, + "src": "fontawesome" + }, + { + "uid": "d407a4707f719b042ed2ad28d2619d7e", + "css": "signal", + "code": 59393, + "src": "fontawesome" + }, + { + "uid": "09bdae120f85e79f2db16145a9e1f6d8", + "css": "crop", + "code": 61733, + "src": "fontawesome" + }, + { + "uid": "dd6c6b221a1088ff8a9b9cd32d0b3dd5", + "css": "check", + "code": 59423, + "src": "fontawesome" + }, + { + "uid": "4b900d04e8ab8c82f080c1cfbac5772c", + "css": "check-empty", + "code": 59424, + "src": "fontawesome" + }, + { + "uid": "9396b2d8849e0213a0f11c5fd7fcc522", + "css": "tasks", + "code": 61614, + "src": "fontawesome" + }, + { + "uid": "4109c474ff99cad28fd5a2c38af2ec6f", + "css": "filter", + "code": 61616, + "src": "fontawesome" + }, + { + "uid": "6fe95ffc3c807e62647d4f814a96e0d7", + "css": "sitemap", + "code": 61672, + "src": "fontawesome" + }, + { + "uid": "7222571caa5c15f83dcfd447c58d68d9", + "css": "search", + "code": 59409, + "src": "entypo" + }, + { + "uid": "6274e0601f2feef7eced89146e708de0", + "css": "user-add", + "code": 59403, + "src": "entypo" + }, + { + "uid": "de9a631a7d18106aea1c89ba51b1990a", + "css": "help-circled", + "code": 59418, + "src": "entypo" + }, + { + "uid": "7e4164950ffa4990961958b2d6318658", + "css": "info-circled-1", + "code": 59415, + "src": "entypo" + }, + { + "uid": "513ac180ff85bd275f2b736720cbbf5e", + "css": "home", + "code": 59406, + "src": "entypo" + }, + { + "uid": "1d2a6c3d9236b88b0f185c7c4530fa52", + "css": "flag", + "code": 59420, + "src": "entypo" + }, + { + "uid": "44199a54057e6e264fde61a49b034171", + "css": "upload", + "code": 59411, + "src": "entypo" + }, + { + "uid": "5d595124cecf472869d1cdc020da0ccc", + "css": "upload-cloud", + "code": 59412, + "src": "entypo" + }, + { + "uid": "6a7b9d4863bb7e6c79e9457a72d689b6", + "css": "tools", + "code": 59395, + "src": "entypo" + }, + { + "uid": "7f6916533c0842b6cec699fd773693d3", + "css": "hourglass", + "code": 59422, + "src": "entypo" + }, + { + "uid": "414fe97e4af5215a06d29be0f2cecdf5", + "css": "network", + "code": 59414, + "src": "entypo" + }, + { + "uid": "39c4d0e225a1263a398a47523cb5b9bd", + "css": "brush", + "code": 59399, + "src": "entypo" + }, + { + "uid": "ddecf5ad7935e3fb1b70dac6ed00d06a", + "css": "language", + "code": 59392, + "src": "entypo" + }, + { + "uid": "8beac4a5fd5bed9f82ca7a96cc8ba218", + "css": "key", + "code": 59413, + "src": "entypo" + }, + { + "uid": "4bcb3aaa98736be3027bef7c76c55021", + "css": "flow-branch", + "code": 59400, + "src": "entypo" + }, + { + "uid": "xoidjr6q3rzi7tpw6hci1k6srz15g11l", + "css": "puzzle", + "code": 59318, + "src": "typicons" + }, + { + "uid": "937f4db8b6ff3348a1d9fcd5e12fd2fe", + "css": "mail-1", + "code": 59408, + "src": "iconic" + }, + { + "uid": "e3699d145bd628d2a35d4a508b616f0c", + "css": "equalizer", + "code": 59407, + "src": "iconic" + }, + { + "uid": "05ef9b5e8742971aa85b23cfcbe71594", + "css": "users", + "code": 59394, + "src": "mfglabs" + }, + { + "uid": "e36d581e4f2844db345bddc205d15dda", + "css": "group", + "code": 59405, + "src": "elusive" + }, + { + "uid": "10fdd98fb50c590b805a3ad6ff9c55f5", + "css": "asl", + "code": 57517, + "src": "elusive" + } + ] +}
\ No newline at end of file diff --git a/admin/themes/default/fontello/css/animation.css b/admin/themes/default/fontello/css/animation.css new file mode 100644 index 000000000..ac5a9562f --- /dev/null +++ b/admin/themes/default/fontello/css/animation.css @@ -0,0 +1,85 @@ +/* + Animation example, for spinners +*/ +.animate-spin { + -moz-animation: spin 2s infinite linear; + -o-animation: spin 2s infinite linear; + -webkit-animation: spin 2s infinite linear; + animation: spin 2s infinite linear; + display: inline-block; +} +@-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-o-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-ms-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -o-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(359deg); + -o-transform: rotate(359deg); + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} diff --git a/admin/themes/default/fontello/css/fontello-codes.css b/admin/themes/default/fontello/css/fontello-codes.css new file mode 100644 index 000000000..25bfdd80e --- /dev/null +++ b/admin/themes/default/fontello/css/fontello-codes.css @@ -0,0 +1,62 @@ +@charset "UTF-8"; + + +.icon-spin6:before { content: '\e81d'; } /* '' */ +.icon-asl:before { content: '\e0ad'; } /* '' */ +.icon-mail-alt:before { content: '\f0e0'; } /* '' */ +.icon-star:before { content: '\2605'; } /* '★' */ +.icon-star-empty:before { content: '\2606'; } /* '☆' */ +.icon-user:before { content: '👤'; } /* '\1f464' */ +.icon-picture:before { content: '🌄'; } /* '\1f304' */ +.icon-cancel-circled:before { content: '\e821'; } /* '' */ +.icon-plus-circled:before { content: '\2795'; } /* '➕' */ +.icon-link:before { content: '🔗'; } /* '\1f517' */ +.icon-lock:before { content: '🔒'; } /* '\1f512' */ +.icon-eye:before { content: '\e70a'; } /* '' */ +.icon-tags:before { content: '\e70d'; } /* '' */ +.icon-code:before { content: '\e80a'; } /* '' */ +.icon-pencil:before { content: '\270e'; } /* '✎' */ +.icon-chat:before { content: '\e720'; } /* '' */ +.icon-trash:before { content: '\e729'; } /* '' */ +.icon-folder-open:before { content: '\e806'; } /* '' */ +.icon-menu:before { content: '\e809'; } /* '' */ +.icon-cog:before { content: '\2699'; } /* '⚙' */ +.icon-cog-alt:before { content: '\26ef'; } /* '⛯' */ +.icon-wrench:before { content: '🔧'; } /* '\1f527' */ +.icon-basket:before { content: '\e73d'; } /* '' */ +.icon-logout:before { content: '\e81b'; } /* '' */ +.icon-clock:before { content: '🕔'; } /* '\1f554' */ +.icon-block:before { content: '🚫'; } /* '\1f6ab' */ +.icon-move:before { content: '\e812'; } /* '' */ +.icon-cw:before { content: '\e80c'; } /* '' */ +.icon-arrows-cw:before { content: '\e804'; } /* '' */ +.icon-mail:before { content: '\2709'; } /* '✉' */ +.icon-exchange:before { content: '\e805'; } /* '' */ +.icon-signal:before { content: '\e801'; } /* '' */ +.icon-crop:before { content: '\f125'; } /* '' */ +.icon-check:before { content: '\e81f'; } /* '' */ +.icon-check-empty:before { content: '\e820'; } /* '' */ +.icon-tasks:before { content: '\f0ae'; } /* '' */ +.icon-filter:before { content: '\f0b0'; } /* '' */ +.icon-sitemap:before { content: '\f0e8'; } /* '' */ +.icon-search:before { content: '\e811'; } /* '' */ +.icon-user-add:before { content: '\e80b'; } /* '' */ +.icon-help-circled:before { content: '\e81a'; } /* '' */ +.icon-info-circled-1:before { content: '\e817'; } /* '' */ +.icon-home:before { content: '\e80e'; } /* '' */ +.icon-flag:before { content: '\e81c'; } /* '' */ +.icon-upload:before { content: '\e813'; } /* '' */ +.icon-upload-cloud:before { content: '\e814'; } /* '' */ +.icon-tools:before { content: '\e803'; } /* '' */ +.icon-hourglass:before { content: '\e81e'; } /* '' */ +.icon-network:before { content: '\e816'; } /* '' */ +.icon-brush:before { content: '\e807'; } /* '' */ +.icon-language:before { content: '\e800'; } /* '' */ +.icon-key:before { content: '\e815'; } /* '' */ +.icon-flow-branch:before { content: '\e808'; } /* '' */ +.icon-puzzle:before { content: '\e7b6'; } /* '' */ +.icon-mail-1:before { content: '\e810'; } /* '' */ +.icon-equalizer:before { content: '\e80f'; } /* '' */ +.icon-users:before { content: '\e802'; } /* '' */ +.icon-group:before { content: '\e80d'; } /* '' */ +.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
\ No newline at end of file diff --git a/admin/themes/default/fontello/css/fontello-embedded.css b/admin/themes/default/fontello/css/fontello-embedded.css new file mode 100644 index 000000000..75b9ada75 --- /dev/null +++ b/admin/themes/default/fontello/css/fontello-embedded.css @@ -0,0 +1,115 @@ +@charset "UTF-8"; + + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?13698858'); + src: url('../font/fontello.eot?13698858#iefix') format('embedded-opentype'), + url('../font/fontello.svg?13698858#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'fontello'; + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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') format('truetype'); +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?13698858#fontello') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.icon-spin6:before { content: '\e81d'; } /* '' */ +.icon-asl:before { content: '\e0ad'; } /* '' */ +.icon-mail-alt:before { content: '\f0e0'; } /* '' */ +.icon-star:before { content: '\2605'; } /* '★' */ +.icon-star-empty:before { content: '\2606'; } /* '☆' */ +.icon-user:before { content: '👤'; } /* '\1f464' */ +.icon-picture:before { content: '🌄'; } /* '\1f304' */ +.icon-cancel-circled:before { content: '\e821'; } /* '' */ +.icon-plus-circled:before { content: '\2795'; } /* '➕' */ +.icon-link:before { content: '🔗'; } /* '\1f517' */ +.icon-lock:before { content: '🔒'; } /* '\1f512' */ +.icon-eye:before { content: '\e70a'; } /* '' */ +.icon-tags:before { content: '\e70d'; } /* '' */ +.icon-code:before { content: '\e80a'; } /* '' */ +.icon-pencil:before { content: '\270e'; } /* '✎' */ +.icon-chat:before { content: '\e720'; } /* '' */ +.icon-trash:before { content: '\e729'; } /* '' */ +.icon-folder-open:before { content: '\e806'; } /* '' */ +.icon-menu:before { content: '\e809'; } /* '' */ +.icon-cog:before { content: '\2699'; } /* '⚙' */ +.icon-cog-alt:before { content: '\26ef'; } /* '⛯' */ +.icon-wrench:before { content: '🔧'; } /* '\1f527' */ +.icon-basket:before { content: '\e73d'; } /* '' */ +.icon-logout:before { content: '\e81b'; } /* '' */ +.icon-clock:before { content: '🕔'; } /* '\1f554' */ +.icon-block:before { content: '🚫'; } /* '\1f6ab' */ +.icon-move:before { content: '\e812'; } /* '' */ +.icon-cw:before { content: '\e80c'; } /* '' */ +.icon-arrows-cw:before { content: '\e804'; } /* '' */ +.icon-mail:before { content: '\2709'; } /* '✉' */ +.icon-exchange:before { content: '\e805'; } /* '' */ +.icon-signal:before { content: '\e801'; } /* '' */ +.icon-crop:before { content: '\f125'; } /* '' */ +.icon-check:before { content: '\e81f'; } /* '' */ +.icon-check-empty:before { content: '\e820'; } /* '' */ +.icon-tasks:before { content: '\f0ae'; } /* '' */ +.icon-filter:before { content: '\f0b0'; } /* '' */ +.icon-sitemap:before { content: '\f0e8'; } /* '' */ +.icon-search:before { content: '\e811'; } /* '' */ +.icon-user-add:before { content: '\e80b'; } /* '' */ +.icon-help-circled:before { content: '\e81a'; } /* '' */ +.icon-info-circled-1:before { content: '\e817'; } /* '' */ +.icon-home:before { content: '\e80e'; } /* '' */ +.icon-flag:before { content: '\e81c'; } /* '' */ +.icon-upload:before { content: '\e813'; } /* '' */ +.icon-upload-cloud:before { content: '\e814'; } /* '' */ +.icon-tools:before { content: '\e803'; } /* '' */ +.icon-hourglass:before { content: '\e81e'; } /* '' */ +.icon-network:before { content: '\e816'; } /* '' */ +.icon-brush:before { content: '\e807'; } /* '' */ +.icon-language:before { content: '\e800'; } /* '' */ +.icon-key:before { content: '\e815'; } /* '' */ +.icon-flow-branch:before { content: '\e808'; } /* '' */ +.icon-puzzle:before { content: '\e7b6'; } /* '' */ +.icon-mail-1:before { content: '\e810'; } /* '' */ +.icon-equalizer:before { content: '\e80f'; } /* '' */ +.icon-users:before { content: '\e802'; } /* '' */ +.icon-group:before { content: '\e80d'; } /* '' */ +.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
\ No newline at end of file diff --git a/admin/themes/default/fontello/css/fontello-ie7-codes.css b/admin/themes/default/fontello/css/fontello-ie7-codes.css new file mode 100644 index 000000000..26478aa0c --- /dev/null +++ b/admin/themes/default/fontello/css/fontello-ie7-codes.css @@ -0,0 +1,60 @@ + +.icon-spin6 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '★ '); } +.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '☆ '); } +.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '👤 '); } +.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🌄 '); } +.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '➕ '); } +.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔗 '); } +.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔒 '); } +.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✎ '); } +.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⚙ '); } +.icon-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⛯ '); } +.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔧 '); } +.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🕔 '); } +.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🚫 '); } +.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✉ '); } +.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-user-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔀 '); }
\ No newline at end of file diff --git a/admin/themes/default/fontello/css/fontello-ie7.css b/admin/themes/default/fontello/css/fontello-ie7.css new file mode 100644 index 000000000..376909e86 --- /dev/null +++ b/admin/themes/default/fontello/css/fontello-ie7.css @@ -0,0 +1,71 @@ +[class^="icon-"], [class*=" icon-"] { + font-family: 'fontello'; + font-style: normal; + font-weight: normal; + + /* fix buttons height */ + line-height: 1em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ +} + +.icon-spin6 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '★ '); } +.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '☆ '); } +.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '👤 '); } +.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🌄 '); } +.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '➕ '); } +.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔗 '); } +.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔒 '); } +.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✎ '); } +.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⚙ '); } +.icon-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '⛯ '); } +.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔧 '); } +.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🕔 '); } +.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🚫 '); } +.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '✉ '); } +.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-user-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '🔀 '); }
\ No newline at end of file diff --git a/admin/themes/default/fontello/css/fontello.css b/admin/themes/default/fontello/css/fontello.css new file mode 100644 index 000000000..f1b6f8422 --- /dev/null +++ b/admin/themes/default/fontello/css/fontello.css @@ -0,0 +1,113 @@ +@charset "UTF-8"; + + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.eot?27476867'); + src: url('../font/fontello.eot?27476867#iefix') format('embedded-opentype'), + url('../font/fontello.woff?27476867') format('woff'), + url('../font/fontello.ttf?27476867') format('truetype'), + url('../font/fontello.svg?27476867#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'fontello'; + src: url('../font/fontello.svg?27476867#fontello') format('svg'); + } +} +*/ + + [class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.icon-spin6:before { content: '\e81d'; } /* '' */ +.icon-asl:before { content: '\e0ad'; } /* '' */ +.icon-mail-alt:before { content: '\f0e0'; } /* '' */ +.icon-star:before { content: '\2605'; } /* '★' */ +.icon-star-empty:before { content: '\2606'; } /* '☆' */ +.icon-user:before { content: '👤'; } /* '\1f464' */ +.icon-picture:before { content: '🌄'; } /* '\1f304' */ +.icon-cancel-circled:before { content: '\e821'; } /* '' */ +.icon-plus-circled:before { content: '\2795'; } /* '➕' */ +.icon-link:before { content: '🔗'; } /* '\1f517' */ +.icon-lock:before { content: '🔒'; } /* '\1f512' */ +.icon-eye:before { content: '\e70a'; } /* '' */ +.icon-tags:before { content: '\e70d'; } /* '' */ +.icon-code:before { content: '\e80a'; } /* '' */ +.icon-pencil:before { content: '\270e'; } /* '✎' */ +.icon-chat:before { content: '\e720'; } /* '' */ +.icon-trash:before { content: '\e729'; } /* '' */ +.icon-folder-open:before { content: '\e806'; } /* '' */ +.icon-menu:before { content: '\e809'; } /* '' */ +.icon-cog:before { content: '\2699'; } /* '⚙' */ +.icon-cog-alt:before { content: '\26ef'; } /* '⛯' */ +.icon-wrench:before { content: '🔧'; } /* '\1f527' */ +.icon-basket:before { content: '\e73d'; } /* '' */ +.icon-logout:before { content: '\e81b'; } /* '' */ +.icon-clock:before { content: '🕔'; } /* '\1f554' */ +.icon-block:before { content: '🚫'; } /* '\1f6ab' */ +.icon-move:before { content: '\e812'; } /* '' */ +.icon-cw:before { content: '\e80c'; } /* '' */ +.icon-arrows-cw:before { content: '\e804'; } /* '' */ +.icon-mail:before { content: '\2709'; } /* '✉' */ +.icon-exchange:before { content: '\e805'; } /* '' */ +.icon-signal:before { content: '\e801'; } /* '' */ +.icon-crop:before { content: '\f125'; } /* '' */ +.icon-check:before { content: '\e81f'; } /* '' */ +.icon-check-empty:before { content: '\e820'; } /* '' */ +.icon-tasks:before { content: '\f0ae'; } /* '' */ +.icon-filter:before { content: '\f0b0'; } /* '' */ +.icon-sitemap:before { content: '\f0e8'; } /* '' */ +.icon-search:before { content: '\e811'; } /* '' */ +.icon-user-add:before { content: '\e80b'; } /* '' */ +.icon-help-circled:before { content: '\e81a'; } /* '' */ +.icon-info-circled-1:before { content: '\e817'; } /* '' */ +.icon-home:before { content: '\e80e'; } /* '' */ +.icon-flag:before { content: '\e81c'; } /* '' */ +.icon-upload:before { content: '\e813'; } /* '' */ +.icon-upload-cloud:before { content: '\e814'; } /* '' */ +.icon-tools:before { content: '\e803'; } /* '' */ +.icon-hourglass:before { content: '\e81e'; } /* '' */ +.icon-network:before { content: '\e816'; } /* '' */ +.icon-brush:before { content: '\e807'; } /* '' */ +.icon-language:before { content: '\e800'; } /* '' */ +.icon-key:before { content: '\e815'; } /* '' */ +.icon-flow-branch:before { content: '\e808'; } /* '' */ +.icon-puzzle:before { content: '\e7b6'; } /* '' */ +.icon-mail-1:before { content: '\e810'; } /* '' */ +.icon-equalizer:before { content: '\e80f'; } /* '' */ +.icon-users:before { content: '\e802'; } /* '' */ +.icon-group:before { content: '\e80d'; } /* '' */ +.icon-shuffle:before { content: '🔀'; } /* '\1f500' */
\ No newline at end of file diff --git a/admin/themes/default/fontello/demo.html b/admin/themes/default/fontello/demo.html new file mode 100644 index 000000000..52cc3cc46 --- /dev/null +++ b/admin/themes/default/fontello/demo.html @@ -0,0 +1,355 @@ +<!DOCTYPE html> +<html> + <head> + <!--[if lt IE 9]> + <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + <meta charset="UTF-8"><style type="text/css">/* + * Bootstrap v2.2.1 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; + line-height: 0; +} +.clearfix:after { + clear: both; +} +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +a:hover, +a:active { + outline: 0; +} +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} +button, +input { + *overflow: visible; + line-height: normal; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333; + background-color: #fff; +} +a { + color: #08c; + text-decoration: none; +} +a:hover { + color: #005580; + text-decoration: underline; +} +.row { + margin-left: -20px; + *zoom: 1; +} +.row:before, +.row:after { + display: table; + content: ""; + line-height: 0; +} +.row:after { + clear: both; +} +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.span12 { + width: 940px; +} +.span11 { + width: 860px; +} +.span10 { + width: 780px; +} +.span9 { + width: 700px; +} +.span8 { + width: 620px; +} +.span7 { + width: 540px; +} +.span6 { + width: 460px; +} +.span5 { + width: 380px; +} +.span4 { + width: 300px; +} +.span3 { + width: 220px; +} +.span2 { + width: 140px; +} +.span1 { + width: 60px; +} +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} +.container:before, +.container:after { + display: table; + content: ""; + line-height: 0; +} +.container:after { + clear: both; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} +small { + font-size: 85%; +} +h1 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} +h1 small { + font-weight: normal; + line-height: 1; + color: #999; +} +h1 { + line-height: 40px; +} +h1 { + font-size: 38.5px; +} +h1 small { + font-size: 24.5px; +} +body { + margin-top: 90px; +} +.header { + position: fixed; + top: 0; + left: 50%; + margin-left: -480px; + background-color: #fff; + border-bottom: 1px solid #ddd; + padding-top: 10px; + z-index: 10; +} +.footer { + color: #ddd; + font-size: 12px; + text-align: center; + margin-top: 20px; +} +.footer a { + color: #ccc; + text-decoration: underline; +} +.the-icons { + font-size: 14px; + line-height: 24px; +} +.switch { + position: absolute; + right: 0; + bottom: 10px; + color: #666; +} +.switch input { + margin-right: 0.3em; +} +.codesOn .i-name { + display: none; +} +.codesOn .i-code { + display: inline; +} +.i-code { + display: none; +} +</style> + <link rel="stylesheet" href="css/fontello.css"> + <link rel="stylesheet" href="css/animation.css"> + <!--[if IE 7]> + <link rel="stylesheet" href="css/fontello-ie7.css"> + <![endif]--> + <script> + function toggleCodes(on) { + var obj = document.getElementById('icons'); + + if (on) { + obj.className += ' codesOn'; + } else { + obj.className = obj.className.replace(' codesOn', ''); + } + } + + </script> + </head> + <body> + <div class="container header"> + <h1> + fontello + <small>font demo</small> + </h1> + <label class="switch"> + <input type="checkbox" onclick="toggleCodes(this.checked)">show codes + </label> + </div> + <div id="icons" class="container"> + <div class="row"> + <div title="Code: 0xe81d" class="the-icons span3"><i class="icon-spin6 animate-spin"></i> <span class="i-name">icon-spin6</span><span class="i-code">0xe81d</span></div> + <div title="Code: 0xe0ad" class="the-icons span3"><i class="icon-asl"></i> <span class="i-name">icon-asl</span><span class="i-code">0xe0ad</span></div> + <div title="Code: 0xf0e0" class="the-icons span3"><i class="icon-mail-alt"></i> <span class="i-name">icon-mail-alt</span><span class="i-code">0xf0e0</span></div> + <div title="Code: 0x2605" class="the-icons span3"><i class="icon-star"></i> <span class="i-name">icon-star</span><span class="i-code">0x2605</span></div> + </div> + <div class="row"> + <div title="Code: 0x2606" class="the-icons span3"><i class="icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0x2606</span></div> + <div title="Code: 0x1f464" class="the-icons span3"><i class="icon-user"></i> <span class="i-name">icon-user</span><span class="i-code">0x1f464</span></div> + <div title="Code: 0x1f304" class="the-icons span3"><i class="icon-picture"></i> <span class="i-name">icon-picture</span><span class="i-code">0x1f304</span></div> + <div title="Code: 0xe821" class="the-icons span3"><i class="icon-cancel-circled"></i> <span class="i-name">icon-cancel-circled</span><span class="i-code">0xe821</span></div> + </div> + <div class="row"> + <div title="Code: 0x2795" class="the-icons span3"><i class="icon-plus-circled"></i> <span class="i-name">icon-plus-circled</span><span class="i-code">0x2795</span></div> + <div title="Code: 0x1f517" class="the-icons span3"><i class="icon-link"></i> <span class="i-name">icon-link</span><span class="i-code">0x1f517</span></div> + <div title="Code: 0x1f512" class="the-icons span3"><i class="icon-lock"></i> <span class="i-name">icon-lock</span><span class="i-code">0x1f512</span></div> + <div title="Code: 0xe70a" class="the-icons span3"><i class="icon-eye"></i> <span class="i-name">icon-eye</span><span class="i-code">0xe70a</span></div> + </div> + <div class="row"> + <div title="Code: 0xe70d" class="the-icons span3"><i class="icon-tags"></i> <span class="i-name">icon-tags</span><span class="i-code">0xe70d</span></div> + <div title="Code: 0xe80a" class="the-icons span3"><i class="icon-code"></i> <span class="i-name">icon-code</span><span class="i-code">0xe80a</span></div> + <div title="Code: 0x270e" class="the-icons span3"><i class="icon-pencil"></i> <span class="i-name">icon-pencil</span><span class="i-code">0x270e</span></div> + <div title="Code: 0xe720" class="the-icons span3"><i class="icon-chat"></i> <span class="i-name">icon-chat</span><span class="i-code">0xe720</span></div> + </div> + <div class="row"> + <div title="Code: 0xe729" class="the-icons span3"><i class="icon-trash"></i> <span class="i-name">icon-trash</span><span class="i-code">0xe729</span></div> + <div title="Code: 0xe806" class="the-icons span3"><i class="icon-folder-open"></i> <span class="i-name">icon-folder-open</span><span class="i-code">0xe806</span></div> + <div title="Code: 0xe809" class="the-icons span3"><i class="icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xe809</span></div> + <div title="Code: 0x2699" class="the-icons span3"><i class="icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0x2699</span></div> + </div> + <div class="row"> + <div title="Code: 0x26ef" class="the-icons span3"><i class="icon-cog-alt"></i> <span class="i-name">icon-cog-alt</span><span class="i-code">0x26ef</span></div> + <div title="Code: 0x1f527" class="the-icons span3"><i class="icon-wrench"></i> <span class="i-name">icon-wrench</span><span class="i-code">0x1f527</span></div> + <div title="Code: 0xe73d" class="the-icons span3"><i class="icon-basket"></i> <span class="i-name">icon-basket</span><span class="i-code">0xe73d</span></div> + <div title="Code: 0xe81b" class="the-icons span3"><i class="icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe81b</span></div> + </div> + <div class="row"> + <div title="Code: 0x1f554" class="the-icons span3"><i class="icon-clock"></i> <span class="i-name">icon-clock</span><span class="i-code">0x1f554</span></div> + <div title="Code: 0x1f6ab" class="the-icons span3"><i class="icon-block"></i> <span class="i-name">icon-block</span><span class="i-code">0x1f6ab</span></div> + <div title="Code: 0xe812" class="the-icons span3"><i class="icon-move"></i> <span class="i-name">icon-move</span><span class="i-code">0xe812</span></div> + <div title="Code: 0xe80c" class="the-icons span3"><i class="icon-cw"></i> <span class="i-name">icon-cw</span><span class="i-code">0xe80c</span></div> + </div> + <div class="row"> + <div title="Code: 0xe804" class="the-icons span3"><i class="icon-arrows-cw"></i> <span class="i-name">icon-arrows-cw</span><span class="i-code">0xe804</span></div> + <div title="Code: 0x2709" class="the-icons span3"><i class="icon-mail"></i> <span class="i-name">icon-mail</span><span class="i-code">0x2709</span></div> + <div title="Code: 0xe805" class="the-icons span3"><i class="icon-exchange"></i> <span class="i-name">icon-exchange</span><span class="i-code">0xe805</span></div> + <div title="Code: 0xe801" class="the-icons span3"><i class="icon-signal"></i> <span class="i-name">icon-signal</span><span class="i-code">0xe801</span></div> + </div> + <div class="row"> + <div title="Code: 0xf125" class="the-icons span3"><i class="icon-crop"></i> <span class="i-name">icon-crop</span><span class="i-code">0xf125</span></div> + <div title="Code: 0xe81f" class="the-icons span3"><i class="icon-check"></i> <span class="i-name">icon-check</span><span class="i-code">0xe81f</span></div> + <div title="Code: 0xe820" class="the-icons span3"><i class="icon-check-empty"></i> <span class="i-name">icon-check-empty</span><span class="i-code">0xe820</span></div> + <div title="Code: 0xf0ae" class="the-icons span3"><i class="icon-tasks"></i> <span class="i-name">icon-tasks</span><span class="i-code">0xf0ae</span></div> + </div> + <div class="row"> + <div title="Code: 0xf0b0" class="the-icons span3"><i class="icon-filter"></i> <span class="i-name">icon-filter</span><span class="i-code">0xf0b0</span></div> + <div title="Code: 0xf0e8" class="the-icons span3"><i class="icon-sitemap"></i> <span class="i-name">icon-sitemap</span><span class="i-code">0xf0e8</span></div> + <div title="Code: 0xe811" class="the-icons span3"><i class="icon-search"></i> <span class="i-name">icon-search</span><span class="i-code">0xe811</span></div> + <div title="Code: 0xe80b" class="the-icons span3"><i class="icon-user-add"></i> <span class="i-name">icon-user-add</span><span class="i-code">0xe80b</span></div> + </div> + <div class="row"> + <div title="Code: 0xe81a" class="the-icons span3"><i class="icon-help-circled"></i> <span class="i-name">icon-help-circled</span><span class="i-code">0xe81a</span></div> + <div title="Code: 0xe817" class="the-icons span3"><i class="icon-info-circled-1"></i> <span class="i-name">icon-info-circled-1</span><span class="i-code">0xe817</span></div> + <div title="Code: 0xe80e" class="the-icons span3"><i class="icon-home"></i> <span class="i-name">icon-home</span><span class="i-code">0xe80e</span></div> + <div title="Code: 0xe81c" class="the-icons span3"><i class="icon-flag"></i> <span class="i-name">icon-flag</span><span class="i-code">0xe81c</span></div> + </div> + <div class="row"> + <div title="Code: 0xe813" class="the-icons span3"><i class="icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe813</span></div> + <div title="Code: 0xe814" class="the-icons span3"><i class="icon-upload-cloud"></i> <span class="i-name">icon-upload-cloud</span><span class="i-code">0xe814</span></div> + <div title="Code: 0xe803" class="the-icons span3"><i class="icon-tools"></i> <span class="i-name">icon-tools</span><span class="i-code">0xe803</span></div> + <div title="Code: 0xe81e" class="the-icons span3"><i class="icon-hourglass"></i> <span class="i-name">icon-hourglass</span><span class="i-code">0xe81e</span></div> + </div> + <div class="row"> + <div title="Code: 0xe816" class="the-icons span3"><i class="icon-network"></i> <span class="i-name">icon-network</span><span class="i-code">0xe816</span></div> + <div title="Code: 0xe807" class="the-icons span3"><i class="icon-brush"></i> <span class="i-name">icon-brush</span><span class="i-code">0xe807</span></div> + <div title="Code: 0xe800" class="the-icons span3"><i class="icon-language"></i> <span class="i-name">icon-language</span><span class="i-code">0xe800</span></div> + <div title="Code: 0xe815" class="the-icons span3"><i class="icon-key"></i> <span class="i-name">icon-key</span><span class="i-code">0xe815</span></div> + </div> + <div class="row"> + <div title="Code: 0xe808" class="the-icons span3"><i class="icon-flow-branch"></i> <span class="i-name">icon-flow-branch</span><span class="i-code">0xe808</span></div> + <div title="Code: 0xe7b6" class="the-icons span3"><i class="icon-puzzle"></i> <span class="i-name">icon-puzzle</span><span class="i-code">0xe7b6</span></div> + <div title="Code: 0xe810" class="the-icons span3"><i class="icon-mail-1"></i> <span class="i-name">icon-mail-1</span><span class="i-code">0xe810</span></div> + <div title="Code: 0xe80f" class="the-icons span3"><i class="icon-equalizer"></i> <span class="i-name">icon-equalizer</span><span class="i-code">0xe80f</span></div> + </div> + <div class="row"> + <div title="Code: 0xe802" class="the-icons span3"><i class="icon-users"></i> <span class="i-name">icon-users</span><span class="i-code">0xe802</span></div> + <div title="Code: 0xe80d" class="the-icons span3"><i class="icon-group"></i> <span class="i-name">icon-group</span><span class="i-code">0xe80d</span></div> + <div title="Code: 0x1f500" class="the-icons span3"><i class="icon-shuffle"></i> <span class="i-name">icon-shuffle</span><span class="i-code">0x1f500</span></div> + </div> + </div> + <div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div> + </body> +</html>
\ No newline at end of file diff --git a/admin/themes/default/fontello/font/fontello.eot b/admin/themes/default/fontello/font/fontello.eot Binary files differnew file mode 100644 index 000000000..030da1c23 --- /dev/null +++ b/admin/themes/default/fontello/font/fontello.eot diff --git a/admin/themes/default/fontello/font/fontello.svg b/admin/themes/default/fontello/font/fontello.svg new file mode 100644 index 000000000..00f80b839 --- /dev/null +++ b/admin/themes/default/fontello/font/fontello.svg @@ -0,0 +1,70 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata>Copyright (C) 2013 by original authors @ fontello.com</metadata> +<defs> +<font id="fontello" horiz-adv-x="1000" > +<font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" /> +<missing-glyph horiz-adv-x="1000" /> +<glyph glyph-name="spin6" unicode="" d="m855 9c-189-190-520-172-705 13c-190 190-200 494-28 695c11 13 21 26 35 34c36 23 85 18 117-13c30-31 35-76 16-112c-5-9-9-15-16-22c-140-151-145-379-8-516c153-153 407-121 542 34c106 122 142 297 77 451c-83 198-305 291-510 222l0 1c236 82 492-24 588-252c71-167 37-355-72-493c-11-15-23-29-36-42z" horiz-adv-x="1000" /> +<glyph glyph-name="asl" unicode="" d="m1 700q-4 37 15 53t45 5t35-38l53-184q-15-29-14-64q6-30 36-204q7-52 32-82t65-29q47 0 74 37q34-39 83-37t74 41q27-37 71-41t73 27q12 16 20 32t11 37t5 33t1 40l0 38q26-10 61 24q49 45 109 78t98 8q33-24 31-59t-35-55q-61-25-104-82t-67-112t-58-117t-78-93q-21-18-66-18l-350 0q-84 6-105 118z m181-234q-6 45 21 65t56 8t37-48l21-209q4-41-17-63t-46-15t-37 45z m155 70q2 41 32 56t62-1t36-49l8-248q0-59-28-76t-57 4t-30 62z m175 4q4 43 37 55t62-7t30-52l-6-254q-5-47-34-66t-54 1t-29 67z" horiz-adv-x="979" /> +<glyph glyph-name="mail-alt" unicode="" d="m1000 454v-443q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v443q25-28 56-49q202-137 278-192q32-24 51-37t53-27t61-13h2q28 0 61 13t53 27t51 37q95 68 278 192q32 22 56 49z m0 164q0-44-27-84t-68-69q-210-146-262-181q-5-4-23-17t-30-22t-29-18t-33-15t-27-5h-2q-12 0-27 5t-33 15t-29 18t-30 22t-23 17q-51 35-147 101t-114 80q-35 23-65 64t-31 77q0 43 23 72t66 29h822q36 0 62-26t27-63z" horiz-adv-x="1000" /> +<glyph glyph-name="star" unicode="★" d="m929 489q0-12-15-27l-203-197l48-279q1-4 1-12q0-11-6-19t-17-9q-10 0-22 7l-251 132l-250-132q-13-7-23-7q-11 0-17 9t-6 19q0 4 1 12l48 279l-203 197q-14 15-14 27q0 21 31 26l280 40l126 254q11 23 27 23t28-23l125-254l280-40q32-5 32-26z" horiz-adv-x="928.6" /> +<glyph glyph-name="star-empty" unicode="☆" d="m634 290l171 165l-235 35l-106 213l-105-213l-236-35l171-165l-41-235l211 111l211-111z m295 199q0-12-15-27l-203-197l48-279q1-4 1-12q0-28-23-28q-10 0-22 7l-251 132l-250-132q-13-7-23-7q-11 0-17 9t-6 19q0 4 1 12l48 279l-203 197q-14 15-14 27q0 21 31 26l280 40l126 254q11 23 27 23t28-23l125-254l280-40q32-5 32-26z" horiz-adv-x="928.6" /> +<glyph glyph-name="user" unicode="👤" d="m786 66q0-67-41-106t-108-39h-488q-67 0-108 39t-41 106q0 30 2 58t8 61t15 60t24 55t34 45t48 30t62 11q5 0 24-12t41-27t60-27t75-12t74 12t61 27t41 27t24 12q34 0 62-11t48-30t34-45t24-55t15-60t8-61t2-58z m-179 498q0-88-63-151t-151-63t-152 63t-62 151t62 152t152 63t151-63t63-152z" horiz-adv-x="785.7" /> +<glyph glyph-name="picture" unicode="🌄" d="m357 529q0-45-31-76t-76-32t-76 32t-31 76t31 75t76 32t76-32t31-75z m572-215v-250h-786v107l178 179l90-89l285 285z m53 393h-893q-7 0-12-5t-6-13v-678q0-8 6-13t12-5h893q7 0 13 5t5 13v678q0 7-5 13t-13 5z m89-18v-678q0-37-26-63t-63-27h-893q-36 0-63 27t-26 63v678q0 37 26 63t63 27h893q37 0 63-27t26-63z" horiz-adv-x="1071.4" /> +<glyph glyph-name="cancel-circled" unicode="" d="m641 224q0 14-10 25l-101 101l101 101q10 11 10 25q0 15-10 26l-51 50q-10 11-25 11q-15 0-25-11l-101-101l-101 101q-11 11-26 11q-15 0-25-11l-50-50q-11-11-11-26q0-14 11-25l101-101l-101-101q-11-11-11-25q0-15 11-26l50-50q10-11 25-11q15 0 26 11l101 101l101-101q10-11 25-11q15 0 25 11l51 50q10 11 10 26z m216 126q0-117-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58t215-58t156-156t57-215z" horiz-adv-x="857.1" /> +<glyph glyph-name="plus-circled" unicode="➕" d="m679 314v72q0 14-11 25t-25 10h-143v143q0 15-11 25t-25 11h-71q-15 0-25-11t-11-25v-143h-143q-14 0-25-10t-10-25v-72q0-14 10-25t25-11h143v-142q0-15 11-25t25-11h71q15 0 25 11t11 25v142h143q14 0 25 11t11 25z m178 36q0-117-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58t215-58t156-156t57-215z" horiz-adv-x="857.1" /> +<glyph glyph-name="link" unicode="🔗" d="m812 171q0 23-15 38l-116 116q-16 16-38 16q-24 0-40-18q1-1 10-10t12-12t9-11t7-14t2-15q0-23-16-38t-38-16q-8 0-15 2t-14 7t-11 9t-12 12t-10 10q-19-17-19-40q0-23 16-38l115-116q15-15 38-15q22 0 38 15l82 81q15 16 15 37z m-392 394q0 22-15 38l-115 115q-16 16-38 16q-22 0-38-15l-82-82q-16-15-16-37q0-22 16-38l116-116q15-15 38-15q23 0 40 17q-2 2-11 11t-12 12t-8 10t-7 14t-2 16q0 22 15 38t38 15q9 0 16-2t14-7t10-8t12-12t11-11q18 17 18 41z m500-394q0-67-48-113l-82-81q-46-47-113-47q-68 0-114 48l-115 115q-46 47-46 114q0 68 49 116l-49 49q-48-49-116-49q-67 0-114 47l-116 116q-47 47-47 114t47 113l82 82q47 46 114 46q67 0 114-47l114-116q47-46 47-113q0-69-49-117l49-49q48 49 116 49q67 0 114-47l116-116q47-47 47-114z" horiz-adv-x="928.6" /> +<glyph glyph-name="lock" unicode="🔒" d="m179 421h285v108q0 59-42 101t-101 41t-101-41t-41-101v-108z m464-53v-322q0-22-16-37t-38-16h-535q-23 0-38 16t-16 37v322q0 22 16 38t38 15h17v108q0 102 74 176t176 74t177-74t73-176v-108h18q23 0 38-15t16-38z" horiz-adv-x="642.9" /> +<glyph glyph-name="eye" unicode="" d="m929 314q-85 132-213 197q34-58 34-125q0-104-73-177t-177-73t-177 73t-73 177q0 67 34 125q-128-65-213-197q75-114 187-182t242-68t242 68t187 182z m-402 215q0 11-8 19t-19 7q-70 0-120-50t-50-119q0-12 8-19t19-8t19 8t8 19q0 48 34 82t82 34q11 0 19 8t8 19z m473-215q0-19-11-38q-78-129-210-206t-279-77t-279 77t-210 206q-11 19-11 38t11 39q78 128 210 205t279 78t279-78t210-205q11-20 11-39z" horiz-adv-x="1000" /> +<glyph glyph-name="tags" unicode="" d="m250 600q0 30-21 51t-50 20t-51-20t-21-51t21-50t51-21t50 21t21 50z m595-321q0-30-20-51l-274-274q-22-21-51-21q-30 0-50 21l-399 399q-21 21-36 57t-15 65v232q0 29 21 50t50 22h233q29 0 65-15t57-36l399-399q20-21 20-50z m215 0q0-30-21-51l-274-274q-22-21-51-21q-20 0-33 8t-29 25l262 262q21 21 21 51q0 29-21 50l-399 399q-21 21-57 36t-65 15h125q29 0 65-15t57-36l399-399q21-21 21-50z" horiz-adv-x="1071.4" /> +<glyph glyph-name="code" unicode="" d="m344 69l-28-28q-5-5-12-5t-13 5l-260 260q-6 6-6 13t6 13l260 260q5 6 13 6t12-6l28-28q6-5 6-13t-6-12l-219-220l219-219q6-6 6-13t-6-13z m330 596l-208-721q-2-7-9-11t-13-1l-34 9q-8 3-11 9t-2 14l208 720q3 8 9 11t13 2l35-10q7-2 11-9t1-13z m367-364l-260-260q-6-5-13-5t-13 5l-28 28q-5 6-5 13t5 13l219 219l-219 220q-5 5-5 12t5 13l28 28q6 6 13 6t13-6l260-260q5-5 5-13t-5-13z" horiz-adv-x="1071.4" /> +<glyph glyph-name="pencil" unicode="✎" d="m203-7l50 51l-131 131l-51-51v-60h72v-71h60z m291 518q0 12-12 12q-5 0-9-4l-303-302q-4-4-4-10q0-12 13-12q5 0 9 4l303 302q3 4 3 10z m-30 107l232-232l-464-465h-232v233z m381-54q0-29-20-50l-93-93l-232 233l93 92q20 21 50 21q29 0 51-21l131-131q20-22 20-51z" horiz-adv-x="857.1" /> +<glyph glyph-name="chat" unicode="" d="m786 421q0-77-53-143t-143-104t-197-38q-48 0-98 9q-70-49-155-72q-21-5-48-9h-2q-6 0-12 5t-6 12q-1 1-1 3t1 4t1 3l1 3t2 3t2 3t3 3t2 2q3 3 13 14t15 16t12 17t14 21t11 25q-69 40-108 98t-40 125q0 78 53 144t143 104t197 38t197-38t143-104t53-144z m214-142q0-67-40-126t-108-98q5-14 11-25t14-21t13-16t14-17t13-14q0 0 2-2t3-3t2-3t2-3l1-3t1-3t1-4t-1-3q-2-8-7-13t-13-4q-27 4-48 9q-85 23-155 72q-50-9-98-9q-151 0-263 74q32-3 49-3q90 0 172 25t148 72q69 52 107 119t37 141q0 43-13 85q72-39 114-99t42-128z" horiz-adv-x="1000" /> +<glyph glyph-name="trash" unicode="" d="m286 439v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m143 0v-321q0-8-5-13t-13-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q8 0 13-5t5-13z m142 0v-321q0-8-5-13t-12-5h-36q-8 0-13 5t-5 13v321q0 8 5 13t13 5h36q7 0 12-5t5-13z m72-404v529h-500v-529q0-12 4-22t8-15t6-5h464q2 0 6 5t8 15t4 22z m-375 601h250l-27 65q-4 5-9 6h-177q-6-1-10-6z m518-18v-36q0-8-5-13t-13-5h-54v-529q0-46-26-80t-63-34h-464q-37 0-63 33t-27 79v531h-53q-8 0-13 5t-5 13v36q0 8 5 13t13 5h172l39 93q9 21 31 35t44 15h178q22 0 44-15t30-35l39-93h173q8 0 13-5t5-13z" horiz-adv-x="785.7" /> +<glyph glyph-name="folder-open" unicode="" d="m1049 319q0-18-18-37l-187-221q-24-28-67-48t-81-20h-607q-19 0-33 7t-15 24q0 17 17 37l188 221q24 28 67 48t80 20h607q19 0 34-7t15-24z m-192 192v-90h-464q-53 0-110-26t-92-67l-188-221l-2-3q0 2-1 7t0 7v536q0 51 37 88t88 37h179q51 0 88-37t37-88v-18h303q51 0 88-37t37-88z" horiz-adv-x="1071.4" /> +<glyph glyph-name="menu" unicode="" d="m857 100v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 25t25 11h785q15 0 26-11t10-25z m0 286v-72q0-14-10-25t-26-10h-785q-15 0-25 10t-11 25v72q0 14 11 25t25 10h785q15 0 26-10t10-25z m0 285v-71q0-15-10-25t-26-11h-785q-15 0-25 11t-11 25v71q0 15 11 26t25 10h785q15 0 26-10t10-26z" horiz-adv-x="857.1" /> +<glyph glyph-name="cog" unicode="⚙" d="m571 350q0 59-41 101t-101 42t-101-42t-42-101t42-101t101-42t101 42t41 101z m286 61v-124q0-7-4-13t-11-7l-104-16q-10-30-21-51q19-27 59-77q6-6 6-13t-5-13q-15-21-55-61t-53-39q-7 0-14 5l-77 60q-25-13-51-21q-9-76-16-104q-4-16-20-16h-124q-8 0-14 5t-6 12l-16 103q-27 9-50 21l-79-60q-6-5-14-5q-8 0-14 6q-70 64-92 94q-4 5-4 13q0 6 5 12q8 12 28 37t30 40q-15 28-23 55l-102 15q-7 1-11 7t-5 13v124q0 7 5 13t10 7l104 16q8 25 22 51q-23 32-60 77q-6 7-6 14q0 5 5 12q15 20 55 60t53 40q7 0 15-5l77-60q24 13 50 21q9 76 17 104q3 15 20 15h124q7 0 13-4t7-12l15-103q28-9 50-21l80 60q5 5 13 5q7 0 14-5q72-67 92-95q4-5 4-13q0-6-4-12q-9-12-29-38t-30-39q14-28 23-55l102-15q7-1 12-7t4-13z" horiz-adv-x="857.1" /> +<glyph glyph-name="cog-alt" unicode="⛯" d="m500 350q0 59-42 101t-101 42t-101-42t-42-101t42-101t101-42t101 42t42 101z m429-286q0 29-22 51t-50 21t-50-21t-21-51q0-29 21-50t50-21t51 21t21 50z m0 572q0 29-22 50t-50 21t-50-21t-21-50q0-30 21-51t50-21t51 21t21 51z m-215-235v-103q0-6-4-11t-9-6l-86-14q-6-19-18-42q19-27 50-64q4-6 4-11q0-7-4-11q-13-17-46-50t-44-33q-6 0-11 4l-64 50q-21-11-43-17q-6-60-13-87q-4-13-17-13h-104q-6 0-11 4t-5 10l-13 85q-19 6-42 18l-66-50q-4-4-11-4q-6 0-12 4q-80 75-80 90q0 5 4 10q5 8 23 30t26 34q-13 24-20 46l-85 13q-5 1-9 5t-4 11v103q0 6 4 11t9 6l86 14q7 19 18 42q-19 27-50 64q-4 6-4 11q0 7 4 11q12 17 46 50t44 33q6 0 12-4l64-50q19 10 43 18q6 60 13 86q3 13 16 13h104q6 0 11-4t6-10l13-85q19-6 41-17l66 49q5 4 11 4q7 0 12-4q81-75 81-90q0-5-4-10q-7-9-24-30t-25-34q13-27 19-46l85-12q5-2 9-6t4-11z m357-298v-78q0-9-83-17q-6-15-16-29q28-63 28-77q0-2-2-4q-68-40-69-40q-5 0-26 27t-29 37q-11-1-17-1t-17 1q-7-11-29-37t-25-27q-1 0-69 40q-3 2-3 4q0 14 29 77q-10 14-17 29q-83 8-83 17v78q0 9 83 18q7 16 17 29q-29 63-29 77q0 2 3 4q2 1 19 11t33 19t17 9q4 0 25-26t29-38q12 1 17 1t17-1q28 40 51 63l4 1q2 0 69-39q2-2 2-4q0-14-28-77q9-13 16-29q83-9 83-18z m0 572v-78q0-9-83-18q-6-15-16-29q28-63 28-77q0-2-2-4q-68-39-69-39q-5 0-26 26t-29 38q-11-1-17-1t-17 1q-7-12-29-38t-25-26q-1 0-69 39q-3 2-3 4q0 14 29 77q-10 14-17 29q-83 9-83 18v78q0 9 83 17q7 16 17 29q-29 63-29 77q0 2 3 4q2 1 19 11t33 19t17 9q4 0 25-26t29-38q12 2 17 2t17-2q28 40 51 63l4 1q2 0 69-39q2-2 2-4q0-14-28-77q9-13 16-29q83-8 83-17z" horiz-adv-x="1071.4" /> +<glyph glyph-name="wrench" unicode="🔧" d="m214 29q0 14-10 25t-25 10t-26-10t-10-25t10-26t26-10t25 10t10 26z m360 234l-381-381q-21-20-50-20q-29 0-51 20l-59 61q-21 20-21 50q0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59q-27-75-92-122t-144-46q-104 0-177 73t-73 177t73 176t177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45t40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" /> +<glyph glyph-name="basket" unicode="" d="m357-7q0-30-21-51t-50-21t-51 21t-21 51t21 50t51 21t50-21t21-50z m500 0q0-30-21-51t-50-21t-51 21t-21 51t21 50t51 21t50-21t21-50z m72 607v-286q0-13-9-23t-23-12l-583-68q1-4 3-12t3-15t1-13q0-8-13-35h513q15 0 26-11t10-25t-10-25t-26-11h-571q-14 0-25 11t-11 25q0 8 6 22t17 33t11 21l-98 460h-114q-15 0-25 10t-11 25t11 26t25 10h143q9 0 16-3t11-9t7-14t4-15t3-16t3-14h670q14 0 25-11t11-25z" horiz-adv-x="928.6" /> +<glyph glyph-name="logout" unicode="" d="m357 46q0-2 1-11t0-14t-2-14t-5-11t-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15t-2-13t-5-11t-12-3h-178q-37 0-63-27t-27-63v-392q0-37 27-63t63-27h174t6 0t7-2t4-3t4-5t1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10t-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10t25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" /> +<glyph glyph-name="clock" unicode="🕔" d="m500 546v-250q0-7-5-12t-13-5h-178q-8 0-13 5t-5 12v36q0 8 5 13t13 5h125v196q0 8 5 13t12 5h36q8 0 13-5t5-13z m232-196q0 83-41 152t-110 111t-152 41t-153-41t-110-111t-41-152t41-152t110-111t153-41t152 41t110 111t41 152z m125 0q0-117-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58t215-58t156-156t57-215z" horiz-adv-x="857.1" /> +<glyph glyph-name="block" unicode="🚫" d="m732 352q0 90-48 164l-421-420q76-50 166-50q62 0 118 25t96 65t65 97t24 119z m-557-167l421 421q-75 50-167 50q-83 0-153-40t-110-112t-41-152q0-91 50-167z m682 167q0-88-34-168t-91-137t-137-92t-166-34t-167 34t-137 92t-91 137t-34 168t34 167t91 137t137 91t167 34t166-34t137-91t91-137t34-167z" horiz-adv-x="857.1" /> +<glyph glyph-name="move" unicode="" d="m1000 350q0-14-11-25l-142-143q-11-11-26-11t-25 11t-10 25v72h-215v-215h72q14 0 25-10t11-25t-11-26l-143-142q-10-11-25-11t-25 11l-143 142q-11 11-11 26t11 25t25 10h72v215h-215v-72q0-14-10-25t-25-11t-26 11l-142 143q-11 11-11 25t11 25l142 143q11 11 26 11t25-11t10-25v-72h215v215h-72q-14 0-25 10t-11 25t11 26l143 142q11 11 25 11t25-11l143-142q11-11 11-26t-11-25t-25-10h-72v-215h215v72q0 14 10 25t25 11t26-11l142-143q11-10 11-25z" horiz-adv-x="1000" /> +<glyph glyph-name="cw" unicode="" d="m857 707v-250q0-14-10-25t-26-11h-250q-23 0-32 23q-10 22 7 38l77 77q-82 77-194 77q-58 0-111-23t-91-61t-62-91t-22-111t22-111t62-91t91-61t111-23q66 0 125 29t100 82q4 6 13 7q8 0 14-5l76-77q5-4 6-11t-5-13q-60-74-147-114t-182-41q-87 0-167 34t-136 92t-92 137t-34 166t34 166t92 137t136 92t167 34q82 0 158-31t137-88l72 72q16 18 39 8q22-9 22-33z" horiz-adv-x="857.1" /> +<glyph glyph-name="arrows-cw" unicode="" d="m843 261q0-3 0-4q-36-150-150-243t-267-93q-81 0-157 31t-136 88l-72-72q-11-11-25-11t-25 11t-11 25v250q0 14 11 25t25 11h250q14 0 25-11t10-25t-10-25l-77-77q40-37 90-57t105-20q74 0 139 37t104 99q6 10 29 66q5 13 17 13h107q8 0 13-6t5-12z m14 446v-250q0-14-10-25t-26-11h-250q-14 0-25 11t-10 25t10 25l77 77q-82 77-194 77q-75 0-140-37t-104-99q-6-10-29-66q-5-13-17-13h-111q-7 0-13 6t-5 12v4q36 150 151 243t268 93q81 0 158-31t137-88l72 72q11 11 25 11t26-11t10-25z" horiz-adv-x="857.1" /> +<glyph glyph-name="mail" unicode="✉" d="m929 11v428q-18-20-39-37q-149-114-238-188q-28-24-46-38t-48-27t-57-13h-2q-26 0-57 13t-48 27t-46 38q-88 74-238 188q-21 17-39 37v-428q0-8 6-13t12-5h822q7 0 12 5t6 13z m0 586v14t-1 7t-1 7t-3 5t-5 4t-8 2h-822q-7 0-12-6t-6-12q0-94 82-159q108-85 224-177q4-2 20-16t25-21t25-18t28-15t24-5h2q11 0 24 5t28 15t25 18t25 21t20 16q116 92 224 177q30 24 56 65t26 73z m71 21v-607q0-37-26-63t-63-27h-822q-36 0-63 27t-26 63v607q0 37 26 63t63 26h822q37 0 63-26t26-63z" horiz-adv-x="1000" /> +<glyph glyph-name="exchange" unicode="" d="m1000 189v-107q0-7-5-12t-13-6h-768v-107q0-7-5-12t-13-6q-6 0-13 6l-178 178q-5 5-5 13q0 8 5 13l179 178q5 5 12 5q8 0 13-5t5-13v-107h768q7 0 13-5t5-13z m0 304q0-8-5-13l-179-179q-5-5-12-5q-8 0-13 6t-5 12v107h-768q-7 0-13 6t-5 12v107q0 8 5 13t13 5h768v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" /> +<glyph glyph-name="signal" unicode="" d="m143 46v-107q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v107q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 72v-179q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v179q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 143v-322q0-8-5-13t-12-5h-108q-7 0-12 5t-5 13v322q0 8 5 13t12 5h108q7 0 12-5t5-13z m215 214v-536q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v536q0 8 5 13t13 5h107q8 0 13-5t5-13z m214 286v-822q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v822q0 8 5 13t13 5h107q8 0 13-5t5-13z" horiz-adv-x="1000" /> +<glyph glyph-name="crop" unicode="" d="m311 136h332v332z m-25 25l332 332h-332v-332z m643-43v-107q0-8-5-13t-13-5h-125v-125q0-8-5-13t-13-5h-107q-8 0-13 5t-5 13v125h-482q-8 0-13 5t-5 13v482h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125v125q0 7 5 12t13 5h107q8 0 13-5t5-12v-125h475l137 138q5 5 13 5t13-5q5-6 5-13t-5-13l-138-137v-475h125q8 0 13-5t5-13z" horiz-adv-x="928.6" /> +<glyph glyph-name="check" unicode="" d="m786 331v-177q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14q9-4 10-13q2-10-5-16l-27-28q-6-5-13-5q-2 0-5 1q-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v141q0 8 5 13l36 35q6 6 13 6q3 0 7-2q11-4 11-16z m129 273l-455-454q-13-14-31-14t-32 14l-240 240q-14 13-14 31t14 32l61 62q14 13 32 13t32-13l147-147l361 361q13 13 31 13t32-13l62-61q13-14 13-32t-13-32z" horiz-adv-x="928.6" /> +<glyph glyph-name="check-empty" unicode="" d="m625 707h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v464q0 37-26 63t-63 26z m161-89v-464q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q66 0 114-48t47-113z" horiz-adv-x="785.7" /> +<glyph glyph-name="tasks" unicode="" d="m571 64h358v72h-358v-72z m-214 286h572v71h-572v-71z m357 286h215v71h-215v-71z m286-465v-142q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v142q0 15 11 26t25 10h928q15 0 25-10t11-26z m0 286v-143q0-14-11-25t-25-10h-928q-15 0-25 10t-11 25v143q0 15 11 25t25 11h928q15 0 25-11t11-25z m0 286v-143q0-15-11-25t-25-11h-928q-15 0-25 11t-11 25v143q0 14 11 25t25 11h928q15 0 25-11t11-25z" horiz-adv-x="1000" /> +<glyph glyph-name="filter" unicode="" d="m783 685q9-23-8-39l-275-275v-414q0-23-22-33q-7-3-14-3q-15 0-25 11l-143 143q-10 10-10 25v271l-275 275q-18 16-8 39q9 22 33 22h714q23 0 33-22z" horiz-adv-x="785.7" /> +<glyph glyph-name="sitemap" unicode="" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" /> +<glyph glyph-name="search" unicode="" d="m772 78q30-34 6-62l-46-46q-36-32-68 0l-190 190q-74-42-156-42q-128 0-223 95t-95 223t90 219t218 91t224-95t96-223q0-88-46-162z m-678 358q0-88 68-156t156-68t151 63t63 153q0 88-68 155t-156 67t-151-63t-63-151z" horiz-adv-x="789" /> +<glyph glyph-name="user-add" unicode="" d="m620 128q180-64 180-122l0-106l-800 0l0 202q36 14 82 26q94 34 129 69t35 95q0 22-23 48t-31 74q-2 12-23 25t-25 61q0 16 5 26t9 12l4 4q-8 50-12 88q-6 54 40 112t160 58t160-58t42-112l-14-88q18-8 18-42q-2-28-9-43t-14-17t-14-8t-9-18q-10-46-33-73t-23-49q0-60 36-95t130-69z m230 272l150 0l0-100l-150 0l0-150l-100 0l0 150l-150 0l0 100l150 0l0 150l100 0l0-150z" horiz-adv-x="1000" /> +<glyph glyph-name="help-circled" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m-2-740q30 0 49 19t19 47q2 30-17 49t-49 19l-2 0q-28 0-47-18t-21-46q0-30 19-49t47-21l2 0z m166 328q26 34 26 78q0 78-54 116q-52 38-134 38q-64 0-104-26q-68-42-72-146l0-4l110 0l0 4q0 26 16 54q16 24 54 24q40 0 52-20q16-20 16-44q0-18-16-40q-8-12-20-20l-6-4q-6-4-16-11t-20-15t-21-17t-17-17q-14-20-18-78l0-8l108 0l0 4q0 12 4 28q6 20 28 36l28 18q46 34 56 50z" horiz-adv-x="920" /> +<glyph glyph-name="info-circled-1" unicode="" d="m454 810q190 2 326-130t140-322q2-190-131-327t-323-141q-190-2-327 131t-139 323q-4 190 130 327t324 139z m52-152q-42 0-65-24t-23-50q-2-28 15-44t49-16q38 0 61 22t23 54q0 58-60 58z m-120-594q30 0 84 26t106 78l-18 24q-48-36-72-36q-14 0-4 38l42 160q26 96-22 96q-30 0-89-29t-115-75l16-26q52 34 74 34q12 0 0-34l-36-152q-26-104 34-104z" horiz-adv-x="920" /> +<glyph glyph-name="home" unicode="" d="m888 336q16-16 11-27t-27-11l-84 0l0-310q0-14-1-21t-8-13t-23-6l-204 0l0 310l-204 0l0-310l-194 0q-28 0-35 10t-7 30l0 310l-84 0q-22 0-27 11t11 27l400 402q16 16 38 16t38-16z" horiz-adv-x="900" /> +<glyph glyph-name="flag" unicode="" d="m874 616q14 6 22-1t0-19q-96-138-164-213t-110-90t-73-2t-60 37t-63 40t-93-4t-139-86l90-352l-100 0l-184 720l92 34q90 66 152 86t98 3t64-51t62-71t79-62t129-20t198 51z" horiz-adv-x="900" /> +<glyph glyph-name="upload" unicode="" d="m500 776l260-244l-164 0l0-256l-190 0l0 256l-166 0z m468-578q18-10 27-32t3-40l-28-154q-4-20-22-33t-40-13l-816 0q-22 0-40 13t-22 33l-28 154q-10 48 32 72l158 108l98 0l-170-130l178 0q8 0 12-8l40-110l300 0l40 110q8 8 12 8l178 0l-170 130l98 0z" horiz-adv-x="1000" /> +<glyph glyph-name="upload-cloud" unicode="" d="m760 494q100 0 170-68t70-166t-70-166t-170-68l-190 0l0 190l106 0l-176 230l-174-230l104 0l0-190l-248 0q-74 0-128 52t-54 124q0 74 53 126t129 52q14 0 20-2q-2 12-2 38q0 108 78 184t188 76q90 0 160-52t94-134q28 4 40 4z" horiz-adv-x="1000" /> +<glyph glyph-name="tools" unicode="" d="m155 506q-8-8-11-22t-3-25t-2-11q-2-2-17-15t-19-17q-16-14-28 4l-70 76q-11 12 2 24q2 2 18 14t20 16q6 6 27 6t37 14q14 14 18 38t10 30q2 0 9 7t26 22t41 31q134 90 186 96q122 0 148-2q12 0-8-8q-120-52-152-76q-80-56-36-114q34-46 38-48q8-8-2-14q-2-2-38-35t-38-35q-14-8-18-4q-42 48-71 60t-67-12z m286-26l410-476q18-22-2-38l-48-42q-22-14-38 4l-414 472q-8 8 0 20l72 62q12 8 20-2z m554 202q16-104-16-166q-50-88-154-62q-56 12-100-32l-82-78l-68 78l68 70q24 24 31 53t6 65t5 58q12 56 140 112q12 6 18-3t2-15q-12-12-46-80q-14-10-12-35t40-53q58-40 96 22q6 12 26 41t22 33q4 10 13 9t11-17z m-858-684l254 248l76-86l-246-242q-20-20-38-4l-46 46q-22 18 0 38z" horiz-adv-x="1000" /> +<glyph glyph-name="hourglass" unicode="" d="m560 622q0-44-48-96t-97-99t-49-77t49-76t97-97t48-97l0-118q0-34-86-73t-194-39t-194 39t-86 73l0 118q0 46 48 97t97 97t49 76t-49 77t-97 99t-48 96l0 118q0 32 87 71t193 39t193-39t87-71l0-118z m-482 112l-18-14q-4-8 4-14q92-52 216-52q132 0 220 50q14 10-16 30q-96 54-202 54q-120 0-204-54z m228-384q0 18 4 33t18 33t20 25t31 31t29 28q92 92 92 122l2 50q-100-54-222-54t-222 54l4-50q0-32 90-122q6-6 22-21t23-22l19-19t17-21t11-20t9-23t3-24q0-10-1-19t-6-18t-8-16t-11-17l-12-15t-15-16t-16-15t-18-16t-17-16q-90-90-90-122l0-66q8 4 66 23t92 43t34 58q0 30 26 30t26-30q0-34 33-58t94-43t67-23l0 66q0 30-92 122q-4 4-21 20t-22 21t-18 19t-18 22t-12 20t-9 23t-2 23z" horiz-adv-x="560" /> +<glyph glyph-name="network" unicode="" d="m224 504q-22 0-42-10q-48 52-92 128q54 74 128 118q92-38 152-82q-6-16-6-32q0-6 4-22q-62-48-116-104q-16 4-28 4z m-98-98q0-34 20-60q-60-114-80-232q-66 106-66 236q0 110 50 206q38-62 84-112q-8-24-8-38z m336 318q-28 0-50-14q-58 42-114 70q84 30 162 30q120 0 230-62q-76-14-162-50q-26 26-66 26z m146-460q-160 24-290 112q4 20 4 30q0 24-14 52q38 44 98 90q26-20 56-20q14 0 38 8q94-108 134-240q-16-14-26-32z m128-132q38 14 54 60q58 4 108 18q-46-146-166-232q6 48 6 98q0 10-1 28t-1 28z m-150 66q-190-96-304-272q-90 36-158 110q12 144 80 274q6-2 20-2q30 0 52 14q142-98 310-124z m184 492q150-136 150-340q0-22-4-66q-64-18-130-24q-24 56-88 60q-48 146-148 264q10 20 10 42l0 10q100 42 210 54z m-136-544q14-10 32-18q2-18 2-52q0-80-14-144q-86-42-194-42q-58 0-112 12q110 160 286 244z" horiz-adv-x="920" /> +<glyph glyph-name="brush" unicode="" d="m118 170q38 34 85 29t87-45q42-40 48-87t-30-83q-86-84-228-102q-84-12-80 14q0 4 6 10q52 60 64 145t48 119z m840 646q26-26-148-248t-292-338q-38-38-124-104q-8-6-16 8q-18 34-48 64q-32 32-66 48q-16 6-8 16q64 84 104 122q118 116 344 287t254 145z" horiz-adv-x="962" /> +<glyph glyph-name="language" unicode="" d="m988 306q30-82-10-176t-134-160q-10 0-12 2t-16 19t-16 19q-2 6 2 10q86 60 117 152t-11 148q-16-38-39-76t-59-80t-86-65t-106-15q-52 6-84 41t-32 93q0 84 60 148q50 50 114 66l-2 100q-140-24-146-24q-6-2-10 4q0 2-5 29t-5 31q-2 2 1 4t7 2l156 28q0 110-2 114q0 8 8 8q46 0 52 2q10 0 10-8l0-104q158 22 164 22q8 4 10-6q0-2 4-23t4-25q4-10-4-12l-176-30l0-102l12 0q86 0 148-36t86-100z m-370-160q28-6 62 6l-4 214q-34-12-60-40q-44-44-44-108q0-66 46-72z m122 28q28 24 58 68t45 79t7 41q-36 18-96 18q-2 0-6-1t-6-1z m-448 382q10-28 53-165t83-261t40-126q0-4-4-4l-86 0q-6 0-6 4l-50 166l-176 0q-48-164-50-166q0-4-6-4l-86 0q-4 0-4 4q10 18 176 552q2 8 10 8l96 0q10 0 10-8z m-130-316l144 0l-72 264z" horiz-adv-x="1001" /> +<glyph glyph-name="key" unicode="" d="m774 612q20-116-28-215t-150-117q-66-12-130-2l-118-194l-70-12l-104-166q-14-28-46-32l-76-14q-12-4-22 4t-12 22l-16 98q-8 30 12 56l258 386q-24 50-38 120q-18 106 53 187t185 101q106 20 195-45t107-177z m-126-76q30 44 21 97t-51 83q-42 32-92 22t-80-54q-8-12-12-23t-1-20t5-16t13-17t18-15t22-16t23-17q6-4 22-16t23-16t19-12t19-8t17 1t18 8t16 19z" horiz-adv-x="780" /> +<glyph glyph-name="flow-branch" unicode="" d="m640 650q0-80-74-110q-6-58-28-101t-61-69t-68-38t-75-26q-42-14-63-22t-47-24t-38-40t-16-60q70-30 70-110q0-50-35-85t-85-35t-85 35t-35 85q0 78 72 112l0 378q-72 34-72 110q0 50 35 85t85 35t85-35t35-85q0-76-72-110l0-204q40 30 138 60q58 18 84 29t51 41t29 76q-70 32-70 108q0 50 35 85t85 35t85-35t35-85z m-588 0q0-28 20-48t48-20t49 20t21 48q0 30-21 50t-49 20t-48-20t-20-50z m68-668q28 0 49 20t21 48q0 30-21 50t-49 20t-48-20t-20-50q0-28 20-48t48-20z m400 600q28 0 49 20t21 48q0 30-21 50t-49 20t-48-20t-20-50q0-28 20-48t48-20z" horiz-adv-x="640" /> +<glyph glyph-name="puzzle" unicode="" d="m586 402q-37 0-64-34t-27-82t27-84t64-34q22 0 43 13q26 17 37 11t12-24l0-144q0-31-24-54t-55-23l-143 0q-16 0-23 9t2 31q21 25 21 51q0 38-34 64t-83 26t-83-26t-35-64q0-22 13-44q17-26 12-37t-25-10l-143 0q-33 0-55 23t-23 54l0 144q0 16 9 23t31-3q24-20 51-20q38 0 65 34t27 84t-27 82t-65 34q-21 0-42-13q-26-17-38-12t-11 25l0 91q0 33 23 56t55 23l143 0q19 0 25 10t-11 37q-14 20-14 44q0 38 35 64t83 26t83-26t34-64q0-26-21-51q-10-21-2-31t23-9l143 0q31 0 55-23t24-56l0-91q0-16-10-23t-30 3q-24 20-52 20z" horiz-adv-x="678" /> +<glyph glyph-name="mail-1" unicode="" d="m467 366l-449 210l0 109l893 0l0-109z m0-123l444 210l0-437l-893 0l0 438z" horiz-adv-x="928" /> +<glyph glyph-name="equalizer" unicode="" d="m576 239l0-112l-55 0l0-167q0-23-17-40t-39-17t-39 17t-17 40l0 167l-56 0l0 112l56 0l0 503q0 24 17 39t38 16q24 0 41-16t16-39l0-503l55 0z m335 335l0-112l-55 0l0-502q0-23-16-40t-41-17q-23 0-39 17t-16 40l0 502l-56 0l0 112l56 0l0 168q0 24 16 39t39 16t41-16t16-39l0-168l55 0z m-670-112l0-111l-55 0l0-391q0-23-16-40t-40-17q-23 0-39 17t-17 40l0 391l-56 0l0 111l56 0l0 280q0 24 16 39t40 16t40-16t16-39l0-280l55 0z" horiz-adv-x="928" /> +<glyph glyph-name="users" unicode="" d="m0 49q20 7 60 22t69 26t50 22q37 19 57 56t21 76q0 27-31 64q-19 21-33 60q-45 18-45 76q0 43 14 61q-5 39-9 82q-5 55 26 108t84 84t110 32q43 0 85-19t73-50t48-72t14-83q-4-55-8-82q14-19 14-61q0-58-45-76q-15-41-32-60q-32-37-32-64q0-39 20-76t58-56q29-15 92-38t113-43t66-38q18-17 28-47t10-51l1-21h-878v168z m705 299q0 34 12 50q-5 32-7 67q-4 45 21 89t69 72t90 27t89-27t69-72t22-89q-2-35-8-67q12-16 12-50q0-48-36-62q-12-33-27-50q-9-10-13-16t-9-16t-4-20q0-32 17-62t47-46q17-9 42-19t60-22t50-19v-135h-254q0 4 0 11t-3 26t-7 36t-15 38t-23 33q-23 25-53 44t-79 37q27 34 27 78q0 10-5 20t-8 16t-12 16q-14 15-27 49q-37 16-37 63z" horiz-adv-x="1201.2" /> +<glyph glyph-name="group" unicode="" d="m0 106l0 134q0 26 18 32l171 80q-66 39-68 131q0 56 35 103q37 41 90 43q31 0 63-19q-49-125 23-237q-12-11-25-19l-114-55q-48-23-52-84l0-143l-114 0q-25 0-27 34z m193-59l0 168q0 27 22 37l152 70l57 28q-37 23-60 66t-22 94q0 76 46 130t110 54t109-54t45-130q0-106-78-158l61-30l146-70q24-10 24-37l0-168q-2-37-37-41l-541 0q-14 2-24 14t-10 27z m473 330q68 106 22 231q31 19 66 21q49 0 90-43q35-41 35-103q0-82-65-131l168-80q18-10 18-32l0-134q0-32-27-34l-118 0l0 143q0 57-50 84l-110 53q-15 8-29 25z" horiz-adv-x="1000" /> +<glyph glyph-name="shuffle" unicode="🔀" d="m372 582q-34-52-77-153q-12 25-20 41t-23 35t-28 32t-36 19t-45 8h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q139 0 229-125z m628-446q0-8-5-13l-179-179q-5-5-12-5q-8 0-13 6t-5 12v107q-18 0-48 0t-45-1t-41 1t-39 3t-36 6t-35 10t-32 16t-33 22t-31 30t-31 39q33 52 76 152q12-25 20-40t23-36t28-31t35-20t46-8h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z m0 500q0-8-5-13l-179-179q-5-5-12-5q-8 0-13 6t-5 12v107h-143q-27 0-49-8t-38-25t-29-35t-25-43q-18-34-43-95q-16-37-28-62t-30-59t-36-55t-41-47t-50-38t-60-23t-71-10h-125q-8 0-13 5t-5 13v107q0 8 5 13t13 5h125q27 0 48 9t39 25t28 34t26 43q17 35 43 96q16 36 28 62t30 58t36 56t41 46t50 38t59 24t72 9h143v107q0 8 5 13t13 5q6 0 13-5l178-178q5-5 5-13z" horiz-adv-x="1000" /> +</font> +</defs> +</svg>
\ No newline at end of file diff --git a/admin/themes/default/fontello/font/fontello.ttf b/admin/themes/default/fontello/font/fontello.ttf Binary files differnew file mode 100644 index 000000000..328a9c5f9 --- /dev/null +++ b/admin/themes/default/fontello/font/fontello.ttf diff --git a/admin/themes/default/fontello/font/fontello.woff b/admin/themes/default/fontello/font/fontello.woff Binary files differnew file mode 100644 index 000000000..9e17f2e50 --- /dev/null +++ b/admin/themes/default/fontello/font/fontello.woff diff --git a/admin/themes/default/icon/index.php b/admin/themes/default/icon/index.php index 41732f2fd..c8de97f60 100644 --- a/admin/themes/default/icon/index.php +++ b/admin/themes/default/icon/index.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ diff --git a/admin/themes/default/icon/plug_activate.png b/admin/themes/default/icon/plug_activate.png Binary files differdeleted file mode 100644 index feb97a1c9..000000000 --- a/admin/themes/default/icon/plug_activate.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_activate_grey.png b/admin/themes/default/icon/plug_activate_grey.png Binary files differdeleted file mode 100644 index bf2a9be53..000000000 --- a/admin/themes/default/icon/plug_activate_grey.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_deactivate.png b/admin/themes/default/icon/plug_deactivate.png Binary files differdeleted file mode 100644 index 8401ad8b9..000000000 --- a/admin/themes/default/icon/plug_deactivate.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_deactivate_grey.png b/admin/themes/default/icon/plug_deactivate_grey.png Binary files differdeleted file mode 100644 index a7e55e669..000000000 --- a/admin/themes/default/icon/plug_deactivate_grey.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_delete.png b/admin/themes/default/icon/plug_delete.png Binary files differdeleted file mode 100644 index 285e53e19..000000000 --- a/admin/themes/default/icon/plug_delete.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_delete_grey.png b/admin/themes/default/icon/plug_delete_grey.png Binary files differdeleted file mode 100644 index d3d070bfc..000000000 --- a/admin/themes/default/icon/plug_delete_grey.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_install.png b/admin/themes/default/icon/plug_install.png Binary files differdeleted file mode 100644 index bef78e171..000000000 --- a/admin/themes/default/icon/plug_install.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_install_grey.png b/admin/themes/default/icon/plug_install_grey.png Binary files differdeleted file mode 100644 index 3bd56be3c..000000000 --- a/admin/themes/default/icon/plug_install_grey.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_uninstall.png b/admin/themes/default/icon/plug_uninstall.png Binary files differdeleted file mode 100644 index 9fd420ad7..000000000 --- a/admin/themes/default/icon/plug_uninstall.png +++ /dev/null diff --git a/admin/themes/default/icon/plug_uninstall_grey.png b/admin/themes/default/icon/plug_uninstall_grey.png Binary files differdeleted file mode 100644 index 4d6291cee..000000000 --- a/admin/themes/default/icon/plug_uninstall_grey.png +++ /dev/null diff --git a/admin/themes/default/icon/ranks.png b/admin/themes/default/icon/ranks.png Binary files differdeleted file mode 100644 index 47710e87f..000000000 --- a/admin/themes/default/icon/ranks.png +++ /dev/null diff --git a/admin/themes/default/icon/ranks_grey.png b/admin/themes/default/icon/ranks_grey.png Binary files differdeleted file mode 100644 index f9757b998..000000000 --- a/admin/themes/default/icon/ranks_grey.png +++ /dev/null diff --git a/admin/themes/default/icon/sync_metadata.png b/admin/themes/default/icon/sync_metadata.png Binary files differdeleted file mode 100644 index c527e2b04..000000000 --- a/admin/themes/default/icon/sync_metadata.png +++ /dev/null diff --git a/admin/themes/default/icon/sync_metadata_pink.png b/admin/themes/default/icon/sync_metadata_pink.png Binary files differdeleted file mode 100644 index 954c69612..000000000 --- a/admin/themes/default/icon/sync_metadata_pink.png +++ /dev/null diff --git a/admin/themes/default/icon/synchronize.png b/admin/themes/default/icon/synchronize.png Binary files differdeleted file mode 100644 index 767bb3b6d..000000000 --- a/admin/themes/default/icon/synchronize.png +++ /dev/null diff --git a/admin/themes/default/images/jgrowl-alert.png b/admin/themes/default/images/jgrowl-alert.png Binary files differdeleted file mode 100644 index 388fcbb81..000000000 --- a/admin/themes/default/images/jgrowl-alert.png +++ /dev/null diff --git a/admin/themes/default/images/jgrowl-check.png b/admin/themes/default/images/jgrowl-check.png Binary files differdeleted file mode 100644 index b6a649a1b..000000000 --- a/admin/themes/default/images/jgrowl-check.png +++ /dev/null diff --git a/admin/themes/default/images/jgrowl-error.png b/admin/themes/default/images/jgrowl-error.png Binary files differdeleted file mode 100644 index 48ef138c7..000000000 --- a/admin/themes/default/images/jgrowl-error.png +++ /dev/null diff --git a/admin/themes/default/index.php b/admin/themes/default/index.php index 41732f2fd..c8de97f60 100644 --- a/admin/themes/default/index.php +++ b/admin/themes/default/index.php @@ -2,7 +2,7 @@ // +-----------------------------------------------------------------------+ // | Piwigo - a PHP based photo gallery | // +-----------------------------------------------------------------------+ -// | Copyright(C) 2008-2013 Piwigo Team http://piwigo.org | +// | Copyright(C) 2008-2014 Piwigo Team http://piwigo.org | // | Copyright(C) 2003-2008 PhpWebGallery Team http://phpwebgallery.net | // | Copyright(C) 2002-2003 Pierrick LE GALL http://le-gall.net/pierrick | // +-----------------------------------------------------------------------+ diff --git a/admin/themes/default/js/common.js b/admin/themes/default/js/common.js new file mode 100644 index 000000000..a017115db --- /dev/null +++ b/admin/themes/default/js/common.js @@ -0,0 +1,55 @@ +function array_delete(arr, item) { + var i = arr.indexOf(item); + if (i != -1) arr.splice(i, 1); +} + +function str_repeat(i, m) { + for (var o = []; m > 0; o[--m] = i); + return o.join(''); +} + +function sprintf() { + var i = 0, a, f = arguments[i++], o = [], m, p, c, x, s = ''; + while (f) { + if (m = /^[^\x25]+/.exec(f)) { + o.push(m[0]); + } + else if (m = /^\x25{2}/.exec(f)) { + o.push('%'); + } + else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) { + if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) { + throw('Too few arguments.'); + } + if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) { + throw('Expecting number but found ' + typeof(a)); + } + + switch (m[7]) { + case 'b': a = a.toString(2); break; + case 'c': a = String.fromCharCode(a); break; + case 'd': a = parseInt(a); break; + case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break; + case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break; + case 'o': a = a.toString(8); break; + case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break; + case 'u': a = Math.abs(a); break; + case 'x': a = a.toString(16); break; + case 'X': a = a.toString(16).toUpperCase(); break; + } + + a = (/[def]/.test(m[7]) && m[2] && a >= 0 ? '+'+ a : a); + c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' '; + x = m[5] - String(a).length - s.length; + p = m[5] ? str_repeat(c, x) : ''; + o.push(s + (m[4] ? a + p : p + a)); + } + else { + throw('Huh ?!'); + } + + f = f.substring(m[0].length); + } + + return o.join(''); +}
\ No newline at end of file diff --git a/admin/themes/default/js/jquery.geoip.js b/admin/themes/default/js/jquery.geoip.js new file mode 100644 index 000000000..cba374ba5 --- /dev/null +++ b/admin/themes/default/js/jquery.geoip.js @@ -0,0 +1,62 @@ + +GeoIp = { + cache: {}, + pending: {}, + + get: function(ip, callback){ + if (!GeoIp.storageInit && window.localStorage) { + GeoIp.storageInit = true; + var cache = localStorage.getItem("freegeoip"); + if (cache) { + cache = JSON.parse(cache); + for (var key in cache) { + var data = cache[key]; + if ( (new Date()).getTime() - data.reqTime > 36 * 3600000) + delete cache[key]; + } + GeoIp.cache = cache; + } + jQuery(window).on("unload", function() { + localStorage.setItem("freegeoip", JSON.stringify(GeoIp.cache) ); + } ); + } + + if (GeoIp.cache.hasOwnProperty(ip)) + callback(GeoIp.cache[ip]); + else if (GeoIp.pending[ip]) + GeoIp.pending[ip].push(callback); + else { + GeoIp.pending[ip] = [callback]; + jQuery.ajax( { + url: "http://freegeoip.net/json/" + ip, + dataType: "jsonp", + cache: true, + timeout: 5000, + success: function(data) { + data.reqTime = (new Date()).getTime(); + var res=[]; + if (data.city) res.push(data.city); + if (data.region_name) res.push(data.region_name); + if (data.country_name) res.push(data.country_name); + data.fullName = res.join(", "); + + GeoIp.cache[ip] = data; + var callbacks = GeoIp.pending[ip]; + delete GeoIp.pending[ip]; + for (var i=0; i<callbacks.length; i++) + callbacks[i].call(null, data); + }, + + error: function() { + var data = {ip:ip, reqTime: (new Date()).getTime()}; + + GeoIp.cache[ip] = data; + var callbacks = GeoIp.pending[ip]; + delete GeoIp.pending[ip]; + for (var i=0; i<callbacks.length; i++) + callbacks[i].call(null, data); + } + }); + } + } +}
\ No newline at end of file diff --git a/admin/themes/default/js/menu_icons.js b/admin/themes/default/js/menu_icons.js deleted file mode 100644 index 1b77d03a2..000000000 --- a/admin/themes/default/js/menu_icons.js +++ /dev/null @@ -1,11 +0,0 @@ -Raphael("menubarUsers", 20, 16).path("M21.053,20.8c-1.132-0.453-1.584-1.698-1.584-1.698s-0.51,0.282-0.51-0.51s0.51,0.51,1.02-2.548c0,0,1.414-0.397,1.132-3.68h-0.34c0,0,0.849-3.51,0-4.699c-0.85-1.189-1.189-1.981-3.058-2.548s-1.188-0.454-2.547-0.396c-1.359,0.057-2.492,0.792-2.492,1.188c0,0-0.849,0.057-1.188,0.397c-0.34,0.34-0.906,1.924-0.906,2.321s0.283,3.058,0.566,3.624l-0.337,0.113c-0.283,3.283,1.132,3.68,1.132,3.68c0.509,3.058,1.019,1.756,1.019,2.548s-0.51,0.51-0.51,0.51s-0.452,1.245-1.584,1.698c-1.132,0.452-7.416,2.886-7.927,3.396c-0.511,0.511-0.453,2.888-0.453,2.888h26.947c0,0,0.059-2.377-0.452-2.888C28.469,23.686,22.185,21.252,21.053,20.8zM8.583,20.628c-0.099-0.18-0.148-0.31-0.148-0.31s-0.432,0.239-0.432-0.432s0.432,0.432,0.864-2.159c0,0,1.199-0.336,0.959-3.119H9.538c0,0,0.143-0.591,0.237-1.334c-0.004-0.308,0.006-0.636,0.037-0.996l0.038-0.426c-0.021-0.492-0.107-0.939-0.312-1.226C8.818,9.619,8.53,8.947,6.947,8.467c-1.583-0.48-1.008-0.385-2.159-0.336C3.636,8.179,2.676,8.802,2.676,9.139c0,0-0.72,0.048-1.008,0.336c-0.271,0.271-0.705,1.462-0.757,1.885v0.281c0.047,0.653,0.258,2.449,0.469,2.872l-0.286,0.096c-0.239,2.783,0.959,3.119,0.959,3.119c0.432,2.591,0.864,1.488,0.864,2.159s-0.432,0.432-0.432,0.432s-0.383,1.057-1.343,1.439c-0.061,0.024-0.139,0.056-0.232,0.092v5.234h0.575c-0.029-1.278,0.077-2.927,0.746-3.594C2.587,23.135,3.754,22.551,8.583,20.628zM30.913,11.572c-0.04-0.378-0.127-0.715-0.292-0.946c-0.719-1.008-1.008-1.679-2.59-2.159c-1.584-0.48-1.008-0.385-2.16-0.336C24.72,8.179,23.76,8.802,23.76,9.139c0,0-0.719,0.048-1.008,0.336c-0.271,0.272-0.709,1.472-0.758,1.891h0.033l0.08,0.913c0.02,0.231,0.022,0.436,0.027,0.645c0.09,0.666,0.21,1.35,0.33,1.589l-0.286,0.096c-0.239,2.783,0.96,3.119,0.96,3.119c0.432,2.591,0.863,1.488,0.863,2.159s-0.432,0.432-0.432,0.432s-0.053,0.142-0.163,0.338c4.77,1.9,5.927,2.48,6.279,2.834c0.67,0.667,0.775,2.315,0.746,3.594h0.48v-5.306c-0.016-0.006-0.038-0.015-0.052-0.021c-0.959-0.383-1.343-1.439-1.343-1.439s-0.433,0.239-0.433-0.432s0.433,0.432,0.864-2.159c0,0,0.804-0.229,0.963-1.841v-1.227c-0.001-0.018-0.001-0.033-0.003-0.051h-0.289c0,0,0.215-0.89,0.292-1.861V11.572z").scale(0.6, 0.6, 0, 0).attr({fill: "#464646", stroke: "none"}); - -Raphael("menubarAlbums", 20, 16).path("M6.812,17.202l7.396-3.665v-2.164h-0.834c-0.414,0-0.808-0.084-1.167-0.237v1.159l-7.396,3.667v2.912h2V17.202zM26.561,18.875v-2.913l-7.396-3.666v-1.158c-0.358,0.152-0.753,0.236-1.166,0.236h-0.832l-0.001,2.164l7.396,3.666v1.672H26.561zM16.688,18.875v-7.501h-2v7.501H16.688zM27.875,19.875H23.25c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C29.875,20.771,28.979,19.875,27.875,19.875zM8.125,19.875H3.5c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2h4.625c1.104,0,2-0.896,2-2v-4.625C10.125,20.771,9.229,19.875,8.125,19.875zM13.375,10.375H18c1.104,0,2-0.896,2-2V3.75c0-1.104-0.896-2-2-2h-4.625c-1.104,0-2,0.896-2,2v4.625C11.375,9.479,12.271,10.375,13.375,10.375zM18,19.875h-4.625c-1.104,0-2,0.896-2,2V26.5c0,1.104,0.896,2,2,2H18c1.104,0,2-0.896,2-2v-4.625C20,20.771,19.104,19.875,18,19.875z").scale(0.6, 0.6, 0, 0).attr({fill: "#464646", stroke: "none"}); - -Raphael("menubarPhotos", 20, 16).path("M2.5,4.833v22.334h27V4.833H2.5zM25.25,25.25H6.75V6.75h18.5V25.25zM11.25,14c1.426,0,2.583-1.157,2.583-2.583c0-1.427-1.157-2.583-2.583-2.583c-1.427,0-2.583,1.157-2.583,2.583C8.667,12.843,9.823,14,11.25,14zM24.251,16.25l-4.917-4.917l-6.917,6.917L10.5,16.333l-2.752,2.752v5.165h16.503V16.25z").scale(0.6, 0.6, 0, 0).attr({fill: "#464646", stroke: "none"}); - -Raphael("menubarPlugins", 20, 16).path("M3.739,13.619c0,0,3.516-4.669,5.592-3.642c2.077,1.027-0.414,2.795,1.598,3.719c2.011,0.924,5.048-0.229,4.376-2.899c-0.672-2.67-1.866-0.776-2.798-2.208c-0.934-1.432,4.586-4.59,4.586-4.59s3.361,6.651,4.316,4.911c1.157-2.105,3.193-4.265,5.305-1.025c0,0,1.814,2.412,0.246,3.434s-2.917,0.443-3.506,1.553c-0.586,1.112,3.784,4.093,3.784,4.093s-2.987,4.81-4.926,3.548c-1.939-1.262,0.356-3.364-2.599-3.989c-1.288-0.23-3.438,0.538-3.818,2.34c-0.13,2.709,1.604,2.016,2.797,3.475c1.191,1.457-4.484,4.522-4.484,4.522s-1.584-3.923-3.811-4.657c-2.227-0.735-0.893,2.135-2.917,2.531c-2.024,0.396-4.816-2.399-3.46-4.789c1.358-2.391,3.275-0.044,3.441-1.951C7.629,16.087,3.739,13.619,3.739,13.619z").scale(0.6, 0.6, 0, 0).attr({fill: "#464646", stroke: "none"}); - -Raphael("menubarTools", 20, 16).path("M26.834,14.693c1.816-2.088,2.181-4.938,1.193-7.334l-3.646,4.252l-3.594-0.699L19.596,7.45l3.637-4.242c-2.502-0.63-5.258,0.13-7.066,2.21c-1.907,2.193-2.219,5.229-1.039,7.693L5.624,24.04c-1.011,1.162-0.888,2.924,0.274,3.935c1.162,1.01,2.924,0.888,3.935-0.274l9.493-10.918C21.939,17.625,24.918,16.896,26.834,14.693z").scale(0.5, 0.5, 0, 0).attr({fill: "#464646", stroke: "none"}); - -Raphael("menubarConfiguration", 20, 16).path("M26.974,16.514l3.765-1.991c-0.074-0.738-0.217-1.454-0.396-2.157l-4.182-0.579c-0.362-0.872-0.84-1.681-1.402-2.423l1.594-3.921c-0.524-0.511-1.09-0.977-1.686-1.406l-3.551,2.229c-0.833-0.438-1.73-0.77-2.672-0.984l-1.283-3.976c-0.364-0.027-0.728-0.056-1.099-0.056s-0.734,0.028-1.099,0.056l-1.271,3.941c-0.967,0.207-1.884,0.543-2.738,0.986L7.458,4.037C6.863,4.466,6.297,4.932,5.773,5.443l1.55,3.812c-0.604,0.775-1.11,1.629-1.49,2.55l-4.05,0.56c-0.178,0.703-0.322,1.418-0.395,2.157l3.635,1.923c0.041,1.013,0.209,1.994,0.506,2.918l-2.742,3.032c0.319,0.661,0.674,1.303,1.085,1.905l4.037-0.867c0.662,0.72,1.416,1.351,2.248,1.873l-0.153,4.131c0.663,0.299,1.352,0.549,2.062,0.749l2.554-3.283C15.073,26.961,15.532,27,16,27c0.507,0,1.003-0.046,1.491-0.113l2.567,3.301c0.711-0.2,1.399-0.45,2.062-0.749l-0.156-4.205c0.793-0.513,1.512-1.127,2.146-1.821l4.142,0.889c0.411-0.602,0.766-1.243,1.085-1.905l-2.831-3.131C26.778,18.391,26.93,17.467,26.974,16.514zM20.717,21.297l-1.785,1.162l-1.098-1.687c-0.571,0.22-1.186,0.353-1.834,0.353c-2.831,0-5.125-2.295-5.125-5.125c0-2.831,2.294-5.125,5.125-5.125c2.83,0,5.125,2.294,5.125,5.125c0,1.414-0.573,2.693-1.499,3.621L20.717,21.297z").scale(0.5, 0.5, 0, 0).attr({fill: "#464646", stroke: "none"}); diff --git a/admin/themes/default/template/admin.tpl b/admin/themes/default/template/admin.tpl index 9e929d449..7fc9dc179 100644 --- a/admin/themes/default/template/admin.tpl +++ b/admin/themes/default/template/admin.tpl @@ -10,50 +10,47 @@ jQuery(document).ready(function(){ldelim} }); {/footer_script} -{combine_script id='raphael' load='async' path='themes/default/js/raphael.js'} -{combine_script id='raphael.menu_icons' require='raphael' load='async' path='admin/themes/default/js/menu_icons.js'} - <div id="menubar"> <div id="adminHome"><a href="{$U_ADMIN}">{'Administration Home'|@translate}</a></div> - <dl class="first"> - <dt class="rdion"><span id="menubarPhotos"> {'Photos'|@translate} </span></dt> - <dd> - <ul> - <li><a href="{$U_ADD_PHOTOS}">{'Add'|@translate}</a></li> - <li><a href="{$U_RATING}">{'Rating'|@translate}</a></li> - <li><a href="{$U_TAGS}">{'Tags'|@translate}</a></li> - <li><a href="{$U_RECENT_SET}">{'Recent photos'|@translate}</a></li> - <li><a href="{$U_BATCH}">{'Batch Manager'|@translate}</a></li> + <dl class="first"> + <dt class="rdion"><span class="icon-picture"> </span><span>{'Photos'|@translate} </span></dt> + <dd> + <ul> + <li><a class="icon-plus-circled" href="{$U_ADD_PHOTOS}">{'Add'|@translate}</a></li> + <li><a class="icon-star" href="{$U_RATING}">{'Rating'|@translate}</a></li> + <li><a class="icon-tags" href="{$U_TAGS}">{'Tags'|@translate}</a></li> + <li><a class="icon-clock" href="{$U_RECENT_SET}">{'Recent photos'|@translate}</a></li> + <li><a class="icon-pencil" href="{$U_BATCH}">{'Batch Manager'|@translate}</a></li> {if $NB_PHOTOS_IN_CADDIE > 0} - <li><a href="{$U_CADDIE}">{'Caddie'|@translate}<span class="adminMenubarCounter">{$NB_PHOTOS_IN_CADDIE}</span></a></li> + <li><a class="icon-flag" href="{$U_CADDIE}">{'Caddie'|@translate}<span class="adminMenubarCounter">{$NB_PHOTOS_IN_CADDIE}</span></a></li> {/if} - </ul> - </dd> - </dl> - <dl> - <dt class="rdion"><span id="menubarAlbums"> {'Albums'|@translate} </span></dt> + </ul> + </dd> + </dl> + <dl> + <dt class="rdion"><span class="icon-sitemap"> </span><span>{'Albums'|@translate} </span></dt> <dd> <ul> - <li><a href="{$U_CATEGORIES}">{'Manage'|@translate}</a></li> - <li><a href="{$U_CAT_OPTIONS}">{'Properties'|@translate}</a></li> + <li><a class="icon-folder-open" href="{$U_CATEGORIES}">{'Manage'|@translate}</a></li> + <li><a class="icon-pencil" href="{$U_CAT_OPTIONS}">{'Properties'|@translate}</a></li> </ul> </dd> - </dl> - <dl> - <dt class="rdion"><span id="menubarUsers"> {'Users'|@translate} </span></dt> - <dd> + </dl> + <dl> + <dt class="rdion"><span class="icon-users"> </span><span>{'Users'|@translate} </span></dt> + <dd> <ul> - <li><a href="{$U_USERS}">{'Manage'|@translate}</a></li> - <li><a href="{$U_GROUPS}">{'Groups'|@translate}</a></li> - <li><a href="{$U_NOTIFICATION_BY_MAIL}">{'Notification'|@translate}</a></li> + <li><a class="icon-user-add" href="{$U_USERS}">{'Manage'|@translate}</a></li> + <li><a class="icon-group" href="{$U_GROUPS}">{'Groups'|@translate}</a></li> + <li><a class="icon-mail-1" href="{$U_NOTIFICATION_BY_MAIL}">{'Notification'|@translate}</a></li> </ul> - </dd> - </dl> - <dl> - <dt class="rdion"><span id="menubarPlugins"> {'Plugins'|@translate} </span></dt> - <dd> + </dd> + </dl> + <dl> + <dt class="rdion"><span class="icon-puzzle"> </span><span>{'Plugins'|@translate} </span></dt> + <dd> <ul> - <li><a href="{$U_PLUGINS}">{'Manage'|@translate}</a></li> + <li><a class="icon-equalizer" href="{$U_PLUGINS}">{'Manage'|@translate}</a></li> </ul> <div id="pluginsMenuSeparator"></div> {if !empty($plugin_menu_items)} @@ -63,34 +60,34 @@ jQuery(document).ready(function(){ldelim} {/foreach} </ul> {/if} - </dd> - </dl> - <dl> - <dt class="rdion"><span id="menubarTools"> {'Tools'|@translate} </span></dt> - <dd> + </dd> + </dl> + <dl> + <dt class="rdion"><span class="icon-wrench"> </span><span>{'Tools'|@translate} </span></dt> + <dd> <ul> {if $ENABLE_SYNCHRONIZATION} - <li><a href="{$U_CAT_UPDATE}">{'Synchronize'|@translate}</a></li> - <li><a href="{$U_SITE_MANAGER}">{'Site manager'|@translate}</a></li> + <li><a class="icon-exchange" href="{$U_CAT_UPDATE}">{'Synchronize'|@translate}</a></li> + <li><a class="icon-flow-branch" href="{$U_SITE_MANAGER}">{'Site manager'|@translate}</a></li> {/if} - <li><a href="{$U_HISTORY_STAT}">{'History'|@translate}</a></li> - <li><a href="{$U_MAINTENANCE}">{'Maintenance'|@translate}</a></li> -{if isset($U_PENDING_COMMENTS)} - <li><a href="{$U_PENDING_COMMENTS}">{'Pending Comments'|@translate}</a></li> + <li><a class="icon-signal" href="{$U_HISTORY_STAT}">{'History'|@translate}</a></li> + <li><a class="icon-tools" href="{$U_MAINTENANCE}">{'Maintenance'|@translate}</a></li> +{if isset($U_COMMENTS)} + <li><a class="icon-chat" href="{$U_COMMENTS}">{'Comments'|@translate}{if $NB_PENDING_COMMENTS > 0}<span class="adminMenubarCounter" title="{'%d waiting for validation'|translate:$NB_PENDING_COMMENTS}">{$NB_PENDING_COMMENTS}</span>{/if}</a></li> {/if} - <li><a href="{$U_UPDATES}">{'Updates'|@translate}</a></li> + <li><a class="icon-arrows-cw" href="{$U_UPDATES}">{'Updates'|@translate}</a></li> </ul> - </dd> - </dl> - <dl class="last"> - <dt class="rdion"><span id="menubarConfiguration"> {'Configuration'|@translate} </span></dt> - <dd> + </dd> + </dl> + <dl class="last"> + <dt class="rdion"><span class="icon-cog"> </span><span>{'Configuration'|@translate} </span></dt> + <dd> <ul> - <li><a href="{$U_CONFIG_GENERAL}">{'Options'|@translate}</a></li> - <li><a href="{$U_CONFIG_MENUBAR}">{'Menu Management'|@translate}</a></li> - <li><a href="{$U_CONFIG_EXTENTS}">{'Templates'|@translate}</a></li> - <li><a href="{$U_CONFIG_LANGUAGES}">{'Languages'|@translate}</a></li> - <li><a href="{$U_CONFIG_THEMES}">{'Themes'|@translate}</a></li> + <li><a class="icon-cog-alt" href="{$U_CONFIG_GENERAL}">{'Options'|@translate}</a></li> + <li><a class="icon-menu" href="{$U_CONFIG_MENUBAR}">{'Menu Management'|@translate}</a></li> + <li><a class="icon-code" href="{$U_CONFIG_EXTENTS}">{'Templates'|@translate}</a></li> + <li><a class="icon-language" href="{$U_CONFIG_LANGUAGES}">{'Languages'|@translate}</a></li> + <li><a class="icon-brush" href="{$U_CONFIG_THEMES}">{'Themes'|@translate}</a></li> </ul> </dd> </dl> @@ -107,7 +104,7 @@ jQuery(document).ready(function(){ldelim} <li><a href="{$U_HELP}" onclick="popuphelp(this.href); return false;" title="{'Help'|@translate}"><img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/help.png" alt="(?)"></a></li> </ul> {/if} - + {if isset($errors)} <div class="errors"> <ul> diff --git a/admin/themes/default/template/batch_manager_global.tpl b/admin/themes/default/template/batch_manager_global.tpl index bb1311097..46e2aa77c 100644 --- a/admin/themes/default/template/batch_manager_global.tpl +++ b/admin/themes/default/template/batch_manager_global.tpl @@ -2,6 +2,8 @@ {include file='include/datepicker.inc.tpl'} {include file='include/colorbox.inc.tpl'} {include file='include/add_album.inc.tpl'} + +{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'} {combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'} {combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"} @@ -48,13 +50,14 @@ jQuery(document).ready(function() { } return true; }); - $(this).click(function(event) {console.log(event.shiftKey);$(this).triggerHandler("shclick",event)}); + $(this).click(function(event) { $(this).triggerHandler("shclick",event)}); }); } $('ul.thumbnails').enableShiftClick(); }); {/literal}{/footer_script} +{combine_css path='themes/default/js/plugins/jquery.tokeninput.css'} {combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'} {combine_script id='jquery.progressBar' load='footer' path='themes/default/js/plugins/jquery.progressbar.min.js'} {combine_script id='jquery.ajaxmanager' load='footer' path='themes/default/js/plugins/jquery.ajaxmanager.js'} @@ -73,7 +76,7 @@ jQuery(document).ready(function() {ldelim} newText: ' ({'new'|@translate})', animateDropdown: false, preventDuplicates: true, - allowCreation: true + allowFreeTagging: true } ); @@ -85,7 +88,7 @@ jQuery(document).ready(function() {ldelim} searchingText: '{'Searching...'|@translate}', animateDropdown: false, preventDuplicates: true, - allowCreation: false + allowFreeTagging: false } ); @@ -117,52 +120,6 @@ var height_str = '{'Height'|@translate}'; var max_width_str = '{'Maximum width'|@translate}'; var max_height_str = '{'Maximum height'|@translate}'; {literal} -function str_repeat(i, m) { - for (var o = []; m > 0; o[--m] = i); - return o.join(''); -} - -function sprintf() { - var i = 0, a, f = arguments[i++], o = [], m, p, c, x, s = ''; - while (f) { - if (m = /^[^\x25]+/.exec(f)) { - o.push(m[0]); - } - else if (m = /^\x25{2}/.exec(f)) { - o.push('%'); - } - else if (m = /^\x25(?:(\d+)\$)?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(f)) { - if (((a = arguments[m[1] || i++]) == null) || (a == undefined)) { - throw('Too few arguments.'); - } - if (/[^s]/.test(m[7]) && (typeof(a) != 'number')) { - throw('Expecting number but found ' + typeof(a)); - } - switch (m[7]) { - case 'b': a = a.toString(2); break; - case 'c': a = String.fromCharCode(a); break; - case 'd': a = parseInt(a); break; - case 'e': a = m[6] ? a.toExponential(m[6]) : a.toExponential(); break; - case 'f': a = m[6] ? parseFloat(a).toFixed(m[6]) : parseFloat(a); break; - case 'o': a = a.toString(8); break; - case 's': a = ((a = String(a)) && m[6] ? a.substring(0, m[6]) : a); break; - case 'u': a = Math.abs(a); break; - case 'x': a = a.toString(16); break; - case 'X': a = a.toString(16).toUpperCase(); break; - } - a = (/[def]/.test(m[7]) && m[2] && a >= 0 ? '+'+ a : a); - c = m[3] ? m[3] == '0' ? '0' : m[3].charAt(1) : ' '; - x = m[5] - String(a).length - s.length; - p = m[5] ? str_repeat(c, x) : ''; - o.push(s + (m[4] ? a + p : p + a)); - } - else { - throw('Huh ?!'); - } - f = f.substring(m[0].length); - } - return o.join(''); -} function progress(success) { jQuery('#progressBar').progressBar(derivatives.done, { @@ -676,15 +633,15 @@ $(document).ready(function() { {'Dimensions'|@translate} <blockquote> - {'Width'|@translate} <span id="filter_dimension_width_info">{'between %d and %d pixels'|@translate|sprintf:$dimensions.selected.min_width:$dimensions.selected.max_width}</span> + {'Width'|@translate} <span id="filter_dimension_width_info">{'between %d and %d pixels'|@translate:$dimensions.selected.min_width:$dimensions.selected.max_width}</span> | <a class="dimensions-choice" data-type="width" data-min="{$dimensions.bounds.min_width}" data-max="{$dimensions.bounds.max_width}">{'Reset'|@translate}</a> <div id="filter_dimension_width_slider"></div> - {'Height'|@translate} <span id="filter_dimension_height_info">{'between %d and %d pixels'|@translate|sprintf:$dimensions.selected.min_height:$dimensions.selected.max_height}</span> + {'Height'|@translate} <span id="filter_dimension_height_info">{'between %d and %d pixels'|@translate:$dimensions.selected.min_height:$dimensions.selected.max_height}</span> | <a class="dimensions-choice" data-type="height" data-min="{$dimensions.bounds.min_height}" data-max="{$dimensions.bounds.max_height}">{'Reset'|@translate}</a> <div id="filter_dimension_height_slider"></div> - {'Ratio'|@translate} ({'Width'|@translate}/{'Height'|@translate}) <span id="filter_dimension_ratio_info">{'between %.2f and %.2f'|@translate|sprintf:$dimensions.selected.min_ratio:$dimensions.selected.max_ratio}</span> + {'Ratio'|@translate} ({'Width'|@translate}/{'Height'|@translate}) <span id="filter_dimension_ratio_info">{'between %.2f and %.2f'|@translate:$dimensions.selected.min_ratio:$dimensions.selected.max_ratio}</span> {if isset($dimensions.ratio_portrait)} | <a class="dimensions-choice" data-type="ratio" data-min="{$dimensions.ratio_portrait.min}" data-max="{$dimensions.ratio_portrait.max}">{'Portrait'|@translate}</a> {/if} @@ -768,8 +725,8 @@ UL.thumbnails SPAN.wrap2 {ldelim} <span class="wrap2{if $isSelected} thumbSelected{/if}"> <div class="actions"><a href="{$thumbnail.FILE_SRC}" class="preview-box">{'Zoom'|@translate}</a> · <a href="{$thumbnail.U_EDIT}" target="_blank">{'Edit'|@translate}</a></div> {if $thumbnail.level > 0} - <em class="levelIndicatorB">{$pwg->l10n($pwg->sprintf('Level %d',$thumbnail.level))}</em> - <em class="levelIndicatorF" title="{'Who can see these photos?'|@translate} : ">{$pwg->l10n($pwg->sprintf('Level %d',$thumbnail.level))}</em> + <em class="levelIndicatorB">{'Level %d'|@sprintf:$thumbnail.level|@translate}</em> + <em class="levelIndicatorF" title="{'Who can see these photos?'|@translate} : ">{'Level %d'|@sprintf:$thumbnail.level|@translate}</em> {/if} <img src="{$thumbnail.thumb->get_url()}" alt="{$thumbnail.file}" title="{$thumbnail.TITLE|@escape:'html'}" {$thumbnail.thumb->get_size_htm()}> </span> @@ -810,7 +767,7 @@ UL.thumbnails SPAN.wrap2 {ldelim} <select name="selectAction"> <option value="-1">{'Choose an action'|@translate}</option> <option disabled="disabled">------------------</option> - <option value="delete">{'Delete selected photos'|@translate}</option> + <option value="delete" class="icon-trash">{'Delete selected photos'|@translate}</option> <option value="associate">{'Associate to album'|@translate}</option> <option value="move">{'Move to album'|@translate}</option> {if !empty($dissociate_options)} @@ -823,7 +780,7 @@ UL.thumbnails SPAN.wrap2 {ldelim} <option value="author">{'Set author'|@translate}</option> <option value="title">{'Set title'|@translate}</option> <option value="date_creation">{'Set creation date'|@translate}</option> - <option value="level">{'Who can see these photos?'|@translate}</option> + <option value="level" class="icon-lock">{'Who can see these photos?'|@translate}</option> <option value="metadata">{'Synchronize metadata'|@translate}</option> {if ($IN_CADDIE)} <option value="remove_from_caddie">{'Remove from caddie'|@translate}</option> @@ -884,14 +841,14 @@ UL.thumbnails SPAN.wrap2 {ldelim} <div id="action_author" class="bulkAction"> <label><input type="checkbox" name="remove_author"> {'remove author'|@translate}</label><br> {assign var='authorDefaultValue' value='Type here the author name'|@translate} -<input type="text" class="large" name="author" value="{$authorDefaultValue}" onfocus="this.value=(this.value=='{$authorDefaultValue}') ? '' : this.value;" onblur="this.value=(this.value=='') ? '{$authorDefaultValue}' : this.value;"> +<input type="text" class="large" name="author" value="{$authorDefaultValue}" onfocus="this.value=(this.value=='{$authorDefaultValue|@escape:javascript}') ? '' : this.value;" onblur="this.value=(this.value=='') ? '{$authorDefaultValue|@escape:javascript}' : this.value;"> </div> <!-- title --> <div id="action_title" class="bulkAction"> <label><input type="checkbox" name="remove_title"> {'remove title'|@translate}</label><br> {assign var='titleDefaultValue' value='Type here the title'|@translate} -<input type="text" class="large" name="title" value="{$titleDefaultValue}" onfocus="this.value=(this.value=='{$titleDefaultValue}') ? '' : this.value;" onblur="this.value=(this.value=='') ? '{$titleDefaultValue}' : this.value;"> +<input type="text" class="large" name="title" value="{$titleDefaultValue}" onfocus="this.value=(this.value=='{$titleDefaultValue|@escape:javascript}') ? '' : this.value;" onblur="this.value=(this.value=='') ? '{$titleDefaultValue|@escape:javascript}' : this.value;"> </div> <!-- date_creation --> diff --git a/admin/themes/default/template/batch_manager_unit.tpl b/admin/themes/default/template/batch_manager_unit.tpl index 7dee4fa51..859a9b6a0 100644 --- a/admin/themes/default/template/batch_manager_unit.tpl +++ b/admin/themes/default/template/batch_manager_unit.tpl @@ -2,6 +2,7 @@ {include file='include/datepicker.inc.tpl'} {include file='include/colorbox.inc.tpl'} +{combine_css path='themes/default/js/plugins/jquery.tokeninput.css'} {combine_script id='jquery.tokeninput' load='async' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'} {footer_script require='jquery.tokeninput'} jQuery(document).ready(function() {ldelim} @@ -14,7 +15,7 @@ jQuery(document).ready(function() {ldelim} newText: ' ({'new'|@translate})', animateDropdown: false, preventDuplicates: true, - allowCreation: true + allowFreeTagging: true } ); diff --git a/admin/themes/default/template/cat_list.tpl b/admin/themes/default/template/cat_list.tpl index 859034a77..5fe54b9eb 100644 --- a/admin/themes/default/template/cat_list.tpl +++ b/admin/themes/default/template/cat_list.tpl @@ -1,8 +1,6 @@ {footer_script require='jquery.ui.sortable'}{literal} jQuery(document).ready(function(){ - jQuery(".catPos").hide(); jQuery(".drag_button").show(); - jQuery("#manualOrder").hide(); jQuery(".categoryLi").css("cursor","move"); jQuery(".categoryUl").sortable({ axis: "y", @@ -12,7 +10,7 @@ jQuery(document).ready(function(){ jQuery("#notManualOrder").hide(); jQuery("#formAutoOrder").hide(); jQuery("#formCreateAlbum").hide(); - }, + } }); jQuery("#categoryOrdering").submit(function(){ @@ -62,6 +60,7 @@ jQuery(document).ready(function(){ <p class="showCreateAlbum" id="notManualOrder"> <a href="#" id="addAlbumOpen">{'create a new album'|@translate}</a> {if count($categories)}| <a href="#" id="autoOrderOpen">{'apply automatic sort order'|@translate}</a>{/if} + {if ($PARENT_EDIT)}| <a href="{$PARENT_EDIT}"></span>{'edit'|@translate}</a>{/if} </p> <form id="formCreateAlbum" action="{$F_ACTION}" method="post" style="display:none;"> <fieldset> @@ -104,7 +103,7 @@ jQuery(document).ready(function(){ <form id="categoryOrdering" action="{$F_ACTION}" method="post"> <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> - <p id="manualOrder"> + <p id="manualOrder" style="display:none"> <input class="submit" name="submitManualOrder" type="submit" value="{'Save manual order'|@translate}"> {'... or '|@translate} <a href="#" id="cancelManualOrder">{'cancel manual order'|@translate}</a> </p> @@ -115,28 +114,21 @@ jQuery(document).ready(function(){ <li class="categoryLi{if $category.IS_VIRTUAL} virtual_cat{/if}" id="cat_{$category.ID}"> <!-- category {$category.ID} --> <p class="albumTitle"> - <img src="{$themeconf.admin_icon_dir}/cat_move.png" class="button drag_button" style="display:none;" alt="{'Drag to re-order'|@translate}" title="{'Drag to re-order'|@translate}"> + <img src="{$themeconf.admin_icon_dir}/cat_move.png" class="drag_button" style="display:none;" alt="{'Drag to re-order'|@translate}" title="{'Drag to re-order'|@translate}"> <strong><a href="{$category.U_CHILDREN}" title="{'manage sub-albums'|@translate}">{$category.NAME}</a></strong> + <span class="albumInfos"><span class="userSeparator">·</span> {$category.NB_PHOTOS|translate_dec:'%d photo':'%d photos'} <span class="userSeparator">·</span> {$category.NB_SUB_PHOTOS|translate_dec:'%d photo':'%d photos'} {$category.NB_SUB_ALBUMS|translate_dec:'in %d sub-album':'in %d sub-albums'}</span> </p> - <p class="catPos"> - <label> - {'Position'|@translate} : - <input type="text" size="4" name="catOrd[{$category.ID}]" maxlength="4" value="{$category.RANK}"> - </label> - </p> + <input type="hidden" name="catOrd[{$category.ID}]" value="{$category.RANK}"> <p class="albumActions"> - <a href="{$category.U_EDIT}">{'Edit'|@translate}</a> - {if isset($category.U_MANAGE_ELEMENTS) } - | <a href="{$category.U_MANAGE_ELEMENTS}">{'manage album photos'|@translate}</a> - {/if} - | <a href="{$category.U_CHILDREN}">{'manage sub-albums'|@translate}</a> + <a href="{$category.U_EDIT}"><span class="icon-pencil"></span>{'Edit'|@translate}</a> + | <a href="{$category.U_CHILDREN}"><span class="icon-sitemap"></span>{'manage sub-albums'|@translate}</a> {if isset($category.U_SYNC) } - | <a href="{$category.U_SYNC}">{'Synchronize'|@translate}</a> + | <a href="{$category.U_SYNC}"><span class="icon-exchange"></span>{'Synchronize'|@translate}</a> {/if} {if isset($category.U_DELETE) } - | <a href="{$category.U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'delete album'|@translate}</a> + | <a href="{$category.U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');"><span class="icon-trash"></span>{'delete album'|@translate}</a> {/if} {if cat_admin_access($category.ID)} | <a href="{$category.U_JUMPTO}">{'jump to album'|@translate} →</a> diff --git a/admin/themes/default/template/cat_modify.tpl b/admin/themes/default/template/cat_modify.tpl index e953ea322..52632ae92 100644 --- a/admin/themes/default/template/cat_modify.tpl +++ b/admin/themes/default/template/cat_modify.tpl @@ -29,23 +29,25 @@ <td id="albumLinks"> <p>{$INTRO}</p> -<ul style="padding-left:15px;"> +<ul> {if cat_admin_access($CAT_ID)} - <li><a href="{$U_JUMPTO}">{'jump to album'|@translate} →</a></li> + <li><a class="icon-eye" href="{$U_JUMPTO}">{'jump to album'|@translate} →</a></li> {/if} {if isset($U_MANAGE_ELEMENTS) } - <li><a href="{$U_MANAGE_ELEMENTS}">{'manage album photos'|@translate}</a></li> + <li><a class="icon-picture" href="{$U_MANAGE_ELEMENTS}">{'manage album photos'|@translate}</a></li> {/if} - <li><a href="{$U_CHILDREN}">{'manage sub-albums'|@translate}</a></li> + <li style="text-transform:lowercase;"><a class="icon-plus-circled" href="{$U_ADD_PHOTOS_ALBUM}">{'Add Photos'|translate}</a></li> + + <li><a class="icon-sitemap" href="{$U_CHILDREN}">{'manage sub-albums'|@translate}</a></li> {if isset($U_SYNC) } - <li><a href="{$U_SYNC}">{'Synchronize'|@translate}</a> ({'Directory'|@translate} = {$CAT_FULL_DIR})</li> + <li><a class="icon-exchange" href="{$U_SYNC}">{'Synchronize'|@translate}</a> ({'Directory'|@translate} = {$CAT_FULL_DIR})</li> {/if} {if isset($U_DELETE) } - <li><a href="{$U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'delete album'|@translate}</a></li> + <li><a class="icon-trash" href="{$U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'delete album'|@translate}</a></li> {/if} </ul> @@ -83,14 +85,14 @@ <p> <strong>{'Lock'|@translate}</strong> <br> - {html_radios name='visible' values='true,false'|@explode output='No,Yes'|@explode|translate selected=$CAT_VISIBLE} + {html_radios name='visible' values=['true','false'] output=['No'|translate,'Yes'|translate] selected=$CAT_VISIBLE} </p> {if isset($CAT_COMMENTABLE)} <p> <strong>{'Comments'|@translate}</strong> <br> - {html_radios name='commentable' values='false,true'|@explode output='No,Yes'|@explode|translate selected=$CAT_COMMENTABLE} + {html_radios name='commentable' values=['false','true'] output=['No'|translate,'Yes'|translate] selected=$CAT_COMMENTABLE} </p> {/if} diff --git a/admin/themes/default/template/cat_perm.tpl b/admin/themes/default/template/cat_perm.tpl index 718c7ba47..0415c87a4 100644 --- a/admin/themes/default/template/cat_perm.tpl +++ b/admin/themes/default/template/cat_perm.tpl @@ -76,7 +76,7 @@ jQuery(document).ready(function() { {if isset($nb_users_granted_indirect)} <p> - {'%u users have automatic permission because they belong to a granted group.'|@translate|@sprintf:$nb_users_granted_indirect} + {'%u users have automatic permission because they belong to a granted group.'|@translate:$nb_users_granted_indirect} <a href="#" id="indirectPermissionsDetailsHide" style="display:none">{'hide details'|@translate}</a> <a href="#" id="indirectPermissionsDetailsShow">{'show details'|@translate}</a> @@ -150,7 +150,7 @@ jQuery(document).ready(function() { <p style="margin:12px;text-align:left;"> <input class="submit" type="submit" value="{'Save Settings'|@translate}" name="submit"> - <label id="applytoSubAction" style="display:none;"><input type="checkbox" name="apply_on_sub">{'Apply to sub-albums'|@translate}</label> + <label id="applytoSubAction" style="display:none;"><input type="checkbox" name="apply_on_sub" {if $INHERIT}checked="checked"{/if}>{'Apply to sub-albums'|@translate}</label> </p> <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> diff --git a/admin/themes/default/template/comments.tpl b/admin/themes/default/template/comments.tpl index 67a392db7..3b3a40422 100644 --- a/admin/themes/default/template/comments.tpl +++ b/admin/themes/default/template/comments.tpl @@ -15,26 +15,26 @@ jQuery(document).ready(function(){ jQuery(".checkComment").click(function(event) { var checkbox = jQuery(this).children("input[type=checkbox]"); if (event.target.type !== 'checkbox') { - jQuery(checkbox).attr('checked', !jQuery(checkbox).is(':checked')); + jQuery(checkbox).prop('checked', !jQuery(checkbox).prop('checked')); } highlighComments(); }); jQuery("#commentSelectAll").click(function () { - jQuery(".checkComment input[type=checkbox]").attr('checked', true); + jQuery(".checkComment input[type=checkbox]").prop('checked', true); highlighComments(); return false; }); jQuery("#commentSelectNone").click(function () { - jQuery(".checkComment input[type=checkbox]").attr('checked', false); + jQuery(".checkComment input[type=checkbox]").prop('checked', false); highlighComments(); return false; }); jQuery("#commentSelectInvert").click(function () { jQuery(".checkComment input[type=checkbox]").each(function() { - jQuery(this).attr('checked', !$(this).is(':checked')); + jQuery(this).prop('checked', !$(this).prop('checked')); }); highlighComments(); return false; @@ -43,10 +43,16 @@ jQuery(document).ready(function(){ }); {/literal}{/footer_script} -<div class="titrePage"> - <h2>{'Pending Comments'|@translate} {$TABSHEET_TITLE}</h2> +<h2>{'User comments'|@translate} {$TABSHEET_TITLE}</h2> + +<div class="commentFilter"> + <a href="{$F_ACTION}&filter=all" class="{if $filter == 'all'}commentFilterSelected{/if}">{'All'|@translate}</a> ({$nb_total}) + | <a href="{$F_ACTION}&filter=pending" class="{if $filter == 'pending'}commentFilterSelected{/if}">{'Waiting'|@translate}</a> ({$nb_pending}) +{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} </div> + + {if !empty($comments) } <form method="post" action="{$F_ACTION}" id="pendingComments"> @@ -59,7 +65,7 @@ jQuery(document).ready(function(){ <td> <div class="comment"> <a class="illustration" href="{$comment.U_PICTURE}"><img src="{$comment.TN_SRC}"></a> - <p class="commentHeader"><strong>{$comment.AUTHOR}</strong> - <em>{$comment.DATE}</em></p> + <p class="commentHeader">{if $comment.IS_PENDING}<span class="pendingFlag">{'Waiting'|@translate}</span> - {/if}<strong>{$comment.AUTHOR}</strong> - <em>{$comment.DATE}</em></p> <blockquote>{$comment.CONTENT}</blockquote> </div> </td> @@ -75,8 +81,8 @@ jQuery(document).ready(function(){ </p> <p class="bottomButtons"> - <input class="submit" type="submit" name="validate" value="{'Validate'|@translate}"> - <input class="submit" type="submit" name="reject" value="{'Reject'|@translate}"> + <input type="submit" name="validate" value="{'Validate'|@translate}"> + <input type="submit" name="reject" value="{'Reject'|@translate}"> </p> </form> diff --git a/admin/themes/default/template/configuration.tpl b/admin/themes/default/template/configuration.tpl index a2520b0c3..d3309e8a7 100644 --- a/admin/themes/default/template/configuration.tpl +++ b/admin/themes/default/template/configuration.tpl @@ -1,13 +1,5 @@ -{footer_script}{literal} -jQuery(document).ready(function(){ - jQuery("#activate_comments").change(function(){ - if ($(this).is(':checked')) { - jQuery("#comments_param_warp").show(); - } else { - jQuery("#comments_param_warp").hide(); - } - }); - +{footer_script} +(function(){ var targets = { 'input[name="rate"]' : '#rate_anonymous', 'input[name="allow_user_registration"]' : '#email_admin_on_new_user', @@ -22,47 +14,103 @@ jQuery(document).ready(function(){ jQuery(target).toggle(jQuery(selector).is(':checked')); (function(target){ - jQuery(selector).bind('change', function() { + jQuery(selector).on('change', function() { jQuery(target).toggle($(this).is(':checked')); }); })(target); }; -}); -{/literal}{/footer_script} +}()); +{/footer_script} <h2>{'Piwigo configuration'|@translate} {$TABSHEET_TITLE}</h2> {if !isset($default)} <form method="post" action="{$F_ACTION}" class="properties"{if isset($watermark)} enctype="multipart/form-data"{/if}> {/if} + <div id="configContent"> {if isset($main)} -<fieldset id="mainConf"> - <legend></legend> +<fieldset class="mainConf"> + <legend>{'Basic settings'|translate}</legend> <ul> <li> - - <label for="gallery_title">{'Gallery title'|@translate}</label> + <label for="gallery_title">{'Gallery title'|@translate}</label> <br> <input type="text" maxlength="255" size="50" name="gallery_title" id="gallery_title" value="{$main.CONF_GALLERY_TITLE}"> </li> <li> - - <label for="page_banner">{'Page banner'|@translate}</label> + <label for="page_banner">{'Page banner'|@translate}</label> <br> <textarea rows="5" cols="50" class="description" name="page_banner" id="page_banner">{$main.CONF_PAGE_BANNER}</textarea> </li> + + <li id="order_filters"> + <label>{'Default photos order'|@translate}</label> + + {foreach from=$main.order_by item=order} + <span class="filter {if isset($ORDER_BY_IS_CUSTOM)}transparent{/if}"> + <select name="order_by[]" {if isset($ORDER_BY_IS_CUSTOM)}disabled{/if}> + {html_options options=$main.order_by_options selected=$order} + </select> + <a class="removeFilter">{'delete'|@translate}</a> + </span> + {/foreach} + {if !isset($ORDER_BY_IS_CUSTOM)} + <a class="addFilter">{'Add a criteria'|@translate}</a> + {else} + <span class="order_by_is_custom">{'You can\'t define a default photo order because you have a custom setting in your local configuration.'|@translate}</span> + {/if} + </li> + </ul> + +{if !isset($ORDER_BY_IS_CUSTOM)} +{footer_script require='jquery'} +(function(){ +var max_fields = Math.ceil({$main.order_by_options|@count}/2); + +function updateFilters() { + var $selects = jQuery('#order_filters select'); + + jQuery('#order_filters .addFilter').toggle($selects.length <= max_fields); + jQuery('#order_filters .removeFilter').css('display', '').filter(':first').css('display', 'none'); + + $selects.find('option').removeAttr('disabled'); + $selects.each(function() { + $selects.not(this).find('option[value="'+ jQuery(this).val() +'"]').attr('disabled', 'disabled'); + }); +} + +jQuery('#order_filters').on('click', '.removeFilter', function() { + jQuery(this).parent('span.filter').remove(); + updateFilters(); +}); + +jQuery('#order_filters').on('change', 'select', updateFilters); + +jQuery('#order_filters .addFilter').click(function() { + jQuery(this).prev('span.filter').clone().insertBefore(jQuery(this)); + jQuery(this).prev('span.filter').children('select').val(''); + updateFilters(); +}); + +updateFilters(); +}()); +{/footer_script} +{/if} +</fieldset> + +<fieldset class="mainConf"> + <legend>{'Permissions'|translate}</legend> + <ul> <li> <label> <input type="checkbox" name="rate" {if ($main.rate)}checked="checked"{/if}> {'Allow rating'|@translate} </label> - </li> - <li id="rate_anonymous"> - <label> + <label id="rate_anonymous" class="no-bold"> <input type="checkbox" name="rate_anonymous" {if ($main.rate_anonymous)}checked="checked"{/if}> {'Rating by guests'|@translate} </label> @@ -73,10 +121,8 @@ jQuery(document).ready(function(){ <input type="checkbox" name="allow_user_registration" {if ($main.allow_user_registration)}checked="checked"{/if}> {'Allow user registration'|@translate} </label> - </li> - <li id="email_admin_on_new_user"> - <label> + <label id="email_admin_on_new_user" class="no-bold"> <input type="checkbox" name="email_admin_on_new_user" {if ($main.email_admin_on_new_user)}checked="checked"{/if}> {'Email admins when a new user registers'|@translate} </label> @@ -95,108 +141,92 @@ jQuery(document).ready(function(){ {'Mail address is obligatory for all users'|@translate} </label> </li> + </ul> - <li> - <label>{'Week starts on'|@translate} - {html_options name="week_starts_on" options=$main.week_starts_on_options selected=$main.week_starts_on_options_selected}</label> - </li> - - <li> - <label>{'Default photos order'|@translate}</label> - - {foreach from=$main.order_by item=order} - <span class="filter {if $ORDER_BY_IS_CUSTOM}transparent{/if}"> - <select name="order_by[]" {if $ORDER_BY_IS_CUSTOM}disabled{/if}> - {html_options options=$main.order_by_options selected=$order} - </select> - <a class="removeFilter">{'delete'|@translate}</a> - </span> - {/foreach} - - {if !$ORDER_BY_IS_CUSTOM} - <a class="addFilter">{'Add a criteria'|@translate}</a> - {else} - <span class="order_by_is_custom">{'You can\'t define a default photo order because you have a custom setting in your local configuration.'|@translate}</span> - {/if} - </li> - -{if !$ORDER_BY_IS_CUSTOM} {footer_script require='jquery'} -// counters for displaying of addFilter link -fields = {$main.order_by|@count}; max_fields = Math.ceil({$main.order_by_options|@count}/2); - -{literal} -function updateAddFilterLink() { - if (fields >= max_fields) { - $('.addFilter').css('display', 'none'); +jQuery("#activate_comments").change(function(){ + if ($(this).is(':checked')) { + jQuery("#comments_param_warp").show(); } else { - $('.addFilter').css('display', ''); + jQuery("#comments_param_warp").hide(); } -} - -function updateRemoveFilterTrigger() { - $(".removeFilter").click(function () { - $(this).parent('span.filter').remove(); - fields--; - updateAddFilterLink(); - }); - - $(".removeFilter").css('display', ''); - $(".filter:first .removeFilter").css('display', 'none'); -} - -jQuery(document).ready(function () { - $('.addFilter').click(function() { - $(this).prev('span.filter').clone().insertBefore($(this)); - $(this).prev('span.filter').children('select[name="order_by[]"]').val(''); - - fields++; - updateRemoveFilterTrigger(); - updateAddFilterLink(); - }); - - updateRemoveFilterTrigger(); - updateAddFilterLink(); }); -{/literal} {/footer_script} -{/if} +</fieldset> + +<fieldset class="mainConf"> + <legend>{'Miscellaneous'|translate}</legend> + <ul> + <li> + <label>{'Week starts on'|@translate} + {html_options name="week_starts_on" options=$main.week_starts_on_options selected=$main.week_starts_on_options_selected}</label> + </li> <li> <strong>{'Save visits in history for'|@translate}</strong> - <label> + <label class="no-bold"> <input type="checkbox" name="history_guest" {if ($main.history_guest)}checked="checked"{/if}> {'simple visitors'|@translate} </label> - <label> + <label class="no-bold"> <input type="checkbox" name="log" {if ($main.log)}checked="checked"{/if}> {'registered users'|@translate} </label> - <label> + <label class="no-bold"> <input type="checkbox" name="history_admin" {if ($main.history_admin)}checked="checked"{/if}> {'administrators'|@translate} </label> + </li> + <li> + <label>{'Mail theme'|@translate}</label> + + <div class="themeBoxes"> + {foreach from=$main.mail_theme_options item=name key=theme} + <div class="themeBox {if $main.mail_theme==$theme}themeDefault{/if}"> + <label> + <div class="themeName"> + <input type="radio" name="mail_theme" value="{$theme}" {if $main.mail_theme==$theme}checked{/if}> + {$name} + </div> + <div class="themeShot"> + <img src="{$ROOT_URL}themes/default/template/mail/screenshot-{$theme}.png" width="150"/> + </div> + </label> + <a href="{$ROOT_URL}themes/default/template/mail/screenshot-{$theme}.png">{'Preview'|translate}</a> + </div> + {/foreach} + </div> </li> + +{include file='include/colorbox.inc.tpl'} +{footer_script require='jquery'} +jQuery(".themeBoxes a").colorbox(); + +jQuery("input[name='mail_theme']").change(function() { + jQuery("input[name='mail_theme']").parents(".themeBox").removeClass("themeDefault"); + jQuery(this).parents(".themeBox").addClass("themeDefault"); +}); +{/footer_script} </ul> </fieldset> {/if} {if isset($comments)} -<fieldset id="commentsConf"> +<fieldset id="commentsConf" class="no-border"> <legend></legend> <ul> <li> <label> - <input type="checkbox" name="activate_comments" id="activate_comments"{if ($comments.activate_comments)}checked="checked"{/if}> + <input type="checkbox" name="activate_comments" id="activate_comments"{if ($comments.activate_comments)} checked="checked"{/if}> {'Activate comments'|@translate} </label> </li> </ul> - + <ul id="comments_param_warp"{if not ($comments.activate_comments)} style="display:none;"{/if}> <li> <label> @@ -211,7 +241,7 @@ jQuery(document).ready(function () { <input type="text" size="3" maxlength="4" name="nb_comment_page" id="nb_comment_page" value="{$comments.NB_COMMENTS_PAGE}"> </label> </li> - + <li> <label> {'Default comments order'|@translate} @@ -227,14 +257,14 @@ jQuery(document).ready(function () { {'Validation'|@translate} </label> </li> - + <li> <label> <input type="checkbox" name="comments_author_mandatory" {if ($comments.comments_author_mandatory)}checked="checked"{/if}> {'Username is mandatory'|@translate} </label> </li> - + <li> <label> <input type="checkbox" name="comments_email_mandatory" {if ($comments.comments_email_mandatory)}checked="checked"{/if}> @@ -248,6 +278,7 @@ jQuery(document).ready(function () { {'Allow users to edit their own comments'|@translate} </label> </li> + <li> <label> <input type="checkbox" name="user_can_delete_comment" {if ($comments.user_can_delete_comment)}checked="checked"{/if}> @@ -258,19 +289,19 @@ jQuery(document).ready(function () { <li id="notifyAdmin"> <strong>{'Notify administrators when a comment is'|@translate}</strong> - <label id="email_admin_on_comment_validation"> + <label id="email_admin_on_comment_validation" class="no-bold"> <input type="checkbox" name="email_admin_on_comment_validation" {if ($comments.email_admin_on_comment_validation)}checked="checked"{/if}> {'pending validation'|@translate} </label> - <label> + <label class="no-bold"> <input type="checkbox" name="email_admin_on_comment" {if ($comments.email_admin_on_comment)}checked="checked"{/if}> {'added'|@translate} </label> - <label id="email_admin_on_comment_edition"> + <label id="email_admin_on_comment_edition" class="no-bold"> <input type="checkbox" name="email_admin_on_comment_edition" {if ($comments.email_admin_on_comment_edition)}checked="checked"{/if}> {'modified'|@translate} </label> - <label id="email_admin_on_comment_deletion"> + <label id="email_admin_on_comment_deletion" class="no-bold"> <input type="checkbox" name="email_admin_on_comment_deletion" {if ($comments.email_admin_on_comment_deletion)}checked="checked"{/if}> {'deleted'|@translate} </label> </li> @@ -281,13 +312,12 @@ jQuery(document).ready(function () { {if isset($sizes)} {footer_script} -var labelMaxWidth = "{'Maximum width'|@translate}"; -var labelWidth = "{'Width'|@translate}"; +(function(){ + var labelMaxWidth = "{'Maximum width'|@translate}", + labelWidth = "{'Width'|@translate}", + labelMaxHeight = "{'Maximum height'|@translate}", + labelHeight = "{'Height'|@translate}"; -var labelMaxHeight = "{'Maximum height'|@translate}"; -var labelHeight = "{'Height'|@translate}"; -{literal} -jQuery(document).ready(function(){ function toggleResizeFields(size) { var checkbox = jQuery("#original_resize"); var needToggle = jQuery("#sizeEdit-original"); @@ -301,7 +331,9 @@ jQuery(document).ready(function(){ } toggleResizeFields("original"); - jQuery("#original_resize").click(function () {toggleResizeFields("original")}); + jQuery("#original_resize").click(function () { + toggleResizeFields("original"); + }); jQuery("a[id^='sizeEditOpen-']").click(function(){ var sizeName = jQuery(this).attr("id").split("-")[1]; @@ -329,9 +361,8 @@ jQuery(document).ready(function(){ jQuery(this).css("visibility", "hidden"); return false; }); - -}); -{/literal}{/footer_script} +}()); +{/footer_script} {html_style}{literal} .sizeEnable {width:50px;} @@ -345,7 +376,15 @@ jQuery(document).ready(function(){ <fieldset id="sizesConf"> <legend>{'Original Size'|@translate}</legend> - +{if $is_gd} + <div> + {'Resize after upload disabled due to the use of GD as graphic library'|@translate} + <input type="checkbox" name="original_resize" id="original_resize" disabled="disabled" style="visibility: hidden"> + <input type="hidden" name="original_resize_maxwidth" value="{$sizes.original_resize_maxwidth}"> + <input type="hidden" name="original_resize_maxheight" value="{$sizes.original_resize_maxheight}"> + <input type="hidden" name="original_resize_quality" value="{$sizes.original_resize_quality}"> + </div> +{else} <div> <label for="original_resize"> <input type="checkbox" name="original_resize" id="original_resize" {if ($sizes.original_resize)}checked="checked"{/if}> @@ -376,105 +415,108 @@ jQuery(document).ready(function(){ </td> </tr> </table> - +{/if} </fieldset> <fieldset id="multiSizesConf"> <legend>{'Multiple Size'|@translate}</legend> -<div class="showDetails"> - <a href="#" id="showDetails"{if $show_details or isset($ferrors)} style="display:none"{/if}>{'show details'|@translate}</a> -</div> + <div class="showDetails"> + <a href="#" id="showDetails"{if isset($ferrors)} style="display:none"{/if}>{'show details'|@translate}</a> + </div> -<table style="margin:0"> -{foreach from=$derivatives item=d key=type} - <tr> - <td> - <label> - <span class="sizeEnable"> - {if $d.must_enable} - ✔ - {else} - <input type="checkbox" name="d[{$type}][enabled]" {if $d.enabled}checked="checked"{/if}> - {/if} - </span> - {$type|@translate} - </label> - </td> + <table style="margin:0"> + {foreach from=$derivatives item=d key=type} + <tr> + <td> + <label> + <span class="sizeEnable"> + {if $d.must_enable} + ✔ + {else} + <input type="checkbox" name="d[{$type}][enabled]" {if $d.enabled}checked="checked"{/if}> + {/if} + </span> + {$type|@translate} + </label> + </td> - <td> - <span class="sizeDetails"{if isset($ferrors)} style="display:inline"{/if}>{$d.w} x {$d.h} {'pixels'|@translate}{if $d.crop}, {'Crop'|@translate|lower}{/if}</span> - </td> + <td> + <span class="sizeDetails"{if isset($ferrors)} style="display:inline"{/if}>{$d.w} x {$d.h} {'pixels'|@translate}{if $d.crop}, {'Crop'|@translate|lower}{/if}</span> + </td> - <td> - <span class="sizeDetails"{if isset($ferrors) and !isset($ferrors.$type)} style="display:inline"{/if}> - <a href="#" id="sizeEditOpen-{$type}" class="sizeEditOpen">{'edit'|@translate}</a> - </span> - </td> - </tr> - - <tr id="sizeEdit-{$type}" class="sizeEdit" {if isset($ferrors.$type)} style="display:block"{/if}> - <td colspan="3"> - <table class="sizeEditForm"> - {if !$d.must_square} - <tr> - <td colspan="2"> - <label> - <input type="checkbox" class="cropToggle" name="d[{$type}][crop]" {if $d.crop}checked="checked"{/if}> - {'Crop'|@translate} - </label> - </td> - </tr> - {/if} + <td> + <span class="sizeDetails"{if isset($ferrors) and !isset($ferrors.$type)} style="display:inline"{/if}> + <a href="#" id="sizeEditOpen-{$type}" class="sizeEditOpen">{'edit'|@translate}</a> + </span> + </td> + </tr> - <tr> - <td class="sizeEditWidth">{if $d.must_square or $d.crop}{'Width'|@translate}{else}{'Maximum width'|@translate}{/if}</td> + <tr id="sizeEdit-{$type}" class="sizeEdit" {if isset($ferrors.$type)} style="display:block"{/if}> + <td colspan="3"> + <table class="sizeEditForm"> + {if !$d.must_square} + <tr> + <td colspan="2"> + <label> + <input type="checkbox" class="cropToggle" name="d[{$type}][crop]" {if $d.crop}checked="checked"{/if}> + {'Crop'|@translate} + </label> + </td> + </tr> + {/if} + + <tr> + <td class="sizeEditWidth">{if $d.must_square or $d.crop}{'Width'|@translate}{else}{'Maximum width'|@translate}{/if}</td> + <td> + <input type="text" name="d[{$type}][w]" maxlength="4" size="4" value="{$d.w}"{if isset($ferrors.$type.w)} class="dError"{/if}> + {'pixels'|@translate} + {if isset($ferrors.$type.w)}<span class="dErrorDesc" title="{$ferrors.$type.w}">!</span>{/if} + </td> + </tr> + + {if !$d.must_square} + <tr> + <td class="sizeEditHeight">{if $d.crop}{'Height'|@translate}{else}{'Maximum height'|@translate}{/if}</td> + <td> + <input type="text" name="d[{$type}][h]" maxlength="4" size="4" value="{$d.h}"{if isset($ferrors.$type.h)} class="dError"{/if}> + {'pixels'|@translate} + {if isset($ferrors.$type.h)}<span class="dErrorDesc" title="{$ferrors.$type.h}">!</span>{/if} + </td> + </tr> + {/if} + <tr> + <td>{'Sharpen'|@translate}</td> <td> - <input type="text" name="d[{$type}][w]" maxlength="4" size="4" value="{$d.w}"{if isset($ferrors.$type.w)} class="dError"{/if}> - {'pixels'|@translate} - {if isset($ferrors.$type.w)}<span class="dErrorDesc" title="{$ferrors.$type.w}">!</span>{/if} + <input type="text" name="d[{$type}][sharpen]" maxlength="4" size="4" value="{$d.sharpen}"{if isset($ferrors.$type.sharpen)} class="dError"{/if}> + % + {if isset($ferrors.$type.sharpen)}<span class="dErrorDesc" title="{$ferrors.$type.sharpen}">!</span>{/if} </td> - </tr> + </tr> + </table> {* #sizeEdit *} + </td> + </tr> + {/foreach} + </table> - {if !$d.must_square} - <tr> - <td class="sizeEditHeight">{if $d.crop}{'Height'|@translate}{else}{'Maximum height'|@translate}{/if}</td> - <td> - <input type="text" name="d[{$type}][h]" maxlength="4" size="4" value="{$d.h}"{if isset($ferrors.$type.h)} class="dError"{/if}> - {'pixels'|@translate} - {if isset($ferrors.$type.h)}<span class="dErrorDesc" title="{$ferrors.$type.h}">!</span>{/if} - </td> - </tr> - {/if} - <tr> - <td>{'Sharpen'|@translate}</td> - <td> - <input type="text" name="d[{$type}][sharpen]" maxlength="4" size="4" value="{$d.sharpen}"{if isset($ferrors.$type.sharpen)} class="dError"{/if}> - % - {if isset($ferrors.$type.sharpen)}<span class="dErrorDesc" title="{$ferrors.$type.sharpen}">!</span>{/if} - </td> - </tr> - </table> {* #sizeEdit *} - </td> - </tr> -{/foreach} -</table> - -<p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails"> - {'Image Quality'|@translate} - <input type="text" name="resize_quality" value="{$resize_quality}" size="3" maxlength="3"{if isset($ferrors.resize_quality)} class="dError"{/if}> % - {if isset($ferrors.resize_quality)}<span class="dErrorDesc" title="{$ferrors.resize_quality}">!</span>{/if} -</p> -<p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails"> - <a href="{$F_ACTION}&action=restore_settings" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'Reset to default values'|@translate}</a> -</p> + <p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails"> + {'Image Quality'|@translate} + <input type="text" name="resize_quality" value="{$resize_quality}" size="3" maxlength="3"{if isset($ferrors.resize_quality)} class="dError"{/if}> % + {if isset($ferrors.resize_quality)}<span class="dErrorDesc" title="{$ferrors.resize_quality}">!</span>{/if} + </p> + <p style="margin:10px 0 0 0;{if isset($ferrors)} display:block;{/if}" class="sizeDetails"> + <a href="{$F_ACTION}&action=restore_settings" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'Reset to default values'|@translate}</a> + </p> {if !empty($custom_derivatives)} -<fieldset class="sizeDetails"><legend>{'custom'|@translate}</legend><table style="margin:0"> -{foreach from=$custom_derivatives item=time key=custom} -<tr><td><label><input type="checkbox" name="delete_custom_derivative_{$custom}"> {'Delete'|@translate} {$custom} ({'Last hit'|@translate}: {$time})</label></td></tr> -{/foreach} -</table></fieldset> + <fieldset class="sizeDetails"> + <legend>{'custom'|@translate}</legend> + <table style="margin:0"> + {foreach from=$custom_derivatives item=time key=custom} + <tr><td><label><input type="checkbox" name="delete_custom_derivative_{$custom}"> {'Delete'|@translate} {$custom} ({'Last hit'|@translate}: {$time})</label></td></tr> + {/foreach} + </table> + </fieldset> {/if} </fieldset> @@ -482,13 +524,12 @@ jQuery(document).ready(function(){ {if isset($watermark)} -{footer_script}{literal} -jQuery(document).ready(function() { - +{footer_script} +(function(){ function onWatermarkChange() { var val = jQuery("#wSelect").val(); if (val.length) { - jQuery("#wImg").attr('src', {/literal}'{$ROOT_URL}'{literal}+val).show(); + jQuery("#wImg").attr('src', '{$ROOT_URL}'+val).show(); } else { jQuery("#wImg").hide(); @@ -516,22 +557,24 @@ jQuery(document).ready(function() { jQuery("#addWatermark, #selectWatermark").toggle(); return false; }); -}); -{/literal}{/footer_script} +}()); +{/footer_script} -<fieldset id="watermarkConf"> +<fieldset id="watermarkConf" class="no-border"> <legend></legend> <ul> <li> <span id="selectWatermark"{if isset($ferrors.watermarkImage)} style="display:none"{/if}><label>{'Select a file'|@translate}</label> <select name="w[file]" id="wSelect"> - {html_options options=$watermark_files selected=$watermark.file} + {html_options options=$watermark_files selected=$watermark.file} </select> {'... or '|@translate}<a href="#" class="addWatermarkOpen">{'add a new watermark'|@translate}</a> - <br><img id="wImg"></img></span>{* #selectWatermark *} + <br> + <img id="wImg"></img></span>{* #selectWatermark *} <span id="addWatermark"{if isset($ferrors.watermarkImage)} style="display:inline"{/if}> {'add a new watermark'|@translate} {'... or '|@translate}<a href="#" class="addWatermarkOpen">{'Select a file'|@translate}</a> - <br><input type="file" size="60" id="watermarkImage" name="watermarkImage"{if isset($ferrors.watermarkImage)} class="dError"{/if}> (png) + <br> + <input type="file" size="60" id="watermarkImage" name="watermarkImage"{if isset($ferrors.watermarkImage)} class="dError"{/if}> (png) {if isset($ferrors.watermarkImage)}<span class="dErrorDesc" title="{$ferrors.watermarkImage|@htmlspecialchars}">!</span>{/if} </span>{* #addWatermark *} </li> @@ -547,7 +590,7 @@ jQuery(document).ready(function() { <li> <label> {'Apply watermark if height is bigger than'|@translate} - <input size="4" maxlength="4" type="text" name="w[minh]" value="{$watermark.minh}"{if isset($ferrors.watermark.minh)} class="dError"{/if}> + <input size="4" maxlength="4" type="text" name="w[minh]" value="{$watermark.minh}"{if isset($ferrors.watermark.minh)} class="dError"{/if}> </label> {'pixels'|@translate} </li> @@ -562,10 +605,11 @@ jQuery(document).ready(function() { <label class="right">{'bottom right corner'|@translate} <input name="w[position]" type="radio" value="bottomright"{if $watermark.position eq 'bottomright'} checked="checked"{/if}></label> <label><input name="w[position]" type="radio" value="bottomleft"{if $watermark.position eq 'bottomleft'} checked="checked"{/if}> {'bottom left corner'|@translate}</label> </div> + <label style="display:block;margin-top:10px;font-weight:normal;"><input name="w[position]" type="radio" value="custom"{if $watermark.position eq 'custom'} checked="checked"{/if}> {'custom'|@translate}</label> <div id="positionCustomDetails"> <label>{'X Position'|@translate} - <input size="3" maxlength="3" type="text" name="w[xpos]" value="{$watermark.xpos}"{if isset($ferrors.watermark.xpos)} class="dError"{/if}>% + <input size="3" maxlength="3" type="text" name="w[xpos]" value="{$watermark.xpos}"{if isset($ferrors.watermark.xpos)} class="dError"{/if}>% {if isset($ferrors.watermark.xpos)}<span class="dErrorDesc" title="{$ferrors.watermark.xpos}">!</span>{/if} </label> @@ -600,10 +644,10 @@ jQuery(document).ready(function() { <li> <label> <input type="checkbox" name="menubar_filter_icon" {if ($display.menubar_filter_icon)}checked="checked"{/if}> - {'display only recently posted photos'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('display only recently posted photos'|@translate|@ucfirst)} </label> - </li> - + </li> + <li> <label> <input type="checkbox" name="index_new_icon" {if ($display.index_new_icon)}checked="checked"{/if}> @@ -614,38 +658,38 @@ jQuery(document).ready(function() { <li> <label> <input type="checkbox" name="index_sort_order_input" {if ($display.index_sort_order_input)}checked="checked"{/if}> - {'Sort order'|@translate|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('Sort order'|@translate)} </label> </li> <li> <label> <input type="checkbox" name="index_flat_icon" {if ($display.index_flat_icon)}checked="checked"{/if}> - {'display all photos in all sub-albums'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('display all photos in all sub-albums'|@translate|@ucfirst)} </label> </li> <li> <label> <input type="checkbox" name="index_posted_date_icon" {if ($display.index_posted_date_icon)}checked="checked"{/if}> - {'display a calendar by posted date'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('display a calendar by posted date'|@translate|@ucfirst)} </label> </li> <li> <label> <input type="checkbox" name="index_created_date_icon" {if ($display.index_created_date_icon)}checked="checked"{/if}> - {'display a calendar by creation date'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('display a calendar by creation date'|@translate|@ucfirst)} </label> </li> <li> <label> <input type="checkbox" name="index_slideshow_icon" {if ($display.index_slideshow_icon)}checked="checked"{/if}> - {'slideshow'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('slideshow'|@translate|@ucfirst)} </label> </li> - + <li> <label> {'Number of albums per page'|@translate} @@ -661,28 +705,28 @@ jQuery(document).ready(function() { <li> <label> <input type="checkbox" name="picture_slideshow_icon" {if ($display.picture_slideshow_icon)}checked="checked"{/if}> - {'slideshow'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('slideshow'|@translate|@ucfirst)} </label> </li> <li> <label> <input type="checkbox" name="picture_metadata_icon" {if ($display.picture_metadata_icon)}checked="checked"{/if}> - {'Show file metadata'|@translate|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('Show file metadata'|@translate)} </label> </li> <li> <label> <input type="checkbox" name="picture_download_icon" {if ($display.picture_download_icon)}checked="checked"{/if}> - {'Download this file'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('Download this file'|@translate|@ucfirst)} </label> </li> <li> <label> <input type="checkbox" name="picture_favorite_icon" {if ($display.picture_favorite_icon)}checked="checked"{/if}> - {'add this photo to your favorites'|@translate|@ucfirst|@string_format:$pwg->l10n('Activate icon "%s"')} + {'Activate icon "%s"'|@translate:('add this photo to your favorites'|@translate|@ucfirst)} </label> </li> @@ -699,7 +743,7 @@ jQuery(document).ready(function() { {'Activate Navigation Thumbnails'|@translate} </label> </li> - + <li> <label> <input type="checkbox" name="picture_menu" {if ($display.picture_menu)}checked="checked"{/if}> @@ -792,6 +836,8 @@ jQuery(document).ready(function() { </fieldset> {/if} +</div> <!-- configContent --> + {if !isset($default)} <p class="formButtons"> <input type="submit" name="submit" value="{'Save Settings'|@translate}"> @@ -799,8 +845,8 @@ jQuery(document).ready(function() { </form> {/if} -</div> <!-- configContent --> - {if isset($default)} +<div id="configContent"> {$PROFILE_CONTENT} +</div> {/if} diff --git a/admin/themes/default/template/element_set_ranks.tpl b/admin/themes/default/template/element_set_ranks.tpl index be5019e24..dfdafdc2e 100644 --- a/admin/themes/default/template/element_set_ranks.tpl +++ b/admin/themes/default/template/element_set_ranks.tpl @@ -17,7 +17,7 @@ jQuery(document).ready(function() { }); }); - jQuery('#image_order_rank').attr('checked', true); + jQuery('#image_order_rank').prop('checked', true); checkOrderOptions(); } }); @@ -43,7 +43,7 @@ jQuery('.thumbnail').tipTip({ <form action="{$F_ACTION}" method="post"> {if !empty($thumbnails)} - <p><input class="submit" type="submit" value="{'Submit'|@translate}" name="submit"></p> + <p><input type="submit" value="{'Submit'|@translate}" name="submit"></p> <fieldset> <legend>{'Manual order'|@translate}</legend> {if !empty($thumbnails)} @@ -84,7 +84,7 @@ jQuery('.thumbnail').tipTip({ </div> </fieldset> <p> - <input class="submit" type="submit" value="{'Submit'|@translate}" name="submit"> + <input type="submit" value="{'Submit'|@translate}" name="submit"> <label> <input type="checkbox" name="image_order_subcats" id="image_order_subcats"> diff --git a/admin/themes/default/template/extend_for_templates.tpl b/admin/themes/default/template/extend_for_templates.tpl index 07998128a..818096ba4 100644 --- a/admin/themes/default/template/extend_for_templates.tpl +++ b/admin/themes/default/template/extend_for_templates.tpl @@ -17,19 +17,19 @@ {$tpl.replacer} </td> <td> - {html_options name=original[] output=$tpl.original_tpl values=$tpl.original_tpl selected=$tpl.selected_tpl} + {html_options name='original[]' output=$tpl.original_tpl values=$tpl.original_tpl selected=$tpl.selected_tpl} </td> <td> - {html_options name=url[] output=$tpl.url_parameter values=$tpl.url_parameter selected=$tpl.selected_url} + {html_options name='url[]' output=$tpl.url_parameter values=$tpl.url_parameter selected=$tpl.selected_url} </td> <td> - {html_options name=bound[] output=$tpl.bound_tpl values=$tpl.bound_tpl selected=$tpl.selected_bound} + {html_options name='bound[]' output=$tpl.bound_tpl values=$tpl.bound_tpl selected=$tpl.selected_bound} </td> </tr> {/foreach} </table> <p> - <input class="submit" type="submit" value="{'Submit'|@translate}" name="submit"> + <input type="submit" value="{'Submit'|@translate}" name="submit"> </p> </form> {/if} diff --git a/admin/themes/default/template/group_list.tpl b/admin/themes/default/template/group_list.tpl index c11b6369a..0d2d727d1 100644 --- a/admin/themes/default/template/group_list.tpl +++ b/admin/themes/default/template/group_list.tpl @@ -1,7 +1,21 @@ {footer_script} {literal} $(document).ready(function() { + /** + * Add group + */ + jQuery("#addGroup").click(function() { + jQuery("#addGroupForm").toggle(); + jQuery("input[name=groupname]").focus(); + return false; + }); + + jQuery("#addGroupClose").click(function() { + jQuery("#addGroupForm").hide(); + return false; + }); + $('.groups input').change(function () { $(this).parent('p').toggleClass('group_select'); }); $(".grp_action").hide(); $("input.group_selection").click(function() { @@ -16,10 +30,10 @@ $(document).ready(function() { $("#permitAction").show(); $("#forbidAction").hide(); } - $("p[group_id="+$(this).attr("value")+"]").each(function () { + $("p[group_id="+$(this).prop("value")+"]").each(function () { $(this).toggle(); }); - + if (nbSelected<2) { $("#two_to_select").show(); $("#two_atleast").hide(); @@ -32,8 +46,8 @@ $(document).ready(function() { $("[id^=action_]").hide(); $("select[name=selectAction]").change(function () { $("[id^=action_]").hide(); - $("#action_"+$(this).attr("value")).show(); - if ($(this).val() != -1) { + $("#action_"+$(this).prop("value")).show(); + if ($(this).val() != -1 ) { $("#applyActionBlock").show(); } else { @@ -51,38 +65,44 @@ $(document).ready(function() { <h2>{'Group management'|@translate}</h2> </div> -<form method="post" name="add_user" action="{$F_ADD_ACTION}" class="properties"> +<p class="showCreateAlbum" id="showAddGroup"> + <a class="icon-plus-circled" href="#" id="addGroup">{'Add group'|translate}</a> +</p> + +<form method="post" style="display:none" id="addGroupForm" name="add_user" action="{$F_ADD_ACTION}" class="properties"> <fieldset> <legend>{'Add group'|@translate}</legend> - <span class="property"> - <label for="groupname">{'Group name'|@translate}</label> - </span> - <input type="text" id="groupname" name="groupname" maxlength="50" size="20"> - <input type="submit" name="submit_add" value="{'Add'|@translate}"> - <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> + + <p> + <strong>{'Group name'|translate}</strong><br> + <input type="text" name="groupname" maxlength="50" size="20"> + </p> + + <p class="actionButtons"> + <input class="submit" name="submit_add" type="submit" value="{'Add'|translate}"> + <a href="#" id="addGroupClose">{'Cancel'|@translate}</a> + </p> + + <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> </fieldset> </form> + <form method="post" name="add_user" action="{$F_ADD_ACTION}" class="properties"> <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> - - <table class="table2"> - <tr class="throw"> - <th></th> - <th>{'Group name'|@translate}</th> - <th>{'Members'|@translate}</th> - </tr> + + <ul class="groups"> {if not empty($groups)} {foreach from=$groups item=group name=group_loop} - <tr class="{if $smarty.foreach.group_loop.index is odd}row1{else}row2{/if}"> - <td><input class="group_selection" name="group_selection[]" type="checkbox" value="{$group.ID}"></td> - <td>{$group.NAME}<i><small>{$group.IS_DEFAULT}</small></i></td> - <td>{if $group.MEMBERS>0}<a href="{$group.U_MEMBERS}" title="{'Manage the members'|@translate}">{$group.MEMBERS}</a><br>{$group.L_MEMBERS}{else}{$group.MEMBERS}{/if}</td> - </tr> + <li> + <label><p>{$group.NAME}<i><small>{$group.IS_DEFAULT}</small></i><input class="group_selection" name="group_selection[]" type="checkbox" value="{$group.ID}"></p></label> + <p class="list_user">{if $group.MEMBERS>0}{$group.MEMBERS}<br>{$group.L_MEMBERS}{else}{$group.MEMBERS}{/if}</p> + <a class="icon-lock group_perm" href="{$group.U_PERM}" title="{'Permissions'|@translate}">{'Permissions'|translate}</a> + </li> {/foreach} {/if} - </table> - + </ul> + <fieldset id="action"> <legend>{'Action'|@translate}</legend> <div id="forbidAction">{'No group selected, no action possible.'|@translate}</div> @@ -95,8 +115,6 @@ $(document).ready(function() { <option value="delete">{'Delete'|@translate}</option> <option value="merge">{'Merge selected groups'|@translate}</option> <option value="duplicate">{'Duplicate'|@translate}</option> - <option value="manage_members">{'Manage the members'|@translate}</option> - <option value="manage_pemissions">{'Manage Permissions'|@translate}</option> <option value="toggle_default">{'Toggle \'default group\' property'|@translate}</option> {if !empty($element_set_groupe_plugins_actions)} {foreach from=$element_set_groupe_plugins_actions item=action} @@ -142,28 +160,6 @@ $(document).ready(function() { {/if} </div> - <!-- manage_members --> - <div id="action_manage_members" class="bulkAction"> - {if not empty($groups)} - {foreach from=$groups item=group} - <p group_id="{$group.ID}" class="grp_action"> - {$group.NAME} > {if $group.NB_MEMBERS!=0}<a href="{$group.U_MEMBERS}" title="{'Manage the members'|@translate}">{'Manage the members'|@translate}</a>{else}{'No members to manage'|@translate}{/if} - </p> - {/foreach} - {/if} - </div> - - <!-- manage_pemissions --> - <div id="action_manage_pemissions" class="bulkAction"> - {if not empty($groups)} - {foreach from=$groups item=group} - <p group_id="{$group.ID}" class="grp_action"> - {$group.NAME} > <a href="{$group.U_PERM}" title="{'Permissions'|@translate}">{'Manage Permissions'|@translate}</a> - </p> - {/foreach} - {/if} - </div> - <!-- toggle_default --> <div id="action_toggle_default" class="bulkAction"> {if not empty($groups)} @@ -174,8 +170,8 @@ $(document).ready(function() { {/foreach} {/if} </div> - - + + <!-- plugins --> {if !empty($element_set_groupe_plugins_actions)} {foreach from=$element_set_groupe_plugins_actions item=action} @@ -184,7 +180,7 @@ $(document).ready(function() { </div> {/foreach} {/if} - + <p id="applyActionBlock" style="display:none" class="actionButtons"> <input id="applyAction" class="submit" type="submit" value="{'Apply action'|@translate}" name="submit"> <span id="applyOnDetails"></span></p> </div> <!-- #permitAction --> diff --git a/admin/themes/default/template/header.tpl b/admin/themes/default/template/header.tpl index f8fff5750..c95b759ad 100644 --- a/admin/themes/default/template/header.tpl +++ b/admin/themes/default/template/header.tpl @@ -19,6 +19,7 @@ {/if} {if !empty($theme.local_head)}{include file=$theme.local_head load_css=$theme.load_css}{/if} {/foreach} +{combine_css path="admin/themes/default/fontello/css/fontello.css"} <!-- BEGIN get_combined_scripts --> {get_combined_scripts load='header'} @@ -53,17 +54,17 @@ <div id="pwgHead"> <h1> <a href="{$U_RETURN}" title="{'Visit Gallery'|@translate}"> - <img src="{$ROOT_URL}admin/themes/{$theme.id}/icon/home.png" alt="{'Home'|@translate}"> - {$GALLERY_TITLE} + <span class="icon-home" style="font-size:larger"></span> + {$GALLERY_TITLE} </a> </h1> <div id="headActions"> - {'Hello'|@translate} {$USERNAME} : - <a href="{$U_RETURN}">{'Visit Gallery'|@translate}</a> | - <a href="{$U_CHANGE_THEME}" title="{'Switch to clear or dark colors for administration'|@translate}">{'Change Admin Colors'|@translate}</a> | - <a href="{$U_FAQ}" title="{'Instructions to use Piwigo'|@translate}">{'Help Me'|@translate}</a> | - <a href="{$U_LOGOUT}">{'Logout'|@translate}</a> + {'Hello'|@translate} {$USERNAME} | + <a class="icon-eye" href="{$U_RETURN}">{'Visit Gallery'|@translate}</a> | + <a class="icon-brush" href="{$U_CHANGE_THEME}" title="{'Switch to clear or dark colors for administration'|@translate}">{'Change Admin Colors'|@translate}</a> | + <a class="icon-help-circled" href="{$U_FAQ}" title="{'Instructions to use Piwigo'|@translate}">{'Help Me'|@translate}</a> | + <a class="icon-logout" href="{$U_LOGOUT}">{'Logout'|@translate}</a> </div> </div> diff --git a/admin/themes/default/template/history.tpl b/admin/themes/default/template/history.tpl index 4cc5e93c6..3fe4e738d 100644 --- a/admin/themes/default/template/history.tpl +++ b/admin/themes/default/template/history.tpl @@ -6,9 +6,7 @@ pwg_initialization_datepicker("#end_day", "#end_month", "#end_year", "#end_linked_date", null, "#start_linked_date", null); {/literal}{/footer_script} -<div class="titrePage"> - <h2>{'History'|@translate} {$TABSHEET_TITLE}</h2> -</div> +<h2>{'History'|@translate} {$TABSHEET_TITLE}</h2> <form class="filter" method="post" name="filter" action="{$F_ACTION}"> <fieldset> @@ -83,7 +81,7 @@ </select> </label> - <input class="submit" type="submit" name="submit" value="{'Submit'|@translate}"> + <input type="submit" name="submit" value="{'Submit'|@translate}"> </fieldset> </form> @@ -107,6 +105,7 @@ {if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} <table class="table2" id="detailedStats"> +<thead> <tr class="throw"> <th>{'Date'|@translate}</th> <th>{'Time'|@translate}</th> @@ -115,24 +114,69 @@ <th>{'Element'|@translate}</th> <th>{'Element type'|@translate}</th> <th>{'Section'|@translate}</th> - <th>{'Album'|@translate}</th> - <th>{'Tags'|@translate}</th> + <th>{'Album'|@translate} / {'Tags'|@translate}</th> </tr> -{if !empty($search_results) } +</thead> +{if !empty($search_results)} {foreach from=$search_results item=detail name=res_loop} <tr class="{if $smarty.foreach.res_loop.index is odd}row1{else}row2{/if}"> <td class="hour">{$detail.DATE}</td> <td class="hour">{$detail.TIME}</td> <td>{$detail.USER}</td> - <td>{$detail.IP}</td> + <td class="IP">{$detail.IP}</td> <td>{$detail.IMAGE}</td> <td>{$detail.TYPE}</td> <td>{$detail.SECTION}</td> - <td>{$detail.CATEGORY}</td> - <td>{$detail.TAGS}</td> + <td>{$detail.CATEGORY}{$detail.TAGS}</td> </tr> {/foreach} {/if} </table> {if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} + +{combine_script id='jquery.geoip' load='async' path='admin/themes/default/js/jquery.geoip.js'} + +{footer_script}{literal} +jQuery(document).ready( function() { + jQuery(".IP").one( "mouseenter", function(){ + var that = $(this); + that + .data("isOver", true) + .one("mouseleave", function() { + that.removeData("isOver"); + }); + GeoIp.get( that.text(), function(data) { + if (!data.fullName) return; + + var content = data.fullName; + if (data.latitude && data.region_name) { + content += '<br><a class="ipGeoOpen" data-lat="'+data.latitude+'" data-lon="'+data.longitude+'"'; + content += ' href="#">show on a Google Map</a>'; + } + + that.tipTip( { + content: content, + keepAlive: true, + defaultPosition: "right", + maxWidth: 320, + } ); + if (that.data("isOver")) + that.trigger("mouseenter"); + }); + } ); + + jQuery(document).on('click', '.ipGeoOpen', function() { + var lat = jQuery(this).data("lat"); + var lon = jQuery(this).data("lon"); + var parent = jQuery(this).parent(); + jQuery(this).remove(); + + var append = '<br><img width=300 height=220 src="http://maps.googleapis.com/maps/api/staticmap'; + append += '?sensor=false&size=300x220&zoom=6&markers=size:tiny%7C' + lat + ',' + lon + '">'; + + jQuery(parent).append(append); + return false; + }); +}); +{/literal}{/footer_script}
\ No newline at end of file diff --git a/admin/themes/default/template/include/add_album.inc.tpl b/admin/themes/default/template/include/add_album.inc.tpl index 1fe8cea21..08ada07a4 100644 --- a/admin/themes/default/template/include/add_album.inc.tpl +++ b/admin/themes/default/template/include/add_album.inc.tpl @@ -1,81 +1,70 @@ {footer_script}{literal} jQuery(document).ready(function(){ - function fillCategoryListbox(selectId, selectedValue) { - jQuery.getJSON( - "ws.php?format=json&method=pwg.categories.getList", - { - recursive: true, - fullname: true, - format: "json", - }, - function(data) { - jQuery.each( - data.result.categories, - function(i,category) { - var selected = null; - if (category.id == selectedValue) { - selected = "selected"; - } - - jQuery("<option/>") - .attr("value", category.id) - .attr("selected", selected) - .text(category.name) - .appendTo("#"+selectId) - ; - } - ); - } - ); - } - jQuery(".addAlbumOpen").colorbox({ - inline:true, - href:"#addAlbumForm", - onComplete:function(){ + inline: true, + href: "#addAlbumForm", + onComplete: function() { + var $albumSelect = jQuery("#albumSelect"); + jQuery("input[name=category_name]").focus(); + + jQuery("#category_parent").html('<option value="0">------------</option>') + .append($albumSelect.html()) + .val($albumSelect.val() || 0); } }); - jQuery("#addAlbumForm form").submit(function(){ + jQuery("#addAlbumForm form").submit(function() { jQuery("#categoryNameError").text(""); + + var parent_id = jQuery("select[name=category_parent] option:selected").val(), + name = jQuery("input[name=category_name]").val(); jQuery.ajax({ - url: "ws.php?format=json&method=pwg.categories.add", + url: "ws.php", + dataType: 'json', data: { - parent: jQuery("select[name=category_parent] option:selected").val(), - name: jQuery("input[name=category_name]").val(), + format: 'json', + method: 'pwg.categories.add', + parent: parent_id, + name: name }, beforeSend: function() { jQuery("#albumCreationLoading").show(); }, - success:function(html) { + success: function(data) { jQuery("#albumCreationLoading").hide(); - - var newAlbum = jQuery.parseJSON(html).result.id; jQuery(".addAlbumOpen").colorbox.close(); - jQuery("#albumSelect").find("option").remove(); - fillCategoryListbox("albumSelect", newAlbum); - - /* we refresh the album creation form, in case the user wants to create another album */ - jQuery("#category_parent").find("option").remove(); - - jQuery("<option/>") - .attr("value", 0) - .text("------------") - .appendTo("#category_parent") - ; + var newAlbum = data.result.id, + newAlbum_name = ''; + + if (parent_id!=0) { + newAlbum_name = jQuery("#category_parent").find("option[value="+ parent_id +"]").text() +' / '; + } + newAlbum_name+= name; + + var new_option = jQuery("<option/>") + .attr("value", newAlbum) + .attr("selected", "selected") + .text(newAlbum_name); - fillCategoryListbox("category_parent", newAlbum); + var $albumSelect = jQuery("#albumSelect"); + $albumSelect.find("option").removeAttr('selected'); + + if (parent_id==0) { + $albumSelect.prepend(new_option); + } + else { + $albumSelect.find("option[value="+ parent_id +"]").after(new_option); + } jQuery("#addAlbumForm form input[name=category_name]").val(''); - jQuery("#albumSelection").show(); return true; }, - error:function(XMLHttpRequest, textStatus, errorThrows) { + error: function(XMLHttpRequest, textStatus, errorThrows) { jQuery("#albumCreationLoading").hide(); jQuery("#categoryNameError").text(errorThrows).css("color", "red"); } @@ -90,13 +79,16 @@ jQuery(document).ready(function(){ <div id="addAlbumForm" style="text-align:left;padding:1em;"> <form> {'Parent album'|@translate}<br> - <select id ="category_parent" name="category_parent"> - <option value="0">------------</option> - {html_options options=$category_parent_options selected=$category_parent_options_selected} + <select id="category_parent" name="category_parent"> </select> - - <br><br>{'Album name'|@translate}<br><input name="category_name" type="text" maxlength="255"> <span id="categoryNameError"></span> - <br><br><br><input type="submit" value="{'Create'|@translate}"> <span id="albumCreationLoading" style="display:none"><img src="themes/default/images/ajax-loader-small.gif"></span> + <br><br> + + {'Album name'|@translate}<br> + <input name="category_name" type="text" maxlength="255"> <span id="categoryNameError"></span> + <br><br><br> + + <input type="submit" value="{'Create'|@translate}"> + <span id="albumCreationLoading" style="display:none"><img src="themes/default/images/ajax-loader-small.gif"></span> </form> </div> </div> diff --git a/admin/themes/default/template/install.tpl b/admin/themes/default/template/install.tpl index 58928fb45..6af851c8a 100644 --- a/admin/themes/default/template/install.tpl +++ b/admin/themes/default/template/install.tpl @@ -1,5 +1,4 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" -"http://www.w3.org/TR/html4/strict.dtd"> +<!DOCTYPE html> <html lang="{$lang_info.code}" dir="{$lang_info.direction}"> <head> <meta http-equiv="Content-Type" content="text/html; charset={$T_CONTENT_ENCODING}"> @@ -25,7 +24,6 @@ {combine_script id='jquery' path='themes/default/js/jquery.min.js'} {literal} <script type="text/javascript"> -$(function() { $(document).ready(function() { $("a.externalLink").click(function() { window.open($(this).attr("href")); @@ -36,7 +34,6 @@ $(document).ready(function() { $(".adminEmail").text($(this).val()); }); }); - </script> <style type="text/css"> @@ -44,13 +41,13 @@ body { font-size:12px; } -.content { - width: 800px; - margin: auto; - text-align: center; - padding:0; - background-color:transparent !important; - border:none; +#content { + width: 800px; + margin: auto; + text-align: center; + padding:0; + background-color:transparent !important; + border:none; } #theHeader { @@ -226,7 +223,7 @@ jQuery().ready(function(){ldelim} <tr> <td style="width: 30%;" class="fieldname">{'Host'|@translate}</td> <td><input type="text" name="dbhost" value="{$F_DB_HOST}"></td> - <td class="fielddesc">{'localhost, sql.multimania.com, toto.freesurf.fr'|@translate}</td> + <td class="fielddesc">{'localhost or other, supplied by your host provider'|@translate}</td> </tr> <tr> <td class="fieldname">{'User'|@translate}</td> @@ -256,12 +253,12 @@ jQuery().ready(function(){ldelim} <table class="table2"> <tr> - <td style="width: 30%;" class="fieldname">{'Webmaster login'|@translate}</td> + <td style="width: 30%;" class="fieldname">{'Username'|@translate}</td> <td><input type="text" name="admin_name" value="{$F_ADMIN}"></td> <td class="fielddesc">{'It will be shown to the visitors. It is necessary for website administration'|@translate}</td> </tr> <tr> - <td class="fieldname">{'Webmaster password'|@translate}</td> + <td class="fieldname">{'Password'|@translate}</td> <td><input type="password" name="admin_pass1" value=""></td> <td class="fielddesc">{'Keep it confidential, it enables you to access administration panel'|@translate}</td> </tr> @@ -271,7 +268,7 @@ jQuery().ready(function(){ldelim} <td class="fielddesc">{'verification'|@translate}</td> </tr> <tr> - <td class="fieldname">{'Webmaster mail address'|@translate}</td> + <td class="fieldname">{'Email address'|@translate}</td> <td><input type="text" name="admin_mail" id="admin_mail" value="{$F_ADMIN_EMAIL}"></td> <td class="fielddesc">{'Visitors will be able to contact site administrator with this mail'|@translate}</td> </tr> @@ -280,7 +277,7 @@ jQuery().ready(function(){ldelim} <td colspan="2"> <label> <input type="checkbox" name="newsletter_subscribe"{if $F_NEWSLETTER_SUBSCRIBE} checked="checked"{/if}> - <span class="cluetip" title="{'Piwigo Announcements Newsletter'|@translate}|{'Keep in touch with Piwigo project, subscribe to Piwigo Announcement Newsletter. You will receive emails when a new release is available (sometimes including a security bug fix, it\'s important to know and upgrade) and when major events happen to the project. Only a few emails a year.'|@translate|@htmlspecialchars|@nl2br}">{'Subscribe %s to Piwigo Announcements Newsletter'|@translate|@sprintf:$EMAIL}</span> + <span class="cluetip" title="{'Piwigo Announcements Newsletter'|@translate}|{'Keep in touch with Piwigo project, subscribe to Piwigo Announcement Newsletter. You will receive emails when a new release is available (sometimes including a security bug fix, it\'s important to know and upgrade) and when major events happen to the project. Only a few emails a year.'|@translate|@htmlspecialchars|@nl2br}">{'Subscribe %s to Piwigo Announcements Newsletter'|@translate:$EMAIL}</span> </label> <br> <label> diff --git a/admin/themes/default/template/intro.tpl b/admin/themes/default/template/intro.tpl index fc460c115..a3c56c214 100644 --- a/admin/themes/default/template/intro.tpl +++ b/admin/themes/default/template/intro.tpl @@ -29,7 +29,7 @@ jQuery().ready(function(){ if (ext_update) jQuery(".warnings ul").append('<li>'+ext_need_update_msg+'</li>'); } - }); + }); }); {/literal} {/footer_script} @@ -42,7 +42,7 @@ jQuery().ready(function(){ <li><a href="{$PHPWG_URL}" class="externalLink">Piwigo</a> {$PWG_VERSION}</li> <li><a href="{$U_CHECK_UPGRADE}">{'Check for upgrade'|@translate}</a></li> {if isset($SUBSCRIBE_BASE_URL)} - <li><a href="{$SUBSCRIBE_BASE_URL}{$EMAIL}" class="externalLink cluetip" title="{'Piwigo Announcements Newsletter'|@translate}|{'Keep in touch with Piwigo project, subscribe to Piwigo Announcement Newsletter. You will receive emails when a new release is available (sometimes including a security bug fix, it\'s important to know and upgrade) and when major events happen to the project. Only a few emails a year.'|@translate|@htmlspecialchars|@nl2br}">{'Subscribe %s to Piwigo Announcements Newsletter'|@translate|@sprintf:$EMAIL}</a></li> + <li><a href="{$SUBSCRIBE_BASE_URL}{$EMAIL}" class="externalLink cluetip" title="{'Piwigo Announcements Newsletter'|@translate}|{'Keep in touch with Piwigo project, subscribe to Piwigo Announcement Newsletter. You will receive emails when a new release is available (sometimes including a security bug fix, it\'s important to know and upgrade) and when major events happen to the project. Only a few emails a year.'|@translate|@htmlspecialchars|@nl2br}">{'Subscribe %s to Piwigo Announcements Newsletter'|@translate:$EMAIL}</a></li> {/if} </ul> </dd> @@ -74,10 +74,7 @@ jQuery().ready(function(){ <li>{$DB_GROUPS}</li> {if isset($DB_COMMENTS)} <li> - {$DB_COMMENTS} - {if isset($unvalidated)} - (<a href="{$unvalidated.URL}">{$unvalidated.INFO}</a>) - {/if} + {$DB_COMMENTS}{if $NB_PENDING_COMMENTS > 0} (<a href="{$U_COMMENTS}">{'%d waiting for validation'|translate:$NB_PENDING_COMMENTS}</a>){/if} </li> {/if} <li>{$DB_RATES}</li> diff --git a/admin/themes/default/template/menubar.tpl b/admin/themes/default/template/menubar.tpl index 4d65c0858..f3bd1f45b 100644 --- a/admin/themes/default/template/menubar.tpl +++ b/admin/themes/default/template/menubar.tpl @@ -38,7 +38,7 @@ jQuery(document).ready(function(){ <strong>{'Hide'|@translate} <input type="checkbox" name="hide_{$block.reg->get_id()}" {if $block.pos<0}checked="checked"{/if}></strong> </span> - <img src="{$themeconf.admin_icon_dir}/cat_move.png" class="button drag_button" style="display:none;" alt="{'Drag to re-order'|@translate}" title="{'Drag to re-order'|@translate}"> + <img src="{$themeconf.admin_icon_dir}/cat_move.png" class="drag_button" style="display:none;" alt="{'Drag to re-order'|@translate}" title="{'Drag to re-order'|@translate}"> <strong>{$block.reg->get_name()|@translate}</strong> ({$block.reg->get_id()}) </p> diff --git a/admin/themes/default/template/notification_by_mail.tpl b/admin/themes/default/template/notification_by_mail.tpl index 69acaaca5..0be49bdd1 100644 --- a/admin/themes/default/template/notification_by_mail.tpl +++ b/admin/themes/default/template/notification_by_mail.tpl @@ -4,12 +4,12 @@ jQuery(document).ready(function(){ jQuery("#checkAllLink").click(function () { - jQuery("#notification_by_mail input[type=checkbox]").attr('checked', true); + jQuery("#notification_by_mail input[type=checkbox]").prop('checked', true); return false; }); jQuery("#uncheckAllLink").click(function () { - jQuery("#notification_by_mail input[type=checkbox]").attr('checked', false); + jQuery("#notification_by_mail input[type=checkbox]").prop('checked', false); return false; }); @@ -24,7 +24,7 @@ jQuery(document).ready(function(){ {if isset($REPOST_SUBMIT_NAME)} <fieldset> <div class="infos"> - <input class="submit" type="submit" value="{'Continue processing treatment'|@translate}" name="{$REPOST_SUBMIT_NAME}"> + <input type="submit" value="{'Continue processing treatment'|@translate}" name="{$REPOST_SUBMIT_NAME}"> </div> </fieldset> {/if} @@ -72,8 +72,8 @@ jQuery(document).ready(function(){ </fieldset> <p> - <input class="submit" type="submit" value="{'Submit'|@translate}" name="param_submit"> - <input class="submit" type="reset" value="{'Reset'|@translate}" name="param_reset"> + <input type="submit" value="{'Submit'|@translate}" name="param_submit"> + <input type="reset" value="{'Reset'|@translate}" name="param_reset"> </p> {/if}{* isset $param*} @@ -98,7 +98,7 @@ jQuery(document).ready(function(){ <table class="table2"> <tr class="throw"> <th>{'User'|@translate}</th> - <th>{'email'|@translate}</th> + <th>{'Email'|@translate}</th> <th>{'Last send'|@translate}</th> <th>{'To send ?'|@translate}</th> </tr> @@ -128,7 +128,7 @@ jQuery(document).ready(function(){ </fieldset> <p> - <input class="submit" type="submit" value="{'Send'|@translate}" name="send_submit"> + <input type="submit" value="{'Send'|@translate}" name="send_submit"> </p> {/if} {/if}{* isset $send*} diff --git a/admin/themes/default/template/photos_add_direct.tpl b/admin/themes/default/template/photos_add_direct.tpl index 6794e0407..c63f9dec7 100644 --- a/admin/themes/default/template/photos_add_direct.tpl +++ b/admin/themes/default/template/photos_add_direct.tpl @@ -2,7 +2,7 @@ {combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js' } {combine_script id='jquery.uploadify' load='footer' require='jquery' path='admin/include/uploadify/jquery.uploadify.v3.0.0.min.js' } {combine_script id='jquery.ui.progressbar' load='footer'} -{combine_css path="admin/themes/default/uploadify.jGrowl.css"} +{combine_css path="themes/default/js/plugins/jquery.jgrowl.css"} {combine_css path="admin/include/uploadify/uploadify.css"} {/if} @@ -127,7 +127,7 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */ 'auto' : false, 'multi' : true, 'fileTypeDesc' : 'Photo files', - 'fileTypeExts' : '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF', + 'fileTypeExts' : '*.jpg;*.JPG;*.jpeg;*.JPEG;*.png;*.PNG;*.gif;*.GIF;{/literal}{if $tif_enabled}*.tif;*.TIF;*.tiff;*.TIFF{/if}{literal}', 'fileSizeLimit' : sizeLimit, 'progressData' : 'percentage', requeueErrors : false, @@ -200,7 +200,7 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */ 'level' : jQuery("select[name=level] option:selected").val(), 'upload_id' : upload_id, 'session_id' : session_id, - 'pwg_token' : pwg_token, + 'pwg_token' : pwg_token } ); @@ -289,31 +289,35 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */ <fieldset> <legend>{'Select files'|@translate}</legend> + + {if isset($original_resize_maxheight)}<p class="uploadInfo">{'The picture dimensions will be reduced to %dx%d pixels.'|@translate:$original_resize_maxwidth:$original_resize_maxheight}</p>{/if} - <p id="uploadWarningsSummary">{$upload_max_filesize_shorthand}B. {$upload_file_types}. {if isset($max_upload_resolution)}{$max_upload_resolution}Mpx{/if} <a class="showInfo" title="{'Learn more'|@translate}">i</a></p> + <p id="uploadWarningsSummary">{$upload_max_filesize_shorthand}B. {$upload_file_types}. {if isset($max_upload_resolution)}{$max_upload_resolution}Mpx{/if} <a class="icon-info-circled-1 showInfo" title="{'Learn more'|@translate}"></a></p> <p id="uploadWarnings"> -{'Maximum file size: %sB.'|@translate|@sprintf:$upload_max_filesize_shorthand} -{'Allowed file types: %s.'|@translate|@sprintf:$upload_file_types} +{'Maximum file size: %sB.'|@translate:$upload_max_filesize_shorthand} +{'Allowed file types: %s.'|@translate:$upload_file_types} {if isset($max_upload_resolution)} -{'Approximate maximum resolution: %dM pixels (that\'s %dx%d pixels).'|@translate|@sprintf:$max_upload_resolution:$max_upload_width:$max_upload_height} +{'Approximate maximum resolution: %dM pixels (that\'s %dx%d pixels).'|@translate:$max_upload_resolution:$max_upload_width:$max_upload_height} {/if} </p> + + {if $upload_mode eq 'html'} <div id="uploadBoxes"></div> <div id="addUploadBox"> <a href="javascript:">{'+ Add an upload box'|@translate}</a> </div> - <p id="uploadModeInfos">{'You are using the Browser uploader. Try the <a href="%s">Flash uploader</a> instead.'|@translate|@sprintf:$switch_url}</p> + <p id="uploadModeInfos">{'You are using the Browser uploader. Try the <a href="%s">Flash uploader</a> instead.'|@translate:$switch_url}</p> {elseif $upload_mode eq 'multiple'} <div id="uploadify">You've got a problem with your JavaScript</div> <div id="fileQueue" style="display:none"></div> - <p id="uploadModeInfos">{'You are using the Flash uploader. Problems? Try the <a href="%s">Browser uploader</a> instead.'|@translate|@sprintf:$switch_url}</p> + <p id="uploadModeInfos">{'You are using the Flash uploader. Problems? Try the <a href="%s">Browser uploader</a> instead.'|@translate:$switch_url}</p> {/if} </fieldset> @@ -341,7 +345,7 @@ var sizeLimit = Math.round({$upload_max_filesize} / 1024); /* in KBytes */ </form> <div id="uploadProgress" style="display:none"> -{'Photo %s of %s'|@translate|@sprintf:'<span id="progressCurrent">1</span>':'<span id="progressMax">10</span>'} +{'Photo %s of %s'|@translate:'<span id="progressCurrent">1</span>':'<span id="progressMax">10</span>'} <br> <div id="progressbar"></div> </div> diff --git a/admin/themes/default/template/picture_modify.tpl b/admin/themes/default/template/picture_modify.tpl index 5d2238eea..9fbd81daf 100644 --- a/admin/themes/default/template/picture_modify.tpl +++ b/admin/themes/default/template/picture_modify.tpl @@ -11,6 +11,7 @@ jQuery(document).ready(function() { }); {/literal}{/footer_script} +{combine_css path='themes/default/js/plugins/jquery.tokeninput.css'} {combine_script id='jquery.tokeninput' load='async' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'} {footer_script require='jquery.tokeninput'} jQuery(document).ready(function() {ldelim} @@ -23,7 +24,7 @@ jQuery(document).ready(function() {ldelim} newText: ' ({'new'|@translate})', animateDropdown: false, preventDuplicates: true, - allowCreation: true + allowFreeTagging: true } ); }); @@ -56,15 +57,15 @@ pwg_initialization_datepicker("#date_creation_day", "#date_creation_month", "#da <li>{$INTRO.id}</li> </ul> </td> - <td style="vertical-align:top;"> - <ul style="padding-left:15px;margin:0;"> + <td class="photoLinks"> + <ul> {if isset($U_JUMPTO) } - <li><a href="{$U_JUMPTO}">{'jump to photo'|@translate} →</a></li> + <li><a class="icon-eye" href="{$U_JUMPTO}">{'jump to photo'|@translate} →</a></li> {/if} {if !url_is_remote($PATH)} - <li><a href="{$U_SYNC}">{'Synchronize metadata'|@translate}</a></li> + <li><a class="icon-arrows-cw" href="{$U_SYNC}">{'Synchronize metadata'|@translate}</a></li> - <li><a href="{$U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'delete photo'|@translate}</a></li> + <li><a class="icon-trash" href="{$U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">{'delete photo'|@translate}</a></li> {/if} </ul> </td> diff --git a/admin/themes/default/template/plugins_installed.tpl b/admin/themes/default/template/plugins_installed.tpl index b10be0401..9864abd9d 100644 --- a/admin/themes/default/template/plugins_installed.tpl +++ b/admin/themes/default/template/plugins_installed.tpl @@ -162,7 +162,7 @@ jQuery(document).ready(function() { {'Version'|@translate} {$plugin.VERSION} {if not empty($author)} - | {'By %s'|@translate|@sprintf:$author} + | {'By %s'|@translate:$author} {/if} {if not empty($plugin.VISIT_URL)} @@ -183,7 +183,7 @@ jQuery(document).ready(function() { <div id="{$plugin.ID}" class="pluginMiniBox {$plugin.STATE}"> <div class="pluginMiniBoxNameCell"> {$plugin.NAME} - <a class="showInfo" title="{if !empty($author)}{'By %s'|@translate|@sprintf:$author} | {/if}{'Version'|@translate} {$version}<br/>{$plugin.DESC|@escape:'html'}">i</a> + <a class="icon-info-circled-1 showInfo" title="{if !empty($author)}{'By %s'|@translate:$author} | {/if}{'Version'|@translate} {$version}<br/>{$plugin.DESC|@escape:'html'}"></a> </div> <div class="pluginActions"> <div> diff --git a/admin/themes/default/template/plugins_new.tpl b/admin/themes/default/template/plugins_new.tpl index ad406fed0..3ccfcaeec 100644 --- a/admin/themes/default/template/plugins_new.tpl +++ b/admin/themes/default/template/plugins_new.tpl @@ -77,7 +77,7 @@ jQuery(document).ready(function(){ <td> <em>{'Downloads'|@translate}: {$plugin.DOWNLOADS}</em> {'Version'|@translate} {$plugin.VERSION} - | {'By %s'|@translate|@sprintf:$plugin.AUTHOR} + | {'By %s'|@translate:$plugin.AUTHOR} | <a class="externalLink" href="{$plugin.EXT_URL}">{'Visit plugin site'|@translate}</a> </td> </tr> diff --git a/admin/themes/default/template/profile_content.tpl b/admin/themes/default/template/profile_content.tpl index 33727f7aa..3c22dd386 100644 --- a/admin/themes/default/template/profile_content.tpl +++ b/admin/themes/default/template/profile_content.tpl @@ -50,7 +50,7 @@ {if not $SPECIAL_USER} <li> <span class="property"> - <label for="template">{'Interface theme'|@translate}</label> + <label for="template">{'Theme'|@translate}</label> </span> {html_options id=template name=theme options=$template_options selected=$template_selection} </li> diff --git a/admin/themes/default/template/tags.tpl b/admin/themes/default/template/tags.tpl index 4f4542032..e54362637 100644 --- a/admin/themes/default/template/tags.tpl +++ b/admin/themes/default/template/tags.tpl @@ -1,26 +1,68 @@ {include file='include/tag_selection.inc.tpl'} -{footer_script}{literal} -jQuery(document).ready(function(){ - function displayDeletionWarnings() { - jQuery(".warningDeletion").show(); - jQuery("input[name=destination_tag]:checked").parent("label").children(".warningDeletion").hide(); - } +{html_style} +.showInfo { text-indent:5px; } +{/html_style} +{footer_script require='jquery'} +jQuery('.showInfo').tipTip({ + 'delay' : 0, + 'fadeIn' : 200, + 'fadeOut' : 200, + 'maxWidth':'300px', + 'keepAlive':true, + 'activation':'click' +}); + +function displayDeletionWarnings() { + jQuery(".warningDeletion").show(); + jQuery("input[name=destination_tag]:checked").parent("label").children(".warningDeletion").hide(); +} + +displayDeletionWarnings(); + +jQuery("#mergeTags label").click(function() { displayDeletionWarnings(); +}); - jQuery("#mergeTags label").click(function() { - displayDeletionWarnings(); - }); +jQuery("input[name=merge]").click(function() { + if (jQuery("ul.tagSelection input[type=checkbox]:checked").length < 2) { + alert("{'Select at least two tags for merging'|@translate}"); + return false; + } +}); + +$("#searchInput").on("keydown", function(e) { + var $this = $(this), + timer = $this.data("timer"); + + if (timer) { + clearTimeout(timer); + } - jQuery("input[name=merge]").click(function() { - if (jQuery("ul.tagSelection input[type=checkbox]:checked").length < 2) { - alert("{/literal}{'Select at least two tags for merging'|@translate}{literal}"); - return false; + $this.data("timer", setTimeout(function() { + var val = $this.val(); + if (!val) { + $(".tagSelection>li").show(); + $("#filterIcon").css("visibility","hidden"); + } + else { + $("#filterIcon").css("visibility","visible"); + var regex = new RegExp( val.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"), "i" ); + $(".tagSelection>li").each(function() { + var $li = $(this), + text = $.trim( $("label", $li).text() ); + $li.toggle(regex.test(text)); + }); } - }); + + }, 300) ); + + if (e.keyCode == 13) { // Enter + e.preventDefault(); + } }); -{/literal}{/footer_script} +{/footer_script} <div class="titrePage"> @@ -46,12 +88,12 @@ jQuery(document).ready(function(){ </table> <p> - <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> - <input class="submit" type="submit" name="submit" value="{'Submit'|@translate}"> - <input class="submit" type="reset" value="{'Reset'|@translate}"> + <input type="submit" name="edit_submit" value="{'Submit'|@translate}"> + <input type="submit" name="edit_cancel" value="{'Cancel'|@translate}"> </p> </fieldset> {/if} + {if isset($DUPLIC_TAGS_LIST)} <fieldset> <legend>{'Edit tags'|@translate}</legend> @@ -70,23 +112,28 @@ jQuery(document).ready(function(){ </table> <p> - <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> - <input class="submit" type="submit" name="duplic_submit" value="{'Submit'|@translate}"> - <input class="submit" type="reset" value="{'Reset'|@translate}"> + <input type="submit" name="duplic_submit" value="{'Submit'|@translate}"> + <input type="submit" name="duplic_cancel" value="{'Cancel'|@translate}"> </p> </fieldset> {/if} {if isset($MERGE_TAGS_LIST)} - <input type="hidden" name="merge_list" value="{$MERGE_TAGS_LIST}"> - <fieldset id="mergeTags"> <legend>{'Merge tags'|@translate}</legend> - {'Select the destination tag'|@translate}<br><br> + {'Select the destination tag'|@translate} + + <p> {foreach from=$tags item=tag name=tagloop} <label><input type="radio" name="destination_tag" value="{$tag.ID}"{if $smarty.foreach.tagloop.index == 0} checked="checked"{/if}> {$tag.NAME}<span class="warningDeletion"> {'(this tag will be deleted)'|@translate}</span></label><br> {/foreach} - <br><input type="submit" name="confirm_merge" value="{'Confirm merge'|@translate}"> + </p> + + <p> + <input type="hidden" name="merge_list" value="{$MERGE_TAGS_LIST}"> + <input type="submit" name="merge_submit" value="{'Confirm merge'|@translate}"> + <input type="submit" name="merge_cancel" value="{'Cancel'|@translate}"> + </p> </fieldset> {/if} @@ -97,42 +144,40 @@ jQuery(document).ready(function(){ {'New tag'|@translate} <input type="text" name="add_tag" size="50"> </label> - + <p><input class="submit" type="submit" name="add" value="{'Submit'|@translate}"></p> </fieldset> <fieldset> <legend>{'Tag selection'|@translate}</legend> -{html_style} -.showInfo{ldelim}position:static; display:inline-block; text-indent:6px} -{/html_style} -{footer_script}{literal} -jQuery('.showInfo').tipTip({ - 'delay' : 0, - 'fadeIn' : 200, - 'fadeOut' : 200, - 'maxWidth':'300px', - 'keepAlive':true, - 'activation':'click' - }); -{/literal}{/footer_script} -<ul class="tagSelection"> -{foreach from=$all_tags item=tag} - <li>{capture name='showInfo'}<b>{$tag.name}</b> ({$pwg->l10n_dec('%d photo', '%d photos', $tag.counter)}) <br> <a href="{$tag.U_VIEW}">{'View in gallery'|@translate}</a> | <a href="{$tag.U_EDIT}">{'Manage photos'|@translate}</a>{if !empty($tag.alt_names)}<br>{$tag.alt_names}{/if}{/capture} - <a class="showInfo" title="{$smarty.capture.showInfo|@htmlspecialchars}">i</a> - <label> - <input type="checkbox" name="tags[]" value="{$tag.id}"> {$tag.name} - </label> - </li> -{/foreach} -</ul> + + {if count($all_tags)} + <div><label><span class="icon-filter" style="visibility:hidden" id="filterIcon"></span>{'Search'|@translate}: <input id="searchInput" type="text" size="12"></label></div> + {/if} + + <ul class="tagSelection"> + {foreach from=$all_tags item=tag} + <li> + {capture name='showInfo'}{strip} + <b>{$tag.name}</b> ({$tag.counter|@translate_dec:'%d photo':'%d photos'})<br> + <a href="{$tag.U_VIEW}">{'View in gallery'|@translate}</a> | + <a href="{$tag.U_EDIT}">{'Manage photos'|@translate}</a> + {if !empty($tag.alt_names)}<br>{$tag.alt_names}{/if} + {/strip}{/capture} + <a class="icon-info-circled-1 showInfo" title="{$smarty.capture.showInfo|@htmlspecialchars}"></a> + <label> + <input type="checkbox" name="tags[]" value="{$tag.id}"> {$tag.name} + </label> + </li> + {/foreach} + </ul> <p> <input type="hidden" name="pwg_token" value="{$PWG_TOKEN}"> - <input class="submit" type="submit" name="edit" value="{'Edit selected tags'|@translate}"> - <input class="submit" type="submit" name="duplicate" value="{'Duplicate selected tags'|@translate}"> - <input class="submit" type="submit" name="merge" value="{'Merge selected tags'|@translate}"> - <input class="submit" type="submit" name="delete" value="{'Delete selected tags'|@translate}" onclick="return confirm('{'Are you sure?'|@translate}');"> + <input type="submit" name="edit" value="{'Edit selected tags'|@translate}"> + <input type="submit" name="duplicate" value="{'Duplicate selected tags'|@translate}"> + <input type="submit" name="merge" value="{'Merge selected tags'|@translate}"> + <input type="submit" name="delete" value="{'Delete selected tags'|@translate}" onclick="return confirm('{'Are you sure?'|@translate}');"> </p> </fieldset> diff --git a/admin/themes/default/template/themes_installed.tpl b/admin/themes/default/template/themes_installed.tpl index c1c5eb66b..47495df7c 100644 --- a/admin/themes/default/template/themes_installed.tpl +++ b/admin/themes/default/template/themes_installed.tpl @@ -1,8 +1,18 @@ {include file='include/colorbox.inc.tpl'} + {footer_script}{literal} jQuery(document).ready(function() { - $("a.preview-box").colorbox(); -}); + $("a.preview-box").colorbox(); + + jQuery('.showInfo').tipTip({ + 'delay' : 0, + 'fadeIn' : 200, + 'fadeOut' : 200, + 'maxWidth':'300px', + 'keepAlive':true, + 'activation':'click' + }); +}); {/literal}{/footer_script} <div class="titrePage"> @@ -11,66 +21,80 @@ jQuery(document).ready(function() { <div id="themesContent"> -<fieldset> -<legend>{'Active Themes'|@translate}</legend> -{if isset($active_themes)} -<div class="themeBoxes"> -{foreach from=$active_themes item=theme} - <div class="themeBox{if $theme.is_default} themeDefault{/if}"> - <div class="themeName">{$theme.name}{if $theme.is_default} <em>({'default'|@translate})</em>{/if} {if $theme.mobile} <em>({'Mobile'|@translate})</em>{/if}</div> - <div class="themeShot"><a href="{$theme.screenshot}" class="preview-box" title="{$theme.name}"><img src="{$theme.screenshot}" alt=""></a></div> - <div class="themeActions"> - <div> -{if $theme.deactivable} - <a href="{$deactivate_baseurl}{$theme.id}" class="tiptip" title="{'Forbid this theme to users'|@translate}">{'Deactivate'|@translate}</a> -{else} - <span title="{$theme.deactivate_tooltip}" class="tiptip">{'Deactivate'|@translate}</span> -{/if} - -{if not $theme.is_default} - | <a href="{$set_default_baseurl}{$theme.id}" class="tiptip" title="{'Set as default theme for unregistered and new users'|@translate}">{'Default'|@translate}</a> -{/if} -{if isset($theme.admin_uri)} - <br><a href="{$theme.admin_uri}" class="tiptip" title="{'Configuration'|@translate}">{'Configuration'|@translate}</a> -{/if} - </div> - </div> <!-- themeActions --> - </div> -{/foreach} -</div> <!-- themeBoxes --> +{assign var='field_name' value='null'} {* <!-- 'counter' for fieldset management --> *} +{foreach from=$tpl_themes item=theme} + +{if $field_name != $theme.STATE} + {if $field_name != 'null'} + </div> + </fieldset> + {/if} + + <fieldset> + <legend> + {if $theme.STATE == 'active'} + {'Active Themes'|@translate} + {else} + {'Inactive Themes'|@translate} + {/if} + </legend> + <div class="themeBoxes"> + {assign var='field_name' value=$theme.STATE} {/if} -</fieldset> -{if isset($inactive_themes)} -<fieldset> -<legend>{'Inactive Themes'|@translate}</legend> -<div class="themeBoxes"> -{foreach from=$inactive_themes item=theme} - <div class="themeBox"> - <div class="themeName">{$theme.name}{if $theme.mobile} <em>({'Mobile'|@translate})</em>{/if}</div> - <div class="themeShot"><a href="{$theme.screenshot}" class="preview-box" title="{$theme.name}"><img src="{$theme.screenshot}" alt=""></a></div> + {if not empty($theme.AUTHOR)} + {if not empty($theme.AUTHOR_URL)} + {assign var='author' value="<a href='%s'>%s</a>"|@sprintf:$theme.AUTHOR_URL:$theme.AUTHOR} + {else} + {assign var='author' value='<u>'|cat:$theme.AUTHOR|cat:'</u>'} + {/if} + {/if} + {if not empty($theme.VISIT_URL)} + {assign var='version' value="<a class='externalLink' href='"|cat:$theme.VISIT_URL|cat:"'>"|cat:$theme.VERSION|cat:"</a>"} + {else} + {assign var='version' value=$theme.VERSION} + {/if} + + <div class="themeBox{if $theme.IS_DEFAULT} themeDefault{/if}"> + <div class="themeName"> + {$theme.NAME} {if $theme.IS_DEFAULT}<em>({'default'|@translate})</em>{/if} {if $theme.IS_MOBILE}<em>({'Mobile'|@translate})</em>{/if} + <a class="icon-info-circled-1 showInfo" title="{if !empty($author)}{'By %s'|@translate:$author} | {/if}{'Version'|@translate} {$version}<br/>{$theme.DESC|@escape:'html'}"></a> + </div> + <div class="themeShot"><a href="{$theme.SCREENSHOT}" class="preview-box" title="{$theme.NAME}"><img src="{$theme.SCREENSHOT}" alt=""></a></div> <div class="themeActions"> <div> - {if $theme.activable} - <a href="{$activate_baseurl}{$theme.id}" title="{'Make this theme available to users'|@translate}" class="tiptip">{'Activate'|@translate}</a> +{if $theme.STATE == 'active'} + {if $theme.DEACTIVABLE} + <a href="{$deactivate_baseurl}{$theme.ID}" class="tiptip" title="{'Forbid this theme to users'|@translate}">{'Deactivate'|@translate}</a> {else} - <span title="{$theme.activate_tooltip}" class="tiptip">{'Activate'|@translate}</span> + <span title="{$theme.DEACTIVATE_TOOLTIP}" class="tiptip">{'Deactivate'|@translate}</span> {/if} + {if not $theme.IS_DEFAULT} + | <a href="{$set_default_baseurl}{$theme.ID}" class="tiptip" title="{'Set as default theme for unregistered and new users'|@translate}">{'Default'|@translate}</a> + {/if} + {if $theme.ADMIN_URI} + <br><a href="{$theme.ADMIN_URI}" class="tiptip" title="{'Configuration'|@translate}">{'Configuration'|@translate}</a> + {/if} +{else} + {if $theme.ACTIVABLE} + <a href="{$activate_baseurl}{$theme.ID}" title="{'Make this theme available to users'|@translate}" class="tiptip">{'Activate'|@translate}</a> + {else} + <span title="{$theme.ACTIVATE_TOOLTIP}" class="tiptip">{'Activate'|@translate}</span> + {/if} | - - {if $theme.deletable} - <a href="{$delete_baseurl}{$theme.id}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');" title="{'Delete this theme'|@translate}">{'Delete'|@translate}</a> + {if $theme.DELETABLE} + <a href="{$delete_baseurl}{$theme.ID}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');" title="{'Delete this theme'|@translate}">{'Delete'|@translate}</a> {else} - <span title="{$theme.delete_tooltip}" class="tiptip">{'Delete'|@translate}</span> + <span title="{$theme.DELETE_TOOLTIP}" class="tiptip">{'Delete'|@translate}</span> {/if} +{/if} </div> - </div> - + </div> <!-- themeActions --> </div> + {/foreach} </div> <!-- themeBoxes --> </fieldset> -{/if} </div> <!-- themesContent --> diff --git a/admin/themes/default/template/updates_ext.tpl b/admin/themes/default/template/updates_ext.tpl index 9946d824f..7d65c254a 100644 --- a/admin/themes/default/template/updates_ext.tpl +++ b/admin/themes/default/template/updates_ext.tpl @@ -1,6 +1,6 @@ {combine_script id='jquery.ajaxmanager' load='footer' require='jquery' path='themes/default/js/plugins/jquery.ajaxmanager.js'} {combine_script id='jquery.jgrowl' load='footer' require='jquery' path='themes/default/js/plugins/jquery.jgrowl_minimized.js'} -{combine_css path="admin/themes/default/uploadify.jGrowl.css"} +{combine_css path="themes/default/js/plugins/jquery.jgrowl.css"} {footer_script require='jquery.ui.effect-blind,jquery.ajaxmanager,jquery.jgrowl'} var pwg_token = '{$PWG_TOKEN}'; @@ -180,7 +180,7 @@ checkFieldsets(); <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/plus.gif" alt="" class="button_{$plugin.ID}"> <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/minus.gif" alt="" class="button_{$plugin.ID}" style="display:none;"> {'New Version'|@translate} : {$plugin.NEW_VERSION} - | {'By %s'|@translate|@sprintf:$plugin.AUTHOR} + | {'By %s'|@translate:$plugin.AUTHOR} </td> </tr> <tr> @@ -222,7 +222,7 @@ checkFieldsets(); <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/plus.gif" alt="" class="button_{$theme.ID}"> <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/minus.gif" alt="" class="button_{$theme.ID}" style="display:none;"> {'New Version'|@translate} : {$theme.NEW_VERSION} - | {'By %s'|@translate|@sprintf:$theme.AUTHOR} + | {'By %s'|@translate:$theme.AUTHOR} </td> </tr> <tr> @@ -264,7 +264,7 @@ checkFieldsets(); <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/plus.gif" alt="" class="button_{$language.ID}"> <img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/minus.gif" alt="" class="button_{$language.ID}" style="display:none;"> {'New Version'|@translate} : {$language.NEW_VERSION} - | {'By %s'|@translate|@sprintf:$language.AUTHOR} + | {'By %s'|@translate:$language.AUTHOR} </td> </tr> <tr> diff --git a/admin/themes/default/template/updates_pwg.tpl b/admin/themes/default/template/updates_pwg.tpl index 5b1bf3238..8205d9f25 100644 --- a/admin/themes/default/template/updates_pwg.tpl +++ b/admin/themes/default/template/updates_pwg.tpl @@ -41,11 +41,11 @@ li { margin: 5px; } <h4>{'Two updates are available'|@translate}:</h4> <p> <ul> - <li><a href="admin.php?page=updates&step=2&to={$MINOR_VERSION}"><strong>{'Update to Piwigo %s'|@translate|@sprintf:$MINOR_VERSION}</strong></a>: {'This is a minor update, with only bug corrections.'|@translate}</li> - <li><a href="admin.php?page=updates&step=3&to={$MAJOR_VERSION}"><strong>{'Update to Piwigo %s'|@translate|@sprintf:$MAJOR_VERSION}</strong></a>: {'This is a major update, with <a href="%s">new exciting features</a>.'|@translate|@sprintf:$RELEASE_URL} {'Some themes and plugins may be not available yet.'|@translate}</li> + <li><a href="admin.php?page=updates&step=2&to={$MINOR_VERSION}"><strong>{'Update to Piwigo %s'|@translate:$MINOR_VERSION}</strong></a>: {'This is a minor update, with only bug corrections.'|@translate}</li> + <li><a href="admin.php?page=updates&step=3&to={$MAJOR_VERSION}"><strong>{'Update to Piwigo %s'|@translate:$MAJOR_VERSION}</strong></a>: {'This is a major update, with <a href="%s">new exciting features</a>.'|@translate:$RELEASE_URL} {'Some themes and plugins may be not available yet.'|@translate}</li> </ul> </p> -<p>{'You can update to Piwigo %s directly, without upgrading to Piwigo %s (recommended).'|@translate|@sprintf:$MAJOR_VERSION:$MINOR_VERSION}</p> +<p>{'You can update to Piwigo %s directly, without upgrading to Piwigo %s (recommended).'|@translate:$MAJOR_VERSION:$MINOR_VERSION}</p> {/if} {if $STEP == 2} @@ -54,7 +54,7 @@ li { margin: 5px; } {'This is a minor update, with only bug corrections.'|@translate} </p> <form action="" method="post"> -<p><input type="submit" name="submit" value="{'Update to Piwigo %s'|@translate|@sprintf:$UPGRADE_TO}"></p> +<p><input type="submit" name="submit" value="{'Update to Piwigo %s'|@translate:$UPGRADE_TO}"></p> <p class="autoupdate_bar" style="display:none;"> {'Update in progress...'|@translate}<br><img src="admin/themes/default/images/ajax-loader-bar.gif"></p> <p><input type="hidden" name="upgrade_to" value="{$UPGRADE_TO}"></p> </form> @@ -63,7 +63,7 @@ li { margin: 5px; } {if $STEP == 3} <p> {'A new version of Piwigo is available.'|@translate}<br> - {'This is a major update, with <a href="%s">new exciting features</a>.'|@translate|@sprintf:$RELEASE_URL} {'Some themes and plugins may be not available yet.'|@translate} + {'This is a major update, with <a href="%s">new exciting features</a>.'|@translate:$RELEASE_URL} {'Some themes and plugins may be not available yet.'|@translate} </p> <form action="" method="post"> @@ -76,7 +76,7 @@ li { margin: 5px; } {counter assign=i} <fieldset> - <legend>{'Update to Piwigo %s'|@translate|@sprintf:$UPGRADE_TO}</legend> + <legend>{'Update to Piwigo %s'|@translate:$UPGRADE_TO}</legend> {if !empty($missing.plugins)} <p><i>{'Following plugins may not be compatible with the new version of Piwigo:'|@translate}</i></p> <p><ul>{foreach from=$missing.plugins item=plugin}<li><a href="{$plugin.uri}" class="externalLink">{$plugin.name}</a></li>{/foreach}</ul><br></p> @@ -89,7 +89,7 @@ li { margin: 5px; } {if !empty($missing.plugins) or !empty($missing.themes)} <p><label><input type="checkbox" name="understand"> {'I decide to update anyway'|@translate}</label></p> {/if} - <p><input type="submit" name="submit" value="{'Update to Piwigo %s'|@translate|@sprintf:$UPGRADE_TO}" {if !empty($missing.plugins) or !empty($missing.themes)}disabled="disabled"{/if}> + <p><input type="submit" name="submit" value="{'Update to Piwigo %s'|@translate:$UPGRADE_TO}" {if !empty($missing.plugins) or !empty($missing.themes)}disabled="disabled"{/if}> </p> <p class="autoupdate_bar" style="display:none;"> {'Update in progress...'|@translate}<br><img src="admin/themes/default/images/ajax-loader-bar.gif"></p> </fieldset> diff --git a/admin/themes/default/template/upgrade.tpl b/admin/themes/default/template/upgrade.tpl index f859ed56e..f126d06a6 100644 --- a/admin/themes/default/template/upgrade.tpl +++ b/admin/themes/default/template/upgrade.tpl @@ -39,6 +39,7 @@ body { #content { min-height:0; + border:none; } #theHeader { @@ -161,7 +162,7 @@ input[type="text"]:focus, input[type="password"]:focus, select:focus { </tr> </table> -<p>{'This page proposes to upgrade your database corresponding to your old version of Piwigo to the current version. The upgrade assistant thinks you are currently running a <strong>release %s</strong> (or equivalent).'|@translate|@sprintf:$introduction.CURRENT_RELEASE}</p> +<p>{'This page proposes to upgrade your database corresponding to your old version of Piwigo to the current version. The upgrade assistant thinks you are currently running a <strong>release %s</strong> (or equivalent).'|@translate:$introduction.CURRENT_RELEASE}</p> {if isset($login)} <p>{'Only administrator can run upgrade: please sign in below.'|@translate}</p> {/if} @@ -180,19 +181,19 @@ input[type="text"]:focus, input[type="password"]:focus, select:focus { {/if} </fieldset> <p style="text-align: center;"> -<input class="submit" type="submit" name="submit" value="{'Upgrade from version %s to %s'|@translate|@sprintf:$introduction.CURRENT_RELEASE:$RELEASE}"> +<input class="submit" type="submit" name="submit" value="{'Upgrade from version %s to %s'|@translate:$introduction.CURRENT_RELEASE:$RELEASE}"> </p> </form> <!-- <p style="text-align: center;"> -<a href="{$introduction.RUN_UPGRADE_URL}">{'Upgrade from version %s to %s'|@translate|@sprintf:$introduction.CURRENT_RELEASE:$RELEASE}</a> +<a href="{$introduction.RUN_UPGRADE_URL}">{'Upgrade from version %s to %s'|@translate:$introduction.CURRENT_RELEASE:$RELEASE}</a> </p> --> {/if} {if isset($upgrade)} -<h2>{'Upgrade from version %s to %s'|@translate|@sprintf:$upgrade.VERSION:$RELEASE}</h2> +<h2>{'Upgrade from version %s to %s'|@translate:$upgrade.VERSION:$RELEASE}</h2> <fieldset> <legend>{'Statistics'|@translate}</legend> diff --git a/admin/themes/default/template/user_list.tpl b/admin/themes/default/template/user_list.tpl index 5bb3f18ed..a491cae17 100644 --- a/admin/themes/default/template/user_list.tpl +++ b/admin/themes/default/template/user_list.tpl @@ -1,290 +1,1137 @@ +{combine_script id='common' load='footer' path='admin/themes/default/js/common.js'} + +{combine_script id='jquery.dataTables' load='footer' path='themes/default/js/plugins/jquery.dataTables.js'} +{combine_css path="themes/default/js/plugins/datatables/css/jquery.dataTables.css"} + +{combine_script id='jquery.chosen' load='footer' path='themes/default/js/plugins/chosen.jquery.min.js'} +{combine_css path="themes/default/js/plugins/chosen.css"} + +{combine_script id='jquery.underscore' load='footer' path='themes/default/js/plugins/underscore.js'} + +{combine_script id='jquery.ui.slider' require='jquery.ui' load='footer' path='themes/default/js/ui/minified/jquery.ui.slider.min.js'} +{combine_css path="themes/default/js/ui/theme/jquery.ui.slider.css"} + +{footer_script} +var selectedMessage_pattern = "{'%d of %d users selected'|translate|escape:javascript}"; +var selectedMessage_none = "{'No user selected of %d users'|translate|escape:javascript}"; +var selectedMessage_all = "{'All %d users are selected'|translate|escape:javascript}"; +var applyOnDetails_pattern = "{'on the %d selected users'|translate|escape:javascript}"; +var newUser_pattern = "✔ {'User %s added'|translate|escape:javascript}"; +var registeredOn_pattern = "{'Registered on %s, %s.'|translate|escape:javascript}"; +var lastVisit_pattern = "{'Last visit on %s, %s.'|translate|escape:javascript}"; +var missingConfirm = "{'You need to confirm deletion'|translate|escape:javascript}"; +var missingUsername = "{'Please, enter a login'|translate|escape:javascript}"; + +var allUsers = [{$all_users}]; +var selection = [{$selection}]; +var pwg_token = "{$PWG_TOKEN}"; + +var protectedUsers = [{$protected_users}]; +var guestUser = {$guest_user}; + +var truefalse = { + true:"{'Yes'|translate}", + false:"{'No'|translate}", +}; +{/footer_script} + +{footer_script}{literal} +jQuery(document).ready(function() { + /** + * Add user + */ + jQuery("#addUser").click(function() { + jQuery("#addUserForm").toggle(); + jQuery("#showAddUser .infos").hide(); + jQuery("input[name=username]").focus(); + return false; + }); + + jQuery("#addUserClose").click(function() { + jQuery("#addUserForm").hide(); + return false; + }); + + jQuery("#addUserForm").submit(function() { + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.add", + type:"POST", + data: jQuery(this).serialize(), + beforeSend: function() { + jQuery("#addUserForm .errors").hide(); + + if (jQuery("input[name=username]").val() == "") { + jQuery("#addUserForm .errors").html('✘ '+missingUsername).show(); + return false; + } + + jQuery("#addUserForm .loading").show(); + }, + success:function(data) { + oTable.fnDraw(); + jQuery("#addUserForm .loading").hide(); + + var data = jQuery.parseJSON(data); + if (data.stat == 'ok') { + jQuery("#addUserForm input[type=text], #addUserForm input[type=password]").val(""); + + var new_user = data.result.users[0]; + allUsers.push(parseInt(new_user.id)); + jQuery("#showAddUser .infos").html(sprintf(newUser_pattern, new_user.username)).show(); + checkSelection(); + + jQuery("#addUserForm").hide(); + } + else { + jQuery("#addUserForm .errors").html('✘ '+data.message).show(); + } + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + jQuery("#addUserForm .loading").hide(); + } + }); + + return false; + }); + + /** + * Table with users + */ + /** + * find the key from a value in the startStopValues array + */ + function getSliderKeyFromValue(value, values) { + for (var key in values) { + if (values[key] >= value) { + return key; + } + } + return 0; + } + + var recent_period_values = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,25,30,40,50,60,80,99]; + + function getRecentPeriodInfoFromIdx(idx) { + return sprintf( + "{/literal}{'%d days'|@translate}{literal}", + recent_period_values[idx] + ); + } + + var nb_image_page_values = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,35,40,45,50,60,70,80,90,100,200,300,500,999]; + + function getNbImagePageInfoFromIdx(idx) { + return sprintf( + "{/literal}{'%d photos per page'|@translate}{literal}", + nb_image_page_values[idx] + ); + } + + /* nb_image_page slider */ + var nb_image_page_init = getSliderKeyFromValue(jQuery('#action_nb_image_page input[name=nb_image_page]').val(), nb_image_page_values); + + jQuery('#action_nb_image_page .nb_image_page_infos').html(getNbImagePageInfoFromIdx(nb_image_page_init)); + + jQuery('#action_nb_image_page .nb_image_page').slider({ + range: "min", + min: 0, + max: nb_image_page_values.length - 1, + value: nb_image_page_init, + slide: function( event, ui ) { + jQuery('#action_nb_image_page .nb_image_page_infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + jQuery('#action_nb_image_page input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); + } + }); + + /* recent_period slider */ + var recent_period_init = getSliderKeyFromValue(jQuery('#action_recent_period input[name=recent_period]').val(), recent_period_values); + jQuery('#action_recent_period .recent_period_infos').html(getRecentPeriodInfoFromIdx(recent_period_init)); + + jQuery('#action_recent_period .recent_period').slider({ + range: "min", + min: 0, + max: recent_period_values.length - 1, + value: recent_period_init, + slide: function( event, ui ) { + jQuery('#action_recent_period .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + jQuery('#action_recent_period input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); + } + }); + + /* Formating function for row details */ + function fnFormatDetails(oTable, nTr) { + var userId = oTable.fnGetData(nTr)[0]; + console.log("userId = "+userId); + var sOut = null; + + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.getList", + type:"POST", + data: { + user_id: userId, + display: "all", + }, + success:function(data) { + jQuery("#user"+userId+" .loading").hide(); + + var data = jQuery.parseJSON(data); + if (data.stat == 'ok') { + var user = data.result.users[0]; + + /* Prepare data for template */ + user.statusOptions = []; + jQuery("#action select[name=status] option").each(function() { + var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; + + if (user.status == jQuery(this).val()) { + option.isSelected = true; + } + + user.statusOptions.push(option); + }); + + user.levelOptions = []; + jQuery("#action select[name=level] option").each(function() { + var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; + + if (user.level == jQuery(this).val()) { + option.isSelected = true; + } + + user.levelOptions.push(option); + }); + + user.groupOptions = []; + jQuery("#action select[name=associate] option").each(function() { + var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; + + if (user.groups.indexOf( parseInt(jQuery(this).val()) ) != -1) { + option.isSelected = true; + } + + user.groupOptions.push(option); + }); + + user.themeOptions = []; + jQuery("#action select[name=theme] option").each(function() { + var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; + + if (user.theme == jQuery(this).val()) { + option.isSelected = true; + } + + user.themeOptions.push(option); + }); + + user.languageOptions = []; + jQuery("#action select[name=language] option").each(function() { + var option = {value:jQuery(this).val(), label:jQuery(this).html(), isSelected:false}; + + if (user.language == jQuery(this).val()) { + option.isSelected = true; + } + + user.languageOptions.push(option); + }); + + user.isGuest = (parseInt(userId) == guestUser); + user.isProtected = (protectedUsers.indexOf(parseInt(userId)) != -1); + + user.registeredOn_string = sprintf( + registeredOn_pattern, + user.registration_date_string, + user.registration_date_since + ); + + user.lastVisit_string = ""; + if (typeof user.last_visit != 'undefined') { + user.lastVisit_string = sprintf(lastVisit_pattern, user.last_visit_string, user.last_visit_since); + } + + user.updateString = sprintf( + "{/literal}{'User %s updated'|translate|escape:javascript}{literal}", + user.username + ); + + user.email = user.email || ''; + + jQuery("#action select[name=status] option").each(function() { + if (user.status == jQuery(this).val()) { + user.statusLabel = jQuery(this).html(); + } + }); + + /* Render the underscore template */ + _.templateSettings.variable = "user"; + + var template = _.template( + jQuery("script.userDetails").html() + ); + + jQuery("#user"+userId).append(template(user)); + + jQuery(".chzn-select").chosen(); + + /* nb_image_page slider */ + var nb_image_page_init = getSliderKeyFromValue(jQuery('#user'+userId+' input[name=nb_image_page]').val(), nb_image_page_values); + + jQuery('#user'+userId+' .nb_image_page_infos').html(getNbImagePageInfoFromIdx(nb_image_page_init)); + + jQuery('#user'+userId+' .nb_image_page').slider({ + range: "min", + min: 0, + max: nb_image_page_values.length - 1, + value: nb_image_page_init, + slide: function( event, ui ) { + jQuery('#user'+userId+' .nb_image_page_infos').html(getNbImagePageInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + jQuery('#user'+userId+' input[name=nb_image_page]').val(nb_image_page_values[ui.value]).trigger('change'); + } + }); + + /* recent_period slider */ + var recent_period_init = getSliderKeyFromValue(jQuery('#user'+userId+' input[name=recent_period]').val(), recent_period_values); + jQuery('#user'+userId+' .recent_period_infos').html(getRecentPeriodInfoFromIdx(recent_period_init)); + + jQuery('#user'+userId+' .recent_period').slider({ + range: "min", + min: 0, + max: recent_period_values.length - 1, + value: recent_period_init, + slide: function( event, ui ) { + jQuery('#user'+userId+' .recent_period_infos').html(getRecentPeriodInfoFromIdx(ui.value)); + }, + stop: function( event, ui ) { + jQuery('#user'+userId+' input[name=recent_period]').val(recent_period_values[ui.value]).trigger('change'); + } + }); + } + else { + console.log('error loading user details'); + } + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + console.log('technical error loading user details'); + } + }); + + return '<div id="user'+userId+'" class="userProperties"><img class="loading" src="themes/default/images/ajax-loader-small.gif"></div>'; + } + + /* change password */ + jQuery(document).on('click', '.changePasswordOpen', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + + jQuery(this).hide(); + jQuery('#user'+userId+' .changePasswordDone').hide(); + jQuery('#user'+userId+' .changePassword').show(); + jQuery('#user'+userId+' .changePassword input[type=text]').focus(); + + return false; + }); + + jQuery(document).on('click', '.changePassword a.updatePassword', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + + jQuery('#user'+userId+' .changePassword a .text').hide(); + jQuery('#user'+userId+' .changePassword a img').show(); + + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type:"POST", + data: { + user_id:userId, + password: jQuery('#user'+userId+' .changePassword input[type=text]').val() + }, + beforeSend: function() { + jQuery('#user'+userId+' .changePassword input[type=text]').val(""); + }, + success:function(data) { + jQuery('#user'+userId+' .changePassword a .text').show(); + jQuery('#user'+userId+' .changePassword a img').hide(); + jQuery('#user'+userId+' .changePassword').hide(); + jQuery('#user'+userId+' .changePasswordOpen').show(); + jQuery('#user'+userId+' .changePasswordDone').show(); + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + } + }); + + return false; + }); + + jQuery(document).on('click', '.changePassword a.cancel', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + + jQuery('#user'+userId+' .changePassword').hide(); + jQuery('#user'+userId+' .changePasswordOpen').show(); + + return false; + }); + + /* change username */ + jQuery(document).on('click', '.changeUsernameOpen a', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + var username = jQuery('#user'+userId+' .username').html(); + + jQuery('#user'+userId+' .changeUsernameOpen').hide(); + jQuery('#user'+userId+' .changeUsername').show(); + jQuery('#user'+userId+' .changeUsername input[type=text]').val(username).focus(); + + return false; + }); + + jQuery(document).on('click', 'a.updateUsername', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + + jQuery('#user'+userId+' .changeUsername a .text').hide(); + jQuery('#user'+userId+' .changeUsername a img').show(); + + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type:"POST", + data: { + user_id:userId, + username: jQuery('#user'+userId+' .changeUsername input[type=text]').val() + }, + success:function(data) { + jQuery('#user'+userId+' .changeUsername a .text').show(); + jQuery('#user'+userId+' .changeUsername a img').hide(); + jQuery('#user'+userId+' .changeUsername').hide(); + jQuery('#user'+userId+' .changeUsernameOpen').show(); + + var data = jQuery.parseJSON(data); + jQuery('#user'+userId+' .username').html(data.result.users[0].username); + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + } + }); + + return false; + }); + + jQuery(document).on('click', '.changeUsername a.cancel', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + + jQuery('#user'+userId+' .changeUsername').hide(); + jQuery('#user'+userId+' .changeUsernameOpen').show(); + + return false; + }); + + /* display the "save" button when a field changes */ + jQuery(document).on('change', '.userProperties input, .userProperties select', function() { + var userId = jQuery(this).parentsUntil('form').parent().find('input[name=user_id]').val(); + + jQuery('#user'+userId+' input[type=submit]').show(); + jQuery('#user'+userId+' .propertiesUpdateDone').hide(); + }); + + /* delete user */ + jQuery(document).on('click', '.userDelete a', function() { + if (!confirm("{/literal}{'Are you sure?'|translate|escape:javascript}{literal}")) { + return false; + } + + var userId = jQuery(this).data('user_id'); + var username = jQuery('#user'+userId+' .username').html(); + + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.delete", + type:"POST", + data: { + user_id:userId, + pwg_token:pwg_token + }, + beforeSend: function() { + jQuery('#user'+userId+' .userDelete .loading').show(); + }, + success:function(data) { + oTable.fnDraw(); + jQuery('#showAddUser .infos').html('✔ User '+username+' deleted').show(); + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + jQuery('#user'+userId+' .userDelete .loading').hide(); + } + }); + + return false; + }); + + jQuery(document).on('click', '.userProperties input[type=submit]', function() { + var userId = jQuery(this).data('user_id'); + + var formData = jQuery('#user'+userId+' form').serialize(); + + if (jQuery('#user'+userId+' form select[name="group_id[]"] option:selected').length == 0) { + formData += '&group_id=-1'; + } + + if (!jQuery('#user'+userId+' form input[name=enabled_high]').is(':checked')) { + formData += '&enabled_high=false'; + } + + if (!jQuery('#user'+userId+' form input[name=expand]').is(':checked')) { + formData += '&expand=false'; + } + + if (!jQuery('#user'+userId+' form input[name=show_nb_hits]').is(':checked')) { + formData += '&show_nb_hits=false'; + } + + if (!jQuery('#user'+userId+' form input[name=show_nb_comments]').is(':checked')) { + formData += '&show_nb_comments=false'; + } + + jQuery.ajax({ + url: "ws.php?format=json&method=pwg.users.setInfo", + type:"POST", + data: formData, + beforeSend: function() { + jQuery('#user'+userId+' .submitWait').show(); + }, + success:function(data) { + jQuery('#user'+userId+' .submitWait').hide(); + jQuery('#user'+userId+' input[type=submit]').hide(); + jQuery('#user'+userId+' .propertiesUpdateDone').show(); + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + jQuery('#user'+userId+' .submitWait').hide(); + } + }); + + return false; + }); + + /* Add event listener for opening and closing details + * Note that the indicator for showing which row is open is not controlled by DataTables, + * rather it is done here + */ + jQuery(document).on('click', '#userList tbody td .openUserDetails', function() { + var nTr = this.parentNode.parentNode; + if (jQuery(this).hasClass('icon-cancel-circled')) { + /* This row is already open - close it */ + jQuery(this) + .removeClass('icon-cancel-circled') + .addClass('icon-pencil') + .attr('title', "{/literal}{'Open user details'|translate|escape:'javascript'}{literal}") + .html("{/literal}{'edit'|translate|escape:'javascript'}{literal}") + ; + + oTable.fnClose( nTr ); + } + else { + /* Open this row */ + jQuery(this) + .removeClass('icon-pencil') + .addClass('icon-cancel-circled') + .attr('title', "{/literal}{'Close user details'|translate|escape:'javascript'}{literal}") + .html("{/literal}{'close'|translate|escape:'javascript'}{literal}") + ; + + oTable.fnOpen( nTr, fnFormatDetails(oTable, nTr), 'details' ); + } + }); + + + /* first column must be prefixed with the open/close icon */ + var aoColumns = [ + { + 'bVisible':false + }, + { + "mRender": function(data, type, full) { + return '<label><input type="checkbox" data-user_id="'+full[0]+'"> '+data+'</label> <a title="{/literal}{'Open user details'|translate|escape:'javascript'}{literal}" class="icon-pencil openUserDetails">{/literal}{'edit'|translate}{literal}</a>'; + } + } + ]; + + for (i=2; i<jQuery("#userList thead tr th").length; i++) { + aoColumns.push(null); + } + + var oTable = jQuery('#userList').dataTable({ + "iDisplayLength": 10, + "bDeferRender": true, + "bProcessing": true, + "bServerSide": true, + "sServerMethod": "POST", + "sAjaxSource": "admin/user_list_backend.php", + "oLanguage": { + "sProcessing": "{/literal}{'Loading...'|translate|escape:'javascript'}{literal}", + "sLengthMenu": sprintf("{/literal}{'Show %s users'|translate|escape:'javascript'}{literal}", '_MENU_'), + "sZeroRecords": "{/literal}{'No matching user found'|translate|escape:'javascript'}{literal}", + "sInfo": sprintf("{/literal}{'Showing %s to %s of %s users'|translate|escape:'javascript'}{literal}", '_START_', '_END_', '_TOTAL_'), + "sInfoEmpty": "{/literal}{'No matching user found'|translate|escape:'javascript'}{literal}", + "sInfoFiltered": sprintf("{/literal}{'(filtered from %s total users)'|translate|escape:'javascript'}{literal}", '_MAX_'), + "sSearch": '<span class="icon-search"></span>'+"{/literal}{'Search'|translate|escape:'javascript'}{literal}", + "sLoadingRecords": "{/literal}{'Loading...'|translate|escape:'javascript'}{literal}", + "oPaginate": { + "sFirst": "{/literal}{'First'|translate|escape:'javascript'}{literal}", + "sPrevious": '← '+"{/literal}{'Previous'|translate|escape:'javascript'}{literal}", + "sNext": "{/literal}{'Next'|translate|escape:'javascript'}{literal}"+' →', + "sLast": "{/literal}{'Last'|translate|escape:'javascript'}{literal}", + } + }, + "fnDrawCallback": function( oSettings ) { + jQuery("#userList input[type=checkbox]").each(function() { + var user_id = jQuery(this).data("user_id"); + jQuery(this).prop('checked', (selection.indexOf(user_id) != -1)); + }); + }, + "aoColumns": aoColumns + }); + + /** + * Selection management + */ + function checkSelection() { + if (selection.length > 0) { + jQuery("#forbidAction").hide(); + jQuery("#permitAction").show(); + + jQuery("#applyOnDetails").text( + sprintf( + applyOnDetails_pattern, + selection.length + ) + ); + + if (selection.length == allUsers.length) { + jQuery("#selectedMessage").text( + sprintf( + selectedMessage_all, + allUsers.length + ) + ); + } + else { + jQuery("#selectedMessage").text( + sprintf( + selectedMessage_pattern, + selection.length, + allUsers.length + ) + ); + } + } + else { + jQuery("#forbidAction").show(); + jQuery("#permitAction").hide(); + + jQuery("#selectedMessage").text( + sprintf( + selectedMessage_none, + allUsers.length + ) + ); + } + + jQuery("#applyActionBlock .infos").hide(); + } + + jQuery(document).on('change', '#userList input[type=checkbox]', function() { + var user_id = jQuery(this).data("user_id"); + + array_delete(selection, user_id); + + if (jQuery(this).is(":checked")) { + selection.push(user_id); + } + + checkSelection(); + }); + + jQuery("#selectAll").click(function () { + selection = allUsers; + jQuery("#userList input[type=checkbox]").prop('checked', true); + checkSelection(); + return false; + }); + + jQuery("#selectNone").click(function () { + selection = []; + jQuery("#userList input[type=checkbox]").prop('checked', false); + checkSelection(); + return false; + }); + + jQuery("#selectInvert").click(function () { + var newSelection = []; + for(var i in allUsers) + { + if (selection.indexOf(allUsers[i]) == -1) { + newSelection.push(allUsers[i]); + } + } + selection = newSelection; + + jQuery("#userList input[type=checkbox]").each(function() { + var user_id = jQuery(this).data("user_id"); + jQuery(this).prop('checked', (selection.indexOf(user_id) != -1)); + }); + + checkSelection(); + return false; + }); + + /** + * Action management + */ + jQuery("[id^=action_]").hide(); + + jQuery("select[name=selectAction]").change(function () { + jQuery("#applyActionBlock .infos").hide(); + + jQuery("[id^=action_]").hide(); + + jQuery("#action_"+$(this).prop("value")).show(); + + if (jQuery(this).val() != -1) { + jQuery("#applyActionBlock").show(); + } + else { + jQuery("#applyActionBlock").hide(); + } + }); + + jQuery("#permitAction input, #permitAction select").click(function() { + jQuery("#applyActionBlock .infos").hide(); + }); + + jQuery("#applyAction").click(function() { + var action = jQuery("select[name=selectAction]").prop("value"); + var method = 'pwg.users.setInfo'; + var data = { + user_id: selection + }; + + switch (action) { + case 'delete': + if (!jQuery("input[name=confirm_deletion]").is(':checked')) { + alert(missingConfirm); + return false; + } + method = 'pwg.users.delete'; + data.pwg_token = pwg_token; + break; + case 'group_associate': + method = 'pwg.groups.addUser'; + data.group_id = jQuery("select[name=associate]").prop("value"); + break; + case 'group_dissociate': + method = 'pwg.groups.deleteUser'; + data.group_id = jQuery("select[name=dissociate]").prop("value"); + break; + case 'status': + data.status = jQuery("select[name=status]").prop("value"); + break; + case 'enabled_high': + data.enabled_high = jQuery("input[name=enabled_high]:checked").val(); + break; + case 'level': + data.level = jQuery("select[name=level]").val(); + break; + case 'nb_image_page': + data.nb_image_page = jQuery("input[name=nb_image_page]").val(); + break; + case 'theme': + data.theme = jQuery("select[name=theme]").val(); + break; + case 'language': + data.language = jQuery("select[name=language]").val(); + break; + case 'recent_period': + data.recent_period = jQuery("input[name=recent_period]").val(); + break; + case 'expand': + data.expand = jQuery("input[name=expand]:checked").val(); + break; + case 'show_nb_comments': + data.show_nb_comments = jQuery("input[name=show_nb_comments]:checked").val(); + break; + case 'show_nb_hits': + data.show_nb_hits = jQuery("input[name=show_nb_hits]:checked").val(); + break; + default: + alert("Unexpected action"); + return false; + } + + jQuery.ajax({ + url: "ws.php?format=json&method="+method, + type:"POST", + data: data, + beforeSend: function() { + jQuery("#applyActionLoading").show(); + }, + success:function(data) { + oTable.fnDraw(); + jQuery("#applyActionLoading").hide(); + jQuery("#applyActionBlock .infos").show(); + + if (action == 'delete') { + var allUsers_new = []; + for(var i in allUsers) + { + if (selection.indexOf(allUsers[i]) == -1) { + allUsers_new.push(allUsers[i]); + } + } + allUsers = allUsers_new; + console.log('allUsers_new.length = '+allUsers_new.length); + selection = []; + checkSelection(); + } + }, + error:function(XMLHttpRequest, textStatus, errorThrows) { + jQuery("#applyActionLoading").hide(); + } + }); + + return false; + }); + +}); +{/literal}{/footer_script} + +{html_style}{literal} +.dataTables_wrapper, .dataTables_info {clear:none;} +table.dataTable {clear:right;padding-top:10px;} +.dataTable td img {margin-bottom: -6px;margin-left: -6px;} +.paginate_enabled_previous, .paginate_enabled_previous:hover, .paginate_disabled_previous, .paginate_enabled_next, .paginate_enabled_next:hover, .paginate_disabled_next {background:none;} +.paginate_enabled_previous, .paginate_enabled_next {color:#005E89 !important;} +.paginate_enabled_previous:hover, .paginate_enabled_next:hover {color:#D54E21 !important; text-decoration:underline !important;} + +.paginate_disabled_next, .paginate_enabled_next {padding-right:3px;} +.bulkAction {margin-top:10px;} +#addUserForm p {margin-left:0;} +#applyActionBlock .actionButtons {margin-left:0;} +span.infos, span.errors {background-image:none; padding:2px 5px; margin:0;border-radius:5px;} + +.userStats {margin-top:10px;} +.recent_period_infos {margin-left:10px;} +.nb_image_page, .recent_period {width:340px;margin-top:5px;} +#action_recent_period .recent_period {display:inline-block;} +{/literal}{/html_style} + <div class="titrePage"> <h2>{'User list'|@translate}</h2> </div> -<form class="filter" method="post" name="add_user" action="{$F_ADD_ACTION}"> +<p class="showCreateAlbum" id="showAddUser"> + <a href="#" id="addUser" class="icon-plus-circled">{'Add a user'|translate}</a> + <span class="infos" style="display:none"></span> +</p> + +<form id="addUserForm" style="display:none" method="post" name="add_user" action="{$F_ADD_ACTION}"> <fieldset> <legend>{'Add a user'|@translate}</legend> - <label>{'Username'|@translate} <input type="text" name="login" maxlength="50" size="20"></label> - {if $Double_Password} - <label>{'Password'|@translate} <input type="password" name="password"></label> - <label>{'Confirm Password'|@translate} <input type="password" name="password_conf" id="password_conf"></label> - {else} - <label>{'Password'|@translate} <input type="text" name="password"></label> - {/if} - <label>{'Email address'|@translate} <input type="text" name="email"></label> - <label>{'Send connection settings by email'|@translate} <input type="checkbox" name="send_password_by_mail" value="1" checked="checked"></label> - <label> <input class="submit" type="submit" name="submit_add" value="{'Submit'|@translate}"></label> - </fieldset> -</form> - -<form class="filter" method="get" name="filter" action="{$F_FILTER_ACTION}"> -<fieldset> - <legend>{'Filter'|@translate}</legend> - <input type="hidden" name="page" value="user_list"> - - <label>{'Username'|@translate} <input type="text" name="username" value="{$F_USERNAME}"></label> - - <label> - {'status'|@translate} - {html_options name=status options=$status_options selected=$status_selected} - </label> - - <label> - {'Group'|@translate} - {html_options name=group options=$group_options selected=$group_selected} - </label> - <label> - {'Sort by'|@translate} - {html_options name=order_by options=$order_options selected=$order_selected} - </label> + <p> + <strong>{'Username'|translate}</strong><br> + <input type="text" name="username" maxlength="50" size="20"> + </p> - <label> - {'Sort order'|@translate} - {html_options name=direction options=$direction_options selected=$direction_selected} - </label> + <p> + <strong>{'Password'|translate}</strong><br> + <input type="{if $Double_Password}password{else}text{/if}" name="password"> + </p> + +{if $Double_Password} + <p> + <strong>{'Confirm Password'|@translate}</strong><br> + <input type="password" name="password_confirm"> + </p> +{/if} - <label> - - <input class="submit" type="submit" value="{'Submit'|@translate}"> - </label> + <p> + <strong>{'Email address'|@translate}</strong><br> + <input type="text" name="email"> + </p> -</fieldset> + <p> + <label><input type="checkbox" name="send_password_by_mail"> <strong>{'Send connection settings by email'|@translate}</strong></label> + </p> + <p class="actionButtons"> + <input class="submit" name="submit_add" type="submit" value="{'Submit'|@translate}"> + <a href="#" id="addUserClose">{'Cancel'|@translate}</a> + <span class="loading" style="display:none"><img src="themes/default/images/ajax-loader-small.gif"></span> + <span class="errors" style="display:none"></span> + </p> + </fieldset> </form> <form method="post" name="preferences" action=""> -{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} - -<table class="table2" width="97%"> +<table id="userList"> <thead> - <tr class="throw"> - <td> </td> - <td>{'Username'|@translate}</td> - <td>{'User status'|@translate}</td> - <td>{'Email address'|@translate}</td> - <td>{'Groups'|@translate}</td> - <td>{'Properties'|@translate}</td> - {if not empty($plugin_user_list_column_titles)} - {foreach from=$plugin_user_list_column_titles item=title} - <td>{$title}</td> - {/foreach} - {/if} - <td>{'Actions'|@translate}</td> + <tr> + <th>id</th> + <th>{'Username'|@translate}</th> + <th>{'Status'|@translate}</th> + <th>{'Email address'|@translate}</th> + <th>{'registration date'|@translate}</th> </tr> </thead> - - {foreach from=$users item=user name=users_loop} - <tr class="{if $smarty.foreach.users_loop.index is odd}row1{else}row2{/if}"> - <td><input type="checkbox" name="selection[]" value="{$user.ID}" {$user.CHECKED} id="selection-{$user.ID}"></td> - <td><label for="selection-{$user.ID}">{$user.USERNAME}</label></td> - <td>{$user.STATUS}</td> - <td>{$user.EMAIL}</td> - <td>{$user.GROUPS}</td> - <td>{$user.PROPERTIES}</td> - {foreach from=$user.plugin_columns item=data} - <td>{$data}</td> - {/foreach} - <td style="text-align:center;"> - <a href="{$user.U_PERM}"><img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/permissions.png" style="border:none" alt="{'Permissions'|@translate}" title="{'Permissions'|@translate}"></a> - <a href="{$user.U_PROFILE}"><img src="{$ROOT_URL}{$themeconf.admin_icon_dir}/edit_s.png" style="border:none" alt="{'Profile'|@translate}" title="{'Profile'|@translate}"></a> - {foreach from=$user.plugin_actions item=data} - {$data} - {/foreach} - </td> - </tr> - {/foreach} </table> -{if !empty($navbar) }{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if} +<div style="clear:right"></div> -{* delete the selected users ? *} -<fieldset> - <legend>{'Deletions'|@translate}</legend> - <label><input type="checkbox" name="confirm_deletion" value="1"> {'confirm'|@translate}</label> - <input class="submit" type="submit" value="{'Delete selected users'|@translate}" name="delete"> -</fieldset> - -<fieldset> - <legend>{'Status'|@translate}</legend> - - <table> - <tr> - <td>{'Status'|@translate}</td> - <td> - <label><input type="radio" name="status_action" value="leave" checked="checked"> {'leave'|@translate}</label> - <label><input type="radio" name="status_action" value="set" id="status_action_set"> {'set to'|@translate}</label> - <select onchange="document.getElementById('status_action_set').checked = true;" name="status" size="1"> - {html_options options=$pref_status_options selected=$pref_status_selected} - </select> - </td> - </tr> - </table> -</fieldset> +<p class="checkActions"> + {'Select:'|@translate} + <a href="#" id="selectAll">{'All'|@translate}</a>, + <a href="#" id="selectNone">{'None'|@translate}</a>, + <a href="#" id="selectInvert">{'Invert'|@translate}</a> -{* form to set properties for many users at once *} -<fieldset> - <legend>{'Groups'|@translate}</legend> + <span id="selectedMessage"></span> +</p> -<table> +<fieldset id="action"> + <legend>{'Action'|@translate}</legend> - <tr> - <td>{'associate to group'|@translate}</td> - <td> - {html_options name=associate options=$association_options selected=$associate_selected} - </td> - </tr> + <div id="forbidAction"{if count($selection) != 0} style="display:none"{/if}>{'No user selected, no action possible.'|@translate}</div> + <div id="permitAction"{if count($selection) == 0} style="display:none"{/if}> - <tr> - <td>{'dissociate from group'|@translate}</td> - <td> - {html_options name=dissociate options=$association_options selected=$dissociate_selected} - </td> - </tr> + <select name="selectAction"> + <option value="-1">{'Choose an action'|@translate}</option> + <option disabled="disabled">------------------</option> + <option value="delete" class="icon-trash">{'Delete selected users'|@translate}</option> + <option value="status">{'Status'|@translate}</option> + <option value="group_associate">{'associate to group'|translate}</option> + <option value="group_dissociate">{'dissociate from group'|@translate}</option> + <option value="enabled_high">{'High definition enabled'|@translate}</option> + <option value="level">{'Privacy level'|@translate}</option> + <option value="nb_image_page">{'Number of photos per page'|@translate}</option> + <option value="theme">{'Theme'|@translate}</option> + <option value="language">{'Language'|@translate}</option> + <option value="recent_period">{'Recent period'|@translate}</option> + <option value="expand">{'Expand all albums'|@translate}</option> +{if $ACTIVATE_COMMENTS} + <option value="show_nb_comments">{'Show number of comments'|@translate}</option> +{/if} + <option value="show_nb_hits">{'Show number of hits'|@translate}</option> + </select> -</table> + {* delete *} + <div id="action_delete" class="bulkAction"> + <p><label><input type="checkbox" name="confirm_deletion" value="1"> {'Are you sure?'|@translate}</label></p> + </div> -</fieldset> + {* status *} + <div id="action_status" class="bulkAction"> + <select name="status"> + {html_options options=$pref_status_options selected=$pref_status_selected} + </select> + </div> -{* Properties *} -<fieldset> - <legend>{'Properties'|@translate}</legend> + {* group_associate *} + <div id="action_group_associate" class="bulkAction"> + {html_options name=associate options=$association_options selected=$associate_selected} + </div> - <table> + {* group_dissociate *} + <div id="action_group_dissociate" class="bulkAction"> + {html_options name=dissociate options=$association_options selected=$dissociate_selected} + </div> - <tr> - <td>{'High definition enabled'|@translate}</td> - <td> - <label><input type="radio" name="enabled_high" value="leave" checked="checked"> {'leave'|@translate}</label> - / {'set to'|@translate} - <label><input type="radio" name="enabled_high" value="true">{'Yes'|@translate}</label> - <label><input type="radio" name="enabled_high" value="false">{'No'|@translate}</label> - </td> - </tr> + {* enabled_high *} + <div id="action_enabled_high" class="bulkAction"> + <label><input type="radio" name="enabled_high" value="true">{'Yes'|@translate}</label> + <label><input type="radio" name="enabled_high" value="false" checked="checked">{'No'|@translate}</label> + </div> - <tr> - <td>{'Privacy level'|@translate}</td> - <td> - <label><input type="radio" name="level_action" value="leave" checked="checked">{'leave'|@translate}</label> - <label><input type="radio" name="level_action" value="set" id="level_action_set">{'set to'|@translate}</label> - <select onchange="document.getElementById('level_action_set').checked = true;" name="level" size="1"> - {html_options options=$level_options selected=$level_selected} - </select> - </td> - </tr> - </table> + {* level *} + <div id="action_level" class="bulkAction"> + <select name="level" size="1"> + {html_options options=$level_options selected=$level_selected} + </select> + </div> -</fieldset> + {* nb_image_page *} + <div id="action_nb_image_page" class="bulkAction"> + <strong class="nb_image_page_infos"></strong> + <div class="nb_image_page"></div> + <input type="hidden" name="nb_image_page" value="{$NB_IMAGE_PAGE}"> + </div> -{* preference *} -<fieldset> - <legend>{'Preferences'|@translate}</legend> - -<table> - <tr> - <td>{'Number of photos per page'|@translate}</td> - <td> - <label><input type="radio" name="nb_image_page_action" value="leave" checked="checked"> {'leave'|@translate}</label> - <label><input type="radio" name="nb_image_page_action" value="set" id="nb_image_page_action_set"> {'set to'|@translate}</label> - <input onmousedown="document.getElementById('nb_image_page_action_set').checked = true;" - size="4" maxlength="3" type="text" name="nb_image_page" value="{$NB_IMAGE_PAGE}"> - </td> - </tr> - - <tr> - <td>{'Interface theme'|@translate}</td> - <td> - <label><input type="radio" name="theme_action" value="leave" checked="checked"> {'leave'|@translate}</label> - <label><input type="radio" name="theme_action" value="set" id="theme_action_set"> {'set to'|@translate}</label> - <select onchange="document.getElementById('theme_action_set').checked = true;" name="theme" size="1"> + {* theme *} + <div id="action_theme" class="bulkAction"> + <select name="theme" size="1"> {html_options options=$theme_options selected=$theme_selected} </select> - </td> - </tr> - - <tr> - <td>{'Language'|@translate}</td> - <td> - <label><input type="radio" name="language_action" value="leave" checked="checked"> {'leave'|@translate}</label> - <label><input type="radio" name="language_action" value="set" id="language_action_set"> {'set to'|@translate}</label> - <select onchange="document.getElementById('language_action_set').checked = true;" name="language" size="1"> + </div> + + {* language *} + <div id="action_language" class="bulkAction"> + <select name="language" size="1"> {html_options options=$language_options selected=$language_selected} </select> - </td> - </tr> - - <tr> - <td>{'Recent period'|@translate}</td> - <td> - <label><input type="radio" name="recent_period_action" value="leave" checked="checked"> {'leave'|@translate}</label> - <label><input type="radio" name="recent_period_action" value="set" id="recent_period_action_set"> {'set to'|@translate}</label> - <input onmousedown="document.getElementById('recent_period_action_set').checked = true;" - type="text" size="3" maxlength="2" name="recent_period" value="{$RECENT_PERIOD}"> - </td> - </tr> - - <tr> - <td>{'Expand all albums'|@translate}</td> - <td> - <label><input type="radio" name="expand" value="leave" checked="checked"> {'leave'|@translate}</label> - / {'set to'|@translate} + </div> + + {* recent_period *} + <div id="action_recent_period" class="bulkAction"> + <div class="recent_period"></div> + <span class="recent_period_infos"></span> + <input type="hidden" name="recent_period" value="{$RECENT_PERIOD}"> + </div> + + {* expand *} + <div id="action_expand" class="bulkAction"> <label><input type="radio" name="expand" value="true">{'Yes'|@translate}</label> - <label><input type="radio" name="expand" value="false">{'No'|@translate}</label> - </td> - </tr> + <label><input type="radio" name="expand" value="false" checked="checked">{'No'|@translate}</label> + </div> -{if $ACTIVATE_COMMENTS} - <tr> - <td>{'Show number of comments'|@translate}</td> - <td> - <label><input type="radio" name="show_nb_comments" value="leave" checked="checked"> {'leave'|@translate}</label> - / {'set to'|@translate} + {* show_nb_comments *} + <div id="action_show_nb_comments" class="bulkAction"> <label><input type="radio" name="show_nb_comments" value="true">{'Yes'|@translate}</label> - <label><input type="radio" name="show_nb_comments" value="false">{'No'|@translate}</label> - </td> - </tr> -{/if} + <label><input type="radio" name="show_nb_comments" value="false" checked="checked">{'No'|@translate}</label> + </div> - <tr> - <td>{'Show number of hits'|@translate}</td> - <td> - <label><input type="radio" name="show_nb_hits" value="leave" checked="checked"> {'leave'|@translate}</label> - / {'set to'|@translate} + {* show_nb_hits *} + <div id="action_show_nb_hits" class="bulkAction"> <label><input type="radio" name="show_nb_hits" value="true">{'Yes'|@translate}</label> - <label><input type="radio" name="show_nb_hits" value="false">{'No'|@translate}</label> - </td> - </tr> + <label><input type="radio" name="show_nb_hits" value="false" checked="checked">{'No'|@translate}</label> + </div> -</table> + <p id="applyActionBlock" style="display:none" class="actionButtons"> + <input id="applyAction" class="submit" type="submit" value="{'Apply action'|@translate}" name="submit"> <span id="applyOnDetails"></span> + <span id="applyActionLoading" style="display:none"><img src="themes/default/images/ajax-loader-small.gif"></span> + <span class="infos" style="display:none">✔ {'Users modified'|translate}</span> + </p> + </div> {* #permitAction *} </fieldset> -<p> - {'target'|@translate} - <label><input type="radio" name="target" value="all"> {'all'|@translate}</label> - <label><input type="radio" name="target" value="selection" checked="checked"> {'selection'|@translate}</label> -</p> +</form> -<p> - <input class="submit" type="submit" value="{'Submit'|@translate}" name="pref_submit"> - <input class="submit" type="reset" value="{'Reset'|@translate}" name="pref_reset"> -</p> +{* Underscore Template Definition *} +<script type="text/template" class="userDetails"> +<form> + <div class="userActions"> +<% if (!user.isGuest) { %> + <span class="changePasswordDone infos" style="display:none">✔ {'Password updated'|translate}</span> + <span class="changePassword" style="display:none">{'New password'|translate} <input type="text"> <a href="#" class="buttonLike updatePassword"><img src="themes/default/images/ajax-loader-small.gif" style="margin-bottom:-1px;margin-left:1px;display:none;"><span class="text">{'Submit'|translate}</span></a> <a href="#" class="cancel">{'Cancel'|translate}</a></span> + <a class="icon-key changePasswordOpen" href="#">{'Change password'|translate}</a> + <br> +<% } %> -</form> + <a target="_blank" href="admin.php?page=user_perm&user_id=<%- user.id %>" class="icon-lock">{'Permissions'|translate}</a> + +<% if (!user.isProtected) { %> + <br><span class="userDelete"><img class="loading" src="themes/default/images/ajax-loader-small.gif" style="display:none;"><a href="#" class="icon-trash" data-user_id="<%- user.id %>">{'Delete'|translate}</a></span> +<% } %> + + </div> + + <span class="changeUsernameOpen"><strong class="username"><%- user.username %></strong> + +<% if (!user.isGuest) { %> + <a href="#" class="icon-pencil">{'Change username'|translate}</a></span> + <span class="changeUsername" style="display:none"> + <input type="text"> <a href="#" class="buttonLike updateUsername"><img src="themes/default/images/ajax-loader-small.gif" style="margin-bottom:-1px;margin-left:1px;display:none;"><span class="text">{'Submit'|translate}</span></a> <a href="#" class="cancel">{'Cancel'|translate}</a> +<% } %> + + </span> + + <div class="userStats"><%- user.registeredOn_string %><br><%- user.lastVisit_string %></div> -<script type="text/javascript">// <![CDATA[{literal} -jQuery("form:last").submit( function() { - if ( jQuery("input[name=target][value=selection]:checked", this).length > 0 ) - if ( jQuery("input[name='selection[]']:checked", this).length == 0) - { - alert( {/literal}"{'Select at least one user'|@translate|escape:javascript}"{literal} ); - return false; - } - return true; -} -);{/literal} -// ]]> + <div class="userPropertiesContainer"> + <input type="hidden" name="user_id" value="<%- user.id %>"> + <div class="userPropertiesSet"> + <div class="userPropertiesSetTitle">{'Properties'|translate}</div> + + <div class="userProperty"><strong>{'Email address'|translate}</strong> + <br> +<% if (!user.isGuest) { %> + <input name="email" type="text" value="<%- user.email %>"> +<% } else { %> + {'N/A'|translate} +<% } %> + </div> + + <div class="userProperty"><strong>{'Status'|translate}</strong> + <br> +<% if (!user.isProtected) { %> + <select name="status"> + <% _.each( user.statusOptions, function( option ){ %> + <option value="<%- option.value%>" <% if (option.isSelected) { %>selected="selected"<% } %>><%- option.label %></option> + <% }); %> + </select> +<% } else { %> + <%- user.statusLabel %> +<% } %> + </div> + + <div class="userProperty"><strong>{'Privacy level'|translate}</strong> + <br> + <select name="level"> +<% _.each( user.levelOptions, function( option ){ %> + <option value="<%- option.value%>" <% if (option.isSelected) { %>selected="selected"<% } %>><%- option.label %></option> +<% }); %> + </select> + </div> + + <div class="userProperty"><label><input type="checkbox" name="enabled_high"<% if (user.enabled_high == 'true') { %> checked="checked"<% } %>> <strong>{'High definition enabled'|translate}</strong></label></div> + + <div class="userProperty"><strong>{'Groups'|translate}</strong><br> + <select multiple class="chzn-select" style="width:340px;" name="group_id[]"> +<% _.each( user.groupOptions, function( option ){ %> + <option value="<%- option.value%>" <% if (option.isSelected) { %>selected="selected"<% } %>><%- option.label %></option> +<% }); %> + </select> + </div> + </div> + + <div class="userPropertiesSet userPrefs"> + <div class="userPropertiesSetTitle">{'Preferences'|translate}</div> + + <div class="userProperty"><strong class="nb_image_page_infos"></strong> + <div class="nb_image_page"></div> + <input type="hidden" name="nb_image_page" value="<%- user.nb_image_page %>"> + </div> + + <div class="userProperty"><strong>{'Theme'|translate}</strong><br> + <select name="theme"> +<% _.each( user.themeOptions, function( option ){ %> + <option value="<%- option.value%>" <% if (option.isSelected) { %>selected="selected"<% } %>><%- option.label %></option> +<% }); %> + </select> + </div> + + <div class="userProperty"><strong>{'Language'|translate}</strong><br> + <select name="language"> +<% _.each( user.languageOptions, function( option ){ %> + <option value="<%- option.value%>" <% if (option.isSelected) { %>selected="selected"<% } %>><%- option.label %></option> +<% }); %> + </select> + </div> + + <div class="userProperty"><strong>{'Recent period'|translate}</strong> <span class="recent_period_infos"></span> + <div class="recent_period"></div> + <input type="hidden" name="recent_period" value="<%- user.recent_period %>"> + </div> + + <div class="userProperty"><label><input type="checkbox" name="expand"<% if (user.expand == 'true') { %> checked="checked"<% }%>> <strong>{'Expand all albums'|translate}</strong></label></div> + + <div class="userProperty"><label><input type="checkbox" name="show_nb_comments"<% if (user.show_nb_comments == 'true') { %> checked="checked"<% }%>> <strong>{'Show number of comments'|translate}</strong></label></div> + + <div class="userProperty"><label><input type="checkbox" name="show_nb_hits"<% if (user.show_nb_hits == 'true') { %> checked="checked"<% }%>> <strong>{'Show number of hits'|translate}</strong></label></div> + + </div> + + <div style="clear:both"></div> + </div> {* userPropertiesContainer *} + + <span class="infos propertiesUpdateDone" style="display:none">✔ <%- user.updateString %></span> + + <input type="submit" value="{'Update user'|translate|escape:html}" style="display:none;" data-user_id="<%- user.id %>"> + <img class="submitWait" src="themes/default/images/ajax-loader-small.gif" style="display:none"> +</form> </script> - diff --git a/admin/themes/default/theme.css b/admin/themes/default/theme.css index dd4a63385..654685563 100644 --- a/admin/themes/default/theme.css +++ b/admin/themes/default/theme.css @@ -1,4 +1,7 @@ /* content.css */ +[class*="icon-"]:before { text-decoration:none !important; } + +.showInfo { font-size:15px;cursor:pointer;line-height:15px; } /* .Content is on every pages so it is common and it will no longer be a specific css */ .content h2 {margin: 0; padding: 5px 0.5em 5px 0.5em; text-align: right; font-size: 120%;} @@ -24,6 +27,9 @@ ul.categoryActions { margin: 0 2px; width: auto; list-style-position:outside; .content div.comment blockquote { margin-right: 0.5em; overflow: visible; /*avoid a very strange margin behaviour (all browsers) */ } +.commentFilterSelected {color:#666;text-decoration:underline;} +.comment .pendingFlag {font-style:italic;color:red;} + /* not used but should be */ #thePopuphelpPage .content { margin: 1em; } @@ -96,7 +102,7 @@ display:block; position:absolute; z-index:101; padding:8px 0 0 3px; color:white; /* History tables */ TABLE.table2 { border: 1px solid #111; - margin: 1em auto; + margin: 0 auto; padding: 0; } @@ -110,7 +116,6 @@ TABLE.table2 TR { TABLE.table2 THEAD TD { padding:7px 10px 3px 10px; } TABLE.table2 TR.throw { text-align: center; } -TABLE.table2 { margin:0pt auto; } .sort { display:block; padding:8px 5px 0px 1px; clear: right; float:left; } @@ -301,19 +306,15 @@ float:left; } #pwgHead A {color:#ccc;} -#pwgHead A:hover {color:#fff;border-bottom:1px solid #fff} +#pwgHead A:hover {color:#fff} #headActions {float:right; height:36px; line-height:36px; margin-right:10px;} A { - text-decoration:none; - border-bottom: 0; + text-decoration: none; } A:hover { - border-bottom: 1px solid #FF3363; -} -A.button, A.button:hover { - border: 0; + text-decoration: underline; } IMG { border: none; @@ -468,9 +469,18 @@ FORM.properties SPAN.property { padding: 0 0.5em 0 0; } -#mainConf, #historyConf, #commentsConf, #watermarkConf {border:none} - -#configContent label { +#configContent fieldset { + border:none; + padding-left:20px; +} +#configContent fieldset:not(.no-border) { + border-top:1px solid #bbb; +} +#configContent legend { + padding-left:0; + margin-left:-20px; +} +#configContent label:not(.no-bold) { font-weight: bold; } @@ -478,10 +488,6 @@ FORM.properties SPAN.property { white-space:nowrap; } -#mainConf li { - margin-bottom: 1em; -} - #theHeader H1 { margin-bottom: 0.5em; } @@ -494,9 +500,6 @@ UL.actions { UL.actions LI { display: inline; } -UL.actions A { - border: none; -} UL.tagSelection { width: 99%; @@ -512,6 +515,15 @@ UL.tagSelection LI { } /* jQuery tooltips */ +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; + -webkit-box-shadow: 0 0 5px #aaa; + box-shadow: 0 0 5px #aaa; +} + .cluetip-outer { position: relative; border: 1px solid #111111; @@ -604,7 +616,7 @@ html, body {height:100%; margin:0; padding:0;} } #footer A {color:#ccc;} -#footer A:hover {color:#fff;border-bottom:1px solid #fff;} +#footer A:hover {color:#fff} #adminHome { text-align:center; @@ -616,7 +628,7 @@ html, body {height:100%; margin:0; padding:0;} } #adminHome A {display:block; font-size:1.1em; font-weight:bold;} -#adminHome A {border:none;} +#adminHome A {text-decoration:none;} #piwigoInfos {float:left; margin-left:140px;} #pageInfos {float:right; margin-right:10px;} @@ -744,6 +756,14 @@ html, body {height:100%; margin:0; padding:0;} left: 0; } +#menubar dt [class^=icon-] { + font-size:120%; +} + +#menubar dd [class^="icon-"]:before { + margin-right: 0.5em; +} + .content { padding:0 5px 0 0; margin: 0 5px 0 227px; @@ -757,10 +777,10 @@ html, body {height:100%; margin:0; padding:0;} #thePopuphelpPage #pwgHead {display:none} #thePopuphelpPage #footer {display:none} -.themeBox {display:inline-table; text-align:center; height:192px; background-color:#eee; margin:5px; -moz-border-radius:5px; overflow:hidden; } +.themeBox {display:inline-table; text-align:center; height:192px; background-color:#eee; margin:5px; border-radius:5px; overflow:hidden; } .themeBox IMG {border:1px solid white; margin:0 15px;} -.themeName {font-size:1.1em; margin:5px 0;} +.themeName {font-size:1em; margin:5px 0; position:relative; } .themeActions {display: table-row; font-size:12px; height: 43px; } .themeActions DIV {display: table-cell; vertical-align: middle; line-height:18px; } .themeActions A {} @@ -816,7 +836,6 @@ h2:lang(en) { text-transform:capitalize; } .infos .submit {margin-left:30px;} .checkActions {text-align:left;padding:0;margin:0;} -.comment A:hover {border:none;} .pluginBoxes { text-align:left; @@ -851,8 +870,7 @@ h2:lang(en) { text-transform:capitalize; } .pluginMiniBoxNameCell {font-size:1.05em; margin:5px 0;position:relative;} .pluginActions {display: table-row; font-size:0.95em; color:#777;} .pluginActions DIV {display: table-cell; vertical-align: middle; line-height:18px; } -.showInfo {display:block;position:absolute;top:0;right:5px;width:15px;font-style:italic;font-family:"Georgia",serif;background-color:#464646;font-size:0.9em;border-radius:10px;-moz-border-radius:10px;} -.showInfo:hover {cursor:pointer;border:none;} +.pluginMiniBox .showInfo, .themeBox .showInfo { display:block;position:absolute;top:0;right:5px;width:15px; } .warning:before {content:url(icon/warning.png);vertical-align:top;} .deactivate_all {text-align:right;font-size:0.95em;} @@ -864,7 +882,7 @@ h2:lang(en) { text-transform:capitalize; } .languageActions {display: table-row; font-size:12px; } .languageActions DIV {display: table-cell; vertical-align: middle; line-height:18px; } -#ui-datepicker-div {-moz-border-radius:5px;} +#ui-datepicker-div {-moz-border-radius:5px; border-radius:5px;} #ui-datepicker-div .ui-icon-circle-triangle-w, #ui-datepicker-div .ui-icon-circle-triangle-e {color:transparent;} #ui-datepicker-div A.ui-datepicker-prev, #ui-datepicker-div A.ui-datepicker-next {background-color:transparent;} #ui-datepicker-div A.ui-datepicker-prev:hover, #ui-datepicker-div A.ui-datepicker-next:hover {-moz-border-radius:5px;} @@ -878,7 +896,6 @@ h2:lang(en) { text-transform:capitalize; } } .HelpActions a { border:0; margin:0; } -.HelpActions a:hover {border:0;} .HelpActions li {list-style-image:none; list-style-position:outside; list-style-type:none; text-align:center; text-indent:0pt; } legend {text-align:left;} @@ -948,16 +965,14 @@ LEGEND { #batchManagerGlobal #checkActions {text-align:left; margin:0 0 20px 0;} #batchManagerGlobal ul.thumbnails div.actions {display:none;position:absolute;top:0;right:5px;color:#fff} #batchManagerGlobal ul.thumbnails div.actions a {color:#fff;} -#batchManagerGlobal ul.thumbnails div.actions a:hover {border-color:#fff;} #batchManagerGlobal ul.thumbnails span.wrap1:hover div.actions {display:block;} #batchManagerGlobal #selectedMessage {padding:5px; border-radius:5px;} -#batchManagerGlobal #selectSet a {border-bottom:1px dotted;} #batchManagerGlobal #applyOnDetails {font-style:italic;} #batchManagerGlobal .actionButtons {text-align:left;} #batchManagerGlobal #filterList {padding-left:5px;} #batchManagerGlobal #filterList li {margin-bottom:5px; list-style-type:none;} #batchManagerGlobal a.removeFilter {background: url(icon/remove_filter.png) no-repeat top left;width:7px;height:7px;display:inline-block;} -#batchManagerGlobal a.removeFilter:hover {background: url(icon/remove_filter_hover.png); border:none;} +#batchManagerGlobal a.removeFilter:hover {background: url(icon/remove_filter_hover.png);} #batchManagerGlobal .removeFilter span {display:none} #batchManagerGlobal #applyFilterBlock {margin-top:20px;} #batchManagerGlobal .useFilterCheckbox {display:none;} @@ -965,38 +980,21 @@ LEGEND { #batchManagerGlobal #filter_dimension blockquote {margin:5px 0 20px 15px;} #batchManagerGlobal #filter_dimension .ui-slider-horizontal {width:650px;margin:5px 0 10px 0;} - -/* TokenInput (with Facebook style) */ -ul.token-input-list {overflow: hidden; height: auto !important; height: 1%;width: 400px;border: 1px solid #8496ba;cursor: text;font-size: 12px;font-family: Verdana;min-height: 1px;z-index: 999;margin: 0;padding: 0;background-color: #fff;list-style-type: none;clear: left;} -ul.token-input-list li input {border: 0;width: 100px;padding: 3px 8px;background-color: white;margin: 2px 0;-webkit-appearance: caret;} -li.token-input-token {overflow: hidden; height: auto !important; height: 15px;margin: 3px;padding: 1px 3px;background-color: #eff2f7;color: #000;cursor: default;border: 1px solid #ccd5e4;font-size: 11px;border-radius: 5px;-moz-border-radius: 5px;-webkit-border-radius: 5px;float: left;white-space: nowrap;} -li.token-input-token p {display: inline;padding: 0;margin: 0;} -li.token-input-token span {color: #a6b3cf;margin-left: 5px;font-weight: bold;cursor: pointer;} -li.token-input-selected-token {background-color: #5670a6;border: 1px solid #3b5998;color: #fff;} -li.token-input-input-token {float: left;margin: 0;padding: 0;list-style-type: none;width:10px;} -div.token-input-dropdown {position: absolute;width: 400px;background-color: #fff;overflow: hidden;border-left: 1px solid #ccc;border-right: 1px solid #ccc;border-bottom: 1px solid #ccc;cursor: default;font-size: 11px;font-family: Verdana;z-index: 1;} -div.token-input-dropdown p {margin: 0;padding: 5px;font-weight: bold;color: #777;} -div.token-input-dropdown ul {margin: 0;padding: 0;} -div.token-input-dropdown ul li {background-color: #fff;padding: 3px;margin: 0;list-style-type: none;} -div.token-input-dropdown ul li.token-input-dropdown-item {background-color: #fff;} -div.token-input-dropdown ul li.token-input-dropdown-item2 {background-color: #fff;} -div.token-input-dropdown ul li em {font-weight: bold;font-style: normal;} -div.token-input-dropdown ul li.token-input-selected-dropdown-item {background-color: #3b5998;color: #fff;} - -#mainConf a.addFilter {font-weight:normal;margin-left:20px;} -#mainConf a.removeFilter {font-weight:normal;} -#mainConf span.property span.filter:first-child a.removeFilter {display:none;} /* can't delete the first field */ -#mainConf span.filter {display:block;margin-left:20px;} -#mainConf .transparent {opacity:0.5;filter:alpha(opacity=50);} -#mainConf .order_by_is_custom {display:block;font-weight:normal;font-style:italic;margin-left:20px;} +#order_filters a.addFilter {font-weight:normal;margin-left:20px;} +#order_filters a.removeFilter {font-weight:normal;} +#order_filters span.property span.filter:first-child a.removeFilter {display:none;} /* can't delete the first field */ +#order_filters span.filter {display:block;margin-left:20px;} +#order_filters .transparent {opacity:0.5;filter:alpha(opacity=50);} +#order_filters .order_by_is_custom {display:block;font-weight:normal;font-style:italic;margin-left:20px;} /* Upload Form */ #uploadBoxes .file {margin-bottom:5px;text-align:left;} #uploadBoxes {margin-top:20px;} #addUploadBox {margin-bottom:2em;} +p.uploadInfo {text-align:left;font-size:90%;color:#999;} p#uploadWarningsSummary {text-align:left;margin-bottom:1em;font-size:90%;color:#999;} -p#uploadWarningsSummary .showInfo {position:static;display:inline;padding:1px 6px;margin-left:3px;} +p#uploadWarningsSummary .showInfo {margin-left:3px;} p#uploadWarnings {display:none;text-align:left;margin-bottom:1em;font-size:90%;color:#999;} p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;} @@ -1028,6 +1026,27 @@ p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;} padding-left:10px; } +#albumLinks ul, .photoLinks ul { + padding-left:0; +} + +#albumLinks li, .photoLinks li { + list-style:none; +} + +.photoLinks { + vertical-align:top; +} + +.photoLinks ul { + margin:0; +} + +/* Album Manager */ +#addAlbumForm input[name="category_name"], #formCreateAlbum input[name="virtual_name"] { + width:300px; +} + /* Pending Comments */ #pendingComments { padding:0 5px 0 10px; @@ -1041,9 +1060,12 @@ p#uploadModeInfos {text-align:left;margin-top:1em;font-size:90%;color:#999;} text-align:left; } +.commentFilter {text-align:left;margin:5px 1em;} +.commentFilter .navigationBar {float:right; margin:0;} + FORM#categoryOrdering p.albumTitle {margin:0;} -FORM#categoryOrdering p.albumActions {visibility:hidden; margin:0} -FORM#categoryOrdering .categoryLi:hover p.albumActions {visibility:visible;} +FORM#categoryOrdering p.albumActions, FORM#categoryOrdering span.albumInfos {visibility:hidden; margin:0} +FORM#categoryOrdering .categoryLi:hover p.albumActions, FORM#categoryOrdering .categoryLi:hover span.albumInfos {visibility:visible;} .showCreateAlbum {text-align:left; margin:0 1em 1em 1em;line-height:22px;} #autoOrder p, #createAlbum p {text-align:left; margin:0 0 1em 0;} @@ -1097,6 +1119,55 @@ input[type="text"].dError {border-color:#ff7070; background-color:#FFe5e5;} border-radius:10px; -moz-border-radius:10px; -webkit-border-radius:10px; - -border-radius:10px; margin-left:5px; -}
\ No newline at end of file +} + +.groups { + text-align:center; +} +.groups li { + vertical-align: middle; + position: relative; + display: inline-block; + text-align: left; + height: 300px; + width: 250px; + margin: 5px; + border-radius: 5px; +} +.groups p { + text-align:left; +} +.groups label>p { + margin: 0; + border-radius: 5px 5px 0 0; + padding: 2px; + text-align: center; +} + +.groups input { + float: right; +} +p.list_user { + text-align: left; + max-height: 200px; + overflow: auto; +} +a.group_perm { + position: absolute; + bottom: 5px; + right: 5px; +} + +#userList .openUserDetails {visibility:hidden;} +#userList tr:hover .openUserDetails {visibility:visible;} +#userList .icon-cancel-circled {visibility:visible;} + +.userProperties {max-width:730px;} +.userPropertiesContainer {border-top:1px solid #ddd;margin-top:1em;} +.userPropertiesSet {width:350px;float:left;padding-top:5px} +.userPropertiesSetTitle {font-weight:bold;margin-bottom:1em;} +.userPrefs {border-left:1px solid #ddd;padding-left:10px;} +.userProperty {width:340px;float:left;margin-bottom:15px;} +.userActions {float:right;text-align:right;} + diff --git a/admin/themes/default/uploadify.jGrowl.css b/admin/themes/default/uploadify.jGrowl.css deleted file mode 100644 index 44216e6b1..000000000 --- a/admin/themes/default/uploadify.jGrowl.css +++ /dev/null @@ -1,150 +0,0 @@ -/* -Default jGrowl style definitions for: - -Uploadify v1.6.2 -Copyright (C) 2009 by Ronnie Garcia -Co-developed by Travis Nickels -*/ - -/** Uploadify Styling here Styling **/ -div.jGrowl div.success { - background: url(images/jgrowl-check.png) no-repeat 6px 6px; -} -div.jGrowl div.error { - background: url(images/jgrowl-error.png) no-repeat 6px center; -} -div.jGrowl div.warning { - background: url(images/jgrowl-alert.png) no-repeat 6px 6px; -} -div.jGrowl div.warning:before { - content:none; -} - -div.jGrowl div.jGrowl-notification, div.jGrowl div.jGrowl-closer { - background-color: #000; - color: #fff; - opacity: .85; - filter: alpha(opacity = 85); - zoom: 1; - width: 300px; - padding: 10px; - margin-top: 5px; - margin-bottom: 5px; - font-family: Tahoma, Arial, Helvetica, sans-serif; - font-size: 12px; - text-align: left; - display: none; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -/* original jGrowl css styling */ - -div.center div.jGrowl-notification, div.center div.jGrowl-closer { - margin-left: auto; - margin-right: auto; -} - -div.jGrowl div.jGrowl-notification { - min-height: 40px; -} - -div.jGrowl div.jGrowl-notification div.close { - float: right; - font-weight: bold; - font-size: 12px; - cursor: pointer; -} - -div.jGrowl div.jGrowl-closer { - height: 15px; - padding-top: 4px; - padding-bottom: 4px; - cursor: pointer; - font-size: 11px; - font-weight: bold; - text-align: center; -} - -div.jGrowl div.jGrowl-notification div.header { - font-weight: bold; - font-size: 14px; - margin-left: 47px; -} -div.jGrowl div.jGrowl-notification div.message { - font-size: 12px; - margin-left: 47px; -} -div.jGrowl div.jGrowl-notification p { - font-size: 6px; -} - -div.jGrowl { - padding: 10px; - z-index: 9999; -} - -/** Special IE6 Style Positioning **/ -div.ie6 { - position: absolute; -} - -div.ie6.top-right { - right: auto; - bottom: auto; - left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -div.ie6.top-left { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -div.ie6.bottom-right { - left: expression( ( 0 - jGrowl.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -div.ie6.bottom-left { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 - jGrowl.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); -} - -div.ie6.center { - left: expression( ( 0 + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' ); - top: expression( ( 0 + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' ); - width: 100%; -} - -/** Normal Style Positions **/ -body > div.jGrowl { - position: fixed; -} - -body > div.jGrowl.top-left { - left: 0px; - top: 0px; -} - -body > div.jGrowl.top-right { - right: 0px; - top: 0px; -} - -body > div.jGrowl.bottom-left { - left: 0px; - bottom: 0px; -} - -body > div.jGrowl.bottom-right { - right: 0px; - bottom: 0px; -} - -body > div.jGrowl.center { - top: 0px; - width: 50%; - left: 25%; -} - |