aboutsummaryrefslogtreecommitdiffstats
path: root/admin/themes/default
diff options
context:
space:
mode:
Diffstat (limited to 'admin/themes/default')
-rw-r--r--admin/themes/default/fix-ie7.css3
-rw-r--r--admin/themes/default/fontello/LICENSE.txt66
-rw-r--r--admin/themes/default/fontello/README.txt75
-rw-r--r--admin/themes/default/fontello/config.json364
-rw-r--r--admin/themes/default/fontello/css/animation.css85
-rw-r--r--admin/themes/default/fontello/css/fontello-codes.css62
-rw-r--r--admin/themes/default/fontello/css/fontello-embedded.css115
-rw-r--r--admin/themes/default/fontello/css/fontello-ie7-codes.css60
-rw-r--r--admin/themes/default/fontello/css/fontello-ie7.css71
-rw-r--r--admin/themes/default/fontello/css/fontello.css113
-rw-r--r--admin/themes/default/fontello/demo.html355
-rw-r--r--admin/themes/default/fontello/font/fontello.eotbin0 -> 21572 bytes
-rw-r--r--admin/themes/default/fontello/font/fontello.svg70
-rw-r--r--admin/themes/default/fontello/font/fontello.ttfbin0 -> 21404 bytes
-rw-r--r--admin/themes/default/fontello/font/fontello.woffbin0 -> 13968 bytes
-rw-r--r--admin/themes/default/icon/index.php2
-rw-r--r--admin/themes/default/icon/plug_activate.pngbin432 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_activate_grey.pngbin388 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_deactivate.pngbin475 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_deactivate_grey.pngbin399 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_delete.pngbin425 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_delete_grey.pngbin436 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_install.pngbin417 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_install_grey.pngbin376 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_uninstall.pngbin429 -> 0 bytes
-rw-r--r--admin/themes/default/icon/plug_uninstall_grey.pngbin387 -> 0 bytes
-rw-r--r--admin/themes/default/icon/ranks.pngbin772 -> 0 bytes
-rw-r--r--admin/themes/default/icon/ranks_grey.pngbin762 -> 0 bytes
-rw-r--r--admin/themes/default/icon/sync_metadata.pngbin1877 -> 0 bytes
-rw-r--r--admin/themes/default/icon/sync_metadata_pink.pngbin1949 -> 0 bytes
-rw-r--r--admin/themes/default/icon/synchronize.pngbin782 -> 0 bytes
-rw-r--r--admin/themes/default/images/jgrowl-alert.pngbin2596 -> 0 bytes
-rw-r--r--admin/themes/default/images/jgrowl-check.pngbin2412 -> 0 bytes
-rw-r--r--admin/themes/default/images/jgrowl-error.pngbin2446 -> 0 bytes
-rw-r--r--admin/themes/default/index.php2
-rw-r--r--admin/themes/default/js/common.js55
-rw-r--r--admin/themes/default/js/jquery.geoip.js62
-rw-r--r--admin/themes/default/js/menu_icons.js11
-rw-r--r--admin/themes/default/template/admin.tpl109
-rw-r--r--admin/themes/default/template/batch_manager_global.tpl73
-rw-r--r--admin/themes/default/template/batch_manager_unit.tpl3
-rw-r--r--admin/themes/default/template/cat_list.tpl28
-rw-r--r--admin/themes/default/template/cat_modify.tpl18
-rw-r--r--admin/themes/default/template/cat_perm.tpl4
-rw-r--r--admin/themes/default/template/comments.tpl24
-rw-r--r--admin/themes/default/template/configuration.tpl490
-rw-r--r--admin/themes/default/template/element_set_ranks.tpl6
-rw-r--r--admin/themes/default/template/extend_for_templates.tpl8
-rw-r--r--admin/themes/default/template/group_list.tpl100
-rw-r--r--admin/themes/default/template/header.tpl15
-rw-r--r--admin/themes/default/template/history.tpl64
-rw-r--r--admin/themes/default/template/include/add_album.inc.tpl110
-rw-r--r--admin/themes/default/template/install.tpl29
-rw-r--r--admin/themes/default/template/intro.tpl9
-rw-r--r--admin/themes/default/template/menubar.tpl2
-rw-r--r--admin/themes/default/template/notification_by_mail.tpl14
-rw-r--r--admin/themes/default/template/photos_add_direct.tpl24
-rw-r--r--admin/themes/default/template/picture_modify.tpl13
-rw-r--r--admin/themes/default/template/plugins_installed.tpl4
-rw-r--r--admin/themes/default/template/plugins_new.tpl2
-rw-r--r--admin/themes/default/template/profile_content.tpl2
-rw-r--r--admin/themes/default/template/tags.tpl151
-rw-r--r--admin/themes/default/template/themes_installed.tpl120
-rw-r--r--admin/themes/default/template/updates_ext.tpl8
-rw-r--r--admin/themes/default/template/updates_pwg.tpl14
-rw-r--r--admin/themes/default/template/upgrade.tpl9
-rw-r--r--admin/themes/default/template/user_list.tpl1327
-rw-r--r--admin/themes/default/theme.css191
-rw-r--r--admin/themes/default/uploadify.jGrowl.css150
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 = '&#xe81d;&nbsp;'); }
+.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0ad;&nbsp;'); }
+.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;&nbsp;'); }
+.icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2605;&nbsp;'); }
+.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2606;&nbsp;'); }
+.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f464;&nbsp;'); }
+.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f304;&nbsp;'); }
+.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe821;&nbsp;'); }
+.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2795;&nbsp;'); }
+.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f517;&nbsp;'); }
+.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f512;&nbsp;'); }
+.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70a;&nbsp;'); }
+.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70d;&nbsp;'); }
+.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }
+.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x270e;&nbsp;'); }
+.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe720;&nbsp;'); }
+.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe729;&nbsp;'); }
+.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe806;&nbsp;'); }
+.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe809;&nbsp;'); }
+.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2699;&nbsp;'); }
+.icon-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x26ef;&nbsp;'); }
+.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f527;&nbsp;'); }
+.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73d;&nbsp;'); }
+.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81b;&nbsp;'); }
+.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f554;&nbsp;'); }
+.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f6ab;&nbsp;'); }
+.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe812;&nbsp;'); }
+.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80c;&nbsp;'); }
+.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe804;&nbsp;'); }
+.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2709;&nbsp;'); }
+.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe805;&nbsp;'); }
+.icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }
+.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;&nbsp;'); }
+.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81f;&nbsp;'); }
+.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe820;&nbsp;'); }
+.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;&nbsp;'); }
+.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;&nbsp;'); }
+.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;&nbsp;'); }
+.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe811;&nbsp;'); }
+.icon-user-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80b;&nbsp;'); }
+.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81a;&nbsp;'); }
+.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe817;&nbsp;'); }
+.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80e;&nbsp;'); }
+.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81c;&nbsp;'); }
+.icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe813;&nbsp;'); }
+.icon-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe814;&nbsp;'); }
+.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe803;&nbsp;'); }
+.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81e;&nbsp;'); }
+.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe816;&nbsp;'); }
+.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe807;&nbsp;'); }
+.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }
+.icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe815;&nbsp;'); }
+.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe808;&nbsp;'); }
+.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe7b6;&nbsp;'); }
+.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe810;&nbsp;'); }
+.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80f;&nbsp;'); }
+.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe802;&nbsp;'); }
+.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80d;&nbsp;'); }
+.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f500;&nbsp;'); } \ 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 = '&#xe81d;&nbsp;'); }
+.icon-asl { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0ad;&nbsp;'); }
+.icon-mail-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;&nbsp;'); }
+.icon-star { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2605;&nbsp;'); }
+.icon-star-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2606;&nbsp;'); }
+.icon-user { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f464;&nbsp;'); }
+.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f304;&nbsp;'); }
+.icon-cancel-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe821;&nbsp;'); }
+.icon-plus-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2795;&nbsp;'); }
+.icon-link { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f517;&nbsp;'); }
+.icon-lock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f512;&nbsp;'); }
+.icon-eye { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70a;&nbsp;'); }
+.icon-tags { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70d;&nbsp;'); }
+.icon-code { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }
+.icon-pencil { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x270e;&nbsp;'); }
+.icon-chat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe720;&nbsp;'); }
+.icon-trash { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe729;&nbsp;'); }
+.icon-folder-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe806;&nbsp;'); }
+.icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe809;&nbsp;'); }
+.icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2699;&nbsp;'); }
+.icon-cog-alt { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x26ef;&nbsp;'); }
+.icon-wrench { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f527;&nbsp;'); }
+.icon-basket { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe73d;&nbsp;'); }
+.icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81b;&nbsp;'); }
+.icon-clock { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f554;&nbsp;'); }
+.icon-block { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f6ab;&nbsp;'); }
+.icon-move { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe812;&nbsp;'); }
+.icon-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80c;&nbsp;'); }
+.icon-arrows-cw { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe804;&nbsp;'); }
+.icon-mail { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2709;&nbsp;'); }
+.icon-exchange { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe805;&nbsp;'); }
+.icon-signal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }
+.icon-crop { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf125;&nbsp;'); }
+.icon-check { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81f;&nbsp;'); }
+.icon-check-empty { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe820;&nbsp;'); }
+.icon-tasks { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;&nbsp;'); }
+.icon-filter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;&nbsp;'); }
+.icon-sitemap { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;&nbsp;'); }
+.icon-search { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe811;&nbsp;'); }
+.icon-user-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80b;&nbsp;'); }
+.icon-help-circled { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81a;&nbsp;'); }
+.icon-info-circled-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe817;&nbsp;'); }
+.icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80e;&nbsp;'); }
+.icon-flag { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81c;&nbsp;'); }
+.icon-upload { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe813;&nbsp;'); }
+.icon-upload-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe814;&nbsp;'); }
+.icon-tools { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe803;&nbsp;'); }
+.icon-hourglass { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe81e;&nbsp;'); }
+.icon-network { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe816;&nbsp;'); }
+.icon-brush { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe807;&nbsp;'); }
+.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }
+.icon-key { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe815;&nbsp;'); }
+.icon-flow-branch { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe808;&nbsp;'); }
+.icon-puzzle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe7b6;&nbsp;'); }
+.icon-mail-1 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe810;&nbsp;'); }
+.icon-equalizer { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80f;&nbsp;'); }
+.icon-users { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe802;&nbsp;'); }
+.icon-group { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80d;&nbsp;'); }
+.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f500;&nbsp;'); } \ 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
new file mode 100644
index 000000000..030da1c23
--- /dev/null
+++ b/admin/themes/default/fontello/font/fontello.eot
Binary files differ
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="&#xe81d;" 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="&#xe0ad;" 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="&#xf0e0;" 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="&#x2605;" 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="&#x2606;" 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="&#x1f464;" 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="&#x1f304;" 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="&#xe821;" 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="&#x2795;" 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="&#x1f517;" 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="&#x1f512;" 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="&#xe70a;" 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="&#xe70d;" 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="&#xe80a;" 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="&#x270e;" 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="&#xe720;" 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="&#xe729;" 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="&#xe806;" 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="&#xe809;" 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="&#x2699;" 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="&#x26ef;" 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="&#x1f527;" 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="&#xe73d;" 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="&#xe81b;" 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="&#x1f554;" 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="&#x1f6ab;" 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="&#xe812;" 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="&#xe80c;" 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="&#xe804;" 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="&#x2709;" 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="&#xe805;" 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="&#xe801;" 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="&#xf125;" 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="&#xe81f;" 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="&#xe820;" 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="&#xf0ae;" 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="&#xf0b0;" 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="&#xf0e8;" 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="&#xe811;" 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="&#xe80b;" 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="&#xe81a;" 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="&#xe817;" 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="&#xe80e;" 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="&#xe81c;" 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="&#xe813;" 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="&#xe814;" 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="&#xe803;" 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="&#xe81e;" 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="&#xe816;" 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="&#xe807;" 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="&#xe800;" 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="&#xe815;" 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="&#xe808;" 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="&#xe7b6;" 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="&#xe810;" d="m467 366l-449 210l0 109l893 0l0-109z m0-123l444 210l0-437l-893 0l0 438z" horiz-adv-x="928" />
+<glyph glyph-name="equalizer" unicode="&#xe80f;" 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="&#xe802;" 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="&#xe80d;" 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="&#x1f500;" 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
new file mode 100644
index 000000000..328a9c5f9
--- /dev/null
+++ b/admin/themes/default/fontello/font/fontello.ttf
Binary files differ
diff --git a/admin/themes/default/fontello/font/fontello.woff b/admin/themes/default/fontello/font/fontello.woff
new file mode 100644
index 000000000..9e17f2e50
--- /dev/null
+++ b/admin/themes/default/fontello/font/fontello.woff
Binary files differ
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
deleted file mode 100644
index feb97a1c9..000000000
--- a/admin/themes/default/icon/plug_activate.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_activate_grey.png b/admin/themes/default/icon/plug_activate_grey.png
deleted file mode 100644
index bf2a9be53..000000000
--- a/admin/themes/default/icon/plug_activate_grey.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_deactivate.png b/admin/themes/default/icon/plug_deactivate.png
deleted file mode 100644
index 8401ad8b9..000000000
--- a/admin/themes/default/icon/plug_deactivate.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_deactivate_grey.png b/admin/themes/default/icon/plug_deactivate_grey.png
deleted file mode 100644
index a7e55e669..000000000
--- a/admin/themes/default/icon/plug_deactivate_grey.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_delete.png b/admin/themes/default/icon/plug_delete.png
deleted file mode 100644
index 285e53e19..000000000
--- a/admin/themes/default/icon/plug_delete.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_delete_grey.png b/admin/themes/default/icon/plug_delete_grey.png
deleted file mode 100644
index d3d070bfc..000000000
--- a/admin/themes/default/icon/plug_delete_grey.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_install.png b/admin/themes/default/icon/plug_install.png
deleted file mode 100644
index bef78e171..000000000
--- a/admin/themes/default/icon/plug_install.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_install_grey.png b/admin/themes/default/icon/plug_install_grey.png
deleted file mode 100644
index 3bd56be3c..000000000
--- a/admin/themes/default/icon/plug_install_grey.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_uninstall.png b/admin/themes/default/icon/plug_uninstall.png
deleted file mode 100644
index 9fd420ad7..000000000
--- a/admin/themes/default/icon/plug_uninstall.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/plug_uninstall_grey.png b/admin/themes/default/icon/plug_uninstall_grey.png
deleted file mode 100644
index 4d6291cee..000000000
--- a/admin/themes/default/icon/plug_uninstall_grey.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/ranks.png b/admin/themes/default/icon/ranks.png
deleted file mode 100644
index 47710e87f..000000000
--- a/admin/themes/default/icon/ranks.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/ranks_grey.png b/admin/themes/default/icon/ranks_grey.png
deleted file mode 100644
index f9757b998..000000000
--- a/admin/themes/default/icon/ranks_grey.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/sync_metadata.png b/admin/themes/default/icon/sync_metadata.png
deleted file mode 100644
index c527e2b04..000000000
--- a/admin/themes/default/icon/sync_metadata.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/sync_metadata_pink.png b/admin/themes/default/icon/sync_metadata_pink.png
deleted file mode 100644
index 954c69612..000000000
--- a/admin/themes/default/icon/sync_metadata_pink.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/icon/synchronize.png b/admin/themes/default/icon/synchronize.png
deleted file mode 100644
index 767bb3b6d..000000000
--- a/admin/themes/default/icon/synchronize.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/images/jgrowl-alert.png b/admin/themes/default/images/jgrowl-alert.png
deleted file mode 100644
index 388fcbb81..000000000
--- a/admin/themes/default/images/jgrowl-alert.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/images/jgrowl-check.png b/admin/themes/default/images/jgrowl-check.png
deleted file mode 100644
index b6a649a1b..000000000
--- a/admin/themes/default/images/jgrowl-check.png
+++ /dev/null
Binary files differ
diff --git a/admin/themes/default/images/jgrowl-error.png b/admin/themes/default/images/jgrowl-error.png
deleted file mode 100644
index 48ef138c7..000000000
--- a/admin/themes/default/images/jgrowl-error.png
+++ /dev/null
Binary files differ
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">&nbsp;{'Photos'|@translate}&nbsp;</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}&nbsp;</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">&nbsp;{'Albums'|@translate}&nbsp;</span></dt>
+ </ul>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="rdion"><span class="icon-sitemap"> </span><span>{'Albums'|@translate}&nbsp;</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">&nbsp;{'Users'|@translate}&nbsp;</span></dt>
- <dd>
+ </dl>
+ <dl>
+ <dt class="rdion"><span class="icon-users"> </span><span>{'Users'|@translate}&nbsp;</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">&nbsp;{'Plugins'|@translate}&nbsp;</span></dt>
- <dd>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="rdion"><span class="icon-puzzle"> </span><span>{'Plugins'|@translate}&nbsp;</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">&nbsp;{'Tools'|@translate}&nbsp;</span></dt>
- <dd>
+ </dd>
+ </dl>
+ <dl>
+ <dt class="rdion"><span class="icon-wrench"> </span><span>{'Tools'|@translate}&nbsp;</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">&nbsp;{'Configuration'|@translate}&nbsp;</span></dt>
- <dd>
+ </dd>
+ </dl>
+ <dl class="last">
+ <dt class="rdion"><span class="icon-cog"> </span><span>{'Configuration'|@translate}&nbsp;</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> &middot; <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">&middot;</span> {$category.NB_PHOTOS|translate_dec:'%d photo':'%d photos'} <span class="userSeparator">&middot;</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}&amp;filter=all" class="{if $filter == 'all'}commentFilterSelected{/if}">{'All'|@translate}</a> ({$nb_total})
+ | <a href="{$F_ACTION}&amp;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}
- &#x2714;
- {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}
+ &#x2714;
+ {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&amp;step=2&amp;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&amp;step=3&amp;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&amp;step=2&amp;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&amp;step=3&amp;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;">&nbsp; {'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"> &nbsp;{'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;">&nbsp; {'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 = "&#x2714; {'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('&#x2718; '+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('&#x2718; '+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('&#x2714; 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>&nbsp; <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>
- &nbsp;
- <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>&nbsp;</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">&#x2714; {'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">&#x2714; {'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&amp;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">&#x2714; <%- 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%;
-}
-