diff --git a/apps/files_trashbin/.l10nignore b/apps/files_trashbin/.l10nignore new file mode 100644 index 0000000000..3a54fd4ed2 --- /dev/null +++ b/apps/files_trashbin/.l10nignore @@ -0,0 +1,3 @@ +#webpack bundled files +js/files_trashbin.js +js/files_trashbin.js.map diff --git a/apps/files_trashbin/js/files_trashbin.js b/apps/files_trashbin/js/files_trashbin.js new file mode 100644 index 0000000000..b0c273fdca --- /dev/null +++ b/apps/files_trashbin/js/files_trashbin.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);window.OCA.Trashbin=OCA.Trashbin},function(e,n){OCA.Trashbin={},OCA.Trashbin.App={_initialized:!1,client:null,initialize:function(e){if(!this._initialized){this._initialized=!0,this.client=new OC.Files.Client({host:OC.getHost(),port:OC.getPort(),root:OC.linkToRemoteBase("dav")+"/trashbin/"+OC.getCurrentUser().uid,useHTTPS:"https"===OC.getProtocol()});var n=OC.Util.History.parseUrlQuery();this.fileList=new OCA.Trashbin.FileList($("#app-content-trashbin"),{fileActions:this._createFileActions(),detailsViewEnabled:!1,scrollTo:n.scrollto,config:OCA.Files.App.getFilesConfig(),multiSelectMenu:[{name:"restore",displayName:t("files","Restore"),iconClass:"icon-history"},{name:"delete",displayName:t("files","Delete"),iconClass:"icon-delete"}],client:this.client,shown:!0})}},_createFileActions:function(){var e=this.client,n=new OCA.Files.FileActions;return n.register("dir","Open",OC.PERMISSION_READ,"",function(e,t){var n=t.fileList.getCurrentDirectory();t.fileList.changeDirectory(OC.joinPaths(n,e))}),n.setDefault("dir","Open"),n.registerAction({name:"Restore",displayName:t("files_trashbin","Restore"),type:OCA.Files.FileActions.TYPE_INLINE,mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-history",actionHandler:function(n,i){var r=i.fileList,o=r.findFileEl(n);r.showFileBusyState(o,!0);var s=i.fileList.getCurrentDirectory();e.move(OC.joinPaths("trash",s,n),OC.joinPaths("restore",n),!0).then(r._removeCallback.bind(r,[n]),function(){r.showFileBusyState(o,!1),OC.Notification.show(t("files_trashbin","Error while restoring file from trashbin"))})}}),n.registerAction({name:"Delete",displayName:t("files","Delete"),mime:"all",permissions:OC.PERMISSION_READ,iconClass:"icon-delete",render:function(e,i,r){var o=n._makeActionLink(e,r);return o.attr("original-title",t("files_trashbin","Delete permanently")),o.children("img").attr("alt",t("files_trashbin","Delete permanently")),r.$file.find("td:last").append(o),o},actionHandler:function(n,i){var r=i.fileList;$(".tipsy").remove();var o=r.findFileEl(n);r.showFileBusyState(o,!0);var s=i.fileList.getCurrentDirectory();e.remove(OC.joinPaths("trash",s,n)).then(r._removeCallback.bind(r,[n]),function(){r.showFileBusyState(o,!1),OC.Notification.show(t("files_trashbin","Error while removing file from trashbin"))})}}),n}},$(document).ready(function(){$("#app-content-trashbin").one("show",function(){OCA.Trashbin.App.initialize($("#app-content-trashbin"))})})},function(e,n){!function(){var e=new RegExp(/^(.+)\.d[0-9]+$/),n="{http://nextcloud.org/ns}trashbin-filename",i="{http://nextcloud.org/ns}trashbin-deletion-time",r="{http://nextcloud.org/ns}trashbin-original-location";function o(t){t=OC.basename(t);var n=e.exec(t);return n&&n.length>1&&(t=n[1]),t}var s=function(e,t){this.client=t.client,this.initialize(e,t)};s.prototype=_.extend({},OCA.Files.FileList.prototype,{id:"trashbin",appName:t("files_trashbin","Deleted files"),client:null,initialize:function(){this.client.addFileInfoParser(function(e,t){var o=e.propStat[0].properties,s=o[r];return{displayName:o[n],mtime:1e3*parseInt(o[i],10),hasPreview:!0,path:s,extraData:s}});var e=OCA.Files.FileList.prototype.initialize.apply(this,arguments);return this.$el.find(".undelete").click("click",_.bind(this._onClickRestoreSelected,this)),this.setSort("mtime","desc"),this.breadcrumb._makeCrumbs=function(){for(var e=OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this,arguments),t=1;t=0&&u.splice(t,1)}function b(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 v(t,e.attrs),d(e,t),t}function v(e,t){Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})}function y(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=l||(l=b(t)),i=O.bind(null,n,s,!1),r=O.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",v(t,e.attrs),d(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"}),a=e.href;e.href=URL.createObjectURL(s),a&&URL.revokeObjectURL(a)}.bind(null,n,t),r=function(){m(n),n.href&&URL.revokeObjectURL(n.href)}):(n=b(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 h(n,t),function(e){for(var i=[],r=0;r 1) {\n\t\t\tname = match[1];\n\t\t}\n\t\treturn name;\n\t}\n\n\t/**\n\t * @class OCA.Trashbin.FileList\n\t * @augments OCA.Files.FileList\n\t * @classdesc List of deleted files\n\t *\n\t * @param $el container element with existing markup for the #controls\n\t * and a table\n\t * @param [options] map of options\n\t */\n\tvar FileList = function($el, options) {\n\t\tthis.client = options.client;\n\t\tthis.initialize($el, options);\n\t};\n\tFileList.prototype = _.extend({}, OCA.Files.FileList.prototype,\n\t\t/** @lends OCA.Trashbin.FileList.prototype */ {\n\t\tid: 'trashbin',\n\t\tappName: t('files_trashbin', 'Deleted files'),\n\t\t/** @type {OC.Files.Client} */\n\t\tclient: null,\n\n\t\t/**\n\t\t * @private\n\t\t */\n\t\tinitialize: function() {\n\t\t\tthis.client.addFileInfoParser(function(response, data) {\n\t\t\t\tvar props = response.propStat[0].properties;\n\t\t\t\tvar path = props[TRASHBIN_ORIGINAL_LOCATION];\n\t\t\t\treturn {\n\t\t\t\t\tdisplayName: props[FILENAME_PROP],\n\t\t\t\t\tmtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000,\n\t\t\t\t\thasPreview: true,\n\t\t\t\t\tpath: path,\n\t\t\t\t\textraData: path\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvar result = OCA.Files.FileList.prototype.initialize.apply(this, arguments);\n\t\t\tthis.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this));\n\n\t\t\tthis.setSort('mtime', 'desc');\n\t\t\t/**\n\t\t\t * Override crumb making to add \"Deleted Files\" entry\n\t\t\t * and convert files with \".d\" extensions to a more\n\t\t\t * user friendly name.\n\t\t\t */\n\t\t\tthis.breadcrumb._makeCrumbs = function() {\n\t\t\t\tvar parts = OCA.Files.BreadCrumb.prototype._makeCrumbs.apply(this, arguments);\n\t\t\t\tfor (var i = 1; i < parts.length; i++) {\n\t\t\t\t\tparts[i].name = getDeletedFileName(parts[i].name);\n\t\t\t\t}\n\t\t\t\treturn parts;\n\t\t\t};\n\n\t\t\tOC.Plugins.attach('OCA.Trashbin.FileList', this);\n\t\t\treturn result;\n\t\t},\n\n\t\t/**\n\t\t * Override to only return read permissions\n\t\t */\n\t\tgetDirectoryPermissions: function() {\n\t\t\treturn OC.PERMISSION_READ | OC.PERMISSION_DELETE;\n\t\t},\n\n\t\t_setCurrentDir: function(targetDir) {\n\t\t\tOCA.Files.FileList.prototype._setCurrentDir.apply(this, arguments);\n\n\t\t\tvar baseDir = OC.basename(targetDir);\n\t\t\tif (baseDir !== '') {\n\t\t\t\tthis.setPageTitle(getDeletedFileName(baseDir));\n\t\t\t}\n\t\t},\n\n\t\t_createRow: function() {\n\t\t\t// FIXME: MEGAHACK until we find a better solution\n\t\t\tvar tr = OCA.Files.FileList.prototype._createRow.apply(this, arguments);\n\t\t\ttr.find('td.filesize').remove();\n\t\t\treturn tr;\n\t\t},\n\n\t\tgetAjaxUrl: function(action, params) {\n\t\t\tvar q = '';\n\t\t\tif (params) {\n\t\t\t\tq = '?' + OC.buildQueryString(params);\n\t\t\t}\n\t\t\treturn OC.filePath('files_trashbin', 'ajax', action + '.php') + q;\n\t\t},\n\n\t\tsetupUploadEvents: function() {\n\t\t\t// override and do nothing\n\t\t},\n\n\t\tlinkTo: function(dir){\n\t\t\treturn OC.linkTo('files', 'index.php')+\"?view=trashbin&dir=\"+ encodeURIComponent(dir).replace(/%2F/g, '/');\n\t\t},\n\n\t\telementToFile: function($el) {\n\t\t\tvar fileInfo = OCA.Files.FileList.prototype.elementToFile($el);\n\t\t\tif (this.getCurrentDirectory() === '/') {\n\t\t\t\tfileInfo.displayName = getDeletedFileName(fileInfo.name);\n\t\t\t}\n\t\t\t// no size available\n\t\t\tdelete fileInfo.size;\n\t\t\treturn fileInfo;\n\t\t},\n\n\t\tupdateEmptyContent: function(){\n\t\t\tvar exists = this.$fileList.find('tr:first').exists();\n\t\t\tthis.$el.find('#emptycontent').toggleClass('hidden', exists);\n\t\t\tthis.$el.find('#filestable th').toggleClass('hidden', !exists);\n\t\t},\n\n\t\t_removeCallback: function(files) {\n\t\t\tvar $el;\n\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\t$el = this.remove(OC.basename(files[i]), {updateSummary: false});\n\t\t\t\tthis.fileSummary.remove({type: $el.attr('data-type'), size: $el.attr('data-size')});\n\t\t\t}\n\t\t\tthis.fileSummary.update();\n\t\t\tthis.updateEmptyContent();\n\t\t},\n\n\t\t_onClickRestoreSelected: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tvar self = this;\n\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name');\n\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\tvar tr = this.findFileEl(files[i]);\n\t\t\t\tthis.showFileBusyState(tr, true);\n\t\t\t}\n\n\t\t\tthis.fileMultiSelectMenu.toggleLoading('restore', true);\n\t\t\tvar restorePromises = files.map(function(file) {\n\t\t\t\treturn self.client.move(OC.joinPaths('trash', self.getCurrentDirectory(), file), OC.joinPaths('restore', file), true)\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself._removeCallback([file]);\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t});\n\t\t\treturn Promise.all(restorePromises).then(\n\t\t\t\tfunction() {\n\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('restore', false);\n\t\t\t\t},\n\t\t\t\tfunction() {\n\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while restoring files from trashbin'));\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t_onClickDeleteSelected: function(event) {\n\t\t\tevent.preventDefault();\n\t\t\tvar self = this;\n\t\t\tvar allFiles = this.$el.find('.select-all').is(':checked');\n\t\t\tvar files = _.pluck(this.getSelectedFiles(), 'name');\n\t\t\tfor (var i = 0; i < files.length; i++) {\n\t\t\t\tvar tr = this.findFileEl(files[i]);\n\t\t\t\tthis.showFileBusyState(tr, true);\n\t\t\t}\n\n\t\t\tif (allFiles) {\n\t\t\t\treturn this.client.remove(OC.joinPaths('trash', this.getCurrentDirectory()))\n\t\t\t\t\t.then(\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tself.hideMask();\n\t\t\t\t\t\t\tself.setFiles([]);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while emptying trashbin'));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.fileMultiSelectMenu.toggleLoading('delete', true);\n\t\t\t\tvar deletePromises = files.map(function(file) {\n\t\t\t\t\treturn self.client.remove(OC.joinPaths('trash', self.getCurrentDirectory(), file))\n\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\tself._removeCallback([file]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\treturn Promise.all(deletePromises).then(\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tself.fileMultiSelectMenu.toggleLoading('delete', false);\n\t\t\t\t\t},\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tOC.Notification.show(t('files_trashbin', 'Error while removing files from trashbin'));\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\t_onClickFile: function(event) {\n\t\t\tvar mime = $(this).parent().parent().data('mime');\n\t\t\tif (mime !== 'httpd/unix-directory') {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\treturn OCA.Files.FileList.prototype._onClickFile.apply(this, arguments);\n\t\t},\n\n\t\tgeneratePreviewUrl: function(urlSpec) {\n\t\t\treturn OC.generateUrl('/apps/files_trashbin/preview?') + $.param(urlSpec);\n\t\t},\n\n\t\tgetDownloadUrl: function() {\n\t\t\t// no downloads\n\t\t\treturn '#';\n\t\t},\n\n\t\tupdateStorageStatistics: function() {\n\t\t\t// no op because the trashbin doesn't have\n\t\t\t// storage info like free space / used space\n\t\t},\n\n\t\tisSelectedDeletable: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Returns list of webdav properties to request\n\t\t */\n\t\t_getWebdavProperties: function() {\n\t\t\treturn [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION].concat(this.filesClient.getPropfindProperties());\n\t\t},\n\n\t\t/**\n\t\t * Reloads the file list using ajax call\n\t\t *\n\t\t * @return ajax call object\n\t\t */\n\t\treload: function() {\n\t\t\tthis._selectedFiles = {};\n\t\t\tthis._selectionSummary.clear();\n\t\t\tthis.$el.find('.select-all').prop('checked', false);\n\t\t\tthis.showMask();\n\t\t\tif (this._reloadCall) {\n\t\t\t\tthis._reloadCall.abort();\n\t\t\t}\n\t\t\tthis._reloadCall = this.client.getFolderContents(\n\t\t\t\t'trash/' + this.getCurrentDirectory(), {\n\t\t\t\t\tincludeParent: false,\n\t\t\t\t\tproperties: this._getWebdavProperties()\n\t\t\t\t}\n\t\t\t);\n\t\t\tvar callBack = this.reloadCallback.bind(this);\n\t\t\treturn this._reloadCall.then(callBack, callBack);\n\t\t},\n\t\treloadCallback: function(status, result) {\n\t\t\tdelete this._reloadCall;\n\t\t\tthis.hideMask();\n\n\t\t\tif (status === 401) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Firewall Blocked request?\n\t\t\tif (status === 403) {\n\t\t\t\t// Go home\n\t\t\t\tthis.changeDirectory('/');\n\t\t\t\tOC.Notification.show(t('files', 'This operation is forbidden'));\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Did share service die or something else fail?\n\t\t\tif (status === 500) {\n\t\t\t\t// Go home\n\t\t\t\tthis.changeDirectory('/');\n\t\t\t\tOC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'));\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (status === 404) {\n\t\t\t\t// go back home\n\t\t\t\tthis.changeDirectory('/');\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// aborted ?\n\t\t\tif (status === 0){\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tthis.setFiles(result);\n\t\t\treturn true;\n\t\t},\n\n\t});\n\n\tOCA.Trashbin.FileList = FileList;\n})();\n\n","\nvar content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./trash.scss\");\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!../../../node_modules/sass-loader/lib/loader.js!./trash.scss\", function() {\n\t\tvar newContent = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/lib/loader.js!./trash.scss\");\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, \"/*\\n * Copyright (c) 2014\\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#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext,\\n#app-content-trashbin tbody tr[data-type=\\\"file\\\"] td a.name span.nametext span {\\n cursor: default; }\\n\\n#app-content-trashbin .summary :last-child {\\n padding: 0; }\\n\\n#app-content-trashbin #filestable .summary .filesize {\\n display: none; }\\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