diff --git a/composer.json b/composer.json index 87869e5883c9b8eac1defe34066d54af44c74f35..c3ce00ab81407ada1e385b0d27e088e956e7c4cd 100644 --- a/composer.json +++ b/composer.json @@ -107,7 +107,6 @@ "drupal/google_analytics": "2.2", "drupal/honeypot": "^1.28", "drupal/image_popup": "1.1", - "drupal/imce": "1.6", "drupal/inline_entity_form": "1.0-beta1", "drupal/link_attributes": "1.0", "drupal/linkit": "5.0-beta6", diff --git a/composer.lock b/composer.lock index e6722e912a41ce29e96a34a76368c580c09b653d..658f1aba13f1e2920a08933bb347e4a388e2ef52 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "d94a2c48325f6123c50fa20b7c0207f8", + "content-hash": "f43f71f0442201418b3a052289c4c8ae", "packages": [ { "name": "alchemy/zippy", @@ -4092,53 +4092,6 @@ "source": "http://cgit.drupalcode.org/image_popup" } }, - { - "name": "drupal/imce", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://git.drupal.org/project/imce", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imce-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "973fc92959dc31b16e33114852b8c26ec050ba7c" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.6", - "datestamp": "1499898842", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "ufku", - "homepage": "https://www.drupal.org/user/9910" - } - ], - "description": "Provides a file manager supporting personal folders.", - "homepage": "https://drupal.org/project/imce", - "support": { - "source": "http://cgit.drupalcode.org/imce" - } - }, { "name": "drupal/inline_entity_form", "version": "1.0.0-beta1", diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 4b111a3bb5fba297cc322367ddb73e8814fbb39b..01cd2c6fcbb10c026db54c28f9fd9ed6b52b6898 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -4217,55 +4217,6 @@ "source": "http://cgit.drupalcode.org/image_popup" } }, - { - "name": "drupal/imce", - "version": "1.6.0", - "version_normalized": "1.6.0.0", - "source": { - "type": "git", - "url": "https://git.drupal.org/project/imce", - "reference": "8.x-1.6" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/imce-8.x-1.6.zip", - "reference": "8.x-1.6", - "shasum": "973fc92959dc31b16e33114852b8c26ec050ba7c" - }, - "require": { - "drupal/core": "~8.0" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.6", - "datestamp": "1499898842", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0+" - ], - "authors": [ - { - "name": "ufku", - "homepage": "https://www.drupal.org/user/9910" - } - ], - "description": "Provides a file manager supporting personal folders.", - "homepage": "https://drupal.org/project/imce", - "support": { - "source": "http://cgit.drupalcode.org/imce" - } - }, { "name": "drupal/inline_entity_form", "version": "1.0.0-beta1", diff --git a/web/modules/imce/LICENSE.txt b/web/modules/imce/LICENSE.txt deleted file mode 100644 index d159169d1050894d3ea3b98e1c965c4058208fe1..0000000000000000000000000000000000000000 --- a/web/modules/imce/LICENSE.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/web/modules/imce/README.txt b/web/modules/imce/README.txt deleted file mode 100644 index 2733a07b669b666eb1c4b159819e4d520d70c373..0000000000000000000000000000000000000000 --- a/web/modules/imce/README.txt +++ /dev/null @@ -1,38 +0,0 @@ -Imce -http://drupal.org/project/imce -==================================== - - -DESCRIPTION ------------ -Imce is an ajax based file manager that supports personal folders. - - -INSTALLATION ------------ -1. Copy imce directory into your modules(sites/all/modules) directory. -2. Enable the module at /admin/modules. -3. Manage configuration profiles at /admin/config/media/imce. -4. Access your files at /imce - - -CKEDITOR INTEGRATION ------------ -1. Go to /admin/config/content/formats to edit a text format that uses CKEditor. -2. Enable CKEditor image button without image uploads. -Image uploads must be disabled in order for IMCE link appear in the image dialog. -There is also an image button provided by Imce but it can't be used for editing existing images. - - -BUEDITOR INTEGRATION ------------ -1. Edit your editor at /admin/config/content/bueditor. -2. Select Imce File Manager as the File browser under Settings. - - -FILE/IMAGE FIELD INTEGRATION ------------ -1. Go to form settings of your content type. Ex: /admin/structure/types/manage/article/form-display -2. Edit widget settings of a file/image field. -3. Check the box saying "Allow users to select files from Imce File Manager for this field." and save. -4. You should now see the "Open File Browser" link above the upload widget in the content form. diff --git a/web/modules/imce/composer.json b/web/modules/imce/composer.json deleted file mode 100644 index 19e05eb6290fd8cadb6126d210f007a15cfca650..0000000000000000000000000000000000000000 --- a/web/modules/imce/composer.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "drupal/imce", - "description": "Provides a file manager supporting personal folders.", - "type": "drupal-module", - "homepage": "https://drupal.org/project/imce", - "license": "GPL-2.0+" -} \ No newline at end of file diff --git a/web/modules/imce/config/install/imce.profile.admin.yml b/web/modules/imce/config/install/imce.profile.admin.yml deleted file mode 100644 index 85c2f1cc0efb387da1ce28ad62456791486d9e5b..0000000000000000000000000000000000000000 --- a/web/modules/imce/config/install/imce.profile.admin.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Administrator profile -id: admin -label: 'Admin profile' -description: 'Configuration for site administrators' -conf: - extensions: '*' - maxsize: 0 - quota: 0 - maxwidth: 0 - maxheight: 0 - replace: 0 - folders: - - - path: '.' - permissions: - all: true -langcode: en \ No newline at end of file diff --git a/web/modules/imce/config/install/imce.profile.default.yml b/web/modules/imce/config/install/imce.profile.default.yml deleted file mode 100644 index 09a177da461476200a6ffc7d0afc207d429f213c..0000000000000000000000000000000000000000 --- a/web/modules/imce/config/install/imce.profile.default.yml +++ /dev/null @@ -1,19 +0,0 @@ -# Member profile -id: member -label: 'Member profile' -description: 'Configuration for site members' -conf: - extensions: 'jpg png gif' - maxsize: 2 - quota: 50 - maxwidth: 1024 - maxheight: 1024 - replace: 0 - folders: - - - path: 'users/user[user:uid]' - permissions: - browse_files: true - upload_files: true - delete_files: true -langcode: en \ No newline at end of file diff --git a/web/modules/imce/config/install/imce.settings.yml b/web/modules/imce/config/install/imce.settings.yml deleted file mode 100644 index 6f7652a6bb0e0387d3cf26cd1d5aeac7155d1bcb..0000000000000000000000000000000000000000 --- a/web/modules/imce/config/install/imce.settings.yml +++ /dev/null @@ -1,3 +0,0 @@ -abs_urls: false -admin_theme: false -roles_profiles: [] diff --git a/web/modules/imce/config/schema/imce.schema.yml b/web/modules/imce/config/schema/imce.schema.yml deleted file mode 100644 index 4cca3358acdd981b03dc8bbfe8110fb1e4ef4ad4..0000000000000000000000000000000000000000 --- a/web/modules/imce/config/schema/imce.schema.yml +++ /dev/null @@ -1,88 +0,0 @@ -# Imce settings -imce.settings: - type: config_object - label: 'Imce settings' - mapping: - abs_urls: - type: boolean - label: 'Enable absolute URLs' - admin_theme: - type: boolean - label: 'Use admin theme for IMCE paths' - roles_profiles: - type: sequence - label: 'Role-profile assignments' - sequence: - - type: sequence - sequence: - - type: string - -# Imce Profile entity -imce.profile.*: - type: config_entity - label: 'Imce Profile' - mapping: - id: - type: string - label: 'ID' - label: - type: label - label: 'Name' - description: - type: label - label: 'Description' - conf: - type: sequence - label: 'Configuration' - sequence: - - type: imce.profile_conf.[%key] - -# Profile configuration options -imce.profile_conf.extensions: - type: string - label: 'Allowed file extensions' - -imce.profile_conf.maxsize: - type: float - label: 'Maximum file size' - -imce.profile_conf.quota: - type: float - label: 'Disk quota' - -imce.profile_conf.maxwidth: - type: integer - label: 'Maximum image width' - -imce.profile_conf.maxheight: - type: integer - label: 'Maximum image height' - -imce.profile_conf.replace: - type: integer - label: 'Upload replace method' - -imce.profile_conf.folders: - type: sequence - label: 'Folders' - sequence: - - type: mapping - label: 'Folder' - mapping: - path: - type: string - label: 'Path' - permissions: - type: sequence - label: 'Permissions' - sequence: - - type: boolean - -# File field settings -field.widget.third_party.imce: - type: mapping - label: 'Imce field widget settings' - mapping: - enabled: - type: boolean - label: 'Imce enabled' diff --git a/web/modules/imce/css/fonts/imce-icons.eot b/web/modules/imce/css/fonts/imce-icons.eot deleted file mode 100644 index 29500655a9f5cd0be0d39062f4c27867212668fc..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/fonts/imce-icons.eot +++ /dev/null @@ -1,28 +0,0 @@ -���$������������������������LP�����������������������G����������������������i�m�c�e�-�i�c�o�n�s����R�e�g�u�l�a�r����V�e�r�s�i�o�n� �1�.�0����i�m�c�e�-�i�c�o�n�s�������������0OS/2M�������`cmapU�z�����Lgasp�����h���glyfUz`>��p���head�?I��4���6hhea����l���$hmtx����������locav�qB��0���Rmaxp�6�������� name��������`post�������� ������������������3 �������������������������������@���#����@��@�������������� ������������������8��� -����� �#��������� ��������������������������������������79���������������79���������������79������������"�/�6��8181!8181!5!"3!2654#"&54632!537������&&�&&�8((88((8@����@�@���@&��&&�&�(88((88(�����������@������"�9��.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�% �)o � ��� ��3-/!��!//!p)'6)� %�� ` � �����@������"�9�H�W�f��.'.'.#!"3!2654&''#5#!"&54630:1;'!"&5463!2#5!"&5463!2#5!"&5463!2#�-3')�!//!�!/�% �)o � ��� ��@ � �@ � �@ � �3-/!��!//!p)'6)� %�� ` � ��p � � ����@�������-�6�M��%!57#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�% �)o � ��� �@�@������(88((88(�3-/!��!//!p)'6)� %�� ` � ����@������$�;�c��.'.'.#!"3!2654&'1'#51#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�% �)o � ��� ����!5KK55K�!5KK55K�3-/!��!//!p)'6)� %�� ` � ��)@�8((88(�3�8((88(@ ���@�������&�=�� %.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�% �)o � ��� �@����3-/!��!//!p)'6)� %�� ` � ��� �@������&�=�B�G�L�Q�V�[�`�e�u�z��.'.'.#!"3!2654&'9'#59#!"&54630:1;3#53#53#53#53#53#53#53#5;26=4&+5#7#53�-3')�!//!�!/�% �)o � ��� ����������������������������P�����3-/!��!//!p)'6)� %�� ` � ��p@@@@@@@@@@@@@@@@@@@@@@@���@��P@@���������� � ���!��!!!!%#735!!#7!35!��@������@ee��@����ee����@���������ee��������eee���������@�������6�:�A��#54&+"#!5+58138154&+3#!35#"3!!##7!35!��&�&�����@ @ ���� @ ����ee����@@@&&@��@@�� @����@@ �� ��[ee���������������@���!!�����@��@@��������@�� -��%!!!@������ ������@��@�����������@����'!!!##5#53533@��@��@�������������@���������������#�8��%'.>54.#"326776&'%".54>32#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]5Y�2�GP�i<<i�PP�i<1+'�K�(F]55]F((F]55]F(����@����� -�����3�8��3!265!#33#33#33#3#54&+"#"!54&#!#53�&@&�@�@@�@@�@@�@@����@�������&&�����@��@��@��@�PPPP??�������������� 33!!!#53�������`� �� ����������������@@������������ -���!!!#53 ##�� �� ����`���������@@������@�����������>�K��"32>7.##"&'.'>7>732>54&'1#"&54632�T��j$$j��TT��j$$j��T�.KK.8�CC�8.KK.(F]55]F(�8((88((8�/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88(�����������"�1�� !5"3!26'1.#1#"&54632'"&=4632#����� �K%3f3%�K @%%%%@%%%%c��W]��,@@,g��%%%%�%�%%�%������������9�O��3#2#575!5!'"32>7>54.'.#512#".54>3����%�������*PKD--DKP**PKD--DKP*j��PP��jj��PP��j��@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�����������/�D��46;2+"&=!535#533"32>54.#".54>32#� ���@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq�V� �0@�@���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA��������(�5�B��.#"32>7>54.'>32!467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<��&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O���� �@��� ' `� ���@� �������������3��.#"34>32!#".'7!732>5#z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P`&>+P��jV�qA$3 �`���V�qA$3 ����&>+P��j��� ������&�A�E��%##7#!"&'&47#"&5463!232#.#"326?37>'%7#@����`�� �� � �� ]� � 7�7 ��LL��������� N �� n� - -�� nn ��������������!"3!2654&#'7���5KK5�5KK5�@�Z�3Z�s�K5��5KK5�5K���Z�2Z�r������������7'!5##3!3535#!!@�@��@���������@��@@����@����������@��@��@������.����:�V�c���.'>'./.'.>767>&'81'.'&67>7>"&54632#&'81.'.7>76�AFDP� �� �PDFADFA��AFD�Y44� �44'8| 0'��T'0��|8''RK=7'��'7=KR'x$$6#$6 ��$$6$#6�����@�����K�U�c�t����������.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.50631>7>71%#"&'>321.'.'.#!"3!2654&'1'#51#!"&54630:1;J --#8 -/ - ,8M2;�:,d" -��," #1 - -O *3Y'�0 -Y-3')�!//!�!/�% �)o � ��� �s - - -I)� -$lF ?3 9 RX - -�8 83f*#40�K#7 5 -�3-/!��!//!p)'6)� %�� ` � ������@������*�4�K��3##33#%.'.'.#!"3!2654&'1'#51#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�% �)o � ��� ���>��>��/���\�3-/!��!//!p)'6)� %�� ` � ����@������)�3�J��#'#35#7377.'.'.#!"3!2654&'1'#51#!"&54630:1;�``����22o����-3')�!//!�!/�% �)o � ��� �@�����\K��3-/!��!//!p)'6)� %�� ` � ������:����9��%4'&#!"'&=4'&+"3!2765#!"'&5476;2!2��S��N((8�8)(()8�8((�8((��'����R8((((8J8((((8((8�������@�������������u@��@��5������������!��"32>54.###5#53533�j��PP��jj��PP��j��������P��jj��PP��jj��P���������������������"32>54.#!5!�j��PP��jj��PP��j�����P��jj��PP��jj��P������������$��!4&+"!"3!;265!26=4&#��� � �� ` � ` @` �� � �� ` � ��������T��%81 81>76&/.81 81.'&81 817>781 816?>'.'���7� ���� �7��� 77 ��77 ���7� ���� �7��� ���������ÞG_<��������j}f�����j}f����������������������������������������������(��������������������@��@��@��@��@��@�����@��������������@���������������������������� ��������.��@��@��@���������������������� -���h��J�D�F���.���"��L� l�6� - -� -�@X���b������(��� �������������������������������������������\��������*��������j��������������� -�>������ -�4�~�� ������ ���\�� ���*�� ���j�� ����� ���H�� � -�4�~�i�m�c�e�-�i�c�o�n�s�V�e�r�s�i�o�n� �1�.�0�i�m�c�e�-�i�c�o�n�simce-icons�i�m�c�e�-�i�c�o�n�s�R�e�g�u�l�a�r�i�m�c�e�-�i�c�o�n�s�F�o�n�t� �g�e�n�e�r�a�t�e�d� �b�y� �I�c�o�M�o�o�n�.������������������������������� \ No newline at end of file diff --git a/web/modules/imce/css/fonts/imce-icons.svg b/web/modules/imce/css/fonts/imce-icons.svg deleted file mode 100644 index ff246b28556220bd4fcac090cbbe07380e093350..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/fonts/imce-icons.svg +++ /dev/null @@ -1,46 +0,0 @@ -<?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>Generated by IcoMoon</metadata> -<defs> -<font id="imce-icons" horiz-adv-x="1024"> -<font-face units-per-em="1024" ascent="960" descent="-64" /> -<missing-glyph horiz-adv-x="1024" /> -<glyph unicode=" " d="" horiz-adv-x="512" /> -<glyph unicode="" d="M959.884 832c0.040-0.034 0.082-0.076 0.116-0.116v-767.77c-0.034-0.040-0.076-0.082-0.116-0.116h-895.77c-0.040 0.034-0.082 0.076-0.114 0.116v767.772c0.034 0.040 0.076 0.082 0.114 0.114h895.77zM960 896h-896c-35.2 0-64-28.8-64-64v-768c0-35.2 28.8-64 64-64h896c35.2 0 64 28.8 64 64v768c0 35.2-28.8 64-64 64v0zM832 672c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.98 96-96zM896 128h-768v128l224 384 256-320h64l224 192z" /> -<glyph unicode="" d="M917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" /> -<glyph unicode="" d="M917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624zM736 128h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32zM736 256h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32zM736 384h-448c-17.672 0-32 14.326-32 32s14.328 32 32 32h448c17.674 0 32-14.326 32-32s-14.326-32-32-32z" /> -<glyph unicode="" d="M832 64h-640v128l192 320 263-320 185 128v-256zM832 480c0-53.020-42.98-96-96-96-53.022 0-96 42.98-96 96s42.978 96 96 96c53.020 0 96-42.98 96-96zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" /> -<glyph unicode="" d="M917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624zM756.288 568.748c-7.414 6.080-17.164 8.514-26.562 6.632l-320-64c-14.958-2.994-25.726-16.126-25.726-31.38v-236.876c-18.832 8.174-40.678 12.876-64 12.876-70.692 0-128-42.98-128-96s57.308-96 128-96 128 42.98 128 96v229.766l256 51.202v-133.842c-18.832 8.174-40.678 12.876-64 12.876-70.692 0-128-42.98-128-96s57.308-96 128-96 128 42.98 128 96v319.998c0 9.586-4.298 18.668-11.712 24.748z" /> -<glyph unicode="" d="M384 576l320-224-320-224v448zM917.806 730.924c-22.212 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.888-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.984-17.78 50.678-41.878 81.374-72.572zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.326-32 32-32h224v-624z" /> -<glyph unicode="" d="M917.806 730.924c-22.208 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.884-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0 0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.98-17.78 50.678-41.878 81.374-72.572v0 0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.322-32 32-32h224v-624zM256 896h128v-64h-128v64zM384 832h128v-64h-128v64zM256 768h128v-64h-128v64zM384 704h128v-64h-128v64zM256 640h128v-64h-128v64zM384 576h128v-64h-128v64zM256 512h128v-64h-128v64zM384 448h128v-64h-128v64zM256 112c0-26.4 21.6-48 48-48h160c26.4 0 48 21.6 48 48v160c0 26.4-21.6 48-48 48h-80v64h-128v-272zM448 192v-64h-128v64h128z" /> -<glyph unicode="" d="M640 704v256h-448l-192-192v-576h384v-256h640v768h-384zM192 869.49v-101.49h-101.49l101.49 101.49zM64 256v448h192v192h320v-192l-192-192v-256h-320zM576 613.49v-101.49h-101.49l101.49 101.49zM960 0h-512v448h192v192h320v-640z" /> -<glyph unicode="" d="M704 832h-128v64c0 35.2-28.8 64-64 64h-128c-35.204 0-64-28.8-64-64v-64h-128v-128h512v128zM512 832h-128v63.886c0.034 0.038 0.072 0.078 0.114 0.114h127.768c0.042-0.036 0.082-0.076 0.118-0.114v-63.886zM832 640v160c0 17.6-14.4 32-32 32h-64v-64h32v-128h-192l-192-192v-256h-256v576h32v64h-64c-17.602 0-32-14.4-32-32v-640c0-17.6 14.398-32 32-32h288v-192h640v704h-192zM576 549.49v-101.49h-101.49l101.49 101.49zM960 0h-512v384h192v192h320v-576z" /> -<glyph unicode="" d="M448 832l128-128h448v-704h-1024v832z" /> -<glyph unicode="" d="M832 0l192 512h-832l-192-512zM128 576l-128-576v832h288l128-128h416v-128z" /> -<glyph unicode="" d="M576 704l-128 128h-448v-832h1024v704h-448zM704 256h-128v-128h-128v128h-128v128h128v128h128v-128h128v-128z" /> -<glyph unicode="" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384s171.922-384 384-384c95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256z" /> -<glyph unicode="" d="M128 640v-640c0-35.2 28.8-64 64-64h576c35.2 0 64 28.8 64 64v640h-704zM320 64h-64v448h64v-448zM448 64h-64v448h64v-448zM576 64h-64v448h64v-448zM704 64h-64v448h64v-448zM848 832h-208v80c0 26.4-21.6 48-48 48h-224c-26.4 0-48-21.6-48-48v-80h-208c-26.4 0-48-21.6-48-48v-80h832v80c0 26.4-21.6 48-48 48zM576 832h-192v63.198h192v-63.198z" /> -<glyph unicode="" d="M736 512l-256-256-256 256h160v384h192v-384zM480 256h-480v-256h960v256h-480zM896 128h-128v64h128v-64z" /> -<glyph unicode="" d="M480 256h-480v-256h960v256h-480zM896 128h-128v64h128v-64zM224 640l256 256 256-256h-160v-320h-192v320z" /> -<glyph unicode="" d="M512 768c-223.318 0-416.882-130.042-512-320 95.118-189.958 288.682-320 512-320 223.312 0 416.876 130.042 512 320-95.116 189.958-288.688 320-512 320zM764.45 598.296c60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-89.56 0-176.858 25.486-252.452 73.704-60.158 38.372-111.138 89.772-149.432 150.296 38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.86 7.3-9.96-27.328-15.41-56.822-15.41-87.596 0-141.382 114.616-256 256-256 141.382 0 256 114.618 256 256 0 30.774-5.452 60.268-15.408 87.598 3.978-2.378 7.938-4.802 11.858-7.302v0zM512 544c0-53.020-42.98-96-96-96s-96 42.98-96 96 42.98 96 96 96 96-42.982 96-96z" /> -<glyph unicode="" d="M512 867.226l429.102-855.226h-858.206l429.104 855.226zM512 960c-22.070 0-44.14-14.882-60.884-44.648l-437.074-871.112c-33.486-59.532-5-108.24 63.304-108.24h869.308c68.3 0 96.792 48.708 63.3 108.24h0.002l-437.074 871.112c-16.742 29.766-38.812 44.648-60.882 44.648v0zM576 128c0-35.346-28.654-64-64-64s-64 28.654-64 64c0 35.346 28.654 64 64 64s64-28.654 64-64zM512 256c-35.346 0-64 28.654-64 64v192c0 35.346 28.654 64 64 64s64-28.654 64-64v-192c0-35.346-28.654-64-64-64z" /> -<glyph unicode="" d="M448 256h128v-128h-128zM704 704c35.346 0 64-28.654 64-64v-192l-192-128h-128v64l192 128v64h-320v128h384zM512 864c-111.118 0-215.584-43.272-294.156-121.844s-121.844-183.038-121.844-294.156c0-111.118 43.272-215.584 121.844-294.156s183.038-121.844 294.156-121.844c111.118 0 215.584 43.272 294.156 121.844s121.844 183.038 121.844 294.156c0 111.118-43.272 215.584-121.844 294.156s-183.038 121.844-294.156 121.844zM512 960v0c282.77 0 512-229.23 512-512s-229.23-512-512-512c-282.77 0-512 229.23-512 512s229.23 512 512 512z" /> -<glyph unicode="" d="M448 656c0 26.4 21.6 48 48 48h32c26.4 0 48-21.6 48-48v-32c0-26.4-21.6-48-48-48h-32c-26.4 0-48 21.6-48 48v32zM640 192h-256v64h64v192h-64v64h192v-256h64zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416z" /> -<glyph unicode="" d="M874.040 810.040c-96.706 96.702-225.28 149.96-362.040 149.96s-265.334-53.258-362.040-149.96c-96.702-96.706-149.96-225.28-149.96-362.040s53.258-265.334 149.96-362.040c96.706-96.702 225.28-149.96 362.040-149.96s265.334 53.258 362.040 149.96c96.702 96.706 149.96 225.28 149.96 362.040s-53.258 265.334-149.96 362.040zM896 448c0-82.814-26.354-159.588-71.112-222.38l-535.266 535.268c62.792 44.758 139.564 71.112 222.378 71.112 211.738 0 384-172.262 384-384zM128 448c0 82.814 26.354 159.586 71.112 222.378l535.27-535.268c-62.794-44.756-139.568-71.11-222.382-71.11-211.738 0-384 172.262-384 384z" /> -<glyph unicode="" d="M864 832l-480-480-224 224-160-160 384-384 640 640z" /> -<glyph unicode="" d="M889.68 793.68c-93.608 102.216-228.154 166.32-377.68 166.32-282.77 0-512-229.23-512-512h96c0 229.75 186.25 416 416 416 123.020 0 233.542-53.418 309.696-138.306l-149.696-149.694h352v352l-134.32-134.32zM928 448c0-229.75-186.25-416-416-416-123.020 0-233.542 53.418-309.694 138.306l149.694 149.694h-352v-352l134.32 134.32c93.608-102.216 228.154-166.32 377.68-166.32 282.77 0 512 229.23 512 512h-96z" /> -<glyph unicode="" d="M320 192v768h-128v-768h-160l224-224 224 224h-160zM928-64h-256c-11.8 0-22.644 6.496-28.214 16.9-5.566 10.404-4.958 23.030 1.59 32.85l222.832 334.25h-196.208c-17.672 0-32 14.328-32 32s14.328 32 32 32h256c11.8 0 22.644-6.496 28.214-16.9 5.566-10.404 4.958-23.030-1.59-32.85l-222.83-334.25h196.206c17.672 0 32-14.328 32-32s-14.328-32-32-32zM1020.622 558.314l-192.002 384c-5.42 10.842-16.502 17.69-28.622 17.69-12.122 0-23.202-6.848-28.624-17.69l-191.996-384c-7.904-15.806-1.496-35.030 14.31-42.932 4.594-2.296 9.476-3.386 14.288-3.386 11.736 0 23.040 6.484 28.644 17.698l55.156 110.31h216.446l55.156-110.31c7.902-15.806 27.124-22.21 42.932-14.31 15.808 7.902 22.216 27.124 14.312 42.93zM723.778 704.004l76.22 152.446 76.224-152.446h-152.444z" /> -<glyph unicode="" d="M896 960h-768c-70.4 0-128-57.6-128-128v-768c0-70.4 57.6-128 128-128h768c70.4 0 128 57.6 128 128v768c0 70.4-57.6 128-128 128zM448 165.49l-237.254 237.256 90.51 90.508 146.744-146.744 306.746 306.746 90.508-90.51-397.254-397.256z" /> -<glyph unicode="" d="M832 704l192 192-64 64-192-192h-448v192h-128v-192h-192v-128h192v-512h512v-192h128v192h192v128h-192v448zM320 640h320l-320-320v320zM384 256l320 320v-320h-320z" /> -<glyph unicode="" d="M913.826 280.306c-66.684 104.204-181.078 150.064-255.51 102.434-6.428-4.116-12.334-8.804-17.744-13.982l-79.452 124.262 183.462 287.972c15.016 27.73 20.558 60.758 13.266 93.974-6.972 31.75-24.516 58.438-48.102 77.226l-12.278 7.808-217.468-340.114-217.47 340.114-12.276-7.806c-23.586-18.79-41.13-45.476-48.1-77.226-7.292-33.216-1.75-66.244 13.264-93.974l183.464-287.972-79.454-124.262c-5.41 5.178-11.316 9.868-17.744 13.982-74.432 47.63-188.826 1.77-255.51-102.434-66.68-104.2-60.398-227.286 14.032-274.914 74.43-47.632 188.824-1.77 255.508 102.432l164.286 257.87 164.288-257.872c66.684-104.202 181.078-150.064 255.508-102.432 74.428 47.63 80.71 170.716 14.030 274.914zM234.852 159.57c-30.018-46.904-68.534-69.726-94.572-75.446-0.004 0-0.004 0-0.004 0-8.49-1.868-20.294-3.010-28.324 2.128-8.898 5.694-14.804 20.748-15.8 40.276-1.616 31.644 9.642 68.836 30.888 102.034 30.014 46.906 68.53 69.726 94.562 75.444 8.496 1.866 20.308 3.010 28.336-2.126 8.898-5.694 14.802-20.75 15.798-40.272 1.618-31.65-9.64-68.84-30.884-102.038zM480 448c-17.672 0-32 14.328-32 32s14.328 32 32 32 32-14.328 32-32-14.328-32-32-32zM863.85 126.53c-0.996-19.528-6.902-34.582-15.8-40.276-8.030-5.138-19.834-3.996-28.324-2.128 0 0 0 0-0.004 0-26.040 5.718-64.554 28.542-94.572 75.446-21.244 33.198-32.502 70.388-30.884 102.038 0.996 19.522 6.9 34.578 15.798 40.272 8.028 5.136 19.84 3.992 28.336 2.126 26.034-5.716 64.548-28.538 94.562-75.444 21.246-33.198 32.502-70.39 30.888-102.034z" /> -<glyph unicode="" d="M842.012 370.52c-13.648 13.446-43.914 20.566-89.972 21.172-31.178 0.344-68.702-2.402-108.17-7.928-17.674 10.198-35.892 21.294-50.188 34.658-38.462 35.916-70.568 85.772-90.576 140.594 1.304 5.12 2.414 9.62 3.448 14.212 0 0 21.666 123.060 15.932 164.666-0.792 5.706-1.276 7.362-2.808 11.796l-1.882 4.834c-5.894 13.592-17.448 27.994-35.564 27.208l-10.916 0.344c-20.202 0-36.664-10.332-40.986-25.774-13.138-48.434 0.418-120.892 24.98-214.738l-6.288-15.286c-17.588-42.876-39.63-86.060-59.078-124.158l-2.528-4.954c-20.46-40.040-39.026-74.028-55.856-102.822l-17.376-9.188c-1.264-0.668-31.044-16.418-38.028-20.644-59.256-35.38-98.524-75.542-105.038-107.416-2.072-10.17-0.53-23.186 10.014-29.212l16.806-8.458c7.292-3.652 14.978-5.502 22.854-5.502 42.206 0 91.202 52.572 158.698 170.366 77.93 25.37 166.652 46.458 244.412 58.090 59.258-33.368 132.142-56.544 178.142-56.544 8.168 0 15.212 0.78 20.932 2.294 8.822 2.336 16.258 7.368 20.792 14.194 8.926 13.432 10.734 31.932 8.312 50.876-0.72 5.622-5.21 12.574-10.068 17.32zM211.646 145.952c7.698 21.042 38.16 62.644 83.206 99.556 2.832 2.296 9.808 8.832 16.194 14.902-47.104-75.124-78.648-105.066-99.4-114.458zM478.434 760.314c13.566 0 21.284-34.194 21.924-66.254s-6.858-54.56-16.158-71.208c-7.702 24.648-11.426 63.5-11.426 88.904 0 0-0.566 48.558 5.66 48.558v0zM398.852 322.506c9.45 16.916 19.282 34.756 29.33 53.678 24.492 46.316 39.958 82.556 51.478 112.346 22.91-41.684 51.444-77.12 84.984-105.512 4.186-3.542 8.62-7.102 13.276-10.65-68.21-13.496-127.164-29.91-179.068-49.862v0zM828.902 326.348c-4.152-2.598-16.052-4.1-23.708-4.1-24.708 0-55.272 11.294-98.126 29.666 16.468 1.218 31.562 1.838 45.102 1.838 24.782 0 32.12 0.108 56.35-6.072 24.228-6.18 24.538-18.734 20.382-21.332v0zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" /> -<glyph unicode="" d="M639.778 484.108h44.21l-51.012-226.178-66.324 318.010h-106.55l-77.114-318.010-57.816 318.010h-111.394l113.092-511.88h108.838l76.294 302.708 68.256-302.708h100.336l129.628 511.88h-170.446v-91.832zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" /> -<glyph unicode="" d="M743.028 576h-135.292l-95.732-141.032-95.742 141.032h-135.29l162.162-242.464-182.972-269.536h251.838v91.576h-50.156l50.156 74.994 111.396-166.57h140.444l-182.976 269.536 162.164 242.464zM917.806 730.924c-22.21 30.292-53.174 65.7-87.178 99.704s-69.412 64.964-99.704 87.178c-51.574 37.82-76.592 42.194-90.924 42.194h-496c-44.112 0-80-35.888-80-80v-864c0-44.112 35.886-80 80-80h736c44.112 0 80 35.888 80 80v624c0 14.332-4.372 39.35-42.194 90.924v0zM785.374 785.374c30.7-30.7 54.8-58.398 72.58-81.374h-153.954v153.946c22.982-17.78 50.678-41.878 81.374-72.572v0zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16 0 0 495.956 0.002 496 0v-224c0-17.672 14.324-32 32-32h224v-624z" /> -<glyph unicode="" d="M934.395 194.438v429.105q0 24.381-17.067 41.447t-41.447 17.067h-429.105q-24.381 0-41.447 17.067t-17.067 41.447v39.009q0 24.381-17.067 41.447t-41.447 17.067h-195.047q-24.381 0-41.447-17.067t-17.067-41.447v-585.142q0-24.381 17.067-41.447t41.447-17.067h741.181q24.381 0 41.447 17.067t17.067 41.447zM1012.414 623.542v-429.105q0-56.076-40.228-96.305t-96.305-40.228h-741.181q-56.076 0-96.305 40.228t-40.228 96.305v585.142q0 56.076 40.228 96.305t96.305 40.228h195.047q56.076 0 96.305-40.228t40.228-96.305v-19.505h409.6q56.076 0 96.305-40.228t40.228-96.305z" horiz-adv-x="1015" /> -<glyph unicode="" d="M534.048 395.040l169.952-395.040-128-64-148.672 405.696-235.328-213.696v832l640-512-297.952-52.96z" /> -<glyph unicode="" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512 512 229.248 512 512-229.248 512-512 512zM768 384h-192v-192h-128v192h-192v128h192v192h128v-192h192v-128z" /> -<glyph unicode="" d="M512 960c-282.752 0-512-229.248-512-512s229.248-512 512-512 512 229.248 512 512-229.248 512-512 512zM768 384h-512v128h512v-128z" /> -<glyph unicode="" d="M992 576h-352v352c0 17.672-14.328 32-32 32h-192c-17.672 0-32-14.328-32-32v-352h-352c-17.672 0-32-14.328-32-32v-192c0-17.672 14.328-32 32-32h352v-352c0-17.672 14.328-32 32-32h192c17.672 0 32 14.328 32 32v352h352c17.672 0 32 14.328 32 32v192c0 17.672-14.328 32-32 32z" /> -<glyph unicode="" d="M1014.662 137.34c-0.004 0.004-0.008 0.008-0.012 0.010l-310.644 310.65 310.644 310.65c0.004 0.004 0.008 0.006 0.012 0.010 3.344 3.346 5.762 7.254 7.312 11.416 4.246 11.376 1.824 24.682-7.324 33.83l-146.746 146.746c-9.148 9.146-22.45 11.566-33.828 7.32-4.16-1.55-8.070-3.968-11.418-7.31 0-0.004-0.004-0.006-0.008-0.010l-310.648-310.652-310.648 310.65c-0.004 0.004-0.006 0.006-0.010 0.010-3.346 3.342-7.254 5.76-11.414 7.31-11.38 4.248-24.682 1.826-33.83-7.32l-146.748-146.748c-9.148-9.148-11.568-22.452-7.322-33.828 1.552-4.16 3.97-8.072 7.312-11.416 0.004-0.002 0.006-0.006 0.010-0.010l310.65-310.648-310.65-310.652c-0.002-0.004-0.006-0.006-0.008-0.010-3.342-3.346-5.76-7.254-7.314-11.414-4.248-11.376-1.826-24.682 7.322-33.83l146.748-146.746c9.15-9.148 22.452-11.568 33.83-7.322 4.16 1.552 8.070 3.97 11.416 7.312 0.002 0.004 0.006 0.006 0.010 0.010l310.648 310.65 310.648-310.65c0.004-0.002 0.008-0.006 0.012-0.008 3.348-3.344 7.254-5.762 11.414-7.314 11.378-4.246 24.684-1.826 33.828 7.322l146.746 146.748c9.148 9.148 11.57 22.454 7.324 33.83-1.552 4.16-3.97 8.068-7.314 11.414z" /> -</font></defs></svg> \ No newline at end of file diff --git a/web/modules/imce/css/fonts/imce-icons.ttf b/web/modules/imce/css/fonts/imce-icons.ttf deleted file mode 100644 index 6ea814ed36851b2bb9b6cd1304bde805bd0ea081..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/fonts/imce-icons.ttf +++ /dev/null @@ -1,28 +0,0 @@ -��������0OS/2M�������`cmapU�z�����Lgasp�����h���glyfUz`>��p���head�?I��4���6hhea����l���$hmtx����������locav�qB��0���Rmaxp�6�������� name��������`post�������� ������������������3 �������������������������������@���#����@��@�������������� ������������������8��� -����� �#��������� ��������������������������������������79���������������79���������������79������������"�/�6��8181!8181!5!"3!2654#"&54632!537������&&�&&�8((88((8@����@�@���@&��&&�&�(88((88(�����������@������"�9��.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�% �)o � ��� ��3-/!��!//!p)'6)� %�� ` � �����@������"�9�H�W�f��.'.'.#!"3!2654&''#5#!"&54630:1;'!"&5463!2#5!"&5463!2#5!"&5463!2#�-3')�!//!�!/�% �)o � ��� ��@ � �@ � �@ � �3-/!��!//!p)'6)� %�� ` � ��p � � ����@�������-�6�M��%!57#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�% �)o � ��� �@�@������(88((88(�3-/!��!//!p)'6)� %�� ` � ����@������$�;�c��.'.'.#!"3!2654&'1'#51#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�% �)o � ��� ����!5KK55K�!5KK55K�3-/!��!//!p)'6)� %�� ` � ��)@�8((88(�3�8((88(@ ���@�������&�=�� %.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�% �)o � ��� �@����3-/!��!//!p)'6)� %�� ` � ��� �@������&�=�B�G�L�Q�V�[�`�e�u�z��.'.'.#!"3!2654&'9'#59#!"&54630:1;3#53#53#53#53#53#53#53#5;26=4&+5#7#53�-3')�!//!�!/�% �)o � ��� ����������������������������P�����3-/!��!//!p)'6)� %�� ` � ��p@@@@@@@@@@@@@@@@@@@@@@@���@��P@@���������� � ���!��!!!!%#735!!#7!35!��@������@ee��@����ee����@���������ee��������eee���������@�������6�:�A��#54&+"#!5+58138154&+3#!35#"3!!##7!35!��&�&�����@ @ ���� @ ����ee����@@@&&@��@@�� @����@@ �� ��[ee���������������@���!!�����@��@@��������@�� -��%!!!@������ ������@��@�����������@����'!!!##5#53533@��@��@�������������@���������������#�8��%'.>54.#"326776&'%".54>32#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]5Y�2�GP�i<<i�PP�i<1+'�K�(F]55]F((F]55]F(����@����� -�����3�8��3!265!#33#33#33#3#54&+"#"!54&#!#53�&@&�@�@@�@@�@@�@@����@�������&&�����@��@��@��@�PPPP??�������������� 33!!!#53�������`� �� ����������������@@������������ -���!!!#53 ##�� �� ����`���������@@������@�����������>�K��"32>7.##"&'.'>7>732>54&'1#"&54632�T��j$$j��TT��j$$j��T�.KK.8�CC�8.KK.(F]55]F(�8((88((8�/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88(�����������"�1�� !5"3!26'1.#1#"&54632'"&=4632#����� �K%3f3%�K @%%%%@%%%%c��W]��,@@,g��%%%%�%�%%�%������������9�O��3#2#575!5!'"32>7>54.'.#512#".54>3����%�������*PKD--DKP**PKD--DKP*j��PP��jj��PP��j��@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�����������/�D��46;2+"&=!535#533"32>54.#".54>32#� ���@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq�V� �0@�@���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA��������(�5�B��.#"32>7>54.'>32!467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<��&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O���� �@��� ' `� ���@� �������������3��.#"34>32!#".'7!732>5#z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P`&>+P��jV�qA$3 �`���V�qA$3 ����&>+P��j��� ������&�A�E��%##7#!"&'&47#"&5463!232#.#"326?37>'%7#@����`�� �� � �� ]� � 7�7 ��LL��������� N �� n� - -�� nn ��������������!"3!2654&#'7���5KK5�5KK5�@�Z�3Z�s�K5��5KK5�5K���Z�2Z�r������������7'!5##3!3535#!!@�@��@���������@��@@����@����������@��@��@������.����:�V�c���.'>'./.'.>767>&'81'.'&67>7>"&54632#&'81.'.7>76�AFDP� �� �PDFADFA��AFD�Y44� �44'8| 0'��T'0��|8''RK=7'��'7=KR'x$$6#$6 ��$$6$#6�����@�����K�U�c�t����������.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.50631>7>71%#"&'>321.'.'.#!"3!2654&'1'#51#!"&54630:1;J --#8 -/ - ,8M2;�:,d" -��," #1 - -O *3Y'�0 -Y-3')�!//!�!/�% �)o � ��� �s - - -I)� -$lF ?3 9 RX - -�8 83f*#40�K#7 5 -�3-/!��!//!p)'6)� %�� ` � ������@������*�4�K��3##33#%.'.'.#!"3!2654&'1'#51#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�% �)o � ��� ���>��>��/���\�3-/!��!//!p)'6)� %�� ` � ����@������)�3�J��#'#35#7377.'.'.#!"3!2654&'1'#51#!"&54630:1;�``����22o����-3')�!//!�!/�% �)o � ��� �@�����\K��3-/!��!//!p)'6)� %�� ` � ������:����9��%4'&#!"'&=4'&+"3!2765#!"'&5476;2!2��S��N((8�8)(()8�8((�8((��'����R8((((8J8((((8((8�������@�������������u@��@��5������������!��"32>54.###5#53533�j��PP��jj��PP��j��������P��jj��PP��jj��P���������������������"32>54.#!5!�j��PP��jj��PP��j�����P��jj��PP��jj��P������������$��!4&+"!"3!;265!26=4&#��� � �� ` � ` @` �� � �� ` � ��������T��%81 81>76&/.81 81.'&81 817>781 816?>'.'���7� ���� �7��� 77 ��77 ���7� ���� �7��� ���������ÞG_<��������j}f�����j}f����������������������������������������������(��������������������@��@��@��@��@��@�����@��������������@���������������������������� ��������.��@��@��@���������������������� -���h��J�D�F���.���"��L� l�6� - -� -�@X���b������(��� �������������������������������������������\��������*��������j��������������� -�>������ -�4�~�� ������ ���\�� ���*�� ���j�� ����� ���H�� � -�4�~�i�m�c�e�-�i�c�o�n�s�V�e�r�s�i�o�n� �1�.�0�i�m�c�e�-�i�c�o�n�simce-icons�i�m�c�e�-�i�c�o�n�s�R�e�g�u�l�a�r�i�m�c�e�-�i�c�o�n�s�F�o�n�t� �g�e�n�e�r�a�t�e�d� �b�y� �I�c�o�M�o�o�n�.������������������������������� \ No newline at end of file diff --git a/web/modules/imce/css/fonts/imce-icons.woff b/web/modules/imce/css/fonts/imce-icons.woff deleted file mode 100644 index 2a061213e5d9cac16c2ab02c93dbb598137a0702..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/fonts/imce-icons.woff +++ /dev/null @@ -1,28 +0,0 @@ -wOFF�����p�����$�����������������������OS/2�����`���`Mcmap��h���L���LU�zgasp������������glyf���������Uz`>head������6���6�?Ihhea������$���$��hmtx��������������loca��|���R���Rv�qBmaxp������ ��� �6��name�����`��`���post��P��� ��� ���������������������3 �������������������������������@���#����@��@�������������� ������������������8��� -����� �#��������� ��������������������������������������79���������������79���������������79������������"�/�6��8181!8181!5!"3!2654#"&54632!537������&&�&&�8((88((8@����@�@���@&��&&�&�(88((88(�����������@������"�9��.'.'.#!"3!2654&''#5#!"&54630:1;�-3')�!//!�!/�% �)o � ��� ��3-/!��!//!p)'6)� %�� ` � �����@������"�9�H�W�f��.'.'.#!"3!2654&''#5#!"&54630:1;'!"&5463!2#5!"&5463!2#5!"&5463!2#�-3')�!//!�!/�% �)o � ��� ��@ � �@ � �@ � �3-/!��!//!p)'6)� %�� ` � ��p � � ����@�������-�6�M��%!57#"&546327.'.'.#!"3!2654&''#5#!"&54630:1;@����8((88((8V-3')�!//!�!/�% �)o � ��� �@�@������(88((88(�3-/!��!//!p)'6)� %�� ` � ����@������$�;�c��.'.'.#!"3!2654&'1'#51#!"&54630:1;..#"326=%.#"32654&'�-3')�!//!�!/�% �)o � ��� ����!5KK55K�!5KK55K�3-/!��!//!p)'6)� %�� ` � ��)@�8((88(�3�8((88(@ ���@�������&�=�� %.'.'.#!"3!2654&''#5#!"&54630:1;�@��-3')�!//!�!/�% �)o � ��� �@����3-/!��!//!p)'6)� %�� ` � ��� �@������&�=�B�G�L�Q�V�[�`�e�u�z��.'.'.#!"3!2654&'9'#59#!"&54630:1;3#53#53#53#53#53#53#53#5;26=4&+5#7#53�-3')�!//!�!/�% �)o � ��� ����������������������������P�����3-/!��!//!p)'6)� %�� ` � ��p@@@@@@@@@@@@@@@@@@@@@@@���@��P@@���������� � ���!��!!!!%#735!!#7!35!��@������@ee��@����ee����@���������ee��������eee���������@�������6�:�A��#54&+"#!5+58138154&+3#!35#"3!!##7!35!��&�&�����@ @ ���� @ ����ee����@@@&&@��@@�� @����@@ �� ��[ee���������������@���!!�����@��@@��������@�� -��%!!!@������ ������@��@�����������@����'!!!##5#53533@��@��@�������������@���������������#�8��%'.>54.#"326776&'%".54>32#��'+1<i�PP�i<<i�PG�2�K��5]F((F]55]F((F]5Y�2�GP�i<<i�PP�i<1+'�K�(F]55]F((F]55]F(����@����� -�����3�8��3!265!#33#33#33#3#54&+"#"!54&#!#53�&@&�@�@@�@@�@@�@@����@�������&&�����@��@��@��@�PPPP??�������������� 33!!!#53�������`� �� ����������������@@������������ -���!!!#53 ##�� �� ����`���������@@������@�����������>�K��"32>7.##"&'.'>7>732>54&'1#"&54632�T��j$$j��TT��j$$j��T�.KK.8�CC�8.KK.(F]55]F(�8((88((8�/TvGGvT//TvGGvT/�M--M$&&$M--M,5]F((F]5,6(88((88(�����������"�1�� !5"3!26'1.#1#"&54632'"&=4632#����� �K%3f3%�K @%%%%@%%%%c��W]��,@@,g��%%%%�%�%%�%������������9�O��3#2#575!5!'"32>7>54.'.#512#".54>3����%�������*PKD--DKP**PKD--DKP*j��PP��jj��PP��j��@%��@�@��-DKP**PKD--DKP**PKD-`P��jj��PP��jj��P�����������/�D��46;2+"&=!535#533"32>54.#".54>32#� ���@@�@�j��PP��jj��PP��jV�qAAq�VV�qAAq�V� �0@�@���P��jj��PP��jj��P�`Aq�VV�qAAq�VV�qA��������(�5�B��.#"32>7>54.'>32!467#".5j$T\c33c\T$$8&&8$$T\c33c\T$$8&&8$&!��/q>O�i<��&!/q>O�i<*$8&&8$$T\c33c\T$$8&&8$$T\c33c\T$��>q/!&<i�O>q/��!&<i�O���� �@��� ' `� ���@� �������������3��.#"34>32!#".'7!732>5#z#U`j8j��P`Aq�V.WOE�`�&Aq�V.WOE����#U`j8j��P`&>+P��jV�qA$3 �`���V�qA$3 ����&>+P��j��� ������&�A�E��%##7#!"&'&47#"&5463!232#.#"326?37>'%7#@����`�� �� � �� ]� � 7�7 ��LL��������� N �� n� - -�� nn ��������������!"3!2654&#'7���5KK5�5KK5�@�Z�3Z�s�K5��5KK5�5K���Z�2Z�r������������7'!5##3!3535#!!@�@��@���������@��@@����@����������@��@��@������.����:�V�c���.'>'./.'.>767>&'81'.'&67>7>"&54632#&'81.'.7>76�AFDP� �� �PDFADFA��AFD�Y44� �44'8| 0'��T'0��|8''RK=7'��'7=KR'x$$6#$6 ��$$6$#6�����@�����K�U�c�t����������.'".'.'>706'4&/.+""3267>73267>7>'4&'>7>72.50631>7>71%#"&'>321.'.'.#!"3!2654&'1'#51#!"&54630:1;J --#8 -/ - ,8M2;�:,d" -��," #1 - -O *3Y'�0 -Y-3')�!//!�!/�% �)o � ��� �s - - -I)� -$lF ?3 9 RX - -�8 83f*#40�K#7 5 -�3-/!��!//!p)'6)� %�� ` � ������@������*�4�K��3##33#%.'.'.#!"3!2654&'1'#51#!"&54630:1;�,3BkM:oqmLDe��-3')�!//!�!/�% �)o � ��� ���>��>��/���\�3-/!��!//!p)'6)� %�� ` � ����@������)�3�J��#'#35#7377.'.'.#!"3!2654&'1'#51#!"&54630:1;�``����22o����-3')�!//!�!/�% �)o � ��� �@�����\K��3-/!��!//!p)'6)� %�� ` � ������:����9��%4'&#!"'&=4'&+"3!2765#!"'&5476;2!2��S��N((8�8)(()8�8((�8((��'����R8((((8J8((((8((8�������@�������������u@��@��5������������!��"32>54.###5#53533�j��PP��jj��PP��j��������P��jj��PP��jj��P���������������������"32>54.#!5!�j��PP��jj��PP��j�����P��jj��PP��jj��P������������$��!4&+"!"3!;265!26=4&#��� � �� ` � ` @` �� � �� ` � ��������T��%81 81>76&/.81 81.'&81 817>781 816?>'.'���7� ���� �7��� 77 ��77 ���7� ���� �7��� ���������ÞG_<��������j}f�����j}f����������������������������������������������(��������������������@��@��@��@��@��@�����@��������������@���������������������������� ��������.��@��@��@���������������������� -���h��J�D�F���.���"��L� l�6� - -� -�@X���b������(��� �������������������������������������������\��������*��������j��������������� -�>������ -�4�~�� ������ ���\�� ���*�� ���j�� ����� ���H�� � -�4�~�i�m�c�e�-�i�c�o�n�s�V�e�r�s�i�o�n� �1�.�0�i�m�c�e�-�i�c�o�n�simce-icons�i�m�c�e�-�i�c�o�n�s�R�e�g�u�l�a�r�i�m�c�e�-�i�c�o�n�s�F�o�n�t� �g�e�n�e�r�a�t�e�d� �b�y� �I�c�o�M�o�o�n�.������������������������������� \ No newline at end of file diff --git a/web/modules/imce/css/images/browse.png b/web/modules/imce/css/images/browse.png deleted file mode 100644 index fe203cf8c93aa7d05483464342badbb527e8e1ff..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/images/browse.png +++ /dev/null @@ -1,6 +0,0 @@ -�PNG - -��� IHDR�����������a���tEXtSoftware�Adobe ImageReadyq�e<���IDATxڔS_HSQ�]���#�F!��THVC��J�ִ���7_"�^z륇H$=�!DʽXX���w�h�ً��6ur3�\0��]���u&:��~���9�w>��9�'`���d����X�������%p�n��e�R/�i�E�?���TW�Ad�����gF��|��^���zȉ|&���*�D6�0��l�ù���2���z�ǻ����Ǔ���f1��q``@W&22�z2�HN䊄��)��t��hphh�������>Wʥ��``[{[k��9'���`�X`||�r9���EQ066uuu���)s�\_�~���Ks�Ѕ�`���aL��#�ٌD�~�<���Wq4y7��M$���iH@*�M�A�����������wa�-,,|��BP�T�0x<��@(4 -�38݉�uwt���jff�p��d��t�� -��� ojlr8�R���/)�;nh4�-�Ͱ��V��N'��b �$�~@ww7�&S��Y{YK����;��}/����a<�W#��T*���}����@���O -l(�Wԗ��.�H$����|!�b�&�Dd�h��y��Ϸq��z0��<�8,��O��Z�~B�.�d2 y���j��uvb�sq����}J�e�V�D"�R���+��m����/*�����IEND�B`� \ No newline at end of file diff --git a/web/modules/imce/css/images/loading.gif b/web/modules/imce/css/images/loading.gif deleted file mode 100644 index 16baa5bac9a27dc206ffde16cca51081ce80a932..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/images/loading.gif +++ /dev/null @@ -1,18 +0,0 @@ -GIF89a���������������������SSSMMM���444������:::������eee\\\kkkCCC������������!!!***{{{ppp%%%���VVV���������������������������������������������������������������������������������������������!�NETSCAPE2.0���!�-Made by Krasimira Nejcheva (www.loadinfo.net)�!� -��,�������N�%��q@c��8�*ST.C���1� "�a�H�,��Ij�T���`��� -i�)BA��J�GDrF?��>�!� -��,����� -��L�#�FUc�bA�I�ו-�j�x)��E�������SXB���,�J$�0\"Ca�z����U���N��uQ�!� -��,������G`%��3�'� ���ɓX���D��D�HALH�a��G�O�: �Aa8 ��@>�E��@x��!�!� -� �,��� -���P�!Mi6�gYG1\�P�5T�r� ��Q,P`9�Z #S<Eԓ��A,� �����L��I��u��Zt:`��.���!� -��,�����O@�p�x��$bD2 -I) �GB�D������ -��D��� �x|n|xCl \HA�!� -��,��� -��L�#��3F�:� +�.�!\������ahT�D���BqIj��Fc�RG�L���9J$�"6T*=R�!� -��,������I�e�e�(�0H�� //���2T����H ��A�&KI!9J"Ua)4�F��* - B����B�!� -� �,��� -���S��0���Lf!8&:�@���D?���`l�BC�)���L@S86���q�9X�N���n\ -}�zBrG|}A�; \ No newline at end of file diff --git a/web/modules/imce/css/imce.admin.css b/web/modules/imce/css/imce.admin.css deleted file mode 100644 index 3cac9217c393501dc50b8fe4d3cfac3918221077..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/imce.admin.css +++ /dev/null @@ -1,46 +0,0 @@ -/* Profile list */ -.imce-profile-list { - margin-bottom: 2.5em; -} - -/* Settings form */ -.imce-settings-form th > a { - display: inline; -} -.imce-settings-form th > a:after { - display: none; -} - -/* Folder counter */ -.imce-profile-form { - counter-reset: folder; -} -.folder-container > .form-type-textfield:before { - counter-increment: folder; - content: counter(folder) ". "; -} - -/* Number fields */ -.imce-profile-form .form-number { - width: 8em; -} - -/* Indent permissions */ -.folder-container > .folder-permissions { - margin-left: 1.5em; -} - -/* Align permission checkboxes */ -.folder-permissions .form-type-checkbox { - float: left; - min-width: 13em; -} -.folder-permissions .form-type-checkbox:first-child { - float: none; -} - -/* Dimensions */ -.dimensions-wrapper > .form-item { - margin: 0; - display: inline-block; -} \ No newline at end of file diff --git a/web/modules/imce/css/imce.css b/web/modules/imce/css/imce.css deleted file mode 100644 index cd56a6576a13583d05c4889df5667772288aee7d..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/imce.css +++ /dev/null @@ -1,613 +0,0 @@ -.imce-page { - margin: 0; - padding: 0; - font: 12px/16px verdana; - color: #000; -} -.imce-page *, -.imce-page *:before, -.imce-page *:after { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} -.imce-page a { - color: #009; - border: 0; -} -.imce-page a:hover, -.imce-page a:focus { - color: #00c; -} - -#imce-fm { - position: relative; - border: 1px solid #ccc; - padding: 2px; - outline: 0; - background: #fff; -} - -#imce-toolbar { - background: #ececec; - overflow: hidden; - border: 1px solid #ccc; - box-shadow: 1px 1px 0 #fff inset; - margin-bottom: 4px; -} -#imce-body { - height: 300px; - overflow: hidden; -} -#imce-body-resizer { - height: 5px; - cursor: n-resize; - overflow: hidden; - text-align: center; -} -#imce-body-resizer:before { - content: '\22ef'; - display: inline-block; - vertical-align: text-top; - line-height: 0px; - font-size: 13px; -} -#imce-preview { - height: 90px; - overflow: auto; - border: 1px solid #ccc; -} - -/* Inside imce-body */ -#imce-tree { - float: left; - width: 23%; - height: 100%; - overflow: auto; - outline: 0; - -webkit-overflow-scrolling: touch;/*Enable momentum scrolling on touch in webkit*/ - border: 1px solid #ccc; -} -#imce-tree-resizer { - float: left; - width: 5px; - height: 100%; - cursor: e-resize; - position: relative; - overflow: hidden; -} -#imce-content { - height: 100%; - overflow: auto; - -webkit-overflow-scrolling: touch; - border: 1px solid #ccc; - position: relative; - outline: 0; -} -#imce-tree:focus, -#imce-content:focus { - border-color: #aaa; -} -#imce-tree-resizer:before { - content: '\22ee'; - position: absolute; - top: 50%; - left: 50%; - width: 16px; - line-height: 16px; - margin-top: -8px; - margin-left: -8px; - text-align: center; - font-size: 13px; -} - -/* Item preview */ -.imce-item-preview { - text-align: center; -} -.imce-preview-info > * { - display: inline-block; - word-wrap: break-word; - padding: 2px 8px; - margin: -1px 1px 3px; - border: 1px solid #ccc; - background: #f5f5f5; - background: linear-gradient(180deg, #f9f9f9, #eee); -} -.imce-preview-image > img { - cursor: pointer; -} - -/* Form elements */ -.imce-form-item { - margin: 0 0 0.7em 0; -} -.imce-layer button::-moz-focus-inner { - border: 0; - padding: 0; -} -.imce-layer input, -.imce-layer textarea, -.imce-layer select, -.imce-layer button { - border: 1px solid #bbb; - color: #333; - background-color: #fff; - padding: 3px 2px; - font: inherit; - margin: 0; -} -.imce-layer textarea { - padding: 0; -} -.imce-layer input[type="number"] { - width: 7em; -} -.imce-layer input[type="checkbox"], -.imce-layer input[type="radio"] { - border: none; - background: none; - margin: 5px 5px 5px 0; - vertical-align: middle; -} -.imce-layer input[type="submit"], -.imce-layer input[type="button"], -.imce-layer button { - background-color: #ddd; - border: 1px solid #999; - padding: 3px 10px; -} -.imce-layer input[type="submit"]:hover, -.imce-layer input[type="button"]:hover, -.imce-layer button:hover { - background-color: #e5e5e5; -} -.imce-layer input[type="submit"]:active, -.imce-layer input[type="button"]:active, -.imce-layer button:active { - background-color: #eee; -} -.imce-layer input[disabled], -.imce-layer input[disabled]:hover, -.imce-layer input[disabled]:active, -.imce-layer button[disabled], -.imce-layer button[disabled]:hover, -.imce-layer button[disabled]:active { - background-color: #ededed; - color: #666; - text-shadow: 1px 1px 0 #fff; -} -.imce-layer label { - display: block; - cursor: default; - font-weight: normal; -} - - -/* Branch */ -.imce-branch { - margin: 2px; - white-space: nowrap; -} -/* Branch toggle */ -.imce-branch-toggle { - display: inline-block; - vertical-align: bottom; - width: 16px; - height: 16px; - text-align: center; - cursor: default; -} -.busy > .imce-branch-toggle { - background: url(images/loading.gif) no-repeat 50% 50%; -} -.imce-branch-toggle:before { - content: '+'; - display: inline-block; - vertical-align: bottom; - text-align: center; - font: bold 9px/8px courier new; - width: 9px; - height: 9px; - border: 1px solid #777; - border-radius: 1px; - margin-bottom: 3px; -} -.expanded > .imce-branch-toggle:before { - content: '-'; -} -.leaf > .imce-branch-toggle:before, -.busy > .imce-branch-toggle::before { - content: none; -} -/* Branch name */ -.imce-branch-name { - display: inline-block; - vertical-align: bottom; - margin: 0 1px; - padding: 1px 3px 1px 1px; - cursor: pointer; - border-radius: 1px; -} -.imce-branch-name:hover { - background-color: #dbe9fc; -} -.active > .imce-branch-name { - background-color: #b7d3f8; -} -.disabled > .imce-branch-name { - cursor: default; - color: #999; -} -/* Branch icon */ -.imce-branch-name:before { - content: "\e609"; - color: #666; - margin: 0 3px 0 0; -} -.active > .imce-branch-name:before { - content: "\e60a"; - color: #222; -} - -/* Subtree */ -.imce-subtree { - margin: 0 0 0 15px; -} - -/* Content item */ -.imce-item { - border-bottom: 1px solid #d5dcea; - cursor: default; - padding: 0 8px 0 4px; - overflow: hidden; -} -.imce-item:hover { - background-color: #e4e9f2; -} -.imce-item.selected { - background-color: #6bb6ff; - background-image: linear-gradient(180deg, #65B5FF, #6FBAFF); -} -.imce-item.disabled { - opacity: 0.6; -} -/* Item children */ -.imce-item > * { - white-space: nowrap; - overflow: hidden; - padding: 4px 2px; - height: 24px; - float: right; - text-align: right; -} -/* Item icon */ -.imce-item-icon { - float: left; -} -/* Item name */ -.imce-item-name { - float: none; - text-align: left; -} -/* Item size */ -.imce-item-size { - width: 14%; - max-width: 6.4em; -} -/* Item width */ -.imce-item-width { - width: 10%; - max-width: 4.4em; -} -/* Item height */ -.imce-item-height { - width: 10%; - max-width: 4.4em; - text-align: left; -} -/* Item date */ -.imce-item-date { - width: 18%; - max-width: 6.8em; -} - -/* Specific item icons */ -.imce-item-icon:before { - content: "\e601"; -} -.folder > .imce-item-icon:before { - content: "\e609"; - color: #666; -} -.file-zip > .imce-item-icon:before, -.file-rar > .imce-item-icon:before, -.file-gz > .imce-item-icon:before { - content: "\e606"; -} -.file-doc > .imce-item-icon:before, -.file-docx > .imce-item-icon:before { - content: "\e61c"; -} -.file-xls > .imce-item-icon:before, -.file-xlsx > .imce-item-icon:before { - content: "\e61d"; -} -.file-pdf > .imce-item-icon:before { - content: "\e61b"; -} -.file-swf > .imce-item-icon:before, -.file-fla > .imce-item-icon:before, -.file-avi > .imce-item-icon:before, -.file-mpg > .imce-item-icon:before, -.file-mov > .imce-item-icon:before, -.file-flv > .imce-item-icon:before, -.file-wmv > .imce-item-icon:before, -.file-mp4 > .imce-item-icon:before { - content: "\e605"; -} -.file-txt > .imce-item-icon:before, -.file-ini > .imce-item-icon:before { - content: "\e602"; -} -.file-mp3 > .imce-item-icon:before, -.file-wav > .imce-item-icon:before, -.file-wma > .imce-item-icon:before { - content: "\e604"; -} -.file-jpg > .imce-item-icon:before, -.file-jpeg > .imce-item-icon:before, -.file-bmp > .imce-item-icon:before, -.file-tif > .imce-item-icon:before, -.file-tiff > .imce-item-icon:before, -.file-png > .imce-item-icon:before, -.file-gif > .imce-item-icon:before { - content: "\e603"; -} - -/* Content header */ -.imce-content-header { - position: relative; - left: 0; - top: 0; -} -.imce-content-header .imce-item { - background: #f1f1f1; - box-shadow: 1px 1px 0 #fff inset; - border-bottom-color: #ccc; -} -.imce-content-header .sorted { - color: #00c; -} -.imce-content-header .asc:after { - content: '\2191'; -} -.imce-content-header .desc:after { - content: '\2193'; -} -.imce-content-header .imce-item-icon { - width: 20px; - text-align: center; -} -.imce-content-header .imce-item-icon:before { - content: ""; -} - -/* Content status */ -.imce-content-status { - position: absolute; - left: 0; - bottom: 0; -} -.imce-content-status > * { - display: inline-block; - background: #f5f5f5; - border: 1px solid #ccc; - border-width: 1px 1px 0 0; - padding: 2px 8px; - font-size: 0.9em; -} - -/* Folder content */ -.imce-folder-content { - padding-bottom: 20px; -} - -/* Layer */ -.imce-layer { - position: absolute; - display: none; - z-index: 10; - background: #fff; -} - -/* Message */ -.imce-message-popup { - left: 20%; - top: 25%; - width: 60%; - max-width: 500px; - max-height: 50%; - overflow: auto; - z-index: 20; - box-shadow: 0 1px 5px #999; - border: 2px solid #555; - border-radius: 3px; -} -.imce-message { - position: relative; - font-size: 1.2em; - padding: 4px 8px 4px 24px; - margin: 4px; - word-wrap: break-word; -} -.imce-message:before { - content: '\e613'; - position: absolute; - top: 0; - left: 0; - margin: 4px; - color: #00ce35; -} -.imce-message.warning:before { - content: '\e611'; - color: #fe8f00; -} -.imce-message.error:before { - content: '\e621'; - color: #f03; -} -.imce-ajax-error { - white-space: pre-wrap; - margin: 0; -} - -/* Toolbar button popup */ -.imce-tbb-popup { - padding: 10px; - border: 2px solid #555; - border-radius: 3px; - box-shadow: 0 1px 5px #999; -} - -/* Toolbar button */ -.imce-tbb { - cursor: default; - padding: 6px 7px; - float: left; - display: inline-block; -} -.imce-tbb:hover { - background-color: #fafafa; -} -.imce-tbb:active, -.imce-tbb.active { - background-color: #fff; -} -.imce-tbb.disabled { - opacity: 0.5; -} -.imce-tbb-title { - display: inline-block; - vertical-align: bottom; - margin-left: 3px; - text-shadow: 0 1px 0 #f5f5f5; -} - -/*Newdir*/ -.imce-newfolder-form button { - margin-left: -1px; -} - -/* Upload */ -.imce-upload-form .imce-form-actions { - margin-top: 0.5em; -} -.imce-upload-form.uq .imce-form-file, -.imce-upload-form.auto-start .imce-form-actions { - display: none; -} -/* Upload queue */ -.imce-uq-button { - display: block; - position: relative; - overflow: hidden; - cursor: default; - padding: 6px 16px; - background-color: #d1f8cd; - border: 1px solid #a6dca1; - text-align: center; -} -.imce-uq-button:before { - margin-right: 5px; -} -.imce-uq-button:hover { - background-color: #def9db; -} -.imce-uq-button:active { - background-color: #e7fbe4; -} -.imce-uq-button input { - position: absolute; - opacity: 0; - top: 0; - left: -5px; - width: 110%; - height: 100%; - padding: 0; - margin: 0; - border: 0; - font: 50em monospace; -} -/* Upload queue items */ -.imce-uq-items { - width: 20em; - max-height: 20em; - overflow: auto; - overflow-x: hidden; - margin: 7px 0 0; -} -.imce-uq-items:empty { - margin: 0; -} -.imce-uqi { - position: relative; - background: #eaeaea; - background: linear-gradient(180deg, #eee, #e5e5e5); - font-size: 0.9em; - padding: 7px; - margin-bottom: 7px; - border: 1px solid #ccc; - box-shadow: 1px 1px 0 #fff inset; -} -.imce-uqi-cancel { - position: absolute; - right: 5px; - top: 5px; - line-height: 8px; - color: #890017; - cursor: pointer; -} -.imce-uqi-cancel:hover { - color: #f00; -} -.imce-uqi-cancel:before { - content: 'X'; -} -.imce-uqi-info { - width: 84%; -} -.imce-uqi-info span { - display: inline-block; - vertical-align: bottom; - white-space: nowrap; -} -.imce-uqi-name { - width: 72%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} -.imce-uqi-size { - width: 28%; - text-align: right; -} -.imce-uqi-progress { - width: 84%; - float: left; - clear: left; - background: #ddd; - border: 1px solid #fff; - box-shadow: 1px 1px 1px #666 inset; - margin-top: 2px; -} -.imce-uqi-bar { - width: 1px; - height: 10px; - background: #007cee; - background: linear-gradient(90deg, #0084ff, #006dd2); - box-shadow: 1px 1px 1px #666 inset; -} -.imce-uqi-percent { - text-align: right; -} diff --git a/web/modules/imce/css/imce.filefield.css b/web/modules/imce/css/imce.filefield.css deleted file mode 100644 index 1478bc025e4a6d491a1a0df2267066c0363fb755..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/imce.filefield.css +++ /dev/null @@ -1,9 +0,0 @@ -.imce-filefield-link:before { - content: ''; - display: inline-block; - vertical-align: middle; - width: 16px; - height: 16px; - margin-right: 2px; - background: url(images/browse.png) no-repeat 50% 50%; -} \ No newline at end of file diff --git a/web/modules/imce/css/imce.icons.css b/web/modules/imce/css/imce.icons.css deleted file mode 100644 index cc65f4bd5192e0d38ccfdcc95ff0b008b725eb46..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/imce.icons.css +++ /dev/null @@ -1,137 +0,0 @@ -@font-face { - font-family: 'imce-icons'; - src:url('fonts/imce-icons.eot?-7jpipx'); - src:url('fonts/imce-icons.eot?#iefix-7jpipx') format('embedded-opentype'), - url('fonts/imce-icons.woff?-7jpipx') format('woff'), - url('fonts/imce-icons.ttf?-7jpipx') format('truetype'), - url('fonts/imce-icons.svg?-7jpipx#imce-icons') format('svg'); - font-weight: normal; - font-style: normal; -} -.imce-ficon:before { - font-family: 'imce-icons'; - speak: none; - font-size: 16px; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - display: inline-block; - vertical-align: bottom; -} -.imce-ficon.busy:before { - content: ''; - padding: 8px; - background: url(images/loading.gif) no-repeat 50% 50%; -} -.imce-ficon-image:before { - content: "\e600"; -} -.imce-ficon-file:before { - content: "\e601"; -} -.imce-ficon-file-text:before { - content: "\e602"; -} -.imce-ficon-file-image:before { - content: "\e603"; -} -.imce-ficon-file-audio:before { - content: "\e604"; -} -.imce-ficon-file-video:before { - content: "\e605"; -} -.imce-ficon-file-zip:before { - content: "\e606"; -} -.imce-ficon-copy:before { - content: "\e607"; -} -.imce-ficon-paste:before { - content: "\e608"; -} -.imce-ficon-folder:before { - content: "\e609"; -} -.imce-ficon-folder-open:before { - content: "\e60a"; -} -.imce-ficon-folder-add:before { - content: "\e60b"; -} -.imce-ficon-search:before { - content: "\e60c"; -} -.imce-ficon-delete:before { - content: "\e60d"; -} -.imce-ficon-download:before { - content: "\e60e"; -} -.imce-ficon-upload:before { - content: "\e60f"; -} -.imce-ficon-preview:before { - content: "\e610"; -} -.imce-ficon-warning:before { - content: "\e611"; -} -.imce-ficon-help:before { - content: "\e612"; -} -.imce-ficon-add:before { - content: "\e622"; -} -.imce-ficon-info:before { - content: "\e613"; -} -.imce-ficon-cancel:before { - content: "\e614"; -} -.imce-ficon-remove:before { - content: "\e623"; -} -.imce-ficon-check:before { - content: "\e615"; -} -.imce-ficon-refresh:before { - content: "\e616"; -} -.imce-ficon-sort:before { - content: "\e617"; -} -.imce-ficon-checked:before { - content: "\e618"; -} -.imce-ficon-crop:before { - content: "\e619"; -} -.imce-ficon-cut:before { - content: "\e61a"; -} -.imce-ficon-file-pdf:before { - content: "\e61b"; -} -.imce-ficon-file-word:before { - content: "\e61c"; -} -.imce-ficon-file-excel:before { - content: "\e61d"; -} -.imce-ficon-folder-white:before { - content: "\e61e"; -} -.imce-ficon-plus:before { - content: "\e620"; -} -.imce-ficon-minus:before { - content: "\e621"; -} -.imce-ficon-click:before { - content: "\e61f"; -} \ No newline at end of file diff --git a/web/modules/imce/css/imce.input.css b/web/modules/imce/css/imce.input.css deleted file mode 100644 index 0514bb4a89d5206aab0a25f7662d03709c992b41..0000000000000000000000000000000000000000 --- a/web/modules/imce/css/imce.input.css +++ /dev/null @@ -1,12 +0,0 @@ -.imce-url-button { - display: inline-block; - margin: 1px 0; -} -.imce-url-button:before { - content: ''; - float: left; - width: 16px; - height: 16px; - margin-right: 2px; - background: url(images/browse.png) no-repeat 50% 50%; -} \ No newline at end of file diff --git a/web/modules/imce/imce.info.yml b/web/modules/imce/imce.info.yml deleted file mode 100644 index e75dbe150cbd57b269bfa516070c47521a74cf1b..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.info.yml +++ /dev/null @@ -1,11 +0,0 @@ -name: Imce File Manager -type: module -description: Provides a file manager supporting personal folders. -package: Media -# core: 8.x -configure: imce.admin -# Information added by Drupal.org packaging script on 2017-07-12 -version: '8.x-1.6' -core: '8.x' -project: 'imce' -datestamp: 1499898845 diff --git a/web/modules/imce/imce.install b/web/modules/imce/imce.install deleted file mode 100644 index c53a56c32fe55d1c4378c9a670bc0df1faafc0a2..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.install +++ /dev/null @@ -1,28 +0,0 @@ -<?php - -/** - * @file - * Manages installation and update of imce module. - */ - -use Drupal\Core\StreamWrapper\StreamWrapperInterface; - -/** - * Implements hook_install(). - */ -function imce_install() { - // Assign admin profile to administrators. - $admin_roles = \Drupal::entityQuery('user_role')->condition('is_admin', TRUE)->execute(); - if ($admin_roles) { - $config = \Drupal::configFactory()->getEditable('imce.settings'); - $roles_profiles = $config->get('roles_profiles') ?: []; - $wrappers = \Drupal::service('stream_wrapper_manager')->getWrappers(StreamWrapperInterface::WRITE_VISIBLE); - foreach ($wrappers as $scheme => $info) { - foreach ($admin_roles as $role) { - $roles_profiles[$role][$scheme] = 'admin'; - } - } - $config->set('roles_profiles', $roles_profiles); - $config->save(TRUE); - } -} \ No newline at end of file diff --git a/web/modules/imce/imce.libraries.yml b/web/modules/imce/imce.libraries.yml deleted file mode 100644 index 8fd47fc01d9fab45dd2390ebba8b890588a2cced..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.libraries.yml +++ /dev/null @@ -1,89 +0,0 @@ -drupal.imce: - version: VERSION - js: - js/imce.js: {} - js/imce.Item.js: {} - js/imce.File.js: {} - js/imce.Folder.js: {} - js/imce.Tbb.js: {} - css: - component: - css/imce.css: {} - css/imce.icons.css: {} - dependencies: - - core/jquery - - core/drupal - - core/drupalSettings - -drupal.imce.newfolder: - version: VERSION - js: - js/plugins/imce/imce.newfolder.js: {} - dependencies: - - imce/drupal.imce - -drupal.imce.upload: - version: VERSION - js: - js/plugins/imce/imce.upload.js: {} - js/plugins/imce/imce.UploadQueue.js: {} - dependencies: - - imce/drupal.imce - -drupal.imce.delete: - version: VERSION - js: - js/plugins/imce/imce.delete.js: {} - dependencies: - - imce/drupal.imce - -drupal.imce.resize: - version: VERSION - js: - js/plugins/imce/imce.resize.js: {} - dependencies: - - imce/drupal.imce - -drupal.imce.admin: - version: VERSION - css: - component: - css/imce.admin.css: {} - -drupal.imce.bueditor: - version: VERSION - js: - js/plugins/bueditor/imce.bueditor.js: {} - dependencies: - - bueditor/drupal.bueditor - -drupal.imce.ckeditor: - version: VERSION - js: - js/plugins/ckeditor/imce.ckeditor.js: {} - dependencies: - - ckeditor/drupal.ckeditor - -drupal.imce.filefield: - version: VERSION - js: - js/imce.filefield.js: {} - css: - component: - css/imce.filefield.css: {} - dependencies: - - core/jquery - - core/drupal - - core/drupalSettings - -drupal.imce.input: - version: VERSION - css: - component: - css/imce.input.css: {} - js: - js/imce.input.js: {} - dependencies: - - core/jquery - - core/drupal - - core/drupalSettings diff --git a/web/modules/imce/imce.links.action.yml b/web/modules/imce/imce.links.action.yml deleted file mode 100644 index c1ed61aa742caac9517924c87eee63a3c8b432d4..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.links.action.yml +++ /dev/null @@ -1,5 +0,0 @@ -imce.profile_add: - route_name: imce.profile_add - title: 'Add configuration profile' - appears_on: - - imce.admin diff --git a/web/modules/imce/imce.links.menu.yml b/web/modules/imce/imce.links.menu.yml deleted file mode 100644 index 5831dc37f87f2cc9fb736cf2d60e9faef111eee6..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.links.menu.yml +++ /dev/null @@ -1,5 +0,0 @@ -imce.admin: - title: 'Imce File Manager' - description: 'Configure Imce File Manager.' - route_name: imce.admin - parent: system.admin_config_media diff --git a/web/modules/imce/imce.module b/web/modules/imce/imce.module deleted file mode 100644 index 573148cf9d438c4a00fba5235ee4a425c6b7cebf..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.module +++ /dev/null @@ -1,118 +0,0 @@ -<?php - -/** - * @file - * Defines Drupal hooks for imce module. - */ - -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Field\WidgetInterface; -use Drupal\Core\Field\FieldDefinitionInterface; -use Drupal\imce\ImceFileField; -use Drupal\imce\Imce; - -/** - * Implements hook_theme(). - */ -function imce_theme() { - return [ - 'imce_page' => [ - 'render element' => 'page', - 'function' => 'imce_page_render', - ], - ]; -} - -/** - * Renders imce page. - */ -function imce_page_render($variables) { - return \Drupal::service('renderer')->render($variables['page']); -} - -/** - * Implements hook_file_download(). - */ -function imce_file_download($uri) { - if (Imce::accessFileUri($uri, \Drupal::currentUser())) { - return [ - 'Content-type' => \Drupal::service('file.mime_type.guesser')->guess($uri), - 'Content-Length' => filesize($uri), - ]; - } -} - -/** - * Implements hook_field_widget_third_party_settings_form(). - * Returns imce settings form for supported file widgets. - */ -function imce_field_widget_third_party_settings_form(WidgetInterface $widget, FieldDefinitionInterface $field_definition, $form_mode, $form, FormStateInterface $form_state) { - return ImceFileField::widgetSettingsForm($widget, $field_definition, $form_mode, $form, $form_state); -} - -/** - * Implements hook_field_widget_settings_summary_alter(). - * Sets imce settings summary for supported file widgets. - */ -function imce_field_widget_settings_summary_alter(&$summary, $context) { - return ImceFileField::alterWidgetSettingsSummary($summary, $context); -} - -/** - * Implements hook_field_widget_form_alter(). - * Alters widget forms that have imce enabled. - */ -function imce_field_widget_form_alter(&$element, FormStateInterface $form_state, $context) { - if ($context['widget']->getThirdPartySetting('imce', 'enabled')) { - $scheme = $context['items'][$context['delta']]->getFieldDefinition()->getSetting('uri_scheme'); - if (Imce::access(\Drupal::currentUser(), $scheme)) { - $element['#scheme'] = $scheme; - $class = 'Drupal\imce\ImceFileField'; - $element['#process'][] = [$class, 'processWidget']; - // Make sure default value callbacks are added - if (empty($element['#file_value_callbacks'])) { - $info = \Drupal::service('element_info')->getInfo($element['#type']); - if (!empty($info['#file_value_callbacks'])) { - $element['#file_value_callbacks'] = $info['#file_value_callbacks']; - } - } - $element['#file_value_callbacks'][] = [$class, 'setWidgetValue']; - } - } -} - -/** - * Implements hook_form_FORM_ID_alter() for editor_link_dialog form. - */ -function imce_form_editor_link_dialog_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { - imce_process_url_element($form['attributes']['href'], 'link'); -} - -/** - * Implements hook_form_FORM_ID_alter() for editor_image_dialog form. - */ -function imce_form_editor_image_dialog_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { - imce_process_url_element($form['attributes']['src'], 'image'); -} - -/** - * Integrates Imce into an URL element. - */ -function imce_process_url_element(&$element, $type = 'link') { - if ($element && Imce::access()) { - $element['#attributes']['class'][] = 'imce-url-input'; - $element['#attributes']['data-imce-type'] = $type; - $element['#attached']['library'][] = 'imce/drupal.imce.input'; - } -} - -/** - * Implements hook_form_FORM_ID_alter() for filter_format_form. - */ -function imce_form_filter_format_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { - if (isset($form['editor']['settings']['subform']['plugins']['drupalimage']['image_upload']['status'])) { - $desc = &$form['editor']['settings']['subform']['plugins']['drupalimage']['image_upload']['status']['#description']; - $str = t('Disable to use IMCE file browser.'); - $desc = $desc ? $desc . ' ' . $str : $str; - } -} \ No newline at end of file diff --git a/web/modules/imce/imce.permissions.yml b/web/modules/imce/imce.permissions.yml deleted file mode 100644 index f530e43042c850c11b2f8f2db0126428abd9b613..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.permissions.yml +++ /dev/null @@ -1,3 +0,0 @@ -administer imce: - title: 'Administer Imce File Manager' - restrict access: true diff --git a/web/modules/imce/imce.routing.yml b/web/modules/imce/imce.routing.yml deleted file mode 100644 index e6be4f7130a387bbf469db0658bad11a1cd64524..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.routing.yml +++ /dev/null @@ -1,48 +0,0 @@ -imce.page: - path: '/imce/{scheme}' - defaults: - _controller: '\Drupal\imce\Controller\ImceController::page' - _title: 'File Manager' - scheme: null - requirements: - _custom_access: '\Drupal\imce\Controller\ImceController::checkAccess' - -imce.admin: - path: '/admin/config/media/imce' - defaults: - _controller: '\Drupal\imce\Controller\ImceController::adminOverview' - _title: 'Imce File Manager' - requirements: - _permission: 'administer imce' - -imce.profile_add: - path: '/admin/config/media/imce/add-profile' - defaults: - _entity_form: 'imce_profile.add' - _title: 'Add configuration profile' - requirements: - _entity_create_access: 'imce_profile' - -entity.imce_profile.edit_form: - path: '/admin/config/media/imce/{imce_profile}' - defaults: - _entity_form: 'imce_profile.edit' - _title: 'Edit configuration profile' - requirements: - _entity_access: 'imce_profile.update' - -entity.imce_profile.delete_form: - path: '/admin/config/media/imce/{imce_profile}/delete' - defaults: - _entity_form: 'imce_profile.delete' - _title: 'Delete configuration profile' - requirements: - _entity_access: 'imce_profile.delete' - -entity.imce_profile.duplicate_form: - path: '/admin/config/media/imce/{imce_profile}/duplicate' - defaults: - _entity_form: 'imce_profile.duplicate' - _title: 'Duplicate configuration profile' - requirements: - _entity_create_access: 'imce_profile' diff --git a/web/modules/imce/imce.services.yml b/web/modules/imce/imce.services.yml deleted file mode 100644 index eb8718202f68306833d1a8a20f0e5966f61641fc..0000000000000000000000000000000000000000 --- a/web/modules/imce/imce.services.yml +++ /dev/null @@ -1,8 +0,0 @@ -services: - plugin.manager.imce.plugin: - class: Drupal\imce\ImcePluginManager - parent: default_plugin_manager - imce.route_subscriber: - class: Drupal\imce\Routing\ImceRouteSubscriber - tags: - - { name: event_subscriber } diff --git a/web/modules/imce/js/imce.File.js b/web/modules/imce/js/imce.File.js deleted file mode 100644 index b043d308b209e663bc806193107fc4c4eacb56a2..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.File.js +++ /dev/null @@ -1,70 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines imce File object. - */ - - /** - * File. - */ - imce.File = function (name) { - this.construct(name); - }; - - /** - * Item prototype - */ - var ItemProto = imce.Item.prototype; - - /** - * File prototype extends Item prototype. - */ - var File = $.extend(imce.File.prototype, ItemProto); - - /** - * Initialize the file object. - */ - File.construct = function (name) { - this.isFile = true; - this.type = 'file'; - ItemProto.construct.apply(this, arguments); - }; - - /** - * Initialize DOM elements. - */ - File.createEl = function () { - if (!this.el) { - ItemProto.createEl.apply(this, arguments); - this.el.className += ' file'; - } - }; - - /** - * Name change handler. - */ - File.onNameChange = function (oldval) { - ItemProto.onNameChange.apply(this, arguments); - // Get the new extension - var File = this; - var newext = imce.getExt(File.name); - // Check if the extension has changed - if (File.ext !== newext) { - // Remove the classname of old ext - if (File.ext != null) { - if (File.ext) { - $(File.el).removeClass('file-' + File.ext.toLowerCase()); - } - } - // Add the classname for new ext - if (newext) { - File.el.className += ' file-' + newext.toLowerCase(); - } - File.ext = newext; - } - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/imce.Folder.js b/web/modules/imce/js/imce.Folder.js deleted file mode 100644 index 98f3007bd07cf3dca1758d8f82fb6a1ec7d519f8..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.Folder.js +++ /dev/null @@ -1,791 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines imce Folder object. - */ - - /** - * Folder. - */ - imce.Folder = function (name, conf) { - this.construct(name, conf); - }; - - /** - * Item prototype - */ - var ItemProto = imce.Item.prototype; - - /** - * Folder prototype extends Item prototype. - */ - var Folder = $.extend(imce.Folder.prototype, ItemProto); - - /** - * Constructs the Folder. - */ - Folder.construct = function (name, conf) { - var Folder = this; - Folder.isFolder = true; - Folder.type = 'folder'; - Folder.items = []; - Folder.files = {}; - Folder.subfolders = {}; - ItemProto.construct.apply(Folder, arguments); - Folder.setConf(conf); - }; - - /** - * Creates folder elements. - */ - Folder.createEl = function () { - var nameEl; - var toggleEl; - var branchEl; - var Folder = this; - if (!Folder.el) { - // Item elements. - ItemProto.createEl.apply(Folder, arguments); - Folder.el.className += ' folder'; - // Folder elements - Folder.contentEl = imce.createEl('<div class="imce-folder-content clearfix"></div>'); - Folder.subtreeEl = imce.createEl('<div class="imce-subtree"></div>'); - branchEl = Folder.branchEl = imce.createEl('<div class="imce-branch"><span class="imce-branch-toggle"></span><span class="imce-branch-name imce-ficon"></span></div>'); - toggleEl = Folder.branchToggleEl = branchEl.firstChild; - toggleEl.onclick = imce.eBranchToggleClick; - nameEl = Folder.branchNameEl = branchEl.children[1]; - nameEl.onclick = imce.eBranchNameClick; - branchEl.Folder = nameEl.Folder = toggleEl.Folder = Folder; - } - }; - - /** - * Sets the folder content. - */ - Folder.setContent = function (content) { - var i; - var Item; - var list; - var Folder = this; - var items = Folder.getItems(); - // Remove the items that no longer exist. - for (i in items) { - if (!imce.owns(items, i)) { - continue; - } - Item = items[i]; - list = Item.isFolder ? content.subfolders : content.files; - // Existing item is not in the list - if (!list || !imce.owns(list, Item.name)) { - // Make sure it's not (parent of) a predefined folder - if (!Item.isFolder || !Item.hasPredefinedPath()) { - Folder.removeItem(Item); - } - } - } - Folder.extend(content.props); - Folder.addContent(content); - Folder.content = content; - Folder.updateSubtree(); - }; - - /** - * Adds new files and subfolders. - */ - Folder.addContent = function (content, selectNew) { - var Folder = this; - var files = content.files; - var subfolders = content.subfolders; - if (!files && !subfolders) { - return; - } - // Add items - Folder.addItems(files, 'file'); - Folder.addItems(subfolders, 'folder'); - // Update sort - if (Folder.active) { - Folder.sortItems(); - } - else { - Folder.needSort = 1; - } - Folder.sortTree(); - // Select new items. - if (selectNew && Folder.active) { - var name; - var fname; - var sname; - imce.deselectAll(); - if (files) { - for (fname in files) { - if (!imce.owns(files, fname)) { - continue; - } - Folder.getItem(fname).select(); - } - } - if (subfolders) { - for (sname in subfolders) { - if (!imce.owns(subfolders, sname)) { - continue; - } - Folder.getItem(sname).select(); - } - } - // Scroll the last item into view - if (name = (fname || sname)) { - Folder.getItem(name).scrollIntoView(); - } - } - }; - - /** - * Add a list of items of a specific type. - */ - Folder.addItems = function (items, type) { - var Item; - var name; - var Type = type === 'folder' ? imce.Folder : imce.File; - if (items) { - for (name in items) { - // Update - if (Item = this.getItem(name)) { - Item.extend(items[name]); - this.updateStatus(); - } - // Insert - else { - Item = new Type(name); - Item.extend(items[name]); - this.appendItem(Item); - } - } - } - }; - - /** - * Returns a copy of items array. - */ - Folder.getItems = function () { - return this.items.slice(0); - }; - - /** - * Append an item to the folder. - */ - Folder.appendItem = function (Item) { - var Folder = this; - var name = Item.name; - var existing; - if (!Folder.validateAppend(Item)) { - return; - } - // Remove the item from old parent - Item.remove(true); - // Remove existing item with the same name - if (existing = Folder.getItem(name)) { - existing.remove(); - } - // Append item. - Folder.items.push(Item); - Item.parent = Folder; - Folder.contentEl.appendChild(Item.el); - // Append subfolder - if (Item.isFolder) { - Folder.prepareSubtree(); - Folder.subtreeEl.appendChild(Item.branchEl); - Folder.subfolders[name] = Item; - Item.setPath((Folder.parent ? Folder.path + '/' : '') + Item.name); - } - // Append file - else { - Folder.files[name] = Item; - } - // Update status. - Folder.updateStatus(); - }; - - /** - * Remove an item from the folder. - */ - Folder.removeItem = function (Item, shallow, i) { - var name = Item.name; - var Folder = this; - // Check if the item is a child - if (Item.parent !== Folder) { - return; - } - // Deep removal - if (!shallow) { - // Remove all descendants of the subfolder. - if (Item.isFolder) { - for (i in Item.items) { - if (!imce.owns(Item.items, i)) { - continue; - } - Item.removeItem(Item.items[i]); - } - } - } - // Set item free. - Item.deselect(); - Item.setBusy(false); - // Remove subfolder - if (Item.isFolder) { - if (Item.active) { - Folder.activate(); - } - Item.setPath(null); - delete Folder.subfolders[name]; - imce.removeEl(Item.branchEl); - Folder.updateSubtree(); - } - // Remove file - else { - delete Folder.files[name]; - } - // Remove item - Folder.items.splice(!i ? Folder.indexOf(Item) : i, 1); - delete Item.parent; - imce.removeEl(Item.el); - Folder.updateStatus(); - }; - - /** - * Set folder path. - * Register the folder to the tree. - */ - Folder.setPath = function (newpath) { - var i; - var Folder = this; - var oldpath = Folder.path; - var subfolders = Folder.subfolders; - if (oldpath !== newpath) { - // Remove - if (newpath == null) { - for (i in subfolders) { - if (!imce.owns(subfolders, i)) { - continue; - } - subfolders[i].setPath(null); - } - delete imce.tree[oldpath]; - delete Folder.path; - } - // Add - else { - Folder.path = newpath; - imce.tree[newpath] = Folder; - Folder.setDisabled(!Folder.getConf()); - for (i in subfolders) { - if (!imce.owns(subfolders, i)) { - continue; - } - subfolders[i].setPath(newpath + '/' + subfolders[i].name); - } - Folder.updateStatus(); - } - } - }; - - /** - * Returns a permission value. - */ - Folder.getPermission = function (name) { - return imce.permissionInFolderConf(name, this.getConf()); - }; - - /** - * Returns folder configuration. - */ - Folder.getConf = function () { - var conf = this.conf; - var parent; - if (conf) { - return conf; - } - if (parent = this.parent) { - if (conf = parent.getConf()) { - if (imce.permissionInFolderConf('browse_subfolders', conf)) { - return $.extend({inherited: true}, conf); - } - } - } - }; - - /** - * Sets folder configuration. - */ - Folder.setConf = function (conf) { - if (this.conf !== conf) { - this.conf = conf; - this.setDisabled(!this.getConf()); - } - }; - - /** - * Open folder. - */ - Folder.open = function (refresh) { - if (refresh || !this.content) { - this.load(); - } - this.activate(); - }; - - /** - * Dynamically load folder contents. - */ - Folder.load = function () { - if (this.isReady()) { - this.setLoading(true); - imce.ajax('browse', { - activeFolder: this, - customComplete: imce.xFolderLoadComplete - }); - } - }; - - /** - * Activate folder. - */ - Folder.activate = function () { - var Folder = this; - var oldFolder = imce.activeFolder; - var parent = Folder.parent; - if (!Folder.active) { - // Deactivate the old dir. - if (oldFolder) { - oldFolder.deactivate(); - } - // Check sort - if (Folder.needSort) { - Folder.sortItems(); - } - imce.activeFolder = Folder; - Folder.active = true; - $(Folder.branchEl).addClass('active'); - // Add the content to the dom if it is fully loaded. - if (!Folder.loading) { - Folder.addContentToDom(); - } - Folder.setContentVisibility(true); - // Expand parents if collapsed. - while (parent) { - parent.expand(); - parent = parent.parent; - } - // Update status and header - Folder.updateHeader(); - Folder.updateStatus(); - // Trigger activateFolder handlers. - imce.trigger('activateFolder', Folder, oldFolder); - } - }; - - /** - * Deactivate folder. - */ - Folder.deactivate = function () { - var Folder = this; - if (Folder.active) { - Folder.setContentVisibility(false); - imce.deselectAll(); - imce.activeFolder = null; - Folder.active = false; - $(Folder.branchEl).removeClass('active'); - } - }; - - /** - * Set loading state. - */ - Folder.setLoading = function (state) { - var Folder = this; - if (state) { - if (!Folder.loading) { - Folder.setBusy(true); - Folder.setState('loading'); - if (Folder.active) { - imce.deselectAll(); - } - } - } - else if (Folder.loading) { - Folder.setBusy(false); - Folder.unsetState('loading'); - if (Folder.active) { - Folder.addContentToDom(); - } - } - }; - - /** - * Returns an item by name. - */ - Folder.getItem = function (name) { - var Folder = this; - if (imce.owns(Folder.files, name)) { - return Folder.files[name]; - } - if (imce.owns(Folder.subfolders, name)) { - return Folder.subfolders[name]; - } - }; - - /** - * Returns an item by index. - */ - Folder.getItemAt = function (i) { - return this.items[i]; - }; - - /** - * Returns the index of an item. - */ - Folder.indexOf = function (Item) { - return $.inArray(Item, this.items); - }; - - /** - * Selects all items. - */ - Folder.selectAll = function () { - for (var i in this.items) { - if (!imce.owns(this.items, i)) { - continue; - } - this.items[i].select(); - } - }; - - /** - * Returns the number of items. - */ - Folder.countItems = function () { - return this.items.length; - }; - - /** - * Returns the number of subfolders. - */ - Folder.countSubfolders = function () { - var i; - var count = 0; - for (i in this.subfolders) { - if (!imce.owns(this.subfolders, i)) { - continue; - } - count++; - } - return count; - }; - - /** - * Name change handler. - */ - Folder.onNameChange = function (oldval) { - ItemProto.onNameChange.apply(this, arguments); - this.branchNameEl.innerHTML = Drupal.checkPlain(this.name); - }; - - /** - * Item name change handler. - * Triggered by imce.Item.onNameChange() - */ - Folder.onItemNameChange = function (Item, oldname) { - var Folder = this; - var name = Item.name; - var group = Item.isFolder ? Folder.subfolders : Folder.files; - delete group[oldname]; - group[name] = Item; - // Set folder path - if (Item.isFolder) { - Item.setPath((Folder.parent ? Folder.path + '/' : '') + name); - } - }; - - /** - * Double-click handler. - */ - Folder.dblClick = function () { - this.open(); - }; - - /** - * Inserts the content element into the main content area. - */ - Folder.addContentToDom = function () { - var el = this.contentEl; - var parentEl = imce.contentEl; - if (el.parentNode !== parentEl) { - parentEl.appendChild(el); - } - }; - - /** - * Sets visibility of the content element. - */ - Folder.setContentVisibility = function (show) { - var el = this.contentEl; - el.style.display = show ? '' : 'none'; - if (el.scrollTop) { - el.scrollTop = 0; - } - }; - - /** - * Prepares for subfolder appending. - */ - Folder.prepareSubtree = function () { - var Folder = this; - if (Folder.subtreeEl.parentNode !== Folder.branchEl) { - Folder.branchEl.appendChild(Folder.subtreeEl); - $(Folder.branchEl).removeClass('leaf'); - // Prevent expanding of inactive dirs except the first activated dir on init - if (!Folder.active && imce.activeFolder) { - Folder.expanded = true; - Folder.shrink(); - } - else { - Folder.expand(); - } - } - }; - - /** - * Check and remove subtree element if it's empty. - */ - Folder.updateSubtree = function () { - if (!this.countSubfolders()) { - this.shrink(); - imce.removeEl(this.subtreeEl); - $(this.branchEl).addClass('leaf'); - } - }; - - /** - * Expands the subtree. - */ - Folder.expand = function () { - if (!this.expanded) { - this.expanded = true; - $(this.branchEl).addClass('expanded'); - $(this.subtreeEl).show(); - } - }; - - /** - * Shrinks the subtree. - */ - Folder.shrink = function () { - if (this.expanded) { - this.expanded = false; - $(this.branchEl).removeClass('expanded'); - $(this.subtreeEl).hide(); - } - }; - - /** - * Update folder status. - */ - Folder.updateStatus = function () { - if (this.active) { - imce.updateStatus(); - } - }; - - /** - * Update header sort. - */ - Folder.updateHeader = function () { - if (this.active) { - imce.updateHeader(); - } - }; - - /** - * Sort folder items by an item property. - */ - Folder.sortItems = function (key, desc) { - var i; - var sorter; - var Folder = this; - var items = Folder.items; - var active = Folder.activeSort || imce.activeSort || imce.local.activeSort || {}; - if (key == null) { - key = active.key || 'name'; - } - if (desc == null) { - desc = !!active.desc; - } - // Remove lazy sort flag. - Folder.needSort = 0; - // Check sorter - if (sorter = imce.sorters[key]) { - items.sort(sorter); - if (desc) { - items.reverse(); - } - for (i in items) { - if (!imce.owns(items, i)) { - continue; - } - this.contentEl.appendChild(items[i].el); - } - Folder.activeSort = {key: key, desc: desc}; - Folder.updateHeader(); - } - }; - - /** - * Sorts folder tree elements by name. - */ - Folder.sortTree = function () { - var i; - var Folder = this; - var subfolders = Folder.subfolders; - var arr = []; - for (i in subfolders) { - if (!imce.owns(subfolders, i)) { - continue; - } - arr.push(subfolders[i]); - } - if (arr.length > 1) { - arr.sort(imce.sortBranchName); - for (i in arr) { - if (!imce.owns(arr, i)) { - continue; - } - Folder.subtreeEl.appendChild(arr[i].branchEl); - } - } - }; - - /** - * Check if the item can be appended to the folder. - */ - Folder.validateAppend = function (Item, copy) { - // Disallow self appending - if (Item === this) { - return false; - } - var parent = Item.parent; - // Allow orphan appending - if (!parent) { - return true; - } - // Disallow re-appending children - if (!copy && parent === this) { - return false; - } - // Disallow (grand)parents appending - if (Item.isFolder) { - for (parent = this.parent; parent; parent = parent.parent) { - if (parent === Item) { - return false; - } - } - } - return true; - }; - - /** - * Checks if the folder is predefined. - */ - Folder.isPredefined = function () { - return !!this.conf; - }; - - /** - * Returns the first predefined descendent including itself. - */ - Folder.hasPredefinedPath = function () { - if (this.isPredefined()) { - return this; - } - var i; - var Folder; - var subfolders = this.subfolders; - for (i in subfolders) { - if (Folder = subfolders[i].hasPredefinedPath()) { - return Folder; - } - } - return false; - }; - - /** - * Returns status text. - */ - Folder.formatStatus = function () { - return '<div class="items">' + imce.formatItemsStatus(this.countItems(), this.getSize()) + '</div>'; - }; - - /** - * Returns the size of the folder. - */ - Folder.getSize = function () { - var i; - var size = 0; - var files = this.files; - for (i in files) { - if (!imce.owns(files, i)) { - continue; - } - size += files[i].size || 0; - } - return size; - }; - - - /** - * Click event for branch name. - */ - imce.eBranchNameClick = function (event) { - this.Folder.open(); - return false; - }; - - - /** - * Click event for branch toggle. - */ - imce.eBranchToggleClick = function (event) { - var Folder = this.Folder; - if (Folder.countSubfolders()) { - if (Folder.expanded) { - Folder.shrink(); - } - else { - Folder.expand(); - } - } - else { - Folder.open(); - } - return false; - }; - - /** - * Ajax complete handler for folder loading. - */ - imce.xFolderLoadComplete = function (xhr, status) { - var content; - var opt = this; - var Folder = opt.activeFolder; - var response = opt.response; - if (response && (content = response.content)) { - Folder.setContent(content); - } - Folder.setLoading(false); - if (Folder.countSubfolders()) { - Folder.expand(); - } - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/imce.Item.js b/web/modules/imce/js/imce.Item.js deleted file mode 100644 index 96037bd7a06d8a567d06711e845bc825bf108027..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.Item.js +++ /dev/null @@ -1,483 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines imce Item object. - */ - - /** - * Imce Item. - */ - imce.Item = function (name) { - this.construct(name); - }; - - /** - * Item prototype. - */ - var Item = imce.Item.prototype; - - /** - * Constructs Imce Item. - */ - Item.construct = function (name) { - this.createEl(); - this.setName(name); - }; - - /** - * Creates Item elements. - */ - Item.createEl = function () { - var el; - var children; - var Item = this; - if (!Item.el) { - el = Item.el = imce.createEl('<div class="imce-item"><div class="imce-item-date"></div><div class="imce-item-height"></div><div class="imce-item-width"></div><div class="imce-item-size"></div><div class="imce-item-icon imce-ficon"></div><div class="imce-item-name"></div></div>'); - el.onmousedown = imce.eItemMousedown; - el.ondblclick = imce.eItemDblclick; - el.Item = Item; - children = el.children; - Item.dateEl = children[0]; - Item.heightEl = children[1]; - Item.widthEl = children[2]; - Item.sizeEl = children[3]; - Item.iconEl = children[4]; - Item.nameEl = children[5]; - } - }; - - /** - * Appends the item to a parent. - */ - Item.appendTo = function (parent) { - parent.appendItem(this); - }; - - /** - * Removes the item. - */ - Item.remove = function (shallow) { - if (this.parent) { - this.parent.removeItem(this, shallow); - } - }; - - /** - * Item click handler. - */ - Item.click = function (e) { - var Item = this; - if (e) { - // Range select - if (e.shiftKey) { - var Folder = imce.activeFolder; - var lastItem = imce.getLastSelected(); - var start = lastItem ? Folder.indexOf(lastItem) : -1; - var end = Folder.indexOf(Item); - var step = start < end ? 1 : -1; - while (start !== end) { - Folder.getItemAt(start += step).select(); - } - return; - } - // Toggle select - if (e.ctrlKey) { - return Item.toggleSelect(); - } - } - var i; - var selection = imce.getSelection(); - for (i in selection) { - if (imce.owns(selection, i) && selection[i] !== Item) { - selection[i].deselect(); - } - } - Item.select(); - }; - - /** - * Double click handler. - */ - Item.dblClick = function () { - if (imce.sendtoHandler) { - imce.runSendtoHandler([this]); - } - else { - this.open(); - } - }; - - /** - * Opens item. - */ - Item.open = function () { - var url = this.getUrl(); - if (url) { - window.open(url); - } - }; - - /** - * Selects item. - */ - Item.select = function () { - imce.selectItem(this); - }; - - /** - * Deselects item. - */ - Item.deselect = function () { - imce.deselectItem(this); - }; - - /** - * Toggles select. - */ - Item.toggleSelect = function () { - if (this.selected) { - this.deselect(); - } - else { - this.select(); - } - }; - - /** - * Sets/unsets the item busy. - */ - Item.setBusy = function (state) { - this.toggleState('busy', !!state); - }; - - /** - * Sets/unsets the item disabled. - */ - Item.setDisabled = function (state) { - this.toggleState('disabled', !!state); - }; - - /** - * Checks if the item is ready for an operation. - */ - Item.isReady = function () { - return !this.disabled && !this.busy; - }; - - /** - * Returns item path relative to the root. - */ - Item.getPath = function () { - var parent; - var path = this.path; - if (path) { - return path; - } - if (parent = this.parent) { - if (path = parent.getPath()) { - return imce.joinPaths(path, this.name); - } - } - }; - - /** - * Returns item uri. - */ - Item.getUri = function () { - var path = this.getPath(); - if (path) { - return imce.joinPaths(imce.getConf('root_uri', '/'), path); - } - }; - - /** - * Returns item url. - * Uncached parameter allows unique urls per size+date which is useful to display resized/cropped images - */ - Item.getUrl = function (absolute, uncached) { - var rootUrl; - var url = ''; - if (rootUrl = imce.getConf('root_url')) { - url = imce.joinPaths(rootUrl, encodeURIComponent(this.getPath()).replace(/%2F/g, '/')); - if (absolute && url.charAt(0) === '/' && url.charAt(1) !== '/') { - url = location.protocol + '//' + location.host + url; - } - if (uncached) { - url += (url.indexOf('?') === -1 ? '?' : '&') + ('s' + this.size) + ('d' + this.date); - } - } - return url; - }; - - /** - * Formats item uri. - */ - Item.formatUri = function () { - return Drupal.checkPlain(this.getUri()); - }; - - /** - * Formats item path. - */ - Item.formatPath = function () { - return Drupal.checkPlain(this.path === '.' ? this.name : this.getPath()); - }; - - /** - * Formats item name. - */ - Item.formatName = function () { - return Drupal.checkPlain(this.name); - }; - - /** - * Formats item size. - */ - Item.formatSize = function () { - return imce.formatSize(this.size); - }; - - /** - * Formats item date. - */ - Item.formatDate = function (dayOnly) { - return imce.formatDate(this.date, dayOnly); - }; - - /** - * Formats item width. - */ - Item.formatWidth = function () { - return this.width ? this.width * 1 + '' : ''; - }; - - /** - * Formats item height. - */ - Item.formatHeight = function () { - return this.height ? this.height * 1 + '' : ''; - }; - - /** - * Formats item dimensions. - */ - Item.formatDimensions = function () { - return this.width ? this.width * 1 + 'x' + this.height * 1 : ''; - }; - - /** - * Adds new item properties. - * Fires property change events for changed properties. - */ - Item.extend = function (props) { - if (props) { - for (var i in props) { - if (!imce.owns(props, i)) { - continue; - } - this.setProperty(i, props[i]); - } - } - }; - - /** - * Sets property value and trigger change events. - */ - Item.setProperty = function (prop, val) { - var oldval = this[prop]; - if (oldval !== val) { - this[prop] = val; - this.triggerPropertyChange(prop, oldval); - } - }; - - /** - * Sets item name. - */ - Item.setName = function (name) { - this.setProperty('name', name); - }; - - /** - * Triggers property change handlers. - */ - Item.triggerPropertyChange = function (prop, oldval) { - var method = 'on' + prop.charAt(0).toUpperCase() + prop.substr(1) + 'Change'; - if (this[method]) { - this[method](oldval); - if (this === imce.previewingItem) { - imce.updatePreview(); - } - } - }; - - /** - * Name change handler. - */ - Item.onNameChange = function (oldname) { - var Item = this; - Item.nameEl.innerHTML = Item.formatName(); - if (Item.parent) { - Item.parent.onItemNameChange(Item, oldname); - } - }; - - /** - * Size change handler. - */ - Item.onSizeChange = function (oldval) { - this.sizeEl.innerHTML = this.formatSize(); - }; - - /** - * Date change handler. - */ - Item.onDateChange = function (oldval) { - this.dateEl.innerHTML = this.formatDate(true); - this.dateEl.title = this.formatDate(); - }; - - /** - * Width change handler. - */ - Item.onWidthChange = function (oldval) { - this.widthEl.innerHTML = this.formatWidth(); - }; - - /** - * Height change handler. - */ - Item.onHeightChange = function (oldval) { - this.heightEl.innerHTML = this.formatHeight(); - }; - - - /** - * Creates preview element. - */ - Item.createPreviewEl = function () { - var el; - var Item = this; - var prvEl = imce.createEl('<div class="imce-item-preview"></div>'); - // Info - var infoEl = imce.createEl('<div class="imce-preview-info"></div>'); - prvEl.appendChild(infoEl); - // Folder - if (Item.isFolder) { - infoEl.appendChild(imce.createEl('<div class="path">' + Item.formatUri() + '</div>')); - prvEl.className += ' folder'; - } - // File - else { - var url = Item.getUrl(true); - infoEl.appendChild(imce.createEl('<div class="url"><a href="' + url + '" target="_blank">' + url + '</a></div>')); - } - // Size - if (Item.size) { - infoEl.appendChild(imce.createEl('<div class="size">' + Item.formatSize() + '</div>')); - } - // Dimensions - if (Item.width) { - infoEl.appendChild(imce.createEl('<div class="dimensions">' + Item.formatDimensions() + '</div>')); - } - // Date - if (Item.date) { - infoEl.appendChild(imce.createEl('<div class="date">' + Item.formatDate() + '</div>')); - } - // Image - if (Item.isImageSource() && imce.getConf('preview_images', 1)) { - el = imce.createEl('<div class="imce-preview-image"><img src="' + Item.getUrl(false, true) + '"></div>'); - prvEl.appendChild(el); - prvEl.className += ' image'; - el.firstChild.onclick = imce.ePrvImgClick; - } - return prvEl; - }; - - /** - * Sets a state by name. - */ - Item.setState = function (name) { - var el; - var Item = this; - if (!Item[name]) { - Item[name] = true; - $(Item.el).addClass(name); - if (el = Item.branchEl) { - $(el).addClass(name); - } - } - }; - - /** - * Unsets a state by name. - */ - Item.unsetState = function (name) { - var el; - var Item = this; - if (Item[name]) { - Item[name] = false; - $(Item.el).removeClass(name); - if (el = Item.branchEl) { - $(el).removeClass(name); - } - } - }; - - /** - * Toggles a state by name. - */ - Item.toggleState = function (name, state) { - if (state == null) { - state = !this[name]; - } - this[state ? 'setState' : 'unsetState'](name); - }; - - /** - * Scroll the item element into view. - */ - Item.scrollIntoView = function () { - imce.scrollToEl(this.el, imce.contentEl, imce.contentHeaderEl.offsetHeight, imce.contentStatusEl.offsetHeight); - }; - - /** - * Check if the item can be used as an image source. - */ - Item.isImageSource = function() { - return this.width || this.ext && this.ext.toLowerCase() === 'svg'; - }; - - - /** - * Mousedown event for items. - */ - imce.eItemMousedown = function (event) { - var e = imce.eFix(event); - this.Item.click(e); - return !(e.ctrlKey || e.shiftKey); - }; - - /** - * Double-click event for items. - */ - imce.eItemDblclick = function (event) { - this.Item.dblClick(); - return false; - }; - - /** - * Click event for preview image. - */ - imce.ePrvImgClick = function () { - var Item = imce.previewingItem; - if (Item) { - Item.dblClick(); - } - return false; - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/imce.Tbb.js b/web/modules/imce/js/imce.Tbb.js deleted file mode 100644 index dc68b964a3cb56361f38288a4f94ace36f2c243b..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.Tbb.js +++ /dev/null @@ -1,212 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines imce Toolbar Button object. - */ - - /** - * Toolbar button constructor. - */ - imce.Tbb = function (id, opt) { - this.construct(id, opt); - }; - - /** - * Toolbar button prototype. - */ - var Tbb = imce.Tbb.prototype; - - /** - * Constructs button object. - */ - Tbb.construct = function (id, opt) { - var Tbb = imce.toolbarButtons[id] = this; - Tbb.id = id; - $.extend(Tbb, opt); - // Append or prepend the element. - var el = Tbb.createEl(); - var parent = imce.toolbarEl; - if (Tbb.prepend && parent.firstChild) { - parent.insertBefore(el, parent.firstChild); - } - else { - parent.appendChild(el); - } - // Add shortcut - if (Tbb.shortcut) { - imce.addShortcut(Tbb.shortcut, el); - } - }; - - /** - * Creates toolbar button element. - */ - Tbb.createEl = function () { - var Tbb = this; - var el = Tbb.el; - var icon; - if (!el) { - el = Tbb.el = imce.createEl('<span class="imce-tbb imce-ficon" role="button"><span class="imce-tbb-title"></span></span>'); - if (icon = Tbb.icon) { - el.className += ' imce-ficon-' + icon; - } - el.className += ' imce-tbb--' + Tbb.id; - el.title = (Tbb.tooltip || Tbb.title) + (Tbb.shortcut ? ' (' + Tbb.shortcut + ')' : ''); - el.onclick = imce.eTbbClick; - el.Tbb = Tbb; - el.firstChild.innerHTML = Tbb.title; - } - return el; - }; - - /** - * Create item popup. - */ - Tbb.createPopupEl = function () { - var Tbb = this; - var el = Tbb.popupEl; - if (!el) { - el = Tbb.popupEl = imce.createLayer('imce-tbb-popup'); - el.className += ' imce-tbb-popup--' + Tbb.id; - el.onkeydown = imce.eTbbPopupKeydown; - el.Tbb = Tbb; - if (Tbb.content) { - el.appendChild(Tbb.content); - } - } - return el; - }; - - /** - * Open item popup. - */ - Tbb.openPopup = function (autoclose) { - var Tbb = this; - if (!Tbb.active) { - Tbb.createPopupEl(); - Tbb.setActive(true); - var popupEl = Tbb.popupEl; - var $el = $(Tbb.el); - var css = $el.offset(); - css.top += $el.outerHeight(true); - $(popupEl).css(css).fadeIn(); - imce.fixPosition(popupEl); - // Focus on first input - $('form').find('input,select,textarea').filter(':visible').eq(0).focus(); - if (autoclose) { - $(document).bind('mousedown', {Tbb: Tbb}, imce.eTbbDocMousedown); - } - if (Tbb.onopen) { - Tbb.onopen.apply(Tbb, arguments); - } - } - }; - - /** - * Close item popup. - */ - Tbb.closePopup = function () { - var Tbb = this; - if (Tbb.popupEl && Tbb.active) { - Tbb.setActive(false); - $(Tbb.popupEl).hide(); - imce.contentEl.focus(); - if (Tbb.onclose) { - Tbb.onclose.apply(Tbb, arguments); - } - } - }; - - /** - * Set active state of the item. - */ - Tbb.setActive = function (state) { - this.toggleState('active', !!state); - }; - - /** - * Set busy state of the item. - */ - Tbb.setBusy = function (state) { - this.toggleState('busy', !!state); - }; - - /** - * Set disabled state of the item. - */ - Tbb.setDisabled = function (state) { - this.toggleState('disabled', !!state); - }; - - /** - * Set/unset a state by name. - */ - Tbb.toggleState = function (name, state) { - var Tbb = this; - var oldState = Tbb[name]; - if (state == null) { - state = !oldState; - } - if (state) { - if (!oldState) { - Tbb[name] = true; - $(Tbb.el).addClass(name); - } - } - else if (oldState) { - Tbb[name] = false; - $(Tbb.el).removeClass(name); - } - }; - - /** - * Trigger click handler of the button. - */ - Tbb.click = function (event) { - var Tbb = this; - if (!Tbb.disabled) { - if (Tbb.handler && !Tbb.busy) { - Tbb.handler.call(Tbb, imce.eFix(event)); - } - if (Tbb.content) { - Tbb.openPopup(true); - } - } - }; - - - /** - * Click event for toolbar buttons. - */ - imce.eTbbClick = function (event) { - this.Tbb.click(event); - }; - - /** - * Mousedown event for document in order to close toolbar button popup. - */ - imce.eTbbDocMousedown = function (e) { - var Tbb = e.data.Tbb; - var el = Tbb.popupEl; - if (el !== e.target && !$.contains(el, e.target)) { - Tbb.closePopup(); - $(document).unbind('mousedown', imce.eTbbDocMousedown); - } - }; - - /** - * Keydown event for toolbar button popup. - */ - imce.eTbbPopupKeydown = function (event) { - var e = event || window.event; - // Close on Esc - if (e.keyCode === 27) { - this.Tbb.closePopup(); - return false; - } - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/imce.filefield.js b/web/modules/imce/js/imce.filefield.js deleted file mode 100644 index 3bb349eabb4f4f857950724774f0461fe8407db7..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.filefield.js +++ /dev/null @@ -1,95 +0,0 @@ -(function ($, Drupal) { - "use strict"; - - /** - * @file - * Integrates Imce into file field widgets. - */ - - /** - * Global container for helper methods. - */ - var imceFileField = window.imceFileField = {}; - - /** - * Drupal behavior to handle imce file field integration. - */ - Drupal.behaviors.imceFileField = { - attach: function (context, settings) { - var i; - var el; - var $els = $('.imce-filefield-paths', context).not('.iff-processed').addClass('iff-processed'); - for (i = 0; el = $els[i]; i++) { - imceFileField.processInput(el); - } - } - }; - - /** - * Processes an imce file field input to create a widget. - */ - imceFileField.processInput = function (el) { - var widget; - var url = el.getAttribute('data-imce-url'); - var fieldId = el.getAttribute('data-drupal-selector').split('-imce-paths')[0]; - if (url && fieldId) { - url += (url.indexOf('?') === -1 ? '?' : '&') + 'sendto=imceFileField.sendto&fieldId=' + fieldId; - widget = $(imceFileField.createWidget(url)).insertBefore(el.parentNode)[0]; - widget.parentNode.className += ' imce-filefield-parent'; - } - return widget; - }; - - /** - * Creates an imce file field widget with the given url. - */ - imceFileField.createWidget = function (url) { - var $link = $('<a class="imce-filefield-link">' + Drupal.t('Open File Browser') + '</a>'); - $link.attr('href', url).click(imceFileField.eLinkClick); - return $('<div class="imce-filefield-widget"></div>').append($link)[0]; - }; - - /** - * Click event for the browser link. - */ - imceFileField.eLinkClick = function (e) { - window.open(this.href, '', 'width=760,height=560,resizable=1'); - e.preventDefault(); - }; - - /** - * Handler for imce sendto operation. - */ - imceFileField.sendto = function (File, win) { - var imce = win.imce; - var items = imce.getSelection(); - var fieldId = imce.getQuery('fieldId'); - var exts = imceFileField.getFieldExts(fieldId); - // Check extensions - if (exts && !imce.validateExtensions(items, exts)) { - return; - } - // Submit form with selected item paths - imceFileField.submit(fieldId, imce.getItemPaths(items)); - win.close(); - }; - - - /** - * Returns allowed extensions for a field. - */ - imceFileField.getFieldExts = function (fieldId) { - var settings = drupalSettings.file; - var elements = settings && settings.elements; - return elements ? elements['#' + fieldId] : false; - }; - - /** - * Submits a field widget with selected file paths. - */ - imceFileField.submit = function (fieldId, paths) { - $('[data-drupal-selector="' + fieldId + '-imce-paths"]').val(paths.join(':')); - $('[data-drupal-selector="' + fieldId + '-upload-button"]').mousedown(); - }; - -})(jQuery, Drupal); diff --git a/web/modules/imce/js/imce.input.js b/web/modules/imce/js/imce.input.js deleted file mode 100644 index 54babfb4ce65d6bc868a43b60d95fc5459dc3b62..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.input.js +++ /dev/null @@ -1,80 +0,0 @@ -(function ($, Drupal) { - "use strict"; - - /** - * @file - * Provides methods for integrating Imce into text fields. - */ - - /** - * Drupal behavior to handle url input integration. - */ - Drupal.behaviors.imceUrlInput = { - attach: function (context, settings) { - $('.imce-url-input', context).not('.imce-url-processed').addClass('imce-url-processed').each(imceInput.processUrlInput); - } - }; - - /** - * Global container for integration helpers. - */ - var imceInput = window.imceInput = window.imceInput || { - - /** - * Processes an url input. - */ - processUrlInput: function(i, el) { - var button = imceInput.createUrlButton(el.id, el.getAttribute('data-imce-type')); - el.parentNode.insertBefore(button, el); - }, - - /** - * Creates an url input button. - */ - createUrlButton: function(inputId, inputType) { - var button = document.createElement('a'); - button.href = '#'; - button.className = 'imce-url-button'; - button.innerHTML = '<span>' + Drupal.t('Open File Browser') + '</span>'; - button.onclick = imceInput.urlButtonClick; - button.InputId = inputId || 'imce-url-input-' + (Math.random() + '').substr(2); - button.InputType = inputType || 'link'; - return button; - }, - - /** - * Click event of an url button. - */ - urlButtonClick: function(e) { - var url = Drupal.url('imce'); - url += (url.indexOf('?') === -1 ? '?' : '&') + 'sendto=imceInput.urlSendto&inputId=' + this.InputId + '&type=' + this.InputType; - // Focus on input before opening the window - $('#' + this.InputId).focus(); - window.open(url, '', 'width=' + Math.min(1000, parseInt(screen.availWidth * 0.8, 10)) + ',height=' + Math.min(800, parseInt(screen.availHeight * 0.8, 10)) + ',resizable=1'); - return false; - }, - - /** - * Sendto handler for an url input. - */ - urlSendto: function(File, win) { - var url = File.getUrl(); - var el = $('#' + win.imce.getQuery('inputId'))[0]; - win.close(); - if (el) { - $(el).val(url).change().focus(); - // Auto-update image alt input with image name. - var name = el.name; - var re = /(^|[^a-z])src([^a-z]|$)/i; - if (name && re.test(name)) { - var altEl = el.form && el.form.elements[name.replace(re, '$1alt$2')]; - if (altEl && !altEl.value) { - altEl.value = el.value.split('/').pop(); - } - } - } - } - - }; - -})(jQuery, Drupal); diff --git a/web/modules/imce/js/imce.js b/web/modules/imce/js/imce.js deleted file mode 100644 index c6b420bf259c6ec98bc42382324329c79a3b0e61..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/imce.js +++ /dev/null @@ -1,1961 +0,0 @@ -(function ($, Drupal) { - 'use strict'; - - /** - * @file - * Defines Imce File Manager. - */ - - /** - * Global container. - */ - var imce = window.imce = { - // Configuration options - conf: {}, - // Locally stored data - local: {}, - // Events - events: {}, - // Shortcuts - shortcuts: {fm: {}, tree: {}, content: {}}, - // Toolbar buttons - toolbarButtons: {}, - // Folder tree - tree: {}, - // Currently selected items - selection: [], - // Message queue - messageQueue: [], - // Sort handlers - sorters: {} - }; - - /** - * Initiate imce on document ready. - */ - $(document).ready(function () { - var settings = window.drupalSettings; - var conf = settings && settings.imce; - var body = document.body; - if (conf && !imce.activeFolder && $(body).hasClass('imce-page')) { - if (!conf.ajax_url) { - conf.ajax_url = Drupal.url(settings.path.currentPath); - } - imce.init(conf, body); - } - }); - - /** - * Initialize imce. - */ - imce.init = function (conf, parentEl) { - // Set conf - conf = $.extend(imce.conf, conf); - if (!conf.ajax_url || !conf.folders || !conf.root_url) { - return; - } - imce.parentEl = parentEl; - // Get stored data - try { - $.extend(imce.local, JSON.parse(localStorage.getItem('imce.local'))); - } - catch (err) { - imce.delayError(err); - } - // Init - imce.trigger('preinit'); - imce.checkIntegration(); - imce.initUI(); - imce.initTree(); - // Add shortcuts - imce.addShortcut('ENTER', imce.eTreeEnter, 'tree'); - imce.addShortcut('UP', imce.eTreeUp, 'tree'); - imce.addShortcut('DOWN', imce.eTreeDown, 'tree'); - imce.addShortcut('LEFT', imce.eTreeLR, 'tree'); - imce.addShortcut('RIGHT', imce.eTreeLR, 'tree'); - imce.addShortcut('ENTER', imce.eContentEnter, 'content'); - imce.addShortcut('UP', imce.eContentArrow, 'content'); - imce.addShortcut('DOWN', imce.eContentArrow, 'content'); - imce.addShortcut('LEFT', imce.eContentArrow, 'content'); - imce.addShortcut('RIGHT', imce.eContentArrow, 'content'); - imce.addShortcut('Ctrl+A', imce.eContentCtrlA, 'content'); - // Add refresh button - imce.addTbb('refresh', { - title: Drupal.t('Refresh'), - permission: 'browse_files|browse_subfolders', - handler: imce.eFmRefresh, - shortcut: 'F5', - icon: 'refresh' - }); - // Register default activeFolder handler - imce.bind('activateFolder', imce.defaultActivateFolder); - // Trigger init handlers - imce.trigger('init'); - // Create sendto toolbar button if needed. - imce.createSendtoTbb(); - // Add the file manager to the page - parentEl.appendChild(imce.fmEl); - // Set window events - $(window).bind('beforeunload', imce.eWinBeforeunload).bind('resize', imce.eWinResize); - imce.eWinResize(); - // Content focus - imce.contentEl.focus(); - // Set initial messages - imce.ajaxProcessMessages(conf); - // Open active path - var path = conf.active_path; - var Folder = path && imce.addFolder(path); - if (!Folder) { - for (path in conf.folders) { - if (Folder = imce.getFolder(path)) { - break; - } - } - } - if (Folder) { - Folder.open(); - } - // Triger postinit - imce.trigger('postinit'); - }; - - /** - * Init UI elements. - */ - imce.initUI = function () { - var el = imce.fmEl; - var createEl = imce.createEl; - if (el) { - return el; - } - el = imce.fmEl = createEl('<div id="imce-fm"></div>'); - el.onkeydown = imce.eFmKeydown; - el.tabIndex = 0; - // Toolbar - el.appendChild(imce.toolbarEl = createEl('<div id="imce-toolbar"></div>')); - // Body - el.appendChild(imce.bodyEl = createEl('<div id="imce-body"></div>')); - // Tree - el = imce.treeEl = createEl('<div id="imce-tree"></div>'); - el.onkeydown = imce.eTreeKeydown; - el.onmousedown = imce.eTreeMousedown; - el.ontouchstart = imce.eTreeTouchstart; - el.tabIndex = 0; - imce.bodyEl.appendChild(el); - // Tree resizer - el = imce.treeResizerEl = createEl('<div id="imce-tree-resizer"></div>'); - el.onmousedown = imce.eTreeResizerMousedown; - el.ontouchstart = imce.eTreeResizerTouchstart; - imce.bodyEl.appendChild(el); - // Content - el = imce.contentEl = createEl('<div id="imce-content"></div>'); - el.onmousedown = imce.eContentMousedown; - el.ontouchstart = imce.eContentTouchstart; - el.onkeydown = imce.eContentKeydown; - el.onscroll = imce.eContentScroll; - el.tabIndex = 0; - imce.bodyEl.appendChild(el); - // Content header - el = imce.contentHeaderEl = imce.createEl('<div class="imce-content-header"><div class="imce-item"><div class="imce-item-date" data-sort="date">' + Drupal.t('Date') + '</div><div class="imce-item-height" data-sort="height">' + Drupal.t('Height') + '</div><div class="imce-item-width" data-sort="width">' + Drupal.t('Width') + '</div><div class="imce-item-size" data-sort="size">' + Drupal.t('Size') + '</div><div class="imce-item-icon imce-ficon" data-sort="ext"></div><div class="imce-item-name" data-sort="name">' + Drupal.t('Name') + '</div></div></div>'); - el.onclick = imce.eContentHeaderClick; - imce.contentEl.appendChild(el); - // Content status - el = imce.contentStatusEl = imce.createEl('<div class="imce-content-status"></div>'); - imce.contentEl.appendChild(el); - // Body resizer - el = imce.bodyResizerEl = createEl('<div id="imce-body-resizer"></div>'); - el.onmousedown = imce.eBodyResizerMousedown; - el.ontouchstart = imce.eBodyResizerTouchstart; - imce.fmEl.appendChild(el); - // Preview - imce.fmEl.appendChild(imce.previewEl = createEl('<div id="imce-preview"></div>')); - return el; - }; - - /** - * Init folder tree. - */ - imce.initTree = function () { - var path; - var folders = imce.getConf('folders'); - // Create root - var scheme = imce.getConf('scheme'); - var root = new imce.Folder(scheme ? scheme + '://' : '<' + Drupal.t('root') + '>'); - root.setPath('.'); - root.branchEl.className += ' root'; - imce.treeEl.appendChild(root.branchEl); - // Create predefined folders. - for (path in folders) { - if (imce.owns(folders, path)) { - imce.addFolder(path, folders[path]); - } - } - }; - - /** - * Returns a folder by path. - */ - imce.getFolder = function (path) { - if (imce.owns(imce.tree, path)) { - return imce.tree[path]; - } - }; - - /** - * Returns an item by path. - */ - imce.getItem = function (path) { - var Folder; - var parts = imce.splitPath(path); - if (parts) { - if (Folder = imce.getFolder(parts[0])) { - return Folder.getItem(parts[1]); - } - } - }; - - /** - * Adds a folder to the tree. - */ - imce.addFolder = function (path, conf) { - var parts; - var parent; - var Folder = imce.getFolder(path); - // Existing - if (Folder) { - if (conf) { - Folder.setConf(conf); - } - return Folder; - } - // New. Append to the parent. - if (parts = imce.splitPath(path)) { - if (parent = imce.addFolder(parts[0])) { - Folder = new imce.Folder(parts[1], conf); - parent.appendItem(Folder); - return Folder; - } - } - }; - - /** - * Add a toolbar button. - */ - imce.addTbb = function (id, opt) { - return imce.getTbb(id) || new imce.Tbb(id, opt); - }; - - /** - * Returns a toolbar button. - */ - imce.getTbb = function (id) { - return imce.toolbarButtons[id]; - }; - - /** - * Returns a configuration option. - */ - imce.getConf = function (name, defaultValue) { - var value; - var conf = imce.conf; - if (!name) { - return conf; - } - value = conf[name]; - return value == null ? defaultValue : value; - }; - - - /** - * Returns a copy of selected items. - */ - imce.getSelection = function () { - return imce.selection.slice(0); - }; - - /** - * Counts selected items. - */ - imce.countSelection = function () { - return this.selection.length; - }; - - /** - * Returns the selected items grouped by parent folder and type. - */ - imce.groupSelection = function () { - return imce.groupItems(imce.selection); - }; - - /** - * Select all items in the active folder. - */ - imce.selectAll = function () { - var Folder = imce.activeFolder; - if (Folder) { - Folder.selectAll(); - } - }; - - /** - * Deselects all items. - */ - imce.deselectAll = function () { - var i; - var arr = imce.getSelection(); - for (i in arr) { - if (imce.owns(arr, i)) { - arr[i].deselect(); - } - } - }; - - /** - * Returns last selected item. - */ - imce.getLastSelected = function () { - var arr = imce.selection; - var len = arr.length; - if (len) { - return arr[len - 1]; - } - }; - - /** - * Adds an item to the selection. - */ - imce.selectItem = function (Item) { - if (!Item.selected) { - var arr = imce.selection; - var oldlen = arr.length; - arr.push(Item); - Item.setState('selected'); - if (oldlen < 2) { - imce.updatePreview(); - } - } - }; - - /** - * Removes an item from the selection. - */ - imce.deselectItem = function (Item) { - if (Item.selected) { - var arr = imce.selection; - var i = $.inArray(Item, arr); - Item.unsetState('selected'); - if (i !== -1) { - arr.splice(i, 1); - if (arr.length < 2) { - imce.updatePreview(); - } - } - } - }; - - - /** - * Checks external application integration by URL parameters. - * - * Ex-1: http://example.com/imce?sendto=HANDLER - * Creates a sendto operation that calls HANDLER(File, imceWin) of the parent window. - * Ex-2: http://example.com/imce?urlField=FIELD-ID - * Creates a sendto operation that fills the field in parent window with the selected file's URL. - * Ex-3: http://example.com/imce?oninit=HANDLER - * Calls HANDLER() with imce context when the UI is ready. - */ - imce.checkIntegration = function () { - var query = imce.getQuery(); - var handler; - var urlField; - var parentWin = window.opener || window.parent; - if (imce.parentWin = parentWin) { - // Check sendto handler - if (handler = imce.resolveHandler(query.sendto, parentWin)) { - imce.sendtoHandler = handler; - } - // Check url field - else if (urlField = query.urlField) { - if (urlField = parentWin.document.getElementById(urlField)) { - imce.sendtoHandler = function (Item, win) { - try { - imce.parentWin.focus(); - (imce.parentWin.jQuery||$)(urlField).val(Item.getUrl()).blur().change().focus(); - } - catch (err) { - imce.delayError(err); - } - win.close(); - }; - } - } - // Check init handler - if (handler = imce.resolveHandler(query.oninit, parentWin)) { - imce.bind('init', handler); - } - // Store sendto type - if (imce.sendtoHandler && query.type) { - imce.sendtoType = query.type; - } - } - }; - - /** - * Creates the sendto toolbar button. - */ - imce.createSendtoTbb = function (title, desc) { - if (imce.sendtoHandler && !imce.getTbb('sendto')) { - return imce.addTbb('sendto', { - title: title || Drupal.t('Select'), - tooltip: desc || Drupal.t('Use the selected file.'), - handler: function () { - imce.runSendtoHandler(); - }, - icon: 'check' - }); - } - }; - - /** - * Runs custom sendto handler on the first selected item. - */ - imce.runSendtoHandler = function (items) { - var handler = imce.sendtoHandler; - if (handler) { - var Item; - var imgType = imce.sendtoType === 'image'; - items = items || imce.getSelection(); - for (var i in items) { - if (imce.owns(items, i)) { - Item = items[i]; - if (imgType ? Item.isImageSource() : Item.isFile) { - return handler(Item, window); - } - } - } - } - }; - - /** - * Default handler for activateFolder event. - */ - imce.defaultActivateFolder = function (Folder, oldFolder) { - // Enable/disable toolbar buttons by permission. - var i; - var j; - var Tbb; - var perm; - var disabled; - var buttons = imce.toolbarButtons; - for (i in buttons) { - if (!imce.owns(buttons, i)) { - continue; - } - Tbb = buttons[i]; - if (perm = Tbb.permission) { - perm = perm.split('|'); - disabled = true; - for (j in perm) { - if (Folder.getPermission(perm[j])) { - disabled = false; - break; - } - } - Tbb.setDisabled(disabled); - } - } - }; - - - /** - * Updates the active sort state in the content header. - */ - imce.updateHeader = function () { - var newsort = imce.activeFolder.activeSort; - var oldsort = imce.activeSort || {}; - var el = imce.contentHeaderEl; - // Check if the sort has changed. - if (newsort && (newsort.key !== oldsort.key || newsort.desc !== oldsort.desc)) { - // Deactivate existing column - if (oldsort.key) { - $('[data-sort="' + oldsort.key + '"]', el).removeClass('sorted ' + (oldsort.desc ? 'desc' : 'asc')); - } - // Activate new column - $('[data-sort="' + newsort.key + '"]', el).addClass('sorted ' + (newsort.desc ? 'desc' : 'asc')); - // Store the values - imce.activeSort = newsort; - } - }; - - /** - * Schedule preview updating. - */ - imce.updatePreview = function () { - clearTimeout(imce.previewTimer); - imce.previewTimer = setTimeout(imce.doUpdatePreview, 100); - }; - - /** - * Set preview of currently selected item. - */ - imce.doUpdatePreview = function () { - imce.previewItem(imce.countSelection() === 1 ? imce.getLastSelected() : null); - }; - - /** - * Sets/clears item preview. - */ - imce.previewItem = function (Item) { - var currentItem = imce.previewingItem; - if (imce.previewingItem = Item) { - $(imce.previewEl).html(Item.createPreviewEl()); - imce.trigger('previewItem', Item); - } - else if (currentItem) { - imce.previewEl.innerHTML = ''; - } - }; - - /** - * Schedule status update. - */ - imce.updateStatus = function () { - clearTimeout(imce.statusTimer); - imce.statusTimer = setTimeout(imce.doUpdateStatus, 100); - }; - - /** - * Updates active folder status. - */ - imce.doUpdateStatus = function () { - var Folder = imce.activeFolder; - if (Folder) { - $(imce.contentStatusEl).html(Folder.formatStatus()); - } - }; - - - /** - * Returns name filtering regexp. - */ - imce.getNameFilter = function () { - var filters = imce.getConf('name_filters', []); - // Dot files - if (!imce.getConf('allow_dot_files')) { - filters.push('^\\.|\\.$'); - } - return filters.length ? new RegExp(filters.join('|')) : false; - }; - - /** - * Groups an array of items by parent folder and type. - */ - imce.groupItems = function (items) { - var i; - var Item; - var path; - var selected; - var key; - var names; - var group = {}; - for (i in items) { - if (!imce.owns(items, i)) { - continue; - } - Item = items[i]; - path = Item.parent.getPath(); - selected = group[path] = imce.owns(group, path) ? group[path] : {}; - key = Item.isFolder ? 'subfolders' : 'files'; - names = selected[key] = selected[key] || {}; - names[Item.name] = Item; - } - return group; - }; - - /** - * Checks parent folder permissions of the given items. - */ - imce.validatePermissions = function (items, filePerm, subfolderPerm) { - var path; - var Folder; - var selected; - var groups = imce.groupItems(items); - for (path in groups) { - if (!imce.owns(groups, path)) { - continue; - } - Folder = imce.getFolder(path); - selected = groups[path]; - // Check file permission if the selection contains files - if (selected.files && (filePerm == null || !Folder.getPermission(filePerm))) { - return false; - } - // Check folder permission if the selection contains folders - if (selected.subfolders && (subfolderPerm == null || !Folder.getPermission(subfolderPerm))) { - return false; - } - } - return true; - }; - - /** - * Checks if items contain any predefined folder. - */ - imce.validatePredefinedPath = function (items) { - var i; - var Item; - var Folder; - for (i in items) { - if (!imce.owns(items, i)) { - continue; - } - Item = items[i]; - if (Item.isFolder) { - if (Folder = Item.hasPredefinedPath()) { - imce.setMessage(Drupal.t('%path is a predefined path and can not be modified.', {'%path': Folder.getPath()})); - return false; - } - } - } - return true; - }; - - /** - * Validates the number of items. - */ - imce.validateCount = function (items) { - if (!items.length) { - imce.setMessage(Drupal.t('Please select a file.')); - return false; - } - return true; - }; - - /** - * Validates item extensions against an allowed list. - */ - imce.validateExtensions = function (items, exts) { - for (var i in items) { - if (imce.owns(items, i) && !imce.validateExtension(items[i].ext, exts)) { - return false; - } - } - return true; - }; - - /** - * Validates an extension against an allowed list. - */ - imce.validateExtension = function (ext, exts) { - if (!ext || $.inArray(ext.toLowerCase(), exts.toLowerCase().split(/[\s,]+/)) === -1) { - imce.setMessage(Drupal.t('Only files with the following extensions are allowed: %files-allowed.', {'%files-allowed': exts})); - return false; - } - return true; - }; - - /** - * Validates a file name. - */ - imce.validateFileName = function (name) { - // Basic validation - if (!name || name === '.' || name === '..' || !name.length || name.length > 240) { - return false; - } - // Test name filters - var regex = imce.getNameFilter(); - if (regex && regex.test(name)) { - imce.setMessage(Drupal.t('%filename is not allowed.', {'%filename': name})); - return false; - } - // Test chars forbidden in various operating systems. - if (/^\s|\s$|[\/\\:\*\?\x22<>\|\x00-\x1F]/.test(name)) { - imce.setMessage(Drupal.t('%filename contains invalid characters. Use only alphanumeric characters for better portability.', {'%filename': name})); - return false; - } - return true; - }; - - /** - * Validates min/max image dimensions. - */ - imce.validateDimensions = function (items, width, height) { - // Check min dimensions - if (width < 1 || height < 1) { - return false; - } - // Check max dimensions. - var maxwidth = imce.getConf('maxwidth'); - var maxheight = imce.getConf('maxheight'); - if (maxwidth && width > maxwidth || maxheight && height > maxheight) { - imce.setMessage(Drupal.t('Image dimensions must be smaller than %dimensions pixels.', {'%dimensions': maxwidth + 'x' + maxwidth})); - return false; - } - return true; - }; - - /** - * Checks if all the selected items are images. - */ - imce.validateImageTypes = function (items) { - var Item = imce.getFirstItem(items, 'width', false); - if (Item) { - imce.setMessage(Drupal.t('%name is not an image.', {'%name': Item.name})); - return false; - } - return true; - }; - - - /** - * Keydown event for the file manager. - */ - imce.eFmKeydown = function (event) { - return imce.eFireShortcut.call(this, event); - }; - - /** - * Refresh handler for the file manager. - */ - imce.eFmRefresh = function () { - imce.activeFolder.load(); - }; - - /** - * Mousedown event for folder tree. - */ - imce.eTreeMousedown = function (event) { - // Manually focus as the browser default might have been prevented. - this.focus(); - }; - - /** - * Touchstart event for folder tree. - */ - imce.eTreeTouchstart = function (event) { - this.focus(); - }; - - /** - * Keydown event for folder tree. - */ - imce.eTreeKeydown = function (event) { - return imce.eFireShortcut.call(this, event, 'tree'); - }; - - /** - * Tree shortcut: Enter. - */ - imce.eTreeEnter = function () { - imce.activeFolder.open(); - }; - - /** - * Tree shortcut: UP. - */ - imce.eTreeUp = function (e) { - var Folder = imce.activeFolder; - var prvEl; - var prvFolder; - if (prvEl = Folder.branchEl.previousSibling) { - if (prvFolder = prvEl.Folder) { - while (prvFolder.expanded) { - if (prvEl = prvFolder.subtreeEl.lastChild) { - prvFolder = prvEl.Folder; - } - } - } - } - else { - prvFolder = Folder.parent; - } - if (prvFolder) { - prvFolder.activate(); - imce.scrollToEl(prvFolder.branchEl, imce.treeEl); - } - }; - - /** - * Tree shortcut: DOWN. - */ - imce.eTreeDown = function (e) { - var Folder = imce.activeFolder; - var nextEl; - var nextFolder; - if (Folder.expanded && (nextEl = Folder.subtreeEl.firstChild)) { - nextFolder = nextEl.Folder; - } - else { - // noinspection Eslint - do { - if (nextEl = Folder.branchEl.nextSibling) { - nextFolder = nextEl.Folder; - break; - } - } while (Folder = Folder.parent); - } - if (nextFolder) { - nextFolder.activate(); - imce.scrollToEl(nextFolder.branchEl, imce.treeEl); - } - }; - - /** - * Tree shortcut: LEFT/RIGHT. - */ - imce.eTreeLR = function (e) { - var Folder = imce.activeFolder; - if (e.keyCode === 39 ^ Folder.expanded) { - $(Folder.branchToggleEl).click(); - } - }; - - /** - * Mousedown event for tree resizer. - */ - imce.eTreeResizerMousedown = function (event) { - return imce.eTreeResizerDown.call(this, imce.eFix(event)); - }; - - /** - * Touch start event for tree resizer. - */ - imce.eTreeResizerTouchstart = function (event) { - return imce.eCommonTouchstart(event, imce.eTreeResizerDown, this); - }; - - /** - * Common Down event for tree resizer. - */ - imce.eTreeResizerDown = function (e, isTouch) { - this.startX = e.pageX; - this.startW = $(imce.treeEl).width(); - this.maxW = this.startW + $(imce.contentEl).width(); - imce.bindDragDrop(imce.eTreeResizerDrag, null, null, isTouch); - return false; - }; - - /** - * Drag event for tree resizer. - */ - imce.eTreeResizerDrag = function (e) { - var el = imce.treeResizerEl; - $(imce.treeEl).width(Math.min(el.maxW, Math.max(el.startW + e.pageX - el.startX, 0))); - e.preventDefault(); - }; - - /** - * Mousedown event for content area. - */ - imce.eContentMousedown = function (event) { - // Manually focus as the browser default might have been prevented. - this.focus(); - }; - - /** - * Touchstart event for content area. - */ - imce.eContentTouchstart = function (event) { - this.focus(); - }; - - /** - * Keydown event for content area. - */ - imce.eContentKeydown = function (event) { - return imce.eFireShortcut.call(this, event, 'content'); - }; - - /** - * Scroll event for content area. - */ - imce.eContentScroll = function (event) { - imce.updateContentPositions(); - setTimeout(imce.updateContentPositions); - }; - - /** - * Click event for content header. - */ - imce.eContentHeaderClick = function (event) { - var key; - var e = imce.eFix(event); - var Folder = imce.activeFolder; - var sort = Folder.activeSort || {}; - if (key = e.target.getAttribute('data-sort')) { - Folder.sortItems(key, key === sort.key ? !sort.desc : sort.desc); - } - }; - - /** - * Update content header position on content scroll. - */ - imce.updateContentPositions = function () { - var top = imce.contentEl.scrollTop; - imce.contentHeaderEl.style.top = top + 'px'; - imce.contentStatusEl.style.bottom = -top + 'px'; - }; - - /** - * Content shortcut: ENTER. - */ - imce.eContentEnter = function (e) { - var Item = imce.getLastSelected(); - if (Item) { - Item.dblClick(); - } - }; - - /** - * Content shortcut: Ctrl+A. - */ - imce.eContentCtrlA = function (e) { - imce.selectAll(); - }; - - /** - * Content shortcut: LEFT/RIGHT/UP/DOWN - */ - imce.eContentArrow = function (e) { - var Item; - var i = 0; - var Folder = imce.activeFolder; - var key = e.keyCode; - if (Item = imce.getLastSelected()) { - i = Folder.indexOf(Item) + (key % 2 ? key - 38 : imce.countElPerRow(Item.el) * (key - 39)); - } - if (Item = Folder.getItemAt(i)) { - Item.click(e); - Item.scrollIntoView(); - } - }; - - /** - * Mousedown event for body resizer. - */ - imce.eBodyResizerMousedown = function (event) { - return imce.eBodyResizerDown.call(this, imce.eFix(event)); - }; - - /** - * Touch start event for body resizer. - */ - imce.eBodyResizerTouchstart = function (event) { - return imce.eCommonTouchstart(event, imce.eBodyResizerDown, this); - }; - - /** - * Common Down event for body resizer. - */ - imce.eBodyResizerDown = function (e, isTouch) { - this.startY = e.pageY; - this.startH = $(imce.bodyEl).height(); - this.maxH = this.startH + $(imce.previewEl).height(); - imce.bindDragDrop(imce.eBodyResizerDrag, null, null, isTouch); - return false; - }; - - /** - * Drag event for body resizer. - */ - imce.eBodyResizerDrag = function (e) { - var el = imce.bodyResizerEl; - var bodyH = Math.min(Math.max(el.startH + e.pageY - el.startY, 0), el.maxH); - $(imce.bodyEl).height(bodyH); - $(imce.previewEl).height(el.maxH - bodyH); - e.preventDefault(); - }; - - /** - * Beforeunload event for window. - */ - imce.eWinBeforeunload = function (e) { - // Store active sort. - var data = {}; - if (data.activeSort = imce.activeSort) { - imce.trigger('storeLocalData', data); - try { - localStorage.setItem('imce.local', JSON.stringify(data)); - } - catch (err) { - imce.delayError(err); - } - } - }; - - /** - * Resize event for window. - */ - imce.eWinResize = function (e) { - var pdiff; - var diff = imce.getWindowSize().height - imce.fmEl.offsetHeight; - // Distribute the excess space to the body and preview elements. - if (diff) { - var $bodyEl = $(imce.bodyEl); - var $prvEl = $(imce.previewEl); - if ($prvEl[0].offsetHeight) { - pdiff = parseInt(diff / 2); - diff -= pdiff; - $prvEl.height($prvEl.height() + pdiff); - } - $bodyEl.height($bodyEl.height() + diff); - } - }; - - - /** - * Binds an handler by type. - */ - imce.bind = function (type, handler) { - var events = imce.events; - var handlers = events[type]; - if (!handlers) { - handlers = events[type] = {}; - } - handlers['' + handler] = handler; - }; - - /** - * Unbinds an handler by type. - */ - imce.unbind = function (type, handler) { - var events = imce.events; - var handlers = events[type]; - if (handlers) { - if (1 in arguments) { - delete handlers['' + handler]; - } - else { - delete events[type]; - } - } - }; - - /** - * Triggers handlers by type. - */ - imce.trigger = function (type) { - var i; - var handler; - var handlers = imce.events[type]; - var ret = []; - if (handlers) { - for (i in handlers) { - if (handler = handlers[i]) { - if (handler.apply) { - ret.push(handler.apply(imce, Array.prototype.slice.call(arguments, 1))); - } - } - } - } - return ret; - }; - - - /** - * Adds a shortcut handler to an area. - */ - imce.addShortcut = function (shortcut, handler, area) { - var shortcuts; - if (shortcuts = imce.getAreaShortcuts(area)) { - shortcuts[shortcut.toUpperCase()] = handler; - } - }; - - /** - * Returns a shortcut handler. - */ - imce.getShortcut = function (shortcut, area) { - var shortcuts; - if (shortcuts = imce.getAreaShortcuts(area)) { - return shortcuts[shortcut.toUpperCase()]; - } - }; - - /** - * Removes a shortcut handler. - */ - imce.removeShortcut = function (shortcut, area) { - var shortcuts; - if (shortcuts = imce.getAreaShortcuts(area)) { - delete shortcuts[shortcut.toUpperCase()]; - } - }; - - /** - * Executes a shortcut handler. - * Returns true if shortcut exists and is executed successfully. - */ - imce.fireShortcut = function (shortcut, area) { - var handler = imce.getShortcut(shortcut, area); - if (handler) { - // DOM element - if (handler.click) { - handler.click(); - return true; - } - // Callback - if (handler.apply) { - // Shortcuts returning false are considered disabled. - return handler.apply(this, Array.prototype.slice.call(arguments, 2)) !== false; - } - } - }; - - /** - * Returns a shortcut handler. - */ - imce.getAreaShortcuts = function (area) { - if (!area) { - area = 'fm'; - } - return imce.shortcuts[area]; - }; - - - /** - * Builds a shortcut string from an event. - */ - imce.eBuildShortcut = function (e) { - var symbol; - var key = e.keyCode; - var shortcut = ''; - if (key && (symbol = imce.getKeySymbols(key))) { - if (e.ctrlKey) { - shortcut += 'CTRL+'; - } - if (e.altKey) { - shortcut += 'ALT+'; - } - if (e.shiftKey) { - shortcut += 'SHIFT+'; - } - shortcut += symbol; - } - return shortcut; - }; - - /** - * Event helper for imce shortcut firing. - */ - imce.eFireShortcut = function (event, area) { - var e = event || window.event; - var shortcut = imce.eBuildShortcut(e); - // Prevent default if shortcut is executed. - if (shortcut) { - e = $.event.fix(e); - if (imce.fireShortcut.call(this, shortcut, area, e)) { - e.stopPropagation(); - return false; - } - } - }; - - /** - * Returns key symbols allowed in shortcuts. - */ - imce.getKeySymbols = function (key) { - var i; - var symbols = imce.keySymbols; - if (!symbols) { - // Custom keys - symbols = imce.keySymbols = { - 8: 'BACKSPACE', - 9: 'TAB', - 13: 'ENTER', - 27: 'ESC', - 32: 'SPACE', - 37: 'LEFT', - 38: 'UP', - 39: 'RIGHT', - 40: 'DOWN', - 46: 'DEL' - }; - // Add numbers - for (i = 0; i < 10; i++) { - symbols[48 + i] = '' + i; - } - // Add letters - for (i = 65; i < 91; i++) { - symbols[i] = String.fromCharCode(i); - } - // Add function keys - for (i = 1; i < 13; i++) { - symbols[111 + i] = 'F' + i; - } - } - return (0 in arguments) ? symbols[key] : symbols; - }; - - - /** - * Creates an ajax request for a specific operation. - */ - imce.ajax = function (jsop, opt) { - return $.ajax(imce.ajaxPrepare(jsop, opt)); - }; - - /** - * Prepares ajax options. - */ - imce.ajaxPrepare = function (jsop, opt) { - // Prepare data - var path; - var Folder = opt && opt.activeFolder != null ? opt.activeFolder : imce.activeFolder; - var data = {jsop: jsop, token: imce.getConf('token')}; - if (Folder) { - if (path = Folder.getPath()) { - data.active_path = path; - } - } - // Extend defaults - return $.extend(true, imce.ajaxDefaults(), {data: data, activeFolder: Folder}, opt); - }; - - /** - * Returns ajax default options. - */ - imce.ajaxDefaults = function () { - return { - url: imce.getConf('ajax_url'), - type: 'POST', - dataType: 'json', - beforeSend: imce.ajaxBeforeSend, - success: imce.ajaxSuccess, - error: imce.ajaxError, - complete: imce.ajaxComplete - }; - }; - - /** - * Creates an ajax request for a specific operation on the given items. - */ - imce.ajaxItems = function (jsop, items, opt) { - return imce.ajax(jsop, $.extend(true, imce.ajaxItemsOpt(items), opt)); - }; - - /** - * Creates an ajax options object including the items as the selection data. - */ - imce.ajaxItemsOpt = function (items) { - return {data: {selection: imce.getItemPaths(items)}}; - }; - - /** - * Default before send handler. - */ - imce.ajaxBeforeSend = function (xhr, opt) { - var handler; - var Folder; - if (handler = opt.customBeforeSend) { - if (handler.apply(this, arguments) === false) { - opt.activeFolder = null; - return false; - } - } - if (Folder = opt.activeFolder) { - Folder.setBusy(true); - } - }; - - /** - * Default ajax success handler. - */ - imce.ajaxSuccess = function (response, status) { - var handler; - var opt = this; - // Make the response available in complete handlers. - opt.response = response; - imce.ajaxProcessResponse(response); - if (handler = opt.customSuccess) { - handler.apply(opt, arguments); - } - }; - - /** - * Default ajax complete handler. - */ - imce.ajaxComplete = function (xhr, status) { - var Folder; - var handler; - var opt = this; - if (Folder = opt.activeFolder) { - Folder.setBusy(false); - } - if (handler = opt.customComplete) { - handler.apply(opt, arguments); - } - opt.response = opt.activeFolder = null; - }; - - /** - * Default ajax error handler. - */ - imce.ajaxError = function (xhr, status, e) { - imce.setMessage('<pre class="imce-ajax-error">' + Drupal.checkPlain(imce.ajaxErrorMessage(xhr, this.url)) + '</pre>'); - }; - - /** - * Processes the ajax response. - */ - imce.ajaxProcessResponse = function (response) { - if (response) { - imce.ajaxProcessRemoved(response); - imce.ajaxProcessAdded(response); - imce.ajaxProcessMessages(response); - } - }; - - /** - * Processes the added items in the response. - */ - imce.ajaxProcessAdded = function (response) { - var path; - var Folder; - var added; - if (added = response.added) { - for (path in added) { - if (Folder = imce.addFolder(path)) { - Folder.addContent(added[path], true); - imce.contentEl.focus(); - } - } - } - }; - - /** - * Processes the removed items in the response. - */ - imce.ajaxProcessRemoved = function (response) { - var i; - var Item; - var paths = response.removed; - if (paths) { - for (i in paths) { - if (Item = imce.getItem(paths[i])) { - Item.remove(); - } - } - } - }; - - /** - * Processes the messages in the response. - */ - imce.ajaxProcessMessages = function (response) { - var i; - var type; - var msgs = response.messages; - if (msgs) { - for (type in msgs) { - if (imce.owns(msgs, type)) { - for (i in msgs[type]) { - if (msgs[type].hasOwnProperty(i)) { - imce.setMessage(msgs[type][i], type); - } - } - } - } - } - }; - - /** - * Generates an ajax error message. - */ - imce.ajaxErrorMessage = function (xhr, url) { - var msg = Drupal.t('An AJAX HTTP error occurred.'); - msg += '\n' + Drupal.t('Path: !uri', {'!uri': url}); - msg += '\n' + Drupal.t('HTTP Result Code: !status', {'!status': xhr.status || 0}); - msg += '\n' + Drupal.t('StatusText: !statusText', {'!statusText': xhr.statusText || 'N/A'}); - msg += '\n' + Drupal.t('ResponseText: !responseText', {'!responseText': xhr.responseText || 'N/A'}); - return msg; - }; - - /** - * Returns an array of item paths. - */ - imce.getItemPaths = function (items) { - return $.map(items, imce.getItemPath); - }; - - /** - * Returns the path of an item. - */ - imce.getItemPath = function (Item) { - return Item.getPath(); - }; - - - /** - * Set a status message. - */ - imce.setMessage = function (msg, type) { - if (!type) { - type = 'error'; - } - var mq = imce.messageQueue; - var len = mq.length; - var msgId = msg + ':' + type; - // Skip if it's identical to the last message - if (len && mq[len - 1].msgId === msgId) { - return false; - } - // Add the message - mq[len] = imce.createMessageEl(msg, type); - mq[len].msgId = msgId; - // Schedule the processing at a later time to queue new messages. - if (!imce.pmqScheduled) { - imce.pmqScheduled = setTimeout(imce.processMessageQueue, 100); - } - return false; - }; - - /** - * Process message queue. - */ - imce.processMessageQueue = function () { - var mq = imce.messageQueue; - if (mq.length) { - // Display all messages - $(imce.createMessagePopupEl()).html(mq).fadeIn(200); - // Empty array. - mq.length = 0; - // Mousedown close - $(document).bind('mousedown', imce.eMPopDocMousedown); - // Auto close - imce.mPopCloseTimer = setTimeout(imce.mPopClose, 2500); - } - }; - - /** - * Closes currently open message popup. - */ - imce.mPopClose = function () { - // Time up but still hovering. Do not close. A new timer will be set on mouseout. - if (imce.mPopHovering) { - imce.mPopCloseTimerUp = 1; - return imce.mPopCloseTimerUp; - } - // Time up or mousedown - clearTimeout(imce.mPopCloseTimer); - imce.mPopCloseTimerUp = 0; - $(document).unbind('mousedown', imce.eMPopDocMousedown); - $(imce.messagePopupEl).fadeOut(400, imce.processMessageQueueNext); - }; - - /** - * Continue processing the remaining messages. - */ - imce.processMessageQueueNext = function () { - imce.pmqScheduled = 0; - if (imce.messageQueue.length) { - imce.pmqScheduled = setTimeout(imce.processMessageQueue, 250); - } - }; - - /** - * Mouseover event for message popup. - */ - imce.eMPopMouseenter = function (e) { - imce.mPopHovering = 1; - // Clear the shorter timer set on mouseleave - if (imce.mPopCloseTimerUp) { - clearTimeout(imce.mPopCloseTimer); - } - }; - - /** - * Mouseout event for message popup. - */ - imce.eMPopMouseleave = function (e) { - imce.mPopHovering = 0; - // Set a shorter close timer if the long time is up - if (imce.mPopCloseTimerUp) { - imce.mPopCloseTimer = setTimeout(imce.mPopClose, 2000); - } - }; - - /** - * Mousedown event for document in order to close message popup. - */ - imce.eMPopDocMousedown = function (e) { - // Close the popup if the mousedown is outside of it. - if (!imce.mPopHovering) { - imce.mPopClose(); - } - }; - - /** - * Creates a message element. - */ - imce.createMessageEl = function (msg, type) { - var el = imce.createEl('<div class="imce-message imce-ficon"><div class="imce-message-content"></div></div>'); - el.className += ' ' + type; - el.firstChild.innerHTML = msg; - return el; - }; - - /** - * Creates the message popup element. - */ - imce.createMessagePopupEl = function () { - var el = imce.messagePopupEl; - if (!el) { - el = imce.messagePopupEl = imce.createLayer('imce-message-popup', imce.fmEl); - $(el).hover(imce.eMPopMouseenter, imce.eMPopMouseleave); - } - return el; - }; - - - /** - * Checks a permission in a folder conf. - */ - imce.permissionInFolderConf = function (permission, folderConf) { - var permissions = folderConf && folderConf.permissions; - return !!(permissions && ((permission in permissions) ? permissions[permission] : permissions.all)); - }; - - /** - * Checks if a permission exists in any of the predefined folders. - */ - imce.hasPermission = function (permission, conf) { - var i; - var folders = (conf || imce.conf).folders; - if (folders) { - for (i in folders) { - if (imce.permissionInFolderConf(permission, folders[i])) { - return true; - } - } - } - return false; - }; - - /** - * Sorting helpers. - */ - imce.sortText = function (a, b) { - return a.toLowerCase() < b.toLowerCase() ? -1 : 1; - }; - imce.sortNum = function (a, b) { - return (a || 0) - (b || 0); - }; - imce.sortNumericProperty = function (a, b, prop) { - // Do not change sort within folders - var result = (a.isFolder ? -1 : 1); - if (a.isFolder === b.isFolder) { - result = imce.sortNum(a[prop] || 0, b[prop] || 0); - } - return result; - }; - imce.sortBranchName = function (a, b) { - return imce.sortText(a.name, b.name); - }; - - /** - * Property sorters. - */ - imce.sorters.name = function (a, b) { - var result = (a.isFolder ? -1 : 1); - if (a.isFolder === b.isFolder) { - result = imce.sortText(a.name, b.name); - } - return result; - }; - imce.sorters.date = function (a, b) { - return imce.sortNumericProperty(a, b, 'date'); - }; - imce.sorters.size = function (a, b) { - return imce.sortNumericProperty(a, b, 'size'); - }; - imce.sorters.width = function (a, b) { - return imce.sortNumericProperty(a, b, 'width'); - }; - imce.sorters.height = function (a, b) { - return imce.sortNumericProperty(a, b, 'height'); - }; - imce.sorters.ext = function (a, b) { - var result = (a.isFolder ? -1 : 1); - if (a.isFolder === b.isFolder) { - result = (a.isFolder ? 0 : imce.sortText(a.ext || '', b.ext || '')); - } - return result; - }; - - /** - * Splits a path into dirpath and filename. - */ - imce.splitPath = function (path) { - if (typeof path === 'string' && path !== '') { - var parts = path.split('/'); - var filename = parts.pop(); - var dirpath = parts.join('/'); - if (filename !== '') { - return [dirpath === '' ? '.' : dirpath, filename]; - } - } - }; - - /** - * Creates a file path by joining a folder path and a filename. - */ - imce.joinPaths = function (dirpath, filename) { - if (dirpath === '.') { - return filename; - } - if (filename === '.') { - return dirpath; - } - if (dirpath.substr(-1) !== '/') { - dirpath += '/'; - } - return dirpath + filename; - }; - - /** - * Returns query parameters from the current URL. - */ - imce.getQuery = function (name) { - var i; - var part; - var parts; - var str; - var query = imce.query; - if (!query) { - query = imce.query = {}; - if (str = location.search) { - parts = str.substr(1).split('&'); - for (i in parts) { - if (imce.owns(parts, i)) { - part = parts[i].split('='); - query[imce.decode(part[0])] = part[1] ? imce.decode(part[1]) : ''; - } - } - } - } - return name ? query[name] : query; - }; - - /** - * Wrapper around decodeURIComponent. - * Avoids malformed uri exception. - */ - imce.decode = function (str) { - try { - str = decodeURIComponent(str); - } - catch (err) { - imce.delayError(err); - } - return str; - }; - - /** - * Throws an error after a minimum delay. - */ - imce.delayError = function (err) { - setTimeout(function () { - throw err; - }); - }; - - /** - * Formats item date. - */ - imce.formatDate = function (timestamp, dayOnly) { - var D; - var p0; - var ret = ''; - if (timestamp) { - D = new Date(timestamp * 1000); - p0 = imce.prependZero; - ret = D.getFullYear() + '-' + p0(D.getMonth() + 1) + '-' + p0(D.getDate()); - if (!dayOnly) { - ret += ' ' + p0(D.getHours()) + ':' + p0(D.getMinutes()); - } - } - return ret; - }; - - /** - * Formats item size. - */ - imce.formatSize = function (size) { - if (size == null) { - return ''; - } - if (!size || size < 100) { - return Drupal.formatPlural(size, '1 byte', '@count bytes', {'@count': size || 0}); - } - if (size < 1048576) { - return Drupal.t('@size KB', {'@size': imce.round(size / 1024, 1)}); - } - return Drupal.t('@size MB', {'@size': imce.round(size / 1048576, 1)}); - }; - - /** - * Formats content items status. - */ - imce.formatItemsStatus = function (count, size) { - return Drupal.t('!items (!size)', { - '!items': Drupal.formatPlural(count, '1 item', '@count items'), - '!size': imce.formatSize(size) - }); - }; - - /** - * Prepends 0 to numbers smaller than 10. - */ - imce.prependZero = function (num) { - return num < 10 ? '0' + num : num; - }; - - /** - * Rounds a number to the given precision - */ - imce.round = function (num, precision) { - var n = Math.pow(10, precision); - return Math.round(num * n) / n; - }; - - /** - * Returns the extension of a file name. - */ - imce.getExt = function (name) { - var pos = name.lastIndexOf('.'); - return pos === -1 ? '' : name.substr(pos + 1); - }; - - /** - * Checks if an object owns a property. - */ - imce.owns = function (object, property) { - return Object.prototype.hasOwnProperty.call(object, property); - }; - - /** - * Returns the first item that has a property. - */ - imce.getFirstItem = function (items, prop, state) { - var i; - var item; - if (typeof state === "undefined") { - state = true; - } - for (i in items) { - if (imce.owns(items, i)) { - item = items[i]; - if (!prop || (item[prop] ? state : !state)) { - return item; - } - } - } - }; - - /** - * Resolves a string to a handler under the given scope. - */ - imce.resolveHandler = function (str, scope) { - if (!str) { - return; - } - var i; - var obj = scope || window; - var parts = str.split('.'); - var len = parts.length; - for (i = 0; i < len && (obj = obj[parts[i]]); i++) { - // empty - } - return i === len && obj && obj.call && obj.apply ? obj : false; - }; - - /** - * Creates a DOM element from html string. - */ - imce.createEl = function (html) { - var el; - var div = imce._div; - if (!div) { - div = imce._div = document.createElement('div'); - } - div.innerHTML = html; - el = div.firstChild; - div.removeChild(el); - return el; - }; - - /** - * Creates a layer element. - */ - imce.createLayer = function (cname, parent) { - var layer = imce.createEl('<div class="imce-layer"></div>'); - if (cname) { - layer.className += ' ' + cname; - } - if (parent !== false) { - (parent || document.body).appendChild(layer); - } - return layer; - }; - - /** - * Removes element without removing events. - */ - imce.removeEl = function (el) { - var parent = el.parentNode; - if (parent) { - parent.removeChild(el); - } - }; - - /** - * Returns window inner size. - */ - imce.getWindowSize = function () { - return { - width: window.innerWidth || document.documentElement.clientWidth, - height: window.innerHeight || document.documentElement.clientHeight - }; - }; - - /** - * Returns scroll values of the window. - */ - imce.getWindowScroll = function () { - if (typeof window.pageXOffset === "undefined") { - var el = document.documentElement; - return {left: el.scrollLeft, top: el.scrollTop}; - } - return {left: window.pageXOffset, top: window.pageYOffset}; - }; - - /** - * Fixes and converts an event into jQuery event. - */ - imce.eFix = function (event) { - return $.event.fix(event || window.event); - }; - - /** - * Scroll an element into view inside the scrollable wrapper. - */ - imce.scrollToEl = function (el, wrpEl, diffTop, diffBottom) { - if (el.offsetWidth && wrpEl.scrollHeight > wrpEl.clientHeight) { - var elTop = $(el).offset().top; - var elBottom = elTop + el.offsetHeight; - var wrpTop = $(wrpEl).offset().top; - var wrpBottom = wrpTop + wrpEl.offsetHeight; - wrpTop += diffTop || 0; - wrpBottom -= diffBottom || 0; - // Check top positions - if (elTop < wrpTop) { - wrpEl.scrollTop -= wrpTop - elTop + 10; - } - else if (wrpBottom < elBottom) { - // Consider el height might be bigger than the wrapper height. - // Get the minimum among top space and required scroll. - wrpEl.scrollTop += Math.min(elBottom - wrpBottom + 10, elTop - wrpTop - 10); - } - } - }; - - /** - * Returns number of the elements that can fit in a row inside the parent. - */ - imce.countElPerRow = function (el) { - return Math.max(1, parseInt(el.parentNode.clientWidth / $(el).outerWidth(true))); - }; - - /** - * Makes the element stay inside window boundaries. - */ - imce.fixPosition = function (el) { - var pos = $(el).offset(); - var winSize = imce.getWindowSize(); - var winScroll = imce.getWindowScroll(); - var scrollbar = 18; - var extraX = pos.left - winScroll.left + el.offsetWidth - winSize.width + scrollbar; - var extraY = pos.top - winScroll.top + el.offsetHeight - winSize.height + scrollbar; - // Shift to left - if (extraX > 0) { - el.style.left = Math.max(0, pos.left - extraX) + 'px'; - } - // Shift to top - if (extraY > 0) { - el.style.top = Math.max(0, pos.top - extraY) + 'px'; - } - }; - - - /** - * Bind drag drop callbacks to the document - */ - imce.bindDragDrop = function (drag, drop, data, isTouch) { - var edata = {drag: drag, drop: drop, data: data, isTouch: isTouch}; - $(document).bind(isTouch ? 'touchmove' : 'mousemove', edata, imce.eDocDrag).bind(isTouch ? 'touchend' : 'mouseup', edata, imce.eDocDrop); - }; - - /** - * Default drag event for document which is set by imce.bindDragDrop - */ - imce.eDocDrag = function (e) { - var edata = e.data; - // Call custom drag event if set. - if (edata.drag) { - // Fix touch event - if (edata.isTouch) { - e = imce.eTouchFix(e, e.originalEvent.changedTouches[0]); - } - return edata.drag.call(this, e); - } - }; - - /** - * Default drop event for document which is set by imce.bindDragDrop - */ - imce.eDocDrop = function (e) { - var edata = e.data; - $(document).unbind(edata.isTouch ? 'touchmove' : 'mousemove', imce.eDocDrag).unbind(edata.isTouch ? 'touchend' : 'mouseup', imce.eDocDrop); - // Call custom drop event if set. - if (edata.drop) { - // Fix touch event - if (edata.isTouch) { - e = imce.eTouchFix(e, e.originalEvent.changedTouches[0]); - } - return edata.drop.call(this, e); - } - }; - - /** - * Fix touch events - */ - imce.eTouchFix = function (e, touch) { - // Make sure e is a jquery event object that is writable. - e = $.event.fix(e); - if (touch && typeof touch.pageX !== "undefined") { - e.pageX = touch.pageX; - e.pageY = touch.pageY; - e.clientX = touch.clientX; - e.clientY = touch.clientY; - } - return e; - }; - - /** - * Common touchstart event. - */ - imce.eCommonTouchstart = function (event, callback, context) { - var touch; - var touches = event.changedTouches; - // Skip event for multi-touch - if (touches && (touch = touches[0]) && !touches[1]) { - if (callback && callback.call) { - return callback.call(context || this, imce.eTouchFix(event, touch), true); - } - // Prevent default. - return false; - } - }; - -})(jQuery, Drupal); diff --git a/web/modules/imce/js/plugins/bueditor/imce.bueditor.js b/web/modules/imce/js/plugins/bueditor/imce.bueditor.js deleted file mode 100644 index e9d9ede0d97a791c0f4cf38b3a5369bf0209f42f..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/bueditor/imce.bueditor.js +++ /dev/null @@ -1,72 +0,0 @@ -/*global BUE:true*/ -(function ($, Drupal, BUE) { - 'use strict'; - - /** - * @file - * Defines Imce plugin for BUEditor. - */ - - /** - * File browser handler for image/link dialogs. - */ - BUE.fileBrowsers.imce = function (field, type, E) { - var width = Math.min(1000, parseInt(screen.availWidth * 0.8)); - var height = Math.min(800, parseInt(screen.availHeight * 0.8)); - var field_id = BUE.imce.fields.length; - var url = BUE.imce.url('sendto=BUE.imce.sendtoField&type=' + type + '&field_id=' + field_id); - BUE.imce.fields[field_id] = field; - window.open(url, '', 'width=' + width + ',height=' + height + ',resizable=1'); - }; - - /** - * Global container for helper methods. - */ - BUE.imce = BUE.imce || { - - /** - * Active form fields currently using the file browser. - */ - fields: [], - - /** - * Imce sendto handler for inserting a file url into a form field. - */ - sendtoField: function (File, win) { - var field; - var id = win.imce.getQuery('field_id'); - if (field = BUE.imce.fields[id]) { - // Set field value - field.value = File.getUrl(); - // Check other fields - var name; - var input; - var value; - var values = {width: File.width, height: File.height, alt: File.formatName()}; - for (name in values) { - if (value = values[name]) { - if (input = field.form.elements[name]) { - input.value = value; - } - } - } - field.focus(); - BUE.imce.fields[id] = null; - } - win.close(); - }, - - /** - * Returns imce url. - */ - url: function (query) { - var url = Drupal.url('imce'); - if (query) { - url += (url.indexOf('?') === -1 ? '?' : '&') + query; - } - return url; - } - - }; - -})(jQuery, Drupal, BUE); diff --git a/web/modules/imce/js/plugins/ckeditor/icons/imceimage.png b/web/modules/imce/js/plugins/ckeditor/icons/imceimage.png deleted file mode 100644 index b175a777722b03822dbca3c7372970210a57bd47..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/ckeditor/icons/imceimage.png +++ /dev/null @@ -1,4 +0,0 @@ -�PNG - -��� IHDR�����������a����IDATx�c`$��?y -L��wR0���..�@A���@�D���0����������!�����K�Z� �$��$���J�~,��/�1�O,�33+��� doc������H�B������#�����geU�2%��U)��r�$�6�EZZ~�A��1�� ���I����h��A��� C@��A��b��"�( a�:�@�%M� 1fHI��d��p��AzZ1ѴOu����IEND�B`� \ No newline at end of file diff --git a/web/modules/imce/js/plugins/ckeditor/icons/imcelink.png b/web/modules/imce/js/plugins/ckeditor/icons/imcelink.png deleted file mode 100644 index 3ce6bb9bb4b92920504fbb3b402a7bbf773b14eb..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/ckeditor/icons/imcelink.png +++ /dev/null @@ -1,5 +0,0 @@ -�PNG - -��� IHDR�����������a����IDATx^�1 -1DS�9�Xx�A�Bl��SX)zI�,��G�Fl=���*��~�����cavf>D��ĊpDlA�9dS��6����.Idё.�pTjdQ(����\��뽿���Y9� fZOS�DUM���j�́�+-�/��"�4˽b��6�\�*����L������ ��k;�y�'���c -�/��,�T�8�����IEND�B`� \ No newline at end of file diff --git a/web/modules/imce/js/plugins/ckeditor/imce.ckeditor.js b/web/modules/imce/js/plugins/ckeditor/imce.ckeditor.js deleted file mode 100644 index 8071d2e87ca08b7c681956ad282ebc0ced8a8e9a..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/ckeditor/imce.ckeditor.js +++ /dev/null @@ -1,136 +0,0 @@ -(function ($, Drupal, CKEDITOR) { - 'use strict'; - - /** - * @file - * Defines Imce plugin for CKEditor. - */ - - CKEDITOR.plugins.add('imce', { - // Define commands and buttons - init: function (editor) { - // Image - editor.addCommand('imceimage', { - exec: CKEDITOR.imce.imageDialog - }); - editor.ui.addButton('ImceImage', { - label: CKEDITOR.imce.imageLabel(), - command: 'imceimage', - icon: editor.config.ImceImageIcon - }); - // Link - editor.addCommand('imcelink', { - exec: CKEDITOR.imce.linkDialog - }); - editor.ui.addButton('ImceLink', { - label: CKEDITOR.imce.linkLabel(), - command: 'imcelink', - icon: editor.config.ImceLinkIcon - }); - } - }); - - /** - * Global container for helper methods. - */ - CKEDITOR.imce = CKEDITOR.imce || { - - /** - * Returns image button label. - */ - imageLabel: function () { - return Drupal.t('Insert images using Imce File Manager'); - }, - - /** - * Opens Imce for inserting images into CKEditor. - */ - imageDialog: function (editor) { - return CKEDITOR.imce.openDialog(editor, 'image'); - }, - - /** - * Returns link button label. - */ - linkLabel: function () { - return Drupal.t('Insert file links using Imce File Manager'); - }, - - /** - * Opens Imce for inserting links into CKEditor. - */ - linkDialog: function (editor) { - return CKEDITOR.imce.openDialog(editor, 'link'); - }, - - /** - * Opens Imce for inserting images or links into CKEditor. - */ - openDialog: function (editor, type) { - var width = Math.min(1000, parseInt(screen.availWidth * 0.8)); - var height = Math.min(800, parseInt(screen.availHeight * 0.8)); - var url = CKEDITOR.imce.url('sendto=CKEDITOR.imce.sendto&type=' + type + '&ck_id=' + encodeURIComponent(editor.name)); - editor.popup(url, width, height); - }, - - /** - * Imce sendto handler for image/link dialog. - */ - sendto: function (File, win) { - var imce = win.imce; - var editor = CKEDITOR.instances[imce.getQuery('ck_id')]; - if (editor) { - var i; - var text; - var lines = []; - var selection = imce.getSelection(); - var is_img = imce.getQuery('type') === 'image'; - for (i in selection) { - if (!imce.owns(selection, i)) { - continue; - } - File = selection[i]; - // Image - if (is_img && File.isImageSource()) { - lines.push('<img src="' + File.getUrl() + '"' + (File.width ? ' width="' + File.width + '"' : '') + (File.height ? ' height="' + File.height + '"' : '') + ' alt="' + File.formatName() + '" />'); - } - // Link - else { - // Use the selected text/image for the first link - text = !lines.length && CKEDITOR.imce.getSelectedHtml(editor) || File.formatName(); - lines.push('<a href="' + File.getUrl() + '">' + text + '</a>'); - } - } - editor.insertHtml(lines.join('<br />')); - } - win.close(); - }, - - /** - * Returns Imce url. - */ - url: function (query) { - var url = Drupal.url('imce'); - if (query) { - url += (url.indexOf('?') === -1 ? '?' : '&') + query; - } - return url; - }, - - /** - * Returns the selection source from the editor. - */ - getSelectedHtml: function (editor) { - var html = ''; - try { - var range = editor.getSelection().getRanges()[0]; - var div = editor.document.createElement('div'); - div.append(range.cloneContents()); - html = div.getHtml(); - } catch(err) {} - return html; - } - - }; - -})(jQuery, Drupal, CKEDITOR); diff --git a/web/modules/imce/js/plugins/imce/imce.UploadQueue.js b/web/modules/imce/js/plugins/imce/imce.UploadQueue.js deleted file mode 100644 index 17b89e21bf1cfd6f04d5a3fa5b53f44599878356..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/imce/imce.UploadQueue.js +++ /dev/null @@ -1,396 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines imce Upload Queue and Upload Queue Item. - */ - - /** - * Upload queue constructor. - */ - imce.UploadQueue = function (conf) { - this.construct(conf); - }; - - /** - * Upload queue prototype. - */ - var Uq = imce.UploadQueue.prototype; - - /** - * Constructs upload queue. - */ - Uq.construct = function (conf) { - var Uq = this; - Uq.items = {}; - Uq.queue = []; - Uq.conf = $.extend({name: 'files[imce][]'}, conf); - Uq.createEl(); - }; - - /** - * Creates upload queue element. - */ - Uq.createEl = function () { - var Uq = this; - var el = Uq.el; - var inputEl; - var accept; - if (!el) { - el = Uq.el = imce.createEl('<div class="imce-uq"><span class="imce-uq-button imce-ficon imce-ficon-plus"><span class="imce-uq-label">' + Drupal.t('Add file') + '</span><input type="file" class="imce-uq-input" multiple /></span><div class="imce-uq-items"></div></div>'); - inputEl = Uq.inputEl = el.firstChild.lastChild; - inputEl.onchange = imce.eUqInputChange; - if (accept = Uq.conf.accept) { - inputEl.accept = accept; - } - Uq.itemsEl = el.lastChild; - el.Uq = inputEl.Uq = Uq; - } - return el; - }; - - /** - * Starts the queue. - */ - Uq.start = function () { - var Uq = this; - if (!Uq.running && Uq.queue.length) { - if (Uq.next()) { - Uq.running = true; - imce.uploadSetBusy(true); - } - } - return Uq.running; - }; - - /** - * Ends the queue. - */ - Uq.end = function () { - if (this.running) { - this.running = false; - imce.uploadSetBusy(false); - imce.getTbb('upload').closePopup(); - } - }; - - /** - * Process the first available item in the queue. - */ - Uq.next = function () { - var i; - var Item; - var queue = this.queue.slice(0); - for (i = 0; Item = queue[i]; i++) { - // Remove completed items from the queue. - if (Item.completed) { - Item.remove(); - } - else if (Item.start()) { - return Item; - } - } - // No items left. End the queue if running. - this.end(); - }; - - /** - * Select files from a file reference list. - */ - Uq.selectFiles = function (list) { - var i; - var file; - var Item; - var ret; - var path = imce.activeFolder.getPath(); - for (i = 0; file = list[i]; i++) { - if (imce.validateFileUpload(file)) { - Item = new imce.UploadQueueItem(file, path); - if (this.addItem(Item)) { - if (!ret) { - ret = {}; - } - ret[i] = Item.id; - } - else { - Item.remove(); - } - } - } - return ret; - }; - - /** - * Returns a queue item. - */ - Uq.getItem = function (id) { - return this.items[id]; - }; - - /** - * Adds a queue item. - */ - Uq.addItem = function (Item) { - var existing; - var Uq = this; - var id = Item.id; - // Check existing - if (existing = Uq.getItem(id)) { - existing.remove(true); - } - Item.Uq = Uq; - Uq.items[id] = Uq.queue[Uq.queue.length] = Item; - Uq.itemsEl.appendChild(Item.el); - return Item; - }; - - /** - * Removes a queue item. - */ - Uq.removeItem = function (Item, quick) { - var Uq = this; - var queue = Uq.queue; - var i = $.inArray(Item, queue); - if (i !== -1) { - queue.splice(i, 1); - delete Uq.items[Item.id]; - if (quick) { - $(Item.el).remove(); - } - else { - $(Item.el).fadeOut(1000, imce.eUqItemFadeout); - } - return Item; - } - }; - - /** - * Prepare ajax options for an item. - */ - Uq.ajaxPrepare = function (Item) { - var i; - var field; - var data; - var formData; - var Folder; - var Uq = this; - var file = Item.file; - var dest = Item.destination; - // Check file and destination - if (!file || !dest || !(Folder = imce.getFolder(dest))) { - return; - } - // Prepare form data - data = $(Uq.inputEl.form).serializeArray().concat([{name: 'active_path', value: dest}], Item.formData || []); - formData = new FormData(); - for (i = 0; field = data[i]; i++) { - if (field.name) { - formData.append(field.name, field.value); - } - } - formData.append(Uq.conf.name, Item.file); - // Extend default ajax options - return $.extend(imce.ajaxDefaults(), { - data: formData, - processData: false, - contentType: false, - custombeforeSend: imce.xUqItemBeforeSend, - customComplete: imce.xUqItemComplete, - itemId: Item.id, - activeFolder: Folder - }); - }; - - - /** - * Upload queue item constructor. - */ - imce.UploadQueueItem = function (file, destination) { - this.construct(file, destination); - }; - - /** - * Upload queue item prototype. - */ - var UqItem = imce.UploadQueueItem.prototype; - - /** - * Constructs upload queue item. - */ - UqItem.construct = function (file, destination) { - this.file = file; - this.destination = destination; - this.id = imce.joinPaths(destination, file.name); - this.createEl(); - }; - - /** - * Creates upload queue element. - */ - UqItem.createEl = function () { - var cancelEl; - var name; - var Item = this; - var el = Item.el; - var file = Item.file; - if (!el) { - name = Drupal.checkPlain(file.name); - el = Item.el = imce.createEl('<div class="imce-uqi"><div class="imce-uqi-cancel"></div><div class="imce-uqi-info"><span class="imce-uqi-name" title="' + name + '">' + name + '</span><span class="imce-uqi-size">' + imce.formatSize(file.size) + '</span></div><div class="imce-uqi-progress"><div class="imce-uqi-bar"></div></div><div class="imce-uqi-percent">' + Drupal.t('!percent%', {'!percent': 0}) + '</div></div>'); - el.Item = Item; - // Set cancel element events - cancelEl = el.firstChild; - cancelEl.onclick = imce.eUqItemCancelClick; - cancelEl.onmousedown = imce.eUqItemCancelMousedown; - } - return el; - }; - - /** - * Removes the item from queue. - */ - UqItem.remove = function (quick) { - var ret; - var Item = this; - var Uq = Item.Uq; - Item.stop(); - if (Uq) { - Uq.removeItem(Item, quick); - } - Item.Uq = Item.xhr = Item.file = Item.formData = Item.el.Item = null; - return ret; - }; - - /** - * Start processing the item. - */ - UqItem.start = function () { - var opt; - var Item = this; - var Uq = Item.Uq; - if (Uq && !Item.active && !Item.completed) { - // Get ajax options - if (opt = Uq.ajaxPrepare(Item)) { - Item.active = true; - $(Item.el).addClass('active'); - Item.xhr = $.ajax(opt); - Uq.activeItem = Item; - return Uq.activeItem; - } - } - }; - - /** - * Stops processing the item. - */ - UqItem.stop = function () { - var Item = this; - if (Item.active) { - Item.active = false; - $(Item.el).removeClass('active'); - if (Item.xhr) { - Item.xhr.abort(); - } - // Make sure the item is completed - Item.complete(); - } - }; - - /** - * Sets the item as completed. - */ - UqItem.complete = function (status) { - var Item = this; - var Uq = Item.Uq; - if (!Item.completed) { - Item.completed = true; - Item.status = status; - $(Item.el).addClass(status ? 'success' : 'fail'); - if (status) { - $('.imce-uqi-percent', Item.el).html(Drupal.t('!percent%', {'!percent': 100})); - } - // Check if this is the active item of the queue - if (Uq && Uq.activeItem === Item) { - Uq.activeItem = null; - // Continue queue - if (Uq.running) { - Uq.next(); - } - } - // Make sure the item is stopped - Item.stop(); - } - }; - - /** - * Sets item progress. - */ - UqItem.progress = function (percent) { - $(this.el).find('.imce-uqi-percent').text(Drupal.t('!percent%', {'!percent': percent * 1})).end().find('.imce-uqi-bar').css('width', percent * 1 + '%'); - }; - - - /** - * Change event of upload queue input - */ - imce.eUqInputChange = function () { - this.Uq.selectFiles(this.files); - imce.uploadResetInput(this); - if (imce.getConf('upload_auto_start', 1)) { - $('.imce-upload-button', this.form).click(); - } - }; - - /** - * Click event for cancel button of queue item. - */ - imce.eUqItemCancelClick = function (event) { - var Item = $(this).closest('.imce-uqi')[0].Item; - if (Item) { - Item.remove(true); - } - return false; - }; - - /** - * Mousedown event for cancel button of queue item. - */ - imce.eUqItemCancelMousedown = function (event) { - return false; - }; - - /** - * Fadeout callback for queue item. - */ - imce.eUqItemFadeout = function () { - $(this).remove(); - }; - - /** - * Ajax beforeSend handler of upload queue. - */ - imce.xUqItemBeforeSend = function (xhr) { - var id = this.itemId; - xhr.upload.onprogress = function (e) { - var Item = imce.activeUq.getItem(id); - if (Item) { - Item.progress(parseInt(e.loaded * 100 / e.total)); - } - }; - xhr = null; - }; - - /** - * Ajax complete handler of upload queue. - */ - imce.xUqItemComplete = function (xhr, status) { - var opt = this; - var Item = imce.activeUq.getItem(opt.itemId); - status = !!(opt.response && opt.response.added); - if (Item) { - Item.complete(status); - } - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/plugins/imce/imce.delete.js b/web/modules/imce/js/plugins/imce/imce.delete.js deleted file mode 100644 index 6df0102c9cc27f99d2477023a94cd6a5bf062a03..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/imce/imce.delete.js +++ /dev/null @@ -1,46 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines Delete plugin for Imce. - */ - - /** - * Init handler for Delete. - */ - imce.bind('init', imce.deleteInit = function () { - // Check if delete permission exists. - if (imce.hasPermission('delete_files') || imce.hasPermission('delete_subfolders')) { - // Add toolbar button. - imce.addTbb('delete', { - title: Drupal.t('Delete'), - permission: 'delete_files|delete_subfolders', - handler: imce.deleteSelection, - shortcut: 'DEL', - icon: 'delete' - }); - } - }); - - /** - * Deletes the selected items in the active folder. - */ - imce.deleteSelection = function () { - var items = imce.getSelection(); - if (imce.validateDelete(items)) { - if (confirm(Drupal.formatPlural(items.length, 'Delete !filename?', 'Delete the selected @count items?', {'!filename': items[0].name}))) { - imce.ajaxItems('delete', items); - } - } - }; - - /** - * Validates item deletion. - */ - imce.validateDelete = function (items) { - return imce.activeFolder.isReady() && imce.validateCount(items) && imce.validatePermissions(items, 'delete_files', 'delete_subfolders') && imce.validatePredefinedPath(items); - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/plugins/imce/imce.newfolder.js b/web/modules/imce/js/plugins/imce/imce.newfolder.js deleted file mode 100644 index 694f84f922cdb4770406ab70adb501a95d82aa44..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/imce/imce.newfolder.js +++ /dev/null @@ -1,68 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines Newfolder plugin for Imce. - */ - - /** - * Init handler for New folder. - */ - imce.bind('init', imce.newfolderInit = function () { - if (imce.hasPermission('create_subfolders')) { - // Add toolbar button - imce.addTbb('newfolder', { - title: Drupal.t('New folder'), - permission: 'create_subfolders', - content: imce.createNewfolderForm(), - shortcut: 'Ctrl+N', - icon: 'folder-add' - }); - } - }); - - /** - * Creates new folder form. - */ - imce.createNewfolderForm = function () { - var form = imce.newfolderForm; - if (!form) { - form = imce.newfolderForm = imce.createEl('<form class="imce-newfolder-form"><input type="text" name="newfolder" class="imce-newfolder-input" size="16" /><button type="submit" name="op" class="imce-newfolder-button">' + Drupal.t('Create') + '</button></form>'); - form.elements.newfolder.placeholder = Drupal.t('Folder name'); - form.onsubmit = imce.eNewfolderSubmit; - } - return form; - }; - - /** - * Submit event for new folder form. - */ - imce.eNewfolderSubmit = function () { - var name = this.elements.newfolder.value; - if (imce.validateNewfolder(name)) { - imce.ajax('newfolder', {data: {newfolder: name}}); - imce.getTbb('newfolder').closePopup(); - } - return false; - }; - - /** - * Validates new folder creation. - */ - imce.validateNewfolder = function (name, parentFolder) { - if (!parentFolder) { - parentFolder = imce.activeFolder; - } - if (!parentFolder.isReady() || !parentFolder.getPermission('create_subfolders') || !imce.validateFileName(name)) { - return false; - } - if (parentFolder.getItem(name)) { - imce.setMessage(Drupal.t('%filename already exists.', {'%filename': name})); - return false; - } - return true; - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/plugins/imce/imce.resize.js b/web/modules/imce/js/plugins/imce/imce.resize.js deleted file mode 100644 index 088cdb34583b6e3b1acff86720114d2ebb3e6c48..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/imce/imce.resize.js +++ /dev/null @@ -1,107 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines Resize plugin for Imce. - */ - - /** - * Init handler for Resize. - */ - imce.bind('init', imce.resizeInit = function () { - if (imce.hasPermission('resize_images')) { - // Add toolbar button - imce.addTbb('resize', { - title: Drupal.t('Resize'), - permission: 'resize_images', - content: imce.createResizeForm(), - shortcut: 'Ctrl+Alt+R', - icon: 'image' - }); - } - }); - - /** - * Creates resize form. - */ - imce.createResizeForm = function () { - var form = imce.resizeForm; - if (!form) { - form = imce.resizeForm = imce.createEl('<form class="imce-resize-form">' + - '<div class="imce-form-item imce-resize-dimensions">' + - '<input type="number" name="width" class="imce-resize-width-input" min="1" step="1" />' + - '<span class="imce-resize-separator">x</span>' + - '<input type="number" name="height" class="imce-resize-height-input" min="1" step="1" />' + - '</div>' + - '<div class="imce-form-item imce-resize-copy">' + - '<label><input type="checkbox" name="copy" class="imce-resize-copy-input" />' + Drupal.t('Create a copy') + '</label>' + - '</div>' + - '<div class="imce-form-actions">' + - '<button type="submit" name="op" class="imce-resize-button">' + Drupal.t('Resize') + '</button>' + - '</div>' + - '</form>'); - form.onsubmit = imce.eResizeSubmit; - // Set max values - var els = form.elements; - els.width.max = imce.getConf('maxwidth') || 10000; - els.height.max = imce.getConf('maxheight') || 10000; - // Set placeholders - els.width.placeholder = Drupal.t('Width'); - els.height.placeholder = Drupal.t('Height'); - // Set focus event - els.width.onfocus = els.height.onfocus = imce.eResizeInputFocus; - } - return form; - }; - - /** - * Submit event for resize form. - */ - imce.eResizeSubmit = function () { - var data; - var els = this.elements; - var width = parseInt(els.width.value * 1); - var height = parseInt(els.height.value * 1); - var copy = els.copy.checked ? 1 : 0; - var items = imce.getSelection(); - if (imce.validateResize(items, width, height, copy)) { - data = {width: width, height: height, copy: copy}; - imce.ajaxItems('resize', items, {data: data}); - imce.getTbb('resize').closePopup(); - } - return false; - }; - - /** - * Validates item resizing. - */ - imce.validateResize = function (items, width, height, copy) { - return imce.activeFolder.isReady() && imce.validateCount(items) && imce.validateImageTypes(items) && imce.validateDimensions(items, width, height) && imce.validatePermissions(items, 'resize_images'); - }; - - /** - * Focus event for resize width/height input. - */ - imce.eResizeInputFocus = function () { - var el = this; - var val = el.value; - // Apply aspect ratio of the selected image after min delay. - setTimeout(function () { - if (el === document.activeElement && val === el.value) { - var ratio; - var els = el.form.elements; - var isWidth = els.width === el; - var value = els[isWidth ? 'height' : 'width'].value * 1; - var Item = imce.previewingItem; - if (Item && Item.width && value) { - ratio = Item.width / Item.height; - el.value = Math.round(isWidth ? value * ratio : value / ratio); - } - el = null; - } - }); - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/js/plugins/imce/imce.upload.js b/web/modules/imce/js/plugins/imce/imce.upload.js deleted file mode 100644 index e094ef3e8c9bef81ddee6b37031346d614e666de..0000000000000000000000000000000000000000 --- a/web/modules/imce/js/plugins/imce/imce.upload.js +++ /dev/null @@ -1,260 +0,0 @@ -/*global imce:true*/ -(function ($, Drupal, imce) { - 'use strict'; - - /** - * @file - * Defines Upload plugin for Imce. - */ - - /** - * Init handler for Upload. - */ - imce.bind('init', imce.uploadInit = function () { - if (imce.hasPermission('upload_files')) { - // Add toolbar button - imce.addTbb('upload', { - title: Drupal.t('Upload'), - permission: 'upload_files', - content: imce.createUploadForm(), - shortcut: 'Ctrl+Alt+U', - icon: 'upload' - }); - } - }); - - /** - * Creates the upload form. - */ - imce.createUploadForm = function () { - var els; - var el; - var exts; - var form = imce.uploadForm; - var name = 'files[imce][]'; - if (form) { - return form; - } - form = imce.uploadForm = imce.createEl('<form class="imce-upload-form" method="post" enctype="multipart/form-data" accept-charset="UTF-8">' + - '<div class="imce-form-item imce-form-file">' + - '<label>' + Drupal.t('File') + '</label>' + - '<input type="file" name="' + name + '" class="imce-file-input" multiple />' + - '</div>' + - '<div class="imce-form-actions">' + - '<button type="submit" name="op" class="imce-upload-button">' + Drupal.t('Upload') + '</button>' + - '</div>' + - '<input type="hidden" name="jsop" value="upload" />' + - '<input type="hidden" name="token" />' + - '</form>'); - // Set action - form.action = imce.getConf('ajax_url'); - els = form.elements; - // Set token - els.token.value = imce.getConf('token'); - // Set accepted extensions. - el = els[name]; - exts = imce.getConf('extensions', ''); - // Skip for * which is interpreted incorrectly by some browsers. - if (exts !== '*') { - el.accept = '.' + exts.replace(/\s+/g, ',.'); - } - // Ajax upload - if (imce.canAjaxUpload()) { - imce.activeUq = new imce.UploadQueue({name: name, accept: el.accept}); - form.insertBefore(imce.activeUq.el, form.firstChild); - form.className += ' uq'; - if (imce.getConf('upload_auto_start', 1)) { - form.className += ' auto-start'; - } - form.onsubmit = imce.eUploadQueueSubmit; - } - // Iframe upload - else { - form.setAttribute('target', 'imce_upload_iframe'); - form.appendChild(imce.createEl('<input type="hidden" name="active_path" />')); - form.appendChild(imce.createEl('<input type="hidden" name="return_html" value="1" />')); - form.onsubmit = imce.eUploadIframeSubmit; - } - return form; - }; - - /** - * Submit event for upload form with the upload queue. - */ - imce.eUploadQueueSubmit = function (event) { - imce.activeUq.start(); - return false; - }; - - /** - * Submit event for upload form with iframe. - */ - imce.eUploadIframeSubmit = function (event) { - if (!imce.validateUploadForm(this)) { - return false; - } - imce.createUploadIframe(); - this.elements.active_path.value = imce.activeFolder.getPath(); - imce.uploadSetBusy(true); - }; - - /** - * Validates upload form before submit. - */ - imce.validateUploadForm = function (form) { - var i; - var file; - var input = form.elements['files[imce][]']; - var files = input.files; - // HTML5 - if (files) { - if (!files.length) { - return false; - } - for (i = 0; file = files[i]; i++) { - if (!imce.validateFileUpload(file)) { - return false; - } - } - return true; - } - // Old file input - if (input.value) { - file = {name: input.value.split(input.value.indexOf('/') === -1 ? '\\' : '/').pop()}; - return imce.validateFileUpload(file); - } - return false; - }; - - /** - * Validates a file before uploading. - */ - imce.validateFileUpload = function (file) { - // Extension - var exts = imce.getConf('extensions', ''); - if (exts !== '*' && !imce.validateExtension(imce.getExt(file.name), exts)) { - return false; - } - // Size - var maxsize = imce.getConf('maxsize'); - if (maxsize && file.size && file.size > maxsize) { - imce.setMessage(Drupal.t('%filename is %filesize exceeding the maximum file size of %maxsize.', { - '%filename': file.name, - '%filesize': imce.formatSize(file.size), - '%maxsize': imce.formatSize(maxsize) - })); - return false; - } - // Name - if (!imce.validateFileName(file.name)) { - return false; - } - // Trigger validators. - return $.inArray(false, imce.trigger('validateFileUpload', file)) === -1; - }; - - /** - * Creates upload iframe. - */ - imce.createUploadIframe = function () { - var el = imce.uploadIframe; - if (!el) { - el = imce.uploadIframe = imce.createEl('<iframe name="imce_upload_iframe" class="imce-upload-iframe" style="position: absolute; top: -9999px; left: -9999px;" src="javascript: "></iframe>'); - document.body.appendChild(el); - setTimeout(function () { - el.onload = imce.eUploadIframeLoad; - }); - } - return el; - }; - - /** - * Load event of upload iframe. - */ - imce.eUploadIframeLoad = function (event) { - var text; - var response; - var doc; - var $body; - var el = this; - try { - doc = el.contentDocument || el.contentWindow && el.contentWindow.document; - if (doc) { - $body = $(doc.body); - if (text = $body.find('textarea').eq(0).val()) { - response = $.parseJSON(text); - } - $body.empty(); - } - } - catch (err) { - imce.delayError(err); - } - imce.uploadIframeComplete(response, text); - }; - - /** - * Complete handler of iframe upload; - */ - imce.uploadIframeComplete = function (response, text) { - // Got a proper response - if (response) { - imce.ajaxProcessResponse(response); - if (response.added) { - imce.uploadResetInput(imce.uploadForm.elements['files[imce][]']); - imce.getTbb('upload').closePopup(); - } - } - // Failed - else { - imce.setMessage(Drupal.t('Invalid response received from the server.')); - if (text) { - imce.setMessage('<pre>' + Drupal.checkPlain(text) + '</pre>'); - } - } - imce.uploadSetBusy(false); - }; - - /** - * Set upload busy state. - */ - imce.uploadSetBusy = function (state) { - $('.imce-upload-button', imce.uploadForm).toggleClass('busy', state)[0].disabled = state; - }; - - /** - * Check support for ajax upload. - */ - imce.canAjaxUpload = function () { - var support = imce.ajaxUploadSupport; - if (support == null) { - try { - support = !!(window.FormData && (new XMLHttpRequest().upload)); - } - catch (err) { - support = false; - } - imce.ajaxUploadSupport = support; - } - return support; - }; - - /** - * Resets a file input. - */ - imce.uploadResetInput = function (input) { - // Try value reset first - if ($(input).val('').val()) { - // Use form reset - var form = document.createElement('form'); - var parent = input.parentNode; - form.style.display = 'none'; - parent.insertBefore(form, input); - form.appendChild(input); - form.reset(); - parent.insertBefore(input, form); - parent.removeChild(form); - } - }; - -})(jQuery, Drupal, imce); diff --git a/web/modules/imce/src/Annotation/ImcePlugin.php b/web/modules/imce/src/Annotation/ImcePlugin.php deleted file mode 100644 index 76f613e267b2a92d6f9d41019582f7c10b8d8657..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Annotation/ImcePlugin.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php - -namespace Drupal\imce\Annotation; - -use Drupal\Component\Annotation\Plugin; - -/** - * Defines an ImcePlugin annotation object. - * - * Plugin Namespace: Plugin\ImcePlugin - * - * @see \Drupal\imce\ImcePluginBase - * - * @Annotation - */ -class ImcePlugin extends Plugin { - - /** - * Plugin ID. - * - * @var string - */ - public $id; - - /** - * Plugin label. - * - * @ingroup plugin_translatable - * - * @var \Drupal\Core\Annotation\Translation - */ - public $label; - - /** - * Plugin weight. - * - * @var int - */ - public $weight = 0; - - /** - * Operation definitions. - * - * @var array - */ - public $operations = []; - -} diff --git a/web/modules/imce/src/Controller/ImceController.php b/web/modules/imce/src/Controller/ImceController.php deleted file mode 100644 index aecb7ef869cafd0e0515f35cad9a7305640baea0..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Controller/ImceController.php +++ /dev/null @@ -1,45 +0,0 @@ -<?php - -namespace Drupal\imce\Controller; - -use Symfony\Component\HttpFoundation\Request; -use Drupal\Core\Controller\ControllerBase; -use Drupal\Core\Access\AccessResult; -use Drupal\imce\Imce; - -/** - * Controller routines for imce routes. - */ -class ImceController extends ControllerBase { - - /** - * Returns an administrative overview of Imce Profiles. - */ - public function adminOverview(Request $request) { - // Build the settings form first.(may redirect) - $output['settings_form'] = \Drupal::formBuilder()->getForm('Drupal\imce\Form\ImceSettingsForm') + ['#weight' => 10]; - // Buld profile list. - $output['profile_list'] = [ - '#type' => 'container', - '#attributes' => ['class' => ['imce-profile-list']], - 'title' => ['#markup' => '<h2>' . $this->t('Configuration Profiles') . '</h2>'], - 'list' => $this->entityTypeManager()->getListBuilder('imce_profile')->render(), - ]; - return $output; - } - - /** - * Handles requests to /imce/{scheme} path. - */ - public function page($scheme, Request $request) { - return Imce::response($request, $this->currentUser(), $scheme); - } - - /** - * Checks access to /imce/{scheme} path. - */ - public function checkAccess($scheme) { - return AccessResult::allowedIf(Imce::access($this->currentUser(), $scheme)); - } - -} diff --git a/web/modules/imce/src/Entity/ImceProfile.php b/web/modules/imce/src/Entity/ImceProfile.php deleted file mode 100644 index 408f4ffaecebce88c5cfbb4754e1f4f1318bbb44..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Entity/ImceProfile.php +++ /dev/null @@ -1,76 +0,0 @@ -<?php - -namespace Drupal\imce\Entity; - -use Drupal\Core\Config\Entity\ConfigEntityBase; - -/** - * Defines the Imce Profile entity. - * - * @ConfigEntityType( - * id = "imce_profile", - * label = @Translation("Imce Profile"), - * handlers = { - * "list_builder" = "Drupal\imce\ImceProfileListBuilder", - * "form" = { - * "add" = "Drupal\imce\Form\ImceProfileForm", - * "edit" = "Drupal\imce\Form\ImceProfileForm", - * "delete" = "Drupal\imce\Form\ImceProfileDeleteForm", - * "duplicate" = "Drupal\imce\Form\ImceProfileForm" - * } - * }, - * admin_permission = "administer imce", - * config_prefix = "profile", - * entity_keys = { - * "id" = "id", - * "label" = "label" - * }, - * links = { - * "edit-form" = "/admin/config/media/imce/{imce_profile}", - * "delete-form" = "/admin/config/media/imce/{imce_profile}/delete", - * "duplicate-form" = "/admin/config/media/imce/{imce_profile}/duplicate" - * } - * ) - */ -class ImceProfile extends ConfigEntityBase { - - /** - * Profile ID. - * - * @var string - */ - protected $id; - - /** - * Label. - * - * @var string - */ - protected $label; - - /** - * Description. - * - * @var string - */ - protected $description; - - /** - * Configuration options. - * - * @var array - */ - protected $conf = []; - - /** - * Returns configuration options. - */ - public function getConf($key = NULL, $default = NULL) { - $conf = $this->conf; - if (isset($key)) { - return isset($conf[$key]) ? $conf[$key] : $default; - } - return $conf; - } - -} diff --git a/web/modules/imce/src/Form/ImceProfileDeleteForm.php b/web/modules/imce/src/Form/ImceProfileDeleteForm.php deleted file mode 100644 index 7254221026991a691d4e614b039c9441e1bbf5d1..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Form/ImceProfileDeleteForm.php +++ /dev/null @@ -1,44 +0,0 @@ -<?php - -namespace Drupal\imce\Form; - -use Drupal\Core\Entity\EntityConfirmFormBase; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Url; - -/** - * Provides a deletion confirmation form for Imce Profile. - */ -class ImceProfileDeleteForm extends EntityConfirmFormBase { - - /** - * {@inheritdoc} - */ - public function getQuestion() { - return $this->t('Are you sure you want to delete the profile %name?', ['%name' => $this->entity->label()]); - } - - /** - * {@inheritdoc} - */ - public function getCancelUrl() { - return new Url('imce.admin'); - } - - /** - * {@inheritdoc} - */ - public function getConfirmText() { - return $this->t('Delete'); - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $this->entity->delete(); - drupal_set_message($this->t('Profile %name has been deleted.', ['%name' => $this->entity->label()])); - $form_state->setRedirectUrl($this->getCancelUrl()); - } - -} diff --git a/web/modules/imce/src/Form/ImceProfileForm.php b/web/modules/imce/src/Form/ImceProfileForm.php deleted file mode 100644 index 09f8717fdcb288d59aebf5aea6dcade49b049f0a..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Form/ImceProfileForm.php +++ /dev/null @@ -1,260 +0,0 @@ -<?php - -namespace Drupal\imce\Form; - -use Drupal\Core\Entity\EntityForm; -use Drupal\Core\Form\FormStateInterface; -use Drupal\imce\Imce; - -/** - * Base form for Imce Profile entities. - */ -class ImceProfileForm extends EntityForm { - - /** - * Folder permissions. - * - * @var array - */ - public $folderPermissions; - - /** - * {@inheritdoc} - */ - public function form(array $form, FormStateInterface $form_state) { - $imce_profile = $this->getEntity(); - // Check duplication - if ($this->getOperation() === 'duplicate') { - $imce_profile = $imce_profile->createDuplicate(); - $imce_profile->set('label', $this->t('Duplicate of @label', ['@label' => $imce_profile->label()])); - $this->setEntity($imce_profile); - } - // Label - $form['label'] = [ - '#type' => 'textfield', - '#title' => $this->t('Name'), - '#default_value' => $imce_profile->label(), - '#maxlength' => 64, - '#required' => TRUE, - '#weight' => -20, - ]; - // Id - $form['id'] = [ - '#type' => 'machine_name', - '#machine_name' => [ - 'exists' => [get_class($imce_profile), 'load'], - 'source' => ['label'], - ], - '#default_value' => $imce_profile->id(), - '#maxlength' => 32, - '#required' => TRUE, - '#weight' => -20, - ]; - // Description - $form['description'] = [ - '#type' => 'textfield', - '#title' => $this->t('Description'), - '#default_value' => $imce_profile->get('description'), - '#weight' => -10, - ]; - // Conf - $conf = [ - '#tree' => TRUE, - ]; - // Extensions - $conf['extensions'] = [ - '#type' => 'textfield', - '#title' => $this->t('Allowed file extensions'), - '#default_value' => $imce_profile->getConf('extensions'), - '#maxlength' => 255, - '#description' => $this->t('Separate extensions with a space, and do not include the leading dot.') . ' ' . $this->t('Set to * to allow all extensions.'), - '#weight' => -9, - ]; - // File size - $maxsize = file_upload_max_size(); - $conf['maxsize'] = [ - '#type' => 'number', - '#min' => 0, - '#max' => ceil($maxsize/1024/1024), - '#step' => 'any', - '#size' => 8, - '#title' => $this->t('Maximum file size'), - '#default_value' => $imce_profile->getConf('maxsize'), - '#description' => $this->t('Maximum allowed file size per upload.') . ' ' . t('Your PHP settings limit the upload size to %size.', ['%size' => format_size($maxsize)]), - '#field_suffix' => $this->t('MB'), - '#weight' => -8, - ]; - // Quota - $conf['quota'] = [ - '#type' => 'number', - '#min' => 0, - '#step' => 'any', - '#size' => 8, - '#title' => $this->t('Disk quota'), - '#default_value' => $imce_profile->getConf('quota'), - '#description' => $this->t('Maximum disk space that can be allocated by a user.'), - '#field_suffix' => $this->t('MB'), - '#weight' => -7, - ]; - // Image dimensions - $conf['dimensions'] = [ - '#type' => 'container', - '#attributes' => ['class' => ['dimensions-wrapper form-item']], - '#weight' => -6, - ]; - $conf['dimensions']['label'] = [ - '#markup' => '<label>' . $this->t('Maximum image dimensions') . '</label>', - ]; - $conf['dimensions']['maxwidth'] = [ - '#type' => 'number', - '#default_value' => $imce_profile->getConf('maxwidth'), - '#maxlength' => 5, - '#min' => 0, - '#size' => 8, - '#placeholder' => $this->t('Width'), - '#field_suffix' => ' x ', - '#parents' => ['conf', 'maxwidth'], - ]; - $conf['dimensions']['maxheight'] = [ - '#type' => 'number', - '#default_value' => $imce_profile->getConf('maxheight'), - '#maxlength' => 5, - '#min' => 0, - '#size' => 8, - '#placeholder' => $this->t('Height'), - '#field_suffix' => $this->t('pixels'), - '#parents' => ['conf', 'maxheight'], - ]; - $conf['dimensions']['description'] = [ - '#markup' => '<div class="description">' . $this->t('Images exceeding the limit will be scaled down.') . '</div>', - ]; - // Replace method - $conf['replace'] = [ - '#type' => 'radios', - '#title' => $this->t('Upload replace method'), - '#default_value' => $imce_profile->getConf('replace', FILE_EXISTS_RENAME), - '#options' => [ - FILE_EXISTS_RENAME => t('Keep the existing file renaming the new one'), - FILE_EXISTS_REPLACE => t('Replace the existing file with the new one'), - FILE_EXISTS_ERROR => t('Keep the existing file rejecting the new one'), - ], - '#description' => $this->t('Select the replace method for existing files during uploads.'), - '#weight' => -5, - ]; - // Folders - $conf['folders'] = [ - '#type' => 'fieldset', - '#title' => $this->t('Folders'), - 'description' => ['#markup' => '<div class="description">' . $this->t('You can use user tokens in folder paths, e.g. @tokens.', ['@tokens' => '[user:uid], [user:name]' ]) . ' ' . $this->t('Subfolders inherit parent permissions when subfolder browsing is enabled.') . '</div>'], - '#weight' => 10, - ]; - $folders = $imce_profile->getConf('folders', []); - $index = 0; - foreach ($folders as $folder) { - $conf['folders'][] = $this->folderForm($index++, $folder); - } - $conf['folders'][] = $this->folderForm($index++); - $conf['folders'][] = $this->folderForm($index); - $form['conf'] = $conf; - // Add library - $form['#attached']['library'][] = 'imce/drupal.imce.admin'; - // Call plugin form alterers - \Drupal::service('plugin.manager.imce.plugin')->alterProfileForm($form, $form_state, $imce_profile); - return parent::form($form, $form_state); - } - - /** - * Returns folder form elements. - */ - public function folderForm($index, array $folder = []) { - $folder += ['path' => '', 'permissions' => []]; - $form = [ - '#type' => 'container', - '#attributes' => ['class' => ['folder-container']], - ]; - $form['path'] = [ - '#type' => 'textfield', - '#default_value' => $folder['path'], - '#field_prefix' => '<' . $this->t('root') . '>' . '/', - ]; - $form['permissions'] = [ - '#type' => 'fieldset', - '#title' => $this->t('Permissions'), - '#attributes' => ['class' => ['folder-permissions']], - ]; - $perms = $this->permissionInfo(); - $form['permissions']['all'] = [ - '#type' => 'checkbox', - '#title' => $this->t('All permissions'), - '#default_value' => isset($folder['permissions']['all']) ? $folder['permissions']['all'] : 0, - ]; - foreach ($perms as $perm => $title) { - $form['permissions'][$perm] = [ - '#type' => 'checkbox', - '#title' => $title, - '#default_value' => isset($folder['permissions'][$perm]) ? $folder['permissions'][$perm] : 0, - '#states' => [ - 'disabled' => ['input[name="conf[folders][' . $index . '][permissions][all]"]' => ['checked' => TRUE]], - ], - ]; - } - return $form; - } - - /** - * {@inheritdoc} - */ - public function validateForm(array &$form, FormStateInterface $form_state) { - // Check folders - $folders = []; - foreach ($form_state->getValue(['conf', 'folders']) as $i => $folder) { - $path = trim($folder['path']); - // Empty path - if ($path === '') { - continue; - } - // Validate path - if (!Imce::regularPath($path)) { - return $form_state->setError($form['conf']['folders'][$i]['path'], $this->t('Invalid folder path.')); - } - // Remove empty permissions - $folder['permissions'] = array_filter($folder['permissions']); - $folder['path'] = $path; - $folders[$path] = $folder; - } - // No valid folders - if (!$folders) { - return $form_state->setError($form['conf']['folders'][0]['path'], $this->t('You must define a folder.')); - } - $form_state->setValue(['conf', 'folders'], array_values($folders)); - // Call plugin validators - \Drupal::service('plugin.manager.imce.plugin')->validateProfileForm($form, $form_state, $this->getEntity()); - return parent::validateForm($form, $form_state); - } - - /** - * {@inheritdoc} - */ - public function save(array $form, FormStateInterface $form_state) { - $imce_profile = $this->getEntity(); - $status = $imce_profile->save(); - if ($status == SAVED_NEW) { - drupal_set_message($this->t('Profile %name has been added.', ['%name' => $imce_profile->label()])); - } - elseif ($status == SAVED_UPDATED) { - drupal_set_message($this->t('The changes have been saved.')); - } - $form_state->setRedirect('entity.imce_profile.edit_form', ['imce_profile' => $imce_profile->id()]); - } - - /** - * Returns folder permission definitions. - */ - public function permissionInfo() { - if (!isset($this->folderPermissions)) { - $this->folderPermissions = \Drupal::service('plugin.manager.imce.plugin')->permissionInfo(); - } - return $this->folderPermissions; - } - -} diff --git a/web/modules/imce/src/Form/ImceSettingsForm.php b/web/modules/imce/src/Form/ImceSettingsForm.php deleted file mode 100644 index c0c6e3159e9cf6ab39e813e297e37c0b0b709485..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Form/ImceSettingsForm.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php - -namespace Drupal\imce\Form; - -use Drupal\Core\Form\ConfigFormBase; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\StreamWrapper\StreamWrapperInterface; -use Drupal\Component\Utility\Html; -use Drupal\Core\Url; -use Drupal\user\RoleInterface; - -/** - * Imce settings form. - */ -class ImceSettingsForm extends ConfigFormBase { - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'imce_settings_form'; - } - - /** - * {@inheritdoc} - */ - protected function getEditableConfigNames() { - return ['imce.settings']; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state) { - $config = $this->config('imce.settings'); - $form['roles_profiles'] = $this->buildRolesProfilesTable($config->get('roles_profiles') ?: []); - // Common settings container - $form['common'] = [ - '#type' => 'details', - '#title' => $this->t('Common settings'), - ]; - $form['common']['abs_urls'] = [ - '#type' => 'checkbox', - '#title' => t('Enable absolute URLs'), - '#description' => t('Make the file manager return absolute file URLs to other applications.'), - '#default_value' => $config->get('abs_urls'), - ]; - $form['common']['admin_theme'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Use admin theme for IMCE paths'), - '#default_value' => $config->get('admin_theme'), - '#description' => $this->t('If you have user interface issues with the active theme you may consider switching to admin theme.') - ]; - $form['#attached']['library'][] = 'imce/drupal.imce.admin'; - return parent::buildForm($form, $form_state); - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $config = $this->config('imce.settings'); - // Absolute URLs - $config->set('abs_urls', $form_state->getValue('abs_urls')); - // Admin theme - $config->set('admin_theme', $form_state->getValue('admin_theme')); - // Role-profile assignments. - $old_roles_profiles = $config->get('roles_profiles'); - $roles_profiles = $form_state->getValue('roles_profiles'); - // Filter empty values - foreach ($roles_profiles as $rid => &$profiles) { - if (!$profiles = array_filter($profiles)) { - unset($roles_profiles[$rid]); - } - } - $config->set('roles_profiles', $roles_profiles); - $config->save(); - // Warn about anonymous access - if (!empty($roles_profiles[RoleInterface::ANONYMOUS_ID])) { - drupal_set_message(t('You have enabled anonymous access to the file manager. Please make sure this is not a misconfiguration.'), 'warning'); - } - parent::submitForm($form, $form_state); - } - - /** - * Returns roles-profiles table. - */ - public function buildRolesProfilesTable(array $roles_profiles) { - $rp_table = ['#type' => 'table']; - // Prepare roles - $roles = user_roles(); - $wrappers = \Drupal::service('stream_wrapper_manager')->getNames(StreamWrapperInterface::WRITE_VISIBLE); - // Prepare profile options - $options = ['' => '-' . $this->t('None') . '-']; - foreach (\Drupal::entityTypeManager()->getStorage('imce_profile')->loadMultiple() as $pid => $profile) { - $options[$pid] = $profile->label(); - } - // Build header - $imce_url = Url::fromRoute('imce.page')->toString(); - $rp_table['#header'] = [$this->t('Role')]; - $default = file_default_scheme(); - foreach ($wrappers as $scheme => $name) { - $url = $scheme === $default ? $imce_url : $imce_url . '/' . $scheme; - $rp_table['#header'][]['data'] = ['#markup' => '<a href="' . $url . '">' . Html::escape($name) . '</a>']; - } - // Build rows - foreach ($roles as $rid => $role) { - $rp_table[$rid]['role_name'] = [ - '#plain_text' => $role->label(), - ]; - foreach ($wrappers as $scheme => $name) { - $rp_table[$rid][$scheme] = [ - '#type' => 'select', - '#options' => $options, - '#default_value' => isset($roles_profiles[$rid][$scheme]) ? $roles_profiles[$rid][$scheme] : '', - ]; - } - } - // Add description - $rp_table['#prefix'] = '<h3>' . $this->t('Role-profile assignments') . '</h3>'; - $rp_table['#suffix'] = '<div class="description">' . $this->t('Assign configuration profiles to user roles for available file systems. Users with multiple roles get the bottom most profile.') . ' ' . $this->t('The default file system %name is accessible at :url path.', ['%name' => $wrappers[file_default_scheme()], ':url' => $imce_url]) . '</div>'; - return $rp_table; - } - -} diff --git a/web/modules/imce/src/Imce.php b/web/modules/imce/src/Imce.php deleted file mode 100644 index 91af3efc29ca457f25d97f49640532c0812ed0c9..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Imce.php +++ /dev/null @@ -1,330 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Symfony\Component\HttpFoundation\Request; -use Drupal\Core\Session\AccountProxyInterface; - -/** - * Imce container class for helper methods. - */ -class Imce { - - /** - * Checks if a user has an imce profile assigned for a file scheme. - */ - public static function access(AccountProxyInterface $user = NULL, $scheme = NULL) { - return (bool) static::userProfile($user, $scheme); - } - - /** - * Returns a response for an imce request. - */ - public static function response(Request $request, AccountProxyInterface $user = NULL, $scheme = NULL) { - return static::userFM($user, $scheme, $request)->pageResponse(); - } - - /** - * Returns a file manager instance for a user. - */ - public static function userFM(AccountProxyInterface $user = NULL, $scheme = NULL, Request $request = NULL) { - if ($conf = static::userConf($user, $scheme)) { - return new ImceFM($conf, $user, $request); - } - } - - /** - * Returns imce configuration profile for a user. - */ - public static function userProfile(AccountProxyInterface $user = NULL, $scheme = NULL) { - $profiles = &drupal_static(__METHOD__, []); - $user = $user ?: \Drupal::currentUser(); - $scheme = isset($scheme) ? $scheme : file_default_scheme(); - $profile = &$profiles[$user->id()][$scheme]; - if (!isset($profile)) { - // Check stream wrapper - if ($wrapper = \Drupal::service('stream_wrapper_manager')->getViaScheme($scheme)) { - $storage = \Drupal::entityTypeManager()->getStorage('imce_profile'); - if ($user->id() == 1 && $profile = $storage->load('admin')) { - return $profile; - } - $imce_settings = \Drupal::config('imce.settings'); - $roles_profiles = $imce_settings->get('roles_profiles'); - $user_roles = array_flip($user->getRoles()); - // Order roles from more permissive to less permissive. - $roles = array_reverse(user_roles()); - foreach ($roles as $rid => $role) { - if (isset($user_roles[$rid]) && !empty($roles_profiles[$rid][$scheme])) { - if ($profile = $storage->load($roles_profiles[$rid][$scheme])) { - return $profile; - } - } - } - } - $profile = FALSE; - } - return $profile; - } - - /** - * Returns processed profile configuration for a user. - */ - public static function userConf(AccountProxyInterface $user = NULL, $scheme = NULL) { - $user = $user ?: \Drupal::currentUser(); - $scheme = isset($scheme) ? $scheme : file_default_scheme(); - if ($profile = static::userProfile($user, $scheme)) { - $conf = $profile->getConf(); - $conf['pid'] = $profile->id(); - $conf['scheme'] = $scheme; - return static::processUserConf($conf, $user); - } - } - - /** - * Processes raw profile configuration of a user. - */ - public static function processUserConf(array $conf, AccountProxyInterface $user) { - // Convert MB to bytes - $conf['maxsize'] *= 1048576; - $conf['quota'] *= 1048576; - // Set root uri and url - $conf['root_uri'] = $conf['scheme'] . '://'; - // file_create_url requires a filepath for some schemes like private:// - $conf['root_url'] = preg_replace('@/(?:%2E|\.)$@i', '', file_create_url($conf['root_uri'] . '.')); - // Convert to relative - if (!\Drupal::config('imce.settings')->get('abs_urls')) { - $conf['root_url'] = file_url_transform_relative($conf['root_url']); - } - $conf['token'] = $user->isAnonymous() ? 'anon' : \Drupal::csrfToken()->get('imce'); - // Process folders - $conf['folders'] = static::processUserFolders($conf['folders'], $user); - // Call plugin processors - \Drupal::service('plugin.manager.imce.plugin')->processUserConf($conf, $user); - return $conf; - } - - /** - * Processes user folders. - */ - public static function processUserFolders(array $folders, AccountProxyInterface $user) { - $ret = []; - $token_service = \Drupal::token(); - $meta = new \Drupal\Core\Render\BubbleableMetadata(); - $token_data = ['user' => $user]; - foreach ($folders as $folder) { - $path = $token_service->replace($folder['path'], $token_data, [], $meta); - if (static::regularPath($path)) { - $ret[$path] = $folder; - unset($ret[$path]['path']); - } - } - return $ret; - } - - /** - * Checks a permission in a profile conf. - */ - public static function permissionInConf($permission, array $conf) { - if (!empty($conf['folders'])) { - foreach ($conf['folders'] as $folder_conf) { - if (static::permissionInFolderConf($permission, $folder_conf)) { - return TRUE; - } - } - } - return FALSE; - } - - /** - * Checks a permission in a folder conf. - */ - public static function permissionInFolderConf($permission, $folder_conf) { - if ($folder_conf && !empty($folder_conf['permissions'])) { - $permissions = $folder_conf['permissions']; - return isset($permissions[$permission]) ? (bool) $permissions[$permission] : !empty($permissions['all']); - } - return FALSE; - } - - /** - * Returns predefined/inherited configuration of a folder path in a profile conf. - */ - public static function folderInConf($path, array $conf) { - // Predefined - if (isset($conf['folders'][$path])) { - return $conf['folders'][$path]; - } - // Inherited - if (!empty($conf['folders']) && static::regularPath($path) && is_dir(static::joinPaths($conf['root_uri'], $path))) { - foreach ($conf['folders'] as $folder_path => $folder_conf) { - $is_root = $folder_path === '.'; - if ($is_root || strpos($path . '/', $folder_path . '/') === 0) { - if (static::permissionInFolderConf('browse_subfolders', $folder_conf)) { - // Validate the rest of the path. - if ($filter = static::nameFilterInConf($conf)) { - $rest = $is_root ? $path : substr($path, strlen($folder_path) + 1); - foreach (explode('/', $rest) as $name) { - if (preg_match($filter, $name)) { - return; - } - } - } - return $folder_conf + ['inherited' => TRUE]; - } - } - } - } - } - - /** - * Returns name filtering regexp from a profile conf. - */ - public static function nameFilterInConf(array $conf) { - $filters = isset($conf['name_filters']) ? $conf['name_filters'] : []; - if (empty($conf['allow_dot_files'])) { - $filters[] = '^\.|\.$'; - } - return $filters ? '/' . implode('|', $filters) . '/' : ''; - } - - /** - * Splits a path into dirpath and filename. - */ - public static function splitPath($path) { - if (is_string($path) && $path != '') { - $parts = explode('/', $path); - $filename = array_pop($parts); - $dirpath = implode('/', $parts); - if ($filename !== '') { - return [$dirpath === '' ? '.' : $dirpath, $filename]; - } - } - } - - /** - * Creates a fle path by joining a dirpath and a filename. - */ - public static function joinPaths($dirpath, $filename) { - if ($dirpath === '.') { - return $filename; - } - if ($filename === '.') { - return $dirpath; - } - if (substr($dirpath, -1) !== '/') { - $dirpath .= '/'; - } - return $dirpath . $filename; - } - - /** - * Checks the structure of a folder path. - * Forbids current/parent directory notations. - */ - public static function regularPath($path) { - return is_string($path) && ($path === '.' || !preg_match('@\\\\|(^|/)\.*(/|$)@', $path)); - } - - /** - * Returns the contents of a directory. - */ - public static function scanDir($diruri, array $options = []) { - $content = ['files' => [], 'subfolders' => []]; - $browse_files = isset($options['browse_files']) ? $options['browse_files'] : TRUE; - $browse_subfolders = isset($options['browse_subfolders']) ? $options['browse_subfolders'] : TRUE; - if (!$browse_files && !$browse_subfolders) { - return $content; - } - if (!$opendir = opendir($diruri)) { - return $content + ['error' => TRUE]; - } - // Prepare filters - $name_filter = empty($options['name_filter']) ? FALSE : $options['name_filter']; - $callback = empty($options['filter_callback']) ? FALSE : $options['filter_callback']; - $uriprefix = substr($diruri, -1) === '/' ? $diruri : $diruri . '/'; - while (($filename = readdir($opendir)) !== FALSE) { - // Exclude special names. - if ($filename === '.' || $filename === '..') { - continue; - } - // Check filter regexp. - if ($name_filter && preg_match($name_filter, $filename)) { - continue; - } - // Check browse permissions. - $fileuri = $uriprefix . $filename; - $is_dir = is_dir($fileuri); - if ($is_dir ? !$browse_subfolders : !$browse_files) { - continue; - } - // Execute callback. - if ($callback) { - $result = $callback($filename, $is_dir, $fileuri, $options); - if ($result === 'continue') continue; - elseif ($result === 'break') break; - } - $content[$is_dir ? 'subfolders' : 'files'][$filename] = $fileuri; - } - closedir($opendir); - return $content; - } - - /** - * Returns a managed file entity by uri. - * Optionally creates it. - */ - public static function getFileEntity($uri, $create = FALSE, $save = FALSE) { - $file = FALSE; - if ($files = \Drupal::entityTypeManager()->getStorage('file')->loadByProperties(['uri' => $uri])) { - $file = reset($files); - } - elseif ($create) { - $file = static::createFileEntity($uri, $save); - } - return $file; - } - - /** - * Creates a file entity with an uri. - */ - public static function createFileEntity($uri, $save = FALSE) { - $values = [ - 'uri' => $uri, - 'uid' => \Drupal::currentUser()->id(), - 'status' => 1, - 'filesize' => filesize($uri), - 'filename' => \Drupal::service('file_system')->basename($uri), - 'filemime' => \Drupal::service('file.mime_type.guesser')->guess($uri), - ]; - $file = \Drupal::entityTypeManager()->getStorage('file')->create($values); - if ($save) { - $file->save(); - } - return $file; - } - - /** - * Checks if the selected file paths are accessible by a user with Imce. - * Returns the accessible paths. - */ - public static function accessFilePaths(array $paths, AccountProxyInterface $user = NULL, $scheme = NULL) { - $ret = []; - if ($fm = static::userFM($user, $scheme)) { - foreach ($paths as $path) { - if ($fm->checkFile($path)) { - $ret[] = $path; - } - } - } - return $ret; - } - - /** - * Checks if a file uri is accessible by a user with Imce. - */ - public static function accessFileUri($uri, AccountProxyInterface $user = NULL) { - list($scheme, $path) = explode('://', $uri, 2); - return $scheme && $path && Imce::accessFilePaths([$path], $user, $scheme); - } - -} \ No newline at end of file diff --git a/web/modules/imce/src/ImceFM.php b/web/modules/imce/src/ImceFM.php deleted file mode 100644 index fa4955a53d62a8f70bfed11b0cbe9b13df9b1173..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImceFM.php +++ /dev/null @@ -1,655 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Symfony\Component\HttpFoundation\Request; -use Symfony\Component\HttpFoundation\Response; -use Symfony\Component\HttpFoundation\JsonResponse; -use Drupal\Component\Serialization\Json; -use Drupal\Component\Render\MarkupInterface; -use Drupal\Component\Utility\Html; -use Drupal\Core\Session\AccountProxyInterface; - -/** - * Imce File Manager. - */ -class ImceFM { - - /** - * File manager configuration. - * - * @var array - */ - public $conf; - - /** - * Active user. - * - * @var \Drupal\Core\Session\AccountProxyInterface - */ - public $user; - - /** - * Active request. - * - * @var \Symfony\Component\HttpFoundation\Request - */ - public $request; - - /** - * Current validation status for the configuration. - * - * @var boolean - */ - public $validated; - - /** - * Currently selected items. - * - * @var array - */ - public $selection = []; - - /** - * Folder tree. - * - * @var array - */ - public $tree = []; - - /** - * Active folder. - * - * @var \Drupal\imce\ImceFolder - */ - public $activeFolder; - - /** - * Response data. - * - * @var array - */ - public $response = []; - - /** - * Status messages. - * - * @var array - */ - public $messages = []; - - /** - * Constructs the file manager. - * - * @param array $conf - * File manager configuration - * @param \Drupal\Core\Session\AccountProxyInterface $user - * The active user - * @param \Symfony\Component\HttpFoundation\Request $request - * The active request that contains parameters for file manager operations - */ - public function __construct(array $conf, AccountProxyInterface $user = NULL, Request $request = NULL) { - $this->conf = $conf; - $this->user = $user ?: \Drupal::currentUser(); - $this->request = $request; - $this->init(); - } - - /** - * Initializes the file manager by validating the current configuration and request. - */ - protected function init() { - if (!isset($this->validated)) { - // Create the root. - $root = $this->createItem('folder', '.'); - $root->setPath('.'); - // Check initialization error - if ($error = $this->getInitError()) { - $this->setMessage($error); - } - else { - $this->initSelection(); - } - $this->validated = $error === FALSE; - } - } - - /** - * Performs the initialization and returns the first error message. - */ - protected function getInitError() { - $conf = &$this->conf; - // Check configuration options. - $keys = ['folders', 'root_uri']; - foreach ($keys as $key) { - if (empty($conf[$key])) { - return t('Missing configuration %key.', ['%key' => $key]); - } - } - // Check root. - $root_uri = $conf['root_uri']; - if (!is_dir($root_uri)) { - if (!mkdir($root_uri, $this->getConf('chmod_directory', 0775), TRUE)) { - return t('Missing root folder.'); - } - } - // Check and add predefined folders - foreach ($conf['folders'] as $path => $folder_conf) { - $path = (string) $path; - $uri = $this->createUri($path); - if (is_dir($uri) || mkdir($uri, $this->getConf('chmod_directory', 0775), TRUE)) { - $this->addFolder($path, $folder_conf); - } - else { - unset($conf['folders'][$path]); - } - } - if (!$conf['folders']) { - return t('No valid folder definitions found.'); - } - // Check and set active folder if provided. - $path = $this->getPost('active_path'); - if (isset($path) && $path !== '') { - if ($folder = $this->checkFolder($path)) { - $this->activeFolder = $folder; - // Remember active path - if ($this->user->isAuthenticated()) { - if (!isset($conf['folders'][$path]) || count($conf['folders']) > 1 || $folder->getPermission('browse_subfolders')) { - $this->request->getSession()->set('imce_active_path', $path); - } - } - } - else { - return t('Invalid active folder path: %path.', ['%path' => $path]); - } - } - return FALSE; - } - - /** - * Initiates the selection with a list of user provided item paths. - */ - protected function initSelection() { - $paths = $this->getPost('selection'); - if ($paths && is_array($paths)) { - foreach ($paths as $path) { - if ($item = $this->checkItem($path)) { - $item->select(); - } - // Remove non-existing paths from js - else { - $this->removePathFromJs($path); - } - } - } - } - - /** - * Runs an operation on the file manager. - */ - public function run($op = NULL) { - if (!$this->validated) { - return FALSE; - } - // Check operation. - if (!isset($op)) { - $op = $this->getOp(); - } - if (!$op || !is_string($op)) { - return FALSE; - } - // Validate security token. - $token = $this->getPost('token'); - if (!$token || $token !== $this->getConf('token')) { - $this->setMessage(t('Invalid security token.')); - return FALSE; - } - // Let plugins handle the operation. - $return = \Drupal::service('plugin.manager.imce.plugin')->handleOperation($op, $this); - if ($return === FALSE) { - $this->setMessage(t('Invalid operation %op.', ['%op' => $op])); - } - return $return; - } - - /** - * Adds a folder to the tree. - */ - public function addFolder($path, array $conf = NULL) { - // Existing. - if ($folder = $this->getFolder($path)) { - if (isset($conf)) { - $folder->setConf($conf); - } - return $folder; - } - // New. Append to the parent. - if ($parts = Imce::splitPath($path)) { - list($parent_path, $name) = $parts; - if ($parent = $this->addFolder($parent_path)) { - return $parent->addSubfolder($name, $conf); - } - } - } - - /** - * Returns a folder from the tree. - */ - public function getFolder($path) { - return isset($this->tree[$path]) ? $this->tree[$path] : NULL; - } - - /** - * Checks if the user provided folder path is accessible. - * Returns the folder object with the path. - */ - public function checkFolder($path) { - if (is_array(Imce::folderInConf($path, $this->conf))) { - return $this->addFolder($path); - } - } - - /** - * Checks if the user provided file path is accessible. - * Returns the file object with the path. - */ - public function checkFile($path) { - $item = $this->checkItem($path); - if ($item && $item->type === 'file') { - return $item; - } - } - - /** - * Checks the existence of a user provided item path. - * Scans the parent folder and returns the item object if it is accessible. - */ - public function checkItem($path) { - if ($parts = Imce::splitPath($path)) { - if ($folder = $this->checkFolder($parts[0])) { - return $folder->checkItem($parts[1]); - } - } - } - - /** - * Creates and returns an imce file/folder object by name. - */ - public function createItem($type, $name, $conf = NULL) { - $item = $type === 'folder' ? new ImceFolder($name, $conf) : new ImceFile($name); - $item->setFm($this); - return $item; - } - - /** - * Creates an uri from a relative path. - */ - public function createUri($path) { - return Imce::joinPaths($this->getConf('root_uri'), $path); - } - - /** - * Returns the current operation in the request. - */ - public function getOp() { - return $this->getPost('jsop'); - } - - /** - * Returns value of a posted parameter. - */ - public function getPost($key, $default = NULL) { - return $this->request ? $this->request->request->get($key, $default) : $default; - } - - /** - * Returns a configuration option. - */ - public function getConf($key, $default = NULL) { - return isset($this->conf[$key]) ? $this->conf[$key] : $default; - } - - /** - * Sets a configuration option. - */ - public function setConf($key, $value) { - $this->conf[$key] = $value; - } - - /** - * Checks if a permission exists in any of the predefined folders. - */ - public function hasPermission($permission) { - return Imce::permissionInConf($permission, $this->conf); - } - - /** - * Returns the contents of a directory. - */ - public function scanDir($diruri, array $options = []) { - $options += ['name_filter' => $this->getNameFilter()]; - $scanner = $this->getConf('scanner', 'Drupal\imce\Imce::scanDir'); - return call_user_func($scanner, $diruri, $options); - } - - /** - * Returns name filtering regexp. - */ - public function getNameFilter() { - return Imce::nameFilterInConf($this->conf); - } - - /** - * Returns currently selected items. - */ - public function getSelection() { - return $this->selection; - } - - /** - * Returns selected items grouped by parent folder path. - */ - public function groupSelection() { - return $this->groupItems($this->selection); - } - - /** - * Groups the items by parent path and type. - */ - public function groupItems(array $items) { - $group = []; - foreach ($items as $item) { - $path = $item->parent->getPath(); - $type = $item->type == 'folder' ? 'subfolders' : 'files'; - $group[$path][$type][$item->name] = $item; - } - return $group; - } - - /** - * Selects an item. - */ - public function selectItem(ImceItem $item) { - if (!$item->selected && $item->parent) { - $item->selected = TRUE; - $this->selection[] = $item; - } - } - - /** - * Deselects an item. - */ - public function deselectItem(ImceItem $item) { - if ($item->selected) { - $item->selected = FALSE; - $index = array_search($item, $this->selection); - if ($index !== FALSE) { - array_splice($this->selection, $index, 1); - } - } - } - - /** - * Add an item to the response. - */ - public function addItemToJs(ImceItem $item) { - if ($parent = $item->parent) { - if ($path = $parent->getPath()) { - $name = $item->name; - $uri = $item->getUri(); - if ($item->type === 'folder') { - $this->response['added'][$path]['subfolders'][$name] = $this->getFolderProperties($uri); - } - else { - $this->response['added'][$path]['files'][$name] = $this->getFileProperties($uri); - } - } - } - } - - /** - * Sets an item as removed in the response. - */ - public function removeItemFromJs(ImceItem $item) { - $this->removePathFromJs($item->getPath()); - } - - /** - * Sets a path as removed in the response. - */ - public function removePathFromJs($path) { - if (isset($path)) { - $this->response['removed'][] = $path; - } - } - - /** - * Returns js properties of a file. - */ - public function getFileProperties($uri) { - $properties = ['date' => filemtime($uri), 'size' => filesize($uri)]; - if (preg_match('/\.(jpe?g|png|gif)$/i', $uri) && $info = getimagesize($uri)) { - $properties['width'] = $info[0]; - $properties['height'] = $info[1]; - } - return $properties; - } - - /** - * Returns js properties of a folder. - */ - public function getFolderProperties($uri) { - return ['date' => filemtime($uri)]; - } - - /** - * Returns the response data. - */ - public function getResponse() { - $defaults = ['jsop' => $this->getOp()]; - if ($messages = $this->getMessages()) { - $defaults['messages'] = $messages; - } - if ($folder = $this->activeFolder) { - $defaults['active_path'] = $folder->getPath(); - } - return $this->response + $defaults; - } - - /** - * Adds response data. - */ - public function addResponse($key, $value) { - return $this->response[$key] = $value; - } - - /** - * Returns the status messages. - */ - public function getMessages() { - // Get drupal messages - $messages = drupal_get_messages(); - foreach ($messages as &$group) { - foreach ($group as &$message) { - $message = $message instanceof MarkupInterface ? $message . '' : Html::escape($message); - } - } - // Merge with file manager messages. - return array_merge_recursive($messages, $this->messages); - } - - /** - * Sets a status message. - */ - public function setMessage($message, $type = 'error') { - $this->messages[$type][] = $message; - } - - /** - * Checks parent folder permissions of the given items. - */ - public function validatePermissions(array $items, $file_perm = NULL, $subfolder_perm = NULL) { - foreach ($this->groupItems($items) as $path => $content) { - $parent = $this->getFolder($path); - // Parent contains files but does not have the file permission - if (!empty($content['files'])) { - if (!isset($file_perm) || !$parent->getPermission($file_perm)) { - return FALSE; - } - } - // Parent contains subfolders but does not have the subfolder permission - if (!empty($content['subfolders'])) { - if (!isset($subfolder_perm) || !$parent->getPermission($subfolder_perm)) { - return FALSE; - } - } - } - return TRUE; - } - - /** - * Checks the existence of a predefined path. - */ - public function validatePredefinedPath(array $items, $silent = FALSE) { - foreach ($items as $item) { - if ($item->type === 'folder' && ($folder = $item->hasPredefinedPath())) { - if (!$silent) { - $this->setMessage(t('%path is a predefined path and can not be modified.', ['%path' => $folder->getPath()])); - } - return FALSE; - } - } - return TRUE; - } - - /** - * Validates a file name. - */ - public function validateFileName($filename, $silent = FALSE) { - // Basic validation. - if ($filename === '.' || $filename === '..' || !($len = strlen($filename)) || $len > 240) { - return FALSE; - } - // Test name filters. - if ($name_filter = $this->getNameFilter()) { - if (preg_match($name_filter, $filename)) { - if (!$silent) { - $this->setMessage(t('%filename is not allowed.', ['%filename' => $filename])); - } - return FALSE; - } - } - // Test chars forbidden in various operating systems. - if (preg_match('@^\s|\s$|[/\\\\:\*\?"<>\|\x00-\x1F]@', $filename)) { - if (!$silent) { - $this->setMessage(t('%filename contains invalid characters. Use only alphanumeric characters for better portability.', ['%filename' => $filename])); - } - return FALSE; - } - return TRUE; - } - - /** - * Validates min/max image dimensions. - */ - public function validateDimensions(array $items, $width, $height, $silent = FALSE) { - // Check min dimensions - if ($width < 1 || $height < 1) { - return FALSE; - } - // Check max dimensions. - $maxwidth = $this->getConf('maxwidth'); - $maxheight = $this->getConf('maxheight'); - if ($maxwidth && $width > $maxwidth || $maxheight && $height > $maxheight) { - if (!$silent) { - $this->setMessage(t('Image dimensions must be smaller than %dimensions pixels.', ['%dimensions' => $maxwidth . 'x' . $maxwidth])); - } - return FALSE; - } - return TRUE; - } - - /** - * Checks if all the selected items are images. - */ - public function validateImageTypes(array $items, $silent = FALSE) { - $regex = '/\.(' . preg_replace('/ +/', '|', preg_quote(trim($this->getConf('image_extensions', 'jpg jpeg png gif')))) . ')$/i'; - foreach ($items as $item) { - if ($item->type === 'folder' || !preg_match($regex, $item->name)) { - if (!$silent) { - $this->setMessage(t('%name is not an image.', ['%name' => $item->name])); - } - return FALSE; - } - } - return TRUE; - } - - /** - * Builds file manager page. - */ - public function buildPage() { - $page = []; - $page['#attached']['library'][] = 'imce/drupal.imce'; - // Add meta for robots. - $robots = [ - '#tag' => 'meta', - '#attributes' => [ - 'name' => 'robots', - 'content' => 'noindex,nofollow', - ], - ]; - $page['#attached']['html_head'][] = [$robots, 'robots']; - // Disable cache - $page['#cache']['max-age'] = 0; - // Run builders of available plugins - \Drupal::service('plugin.manager.imce.plugin')->buildPage($page, $this); - // Add active path to the conf. - $conf = $this->conf; - if (!isset($conf['active_path'])) { - if ($folder = $this->activeFolder) { - $conf['active_path'] = $folder->getPath(); - } - elseif ($this->user->isAuthenticated() && $this->request && $path = $this->request->getSession()->get('imce_active_path')) { - if ($this->checkFolder($path)) { - $conf['active_path'] = $path; - } - } - } - // Set initial messages. - if ($messages = $this->getMessages()) { - $conf['messages'] = $messages; - } - $page['#attached']['drupalSettings']['imce'] = $conf; - return $page; - } - - /** - * Builds and renders the file manager page. - */ - public function buildRenderPage() { - $page = $this->buildPage(); - return \Drupal::service('bare_html_page_renderer')->renderBarePage($page, t('File manager'), 'imce_page', ['#show_messages' => FALSE])->getContent(); - } - - /** - * Returns a page response based on the current request. - */ - public function pageResponse() { - if ($request = $this->request) { - // Json request - if ($request->request->has('jsop')) { - $this->run(); - $data = $this->getResponse(); - // Return html response if the flag is set. - if ($request->request->get('return_html')) { - return new Response('<html><body><textarea>' . Json::encode($data) . '</textarea></body></html>'); - } - return new JsonResponse($data); - } - // Build and render the main page. - return new Response($this->buildRenderPage()); - } - } - -} \ No newline at end of file diff --git a/web/modules/imce/src/ImceFile.php b/web/modules/imce/src/ImceFile.php deleted file mode 100644 index 6d6493960e62058f3407a9cf6e268b9f7af33663..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImceFile.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -namespace Drupal\imce; - -/** - * Imce File. - */ -class ImceFile extends ImceItem { - - /** - * {@inheritdoc} - */ - public $type = 'file'; -} \ No newline at end of file diff --git a/web/modules/imce/src/ImceFileField.php b/web/modules/imce/src/ImceFileField.php deleted file mode 100644 index fe3286c6154dd812484b10eabfbef127312e486e..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImceFileField.php +++ /dev/null @@ -1,149 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Field\WidgetInterface; -use Drupal\Core\Url; - -/** - * Defines methods for integrating Imce into file field widgets. - */ -class ImceFileField { - - /** - * Returns a list of supported widgets. - */ - public static function supportedWidgets() { - $widgets = &drupal_static(__FUNCTION__); - if (!isset($widgets)) { - $widgets = ['file_generic', 'image_image']; - \Drupal::moduleHandler()->alter('imce_supported_widgets', $widgets); - $widgets = array_unique($widgets); - } - return $widgets; - } - - /** - * Checks if a widget is supported. - */ - public static function isWidgetSupported(WidgetInterface $widget) { - return in_array($widget->getPluginId(), static::supportedWidgets()); - } - - /** - * Returns widget settings form. - */ - public static function widgetSettingsForm(WidgetInterface $widget) { - $form = []; - if (static::isWidgetSupported($widget)) { - $form['enabled'] = [ - '#type' => 'checkbox', - '#title' => t('Allow users to select files from <a href=":url">Imce File Manager</a> for this field.', [':url' => Url::fromRoute('imce.admin')->toString()]), - '#default_value' => $widget->getThirdPartySetting('imce', 'enabled'), - ]; - } - return $form; - } - - /** - * Alters the summary of widget settings form. - */ - public static function alterWidgetSettingsSummary(&$summary, $context) { - $widget = $context['widget']; - if (static::isWidgetSupported($widget)) { - $status = $widget->getThirdPartySetting('imce', 'enabled') ? t('Yes') : t('No'); - $summary[] = t('Imce enabled: @status', ['@status' => $status]); - } - } - - /** - * Processes widget form. - */ - public static function processWidget($element, FormStateInterface $form_state, $form) { - // Path input - $element['imce_paths'] = [ - '#type' => 'hidden', - '#attributes' => [ - 'class' => ['imce-filefield-paths'], - 'data-imce-url' => Url::fromRoute('imce.page', ['scheme' => $element['#scheme']])->toString(), - ], - // Reset value to prevent consistent errors - '#value' => '', - ]; - // Library - $element['#attached']['library'][] = 'imce/drupal.imce.filefield'; - // Set the pre-renderer to conditionally disable the elements. - $element['#pre_render'][] = [get_called_class(), 'preRenderWidget']; - return $element; - } - - /** - * Pre-renders widget form. - */ - public static function preRenderWidget($element) { - // Hide elements if there is already an uploaded file. - if (!empty($element['#value']['fids'])) { - $element['imce_paths']['#access'] = FALSE; - } - return $element; - } - - /** - * Sets widget file id values by validating and processing the submitted data. - * Runs before processor callbacks. - */ - public static function setWidgetValue($element, &$input, FormStateInterface $form_state) { - if (empty($input['imce_paths'])) { - return; - } - $paths = $input['imce_paths']; - $input['imce_paths'] = ''; - // Remove excess data. - $paths = array_unique(array_filter(explode(':', $paths))); - if (isset($element['#cardinality']) && $element['#cardinality'] > -1) { - $paths = array_slice($paths, 0, $element['#cardinality']); - } - // Check if paths are accessible by the current user with Imce. - if (!$paths = Imce::accessFilePaths($paths, \Drupal::currentUser(), $element['#scheme'])) { - return; - } - // Validate paths as file entities. - $file_usage = \Drupal::service('file.usage'); - $errors = []; - foreach ($paths as $path) { - // Get entity by uri - $file = Imce::getFileEntity($element['#scheme'] . '://' . $path, TRUE); - if ($new_errors = file_validate($file, $element['#upload_validators'])) { - $errors = array_merge($errors, $new_errors); - } - else { - // Save the file record. - if ($file->isNew()) { - $file->save(); - } - if ($fid = $file->id()) { - // Make sure the file has usage otherwise it will be denied. - if (!$file_usage->listUsage($file)) { - $file_usage->add($file, 'imce', 'file', $fid); - } - $input['fids'][] = $fid; - } - } - } - // Set error messages. - if ($errors) { - $errors = array_unique($errors); - if (count($errors) > 1) { - $errors = ['#theme' => 'item_list', '#items' => $errors]; - $message = \Drupal::service('renderer')->render($errors); - } - else { - $message = array_pop($errors); - } - // May break the widget flow if set as a form error. - drupal_set_message($message, 'error'); - } - } - -} \ No newline at end of file diff --git a/web/modules/imce/src/ImceFolder.php b/web/modules/imce/src/ImceFolder.php deleted file mode 100644 index dd20e3cc6751581210a3d01b7fd528149ba58641..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImceFolder.php +++ /dev/null @@ -1,262 +0,0 @@ -<?php - -namespace Drupal\imce; - -/** - * Imce Folder. - */ -class ImceFolder extends ImceItem { - - /** - * {@inheritdoc} - */ - public $type = 'folder'; - - /** - * Inheritable folder configuration including permissions. - * - * @var array - */ - public $conf; - - /** - * Scan status. - * - * @var boolean - */ - public $scanned; - - /** - * Items. - * - * @var array - */ - public $items = []; - - /** - * Files. - * - * @var array - */ - public $files = []; - - /** - * Subfolders. - * - * @var array - */ - public $subfolders = []; - - /** - * Constructs the folder. - * - * @param string $name - * Folder name. - * @param array $conf - * Folder configuration. - */ - public function __construct($name, array $conf = NULL) { - parent::__construct($name); - $this->setConf($conf); - } - - /** - * Returns folder configuration. - */ - public function getConf() { - if (isset($this->conf)) { - return $this->conf; - } - // Inherit parent conf - if ($parent = $this->parent) { - if ($conf = $parent->getConf()) { - if (Imce::permissionInFolderConf('browse_subfolders', $conf)) { - return $conf + ['inherited' => TRUE]; - } - } - } - } - - /** - * Sets folder configuration. - */ - public function setConf(array $conf = NULL) { - $this->conf = $conf; - } - - /** - * Returns a permission value. - */ - public function getPermission($name) { - return Imce::permissionInFolderConf($name, $this->getConf()); - } - - /** - * Sets the folder path. - */ - public function setPath($path) { - $oldpath = $this->path; - if ($path !== $oldpath) { - // Remove oldpath references - if (isset($oldpath)) { - unset($this->fm()->tree[$oldpath]); - foreach ($this->subfolders as $name => $item) { - $item->setPath(NULL); - } - } - // Add new path references - $this->path = $path; - if (isset($path)) { - $this->fm()->tree[$path] = $this; - foreach ($this->subfolders as $name => $item) { - $item->setPath(Imce::joinPaths($path, $name)); - } - } - } - } - - /** - * Returns an item by name. - */ - public function getItem($name) { - if (isset($this->items[$name])) { - $item = $this->items[$name]; - if (!is_object($item)) { - $item = isset($this->subfolders[$name]) ? $this->addSubfolder($name) : $this->addFile($name); - } - return $item; - } - } - - /** - * Returns an item by name. - * Scans the folder if needed. - */ - public function checkItem($name) { - if (!$item = $this->getItem($name)) { - if (!$this->scanned) { - $this->scan(); - $item = $this->getItem($name); - } - } - return $item; - } - - /** - * Appends an item to the item list. - */ - public function appendItem(ImceItem $item) { - $parent = $item->parent; - if ($item !== $this && $parent !== $this) { - if ($parent) { - $parent->removeItem($item); - } - $item->parent = $this; - $name = $item->name; - $this->items[$name] = $item; - if ($item->type === 'folder') { - $this->subfolders[$name] = $item; - $path = ($this->parent ? $this->getPath() . '/' : '') . $name; - $item->setPath($path); - } - else { - $this->files[$name] = $item; - } - } - return $item; - } - - /** - * Removes an item from the item list. - */ - public function removeItem(ImceItem $item) { - if ($this === $item->parent) { - $item->deselect(); - $item->parent = NULL; - $name = $item->name; - unset($this->items[$name]); - if ($item->type === 'folder') { - unset($this->subfolders[$name]); - $item->setPath(NULL); - } - else { - unset($this->files[$name]); - } - return $item; - } - } - - /** - * Creates and returns a child file/folder object by name. - */ - public function createItem($type, $name, $conf = NULL) { - $item = $this->fm()->createItem($type, $name, $conf); - $this->appendItem($item); - return $item; - } - - /** - * Adds a file by name. - */ - public function addFile($name) { - return $this->createItem('file', $name); - } - - /** - * Adds a subfolder by name. - */ - public function addSubfolder($name, $conf = NULL) { - return $this->createItem('folder', $name, $conf); - } - - /** - * Checks if the folder is predefined. - */ - public function isPredefined() { - return isset($this->conf); - } - - /** - * Returns the first predefined descendent including itself. - */ - public function hasPredefinedPath() { - if ($this->isPredefined()) { - return $this; - } - foreach ($this->subfolders as $folder) { - if ($folder = $folder->hasPredefinedPath()) { - return $folder; - } - } - return FALSE; - } - - /** - * Scans folder content. - */ - public function scan() { - if (!$this->scanned) { - $this->scanned = TRUE; - $options = [ - 'browse_files' => $this->getPermission('browse_files'), - 'browse_subfolders' => $this->getPermission('browse_subfolders'), - ]; - $content = $this->fm()->scanDir($this->getUri(), $options); - // Add files as raw data. We create the objects when needed. - $this->files = $this->items = $content['files']; - // Create the subfolder objects. - $subfolders = $this->subfolders; - $this->subfolders = []; - foreach ($content['subfolders'] as $name => $uri) { - // Check if previously created - if (isset($subfolders[$name]) && is_object($subfolders[$name])) { - $this->subfolders[$name] = $this->items[$name] = $subfolders[$name]; - } - else { - $this->addSubfolder($name); - } - } - } - } - -} \ No newline at end of file diff --git a/web/modules/imce/src/ImceItem.php b/web/modules/imce/src/ImceItem.php deleted file mode 100644 index 9549fff22c78b0b5fbb2555e4f5618c7ddf613fa..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImceItem.php +++ /dev/null @@ -1,138 +0,0 @@ -<?php - -namespace Drupal\imce; - -/** - * Imce Item. - */ -abstract class ImceItem { - - /** - * Item type - * - * @var string - */ - public $type; - - /** - * Item name. - * - * @var string - */ - public $name; - - /** - * Selected status. - * - * @var boolean - */ - public $selected; - - /** - * Item parent. - * - * @var \Drupal\imce\ImceFolder - */ - public $parent; - - /** - * File manager - * - * @var \Drupal\imce\ImceFM - */ - protected $fm; - - /** - * Item path relative to the root. - * - * @var string - */ - protected $path; - - /** - * Constructs the item. - * - * @param string $name - * Item name. - */ - public function __construct($name) { - $this->name = $name; - } - - /** - * Returns the file manager. - */ - public function fm() { - return $this->fm; - } - - /** - * Sets the file manager. - */ - public function setFm(ImceFM $fm) { - $this->fm = $fm; - } - - /** - * Returns the item path relative to the root. - */ - public function getPath() { - if (isset($this->path)) { - return $this->path; - } - if ($this->parent) { - $path = $this->parent->getPath(); - if (isset($path)) { - return Imce::joinPaths($path, $this->name); - } - } - } - - /** - * Returns the item uri. - */ - public function getUri() { - $path = $this->getPath(); - if (isset($path)) { - return $this->fm()->createUri($path); - } - } - - /** - * Selects the item. - */ - public function select() { - $this->fm()->selectItem($this); - } - - /** - * Deselects the item. - */ - public function deselect() { - $this->fm()->deselectItem($this); - } - - /** - * Removes the item from its parent. - */ - public function remove() { - if ($this->parent) { - $this->parent->removeItem($this); - } - } - - /** - * Removes the item from js. - */ - public function removeFromJs() { - $this->fm()->removeItemFromJs($this); - } - - /** - * Adds the item to js. - */ - public function addToJs() { - $this->fm()->addItemToJs($this); - } - -} \ No newline at end of file diff --git a/web/modules/imce/src/ImcePluginBase.php b/web/modules/imce/src/ImcePluginBase.php deleted file mode 100644 index 46ffdc0a8ec8b21a0ce46ec97107b4ee1f4aca9d..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImcePluginBase.php +++ /dev/null @@ -1,49 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Drupal\Core\Plugin\PluginBase; -use Drupal\Core\Session\AccountProxyInterface; -use Drupal\Core\Form\FormStateInterface; -use Drupal\imce\Entity\ImceProfile; - -/** - * Defines a base Imce plugin implementation. - * - * @see \Drupal\imce\ImcePluginInterface - * @see \Drupal\imce\ImcePluginManager - * @see plugin_api - */ -abstract class ImcePluginBase extends PluginBase implements ImcePluginInterface { - - /** - * {@inheritdoc} - */ - public function permissionInfo() { - return []; - } - - /** - * {@inheritdoc} - */ - public function alterProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) { - } - - /** - * {@inheritdoc} - */ - public function validateProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) { - } - - /** - * {@inheritdoc} - */ - public function processUserConf(array &$conf, AccountProxyInterface $user) { - } - - /** - * {@inheritdoc} - */ - public function buildPage(array &$page, ImceFM $fm) { - } -} diff --git a/web/modules/imce/src/ImcePluginInterface.php b/web/modules/imce/src/ImcePluginInterface.php deleted file mode 100644 index 3910f2659b886d9270b3f7a6c4ea82283c751d31..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImcePluginInterface.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Drupal\Component\Plugin\PluginInspectionInterface; -use Drupal\Core\Session\AccountProxyInterface; -use Drupal\Core\Form\FormStateInterface; -use Drupal\imce\Entity\ImceProfile; - -/** - * Defines an interface for Imce plugins. - * - * @see \Drupal\imce\ImcePluginBase - * @see \Drupal\imce\ImcePluginManager - * @see plugin_api - */ -interface ImcePluginInterface extends PluginInspectionInterface { - - /** - * Returns folder permission definitions. - * - * @return array - * An array of id:label pairs. - */ - public function permissionInfo(); - - /** - * Alters entity form of an Imce Profile. - */ - public function alterProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile); - - /** - * Validates entity form of an Imce Profile. - */ - public function validateProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile); - - /** - * Processes profile configuration for a user. - */ - public function processUserConf(array &$conf, AccountProxyInterface $user); - - /** - * Builds imce page by adding required libraries and elements. - */ - public function buildPage(array &$page, ImceFM $fm); -} diff --git a/web/modules/imce/src/ImcePluginManager.php b/web/modules/imce/src/ImcePluginManager.php deleted file mode 100644 index 31cbc001d44483c544d93b128506634beb71b7f4..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImcePluginManager.php +++ /dev/null @@ -1,169 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Drupal\Core\Plugin\DefaultPluginManager; -use Drupal\Core\Cache\CacheBackendInterface; -use Drupal\Core\Extension\ModuleHandlerInterface; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Session\AccountProxyInterface; -use Drupal\imce\Entity\ImceProfile; - -/** - * Provides a plugin manager for Imce Plugins. - * - * @see \Drupal\imce\ImcePluginInterface - * @see \Drupal\imce\ImcePluginBase - * @see \Drupal\imce\Annotation\ImcePlugin - * @see plugin_api - */ -class ImcePluginManager extends DefaultPluginManager { - - /** - * Available plugin hooks. - * - * @var array - */ - protected $hooks; - - /** - * Available plugin instances. - * - * @var array - */ - public $instances; - - /** - * Constructs an ImcePluginManager object. - * - * @param \Traversable $namespaces - * An object that implements \Traversable which contains the root paths - * keyed by the corresponding namespace to look for plugin implementations. - * @param \Drupal\Core\Cache\CacheBackendInterface $cache_backend - * Cache backend instance to use. - * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler - * The module handler to invoke the alter hook with. - */ - public function __construct(\Traversable $namespaces, CacheBackendInterface $cache_backend, ModuleHandlerInterface $module_handler) { - parent::__construct('Plugin/ImcePlugin', $namespaces, $module_handler, 'Drupal\imce\ImcePluginInterface', 'Drupal\imce\Annotation\ImcePlugin'); - $this->alterInfo('imce_plugin_info'); - $this->setCacheBackend($cache_backend, 'imce_plugins'); - } - - /** - * {@inheritdoc} - */ - protected function findDefinitions() { - $definitions = parent::findDefinitions(); - // Sort definitions by weight - uasort($definitions, ['Drupal\Component\Utility\SortArray', 'sortByWeightElement']); - return $definitions; - } - - /** - * {@inheritdoc} - */ - public function getInstance(array $options) { - if (isset($options['id']) && $id = $options['id']) { - return isset($this->instances[$id]) ? $this->instances[$id] : $this->createInstance($id); - } - } - - /** - * Returns all available plugin instances. - * - * @return array - * A an array plugin intances. - */ - public function getInstances() { - if (!isset($this->instances)) { - $this->instances = []; - foreach ($this->getDefinitions() as $id => $def) { - $this->instances[$id] = $this->createInstance($id); - } - } - return $this->instances; - } - - /** - * Returns available hooks. - * - * @return array - * An array of method names defined by plugin interface. - */ - public function getHooks() { - if (!isset($this->hooks)) { - $this->hooks = get_class_methods('Drupal\imce\ImcePluginInterface'); - } - return $this->hooks; - } - - /** - * Invokes a hook in all available plugins. - * - * @return array - * An array of results keyed by plugin id. - */ - public function invokeAll($hook, &$a = NULL, $b = NULL, $c = NULL) { - $ret = []; - if (in_array($hook, $this->getHooks())) { - foreach ($this->getInstances() as $plugin => $instance) { - $ret[$plugin] = $instance->$hook($a, $b, $c); - } - } - return $ret; - } - - /** - * Returns folder permission definitions. - */ - public function permissionInfo() { - return call_user_func_array('array_merge', array_filter($this->invokeAll('permissionInfo'))); - } - - /** - * Alters an Imce Profile form. - */ - public function alterProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) { - return $this->invokeAll('alterProfileForm', $form, $form_state, $imce_profile); - } - - /** - * Validates an Imce Profile form. - */ - public function validateProfileForm(array &$form, FormStateInterface $form_state, ImceProfile $imce_profile) { - return $this->invokeAll('validateProfileForm', $form, $form_state, $imce_profile); - } - - /** - * Processes profile configuration for a user. - */ - public function processUserConf(array &$conf, AccountProxyInterface $user) { - return $this->invokeAll('processUserConf', $conf, $user); - } - - /** - * Builds imce page. - */ - public function buildPage(array &$page, ImceFM $fm) { - return $this->invokeAll('buildPage', $page, $fm); - } - - /** - * Runs an operation handler for the file manager. - */ - public function handleOperation($op, ImceFM $fm) { - $plugin = $method = FALSE; - foreach ($this->getDefinitions() as $p => $def) { - if (!empty($def['operations'][$op])) { - $plugin = $p; - $method = $def['operations'][$op]; - } - } - if ($method && $instance = $this->getInstance(['id' => $plugin])) { - return $instance->$method($fm); - } - // Indicate that the operation handler is not found. - return FALSE; - } -} \ No newline at end of file diff --git a/web/modules/imce/src/ImceProfileListBuilder.php b/web/modules/imce/src/ImceProfileListBuilder.php deleted file mode 100644 index 9ec6cd5fe25a3611b00d3d243a0c78b4f2015dde..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/ImceProfileListBuilder.php +++ /dev/null @@ -1,46 +0,0 @@ -<?php - -namespace Drupal\imce; - -use Drupal\Core\Config\Entity\ConfigEntityListBuilder; -use Drupal\Core\Entity\EntityInterface; - -/** - * Defines a class to build a list of Imce Profile entities. - * - * @see \Drupal\imce\Entity\ImceProfile - */ -class ImceProfileListBuilder extends ConfigEntityListBuilder { - - /** - * {@inheritdoc} - */ - public function buildHeader() { - $header['label'] = $this->t('Name'); - $header['description'] = $this->t('Description'); - return $header + parent::buildHeader(); - } - - /** - * {@inheritdoc} - */ - public function buildRow(EntityInterface $imce_profile) { - $row['label'] = $imce_profile->label(); - $row['description'] = $imce_profile->get('description'); - return $row + parent::buildRow($imce_profile); - } - - /** - * {@inheritdoc} - */ - public function getDefaultOperations(EntityInterface $imce_profile) { - $operations = parent::getDefaultOperations($imce_profile); - $operations['duplicate'] = [ - 'title' => t('Duplicate'), - 'weight' => 15, - 'url' => $imce_profile->toUrl('duplicate-form'), - ]; - return $operations; - } - -} diff --git a/web/modules/imce/src/Plugin/BUEditorPlugin/Imce.php b/web/modules/imce/src/Plugin/BUEditorPlugin/Imce.php deleted file mode 100644 index 68ebf7db0eb0babafa2078721c075ac50acd95dc..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/BUEditorPlugin/Imce.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\BUEditorPlugin; - -use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Url; -use Drupal\editor\Entity\Editor; -use Drupal\bueditor\BUEditorPluginBase; -use Drupal\bueditor\Entity\BUEditorEditor; -use Drupal\imce\Imce as ImceMain; - -/** - * Defines Imce as a BUEditor plugin. - * - * @BUEditorPlugin( - * id = "imce", - * label = "Imce File Manager" - * ) - */ -class Imce extends BUEditorPluginBase { - - /** - * {@inheritdoc} - */ - public function alterEditorJS(array &$js, BUEditorEditor $bueditor_editor, Editor $editor = NULL) { - // Check selected file browser. - if (isset($js['settings']['fileBrowser']) && $js['settings']['fileBrowser'] === 'imce') { - // Check access - if (ImceMain::access()) { - $js['libraries'][] = 'imce/drupal.imce.bueditor'; - } - else { - unset($js['settings']['fileBrowser']); - } - } - } - - /** - * {@inheritdoc} - */ - public function alterEditorForm(array &$form, FormStateInterface $form_state, BUEditorEditor $bueditor_editor) { - // Add imce option to file browser field. - $fb = &$form['settings']['fileBrowser']; - $fb['#options']['imce'] = $this->t('Imce File Manager'); - // Add configuration link - $form['settings']['imce'] = [ - '#type' => 'container', - '#states' => [ - 'visible' => [':input[name="settings[fileBrowser]"]' => ['value' => 'imce']], - ], - '#attributes' => [ - 'class' => ['description'], - ], - 'content' => [ - '#markup' => $this->t('Configure <a href=":url">Imce File Manager</a>.', [':url' => Url::fromRoute('imce.admin')->toString()]), - ], - ]; - // Set weight - if (isset($fb['#weight'])) { - $form['settings']['imce']['#weight'] = $fb['#weight'] + 0.1; - } - } - -} diff --git a/web/modules/imce/src/Plugin/CKEditorPlugin/Imce.php b/web/modules/imce/src/Plugin/CKEditorPlugin/Imce.php deleted file mode 100644 index ec63c96d5fe09d1ed2ab6b20af5e3b3c9d923859..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/CKEditorPlugin/Imce.php +++ /dev/null @@ -1,75 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\CKEditorPlugin; - -use Drupal\editor\Entity\Editor; -use Drupal\ckeditor\CKEditorPluginBase; - -/** - * Defines Imce plugin for CKEditor. - * - * @CKEditorPlugin( - * id = "imce", - * label = "Imce File Manager" - * ) - */ -class Imce extends CKEditorPluginBase { - - /** - * {@inheritdoc} - */ - function getDependencies(Editor $editor) { - // Need drupalimage for drupallink support. See #2666596 - return ['drupalimage']; - } - - /** - * {@inheritdoc} - */ - public function getFile() { - return drupal_get_path('module', 'imce') . '/js/plugins/ckeditor/imce.ckeditor.js'; - } - - /** - * {@inheritdoc} - */ - public function getButtons() { - return [ - 'ImceImage' => [ - 'label' => t('Insert images using Imce File Manager'), - 'image' => $this->imageIcon(), - ], - 'ImceLink' => [ - 'label' => t('Insert file links using Imce File Manager'), - 'image' => $this->linkIcon(), - ], - ]; - } - - /** - * {@inheritdoc} - */ - public function getConfig(Editor $editor) { - return [ - 'ImceImageIcon' => file_create_url($this->imageIcon()), - 'ImceLinkIcon' => file_create_url($this->linkIcon()), - ]; - } - - /** - * Returns image icon path. - * Uses the icon from drupalimage plugin. - */ - public function imageIcon() { - return drupal_get_path('module', 'imce') . '/js/plugins/ckeditor/icons/imceimage.png'; - } - - /** - * Returns link icon path. - * Uses the icon from drupallink plugin. - */ - public function linkIcon() { - return drupal_get_path('module', 'imce') . '/js/plugins/ckeditor/icons/imcelink.png'; - } - -} diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Core.php b/web/modules/imce/src/Plugin/ImcePlugin/Core.php deleted file mode 100644 index 9bb49a5b1f62dbaeb4eeab6f7ebbf205158d6dfb..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/ImcePlugin/Core.php +++ /dev/null @@ -1,55 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\ImcePlugin; - -use Drupal\imce\ImcePluginBase; -use Drupal\imce\ImceFM; - -/** - * Defines Imce Core plugin. - * - * @ImcePlugin( - * id = "core", - * label = "Core", - * weight = -99, - * operations = { - * "browse" = "opBrowse", - * } - * ) - */ -class Core extends ImcePluginBase { - - /** - * {@inheritdoc} - */ - public function permissionInfo() { - return [ - 'browse_files' => $this->t('Browse files'), - 'browse_subfolders' => $this->t('Browse subfolders'), - ]; - } - - /** - * Operation handler: browse. - */ - public function opBrowse(ImceFM $fm) { - if ($folder = $fm->activeFolder) { - $folder->scan(); - $uri = $folder->getUri(); - $uri_prefix = substr($uri, -1) === '/' ? $uri : $uri . '/'; - $content = ['props' => $fm->getFolderProperties($uri)]; - if ($folder->getPermission('browse_files')) { - foreach ($folder->files as $name => $file) { - $content['files'][$name] = $fm->getFileProperties($uri_prefix . $name); - } - } - if ($folder->getPermission('browse_subfolders')) { - foreach ($folder->subfolders as $name => $subfolder) { - $content['subfolders'][$name] = $fm->getFolderProperties($uri_prefix . $name); - } - } - $fm->addResponse('content', $content); - } - } - -} diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Delete.php b/web/modules/imce/src/Plugin/ImcePlugin/Delete.php deleted file mode 100644 index 85ab3ec4d819aac381e5e7dbe5cf0cc212f29376..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/ImcePlugin/Delete.php +++ /dev/null @@ -1,132 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\ImcePlugin; - -use Drupal\imce\Imce; -use Drupal\imce\ImcePluginBase; -use Drupal\imce\ImceFM; - -/** - * Defines Imce Delete plugin. - * - * @ImcePlugin( - * id = "delete", - * label = "Delete", - * weight = -5, - * operations = { - * "delete" = "opDelete" - * } - * ) - */ -class Delete extends ImcePluginBase { - - /** - * {@inheritdoc} - */ - public function permissionInfo() { - return [ - 'delete_files' => $this->t('Delete files'), - 'delete_subfolders' => $this->t('Delete subfolders'), - ]; - } - - /** - * {@inheritdoc} - */ - public function buildPage(array &$page, ImceFM $fm) { - // Check if delete permission exists - if ($fm->hasPermission('delete_files') || $fm->hasPermission('delete_subfolders')) { - $page['#attached']['library'][] = 'imce/drupal.imce.delete'; - } - } - - /** - * Operation handler: delete. - */ - public function opDelete(ImceFM $fm) { - $items = $fm->getSelection(); - if ($this->validateDelete($fm, $items)) { - $this->deleteItems($fm, $items); - } - } - - /** - * Validates the deletion of the given items. - */ - public function validateDelete(ImceFM $fm, array $items) { - return $items && $fm->validatePermissions($items, 'delete_files', 'delete_subfolders') && $fm->validatePredefinedPath($items); - } - - /** - * Deletes a list of imce items and returns succeeded ones. - */ - public function deleteItems(ImceFM $fm, array $items) { - $success = []; - $ignore_usage = $fm->getConf('ignore_usage', FALSE); - foreach ($items as $item) { - if ($uri = $item->getUri()) { - $result = $item->type === 'folder' ? $this->deleteFolderUri($uri, $ignore_usage, !$item->getPermission('delete_files')) : $this->deleteFileUri($uri, $ignore_usage); - if ($result) { - $item->removeFromJs(); - $item->remove(); - $success[] = $item; - } - } - } - return $success; - } - - /** - * Deletes a file by uri. - */ - public static function deleteFileUri($uri, $ignore_usage = FALSE) { - // Managed file - if ($file = Imce::getFileEntity($uri)) { - if (!$ignore_usage && $usage = \Drupal::service('file.usage')->listUsage($file)) { - unset($usage['imce']); - if ($usage) { - drupal_set_message(t('%filename is in use by another application.', ['%filename' => $file->getFilename()]), 'error'); - return FALSE; - } - } - $file->delete(); - return TRUE; - } - // Unmanaged file - return file_unmanaged_delete($uri); - } - - /** - * Deletes a folder by uri. - */ - public static function deleteFolderUri($uri, $ignore_usage = FALSE, $check_files = FALSE) { - // Get folder content without any filtering. - $content = Imce::scanDir($uri); - if (!empty($content['error'])) { - return FALSE; - } - if ($check_files && !empty($content['files'])) { - drupal_set_message(t('%folder contains files and can not be deleted.', ['%folder' => \Drupal::service('file_system')->basename($uri)]), 'error'); - return FALSE; - } - // Delete subfolders first. - foreach ($content['subfolders'] as $path) { - if (!static::deleteFolderUri($path, $ignore_usage, $check_files)) { - return FALSE; - } - } - // Delete files. - foreach ($content['files'] as $path) { - if (!static::deleteFileUri($path, $ignore_usage)) { - return FALSE; - } - } - // Recently emptied folders need some refreshing before the removal on windows. - if (strncasecmp(PHP_OS, 'WIN', 3) == 0) { - @closedir(@opendir($uri)); - } - // Remove the folder - return rmdir($uri); - } - -} diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Newfolder.php b/web/modules/imce/src/Plugin/ImcePlugin/Newfolder.php deleted file mode 100644 index 1888a166fb0d28a6c54563bf104ccebaf7034e8b..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/ImcePlugin/Newfolder.php +++ /dev/null @@ -1,64 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\ImcePlugin; - -use Drupal\imce\Imce; -use Drupal\imce\ImcePluginBase; -use Drupal\imce\ImceFM; - -/** - * Defines Imce New Folder plugin. - * - * @ImcePlugin( - * id = "newfolder", - * label = "New Folder", - * weight = -15, - * operations = { - * "newfolder" = "opNewfolder" - * } - * ) - */ -class Newfolder extends ImcePluginBase { - - /** - * {@inheritdoc} - */ - public function permissionInfo() { - return [ - 'create_subfolders' => $this->t('Create subfolders'), - ]; - } - - /** - * {@inheritdoc} - */ - public function buildPage(array &$page, ImceFM $fm) { - if ($fm->hasPermission('create_subfolders')) { - $page['#attached']['library'][] = 'imce/drupal.imce.newfolder'; - } - } - - /** - * Operation handler: newfolder. - */ - public function opNewfolder(ImceFM $fm) { - $folder = $fm->activeFolder; - if (!$folder || !$folder->getPermission('create_subfolders')) { - return; - } - // Create folder - $name = $fm->getPost('newfolder'); - if (is_string($name) && $fm->validateFileName($name)) { - // Check existence - $uri = Imce::joinPaths($folder->getUri(), $name); - if (file_exists($uri)) { - $fm->setMessage(t('%filename already exists.', ['%filename' => $name])); - } - // Create and add to js - elseif (mkdir($uri, $fm->getConf('chmod_directory', 0775))) { - $folder->addSubfolder($name)->addToJs(); - } - } - } - -} diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Resize.php b/web/modules/imce/src/Plugin/ImcePlugin/Resize.php deleted file mode 100644 index a7c42ab4b3bccd03330323b4a70fb273eb813c21..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/ImcePlugin/Resize.php +++ /dev/null @@ -1,125 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\ImcePlugin; - -use Drupal\imce\Imce; -use Drupal\imce\ImcePluginBase; -use Drupal\imce\ImceFM; - -/** - * Defines Imce Resize plugin. - * - * @ImcePlugin( - * id = "resize", - * label = "Resize", - * operations = { - * "resize" = "opResize" - * } - * ) - */ -class Resize extends ImcePluginBase { - - /** - * {@inheritdoc} - */ - public function permissionInfo() { - return [ - 'resize_images' => $this->t('Resize images'), - ]; - } - - /** - * {@inheritdoc} - */ - public function buildPage(array &$page, ImceFM $fm) { - // Check if resize permission exists - if ($fm->hasPermission('resize_images')) { - $page['#attached']['library'][] = 'imce/drupal.imce.resize'; - } - } - - /** - * Operation handler: resize. - */ - public function opResize(ImceFM $fm) { - $width = min(10000, (int) $fm->getPost('width')); - $height = min(10000, (int) $fm->getPost('height')); - $copy = (bool) $fm->getPost('copy'); - $items = $fm->getSelection(); - if ($this->validateResize($fm, $items, $width, $height, $copy)) { - $this->resizeItems($fm, $items, $width, $height, $copy); - } - } - - /** - * Validates item resizing. - */ - public function validateResize(ImceFM $fm, array $items, $width, $height, $copy) { - return $items && $fm->validateDimensions($items, $width, $height) && $fm->validateImageTypes($items) && $fm->validatePermissions($items, 'resize_images'); - } - - /** - * Resizes a list of imce items and returns succeeded ones. - */ - public function resizeItems(ImceFM $fm, array $items, $width, $height, $copy = FALSE) { - $factory = \Drupal::service('image.factory'); - $fs = \Drupal::service('file_system'); - $success = []; - foreach ($items as $item) { - $uri = $item->getUri(); - $image = $factory->get($uri); - // Check vallidity - if (!$image->isValid()) { - continue; - } - // Check if resizing is needed. - $resize = $image->getWidth() != $width || $image->getHeight() != $height; - if (!$resize && !$copy) { - continue; - } - if ($resize && !$image->resize($width, $height)) { - continue; - } - // Save - $destination = $copy ? file_create_filename($fs->basename($uri), $fs->dirname($uri)) : $uri; - if (!$image->save($destination)) { - continue; - } - // Create a new file record. - if ($copy) { - $filename = $fs->basename($destination); - $values = [ - 'uid' => $fm->user->id(), - 'status' => 1, - 'filename' => $filename, - 'uri' => $destination, - 'filesize' => $image->getFileSize(), - 'filemime' => $image->getMimeType(), - ]; - $file = \Drupal::entityTypeManager()->getStorage('file')->create($values); - // Check quota - if ($errors = file_validate_size($file, 0, $fm->getConf('quota'))) { - file_unmanaged_delete($destination); - $fm->setMessage($errors[0]); - } - else { - $file->save(); - // Add imce item - $item->parent->addFile($filename)->addToJs(); - } - } - // Update existing. - else { - if ($file = Imce::getFileEntity($uri)) { - $file->setSize($image->getFileSize()); - $file->save(); - } - // Add to js - $item->addToJs(); - } - $success[] = $item; - } - return $success; - } - -} diff --git a/web/modules/imce/src/Plugin/ImcePlugin/Upload.php b/web/modules/imce/src/Plugin/ImcePlugin/Upload.php deleted file mode 100644 index e10fc399b11be122ef6af2a55628303d27fc63bc..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Plugin/ImcePlugin/Upload.php +++ /dev/null @@ -1,91 +0,0 @@ -<?php - -namespace Drupal\imce\Plugin\ImcePlugin; - -use Drupal\file\Entity\FileInterface; -use Drupal\imce\ImcePluginBase; -use Drupal\imce\ImceFM; - -/** - * Defines Imce Upload plugin. - * - * @ImcePlugin( - * id = "upload", - * label = "Upload", - * weight = -10, - * operations = { - * "upload" = "opUpload" - * } - * ) - */ -class Upload extends ImcePluginBase { - - /** - * {@inheritdoc} - */ - public function permissionInfo() { - return [ - 'upload_files' => $this->t('Upload files'), - ]; - } - - /** - * {@inheritdoc} - */ - public function buildPage(array &$page, ImceFM $fm) { - if ($fm->hasPermission('upload_files')) { - $page['#attached']['library'][] = 'imce/drupal.imce.upload'; - } - } - - /** - * Operation handler: upload. - */ - public function opUpload(ImceFM $fm) { - $folder = $fm->activeFolder; - if (!$folder || !$folder->getPermission('upload_files')) { - return; - } - // Prepare save options - $destination = $folder->getUri(); - $replace = $fm->getConf('replace', FILE_EXISTS_RENAME); - $validators = []; - // Extension validator - $exts = $fm->getConf('extensions', ''); - $validators['file_validate_extensions'] = [$exts === '*' ? NULL : $exts]; - // File size and user quota validator - $validators['file_validate_size'] = [$fm->getConf('maxsize'), $fm->getConf('quota')]; - // Image resolution validator. - $width = $fm->getConf('maxwidth'); - $height = $fm->getConf('maxheight'); - if ($width || $height) { - $validators['file_validate_image_resolution'] = [($width ? $width : 10000) . 'x' . ($height ? $height : 10000)]; - } - // Name validator - $validators[get_class($this) . '::validateFileName'] = [$fm]; - // Save files - if ($files = file_save_upload('imce', $validators, $destination, NULL, $replace)) { - $fs = \Drupal::service('file_system'); - foreach (array_filter($files) as $file) { - // Set status and save - $file->setPermanent(); - $file->save(); - // Add to the folder and to js response. - $name = $fs->basename($file->getFileUri()); - $folder->addFile($name)->addToJs(); - } - } - } - - /** - * Validates the name of a file object. - */ - public static function validateFileName(FileInterface $file, ImceFM $fm) { - $errors = []; - if (!$fm->validateFileName($file->getFileName(), TRUE)) { - $errors[] = t('%filename contains invalid characters.', ['%filename' => $filename]); - } - return $errors; - } - -} diff --git a/web/modules/imce/src/Routing/ImceRouteSubscriber.php b/web/modules/imce/src/Routing/ImceRouteSubscriber.php deleted file mode 100644 index 2e59944d4ac00c2adf35c534f7459e40ed3a93a8..0000000000000000000000000000000000000000 --- a/web/modules/imce/src/Routing/ImceRouteSubscriber.php +++ /dev/null @@ -1,26 +0,0 @@ -<?php - -namespace Drupal\imce\Routing; - -use Symfony\Component\Routing\RouteCollection; -use Drupal\Core\Routing\RouteSubscriberBase; - -/** - * Listens to the dynamic route events. - */ -class ImceRouteSubscriber extends RouteSubscriberBase { - - /** - * {@inheritdoc} - */ - protected function alterRoutes(RouteCollection $collection) { - // Conditionally declare imce.page an admin route. - if ($route = $collection->get('imce.page')) { - $config = \Drupal::config('imce.settings'); - if ($config->get('admin_theme')) { - $route->setOption('_admin_route', TRUE); - } - } - } - -}