summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2019-02-03 19:56:44 +0100
committerRoeland Jago Douma <roeland@famdouma.nl>2019-02-13 22:20:07 +0100
commit7f886541473fb73591a8930e322250cdc6496bfc (patch)
treec0025ae7b41bece3a8c6897a093f5ceb6d5d57f7
parent53e8957a556af086ce66b8eba45f0013391d7f0d (diff)
downloadnextcloud-server-7f886541473fb73591a8930e322250cdc6496bfc.tar.gz
nextcloud-server-7f886541473fb73591a8930e322250cdc6496bfc.zip
Move of files_versions to webpack
* Move CSS into bundle * Old merged.json no longer needed! * No need to load the style still Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
-rw-r--r--.gitattributes2
-rw-r--r--apps/files_versions/.l10nignore3
-rw-r--r--apps/files_versions/appinfo/app.php2
-rw-r--r--apps/files_versions/js/files_versions.js2
-rw-r--r--apps/files_versions/js/files_versions.js.map1
-rw-r--r--apps/files_versions/js/merged.json7
-rw-r--r--apps/files_versions/lib/Hooks.php2
-rw-r--r--apps/files_versions/src/css/versions.css (renamed from apps/files_versions/css/versions.css)0
-rw-r--r--apps/files_versions/src/files_versions.js8
-rw-r--r--apps/files_versions/src/filesplugin.js (renamed from apps/files_versions/js/filesplugin.js)0
-rw-r--r--apps/files_versions/src/templates.js (renamed from apps/files_versions/js/templates.js)0
-rw-r--r--apps/files_versions/src/templates/item.handlebars (renamed from apps/files_versions/js/templates/item.handlebars)0
-rw-r--r--apps/files_versions/src/templates/template.handlebars (renamed from apps/files_versions/js/templates/template.handlebars)0
-rw-r--r--apps/files_versions/src/versioncollection.js (renamed from apps/files_versions/js/versioncollection.js)0
-rw-r--r--apps/files_versions/src/versionmodel.js (renamed from apps/files_versions/js/versionmodel.js)0
-rw-r--r--apps/files_versions/src/versionstabview.js (renamed from apps/files_versions/js/versionstabview.js)0
-rw-r--r--apps/files_versions/webpack.js37
-rw-r--r--core/js/core.json2
-rw-r--r--tests/karma.config.js15
-rw-r--r--webpack.common.js7
20 files changed, 61 insertions, 27 deletions
diff --git a/.gitattributes b/.gitattributes
index b2dea06fd7c..32f68e85b57 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3,6 +3,8 @@
/apps/accessibility/js/accessibility.js binary
/apps/accessibility/js/accessibility.js.map binary
+/apps/files_versions/js/files_versions.js binary
+/apps/files_versions/js/files_versions.js.map binary
/apps/oauth2/js/oauth2.js binary
/apps/oauth2/js/oauth2.js.map binary
/apps/twofactor_backupcodes/js/*.js binary
diff --git a/apps/files_versions/.l10nignore b/apps/files_versions/.l10nignore
index 8b832897e3f..a5844cfefe9 100644
--- a/apps/files_versions/.l10nignore
+++ b/apps/files_versions/.l10nignore
@@ -1,2 +1,3 @@
# compiled vue templates
-js/templates.js
+js/files_versions.js
+src/templates.js
diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index 1ac7d40689e..f28210553c2 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -22,6 +22,4 @@
*
*/
-\OCP\Util::addStyle('files_versions', 'versions');
-
\OCA\Files_Versions\Hooks::connectHooks();
diff --git a/apps/files_versions/js/files_versions.js b/apps/files_versions/js/files_versions.js
new file mode 100644
index 00000000000..4405671a101
--- /dev/null
+++ b/apps/files_versions/js/files_versions.js
@@ -0,0 +1,2 @@
+!function(e){var t={};function n(i){if(t[i])return t[i].exports;var r=t[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(i,r,function(t){return e[t]}.bind(null,r));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/js/",n(n.s=0)}([function(e,t,n){"use strict";n.r(t);n(1),n(2),n(3),n(4),n(5),n(6);window.OCA.Versions=OCA.Versions},function(e,t){var n;n=OC.Backbone.Model.extend({sync:OC.Backbone.davSync,davProperties:{size:"{DAV:}getcontentlength",mimetype:"{DAV:}getcontenttype",timestamp:"{DAV:}getlastmodified"},revert:function(e){e=e?_.clone(e):{};var t=this;return this.get("client").move("/versions/"+this.get("fileId")+"/"+this.get("id"),"/restore/target",!0).done(function(){e.success&&e.success.call(e.context,t,{},e),t.trigger("revert",t,e)}).fail(function(){e.error&&e.error.call(e.context,t,{},e),t.trigger("error",t,{},e)})},getFullPath:function(){return this.get("fullPath")},getPreviewUrl:function(){var e=OC.generateUrl("/apps/files_versions/preview"),t={file:this.get("fullPath"),version:this.get("timestamp")};return e+"?"+OC.buildQueryString(t)},getDownloadUrl:function(){return OC.linkToRemoteBase("dav")+"/versions/"+this.get("user")+"/versions/"+this.get("fileId")+"/"+this.get("id")}}),OCA.Versions=OCA.Versions||{},OCA.Versions.VersionModel=n},function(e,t){function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var i,r;i=Handlebars.template,(r=OCA.Versions.Templates=OCA.Versions.Templates||{}).item=i({1:function(e,t,i,r,o){var s,l=null!=t?t:e.nullContext||{},a=i.helperMissing,c=e.escapeExpression;return'\t\t\t\t<div class="version-details">\n\t\t\t\t\t<span class="size has-tooltip" title="'+c("function"===n(s=null!=(s=i.altSize||(null!=t?t.altSize:t))?s:a)?s.call(l,{name:"altSize",hash:{},data:o}):s)+'">'+c("function"===n(s=null!=(s=i.humanReadableSize||(null!=t?t.humanReadableSize:t))?s:a)?s.call(l,{name:"humanReadableSize",hash:{},data:o}):s)+"</span>\n\t\t\t\t</div>\n"},3:function(e,t,i,r,o){var s,l=null!=t?t:e.nullContext||{},a=i.helperMissing,c=e.escapeExpression;return'\t\t\t<a href="#" class="revertVersion" title="'+c("function"===n(s=null!=(s=i.revertLabel||(null!=t?t.revertLabel:t))?s:a)?s.call(l,{name:"revertLabel",hash:{},data:o}):s)+'"><img src="'+c("function"===n(s=null!=(s=i.revertIconUrl||(null!=t?t.revertIconUrl:t))?s:a)?s.call(l,{name:"revertIconUrl",hash:{},data:o}):s)+'" /></a>\n'},compiler:[7,">= 4.0.0"],main:function(e,t,i,r,o){var s,l,a,c=null!=t?t:e.nullContext||{},u=i.helperMissing,f="function",d=e.escapeExpression,p=i.blockHelperMissing,h='<li data-revision="'+d(n(l=null!=(l=i.timestamp||(null!=t?t.timestamp:t))?l:u)===f?l.call(c,{name:"timestamp",hash:{},data:o}):l)+'">\n\t<div>\n\t\t<div class="preview-container">\n\t\t\t<img class="preview" src="'+d(n(l=null!=(l=i.previewUrl||(null!=t?t.previewUrl:t))?l:u)===f?l.call(c,{name:"previewUrl",hash:{},data:o}):l)+'" width="44" height="44"/>\n\t\t</div>\n\t\t<div class="version-container">\n\t\t\t<div>\n\t\t\t\t<a href="'+d(n(l=null!=(l=i.downloadUrl||(null!=t?t.downloadUrl:t))?l:u)===f?l.call(c,{name:"downloadUrl",hash:{},data:o}):l)+'" class="downloadVersion" download="'+d(n(l=null!=(l=i.downloadName||(null!=t?t.downloadName:t))?l:u)===f?l.call(c,{name:"downloadName",hash:{},data:o}):l)+'"><img src="'+d(n(l=null!=(l=i.downloadIconUrl||(null!=t?t.downloadIconUrl:t))?l:u)===f?l.call(c,{name:"downloadIconUrl",hash:{},data:o}):l)+'" />\n\t\t\t\t\t<span class="versiondate has-tooltip live-relative-timestamp" data-timestamp="'+d(n(l=null!=(l=i.millisecondsTimestamp||(null!=t?t.millisecondsTimestamp:t))?l:u)===f?l.call(c,{name:"millisecondsTimestamp",hash:{},data:o}):l)+'" title="'+d(n(l=null!=(l=i.formattedTimestamp||(null!=t?t.formattedTimestamp:t))?l:u)===f?l.call(c,{name:"formattedTimestamp",hash:{},data:o}):l)+'">'+d(n(l=null!=(l=i.relativeTimestamp||(null!=t?t.relativeTimestamp:t))?l:u)===f?l.call(c,{name:"relativeTimestamp",hash:{},data:o}):l)+"</span>\n\t\t\t\t</a>\n\t\t\t</div>\n";return l=null!=(l=i.hasDetails||(null!=t?t.hasDetails:t))?l:u,a={name:"hasDetails",hash:{},fn:e.program(1,o,0),inverse:e.noop,data:o},s=n(l)===f?l.call(c,a):l,i.hasDetails||(s=p.call(t,s,a)),null!=s&&(h+=s),h+="\t\t</div>\n",l=null!=(l=i.canRevert||(null!=t?t.canRevert:t))?l:u,a={name:"canRevert",hash:{},fn:e.program(3,o,0),inverse:e.noop,data:o},s=n(l)===f?l.call(c,a):l,i.canRevert||(s=p.call(t,s,a)),null!=s&&(h+=s),h+"\t</div>\n</li>\n"},useData:!0}),r.template=i({compiler:[7,">= 4.0.0"],main:function(e,t,i,r,o){var s,l=null!=t?t:e.nullContext||{},a=i.helperMissing,c=e.escapeExpression;return'<ul class="versions"></ul>\n<div class="clear-float"></div>\n<div class="empty hidden">\n\t<div class="emptycontent">\n\t\t<div class="icon-history"></div>\n\t\t<p>'+c("function"===n(s=null!=(s=i.emptyResultLabel||(null!=t?t.emptyResultLabel:t))?s:a)?s.call(l,{name:"emptyResultLabel",hash:{},data:o}):s)+'</p>\n\t</div>\n</div>\n<input type="button" class="showMoreVersions hidden" value="'+c("function"===n(s=null!=(s=i.moreVersionsLabel||(null!=t?t.moreVersionsLabel:t))?s:a)?s.call(l,{name:"moreVersionsLabel",hash:{},data:o}):s)+'" name="show-more-versions" id="show-more-versions" />\n<div class="loading hidden" style="height: 50px"></div>\n'},useData:!0})},function(e,t){var n;n=OC.Backbone.Collection.extend({model:OCA.Versions.VersionModel,sync:OC.Backbone.davSync,_fileInfo:null,_currentUser:null,_client:null,setFileInfo:function(e){this._fileInfo=e},getFileInfo:function(){return this._fileInfo},setCurrentUser:function(e){this._currentUser=e},getCurrentUser:function(){return this._currentUser||OC.getCurrentUser().uid},setClient:function(e){this._client=e},getClient:function(){return this._client||new OC.Files.Client({host:OC.getHost(),root:OC.linkToRemoteBase("dav")+"/versions/"+this.getCurrentUser(),useHTTPS:"https"===OC.getProtocol()})},url:function(){return OC.linkToRemoteBase("dav")+"/versions/"+this.getCurrentUser()+"/versions/"+this._fileInfo.get("id")},parse:function(e){var t=this._fileInfo.getFullPath(),n=this._fileInfo.get("id"),i=this._fileInfo.get("name"),r=this.getCurrentUser(),o=this.getClient();return _.map(e,function(e){return e.fullPath=t,e.fileId=n,e.name=i,e.timestamp=parseInt(moment(new Date(e.timestamp)).format("X"),10),e.id=parseInt(OC.basename(e.href),10),e.size=parseInt(e.size,10),e.user=r,e.client=o,e})}}),OCA.Versions=OCA.Versions||{},OCA.Versions.VersionCollection=n},function(e,i){var r;r=OCA.Files.DetailTabView.extend({id:"versionsTabView",className:"tab versionsTabView",_template:null,$versionsContainer:null,events:{"click .revertVersion":"_onClickRevertVersion"},initialize:function(){OCA.Files.DetailTabView.prototype.initialize.apply(this,arguments),this.collection=new OCA.Versions.VersionCollection,this.collection.on("request",this._onRequest,this),this.collection.on("sync",this._onEndRequest,this),this.collection.on("update",this._onUpdate,this),this.collection.on("error",this._onError,this),this.collection.on("add",this._onAddModel,this)},getLabel:function(){return t("files_versions","Versions")},getIcon:function(){return"icon-history"},nextPage:function(){this._loading||this.collection.getFileInfo()&&this.collection.getFileInfo().isDirectory()||this.collection.fetch()},_onClickRevertVersion:function(e){var n,i=this,r=$(e.target),o=this.collection.getFileInfo();r.is("li")||(r=r.closest("li")),e.preventDefault(),n=r.attr("data-revision");var s=this.collection.get(n);s.revert({success:function(){i.$versionsContainer.empty(),i.collection.setFileInfo(o),i.collection.reset([],{silent:!0}),i.collection.fetch(),i.$el.find(".versions").removeClass("hidden"),o.trigger("busy",o,!1),o.set({size:s.get("size"),mtime:1e3*s.get("timestamp"),etag:s.get("id")+s.get("timestamp")})},error:function(){o.trigger("busy",o,!1),i.$el.find(".versions").removeClass("hidden"),i._toggleLoading(!1),OC.Notification.show(t("files_version","Failed to revert {file} to revision {timestamp}.",{file:s.getFullPath(),timestamp:OC.Util.formatDate(1e3*s.get("timestamp"))}),{type:"error"})}}),this._toggleLoading(!0),o.trigger("busy",o,!0)},_toggleLoading:function(e){this._loading=e,this.$el.find(".loading").toggleClass("hidden",!e)},_onRequest:function(){this._toggleLoading(!0)},_onEndRequest:function(){this._toggleLoading(!1),this.$el.find(".empty").toggleClass("hidden",!!this.collection.length)},_onAddModel:function(e){var t=$(this.itemTemplate(this._formatItem(e)));this.$versionsContainer.append(t),t.find(".has-tooltip").tooltip()},template:function(e){return OCA.Versions.Templates.template(e)},itemTemplate:function(e){return OCA.Versions.Templates.item(e)},setFileInfo:function(e){e?(this.render(),this.collection.setFileInfo(e),this.collection.reset([],{silent:!0}),this.nextPage()):(this.render(),this.collection.reset())},_formatItem:function(e){var i=1e3*e.get("timestamp"),r=e.has("size")?e.get("size"):0,o=OC.MimeType.getIconUrl(e.get("mimetype")),s=new Image;return s.onload=function(){$("li[data-revision="+e.get("timestamp")+"] .preview").attr("src",e.getPreviewUrl())},s.src=e.getPreviewUrl(),_.extend({versionId:e.get("id"),formattedTimestamp:OC.Util.formatDate(i),relativeTimestamp:OC.Util.relativeModifiedDate(i),millisecondsTimestamp:i,humanReadableSize:OC.Util.humanFileSize(r,!0),altSize:n("files","%n byte","%n bytes",r),hasDetails:e.has("size"),downloadUrl:e.getDownloadUrl(),downloadIconUrl:OC.imagePath("core","actions/download"),downloadName:e.get("name"),revertIconUrl:OC.imagePath("core","actions/history"),previewUrl:o,revertLabel:t("files_versions","Restore"),canRevert:0!=(this.collection.getFileInfo().get("permissions")&OC.PERMISSION_UPDATE)},e.attributes)},render:function(){this.$el.html(this.template({emptyResultLabel:t("files_versions","No other versions available")})),this.$el.find(".has-tooltip").tooltip(),this.$versionsContainer=this.$el.find("ul.versions"),this.delegateEvents()},canDisplay:function(e){return!!e&&!e.isDirectory()}}),OCA.Versions=OCA.Versions||{},OCA.Versions.VersionsTabView=r},function(e,t){OCA.Versions=OCA.Versions||{},OCA.Versions.Util={attach:function(e){"trashbin"!==e.id&&"files.public"!==e.id&&e.registerTabView(new OCA.Versions.VersionsTabView("versionsTabView",{order:-10}))}},OC.Plugins.register("OCA.Files.FileList",OCA.Versions.Util)},function(e,t,n){var i=n(7);"string"==typeof i&&(i=[[e.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(9)(i,r);i.locals&&(e.exports=i.locals)},function(e,t,n){(e.exports=n(8)(!1)).push([e.i,".versionsTabView .clear-float {\n\tclear: both;\n}\n\n.versionsTabView li {\n\twidth: 100%;\n\tcursor: default;\n\theight: 56px;\n\tfloat: left;\n\tborder-bottom: 1px solid rgba(100,100,100,.1);\n}\n.versionsTabView li:last-child {\n\tborder-bottom: none;\n}\n\n.versionsTabView a,\n.versionsTabView div > span {\n\tvertical-align: middle;\n\topacity: .5;\n}\n\n.versionsTabView li a{\n\tpadding: 15px 10px 11px;\n}\n\n.versionsTabView a:hover,\n.versionsTabView a:focus {\n\topacity: 1;\n}\n\n.versionsTabView .preview-container {\n\tdisplay: inline-block;\n vertical-align: top;\n}\n\n.versionsTabView img {\n\tcursor: pointer;\n\tpadding-right: 4px;\n}\n\n.versionsTabView img.preview {\n\tcursor: default;\n}\n\n.versionsTabView .version-container {\n\tdisplay: inline-block;\n}\n\n.versionsTabView .versiondate {\n\tmin-width: 100px;\n\tvertical-align: super;\n}\n\n.versionsTabView .version-details {\n\ttext-align: left;\n}\n\n.versionsTabView .version-details > span {\n\tpadding: 0 10px;\n}\n\n.versionsTabView .revertVersion {\n\tcursor: pointer;\n\tfloat: right;\n\tmargin-right: -10px;\n}\n",""])},function(e,t,n){"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map(function(t){var n=function(e,t){var n=e[1]||"",i=e[3];if(!i)return n;if(t&&"function"==typeof btoa){var r=(s=i,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(s))))+" */"),o=i.sources.map(function(e){return"/*# sourceURL="+i.sourceRoot+e+" */"});return[n].concat(o).concat([r]).join("\n")}var s;return[n].join("\n")}(t,e);return t[2]?"@media "+t[2]+"{"+n+"}":n}).join("")},t.i=function(e,n){"string"==typeof e&&(e=[[null,e,""]]);for(var i={},r=0;r<this.length;r++){var o=this[r][0];null!=o&&(i[o]=!0)}for(r=0;r<e.length;r++){var s=e[r];null!=s[0]&&i[s[0]]||(n&&!s[2]?s[2]=n:n&&(s[2]="("+s[2]+") and ("+n+")"),t.push(s))}},t}},function(e,t,n){var i,r,o={},s=(i=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===r&&(r=i.apply(this,arguments)),r}),l=function(e){var t={};return function(e,n){if("function"==typeof e)return e();if(void 0===t[e]){var i=function(e,t){return t?t.querySelector(e):document.querySelector(e)}.call(this,e,n);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(e){i=null}t[e]=i}return t[e]}}(),a=null,c=0,u=[],f=n(10);function d(e,t){for(var n=0;n<e.length;n++){var i=e[n],r=o[i.id];if(r){r.refs++;for(var s=0;s<r.parts.length;s++)r.parts[s](i.parts[s]);for(;s<i.parts.length;s++)r.parts.push(b(i.parts[s],t))}else{var l=[];for(s=0;s<i.parts.length;s++)l.push(b(i.parts[s],t));o[i.id]={id:i.id,refs:1,parts:l}}}}function p(e,t){for(var n=[],i={},r=0;r<e.length;r++){var o=e[r],s=t.base?o[0]+t.base:o[0],l={css:o[1],media:o[2],sourceMap:o[3]};i[s]?i[s].parts.push(l):n.push(i[s]={id:s,parts:[l]})}return n}function h(e,t){var n=l(e.insertInto);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");var i=u[u.length-1];if("top"===e.insertAt)i?i.nextSibling?n.insertBefore(t,i.nextSibling):n.appendChild(t):n.insertBefore(t,n.firstChild),u.push(t);else if("bottom"===e.insertAt)n.appendChild(t);else{if("object"!=typeof e.insertAt||!e.insertAt.before)throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");var r=l(e.insertAt.before,n);n.insertBefore(t,r)}}function m(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e);var t=u.indexOf(e);t>=0&&u.splice(t,1)}function v(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var i=function(){0;return n.nc}();i&&(e.attrs.nonce=i)}return g(t,e.attrs),h(e,t),t}function g(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function b(e,t){var n,i,r,o;if(t.transform&&e.css){if(!(o="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=o}if(t.singleton){var s=c++;n=a||(a=v(t)),i=C.bind(null,n,s,!1),r=C.bind(null,n,s,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",g(t,e.attrs),h(e,t),t}(t),i=function(e,t,n){var i=n.css,r=n.sourceMap,o=void 0===t.convertToAbsoluteUrls&&r;(t.convertToAbsoluteUrls||o)&&(i=f(i));r&&(i+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var s=new Blob([i],{type:"text/css"}),l=e.href;e.href=URL.createObjectURL(s),l&&URL.revokeObjectURL(l)}.bind(null,n,t),r=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=v(t),i=function(e,t){var n=t.css,i=t.media;i&&e.setAttribute("media",i);if(e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}.bind(null,n),r=function(){m(n)});return i(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;i(e=t)}else r()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=s()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var n=p(e,t);return d(n,t),function(e){for(var i=[],r=0;r<n.length;r++){var s=n[r];(l=o[s.id]).refs--,i.push(l)}e&&d(p(e,t),t);for(r=0;r<i.length;r++){var l;if(0===(l=i[r]).refs){for(var a=0;a<l.parts.length;a++)l.parts[a]();delete o[l.id]}}}};var y,w=(y=[],function(e,t){return y[e]=t,y.filter(Boolean).join("\n")});function C(e,t,n,i){var r=n?"":i.css;if(e.styleSheet)e.styleSheet.cssText=w(t,r);else{var o=document.createTextNode(r),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}},function(e,t){e.exports=function(e){var t="undefined"!=typeof window&&window.location;if(!t)throw new Error("fixUrls requires window.location");if(!e||"string"!=typeof e)return e;var n=t.protocol+"//"+t.host,i=n+t.pathname.replace(/\/[^\/]*$/,"/");return e.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,function(e,t){var r,o=t.trim().replace(/^"(.*)"$/,function(e,t){return t}).replace(/^'(.*)'$/,function(e,t){return t});return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(o)?e:(r=0===o.indexOf("//")?o:0===o.indexOf("/")?n+o:i+o.replace(/^\.\//,""),"url("+JSON.stringify(r)+")")})}}]);
+//# sourceMappingURL=files_versions.js.map \ No newline at end of file
diff --git a/apps/files_versions/js/files_versions.js.map b/apps/files_versions/js/files_versions.js.map
new file mode 100644
index 00000000000..ea95c34bf27
--- /dev/null
+++ b/apps/files_versions/js/files_versions.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./apps/files_versions/src/files_versions.js","webpack:///./apps/files_versions/src/versionmodel.js","webpack:///./apps/files_versions/src/templates.js","webpack:///./apps/files_versions/src/versioncollection.js","webpack:///./apps/files_versions/src/versionstabview.js","webpack:///./apps/files_versions/src/filesplugin.js","webpack:///./apps/files_versions/src/css/versions.css?fc88","webpack:///./apps/files_versions/src/css/versions.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/style-loader/lib/addStyles.js","webpack:///./node_modules/style-loader/lib/urls.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","__webpack_exports__","window","OCA","Versions","VersionModel","OC","Backbone","Model","extend","sync","davSync","davProperties","size","mimetype","timestamp","revert","options","_","clone","model","this","move","done","success","context","trigger","fail","error","getFullPath","getPreviewUrl","url","generateUrl","params","file","version","buildQueryString","getDownloadUrl","linkToRemoteBase","template","templates","Handlebars","Templates","1","container","depth0","helpers","partials","data","helper","alias1","nullContext","alias2","helperMissing","alias4","escapeExpression","_typeof","altSize","hash","humanReadableSize","3","revertLabel","revertIconUrl","compiler","main","stack1","alias3","alias5","blockHelperMissing","buffer","previewUrl","downloadUrl","downloadName","downloadIconUrl","millisecondsTimestamp","formattedTimestamp","relativeTimestamp","hasDetails","fn","program","inverse","noop","canRevert","useData","emptyResultLabel","moreVersionsLabel","VersionCollection","Collection","_fileInfo","_currentUser","_client","setFileInfo","fileInfo","getFileInfo","setCurrentUser","user","getCurrentUser","uid","setClient","client","getClient","Files","Client","host","getHost","root","useHTTPS","getProtocol","parse","result","fullPath","fileId","map","parseInt","moment","Date","format","id","basename","href","VersionsTabView","DetailTabView","className","_template","$versionsContainer","events","click .revertVersion","initialize","apply","arguments","collection","on","_onRequest","_onEndRequest","_onUpdate","_onError","_onAddModel","getLabel","getIcon","nextPage","_loading","isDirectory","fetch","_onClickRevertVersion","ev","revision","self","$target","$","target","fileInfoModel","is","closest","preventDefault","attr","versionModel","empty","reset","silent","$el","find","removeClass","set","mtime","etag","_toggleLoading","Notification","show","Util","formatDate","type","state","toggleClass","length","itemTemplate","_formatItem","append","tooltip","render","has","preview","MimeType","getIconUrl","img","Image","onload","src","versionId","relativeModifiedDate","humanFileSize","imagePath","PERMISSION_UPDATE","attributes","html","delegateEvents","canDisplay","attach","fileList","registerTabView","order","Plugins","register","content","hmr","transform","insertInto","undefined","locals","push","useSourceMap","list","toString","item","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","source","sourceRoot","concat","join","cssWithMappingToString","mediaQuery","alreadyImportedModules","memo","stylesInDom","isOldIE","document","all","atob","getElement","parent","styleTarget","querySelector","HTMLIFrameElement","contentDocument","head","e","singleton","singletonCounter","stylesInsertedAtTop","fixUrls","addStylesToDom","styles","domStyle","refs","j","parts","addStyle","listToStyles","newStyles","base","part","css","media","insertStyleElement","style","Error","lastStyleElementInsertedAtTop","insertAt","nextSibling","insertBefore","appendChild","firstChild","before","removeStyleElement","parentNode","removeChild","idx","indexOf","splice","createStyleElement","createElement","attrs","nonce","nc","getNonce","addAttrs","el","keys","forEach","setAttribute","obj","update","remove","default","styleIndex","applyToSingletonTag","URL","createObjectURL","revokeObjectURL","Blob","link","rel","createLinkElement","autoFixUrls","convertToAbsoluteUrls","blob","oldSrc","styleSheet","cssText","createTextNode","newObj","DEBUG","newList","mayRemove","textStore","replaceText","index","replacement","filter","Boolean","cssNode","childNodes","location","baseUrl","protocol","currentDir","pathname","replace","fullMatch","origUrl","newUrl","unquotedOrigUrl","trim","$1","test"],"mappings":"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","file":"files_versions.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/js/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import './versionmodel'\nimport './templates'\nimport './versioncollection'\nimport './versionstabview'\nimport './filesplugin'\nimport './css/versions.css'\n\nwindow.OCA.Versions = OCA.Versions\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n/* global moment */\n\n(function () {\n\t/**\n\t * @memberof OCA.Versions\n\t */\n\tvar VersionModel = OC.Backbone.Model.extend({\n\t\tsync: OC.Backbone.davSync,\n\n\t\tdavProperties: {\n\t\t\t'size': '{DAV:}getcontentlength',\n\t\t\t'mimetype': '{DAV:}getcontenttype',\n\t\t\t'timestamp': '{DAV:}getlastmodified',\n\t\t},\n\n\t\t/**\n\t\t * Restores the original file to this revision\n\t\t */\n\t\trevert: function (options) {\n\t\t\toptions = options ? _.clone(options) : {};\n\t\t\tvar model = this;\n\n\t\t\tvar client = this.get('client');\n\n\t\t\treturn client.move('/versions/' + this.get('fileId') + '/' + this.get('id'), '/restore/target', true)\n\t\t\t\t.done(function () {\n\t\t\t\t\tif (options.success) {\n\t\t\t\t\t\toptions.success.call(options.context, model, {}, options);\n\t\t\t\t\t}\n\t\t\t\t\tmodel.trigger('revert', model, options);\n\t\t\t\t})\n\t\t\t\t.fail(function () {\n\t\t\t\t\tif (options.error) {\n\t\t\t\t\t\toptions.error.call(options.context, model, {}, options);\n\t\t\t\t\t}\n\t\t\t\t\tmodel.trigger('error', model, {}, options);\n\t\t\t\t});\n\t\t},\n\n\t\tgetFullPath: function () {\n\t\t\treturn this.get('fullPath');\n\t\t},\n\n\t\tgetPreviewUrl: function () {\n\t\t\tvar url = OC.generateUrl('/apps/files_versions/preview');\n\t\t\tvar params = {\n\t\t\t\tfile: this.get('fullPath'),\n\t\t\t\tversion: this.get('timestamp')\n\t\t\t};\n\t\t\treturn url + '?' + OC.buildQueryString(params);\n\t\t},\n\n\t\tgetDownloadUrl: function () {\n\t\t\treturn OC.linkToRemoteBase('dav') + '/versions/' + this.get('user') + '/versions/' + this.get('fileId') + '/' + this.get('id');\n\t\t}\n\t});\n\n\tOCA.Versions = OCA.Versions || {};\n\n\tOCA.Versions.VersionModel = VersionModel;\n})();\n\n","(function() {\n var template = Handlebars.template, templates = OCA.Versions.Templates = OCA.Versions.Templates || {};\ntemplates['item'] = template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t\t<div class=\\\"version-details\\\">\\n\t\t\t\t\t<span class=\\\"size has-tooltip\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.altSize || (depth0 != null ? depth0.altSize : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"altSize\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.humanReadableSize || (depth0 != null ? depth0.humanReadableSize : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"humanReadableSize\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"\t\t\t<a href=\\\"#\\\" class=\\\"revertVersion\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.revertLabel || (depth0 != null ? depth0.revertLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"revertLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"><img src=\\\"\"\n + alias4(((helper = (helper = helpers.revertIconUrl || (depth0 != null ? depth0.revertIconUrl : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"revertIconUrl\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" /></a>\\n\";\n},\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, options, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression, alias5=helpers.blockHelperMissing, buffer = \n \"<li data-revision=\\\"\"\n + alias4(((helper = (helper = helpers.timestamp || (depth0 != null ? depth0.timestamp : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"timestamp\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\\n\t<div>\\n\t\t<div class=\\\"preview-container\\\">\\n\t\t\t<img class=\\\"preview\\\" src=\\\"\"\n + alias4(((helper = (helper = helpers.previewUrl || (depth0 != null ? depth0.previewUrl : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"previewUrl\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" width=\\\"44\\\" height=\\\"44\\\"/>\\n\t\t</div>\\n\t\t<div class=\\\"version-container\\\">\\n\t\t\t<div>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = helpers.downloadUrl || (depth0 != null ? depth0.downloadUrl : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"downloadUrl\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" class=\\\"downloadVersion\\\" download=\\\"\"\n + alias4(((helper = (helper = helpers.downloadName || (depth0 != null ? depth0.downloadName : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"downloadName\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\"><img src=\\\"\"\n + alias4(((helper = (helper = helpers.downloadIconUrl || (depth0 != null ? depth0.downloadIconUrl : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"downloadIconUrl\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" />\\n\t\t\t\t\t<span class=\\\"versiondate has-tooltip live-relative-timestamp\\\" data-timestamp=\\\"\"\n + alias4(((helper = (helper = helpers.millisecondsTimestamp || (depth0 != null ? depth0.millisecondsTimestamp : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"millisecondsTimestamp\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" title=\\\"\"\n + alias4(((helper = (helper = helpers.formattedTimestamp || (depth0 != null ? depth0.formattedTimestamp : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"formattedTimestamp\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = helpers.relativeTimestamp || (depth0 != null ? depth0.relativeTimestamp : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"relativeTimestamp\",\"hash\":{},\"data\":data}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</div>\\n\";\n stack1 = ((helper = (helper = helpers.hasDetails || (depth0 != null ? depth0.hasDetails : depth0)) != null ? helper : alias2),(options={\"name\":\"hasDetails\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper));\n if (!helpers.hasDetails) { stack1 = alias5.call(depth0,stack1,options)}\n if (stack1 != null) { buffer += stack1; }\n buffer += \"\t\t</div>\\n\";\n stack1 = ((helper = (helper = helpers.canRevert || (depth0 != null ? depth0.canRevert : depth0)) != null ? helper : alias2),(options={\"name\":\"canRevert\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data}),(typeof helper === alias3 ? helper.call(alias1,options) : helper));\n if (!helpers.canRevert) { stack1 = alias5.call(depth0,stack1,options)}\n if (stack1 != null) { buffer += stack1; }\n return buffer + \"\t</div>\\n</li>\\n\";\n},\"useData\":true});\ntemplates['template'] = template({\"compiler\":[7,\">= 4.0.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=helpers.helperMissing, alias3=\"function\", alias4=container.escapeExpression;\n\n return \"<ul class=\\\"versions\\\"></ul>\\n<div class=\\\"clear-float\\\"></div>\\n<div class=\\\"empty hidden\\\">\\n\t<div class=\\\"emptycontent\\\">\\n\t\t<div class=\\\"icon-history\\\"></div>\\n\t\t<p>\"\n + alias4(((helper = (helper = helpers.emptyResultLabel || (depth0 != null ? depth0.emptyResultLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"emptyResultLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"</p>\\n\t</div>\\n</div>\\n<input type=\\\"button\\\" class=\\\"showMoreVersions hidden\\\" value=\\\"\"\n + alias4(((helper = (helper = helpers.moreVersionsLabel || (depth0 != null ? depth0.moreVersionsLabel : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"moreVersionsLabel\",\"hash\":{},\"data\":data}) : helper)))\n + \"\\\" name=\\\"show-more-versions\\\" id=\\\"show-more-versions\\\" />\\n<div class=\\\"loading hidden\\\" style=\\\"height: 50px\\\"></div>\\n\";\n},\"useData\":true});\n})();","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n(function () {\n\t/**\n\t * @memberof OCA.Versions\n\t */\n\tvar VersionCollection = OC.Backbone.Collection.extend({\n\t\tmodel: OCA.Versions.VersionModel,\n\t\tsync: OC.Backbone.davSync,\n\n\t\t/**\n\t\t * @var OCA.Files.FileInfoModel\n\t\t */\n\t\t_fileInfo: null,\n\n\t\t_currentUser: null,\n\n\t\t_client: null,\n\n\t\tsetFileInfo: function (fileInfo) {\n\t\t\tthis._fileInfo = fileInfo;\n\t\t},\n\n\t\tgetFileInfo: function () {\n\t\t\treturn this._fileInfo;\n\t\t},\n\n\t\tsetCurrentUser: function(user) {\n\t\t\tthis._currentUser = user;\n\t\t},\n\n\t\tgetCurrentUser: function() {\n\t\t\treturn this._currentUser || OC.getCurrentUser().uid;\n\t\t},\n\n\t\tsetClient: function(client) {\n\t\t\tthis._client = client;\n\t\t},\n\n\t\tgetClient: function() {\n\t\t\treturn this._client || new OC.Files.Client({\n\t\t\t\thost: OC.getHost(),\n\t\t\t\troot: OC.linkToRemoteBase('dav') + '/versions/' + this.getCurrentUser(),\n\t\t\t\tuseHTTPS: OC.getProtocol() === 'https'\n\t\t\t});\n\t\t},\n\n\t\turl: function () {\n\t\t\treturn OC.linkToRemoteBase('dav') + '/versions/' + this.getCurrentUser() + '/versions/' + this._fileInfo.get('id');\n\t\t},\n\n\t\tparse: function(result) {\n\t\t\tvar fullPath = this._fileInfo.getFullPath();\n\t\t\tvar fileId = this._fileInfo.get('id');\n\t\t\tvar name = this._fileInfo.get('name');\n\t\t\tvar user = this.getCurrentUser();\n\t\t\tvar client = this.getClient();\n\t\t\treturn _.map(result, function(version) {\n\t\t\t\tversion.fullPath = fullPath;\n\t\t\t\tversion.fileId = fileId;\n\t\t\t\tversion.name = name;\n\t\t\t\tversion.timestamp = parseInt(moment(new Date(version.timestamp)).format('X'), 10);\n\t\t\t\tversion.id = parseInt(OC.basename(version.href), 10);\n\t\t\t\tversion.size = parseInt(version.size, 10);\n\t\t\t\tversion.user = user;\n\t\t\t\tversion.client = client;\n\t\t\t\treturn version;\n\t\t\t});\n\t\t}\n\t});\n\n\tOCA.Versions = OCA.Versions || {};\n\n\tOCA.Versions.VersionCollection = VersionCollection;\n})();\n\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n(function() {\n\t/**\n\t * @memberof OCA.Versions\n\t */\n\tvar VersionsTabView = OCA.Files.DetailTabView.extend(/** @lends OCA.Versions.VersionsTabView.prototype */{\n\t\tid: 'versionsTabView',\n\t\tclassName: 'tab versionsTabView',\n\n\t\t_template: null,\n\n\t\t$versionsContainer: null,\n\n\t\tevents: {\n\t\t\t'click .revertVersion': '_onClickRevertVersion'\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tOCA.Files.DetailTabView.prototype.initialize.apply(this, arguments);\n\t\t\tthis.collection = new OCA.Versions.VersionCollection();\n\t\t\tthis.collection.on('request', this._onRequest, this);\n\t\t\tthis.collection.on('sync', this._onEndRequest, this);\n\t\t\tthis.collection.on('update', this._onUpdate, this);\n\t\t\tthis.collection.on('error', this._onError, this);\n\t\t\tthis.collection.on('add', this._onAddModel, this);\n\t\t},\n\n\t\tgetLabel: function() {\n\t\t\treturn t('files_versions', 'Versions');\n\t\t},\n\n\t\tgetIcon: function() {\n\t\t\treturn 'icon-history';\n\t\t},\n\n\t\tnextPage: function() {\n\t\t\tif (this._loading) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (this.collection.getFileInfo() && this.collection.getFileInfo().isDirectory()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.collection.fetch();\n\t\t},\n\n\t\t_onClickRevertVersion: function(ev) {\n\t\t\tvar self = this;\n\t\t\tvar $target = $(ev.target);\n\t\t\tvar fileInfoModel = this.collection.getFileInfo();\n\t\t\tvar revision;\n\t\t\tif (!$target.is('li')) {\n\t\t\t\t$target = $target.closest('li');\n\t\t\t}\n\n\t\t\tev.preventDefault();\n\t\t\trevision = $target.attr('data-revision');\n\n\t\t\tvar versionModel = this.collection.get(revision);\n\t\t\tversionModel.revert({\n\t\t\t\tsuccess: function() {\n\t\t\t\t\t// reset and re-fetch the updated collection\n\t\t\t\t\tself.$versionsContainer.empty();\n\t\t\t\t\tself.collection.setFileInfo(fileInfoModel);\n\t\t\t\t\tself.collection.reset([], {silent: true});\n\t\t\t\t\tself.collection.fetch();\n\n\t\t\t\t\tself.$el.find('.versions').removeClass('hidden');\n\n\t\t\t\t\t// update original model\n\t\t\t\t\tfileInfoModel.trigger('busy', fileInfoModel, false);\n\t\t\t\t\tfileInfoModel.set({\n\t\t\t\t\t\tsize: versionModel.get('size'),\n\t\t\t\t\t\tmtime: versionModel.get('timestamp') * 1000,\n\t\t\t\t\t\t// temp dummy, until we can do a PROPFIND\n\t\t\t\t\t\tetag: versionModel.get('id') + versionModel.get('timestamp')\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\terror: function() {\n\t\t\t\t\tfileInfoModel.trigger('busy', fileInfoModel, false);\n\t\t\t\t\tself.$el.find('.versions').removeClass('hidden');\n\t\t\t\t\tself._toggleLoading(false);\n\t\t\t\t\tOC.Notification.show(t('files_version', 'Failed to revert {file} to revision {timestamp}.',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfile: versionModel.getFullPath(),\n\t\t\t\t\t\t\ttimestamp: OC.Util.formatDate(versionModel.get('timestamp') * 1000)\n\t\t\t\t\t\t}),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'error'\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// spinner\n\t\t\tthis._toggleLoading(true);\n\t\t\tfileInfoModel.trigger('busy', fileInfoModel, true);\n\t\t},\n\n\t\t_toggleLoading: function(state) {\n\t\t\tthis._loading = state;\n\t\t\tthis.$el.find('.loading').toggleClass('hidden', !state);\n\t\t},\n\n\t\t_onRequest: function() {\n\t\t\tthis._toggleLoading(true);\n\t\t},\n\n\t\t_onEndRequest: function() {\n\t\t\tthis._toggleLoading(false);\n\t\t\tthis.$el.find('.empty').toggleClass('hidden', !!this.collection.length);\n\t\t},\n\n\t\t_onAddModel: function(model) {\n\t\t\tvar $el = $(this.itemTemplate(this._formatItem(model)));\n\t\t\tthis.$versionsContainer.append($el);\n\t\t\t$el.find('.has-tooltip').tooltip();\n\t\t},\n\n\t\ttemplate: function(data) {\n\t\t\treturn OCA.Versions.Templates['template'](data);\n\t\t},\n\n\t\titemTemplate: function(data) {\n\t\t\treturn OCA.Versions.Templates['item'](data);\n\t\t},\n\n\t\tsetFileInfo: function(fileInfo) {\n\t\t\tif (fileInfo) {\n\t\t\t\tthis.render();\n\t\t\t\tthis.collection.setFileInfo(fileInfo);\n\t\t\t\tthis.collection.reset([], {silent: true});\n\t\t\t\tthis.nextPage();\n\t\t\t} else {\n\t\t\t\tthis.render();\n\t\t\t\tthis.collection.reset();\n\t\t\t}\n\t\t},\n\n\t\t_formatItem: function(version) {\n\t\t\tvar timestamp = version.get('timestamp') * 1000;\n\t\t\tvar size = version.has('size') ? version.get('size') : 0;\n\t\t\tvar preview = OC.MimeType.getIconUrl(version.get('mimetype'));\n\t\t\tvar img = new Image();\n\t\t\timg.onload = function () {\n\t\t\t\t$('li[data-revision=' + version.get('timestamp') + '] .preview').attr('src', version.getPreviewUrl());\n\t\t\t};\n\t\t\timg.src = version.getPreviewUrl();\n\n\t\t\treturn _.extend({\n\t\t\t\tversionId: version.get('id'),\n\t\t\t\tformattedTimestamp: OC.Util.formatDate(timestamp),\n\t\t\t\trelativeTimestamp: OC.Util.relativeModifiedDate(timestamp),\n\t\t\t\tmillisecondsTimestamp: timestamp,\n\t\t\t\thumanReadableSize: OC.Util.humanFileSize(size, true),\n\t\t\t\taltSize: n('files', '%n byte', '%n bytes', size),\n\t\t\t\thasDetails: version.has('size'),\n\t\t\t\tdownloadUrl: version.getDownloadUrl(),\n\t\t\t\tdownloadIconUrl: OC.imagePath('core', 'actions/download'),\n\t\t\t\tdownloadName: version.get('name'),\n\t\t\t\trevertIconUrl: OC.imagePath('core', 'actions/history'),\n\t\t\t\tpreviewUrl: preview,\n\t\t\t\trevertLabel: t('files_versions', 'Restore'),\n\t\t\t\tcanRevert: (this.collection.getFileInfo().get('permissions') & OC.PERMISSION_UPDATE) !== 0\n\t\t\t}, version.attributes);\n\t\t},\n\n\t\t/**\n\t\t * Renders this details view\n\t\t */\n\t\trender: function() {\n\t\t\tthis.$el.html(this.template({\n\t\t\t\temptyResultLabel: t('files_versions', 'No other versions available'),\n\t\t\t}));\n\t\t\tthis.$el.find('.has-tooltip').tooltip();\n\t\t\tthis.$versionsContainer = this.$el.find('ul.versions');\n\t\t\tthis.delegateEvents();\n\t\t},\n\n\t\t/**\n\t\t * Returns true for files, false for folders.\n\t\t *\n\t\t * @return {bool} true for files, false for folders\n\t\t */\n\t\tcanDisplay: function(fileInfo) {\n\t\t\tif (!fileInfo) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn !fileInfo.isDirectory();\n\t\t}\n\t});\n\n\tOCA.Versions = OCA.Versions || {};\n\n\tOCA.Versions.VersionsTabView = VersionsTabView;\n})();\n","/*\n * Copyright (c) 2015\n *\n * This file is licensed under the Affero General Public License version 3\n * or later.\n *\n * See the COPYING-README file.\n *\n */\n\n(function() {\n\tOCA.Versions = OCA.Versions || {};\n\n\t/**\n\t * @namespace\n\t */\n\tOCA.Versions.Util = {\n\t\t/**\n\t\t * Initialize the versions plugin.\n\t\t *\n\t\t * @param {OCA.Files.FileList} fileList file list to be extended\n\t\t */\n\t\tattach: function(fileList) {\n\t\t\tif (fileList.id === 'trashbin' || fileList.id === 'files.public') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfileList.registerTabView(new OCA.Versions.VersionsTabView('versionsTabView', {order: -10}));\n\t\t}\n\t};\n})();\n\nOC.Plugins.register('OCA.Files.FileList', OCA.Versions.Util);\n\n","\nvar content = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!./versions.css\");\n\nif(typeof content === 'string') content = [[module.id, content, '']];\n\nvar transform;\nvar insertInto;\n\n\n\nvar options = {\"hmr\":true}\n\noptions.transform = transform\noptions.insertInto = undefined;\n\nvar update = require(\"!../../../../node_modules/style-loader/lib/addStyles.js\")(content, options);\n\nif(content.locals) module.exports = content.locals;\n\nif(module.hot) {\n\tmodule.hot.accept(\"!!../../../../node_modules/css-loader/dist/cjs.js!./versions.css\", function() {\n\t\tvar newContent = require(\"!!../../../../node_modules/css-loader/dist/cjs.js!./versions.css\");\n\n\t\tif(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n\n\t\tvar locals = (function(a, b) {\n\t\t\tvar key, idx = 0;\n\n\t\t\tfor(key in a) {\n\t\t\t\tif(!b || a[key] !== b[key]) return false;\n\t\t\t\tidx++;\n\t\t\t}\n\n\t\t\tfor(key in b) idx--;\n\n\t\t\treturn idx === 0;\n\t\t}(content.locals, newContent.locals));\n\n\t\tif(!locals) throw new Error('Aborting CSS HMR due to changed css-modules locals.');\n\n\t\tupdate(newContent);\n\t});\n\n\tmodule.hot.dispose(function() { update(); });\n}","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \".versionsTabView .clear-float {\\n\\tclear: both;\\n}\\n\\n.versionsTabView li {\\n\\twidth: 100%;\\n\\tcursor: default;\\n\\theight: 56px;\\n\\tfloat: left;\\n\\tborder-bottom: 1px solid rgba(100,100,100,.1);\\n}\\n.versionsTabView li:last-child {\\n\\tborder-bottom: none;\\n}\\n\\n.versionsTabView a,\\n.versionsTabView div > span {\\n\\tvertical-align: middle;\\n\\topacity: .5;\\n}\\n\\n.versionsTabView li a{\\n\\tpadding: 15px 10px 11px;\\n}\\n\\n.versionsTabView a:hover,\\n.versionsTabView a:focus {\\n\\topacity: 1;\\n}\\n\\n.versionsTabView .preview-container {\\n\\tdisplay: inline-block;\\n vertical-align: top;\\n}\\n\\n.versionsTabView img {\\n\\tcursor: pointer;\\n\\tpadding-right: 4px;\\n}\\n\\n.versionsTabView img.preview {\\n\\tcursor: default;\\n}\\n\\n.versionsTabView .version-container {\\n\\tdisplay: inline-block;\\n}\\n\\n.versionsTabView .versiondate {\\n\\tmin-width: 100px;\\n\\tvertical-align: super;\\n}\\n\\n.versionsTabView .version-details {\\n\\ttext-align: left;\\n}\\n\\n.versionsTabView .version-details > span {\\n\\tpadding: 0 10px;\\n}\\n\\n.versionsTabView .revertVersion {\\n\\tcursor: pointer;\\n\\tfloat: right;\\n\\tmargin-right: -10px;\\n}\\n\", \"\"]);\n\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return '@media ' + item[2] + '{' + content + '}';\n } else {\n return content;\n }\n }).join('');\n }; // import a list of modules into the list\n\n\n list.i = function (modules, mediaQuery) {\n if (typeof modules === 'string') {\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n for (var i = 0; i < this.length; i++) {\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n\n for (i = 0; i < modules.length; i++) {\n var item = modules[i]; // skip already imported module\n // this implementation is not 100% perfect for weird media query combinations\n // when a module is imported multiple times with different media queries.\n // I hope this will never occur (Hey this way we have smaller bundles)\n\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\n if (mediaQuery && !item[2]) {\n item[2] = mediaQuery;\n } else if (mediaQuery) {\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\n }\n\n list.push(item);\n }\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || '';\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n return '/*# ' + data + ' */';\n}","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === \"undefined\") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve \"head\" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector(\"#foo\").shadowRoot }\n // }\n if (typeof target === 'function') {\n return target();\n }\n if (typeof memo[target] === \"undefined\") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = require(\"./urls\");\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== \"undefined\" && DEBUG) {\n\t\tif (typeof document !== \"object\") throw new Error(\"The style-loader cannot be used in a non-browser environment\");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === \"object\" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\n\t// tags it will allow on a page\n\tif (!options.singleton && typeof options.singleton !== \"boolean\") options.singleton = isOldIE();\n\n\t// By default, add <style> tags to the <head> element\n if (!options.insertInto) options.insertInto = \"head\";\n\n\t// By default, add <style> tags to the bottom of the target\n\tif (!options.insertAt) options.insertAt = \"bottom\";\n\n\tvar styles = listToStyles(list, options);\n\n\taddStylesToDom(styles, options);\n\n\treturn function update (newList) {\n\t\tvar mayRemove = [];\n\n\t\tfor (var i = 0; i < styles.length; i++) {\n\t\t\tvar item = styles[i];\n\t\t\tvar domStyle = stylesInDom[item.id];\n\n\t\t\tdomStyle.refs--;\n\t\t\tmayRemove.push(domStyle);\n\t\t}\n\n\t\tif(newList) {\n\t\t\tvar newStyles = listToStyles(newList, options);\n\t\t\taddStylesToDom(newStyles, options);\n\t\t}\n\n\t\tfor (var i = 0; i < mayRemove.length; i++) {\n\t\t\tvar domStyle = mayRemove[i];\n\n\t\t\tif(domStyle.refs === 0) {\n\t\t\t\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\n\n\t\t\t\tdelete stylesInDom[domStyle.id];\n\t\t\t}\n\t\t}\n\t};\n};\n\nfunction addStylesToDom (styles, options) {\n\tfor (var i = 0; i < styles.length; i++) {\n\t\tvar item = styles[i];\n\t\tvar domStyle = stylesInDom[item.id];\n\n\t\tif(domStyle) {\n\t\t\tdomStyle.refs++;\n\n\t\t\tfor(var j = 0; j < domStyle.parts.length; j++) {\n\t\t\t\tdomStyle.parts[j](item.parts[j]);\n\t\t\t}\n\n\t\t\tfor(; j < item.parts.length; j++) {\n\t\t\t\tdomStyle.parts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\t\t} else {\n\t\t\tvar parts = [];\n\n\t\t\tfor(var j = 0; j < item.parts.length; j++) {\n\t\t\t\tparts.push(addStyle(item.parts[j], options));\n\t\t\t}\n\n\t\t\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\n\t\t}\n\t}\n}\n\nfunction listToStyles (list, options) {\n\tvar styles = [];\n\tvar newStyles = {};\n\n\tfor (var i = 0; i < list.length; i++) {\n\t\tvar item = list[i];\n\t\tvar id = options.base ? item[0] + options.base : item[0];\n\t\tvar css = item[1];\n\t\tvar media = item[2];\n\t\tvar sourceMap = item[3];\n\t\tvar part = {css: css, media: media, sourceMap: sourceMap};\n\n\t\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\n\t\telse newStyles[id].parts.push(part);\n\t}\n\n\treturn styles;\n}\n\nfunction insertStyleElement (options, style) {\n\tvar target = getElement(options.insertInto)\n\n\tif (!target) {\n\t\tthrow new Error(\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\");\n\t}\n\n\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\n\n\tif (options.insertAt === \"top\") {\n\t\tif (!lastStyleElementInsertedAtTop) {\n\t\t\ttarget.insertBefore(style, target.firstChild);\n\t\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\n\t\t\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\n\t\t} else {\n\t\t\ttarget.appendChild(style);\n\t\t}\n\t\tstylesInsertedAtTop.push(style);\n\t} else if (options.insertAt === \"bottom\") {\n\t\ttarget.appendChild(style);\n\t} else if (typeof options.insertAt === \"object\" && options.insertAt.before) {\n\t\tvar nextSibling = getElement(options.insertAt.before, target);\n\t\ttarget.insertBefore(style, nextSibling);\n\t} else {\n\t\tthrow new Error(\"[Style Loader]\\n\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\n Must be 'top', 'bottom', or Object.\\n (https://github.com/webpack-contrib/style-loader#insertat)\\n\");\n\t}\n}\n\nfunction removeStyleElement (style) {\n\tif (style.parentNode === null) return false;\n\tstyle.parentNode.removeChild(style);\n\n\tvar idx = stylesInsertedAtTop.indexOf(style);\n\tif(idx >= 0) {\n\t\tstylesInsertedAtTop.splice(idx, 1);\n\t}\n}\n\nfunction createStyleElement (options) {\n\tvar style = document.createElement(\"style\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\n\tif(options.attrs.nonce === undefined) {\n\t\tvar nonce = getNonce();\n\t\tif (nonce) {\n\t\t\toptions.attrs.nonce = nonce;\n\t\t}\n\t}\n\n\taddAttrs(style, options.attrs);\n\tinsertStyleElement(options, style);\n\n\treturn style;\n}\n\nfunction createLinkElement (options) {\n\tvar link = document.createElement(\"link\");\n\n\tif(options.attrs.type === undefined) {\n\t\toptions.attrs.type = \"text/css\";\n\t}\n\toptions.attrs.rel = \"stylesheet\";\n\n\taddAttrs(link, options.attrs);\n\tinsertStyleElement(options, link);\n\n\treturn link;\n}\n\nfunction addAttrs (el, attrs) {\n\tObject.keys(attrs).forEach(function (key) {\n\t\tel.setAttribute(key, attrs[key]);\n\t});\n}\n\nfunction getNonce() {\n\tif (typeof __webpack_nonce__ === 'undefined') {\n\t\treturn null;\n\t}\n\n\treturn __webpack_nonce__;\n}\n\nfunction addStyle (obj, options) {\n\tvar style, update, remove, result;\n\n\t// If a transform function was defined, run it on the css\n\tif (options.transform && obj.css) {\n\t result = typeof options.transform === 'function'\n\t\t ? options.transform(obj.css) \n\t\t : options.transform.default(obj.css);\n\n\t if (result) {\n\t \t// If transform returns a value, use that instead of the original css.\n\t \t// This allows running runtime transformations on the css.\n\t \tobj.css = result;\n\t } else {\n\t \t// If the transform function returns a falsy value, don't add this css.\n\t \t// This allows conditional loading of css\n\t \treturn function() {\n\t \t\t// noop\n\t \t};\n\t }\n\t}\n\n\tif (options.singleton) {\n\t\tvar styleIndex = singletonCounter++;\n\n\t\tstyle = singleton || (singleton = createStyleElement(options));\n\n\t\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\n\t\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\n\n\t} else if (\n\t\tobj.sourceMap &&\n\t\ttypeof URL === \"function\" &&\n\t\ttypeof URL.createObjectURL === \"function\" &&\n\t\ttypeof URL.revokeObjectURL === \"function\" &&\n\t\ttypeof Blob === \"function\" &&\n\t\ttypeof btoa === \"function\"\n\t) {\n\t\tstyle = createLinkElement(options);\n\t\tupdate = updateLink.bind(null, style, options);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\n\t\t\tif(style.href) URL.revokeObjectURL(style.href);\n\t\t};\n\t} else {\n\t\tstyle = createStyleElement(options);\n\t\tupdate = applyToTag.bind(null, style);\n\t\tremove = function () {\n\t\t\tremoveStyleElement(style);\n\t\t};\n\t}\n\n\tupdate(obj);\n\n\treturn function updateStyle (newObj) {\n\t\tif (newObj) {\n\t\t\tif (\n\t\t\t\tnewObj.css === obj.css &&\n\t\t\t\tnewObj.media === obj.media &&\n\t\t\t\tnewObj.sourceMap === obj.sourceMap\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdate(obj = newObj);\n\t\t} else {\n\t\t\tremove();\n\t\t}\n\t};\n}\n\nvar replaceText = (function () {\n\tvar textStore = [];\n\n\treturn function (index, replacement) {\n\t\ttextStore[index] = replacement;\n\n\t\treturn textStore.filter(Boolean).join('\\n');\n\t};\n})();\n\nfunction applyToSingletonTag (style, index, remove, obj) {\n\tvar css = remove ? \"\" : obj.css;\n\n\tif (style.styleSheet) {\n\t\tstyle.styleSheet.cssText = replaceText(index, css);\n\t} else {\n\t\tvar cssNode = document.createTextNode(css);\n\t\tvar childNodes = style.childNodes;\n\n\t\tif (childNodes[index]) style.removeChild(childNodes[index]);\n\n\t\tif (childNodes.length) {\n\t\t\tstyle.insertBefore(cssNode, childNodes[index]);\n\t\t} else {\n\t\t\tstyle.appendChild(cssNode);\n\t\t}\n\t}\n}\n\nfunction applyToTag (style, obj) {\n\tvar css = obj.css;\n\tvar media = obj.media;\n\n\tif(media) {\n\t\tstyle.setAttribute(\"media\", media)\n\t}\n\n\tif(style.styleSheet) {\n\t\tstyle.styleSheet.cssText = css;\n\t} else {\n\t\twhile(style.firstChild) {\n\t\t\tstyle.removeChild(style.firstChild);\n\t\t}\n\n\t\tstyle.appendChild(document.createTextNode(css));\n\t}\n}\n\nfunction updateLink (link, options, obj) {\n\tvar css = obj.css;\n\tvar sourceMap = obj.sourceMap;\n\n\t/*\n\t\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\n\t\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\n\t\ton by default. Otherwise default to the convertToAbsoluteUrls option\n\t\tdirectly\n\t*/\n\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\n\n\tif (options.convertToAbsoluteUrls || autoFixUrls) {\n\t\tcss = fixUrls(css);\n\t}\n\n\tif (sourceMap) {\n\t\t// http://stackoverflow.com/a/26603875\n\t\tcss += \"\\n/*# sourceMappingURL=data:application/json;base64,\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \" */\";\n\t}\n\n\tvar blob = new Blob([css], { type: \"text/css\" });\n\n\tvar oldSrc = link.href;\n\n\tlink.href = URL.createObjectURL(blob);\n\n\tif(oldSrc) URL.revokeObjectURL(oldSrc);\n}\n","\n/**\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\n * embed the css on the page. This breaks all relative urls because now they are relative to a\n * bundle instead of the current page.\n *\n * One solution is to only use full urls, but that may be impossible.\n *\n * Instead, this function \"fixes\" the relative urls to be absolute according to the current page location.\n *\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\n *\n */\n\nmodule.exports = function (css) {\n // get current location\n var location = typeof window !== \"undefined\" && window.location;\n\n if (!location) {\n throw new Error(\"fixUrls requires window.location\");\n }\n\n\t// blank or null?\n\tif (!css || typeof css !== \"string\") {\n\t return css;\n }\n\n var baseUrl = location.protocol + \"//\" + location.host;\n var currentDir = baseUrl + location.pathname.replace(/\\/[^\\/]*$/, \"/\");\n\n\t// convert each url(...)\n\t/*\n\tThis regular expression is just a way to recursively match brackets within\n\ta string.\n\n\t /url\\s*\\( = Match on the word \"url\" with any whitespace after it and then a parens\n\t ( = Start a capturing group\n\t (?: = Start a non-capturing group\n\t [^)(] = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t (?: = Start another non-capturing groups\n\t [^)(]+ = Match anything that isn't a parentheses\n\t | = OR\n\t \\( = Match a start parentheses\n\t [^)(]* = Match anything that isn't a parentheses\n\t \\) = Match a end parentheses\n\t ) = End Group\n *\\) = Match anything and then a close parens\n ) = Close non-capturing group\n * = Match anything\n ) = Close capturing group\n\t \\) = Match a close parens\n\n\t /gi = Get all matches, not the first. Be case insensitive.\n\t */\n\tvar fixedCss = css.replace(/url\\s*\\(((?:[^)(]|\\((?:[^)(]+|\\([^)(]*\\))*\\))*)\\)/gi, function(fullMatch, origUrl) {\n\t\t// strip quotes (if they exist)\n\t\tvar unquotedOrigUrl = origUrl\n\t\t\t.trim()\n\t\t\t.replace(/^\"(.*)\"$/, function(o, $1){ return $1; })\n\t\t\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\n\n\t\t// already a full url? no change\n\t\tif (/^(#|data:|http:\\/\\/|https:\\/\\/|file:\\/\\/\\/|\\s*$)/i.test(unquotedOrigUrl)) {\n\t\t return fullMatch;\n\t\t}\n\n\t\t// convert the url to a full url\n\t\tvar newUrl;\n\n\t\tif (unquotedOrigUrl.indexOf(\"//\") === 0) {\n\t\t \t//TODO: should we add protocol?\n\t\t\tnewUrl = unquotedOrigUrl;\n\t\t} else if (unquotedOrigUrl.indexOf(\"/\") === 0) {\n\t\t\t// path should be relative to the base url\n\t\t\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\n\t\t} else {\n\t\t\t// path should be relative to current directory\n\t\t\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\.\\//, \"\"); // Strip leading './'\n\t\t}\n\n\t\t// send back the fixed url(...)\n\t\treturn \"url(\" + JSON.stringify(newUrl) + \")\";\n\t});\n\n\t// send back the fixed css\n\treturn fixedCss;\n};\n"],"sourceRoot":""} \ No newline at end of file
diff --git a/apps/files_versions/js/merged.json b/apps/files_versions/js/merged.json
deleted file mode 100644
index 67ee60b3851..00000000000
--- a/apps/files_versions/js/merged.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[
- "versionmodel.js",
- "templates.js",
- "versioncollection.js",
- "versionstabview.js",
- "filesplugin.js"
-]
diff --git a/apps/files_versions/lib/Hooks.php b/apps/files_versions/lib/Hooks.php
index 3c4049e2139..4e2dcfa3087 100644
--- a/apps/files_versions/lib/Hooks.php
+++ b/apps/files_versions/lib/Hooks.php
@@ -149,6 +149,6 @@ class Hooks {
* Load additional scripts when the files app is visible
*/
public static function onLoadFilesAppScripts() {
- \OCP\Util::addScript('files_versions', 'merged');
+ \OCP\Util::addScript('files_versions', 'files_versions');
}
}
diff --git a/apps/files_versions/css/versions.css b/apps/files_versions/src/css/versions.css
index 74ab146b051..74ab146b051 100644
--- a/apps/files_versions/css/versions.css
+++ b/apps/files_versions/src/css/versions.css
diff --git a/apps/files_versions/src/files_versions.js b/apps/files_versions/src/files_versions.js
new file mode 100644
index 00000000000..e9504e03ed7
--- /dev/null
+++ b/apps/files_versions/src/files_versions.js
@@ -0,0 +1,8 @@
+import './versionmodel'
+import './templates'
+import './versioncollection'
+import './versionstabview'
+import './filesplugin'
+import './css/versions.css'
+
+window.OCA.Versions = OCA.Versions
diff --git a/apps/files_versions/js/filesplugin.js b/apps/files_versions/src/filesplugin.js
index a9457c522d6..a9457c522d6 100644
--- a/apps/files_versions/js/filesplugin.js
+++ b/apps/files_versions/src/filesplugin.js
diff --git a/apps/files_versions/js/templates.js b/apps/files_versions/src/templates.js
index cf2c236daca..cf2c236daca 100644
--- a/apps/files_versions/js/templates.js
+++ b/apps/files_versions/src/templates.js
diff --git a/apps/files_versions/js/templates/item.handlebars b/apps/files_versions/src/templates/item.handlebars
index e34be4bd025..e34be4bd025 100644
--- a/apps/files_versions/js/templates/item.handlebars
+++ b/apps/files_versions/src/templates/item.handlebars
diff --git a/apps/files_versions/js/templates/template.handlebars b/apps/files_versions/src/templates/template.handlebars
index f01a6f41626..f01a6f41626 100644
--- a/apps/files_versions/js/templates/template.handlebars
+++ b/apps/files_versions/src/templates/template.handlebars
diff --git a/apps/files_versions/js/versioncollection.js b/apps/files_versions/src/versioncollection.js
index e48368adfa2..e48368adfa2 100644
--- a/apps/files_versions/js/versioncollection.js
+++ b/apps/files_versions/src/versioncollection.js
diff --git a/apps/files_versions/js/versionmodel.js b/apps/files_versions/src/versionmodel.js
index 15469927475..15469927475 100644
--- a/apps/files_versions/js/versionmodel.js
+++ b/apps/files_versions/src/versionmodel.js
diff --git a/apps/files_versions/js/versionstabview.js b/apps/files_versions/src/versionstabview.js
index 12b493beec0..12b493beec0 100644
--- a/apps/files_versions/js/versionstabview.js
+++ b/apps/files_versions/src/versionstabview.js
diff --git a/apps/files_versions/webpack.js b/apps/files_versions/webpack.js
new file mode 100644
index 00000000000..4b0f1e4f6bf
--- /dev/null
+++ b/apps/files_versions/webpack.js
@@ -0,0 +1,37 @@
+const path = require('path');
+
+module.exports = {
+ entry: path.join(__dirname, 'src', 'files_versions.js'),
+ output: {
+ path: path.resolve(__dirname, 'js'),
+ publicPath: '/js/',
+ filename: 'files_versions.js'
+ },
+ module: {
+ rules: [
+ {
+ test: /\.css$/,
+ use: ['style-loader', 'css-loader']
+ },
+ {
+ test: /\.scss$/,
+ use: ['style-loader', 'css-loader', 'sass-loader']
+ },
+ {
+ test: /\.js$/,
+ loader: 'babel-loader',
+ exclude: /node_modules/
+ },
+ {
+ test: /\.(png|jpg|gif|svg)$/,
+ loader: 'file-loader',
+ options: {
+ name: '[name].[ext]?[hash]'
+ }
+ }
+ ]
+ },
+ resolve: {
+ extensions: ['*', '.js']
+ }
+};
diff --git a/core/js/core.json b/core/js/core.json
index 77aeffff10d..5bf6512d6a2 100644
--- a/core/js/core.json
+++ b/core/js/core.json
@@ -13,9 +13,7 @@
"sharedialoglinkshareview.js",
"sharedialogresharerinfoview.js",
"sharedialogshareelistview.js",
- "contactsmenu_templates.js",
"public/publicpage.js",
- "multiselect.js",
"oc-requesttoken.js",
"setupchecks.js",
"../search/js/search.js",
diff --git a/tests/karma.config.js b/tests/karma.config.js
index fe60de3bdbb..7ffd5ad4e62 100644
--- a/tests/karma.config.js
+++ b/tests/karma.config.js
@@ -45,6 +45,7 @@ module.exports = function(config) {
return [
'files',
'files_trashbin',
+ 'files_versions',
{
name: 'files_sharing',
srcFiles: [
@@ -75,17 +76,6 @@ module.exports = function(config) {
testFiles: ['apps/files_external/tests/js/*.js']
},
{
- name: 'files_versions',
- srcFiles: [
- // need to enforce loading order...
- 'apps/files_versions/js/versionmodel.js',
- 'apps/files_versions/js/templates.js',
- 'apps/files_versions/js/versioncollection.js',
- 'apps/files_versions/js/versionstabview.js'
- ],
- testFiles: ['apps/files_versions/tests/js/**/*.js']
- },
- {
name: 'comments',
srcFiles: [
// need to enforce loading order...
@@ -117,8 +107,7 @@ module.exports = function(config) {
{
name: 'settings',
srcFiles: [
- 'settings/js/apps.js',
- 'core/vendor/marked/marked.min.js'
+ 'settings/js/apps.js'
]
}
];
diff --git a/webpack.common.js b/webpack.common.js
index 9a117ba4b3c..f6a0d0213ae 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -1,5 +1,10 @@
const core = require('./core/webpack');
const files_trashbin = require('./apps/files_trashbin/webpack')
+const files_versions = require('./apps/files_versions/webpack');
const oauth2 = require('./apps/oauth2/webpack')
-module.exports = [].concat(core, files_trashbin, oauth2);
+module.exports = [].concat(
+ core,
+ files_trashbin,
+ files_versions,
+ oauth2);