From 779ee95834a2f4ace43f96da2d225957aef5f7d5 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Thu, 30 Jun 2016 11:10:48 +0200 Subject: [PATCH 001/219] Prevent infinite loop in search auto-nextpage When loading the next page of search results, make sure that the loop can end if there are no more elements in case the total doesn't match. Also added a check to avoid recomputing the search results whenever the setFilter() is called with the same value. This happens when navigating away to another folder, the search field gets cleared automatically and it calls FileList.setFilter(''). --- apps/files/js/filelist.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 18f17a7207c2..690e5e70fdb7 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -2352,13 +2352,16 @@ */ setFilter:function(filter) { var total = 0; + if (this._filter === filter) { + return; + } this._filter = filter; this.fileSummary.setFilter(filter, this.files); total = this.fileSummary.getTotal(); if (!this.$el.find('.mask').exists()) { this.hideIrrelevantUIWhenNoFilesMatch(); } - var that = this; + var visibleCount = 0; filter = filter.toLowerCase(); @@ -2378,7 +2381,7 @@ if (visibleCount < total) { $trs = this._nextPage(false); } - } while (visibleCount < total); + } while (visibleCount < total && $trs.length > 0); this.$container.trigger('scroll'); }, From 325776eaf2a744cbc1569450781d202451d3feec Mon Sep 17 00:00:00 2001 From: felixboehm Date: Mon, 4 Jul 2016 14:16:13 +0200 Subject: [PATCH 002/219] check if renamed user is still valid by reapplying the ldap filter (#25338) --- apps/user_ldap/lib/User_LDAP.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index 230c82a30455..7929394893b2 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -228,6 +228,10 @@ public function userExistsOnLDAP($user) { return false; } $newDn = $this->access->getUserDnByUuid($uuid); + //check if renamed user is still valid by reapplying the ldap filter + if(!is_array($this->access->readAttribute($newDn, '', $this->access->connection->ldapUserFilter))) { + return false; + } $this->access->getUserMapper()->setDNbyUUID($newDn, $uuid); return true; } catch (\Exception $e) { From 19cf727a0f055246c83317ff745b2a64a414b063 Mon Sep 17 00:00:00 2001 From: Carlos Damken Date: Tue, 5 Jul 2016 19:53:06 +0200 Subject: [PATCH 003/219] Files_Versions don't show when the files are erased --- apps/files_versions/lib/Storage.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index 6345d4c303bc..5857b0646995 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -641,7 +641,7 @@ protected static function getAutoExpireList($time, $versions) { //distance between two version too small, mark to delete $toDelete[$key] = $version['path'] . '.v' . $version['version']; $size += $version['size']; - \OCP\Util::writeLog('files_versions', 'Mark to expire '. $version['path'] .' next version should be ' . $nextVersion . " or smaller. (prevTimestamp: " . $prevTimestamp . "; step: " . $step, \OCP\Util::DEBUG); + \OCP\Util::writeLog('files_versions', 'Mark to expire '. $version['path'] .' next version should be ' . $nextVersion . " or smaller. (prevTimestamp: " . $prevTimestamp . "; step: " . $step, \OCP\Util::INFO); } else { $nextVersion = $version['version'] - $step; $prevTimestamp = $version['version']; @@ -762,7 +762,7 @@ public static function expire($filename) { self::deleteVersion($versionsFileview, $path); \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $path, 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED)); unset($allVersions[$key]); // update array with the versions we keep - \OCP\Util::writeLog('files_versions', "Expire: " . $path, \OCP\Util::DEBUG); + \OCP\Util::writeLog('files_versions', "Expire: " . $path, \OCP\Util::INFO); } // Check if enough space is available after versions are rearranged. @@ -778,7 +778,7 @@ public static function expire($filename) { \OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $version['path'].'.v'.$version['version'], 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED)); self::deleteVersion($versionsFileview, $version['path'] . '.v' . $version['version']); \OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'].'.v'.$version['version'], 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED)); - \OCP\Util::writeLog('files_versions', 'running out of space! Delete oldest version: ' . $version['path'].'.v'.$version['version'] , \OCP\Util::DEBUG); + \OCP\Util::writeLog('files_versions', 'running out of space! Delete oldest version: ' . $version['path'].'.v'.$version['version'] , \OCP\Util::INFO); $versionsSize -= $version['size']; $availableSpace += $version['size']; next($allVersions); From e2dbc0d0e6b8c5f26609e79614dfeb338f05b03b Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Wed, 6 Jul 2016 11:55:02 +0200 Subject: [PATCH 004/219] Ignore invalid paths in the JS file list (#25368) --- apps/files/js/filelist.js | 14 ++++++++++++++ apps/files/tests/js/filelistSpec.js | 25 +++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 690e5e70fdb7..7a7d26eed7c1 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -1397,6 +1397,16 @@ return OC.linkTo('files', 'index.php')+"?dir="+ encodeURIComponent(dir).replace(/%2F/g, '/'); }, + _isValidPath: function(path) { + var sections = path.split('/'); + for (var i = 0; i < sections.length; i++) { + if (sections[i] === '..') { + return false; + } + } + return true; + }, + /** * Sets the current directory name and updates the breadcrumb. * @param targetDir directory to display @@ -1405,6 +1415,10 @@ */ _setCurrentDir: function(targetDir, changeUrl, fileId) { targetDir = targetDir.replace(/\\/g, '/'); + if (!this._isValidPath(targetDir)) { + targetDir = '/'; + changeUrl = true; + } var previousDir = this.getCurrentDirectory(), baseDir = OC.basename(targetDir); diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index a74e1c7328c7..d8d3057ec3e2 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -1334,6 +1334,31 @@ describe('OCA.Files.FileList tests', function() { fileList.changeDirectory('/another\\subdir'); expect(fileList.getCurrentDirectory()).toEqual('/another/subdir'); }); + it('switches to root dir when current directory is invalid', function() { + _.each([ + '..', + '/..', + '../', + '/../', + '/../abc', + '/abc/..', + '/abc/../', + '/../abc/' + ], function(path) { + fileList.changeDirectory(path); + expect(fileList.getCurrentDirectory()).toEqual('/'); + }); + }); + it('allows paths with dotdot at the beginning or end', function() { + _.each([ + '..abc', + 'def..', + '...' + ], function(path) { + fileList.changeDirectory(path); + expect(fileList.getCurrentDirectory()).toEqual(path); + }); + }); it('switches to root dir when current directory does not exist', function() { fileList.changeDirectory('/unexist'); deferredList.reject(404); From 513e4aac85133b722d970064c26f4ebc74bf75c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn=20Friedrich=20Dreyer?= Date: Wed, 6 Jul 2016 21:28:17 +0200 Subject: [PATCH 005/219] Cap LDAP user cache (#25326) From 8b601c567d20efc7edacf12e5901e600234c76b2 Mon Sep 17 00:00:00 2001 From: VicDeo Date: Wed, 6 Jul 2016 23:08:34 +0300 Subject: [PATCH 006/219] Bypass upgrade page when occ controller is requested (#25366) From 0ec43a4f0f0872bbfda9d61d69c887f8ea48927c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Thu, 7 Jul 2016 12:28:26 +0200 Subject: [PATCH 007/219] [stable9.1] Use named parameter instead of direct value for system tags search param (#25380) (#25395) --- lib/private/SystemTag/SystemTagManager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/private/SystemTag/SystemTagManager.php b/lib/private/SystemTag/SystemTagManager.php index 2b0ef03e471d..7055fafbf248 100644 --- a/lib/private/SystemTag/SystemTagManager.php +++ b/lib/private/SystemTag/SystemTagManager.php @@ -142,7 +142,7 @@ public function getAllTags($visibilityFilter = null, $nameSearchPattern = null) $query->andWhere( $query->expr()->like( 'name', - $query->expr()->literal('%' . $this->connection->escapeLikeParameter($nameSearchPattern). '%') + $query->createNamedParameter('%' . $this->connection->escapeLikeParameter($nameSearchPattern). '%') ) ); } From 830c1f2fbfe560f42912315dc423b30578125905 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Fri, 8 Jul 2016 09:15:38 +0200 Subject: [PATCH 008/219] [stable9.1] Set content type when downloading log file to force download in some browsers (#25382) (#25397) --- settings/Controller/LogSettingsController.php | 1 + tests/Settings/Controller/LogSettingsControllerTest.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/settings/Controller/LogSettingsController.php b/settings/Controller/LogSettingsController.php index 4863c2369be2..f9a69fa38c8b 100644 --- a/settings/Controller/LogSettingsController.php +++ b/settings/Controller/LogSettingsController.php @@ -105,6 +105,7 @@ public function getEntries($count=50, $offset=0) { */ public function download() { $resp = new StreamResponse(\OC\Log\Owncloud::getLogFilePath()); + $resp->addHeader('Content-Type', 'application/octet-stream'); $resp->addHeader('Content-Disposition', 'attachment; filename="owncloud.log"'); return $resp; } diff --git a/tests/Settings/Controller/LogSettingsControllerTest.php b/tests/Settings/Controller/LogSettingsControllerTest.php index 092c04aecc7a..1660369fafe9 100644 --- a/tests/Settings/Controller/LogSettingsControllerTest.php +++ b/tests/Settings/Controller/LogSettingsControllerTest.php @@ -71,5 +71,8 @@ public function testDownload() { $response = $this->logSettingsController->download(); $this->assertInstanceOf('\OCP\AppFramework\Http\StreamResponse', $response); + $headers = $response->getHeaders(); + $this->assertEquals('application/octet-stream', $headers['Content-Type']); + $this->assertEquals('attachment; filename="owncloud.log"', $headers['Content-Disposition']); } } From 0ddbf5c9812d869db7df4473637927edaa0da9b1 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 8 Jul 2016 16:56:13 +0200 Subject: [PATCH 009/219] [stable9.1] Revert invalid commits from master->stable9.1 merge (#25420) * Revert "Merge pull request #25240 from owncloud/remove-svg" This reverts commit 8b8d2b679a12f703141de9da71340f1f02151f3d, reversing changes made to a35747b6fa8f7704bf7333f16a2b867b76acb187. * Revert "Merge pull request #25253 from owncloud/users-fixotherquotadropdown" This reverts commit a35747b6fa8f7704bf7333f16a2b867b76acb187, reversing changes made to a573b6863cbb4eb21feb7fe5a17a9b8fc60cf059. * Revert "Merge pull request #25314 from owncloud/files_external-backends-config" This reverts commit a573b6863cbb4eb21feb7fe5a17a9b8fc60cf059, reversing changes made to 8147eefaeba3822c9331283e973006ad3aeac1f5. * Revert "Add all properties while creating a subscription (#25318)" This reverts commit aaf4c3073af2511ab895e982cadae8dc6a143e55. * Revert "Merge pull request #25276 from owncloud/delete-own-session-token" This reverts commit e42ce62ce2855c95861eeae669508e5c20f99be4, reversing changes made to aaf4c3073af2511ab895e982cadae8dc6a143e55. * Revert "Merge pull request #25262 from owncloud/fed-sharing-error" This reverts commit 027715f9acba4dc314a7e4c63ac41a58d4e33f22, reversing changes made to e42ce62ce2855c95861eeae669508e5c20f99be4. --- apps/dav/lib/CalDAV/CalDavBackend.php | 25 ++--- .../tests/unit/CalDAV/CalDavBackendTest.php | 8 +- .../lib/FederatedShareProvider.php | 59 ++++------ .../tests/FederatedShareProviderTest.php | 60 +--------- apps/files_external/lib/Command/Backends.php | 21 +--- core/img/actions/add.png | Bin 0 -> 132 bytes core/img/actions/caret-dark.png | Bin 0 -> 128 bytes core/img/actions/caret.png | Bin 0 -> 127 bytes .../img/actions/checkbox-checked-disabled.png | Bin 0 -> 233 bytes core/img/actions/checkbox-checked-white.png | Bin 0 -> 267 bytes core/img/actions/checkbox-checked.png | Bin 0 -> 254 bytes core/img/actions/checkbox-disabled-white.png | Bin 0 -> 134 bytes core/img/actions/checkbox-disabled.png | Bin 0 -> 134 bytes core/img/actions/checkbox-mixed-white.png | Bin 0 -> 135 bytes core/img/actions/checkbox-mixed.png | Bin 0 -> 138 bytes core/img/actions/checkbox-white.png | Bin 0 -> 130 bytes core/img/actions/checkbox.png | Bin 0 -> 134 bytes core/img/actions/checkmark-color.png | Bin 0 -> 279 bytes core/img/actions/checkmark-white.png | Bin 0 -> 212 bytes core/img/actions/checkmark.png | Bin 0 -> 266 bytes core/img/actions/close.png | Bin 0 -> 493 bytes core/img/actions/comment.png | Bin 0 -> 323 bytes core/img/actions/confirm.png | Bin 0 -> 132 bytes core/img/actions/delete-hover.png | Bin 0 -> 208 bytes core/img/actions/delete-white.png | Bin 0 -> 236 bytes core/img/actions/delete.png | Bin 0 -> 208 bytes core/img/actions/details.png | Bin 0 -> 295 bytes core/img/actions/download-white.png | Bin 0 -> 192 bytes core/img/actions/download.png | Bin 0 -> 134 bytes core/img/actions/edit.png | Bin 0 -> 169 bytes core/img/actions/error-color.png | Bin 0 -> 228 bytes core/img/actions/error-white.png | Bin 0 -> 228 bytes core/img/actions/error.png | Bin 0 -> 160 bytes core/img/actions/external.png | Bin 0 -> 392 bytes core/img/actions/history.png | Bin 0 -> 249 bytes core/img/actions/info-white.png | Bin 0 -> 324 bytes core/img/actions/info.png | Bin 0 -> 315 bytes core/img/actions/logout.png | Bin 0 -> 2993 bytes core/img/actions/mail.png | Bin 0 -> 229 bytes core/img/actions/menu.png | Bin 0 -> 106 bytes core/img/actions/more.png | Bin 0 -> 122 bytes core/img/actions/password.png | Bin 0 -> 159 bytes core/img/actions/pause-big.png | Bin 0 -> 92 bytes core/img/actions/pause.png | Bin 0 -> 96 bytes core/img/actions/play-add.png | Bin 0 -> 163 bytes core/img/actions/play-big.png | Bin 0 -> 136 bytes core/img/actions/play-next.png | Bin 0 -> 150 bytes core/img/actions/play-previous.png | Bin 0 -> 163 bytes core/img/actions/play.png | Bin 0 -> 127 bytes core/img/actions/public.png | Bin 0 -> 307 bytes core/img/actions/radio-checked-disabled.png | Bin 0 -> 378 bytes core/img/actions/radio-checked.png | Bin 0 -> 425 bytes core/img/actions/radio-disabled.png | Bin 0 -> 317 bytes core/img/actions/radio-white.png | Bin 0 -> 336 bytes core/img/actions/radio.png | Bin 0 -> 321 bytes core/img/actions/rename.png | Bin 0 -> 193 bytes core/img/actions/search-white.png | Bin 0 -> 309 bytes core/img/actions/search.png | Bin 0 -> 293 bytes core/img/actions/settings.png | Bin 0 -> 256 bytes core/img/actions/share.png | Bin 0 -> 264 bytes core/img/actions/shared.png | Bin 0 -> 264 bytes core/img/actions/sound-off.png | Bin 0 -> 118 bytes core/img/actions/sound.png | Bin 0 -> 180 bytes core/img/actions/star.png | Bin 0 -> 496 bytes core/img/actions/starred.png | Bin 0 -> 492 bytes core/img/actions/toggle-filelist.png | Bin 0 -> 122 bytes core/img/actions/toggle-pictures.png | Bin 0 -> 120 bytes core/img/actions/toggle.png | Bin 0 -> 238 bytes core/img/actions/triangle-e.png | Bin 0 -> 149 bytes core/img/actions/triangle-n.png | Bin 0 -> 128 bytes core/img/actions/triangle-s.png | Bin 0 -> 128 bytes core/img/actions/upload-white.png | Bin 0 -> 142 bytes core/img/actions/upload.png | Bin 0 -> 142 bytes core/img/actions/user.png | Bin 0 -> 300 bytes core/img/actions/view-close.png | Bin 0 -> 1126 bytes core/img/actions/view-download.png | Bin 0 -> 1103 bytes core/img/actions/view-next.png | Bin 0 -> 959 bytes core/img/actions/view-pause.png | Bin 0 -> 648 bytes core/img/actions/view-play.png | Bin 0 -> 804 bytes core/img/actions/view-previous.png | Bin 0 -> 984 bytes core/img/breadcrumb.png | Bin 0 -> 376 bytes core/img/desktopapp.png | Bin 0 -> 2364 bytes core/img/filetypes/application-pdf.png | Bin 0 -> 892 bytes core/img/filetypes/application.png | Bin 0 -> 805 bytes core/img/filetypes/audio.png | Bin 0 -> 640 bytes core/img/filetypes/file.png | Bin 0 -> 306 bytes core/img/filetypes/folder-drag-accept.png | Bin 0 -> 283 bytes core/img/filetypes/folder-external.png | Bin 0 -> 595 bytes core/img/filetypes/folder-public.png | Bin 0 -> 693 bytes core/img/filetypes/folder-shared.png | Bin 0 -> 655 bytes core/img/filetypes/folder-starred.png | Bin 0 -> 655 bytes core/img/filetypes/folder.png | Bin 0 -> 276 bytes core/img/filetypes/image.png | Bin 0 -> 486 bytes core/img/filetypes/package-x-generic.png | Bin 0 -> 302 bytes core/img/filetypes/text-calendar.png | Bin 0 -> 570 bytes core/img/filetypes/text-code.png | Bin 0 -> 591 bytes core/img/filetypes/text-vcard.png | Bin 0 -> 889 bytes core/img/filetypes/text.png | Bin 0 -> 382 bytes core/img/filetypes/video.png | Bin 0 -> 318 bytes core/img/filetypes/x-office-document.png | Bin 0 -> 380 bytes core/img/filetypes/x-office-presentation.png | Bin 0 -> 259 bytes core/img/filetypes/x-office-spreadsheet.png | Bin 0 -> 362 bytes core/img/logo-icon.png | Bin 0 -> 1197 bytes core/img/places/calendar-dark.png | Bin 0 -> 280 bytes core/img/places/contacts-dark.png | Bin 0 -> 640 bytes core/img/places/files.png | Bin 0 -> 155 bytes core/img/places/home.png | Bin 0 -> 191 bytes core/img/places/link.png | Bin 0 -> 845 bytes core/img/places/music.png | Bin 0 -> 527 bytes core/img/places/picture.png | Bin 0 -> 295 bytes core/js/jquery.ocdialog.js | 2 +- core/js/js.js | 105 ++++++++++++++++-- core/js/mimetype.js | 15 ++- core/js/sharedialogshareelistview.js | 2 +- core/js/sharedialogview.js | 2 +- core/js/shareitemmodel.js | 2 +- core/js/tests/specs/coreSpec.js | 39 ++++++- core/templates/installation.php | 6 +- core/templates/layout.guest.php | 2 +- core/templates/layout.user.php | 20 ++-- core/templates/login.php | 2 +- core/templates/update.admin.php | 2 +- lib/private/Files/Type/Detection.php | 12 +- lib/private/Preview/MP3.php | 2 +- .../Controller/AuthSettingsController.php | 37 ++---- settings/js/authtoken_view.js | 4 - settings/js/users/users.js | 20 +--- settings/templates/admin.php | 8 +- settings/templates/certificates.php | 2 +- settings/templates/personal.php | 8 +- settings/templates/users/part.grouplist.php | 4 +- settings/templates/users/part.userlist.php | 6 +- .../Controller/AuthSettingsControllerTest.php | 41 +------ 133 files changed, 242 insertions(+), 274 deletions(-) create mode 100644 core/img/actions/add.png create mode 100644 core/img/actions/caret-dark.png create mode 100644 core/img/actions/caret.png create mode 100644 core/img/actions/checkbox-checked-disabled.png create mode 100644 core/img/actions/checkbox-checked-white.png create mode 100644 core/img/actions/checkbox-checked.png create mode 100644 core/img/actions/checkbox-disabled-white.png create mode 100644 core/img/actions/checkbox-disabled.png create mode 100644 core/img/actions/checkbox-mixed-white.png create mode 100644 core/img/actions/checkbox-mixed.png create mode 100644 core/img/actions/checkbox-white.png create mode 100644 core/img/actions/checkbox.png create mode 100644 core/img/actions/checkmark-color.png create mode 100644 core/img/actions/checkmark-white.png create mode 100644 core/img/actions/checkmark.png create mode 100644 core/img/actions/close.png create mode 100644 core/img/actions/comment.png create mode 100644 core/img/actions/confirm.png create mode 100644 core/img/actions/delete-hover.png create mode 100644 core/img/actions/delete-white.png create mode 100644 core/img/actions/delete.png create mode 100644 core/img/actions/details.png create mode 100644 core/img/actions/download-white.png create mode 100644 core/img/actions/download.png create mode 100644 core/img/actions/edit.png create mode 100644 core/img/actions/error-color.png create mode 100644 core/img/actions/error-white.png create mode 100644 core/img/actions/error.png create mode 100644 core/img/actions/external.png create mode 100644 core/img/actions/history.png create mode 100644 core/img/actions/info-white.png create mode 100644 core/img/actions/info.png create mode 100644 core/img/actions/logout.png create mode 100644 core/img/actions/mail.png create mode 100644 core/img/actions/menu.png create mode 100644 core/img/actions/more.png create mode 100644 core/img/actions/password.png create mode 100644 core/img/actions/pause-big.png create mode 100644 core/img/actions/pause.png create mode 100644 core/img/actions/play-add.png create mode 100644 core/img/actions/play-big.png create mode 100644 core/img/actions/play-next.png create mode 100644 core/img/actions/play-previous.png create mode 100644 core/img/actions/play.png create mode 100644 core/img/actions/public.png create mode 100644 core/img/actions/radio-checked-disabled.png create mode 100644 core/img/actions/radio-checked.png create mode 100644 core/img/actions/radio-disabled.png create mode 100644 core/img/actions/radio-white.png create mode 100644 core/img/actions/radio.png create mode 100644 core/img/actions/rename.png create mode 100644 core/img/actions/search-white.png create mode 100644 core/img/actions/search.png create mode 100644 core/img/actions/settings.png create mode 100644 core/img/actions/share.png create mode 100644 core/img/actions/shared.png create mode 100644 core/img/actions/sound-off.png create mode 100644 core/img/actions/sound.png create mode 100644 core/img/actions/star.png create mode 100644 core/img/actions/starred.png create mode 100644 core/img/actions/toggle-filelist.png create mode 100644 core/img/actions/toggle-pictures.png create mode 100644 core/img/actions/toggle.png create mode 100644 core/img/actions/triangle-e.png create mode 100644 core/img/actions/triangle-n.png create mode 100644 core/img/actions/triangle-s.png create mode 100644 core/img/actions/upload-white.png create mode 100644 core/img/actions/upload.png create mode 100644 core/img/actions/user.png create mode 100644 core/img/actions/view-close.png create mode 100644 core/img/actions/view-download.png create mode 100644 core/img/actions/view-next.png create mode 100644 core/img/actions/view-pause.png create mode 100644 core/img/actions/view-play.png create mode 100644 core/img/actions/view-previous.png create mode 100644 core/img/breadcrumb.png create mode 100644 core/img/desktopapp.png create mode 100644 core/img/filetypes/application-pdf.png create mode 100644 core/img/filetypes/application.png create mode 100644 core/img/filetypes/audio.png create mode 100644 core/img/filetypes/file.png create mode 100644 core/img/filetypes/folder-drag-accept.png create mode 100644 core/img/filetypes/folder-external.png create mode 100644 core/img/filetypes/folder-public.png create mode 100644 core/img/filetypes/folder-shared.png create mode 100644 core/img/filetypes/folder-starred.png create mode 100644 core/img/filetypes/folder.png create mode 100644 core/img/filetypes/image.png create mode 100644 core/img/filetypes/package-x-generic.png create mode 100644 core/img/filetypes/text-calendar.png create mode 100644 core/img/filetypes/text-code.png create mode 100644 core/img/filetypes/text-vcard.png create mode 100644 core/img/filetypes/text.png create mode 100644 core/img/filetypes/video.png create mode 100644 core/img/filetypes/x-office-document.png create mode 100644 core/img/filetypes/x-office-presentation.png create mode 100644 core/img/filetypes/x-office-spreadsheet.png create mode 100644 core/img/logo-icon.png create mode 100644 core/img/places/calendar-dark.png create mode 100644 core/img/places/contacts-dark.png create mode 100644 core/img/places/files.png create mode 100644 core/img/places/home.png create mode 100644 core/img/places/link.png create mode 100644 core/img/places/music.png create mode 100644 core/img/places/picture.png diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 565ad0ec663a..ce4940829761 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -1079,27 +1079,22 @@ function createSubscription($principalUri, $uri, array $properties) { 'lastmodified' => time(), ]; - $propertiesBoolean = ['striptodos', 'stripalarms', 'stripattachments']; - foreach($this->subscriptionPropertyMap as $xmlName=>$dbName) { - if (array_key_exists($xmlName, $properties)) { - $values[$dbName] = $properties[$xmlName]; - if (in_array($dbName, $propertiesBoolean)) { - $values[$dbName] = true; - } + if (isset($properties[$xmlName])) { + + $values[$dbName] = $properties[$xmlName]; + $fieldNames[] = $dbName; } } - $valuesToInsert = array(); - $query = $this->db->getQueryBuilder(); - - foreach (array_keys($values) as $name) { - $valuesToInsert[$name] = $query->createNamedParameter($values[$name]); - } - $query->insert('calendarsubscriptions') - ->values($valuesToInsert) + ->values([ + 'principaluri' => $query->createNamedParameter($values['principaluri']), + 'uri' => $query->createNamedParameter($values['uri']), + 'source' => $query->createNamedParameter($values['source']), + 'lastmodified' => $query->createNamedParameter($values['lastmodified']), + ]) ->execute(); return $this->db->lastInsertId('*PREFIX*calendarsubscriptions'); diff --git a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php index baa8540c43cf..977bdf15c8e3 100644 --- a/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php +++ b/apps/dav/tests/unit/CalDAV/CalDavBackendTest.php @@ -333,20 +333,15 @@ public function testSyncSupport() { public function testSubscriptions() { $id = $this->backend->createSubscription(self::UNIT_TEST_USER, 'Subscription', [ - '{http://calendarserver.org/ns/}source' => new Href('test-source'), - '{http://apple.com/ns/ical/}calendar-color' => '#1C4587', - '{http://calendarserver.org/ns/}subscribed-strip-todos' => '' + '{http://calendarserver.org/ns/}source' => new Href('test-source') ]); $subscriptions = $this->backend->getSubscriptionsForUser(self::UNIT_TEST_USER); $this->assertEquals(1, count($subscriptions)); - $this->assertEquals('#1C4587', $subscriptions[0]['{http://apple.com/ns/ical/}calendar-color']); - $this->assertEquals(true, $subscriptions[0]['{http://calendarserver.org/ns/}subscribed-strip-todos']); $this->assertEquals($id, $subscriptions[0]['id']); $patch = new PropPatch([ '{DAV:}displayname' => 'Unit test', - '{http://apple.com/ns/ical/}calendar-color' => '#ac0606', ]); $this->backend->updateSubscription($id, $patch); $patch->commit(); @@ -355,7 +350,6 @@ public function testSubscriptions() { $this->assertEquals(1, count($subscriptions)); $this->assertEquals($id, $subscriptions[0]['id']); $this->assertEquals('Unit test', $subscriptions[0]['{DAV:}displayname']); - $this->assertEquals('#ac0606', $subscriptions[0]['{http://apple.com/ns/ical/}calendar-color']); $this->backend->deleteSubscription($id); $subscriptions = $this->backend->getSubscriptionsForUser(self::UNIT_TEST_USER); diff --git a/apps/federatedfilesharing/lib/FederatedShareProvider.php b/apps/federatedfilesharing/lib/FederatedShareProvider.php index 181351816b11..01737256769b 100644 --- a/apps/federatedfilesharing/lib/FederatedShareProvider.php +++ b/apps/federatedfilesharing/lib/FederatedShareProvider.php @@ -217,32 +217,28 @@ protected function createFederatedShare(IShare $share) { $share->getPermissions(), $token ); + $sharedByFederatedId = $share->getSharedBy(); + if ($this->userManager->userExists($sharedByFederatedId)) { + $sharedByFederatedId = $sharedByFederatedId . '@' . $this->addressHandler->generateRemoteURL(); + } + $send = $this->notifications->sendRemoteShare( + $token, + $share->getSharedWith(), + $share->getNode()->getName(), + $shareId, + $share->getShareOwner(), + $share->getShareOwner() . '@' . $this->addressHandler->generateRemoteURL(), + $share->getSharedBy(), + $sharedByFederatedId + ); - try { - $sharedByFederatedId = $share->getSharedBy(); - if ($this->userManager->userExists($sharedByFederatedId)) { - $sharedByFederatedId = $sharedByFederatedId . '@' . $this->addressHandler->generateRemoteURL(); - } - $send = $this->notifications->sendRemoteShare( - $token, - $share->getSharedWith(), - $share->getNode()->getName(), - $shareId, - $share->getShareOwner(), - $share->getShareOwner() . '@' . $this->addressHandler->generateRemoteURL(), - $share->getSharedBy(), - $sharedByFederatedId - ); - - if ($send === false) { - $message_t = $this->l->t('Sharing %s failed, could not find %s, maybe the server is currently unreachable.', - [$share->getNode()->getName(), $share->getSharedWith()]); - throw new \Exception($message_t); - } - } catch (\Exception $e) { - $this->logger->error('Failed to notify remote server of federated share, removing share (' . $e->getMessage() . ')'); - $this->removeShareFromTableById($shareId); - throw $e; + if ($send === false) { + $data = $this->getRawShare($shareId); + $share = $this->createShareObject($data); + $this->removeShareFromTable($share); + $message_t = $this->l->t('Sharing %s failed, could not find %s, maybe the server is currently unreachable.', + [$share->getNode()->getName(), $share->getSharedWith()]); + throw new \Exception($message_t); } return $shareId; @@ -530,22 +526,13 @@ protected function revokeShare($share, $isOwner) { * @param IShare $share */ public function removeShareFromTable(IShare $share) { - $this->removeShareFromTableById($share->getId()); - } - - /** - * remove share from table - * - * @param string $shareId - */ - private function removeShareFromTableById($shareId) { $qb = $this->dbConnection->getQueryBuilder(); $qb->delete('share') - ->where($qb->expr()->eq('id', $qb->createNamedParameter($shareId))); + ->where($qb->expr()->eq('id', $qb->createNamedParameter($share->getId()))); $qb->execute(); $qb->delete('federated_reshares') - ->where($qb->expr()->eq('share_id', $qb->createNamedParameter($shareId))); + ->where($qb->expr()->eq('share_id', $qb->createNamedParameter($share->getId()))); $qb->execute(); } diff --git a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php index 8c5efdab7b00..6792e534cc6e 100644 --- a/apps/federatedfilesharing/tests/FederatedShareProviderTest.php +++ b/apps/federatedfilesharing/tests/FederatedShareProviderTest.php @@ -217,6 +217,10 @@ public function testCreateCouldNotFindServer() { 'sharedBy@http://localhost/' )->willReturn(false); + $this->rootFolder->expects($this->once()) + ->method('getUserFolder') + ->with('shareOwner') + ->will($this->returnSelf()); $this->rootFolder->method('getById') ->with('42') ->willReturn([$node]); @@ -240,62 +244,6 @@ public function testCreateCouldNotFindServer() { $this->assertFalse($data); } - public function testCreateException() { - $share = $this->shareManager->newShare(); - - $node = $this->getMock('\OCP\Files\File'); - $node->method('getId')->willReturn(42); - $node->method('getName')->willReturn('myFile'); - - $share->setSharedWith('user@server.com') - ->setSharedBy('sharedBy') - ->setShareOwner('shareOwner') - ->setPermissions(19) - ->setNode($node); - - $this->tokenHandler->method('generateToken')->willReturn('token'); - - $this->addressHandler->expects($this->any())->method('generateRemoteURL') - ->willReturn('http://localhost/'); - $this->addressHandler->expects($this->any())->method('splitUserRemote') - ->willReturn(['user', 'server.com']); - - $this->notifications->expects($this->once()) - ->method('sendRemoteShare') - ->with( - $this->equalTo('token'), - $this->equalTo('user@server.com'), - $this->equalTo('myFile'), - $this->anything(), - 'shareOwner', - 'shareOwner@http://localhost/', - 'sharedBy', - 'sharedBy@http://localhost/' - )->willThrowException(new \Exception('dummy')); - - $this->rootFolder->method('getById') - ->with('42') - ->willReturn([$node]); - - try { - $share = $this->provider->create($share); - $this->fail(); - } catch (\Exception $e) { - $this->assertEquals('dummy', $e->getMessage()); - } - - $qb = $this->connection->getQueryBuilder(); - $stmt = $qb->select('*') - ->from('share') - ->where($qb->expr()->eq('id', $qb->createNamedParameter($share->getId()))) - ->execute(); - - $data = $stmt->fetch(); - $stmt->closeCursor(); - - $this->assertFalse($data); - } - public function testCreateShareWithSelf() { $share = $this->shareManager->newShare(); diff --git a/apps/files_external/lib/Command/Backends.php b/apps/files_external/lib/Command/Backends.php index d1da6db3f6a6..260ea210397e 100644 --- a/apps/files_external/lib/Command/Backends.php +++ b/apps/files_external/lib/Command/Backends.php @@ -98,30 +98,15 @@ private function serializeAuthBackend(\JsonSerializable $backend) { $result = [ 'name' => $data['name'], 'identifier' => $data['identifier'], - 'configuration' => $this->formatConfiguration($data['configuration']) + 'configuration' => array_map(function (DefinitionParameter $parameter) { + return $parameter->getTypeName(); + }, $data['configuration']) ]; if ($backend instanceof Backend) { $result['storage_class'] = $backend->getStorageClass(); $authBackends = $this->backendService->getAuthMechanismsByScheme(array_keys($backend->getAuthSchemes())); $result['supported_authentication_backends'] = array_keys($authBackends); - $authConfig = array_map(function (AuthMechanism $auth) { - return $this->serializeAuthBackend($auth)['configuration']; - }, $authBackends); - $result['authentication_configuration'] = array_combine(array_keys($authBackends), $authConfig); } return $result; } - - /** - * @param DefinitionParameter[] $parameters - * @return string[] - */ - private function formatConfiguration(array $parameters) { - $configuration = array_filter($parameters, function (DefinitionParameter $parameter) { - return $parameter->getType() !== DefinitionParameter::VALUE_HIDDEN; - }); - return array_map(function (DefinitionParameter $parameter) { - return $parameter->getTypeName(); - }, $configuration); - } } diff --git a/core/img/actions/add.png b/core/img/actions/add.png new file mode 100644 index 0000000000000000000000000000000000000000..8ae17cfe11b4365254e1acbc1c0ade0793f25bef GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPE^3h)VW{r~?zkckXZ<{X#>az^Wui2;m8UItKzr6kBN zn4!F(!|H6e7?3aR>Eakt!I-STBN2I^LGoN$TetDyD+Y#!0?Z8j*BKncs}_N@F?hQA KxvX1boFyt=akR{0FAnfU;qFB literal 0 HcmV?d00001 diff --git a/core/img/actions/checkbox-checked.png b/core/img/actions/checkbox-checked.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a07193ab700714b87d1459717462b77da4f164 GIT binary patch literal 254 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Uw}`DE09jCU6fd}FtHYdqATWx z7SAg0UpHa#-bu^$OPy#Idltj2nvNTjEWV@SoV-ac=>1_d4$ z!L3>=emK6q^MBDYA;(8;+h<=-iwbq}75vNbYXWzE@xwwh$CAxYWNlh{za4Pe(s=gv zMdL8`Z7WOmD16p9vf=D`zi0p5g{+=>i54*Lc)=>i<`VW$<+Mb6Mw<&;$UPlPmuK literal 0 HcmV?d00001 diff --git a/core/img/actions/checkbox-disabled.png b/core/img/actions/checkbox-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..a2ead20996562993ec08eaa551ff4a1cb68afd94 GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!P=HT}E0CTI1JkBWyL0D`|7-(M zpeRd8kY6yvrOQ{uOxdpj`SPAFjv*C{$qH-+n-4GwM>MpG@EGI+ZBxvX?8<4N;>Eakt!I-STX0Z7Hqi{q6E9V4#24lJH3{STiDE{amU6cK;;acu6{1-oD!M_I7&K;;acu6{1-oD!M?8;~#O>Eakt!I-STX0Z7Hqi{q6tKxB^9jr41{L)p9t!9W8V_3-;u{Z~) OlEKr}&t;ucLK6Ul$tZsS literal 0 HcmV?d00001 diff --git a/core/img/actions/checkbox.png b/core/img/actions/checkbox.png new file mode 100644 index 0000000000000000000000000000000000000000..770b7ef82037fcc3b3ab6a628fbdb0762846013f GIT binary patch literal 134 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!P=HT}E0CTyZ{FOwbAjZvY197y z|39;c3KiNCk1wxh7 zD$&0XG(rfI7Y^UHi-SitsN-uv7e}v|rGgF?n4|pxzM`25meIfttvB%S$;EtNKWXda88huoY2d`WrBby_E?J!mTTefpXm-Ni0B0*BjvRK O0000}JP literal 0 HcmV?d00001 diff --git a/core/img/actions/checkmark.png b/core/img/actions/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a8be786cd59c2e5e28de1ec448bb566491b872 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}V1Q4E>;M1%flMj_osMM%K;xuJ zg8YIRm^nCkM8(7<6m*yD*tu)>p1u1HU%7hi`m3L-N`w9YRrz_kIEGX(CNB^$FkbYL zb*E(D52hfYISOpt)-C7tRS&X0XJD#q7F6*2UngGI1JUajY literal 0 HcmV?d00001 diff --git a/core/img/actions/close.png b/core/img/actions/close.png new file mode 100644 index 0000000000000000000000000000000000000000..66e3c26cc65a1b9e48fbcce71fcdea12e5df7093 GIT binary patch literal 493 zcmVMzCV_|S* zE^l&Yo9;Xs0004ONkl|F97n&=Z!l7Xu!N_;(AIyjvlN?=3=KX-xPWnP zQ1D4gu3+i|gvCpa5E{j@E!A6?gOJe6fTN5b=?x#fCtRS=FfcLbpw6pD7Y)UQpt!_l ziqB83(9yAQxnYLQB}&k+`9;KU76dqq35ZCz=N21H=rUvZwD#U!G7|0xS?w~f+-_Jh zqbv0ANv5SRd_O+&hjgF+s06Ph=7yeN;1cb!VI>UeSajNxi~V}|F7)d|aVnfz_+GtaEZUPMKCxE{{c4|+^03eQmEgS* z<71vhZ8y{MHDg6cNbYttbtfTb9H`%yDoCSP*}yZez{xak0?Rxx&T&iq+=s jVq&17P;@XbKXZQolrA@&4nfe?00000NkvXXu0mjf{H@!R literal 0 HcmV?d00001 diff --git a/core/img/actions/comment.png b/core/img/actions/comment.png new file mode 100644 index 0000000000000000000000000000000000000000..08867cf6361ef6e19bb5bed0159ba2e672dcb2c9 GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4t2p z4!UpAp0Q|t>3W%~7n<%f-EIEHOzaD|1KvE0f3_Obu&N795n?WeoHS NgQu&X%Q~loCIHw&f3*Mr literal 0 HcmV?d00001 diff --git a/core/img/actions/confirm.png b/core/img/actions/confirm.png new file mode 100644 index 0000000000000000000000000000000000000000..3021d4c27d6db047a0355b801a376d8f06b3e734 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`-kvUwAr_~T6BaOQ99KW-)57R3 z0R)l~5_}V0H~kN|FCliu>&>DB1u3 literal 0 HcmV?d00001 diff --git a/core/img/actions/delete-hover.png b/core/img/actions/delete-hover.png new file mode 100644 index 0000000000000000000000000000000000000000..ed12640df7133147f781bf2b0df11c6c78d71b0e GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ{r~^}Dh7sY3=EeU7_NZP zRR#ti0GC=%(iXwoH0dk#!6)dt~37P8V_c9`R#pTcq4Cvn@h|jhT{JxOCH2*5?}SE kG4|R5iEHaMwygTiaAUH}>5lAveV};^p00i_>zopr0RGxZv;Y7A literal 0 HcmV?d00001 diff --git a/core/img/actions/delete-white.png b/core/img/actions/delete-white.png new file mode 100644 index 0000000000000000000000000000000000000000..07a5de342526821d9e00b7f82f4e07add4056861 GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR47g;%iZ>6F^HDJYD@<);T3K0RTiXP(uI! literal 0 HcmV?d00001 diff --git a/core/img/actions/delete.png b/core/img/actions/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..20e894c7f740da793d98590fa12e998749ae2ad3 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHF4e$wZ{r~?zkVzysV6}MxP$^$Y zkY6wZvyN+A`Ggfa4jepu>+=mQw;Mni7f%<*5RT~HlM8tp3`86bX4|%T&X^)NW2G_! z*BO6tjR&*5{PsREypgxT%_U|ML-GHUB@bdYiLZLo7<+Aj#I^MrTUPyMxG`DgbVqi- PKFCp?u6{1-oD!M2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4yeeMl0hX;!YcH>w+Zd+mxHix$#H?ge=$jYUj9%yd z^L+OE-WmIv^d@UJ`;_9F%13S9Z~E2zpp$)>$Ekgf^j~F6)eK9KpOGLPotL0{+n)Ei zhS-Y)VV2Di2WNW=@SL7`MUp^t&m-196XYg8U)UW5bT5OatDnm{r-UW|QXFm+ literal 0 HcmV?d00001 diff --git a/core/img/actions/download-white.png b/core/img/actions/download-white.png new file mode 100644 index 0000000000000000000000000000000000000000..815b551354f4249157b4575c17f9991a836b1c8e GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|t_%$6|G~gE^EwAmkg+7l zFPOpM*^M+1C&}C0g`tC0)&r!xz$3Dlfq`2Xgc%uT&5-~KvX^-Jy0SlD;o{`868~&r z3KTN%ba4#fxSpKAz`TyNg=1yt>S+cW)<&5&HWpshVrOexGu44}rK&?yF4KgBk_HJD ZhBuRV9!ytD6#?pH@O1TaS?83{1OR3;M1%flMH%3tSlsq?k&A z{DK)8W^4ON0C`%TE{-7;jL8QWXEZeIW9sqoXb|*m5%lF%juD^3FW&f3P|3i~iRILB Z7KVUchS`s_Z4ZIW@^tlcS?83{1OQBSAkP2* literal 0 HcmV?d00001 diff --git a/core/img/actions/edit.png b/core/img/actions/edit.png new file mode 100644 index 0000000000000000000000000000000000000000..7ca20eba363b77d280b976c690ce778e9c4d2fbe GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa4)6(a1=6^{l)y&{Ksk<*AirP+ zBTJ_@A3lFkE!?yhC}!&E;uyjaot)6n+|$>`=PtnPQNBg1K|&#hNAzVzyP=grkc&AUoZnRD;tlNwvk2q(&Z~QUVifO)q8i|b*VsU z7f%<*kP60R1wMn1T+EFE);;G>=<={NAg r=^WuwVBl_B_~KfU70>0DEsPA(5$s2dI(r*|<}rA>`njxgN@xNAd<{SW literal 0 HcmV?d00001 diff --git a/core/img/actions/error-white.png b/core/img/actions/error-white.png new file mode 100644 index 0000000000000000000000000000000000000000..6e15865401d6bee0f86181429c67f7ffb566187f GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`E0F$AF1X>DAq>>9lP?W7C$S;^d zR`Jf=2miu3+kqk`o-U3d9MQ=M2bfweUutqNSsWP^wTdZ1p^;bT30u+<2FXkXHz__g k4h8MD>~?96?M$)^3}^I3wik5mUk$Ry)78&qol`;+0GXsD{r~^~ literal 0 HcmV?d00001 diff --git a/core/img/actions/external.png b/core/img/actions/external.png new file mode 100644 index 0000000000000000000000000000000000000000..af03dbf3e05397a5aa029b699297933729f55d56 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4 zk&JUU=d8KAdG;HX$@-ta*BR%hDH;1J_3lb=S@S5t{ z7B7}~$P&9J^vg~Lo*1RyU$l&?m2(~{8uzpJ81}zSOzwM>AXr|?5Nvu>yW*90-eZ~l zk4r8baywe*qHVle@MEW~hUcCGzGW=({F<@rhTtsG-Mxn|$(?f4 zoLM=4roHHOlWShdDhD()J$=r&9r+|-dRA%wb)`3tPXEu9ULqf%Z`tulN;!$kIJxA* i+?jiAJ3P<-B>qa0B*|_hetMB4556QBS&-O~=w9+<&TJA_l2-;kCCSJjG38luE7pBVKCC5vIF{r{V#Aj=t8wVYe@Vuc zC9!EGaVkl&9Z8bJsU#x@CL&3a*!O7Y!tW&CQ+=VE890#@00000NkvXXu0mjfDY|DB literal 0 HcmV?d00001 diff --git a/core/img/actions/info-white.png b/core/img/actions/info-white.png new file mode 100644 index 0000000000000000000000000000000000000000..670d7309c4eec4e6c8e462309db6511d66d4c8af GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}MSxF;>;C})sYXI4fNoGP3GxeO zVB;1Pm6Vp%w(<2335$$N&8w?#>FDa4IA`6)O}h`AyKwROi}#=YGAwG-0BQ;Gba4!+ zxK(??Rj9#%hxOtEo_Fh-|NOo`K{WIv)4g@G<7V=CMoc_CF~sceW|^BGEkBt2mNu4O zyMKY=LkE>xtTu*B8A4t?MLrrKr;hinHv93y%vD~_eJRWI0KJFoK=T;M1%flPXWLtRmKfcB}C z1o;IsFtc%T^YZbF$*F5-Y3u46o7+1$xwyJ}`h`cvC8TF$mQ+;MH#l%8mH>4GdAc}; zNJ!QmbQNlG5MViQD7UbjZN>lkLVuSMc?IGALn;Ag(*iafJ8FKsdD1*#mg+q_9bO!s zDl2kWUS&Ry!cmietaAZrVS#)PA6$(RXtO=kZEse>Qha&Zgfk%jd%F6$taD0e0s!*4 BKd}G+ literal 0 HcmV?d00001 diff --git a/core/img/actions/logout.png b/core/img/actions/logout.png new file mode 100644 index 0000000000000000000000000000000000000000..ad230de98f40244b1b8da5d714ca287a60530cc4 GIT binary patch literal 2993 zcmV;i3r_TjP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002oNklQpCHI|q3^a9~YSU!iH;eig`^<3f1% zD%|0;3|!&ff`&pNEbHQI1Z?2Zgpe5;%7j^6tR~OF5@UXLo9l)UOvy|=qPgh# zr@C5Q<~e;*+4O}Y%WtxJ!k<;70dj*$*te$Mjq?^=K3vnq-#p|!Z78Yy_rMG{{}T-AU+%Zexp3H!pX0{y-tY;^RyUqjl{e|`Qk}qjD?YVncCW7Wdg1>@i9ykt{KWr)S0=W&QkuGo;4j d}tNYU84+GuJ;OXk;vd$@?2>@~=Tkik> literal 0 HcmV?d00001 diff --git a/core/img/actions/menu.png b/core/img/actions/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..583ce319175c4f7d05a224798d393d82fe4b9a38 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;TYyi9>;M1%fy~fDm+OEOV@Z%- zFoVOh8)-m}kf)1d2*>s01P12c_6jWQJ9aXx*JMwA;v%F9lx6UA^>bP0l+XkKok|&@ literal 0 HcmV?d00001 diff --git a/core/img/actions/more.png b/core/img/actions/more.png new file mode 100644 index 0000000000000000000000000000000000000000..880d5dccce38619118357b1288cf07003f870f72 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-u4m4i0Wu+AW%;N1Ko)aJ zkY6x^&B<)r-~93{!f={`e8OQ(t literal 0 HcmV?d00001 diff --git a/core/img/actions/pause.png b/core/img/actions/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..d4b865e3401856e4c763b2425906eb40e4ec591e GIT binary patch literal 96 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`>Ygr+Ar_~T|NQ@N&#c-|SRi@e u#EFh1senGg`9D@LE@r!MtYP8InG7pE>mS-2ds+k3!rk+mo5)4ZJ7(Xg0OjEzkAn}j!$Xy2=k9CX&fA~7Q8)nRnVNUqLC~%y~Pe&`f5VrV(fywOC@Fo}oZp}Ip(gKtj+v%?Q#K12B=-UF@w x84C4cc@~`D7GYI#z336>v`9yjKO&EXAu?TN@><`gxzopr0JDiEhX4Qo literal 0 HcmV?d00001 diff --git a/core/img/actions/public.png b/core/img/actions/public.png new file mode 100644 index 0000000000000000000000000000000000000000..772838ad2058e5e6e16c9fcb13e1bb6708155238 GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}NPtg>>;M1%flTUx4SfrRfhJ0q z1o;IsaB_=FX`0(O2Ly#DHnewa-?8)Jwbvg$e*X4r`odeeKxM_AE{-7;w@Obt^0g=k zxLkB{6%lj|Jh1D(?eUaZExlW-=l=UKk56;gF}2MT)@==+w(%p^ib+}js~Bv`EoJT; ztDZUY>;L`x=bigBXVb(wtIXZcU-`a${#4Ff?h<=dLPR$Il0^;I**1Bsu1U7o)bUz% c*@BNd<*z5QTVFVdQ&MBb@0Qi4hvH$=8 literal 0 HcmV?d00001 diff --git a/core/img/actions/radio-checked-disabled.png b/core/img/actions/radio-checked-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..09abc410f618214c27f1c46afff9d424bc14297a GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}U4T!BE0CT!bLON;lcs~gv}x0T zG*D#5j2W}QV9uO5^XAQ)J9jRS0VE-UKoKASDm!rC08k~6Jb3URkPFm4d-iOIN}z)6 z+qdu7v18}XoiARzc=__>>({T}ym|Bf{rk_KKmYpm>;M1%AEy3w2f9G2B*-tAK}1w6 zI5e!at)uhKoxAt$eg5+0>-XuD$Hx4$oc-L`Q(!(BfHfRrBMj7sOYCOaQB2)HQ!s&%)h(i}u`n@Z#2k zm$x3iy#4Ui{ikmpJbm-@)rU9lzr6YI<=c;6-+%o2@$>ip|Nq78{uKh9C|45X7tA0c zDi$0X*4oz5dFRgEyZ7#W{_^GP*YDqdfWXg??~-ajm9srv978H@<@R|BH97Dw2)c*` zrnuY`4|GUKi1_q>yCj=Ufb0ET+ACddxL(Q+EV;U5|9p=K|6o~x%F^Aee6=5xCW=K& zRH(+je*h zubV|;^g@Av6Nk5^G`Lj;s5)fuSFxSZzv1riw|0^@fAFuL+qfmV?k3hA5onqA`pe40 j`?xoIb!hS4h*v+qPoVnQsgLV{mNR&|`njxgN@xNAMzEHi literal 0 HcmV?d00001 diff --git a/core/img/actions/radio-white.png b/core/img/actions/radio-white.png new file mode 100644 index 0000000000000000000000000000000000000000..04beefdff014133e9d282f587ff57755feb12248 GIT binary patch literal 336 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}W`IwKE0F$A7w|`VZ5hxq<&q%3 zUU)Ah{-TEY)Iy3h^dQM&tSrROq?OO-^jJ$$JvFyT@>FVdQ&MBb@0A&8O^Z)<= literal 0 HcmV?d00001 diff --git a/core/img/actions/radio.png b/core/img/actions/radio.png new file mode 100644 index 0000000000000000000000000000000000000000..70ac4741b978b0071c4d672e0e7aa28c0f5709dc GIT binary patch literal 321 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}a)3{WE0CT!bLON;lcs~gv}x0T zG*D#5j2W}QV9uO5^XAQ)J9jRS0VE-UKoKASDm!rC08k~6Jb3URko)4ri(~GP|JU5hxec^NswBuSm_bBTEI2f*wXLJ`&YipW?tT99r)5S5Q;#O|oO(6#b5eH@OvT&8oU;o#acuzAtciYmqTyg(}P0`bqEtsCJ zFxAk@Nor31wZ%L2MJ_luN;qr2J$uGr%WL6~R>v9Y5+6B#cP#wbC$fHN@VoP`e&@&w xsywy&F=4?jrp?v0uP*v0g>eTy7yS8{;nyL7Gn*?aSb^3vc)I$ztaD0e0stHBoa6ui literal 0 HcmV?d00001 diff --git a/core/img/actions/rename.png b/core/img/actions/rename.png new file mode 100644 index 0000000000000000000000000000000000000000..975bd2d7031d55e599dd8b8e788799afac376356 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9iA?ZAr_~TfBgS%&#XGbljVoxH&%2|Ot3{1%icFtXCCCsN9XD~-^5j0`osA#yscwg*pwxo%lfp*E41o;Is z=o*_?SX$XTcm#weR`gGrxBkMd+Yg_IBK4e>;M1%flTUx4SfrRfhNk7 z1o;Ish)c=HDyV4a7}|Jv`bT8s<`ou~mRD3&*VZ>wM9eS(s!Q>7aSW-rmFs_9s6m0} zG8dnSj0VTg|NleY$GCo;l)Y=x8~#HP*++s`cgP0b{VQQIk?-Ry!wc-0GlDlPXyz~z zJyx>RyKm9Md`9)SV{O~!JyiWXTR*~k*#zem6>9zSmQM-(*t?IhO`lEmw`2NGkWW2b L{an^LB{Ts5S9eS3 literal 0 HcmV?d00001 diff --git a/core/img/actions/settings.png b/core/img/actions/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..3ab939ca37a4fb3a96846aed3102acef0efd7416 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!O@L2`>;M1%flTs%#&v-(piYsJ zAirP+MivPLO#@?V2X`M||ES#j^1Avr+SPSH`FKwk$B+uf)P7ICBMuzQir!Y$PS^kc zw{prTDvT8nGukG~JL~Vq(l5e(^5NT`D8)6H?X!(bx$ynvE#)(GEfY@eJP`QL w=IK9%vt|$U9UWa73%{JU#75+xUNya##0)78&qol`;+0FiS-rT_o{ literal 0 HcmV?d00001 diff --git a/core/img/actions/share.png b/core/img/actions/share.png new file mode 100644 index 0000000000000000000000000000000000000000..fdacbbabebcf013a5a80907b3e62cb2e3c0ee26d GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=RI8sko>_H9MJo@_ zGKW2q9q*Y6RRxSEW*u-<_}AaEx5JEqBj$oh^M{ZoHikwuf%OcJ>LYjxTnrgFQW`CI zJDxU1h<1oGe~e%8=(s}+-;vXeKQsi?7qKV_9AWq&P~T zJ^UvZa68Q5I?}y?O=(_63B#l2h(!X%Qk)VZZedP~qJoxrr5$Qzd?m&k+oST~GSF)b Mp00i_>zopr0Q>V`U;qFB literal 0 HcmV?d00001 diff --git a/core/img/actions/shared.png b/core/img/actions/shared.png new file mode 100644 index 0000000000000000000000000000000000000000..fdacbbabebcf013a5a80907b3e62cb2e3c0ee26d GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`=RI8sko>_H9MJo@_ zGKW2q9q*Y6RRxSEW*u-<_}AaEx5JEqBj$oh^M{ZoHikwuf%OcJ>LYjxTnrgFQW`CI zJDxU1h<1oGe~e%8=(s}+-;vXeKQsi?7qKV_9AWq&P~T zJ^UvZa68Q5I?}y?O=(_63B#l2h(!X%Qk)VZZedP~qJoxrr5$Qzd?m&k+oST~GSF)b Mp00i_>zopr0Q>V`U;qFB literal 0 HcmV?d00001 diff --git a/core/img/actions/sound-off.png b/core/img/actions/sound-off.png new file mode 100644 index 0000000000000000000000000000000000000000..0457de8e4d1cbff1c62ca9234a1589467c8ac8e1 GIT binary patch literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ww^AIAr_~T|NQ@N&#c-|_(AHx zi4!*%mb_~G)T1KJaG57*at_0$v_-rOS%)MAl#eoWF;84|(PL_h$rdAFhWQ)9AEt%x Q2bss<>FVdQ&MBb@00wO)`2YX_ literal 0 HcmV?d00001 diff --git a/core/img/actions/sound.png b/core/img/actions/sound.png new file mode 100644 index 0000000000000000000000000000000000000000..e849b4d248b3590426420336af60951413a89c2f GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`)t)YnAr_~TfBgS%l@q-it z3olPXCQo7b1erMIgjo}L8JN-()-fb$D%5cv*%ZO+aE-^9fkS1Xls`iumw-7_q4^z# z6y6sSTK9R5Om%p}e&l!K4Z)7@ladm!u?1xQfe3mKO%b74)%;%|(K@8s}>Z0Vg?w^@eMZWN>J({nbwN z&#HS#V${D?tc;({^Tn3;Hj{ist5wyH;5u$}sC*v1NL5L40k_RJ*KPWV$5r(%lg&$V z8h3H@KcS!SpsGGXnk$`T4fk+jPUw3)tg0`6S<`n#l0NR>d`IXTJgurRg z$FKu*h$qv~R`6KIb^DP$oN5ak1m5TXo#@$e|M*LBd*SLi>tR^{GReMcHTPrs38!xdl1qD^Liygc|Y3p-U?K5m+ mecFGJVSw#v|IC6cN`C;KX`P3~niH`A0000gv{XYyYlBNr&_5B;);}N(EeQ=S{Q*He z71@t5C~61{1Q89do(3(iK9}w>`@rEm=lkRRd^zWPIFVA4r817`(rYA@IpN)TRD>z( zYRCddR>gC%->Pruvf{8tTI`fk2&$2lo&itIt!y z-HmoD)nn>TbncH6JkI`e{>ONPWrqCmds;9Y%uT>}05^j4P ik0j?SnC!=Nm-+?#L4wF;-O0HC0000zd literal 0 HcmV?d00001 diff --git a/core/img/actions/toggle-filelist.png b/core/img/actions/toggle-filelist.png new file mode 100644 index 0000000000000000000000000000000000000000..0926a726d53e1cbf6ad2646f5a84a9ff1ef33201 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9JOMr-uK)l42QnexM-P)Pki}dQ zxYzm3>fBuWJ{bn}Ms}y3GSSY}(pSRQ!q}|ii K&t;ucLK6Ugq8|MK literal 0 HcmV?d00001 diff --git a/core/img/actions/toggle-pictures.png b/core/img/actions/toggle-pictures.png new file mode 100644 index 0000000000000000000000000000000000000000..7499d5b7809884da195be32975d5e71c26ae0e0b GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!93?!50ihlx9oB=)|uK)l42Qq=6E^uWmkYXwc z@(X5oaBZf(1CS@<>Eal|5uKdCz_?O1$XjAdSjJih^#ej24iT~pU#;M1%Wn^UJ<>h5%Wfc?@ zfD9EC6(B=VQBesAK)A}v%1B~LefmBiLxoF%{DK*TB&8HIwarsAr>x#`?DVxK@BZ#~ z_;?p6?dR#@7*cU-X`eaY0Rw@<=XBpaJ@fy+DaVAf(T92)6g=&OP6f!S?#a@6bImN| zb4857-j4Yj7M)n?ur2up&kI%A1F9Z;3*aK$96fUHx3v IIVCg!0RM?f-v9sr literal 0 HcmV?d00001 diff --git a/core/img/actions/triangle-e.png b/core/img/actions/triangle-e.png new file mode 100644 index 0000000000000000000000000000000000000000..4ce1086f61d4f9ea9333f695407831e2b800819f GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPGa2=EDU1=3hSn7ND=P=dWA$S;_o zzM;LN^Pi#A-CCfKs;7%%2uE~sf&!n!0g06cZo8O!0+~{$h#!(*3SjeTaAZ8Dz`~&A V%OdgnTflCR;hwI3F6*2UngEeTAIty% literal 0 HcmV?d00001 diff --git a/core/img/actions/triangle-n.png b/core/img/actions/triangle-n.png new file mode 100644 index 0000000000000000000000000000000000000000..2042d66532c01d7266d157a7c665bd7301321405 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE09J8{(R4Sfqa&dAirRS zhQ^M`vGKy{$B+uf literal 0 HcmV?d00001 diff --git a/core/img/actions/triangle-s.png b/core/img/actions/triangle-s.png new file mode 100644 index 0000000000000000000000000000000000000000..97c64c6a7203c89f8a0074a13bb53bb5a1d319ce GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJe}GSjE09J8{(R4Sfqa&dAirRS z@`etpv)y7qzKo}fV@L&K@&fsU6h`JW6TvhS(=#h}&6pwaf|EgYC4=M7mb_CSb39%B KT-G@yGywoK&l{fr literal 0 HcmV?d00001 diff --git a/core/img/actions/upload-white.png b/core/img/actions/upload-white.png new file mode 100644 index 0000000000000000000000000000000000000000..28693f855d3e8243fe54d533451921ce585d3770 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJPk>K|E0F#V0~QCYR{;6UB|(0{ z3=JJh)56<_65Dd7MB literal 0 HcmV?d00001 diff --git a/core/img/actions/upload.png b/core/img/actions/upload.png new file mode 100644 index 0000000000000000000000000000000000000000..8955ed9641202f08a70536bf9708e67eb7d328f2 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJPk>K|E0Bf*)0gJcfE?zMAirRS zh7P4^;q5@Ko~MgrNCji^0al5b7k->MgTe~DWM4fOEDn& literal 0 HcmV?d00001 diff --git a/core/img/actions/user.png b/core/img/actions/user.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2fddc0ea3fbd3a1c45eea0f477a62c4a85f95d GIT binary patch literal 300 zcmV+{0n`48P)}2eTj_=zJ!=fV%S$O89ZRoW-)3|41z(_;0pI% z=E@Zh3=IGI=9_b7=JYbte`3CEAtJVLhz(3}l9|^{U9XfuMC{_cf!`3Bd0U13mIU?- zY=FHcY%^%%b6tgZU3r_qWr2O*s*^!xp5e5CkD3?wTLv(x%%3xJQW6ynB4Qak6*P#5 zgNRscYHR->BGxd*2nz-87aaR8=M`k8naK$6`0Oz5v7VW=62=Pe+!8CZ18WAuj+=j? yPraE|v59TO%y5V$JmC=!xWF_sZ)j(=etw;_W6|Nr+~<9i)waeGOS zUoZnB6Eh1d8#@Ol7dHo;%SynXu)2;P7A@Zrnu%<~j*Ow+Wh`O}xGNw`O!J z1!S#E36x}aQ0c4qT{!PWOzN$}Qv@&7{rF}+(KGB?L&Gtff1e6}?$I=Q%Fy%ZU&)3a zvp6Qc<(JHmIlA|J`R<=q=VLjYeqFxz>v@*?QN!kbWx34<4}1K%m$J_D*4%C7`=_n+ z5Q_cI@JdQ2>2PMeZp+66lXo3Ay*y_wY1d@Ic1&SwCq{awm7k@Rto>6@_qH&t#&uc`G*%|=0iG7kn0F=N1D@#6yz94rO~8Urh~|K-yr;#^18#t8U?A@| zNl3&IaKUpx0hkocoB21u6>urqH{-D+k{p2&C;(;P1K=T06jBiE`T}?Zyp=JJ(W8iz zaRgH4nI>>~LBJmYGeTlg>@Edd30;fc$Qr(RCL&;os0StqJW%cRdS6v4l^JVzet!O{ zTCILb;Qn_)$_8qrq+`ChF_0&4`_yna%(%ufHYGM1A8DdfHW2|Op#-u7UMP8j8DS=DSwAqAWHIROMNYA)vMw052v;YnW?u-m!l_VpE zWuOjx20S@EJ^kAMpXBW9>>J>TtX&tZyn01lUjjY^9s{2PPY(_bTK^UN`1trc;HeOJ zEEpxh%w!nNeR~Xr!^6Yw!otFX#l^)>U6&`3{r&y#S65fR1zrPx0)G?4$h91mXKQ*? z5y~DN9le~Jn=39aFMoU=@ZH_rAJ^8_j)6abo*~dT1bp>Cl-!azIXUUp>-A!z(fB9{ zc(d7jzOk{<0)7_)uL$~t3&M`chcGou2Nv-w=We>J;*&8X`=vo>xF=#DM;h;}-i z7qhdo1ve&kc6NT++}vy#@NNY7Z2?koJrGAiClA~0_Am4E^SPy^rB49%_V#{QUtd2W zaJ$|4Uj$J60f*yLQ-aSPHtX)L19r*QE_oeMP+4UQ)^p$duMk~ zPhVeOfB%HZvt}>beDUJVr%zwJeD(VE+js9jetPwH88A2)i#=T&Ln>~yUj7-*7%0MC zu=#|+Nrlr9w>mmBoMv3mYW-Gw-RXDRif8%xCUZZZtNc8t(!Ty&?fZM*_i{Zm3^_LQG(PxCT6Qzrr2sLk4Qe3lCf>vi)fa`m>hlH`t+SC zx3#!9Ua&je(f(hyWm0F)rbP`}7R`6=smI&LpI*eW@Y1GzGyg<(ua6hm9Junp)GdV? zHoL1XKa!rBb3>&t@O*z9_i3?GO8c$Zqv{_B9p19@?7;$xSYBFWh=HPvnomi91Ygb111CpPgg&ebxsLQ06Rf19RL6T literal 0 HcmV?d00001 diff --git a/core/img/actions/view-pause.png b/core/img/actions/view-pause.png new file mode 100644 index 0000000000000000000000000000000000000000..94cd1a5dc6c938962bf4d856fe056f4405bd248e GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy&jWlyT!HlP0KUGy$R2TZb#-)f zw70jnv$OmE|9{d%SplH5Pf3tpFaskKGYcyl2PZc#AHRUGh=in+jI5lzf})zXzJZaM zxrLRDt)0DtkAGl9WORH|a!P7?MrK|?X?;^?cW?iM$y28-TDgAP&Ru&?p1XL{*3ycB zfsw`2#WBRf|LNq{S;rK3+7`dejNi(`w)_8UX&$$&_p1!b^0)rp9dm%m>C>+a1GP30 z<5bBA&hybt?7N*@jzwg12TtkM|81FWa6R+1Z}Ls4rb#E8mK%Hfc{(s8yt_4TCZh+V zL_#Y3_u5GEwS@-#TsdbRqkzDh>xyjoYvbfA5Ro%obwR!cg{+;o7lN_hR_kwf#LrvdaF}?bi$Iz~v;lzVI^=ntjTq!Eu@6>UEae=)0 z``S=rhUmKjhxX*K7BIww`ZH{uB*J(kKH<}2UX`r81kTUw{WouG;+1K^ mv%_+$OAD@Cyxjgh|2LzFkePwnv^~q+t literal 0 HcmV?d00001 diff --git a/core/img/actions/view-play.png b/core/img/actions/view-play.png new file mode 100644 index 0000000000000000000000000000000000000000..a8398d5758f44f1616e3682098d90d20ec0bf6a7 GIT binary patch literal 804 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U~~!a32_B-M*%Pds;a7x!y!FA zJvTQuEiElEF)=uzI^%r|NkZ~b{#;?*(E`K!3>N{ z%q*;I>>Qk2+&sK|`~reP!Xlz#;u4ZlGO}{=ib~2VYU&!A+B&+1Mkb~fmR2^l_D;^O zZtfnQ-hm-u;SrHhF|qN9scGq%S=mL!Rn;|(?OolyeSH%qO`bAm{;EyecI>=!|Iv$= zZ{GfS#vuocMioyN#}EtuxtITDH5&*pe3&DDIV^hdn&!V7-~OGS&2JEvJZX20ZkD8T zG}B}br@EMPr)3Qqb|`ERcyzkV|4y^cc?FjDe{Gp0pQHw+oQY0P->f>}d1|Qr(+9nZ z$#?r40c^E=C_RhhT9>DUM^Iwsq=%5HAu@5aT-u9L1zbEviW+_&Gb`;bH@ zmpRKT<@fEEv;Tb2=qO|1bGPGpK3z5Dz{Lqyv<=Ul-`ebaxczzFj-?{cG%gFdPM+(@ zQd|G>mvqG91y??5v_84R)aHG>{-D!@mY^WdO?9k$elsWS`sGz5bXn!(UDh7Uud3@V zYiy}ykTAY}{(Ydw=lBU0N%K=4nFqIeO|>eGJo(zs?98pA_Zo6rV>V?@&Ydqa=gAAz cc5~Bz_Nu4W_!!8_vw-5*)78&qol`;+0IMP2asU7T literal 0 HcmV?d00001 diff --git a/core/img/actions/view-previous.png b/core/img/actions/view-previous.png new file mode 100644 index 0000000000000000000000000000000000000000..86e2a809626cb0683078e5582d1f37719c07f7de GIT binary patch literal 984 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0U~CKU32_B-M;h?;^(E5Fix)3m zx^yW}ac^&LYiny$Q&VGO{)vH&}nKP%n zyc|eYR8-8KJ$w1`<+EnZTDEK%&?ul{pqYynEh;W9E-5Mb3kLuH|Mzz_mj_zYSQ6wH z%)rRR%)-jX&dJTg%O@ZxBrGB-CN3cXJ}+>Vrph?Wn*XW z;OOMy;pye=;lf2r*KY!O zV%zqeyZ7wfxBt-L!$*!BIePTi@e?Oco&NLhQ_zPez~s^3>EaktajSK5c=#a)fmTnB zMis3~AyFX$q5>f~97-_M&n)4JI7N^*p*{*{|= z^wKALUMl8U%ow9TOD3*f(2G5mWyR6+xHiaYAr)}YnTO}qBj3)B^v%BzVQR|18m+Q_LA9maxxq#~h z%Vrs`C)eZ+taL+mcu==UBZm|ra#y&FBR`uXZBn;@upL8 zZ&>_mj$ZxAzxr=$3-6Viy=3{0HsdR&ZC7&l?EAh=%)Qw!In_a7$FUdPLJdMknyOc^ zWPB1{?7hm<;2FDHdV$u^y@rK{z8ew}n=wTPS`fBiVE;$v^CW)*=FtEa1<%Q~loCIH(~H@N@+ literal 0 HcmV?d00001 diff --git a/core/img/breadcrumb.png b/core/img/breadcrumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5556920aa73b4b7778c6e89e5c6caa5d3abde86d GIT binary patch literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^d_b(j!3-pmK2_cWQq=)IA+G=b|Gz#!z~lYpV4yQJ zOM?7@8JJnQc?6`S74-BC&D=e`15?xU8k@W3&R@QL=k7g+FJHa&{KcEkU%q~`I?Q+k zsHxf0#W6%9IChe|P_uym%R#eaPv-Ed9sVExVs%x?YptnQb{mJqM?C8+W4F2D@cviB zY`!0MP6d{X^Rv0mO>6J`)~~m5N6pJe_e(NgKAKmu^2MiHFD7-L_L=SyXMDR(f zovM7Gvx;RC&xwzzmNBy8+S%zELXyl=cSN$SOV literal 0 HcmV?d00001 diff --git a/core/img/desktopapp.png b/core/img/desktopapp.png new file mode 100644 index 0000000000000000000000000000000000000000..272397c949e6846c73280de2a29a42e678e63a09 GIT binary patch literal 2364 zcmV-C3B&e@P){0D=aK5EiElB zE-o)GFEB7LF)=YRGBPtWGc+_bH8nLhHa0gmH#j&rIXO8xIyyT$J3Kr*Jv}`>K0ZG` zKR`f0K|w)6LPA7DL`6kKMn*_~R#sM5S65hASXo(FT3T9LTU%UQTwPsVUS3{bUteHgU}0flVq#)r zV`F4wWMyS#W@ct*XJ=?=XlZF_YHDh0Yin$5Y;A3AZfSYo}QndpP-Ll?si~=|s;aB2 ztE{Z7t*x!EudlGMu(7eRva+(Yw6wLgwYIjlxVX5vxw*Q!y1To(yu7@=zP`V|zreu2 z!NI}8!otJD!^FhI#l^+O#>U6T$H>UY$;rve%F4{l%+Aiv&(F`$(9qJ-($mw^)YR0~ z)z#M4*4Nk9*x1gww2>+9_7?CtIC?(XjI@9*&N@bU5S^78WY^Yixh_V@Sq`1ttw`T6?#`uqF) z{QUg={r&#_{{R2~AfpJV00007bW%=J018ByqSgJx$H)l)00sO>L_t(&-tF3dRMqtz z$MKuLp4V}q5Cj)UQzx3G2pWh(lTvT$#8eO`mDm>H55AK9m_IU2#g=(v)O0iFLNB1T z$VuC{M0$x)2*#3mO_PlxTT|8w)7{s<`{P39IV9@wp13>r{l`6@^SPhT=RWTDeD3G{ zJ>UB_nM|f0y?Xbd8%Lksy?U5TCX?xgp7=oYyuoBL`GgdDnoK?Lk?3LS>o4W}$U0p_cH=)*aO|5DFQifsVq{eoB zjqf*Ny-t;M`59jisP(|#8r<0^mkdwiVOvUfpdR1(+lmVv7x`PL4%xZ`)efXeX~5J~ zYvKXIAKvt6dB17v3V~IUbb2U; zKB$$n865iKzok~ISE##G!wQ{z;EDfe9tTyPvR)d8OU6R|Yc$FAdhJfjaWy|)>el_( zq>rC&RND^$Sgh9EpZ!CdF{HDb-;pNZkluf~MNJlOP`BzsTzUjvRs~JkpJ-lW+>T2{ zZEcg<_v&nEB)p<(Y|>CHt=a&<^tEXOzok7G(qw2-EOz<#5}L$taR>fTsl{$IU zXgAQPwO*h;B~7APDG-q`D#SXquO;P#3UF!ttzRkIL!BoLhkZJXP3{QHpXylv_UJ`8 zEIWoY9_qChhniuCwBR~ZKXF!lER{mO-ie=bO!;B|)h{Q`Y1WgtWbkX94x>zO+#KAj zW0}ACN=vax4U4OEek1@zs-L;l?V+AD4oK5*NEJ(tsimJ6vQ=At5QNuBQe`lClBD-S zaLFL@bNz~Jsg~*glq91uCViQDeGjWdtJOMn zL|*^`GGBOpwi$?Dx8u1*7MNfi1Y@js5jcN)HbmxZ-(Ur7DjTuRc2CDzw{BWHY@pS8 zqoIadR=$u1IFy(4+{UrjIR#ux*i_b8x1k0)@^GFP66^mtb(!)Ci9cGOe7OB z!!o#i%Jrx6*O0PdZ}xRj8djE1^0s-lXqHsiJ)HK1w5t5-1vT2UrsZ zm~k})T~Mza`VH*O?&*xx@OJ9Zl4qXzEFwRDWeM|J%)fh$qUG7e>;-t_=%c$Dqldh= zIHMvRIFLs4(f-Tt0`~97%S&pfR;L!c9aK5Mo_u+#t};Bck^^Bf#9Cs4hzTNP)<_Ez zQq0^mjv>*6EST31PlAfeSr7_QOP9w0L6d;ksN{QrIIGnV9=7$W4=Fvu$aqJ z+pbR9cExA6^;_ThQNL?T0b9Sg8tE5X{SPhuR6o^E^;0{e`p}>3K2*BkLj@r|RA%Et i#Y?_a66Q07cK-t#X|XPa)f*cC0000)f$Qc zHElpbA}nI?AbP3AQ#}~;BI3oHAcBfQZc^%>q|w$aR!WJ7QWQ0$X>Do`78DOQq$bT~ zXXfi6HAtG>O*U&3{ldWTc<=i@^WOaU!T(*hGBDk@|7+l$4Z0rl8VgS}51m@5lUONEe4QFAK=Y{u4?(H>H-0PG0a=O2JM{NM4Z}8%spsf)9y0#j2BRg3W z0MBF2q$@GH;2dRtvK4CAilbi@Kpa{o9R*W$$;R)6WvlVn5P*!mw~vm_Hyu5CU1HCs z10Wv!^VMMI<^wp5FSAJRYy==tO_4$y{;s>bKArN~=C4QZ)~9(1xV0Lubx*+HOzY^_ zWIFBo&GhE(e12ZibAUDlAcnU9OdQ12d8x1a`PPyAhoFOqinrfNt#%!k`;sf(ErnKH z4fe#w>18Hqpk*X~SEj1~GPlK~`++_n36LEgbM}{Mt!o0pUTGdWwGf*I zZ-jmZj$rJV%;l18pL{Wu9T|H)3X`A7ybB2zAJ6&?1J3kVDbMu)Ottu1hb}(elQHZ( zQfKz=y_uHbv4OyEd@r>)x9i8=1G@m)>gs-RQX-1ov(t;$UNbG8EoHja6`b%q9d7<8 zfBy2*U8!&;^?)OOD8@Ps?f^13yabE`pMoYlkIONN;>ZmeJOekcpwcnCChSlYCr7fw z$9|v8<&x3N>{&zY!fvKtg4nn87*VtoS|x8;C0AfDhjhS2;pv21c+x;YarQ-^y#n;Q zRB{4>!BD9Q-z&Ud@Ee}G)ca_M;N@C2FAGq#@B<$@B)w1{&2A5!`xppn4N!6gz7mK0 zDDkaucZD%$fTmhEFAD&?TJ*!;%=G!+)w~kGrs!V@FuqExHj;g1Ro00000Cn+(?OI7e zDw2XkBBa7aq}z=tso+WykU#<2l##z6ijy=rKY;Hv6j?|1d3SSX(UB*)@XqYKce}GQ z1Ki?&2Tij{YyF6s_W{h9r2!Gug%ID$#=0|&0A{X^kORPsSu2h3CI_X|D*&}12$q}8 zWm@j|p6IcT4u9NWPKbVjH*)4DQpztb(Et#~ah-@h zkC6~Dow0W8^!zGrw?Ab3$YV>ty#DR-E8Yh~7?wf{yDW_tk)C&Ne+;US&`MzwdX{X{7 jj90aRt;pQs7DezEoqHeO!r>G=00000NkvXXu0mjftBq$( literal 0 HcmV?d00001 diff --git a/core/img/filetypes/audio.png b/core/img/filetypes/audio.png new file mode 100644 index 0000000000000000000000000000000000000000..3d52756341acdc897f1abf5ba55306153cb905da GIT binary patch literal 640 zcmV-`0)PF9P)t12^2q z`##T)m-mhj_}?YdGz-IUL2JFJlyXVB04@Sp1aN`mS`Y+}$9tT-A&o|3zFaQ5#u!&b zMgi`>=QIG2Ol!Rhpg2GjMGurx4@sUU36Xrm6A_(uZVezJ>m(O)rCLbksI5#p+!~f7;~xD>z%1qt2Y4r&T7v683KTayfen!cO2)v z@B4p>cpM6V01?^R`(CM3 zo|F7Ip?pVcy;85&V=Dlq)Q61x&!tjnWAB0Ic>|KmBC-kK2X+^38^BtUB-ec3|1`;L z-{rpB?VjxS`>#nZrPO~l#@wmZYHuGGUQ@%HpSF}&Weo6|+0Aro5d*7+ t10z>J1Cz*t2D1Zek5^xp+g)$se{H5I`;W?nuYpcy@O1TaS?83{1OOSjY?A;0 literal 0 HcmV?d00001 diff --git a/core/img/filetypes/folder-drag-accept.png b/core/img/filetypes/folder-drag-accept.png new file mode 100644 index 0000000000000000000000000000000000000000..1124a02982f6673167ecaaea22c89cedf0788205 GIT binary patch literal 283 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0vBJY5_^ zB3hFZBv_SY4Gu{xJi7Utv4Mewz?B0(_7{fwS21suInZ)MEyI$TnfdVl|2%nv&3!N4B&eVL_^L4W|02ot+RGiz*GX}*;5E(ue{ zDi8h;jvlLoD~yZzBuWpgV0M!=c*S6GAcOzH&eRqerk?f}Y1+z%9e3R{}NWf798^=mP*CLI&+ojU1MMwf^LUhyGCN>fh5I>q&xb5s5i`|vQs59=2U&I$K z+{4`a-shegRL5deWD!dO%g z6#+yEQCp?uiWZ)n#`mPl8IE%G))ptHBGT_12C-y=|5R)(&XfQ}NKAP&r=x=iJ8KE86 z1e#UN7ep;Tldv^#7mshak_FlU5H=C-aq;_)`58pfh?Pq zYlW)((-9*9=pRYk!a+gHoPn<|zOG002ovPDHLkV1ng%`Ii6y literal 0 HcmV?d00001 diff --git a/core/img/filetypes/folder-public.png b/core/img/filetypes/folder-public.png new file mode 100644 index 0000000000000000000000000000000000000000..3da67f85f79d13ac9674a3e364bc140adeaf6447 GIT binary patch literal 693 zcmV;m0!safP)&dH~`pn(J$RHtA3D}X~a3!nt@AmWzKW12TmUIT$f+BkqxWVhPk z{W4e6BSY)u%OYv(C%@&59N62+}HaEPy?4$d4W6e#9*&-0-n|*x}5Tn=J!~Li;sqV-xrQctGYi^EzX%8$kBF5!<%CM11`oA-&|}4`Of79D?5m z6lLBM%~@_`y<$Z>WPi^Ct=iw@AHbezc zaW{%s>|hkcc(n?+DT4*8))J8$h|9qieEfSYZK@0?7 z5~BAENZMox)b?woQ6R+%q*S46{40Q;G6=vYD&$D+>*uW^G65in6O}PkeK`m-_QRQz zAAk6F>`Hxvlnea=4XuE*dWwHf%xE!AWLkh%B*u0Ry*cz75?F|nAjuZA1$a*2Ab?>3 zZtNLax~H{{4!iTaimrDKB9BAidu4GPA}5Ri2vKcTOBcJIzSDNSD@1fk zfE>t4MF0}NrNr8TY{2R-kFvbuZKmjYvsNgt2}}UU#jZFAz?VF-y?$nU-U6@diz0FW;0KCKHExw#05DdW+ZQRT zObPFcm3_ykGcLlbf199RD={I!AJrDcspicy&sGmO6>lEI>3#rd`#^z_EZA=S?&<*n z7vdx^(g_JUa`f`;;T4G~`{Tr#dJDD$LFR$u&Ycg!{8CPJjtS)KdIA8zD4Fpt_4-lAC|P zMqPy71|m2lZdGjKWc8*{7Y7?+Hx-x04|M4u6u-I!bjf1C#gE?eI@FX1wz=otSOxn` z@8LY}^E{mMp38-8{O^!Xk(~$@fzh4~qF3gxpDXt(fa$7xngggxDdPu|ea_VmcXwuyK zNC6JCo4~<1B1vAsOs(dHwVD@-=$*JaaRYq)PB_*ykYEp1p;>wmaWycG4jcZ zwsloLE>teGI-L90#y;fy;E0OdZy6Xi=spX>f*u9QB?_Q$(uVd%y>fnOGv2-F{0gwr zS*HutW1^hxr61)AMvO6yOrd%@0v7I|erb-^p#E^kg#@d`mvg?S(q zMc8EsMO8|kAEY-TWc(nb%A|{~^D79IcN^`gumZ&jtVX17wa$0)kxaK{*tG^9z#x p4rM{lzbH^1ausO Mr>mdKI;Vst0Mcn$6#xJL literal 0 HcmV?d00001 diff --git a/core/img/filetypes/image.png b/core/img/filetypes/image.png new file mode 100644 index 0000000000000000000000000000000000000000..8ff5e6c119fda8354bd7ab90ea3ed8345d20e00a GIT binary patch literal 486 zcmV@P)o|@-ya-rp z9|7FgN=s`k0IcQ|7;3?7N9}ITaF+mg)INO*Y?}pUZq{1Ak0SJg_*PP$$AtIuUG3ME|E=|)wN|^%)06+-Q zYT;x7BHEN2EnN~}7-j%2hSp3HsD)SbN)S=P%!zBy(E=Uey%M#)I~gS~5Z;n#_T7c^ zD;N>}BSAzvDdib65B7buz=UuB-?yB(>jm$pw*^zf_oa0L=)DP(Zu<88|9}0E?jb=T2}K9q(?IPK>tt{5i9da-f9Ax-gL03U z-Y7N-G4b*8>MWYSv~F^iB?UjQsv(fQ$10(~@_~c% rVR<&TV~bP0l+XkKOdo98 literal 0 HcmV?d00001 diff --git a/core/img/filetypes/text-calendar.png b/core/img/filetypes/text-calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..f21c3a9951d2e7188a5c2980fa63463f268b5afe GIT binary patch literal 570 zcmV-A0>%A_P)2Jqbj&1Q4LG)-rmLCj3HZ9DidY2Ot{rBXc3Z~!18-=4qz3Sxj5AO?s5 zya3N`QLEJg&kLW``}x4tOFEs_z~H~&8o(9+Boc|PWm#hdux;CWdF2-U6%axk0(cy2 zs=pqklm|lq*=+V!2(b#_0>INZ1V0hcIWsS3GMT$?=>JFc2AJlu%{fz>SO5S307*qo IM6N<$f;U9yc>n+a literal 0 HcmV?d00001 diff --git a/core/img/filetypes/text-code.png b/core/img/filetypes/text-code.png new file mode 100644 index 0000000000000000000000000000000000000000..69744e499e6edae39545353f6ebfebb0bb3fdfcd GIT binary patch literal 591 zcmV-V0OyWQ@G zFt6h{D~4h8n0cR>uWj3|ECisGDhnZg1K4;j?Tp9cbH{O3W`&PNqYD7L06;`*zVBZu zrOK%Qg3bY~YeRSae&5sm)oOJL;8rWIN3F!ncfhi&k`Uq-UONwT;=1l(tJU&nJ;%({ z>2!_(9BK83TrRg=uh;vL0BOV1Lc9T3G&~K&3&66%lS0sYgeQTZ_X>{-G4C9RbxOt& z5rxhbwFRfH>mDq!1-5Nl%xr4)*DVN&%Z7*(4#fWq6G6lc{|8_h5J|#k0xSZNG&~d_ z4Mdu7V9wvL(P-QN*ak4vhBhjdilO^^yAm{&?U@jS0eL}yW* dXUdc*&>#NogdH4}#;yPW002ovPDHLkV1j4t|84*P literal 0 HcmV?d00001 diff --git a/core/img/filetypes/text-vcard.png b/core/img/filetypes/text-vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..087eadaabd123e5e7ecd60b6c0351be96313060b GIT binary patch literal 889 zcmV-<1BU#GP)%*g1QSqCUObqi zQS>6x+cS&E9&!p{hzF5HlB_#5J=YKvCxRyxkDB1Y1T~P=gZLkew3Aga>Mm>d=VfMT zlAfL(c2*DiPSy3*``)jryQ{0=|M-`~reV_UcI%Svm$XMxvbMH%eqmwZ&us^gWN{of zB^?1~a?)?Wu_Q@eY_(c{m3ahP0f^)H6-lpNRUF_3;K*J31(IwG{33{@a4n+W#*E;9)NsW5#W=F0oK>oF9Pc$ay|ygvg|xi`i=vb z*@qJY40f@j1=6J~%enx~X7fj2aZLTwQ51bNF#tdmMK4KuC)XuOkI&D~UmkWONpjfC zULRqx;+%VK4B%)0GgA-*XL4OXG@H$H`7y0lE34P*^FVfWewwBS!!R8CrW9@@?RNWC zGkX%41MVJr0;hpEilPt9OvCZs`)`5SoW({IMLY9jDgnfCyjRj;Ne6&hN#5tcqI2$) zq(`zWI|ba5(*->1oO>e-!#^qkc<&DYZvt){buO*|*O%zONIL19>(0&1eO5Fe{|r1f zVR6P32e`@1p3kyu#e4tW^78USWdNmn_7vjLAPC;~-k0g;HPO;m$V5`=}_vuKMU-i zBEuJrM&ll+ekh&x1G;qJLeuYvtz)|TP(Z^91ntE^L9@3W76$* z>l+&z_YDm8n%SL_W`P@loxpX#@4y;x+04F|^bK$kIFlsFg>gSB|GoGdVS^MiG*5vO P00000NkvXXu0mjf=ai3E literal 0 HcmV?d00001 diff --git a/core/img/filetypes/text.png b/core/img/filetypes/text.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bec70cf43e2deacb8b42f2f9201693a7329922 GIT binary patch literal 382 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0w&JzX3_ zB3j=D8}c;gUMskwlO8t+F5=_|()hZg6 z%M`5eDX*^HUR-R<@SpDqci&@~&J3+m%|}*Ui>7AI5)agW%)ROG`*Iyq-`i2suKu3k z&^kl;(XsD;_h~UPFl;v9`9AMCZ5rFrS^l;fQc@&cfHfX5L>N z&B(Chr&izN=GVKN>->df&s7I{_DoW_$#_5|Hpiury(7cN#XtU*Mx%{}y26(OyEQdl zPyMDHkjPcEFs8B3AyreO>4fv!@CDun&kIlRYh2@gYrVsCCQ+6qspqU65wEA$$*+rP W3u#_8y^^pny literal 0 HcmV?d00001 diff --git a/core/img/filetypes/video.png b/core/img/filetypes/video.png new file mode 100644 index 0000000000000000000000000000000000000000..7cc1ecdc46a0e9cb0b0d1653b6a75450e79a101c GIT binary patch literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0w!JzX3_ zB3j>0Gvs126mY$-CwJoBu|r{dj_+@om&BK}`s|^oYL(m=j@=5gc!Uq`(Nbyr?~&%T z;N$y}%LmT9J7A^pUFRjk1@*~+4;g-EZkV;+w|{sWx5}P#W$K|vDqTA55+Co+f2jSR zuRU~qg-1EV*9K;B<-=zCd)HU8pJL?sFDa2z|Nqzi^R-vq6=SjtE+2Rm{(s`n+s;P~ zt~_9V@oS-;hDvj{K2R>=YXqcJciGzt}}{uWSP&+Z{%h%M2TLHr&}_^uxKKYA1uW#0LS1QiiKV zjCu|lyuAMeB+jxPzQ-u?oXP9*i3j|R7h@di+5et|i`dxM+WzzK>@zSEwre$E z`7l9VgZ;q470eMASXnlS86^dK=zd6y`ct3suc7_G3T8K1gI5iK>^)Wti}f7zS7-9F u*{}e`Dr63vI8e|MH|^5pb%6#y7#U`~=9jPJ$$JcR3xlVtpUXO@geCw>5>i?K literal 0 HcmV?d00001 diff --git a/core/img/filetypes/x-office-spreadsheet.png b/core/img/filetypes/x-office-spreadsheet.png new file mode 100644 index 0000000000000000000000000000000000000000..8f79c32fe01e201d5c5e458327628b0c31d4712d GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8wRq zq}PKmW1Q4P8K9tKiEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0w|JzX3_ zB3hFZBwjWM#wJ{g+rOEIhsRB1*6z-!FM}%>TzsX74G8w%|6jS?|E~Ng z=RW2Y%>Rt7HvId&Gxw62|GvgT29_H|n>N0iyIDCTV}Zyn&6&stIZ`=L)azg`y7fPou ztFk0COnkWi-2eY8BImE;JHW6(3x| t3?|r?GWT7&uy1is4^N2ap2O@63>Er*tv0Ubn}J?t@O1TaS?83{1OPesgeU+2 literal 0 HcmV?d00001 diff --git a/core/img/logo-icon.png b/core/img/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6874c83673fdf0810515fce0c1bd0fd69bc81209 GIT binary patch literal 1197 zcmV;e1XBBnP) z?(B2-K6j4y3eyiZ_ujMDUVE*x*IxT^Ya}rg8CGorsztRNuc=bMC#a<3Q-N22ZNOi^ zKHxpzmI~U?hoqBTPLuSsq+X@-zNB+1V9SY8Q-S3646r6bt{J!*`1jvm*XR`xqEry*=xX=z#SR%90tzL!=Mm(CAWL%?=-+x zpf01Haloa(W5CV81%o%uPhO5s^E}%NOe#aybl?f#L*O8=0XVOG)BMEFy%6m{572~# z{C@Y@4U8(1J>=we0-eBU;3`+91HD+jC~zyV5SR~iQXl?#U(!=iic1iOk zZ7i{t7if}ng`|%>b!$$gb^KM}{*<~0ump7gScgSM42OY6;5y*G#Pe2Qc3D;yGsri0 zQ(*Mol~gC`pNNqzrdLwEELsZelr*B+BR&kvy6308Q(ztz5mU?TqYYSr?dV#7iNIXo zM=W`E0DqRFIBQm)iG|w5z&oTn4e$YQ1LZqi=x;H$zQ4@C<@a~sQD;jwB12<>`X{EX zlI{+K>LN*dG6(oT+9j$h&;y)K+&$eiU=FYyTShNTl?-IRLxF7CENP*nU6K|{>P*z#j{#>DR-i85N!fk1fuCh7K+y8V)7NIDuB zs!5JWYH*)1Y?5@R=lQoPBh-%q_X5XD$c)2A#V2zKunaq8?F;mkWH+z~xD5-}5M97i zz)POG4c->Mx8W)ElD z&PE$WkrY;zf~A#$3KljN>R+H@Ar^sCF`!6DBr0knC`s1h-i77ey&so5FAfa5Ftan? zw>$geg&3pFlr5W@{eJ-1I*1@4gn&Jm#7De~F|O1a9AoTDF@sNtiGIg?CzaQw z){Xq|dxYdeP%*%BPb*DgM1>p-N*r}3*Iab6cI?B8$$ zlXU=Y^_aX@eS)K908jrhKwEE0-U%r{b4UOYv)wME3B!}gb|(e6rnT*cA!F@M$fkc? zLI`_tQtLWyWO^hWGyr)SW1L3$Nto2fGlQ*x`Kkv=UItwsyV{+)06zx|@MXPMa|tGJ z5ihiE#f?n+8lK}4cDG}96k(Nw5XNx^2ek?_)lse4TF$<5Iny~jiZOofh}SE?pk>p4 aPX7Wc-@h|B0laJg00004@60&iv}MioW@dtJ_01z*Nk1Tg22WQ%mvv4FO#n@+GO7Ro literal 0 HcmV?d00001 diff --git a/core/img/places/home.png b/core/img/places/home.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0313d59a7a5c8502f81dc8806c2429e744b1cc GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!dVo)e>;M1%flPuxX{z5mpd#Lq zAirP+b1NHLJ9`I5C+GSGk1x^oKnW{P7srr_TU*aqaxp0IuwLAeU;O`bm%=QOY5Vf* z6h8^=dCS3f;cS3&l67wTnTzG|zDp9Wls5nSn7u*m%~>`j7Z1@EkQ+Q*{an^LB{Ts5 Dw39L? literal 0 HcmV?d00001 diff --git a/core/img/places/link.png b/core/img/places/link.png new file mode 100644 index 0000000000000000000000000000000000000000..8ba9f6530fb65e1b245ccc0ed661d8431381b7fc GIT binary patch literal 845 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabRA=0V6+SH332`Z|36S9G&I!M*jQUz zTSZ01($Z2_R~N|D)6+9GH8nIe1d>25kYQ$K24ol+837q4CMFOzL;-|^2tvexx`14u zI8Z%A9Igdf8ALIVL}S3!z;!{?KuDmO5Mv>-a5X>%P#mHLnT>2XvN;s8^(N-=0fR5I zB*-tAfr*)wjh$0aL`*_TR!&|~Sw&4(`U?Gykhm*bsINr+p%-cfg{IHoH}#%{Dq5GZ`{27;L+nJ&tAQK z_u=!mA3uNn`TMU=%y1Jh`a(Tj978H@ot<<&?2v;%n|YH)*-^3GZY>?98xxKT?bcuv zG2!A`{pbCEraUvlmIIdeKHWX@W{PoY`xXhu)~vRLfvPvIyzMrA!Wfgjs^^!~-%W8{ zm#rD%XYZXjN3Z&?Rra$^y{ys3@sfMK zjyLzt?}2$K7@so?i;itE@aBWbUvXg(t zoY}t^MARE@F>cJ~ko)_`@NeYmg^a6XC%--ZLs?1c@*D={i1^j}4kh}qNW5#fy)xEf zN=xbKg6RitvdWw~v}^IsSzj)AGTnVLZ`biBG9@mXH=MXLMK68f4)LR$AHS;BB~0F% zJQW1XO*IAm!-A>W0k?v)z4*}Q$iB}skAc> literal 0 HcmV?d00001 diff --git a/core/img/places/music.png b/core/img/places/music.png new file mode 100644 index 0000000000000000000000000000000000000000..0670544fedc635215d1313921ac8c2cbd879c8d0 GIT binary patch literal 527 zcmV+q0`UEbP)=sCMuYC{U0Pr5?dTPW4G9ALg z&^6FC&^6F;14UFsV18cHK6&l8^8=B)M8m(z)D- z$1f(tI(aVf)wGEuoq2HX<2>6fmN6c}2z-C|>=xLLvX&HO)FmUK&V8J8N zg=MVKhO>t`q(5QV%SVsBtXp_flAbNGElInQN*0c_B02zS2{X9^W`HNlw=%E-OoaVY zU38QX9||(UKs) zU6E7`q7=&zmV62A}j66cDyDKfAnFwS6%V?4odK3;hF zizQD#q^!P}R8XVLpR%&7f`N}i%'); + var $closeButton = $(''); this.$dialog.prepend($closeButton); $closeButton.on('click', function() { self.close(); diff --git a/core/js/js.js b/core/js/js.js index 07ed396bec9b..7f98668dcb27 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -327,8 +327,8 @@ var OC={ * @return {string} */ imagePath:function(app,file){ - if(file.indexOf('.')==-1){//if no extension is given, use svg - file+='.svg'; + if(file.indexOf('.')==-1){//if no extension is given, use png or svg depending on browser support + file+=(OC.Util.hasSVGSupport())?'.svg':'.png'; } return OC.filePath(app,'img',file); }, @@ -592,7 +592,7 @@ var OC={ var arrowclass = settings.hasClass('topright') ? 'up' : 'left'; var jqxhr = $.get(OC.filePath(props.appid, '', props.scriptName), function(data) { popup.html(data).ready(function() { - popup.prepend('

'+t('core', 'Settings')+'

').show(); + popup.prepend('

'+t('core', 'Settings')+'

').show(); popup.find('.close').bind('click', function() { popup.remove(); }); @@ -613,6 +613,9 @@ var OC={ throw e; }); } + if(!OC.Util.hasSVGSupport()) { + OC.Util.replaceSVG(); + } }).show(); }, 'html'); } @@ -1354,6 +1357,49 @@ if(typeof localStorage !=='undefined' && localStorage !== null){ }; } +/** + * check if the browser support svg images + * @return {boolean} + */ +function SVGSupport() { + return SVGSupport.checkMimeType.correct && !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', "svg").createSVGRect; +} +SVGSupport.checkMimeType=function(){ + $.ajax({ + url: OC.imagePath('core','breadcrumb.svg'), + success:function(data,text,xhr){ + var headerParts=xhr.getAllResponseHeaders().split("\n"); + var headers={}; + $.each(headerParts,function(i,text){ + if(text){ + var parts=text.split(':',2); + if(parts.length===2){ + var value=parts[1].trim(); + if(value[0]==='"'){ + value=value.substr(1,value.length-2); + } + headers[parts[0].toLowerCase()]=value; + } + } + }); + if(headers["content-type"]!=='image/svg+xml'){ + OC.Util.replaceSVG(); + SVGSupport.checkMimeType.correct=false; + } + } + }); +}; +SVGSupport.checkMimeType.correct=true; + +/** + * Replace all svg images with png for browser compatibility + * @param $el + * @deprecated use OC.Util.replaceSVG instead + */ +function replaceSVG($el){ + return OC.Util.replaceSVG($el); +} + /** * prototypical inheritance functions * @todo Write documentation @@ -1471,6 +1517,12 @@ function initCore() { initSessionHeartBeat(); } + if(!OC.Util.hasSVGSupport()){ //replace all svg images with png images for browser that don't support svg + OC.Util.replaceSVG(); + }else{ + SVGSupport.checkMimeType(); + } + OC.registerMenu($('#expand'), $('#expanddiv')); // toggle for menus @@ -1739,21 +1791,24 @@ OC.Util = { }, /** * Returns whether the browser supports SVG - * @deprecated SVG is always supported (since 9.0) * @return {boolean} true if the browser supports SVG, false otherwise */ - hasSVGSupport: function(){ - return true - }, + // TODO: replace with original function + hasSVGSupport: SVGSupport, /** * If SVG is not supported, replaces the given icon's extension * from ".svg" to ".png". * If SVG is supported, return the image path as is. * @param {string} file image path with svg extension - * @deprecated SVG is always supported (since 9.0) * @return {string} fixed image path with png extension if SVG is not supported */ replaceSVGIcon: function(file) { + if (file && !OC.Util.hasSVGSupport()) { + var i = file.lastIndexOf('.svg'); + if (i >= 0) { + file = file.substr(0, i) + '.png' + file.substr(i+4); + } + } return file; }, /** @@ -1761,9 +1816,39 @@ OC.Util = { * with PNG images. * * @param $el root element from which to search, defaults to $('body') - * @deprecated SVG is always supported (since 9.0) */ - replaceSVG: function($el) {}, + replaceSVG: function($el) { + if (!$el) { + $el = $('body'); + } + $el.find('img.svg').each(function(index,element){ + element=$(element); + var src=element.attr('src'); + element.attr('src',src.substr(0, src.length-3) + 'png'); + }); + $el.find('.svg').each(function(index,element){ + element = $(element); + var background = element.css('background-image'); + if (background){ + var i = background.lastIndexOf('.svg'); + if (i >= 0){ + background = background.substr(0,i) + '.png' + background.substr(i + 4); + element.css('background-image', background); + } + } + element.find('*').each(function(index, element) { + element = $(element); + var background = element.css('background-image'); + if (background) { + var i = background.lastIndexOf('.svg'); + if(i >= 0){ + background = background.substr(0,i) + '.png' + background.substr(i + 4); + element.css('background-image', background); + } + } + }); + }); + }, /** * Fix image scaling for IE8, since background-size is not supported. diff --git a/core/js/mimetype.js b/core/js/mimetype.js index 0d30da26c265..3cc33ce28305 100644 --- a/core/js/mimetype.js +++ b/core/js/mimetype.js @@ -29,7 +29,7 @@ OC.MimeType = { * Cache that maps mimeTypes to icon urls */ _mimeTypeIcons: {}, - + /** * Return the file icon we want to use for the given mimeType. * The file needs to be present in the supplied file list @@ -60,7 +60,7 @@ OC.MimeType = { return null; }, - + /** * Return the url to icon of the given mimeType * @@ -91,14 +91,19 @@ OC.MimeType = { path += icon; } } - + // If we do not yet have an icon fall back to the default if (gotIcon === null) { path = OC.webroot + '/core/img/filetypes/'; path += OC.MimeType._getFile(mimeType, OC.MimeTypeList.files); } - path += '.svg'; + // Use svg if we can + if(OC.Util.hasSVGSupport()){ + path += '.svg'; + } else { + path += '.png'; + } // Cache the result OC.MimeType._mimeTypeIcons[mimeType] = path; @@ -106,3 +111,5 @@ OC.MimeType = { } }; + + diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index 85dee9789876..83fde1546150 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -38,7 +38,7 @@ '' + '' + '' + - '{{crudsLabel}}' + + '{{crudsLabel}}' + '' + '{{/if}}' + '