From 112b703df0d695f2f54a844c36dbf852be437ea1 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Fri, 6 May 2016 13:04:59 +0200 Subject: [PATCH] Add anchor icon in sidebar to copy permalink --- apps/files/css/detailsView.css | 13 +++++++ apps/files/js/mainfileinfodetailview.js | 38 +++++++++++++++++-- .../tests/js/mainfileinfodetailviewSpec.js | 5 +++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css index c77bb28c77..669a15c4e3 100644 --- a/apps/files/css/detailsView.css +++ b/apps/files/css/detailsView.css @@ -14,6 +14,19 @@ width: 100%; } +#app-sidebar .mainFileInfoView .icon { + display: inline-block; +} + +#app-sidebar .mainFileInfoView .permalink { + margin-left: 10px; + opacity: .5; +} +#app-sidebar .mainFileInfoView .permalink-field>input { + clear: both; + width: 90%; +} + #app-sidebar .file-details-container { display: inline-block; float: left; diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js index 1bcb4873c5..c586135b9c 100644 --- a/apps/files/js/mainfileinfodetailview.js +++ b/apps/files/js/mainfileinfodetailview.js @@ -12,7 +12,13 @@ var TEMPLATE = '
' + '
' + - '

{{name}}

' + + '
' + + '

{{name}}

' + + '' + + '
' + '
' + ' ' + @@ -20,6 +26,9 @@ ' ' + ' {{#if hasSize}}{{size}}, {{/if}}{{date}}' + '
' + + '
' + + ''; /** @@ -50,7 +59,9 @@ events: { 'click a.action-favorite': '_onClickFavorite', - 'click a.action-default': '_onClickDefaultAction' + 'click a.action-default': '_onClickDefaultAction', + 'click a.permalink': '_onClickPermalink', + 'focus .permalink-field>input': '_onFocusPermalink' }, template: function(data) { @@ -72,6 +83,20 @@ } }, + _onClickPermalink: function() { + var $row = this.$('.permalink-field'); + $row.toggleClass('hidden'); + if (!$row.hasClass('hidden')) { + $row.find('>input').focus(); + } + // cancel click, user must right-click + copy or middle click + return false; + }, + + _onFocusPermalink: function() { + this.$('.permalink-field>input').select(); + }, + _onClickFavorite: function(event) { event.preventDefault(); this._fileActions.triggerAction('Favorite', this.model, this._fileList); @@ -87,6 +112,11 @@ this.render(); }, + _makePermalink: function(fileId) { + var baseUrl = OC.getProtocol() + '://' + OC.getHost(); + return baseUrl + OC.generateUrl('/f/{fileId}', {fileId: fileId}); + }, + setFileInfo: function(fileInfo) { if (this.model) { this.model.off('change', this._onModelChanged, this); @@ -118,7 +148,9 @@ altDate: OC.Util.formatDate(this.model.get('mtime')), date: OC.Util.relativeModifiedDate(this.model.get('mtime')), starAltText: isFavorite ? t('files', 'Favorited') : t('files', 'Favorite'), - starIcon: OC.imagePath('core', isFavorite ? 'actions/starred' : 'actions/star') + starIcon: OC.imagePath('core', isFavorite ? 'actions/starred' : 'actions/star'), + permalink: this._makePermalink(this.model.get('id')), + permalinkTitle: t('files', 'Local link') })); // TODO: we really need OC.Previews diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js index 460629806c..e81adbcf7a 100644 --- a/apps/files/tests/js/mainfileinfodetailviewSpec.js +++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js @@ -62,6 +62,11 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { expect(view.$el.find('.date').attr('title')).toEqual(dateExpected); clock.restore(); }); + it('displays permalink', function() { + view.setFileInfo(testFileInfo); + expect(view.$el.find('.permalink').attr('href')) + .toEqual(OC.getProtocol() + '://' + OC.getHost() + OC.generateUrl('/f/5')); + }); it('displays favorite icon', function() { testFileInfo.set('tags', [OC.TAG_FAVORITE]); view.setFileInfo(testFileInfo);