first commit

This commit is contained in:
salam committed 2026-10-19 08:18:39 +02:00
commit 1218dd1517
12716 files changed
+989233

No files matched your search

@@ -0,0 +1,529 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
<file t3:id="1415814818" source-language="en" datatype="plaintext" original="EXT:extensionmanager/Resources/Private/Language/locallang.xlf" date="2011-10-17T20:22:37Z" product-name="workspaces">
<header/>
<body>
<trans-unit id="extensionManager" resname="extensionManager">
<source>Extension Manager</source>
</trans-unit>
<trans-unit id="manageExtensions" resname="manageExtensions">
<source>Manage Extensions</source>
</trans-unit>
<trans-unit id="installExtension" resname="installExtension">
<source>Install Extension</source>
</trans-unit>
<trans-unit id="composerMode.title" resname="composerMode.title">
<source>Composer mode</source>
</trans-unit>
<trans-unit id="composerMode.message" resname="composerMode.message">
<source>The system is set to composer mode. Please notice that it is not possible to add an extension with the Extension Manager. You have to use composer to add further extensions to your system.</source>
</trans-unit>
<trans-unit id="installedExtensions" resname="installedExtensions">
<source>Installed Extensions</source>
</trans-unit>
<trans-unit id="getExtensions" resname="getExtensions">
<source>Get Extensions</source>
</trans-unit>
<trans-unit id="showAllVersions" resname="showAllVersions">
<source>Show all versions of</source>
</trans-unit>
<trans-unit id="extConfTemplate.backToList" resname="extConfTemplate.backToList">
<source>Back to list</source>
</trans-unit>
<trans-unit id="updateScript.headline" resname="updateScript.headline">
<source>Update script for %s</source>
</trans-unit>
<trans-unit id="updateScript.none" resname="updateScript.none">
<source>No update necessary.</source>
</trans-unit>
<trans-unit id="button.cancel" resname="button.cancel">
<source>Cancel</source>
</trans-unit>
<trans-unit id="button.details" resname="button.details">
<source>Show Details</source>
</trans-unit>
<trans-unit id="button.remove" resname="button.remove">
<source>Remove extension</source>
</trans-unit>
<trans-unit id="button.updateExtension" resname="button.updateExtension">
<source>Update extension</source>
</trans-unit>
<trans-unit id="button.resolveDependencies" resname="button.resolveDependencies">
<source>Resolve dependencies</source>
</trans-unit>
<trans-unit id="label.resolveDependenciesEnableButton" resname="label.resolveDependenciesEnableButton">
<source>I understand what this means and I'm able to investigate on possibly occurring issues by myself.</source>
</trans-unit>
<trans-unit id="button.resolveDependenciesIgnore" resname="button.resolveDependenciesIgnore">
<source>I know what I'm doing, continue anyway</source>
</trans-unit>
<trans-unit id="extensionList.update.script" resname="extensionList.update.script">
<source>Execute the update script</source>
</trans-unit>
<trans-unit id="extensionList.downloadsql" resname="extensionList.downloadsql">
<source>Download SQL Dump</source>
</trans-unit>
<trans-unit id="extensionList.remove" resname="extensionList.remove">
<source>Remove</source>
</trans-unit>
<trans-unit id="extensionList.update" resname="extensionList.update">
<source>Update</source>
</trans-unit>
<trans-unit id="extensionList.updateToVersion" resname="extensionList.updateToVersion">
<source>Update to version %s</source>
</trans-unit>
<trans-unit id="extensionList.updateDisabled" resname="extensionList.updateDisabled">
<source>An update is available but this operation is currently disabled</source>
</trans-unit>
<trans-unit id="extensionList.deactivate" resname="extensionList.deactivate">
<source>Deactivate</source>
</trans-unit>
<trans-unit id="extensionList.activate" resname="extensionList.activate">
<source>Activate</source>
</trans-unit>
<trans-unit id="extensionList.downloadzip" resname="extensionList.downloadzip">
<source>Download as zip</source>
</trans-unit>
<trans-unit id="extensionList.uploadExtension" resname="extensionList.uploadExtension">
<source>Upload Extension .t3x/.zip</source>
</trans-unit>
<trans-unit id="extensionList.overwriteExtension" resname="extensionList.overwriteExtension">
<source>Overwrite</source>
</trans-unit>
<trans-unit id="extensionList.overwritingDisabled" resname="extensionList.overwritingDisabled">
<source>Extension is already available and overwriting was not enabled</source>
</trans-unit>
<trans-unit id="extensionList.loading" resname="extensionList.loading">
<source>Loading form...</source>
</trans-unit>
<trans-unit id="extensionList.header.update" resname="extensionList.header.update">
<source>Upd.</source>
</trans-unit>
<trans-unit id="extensionList.header.title.update" resname="extensionList.header.title.update">
<source>Update</source>
</trans-unit>
<trans-unit id="extensionList.header.activate" resname="extensionList.header.activate">
<source>A/D</source>
</trans-unit>
<trans-unit id="extensionList.header.title.activate" resname="extensionList.header.title.activate">
<source>Activate / Deactivate</source>
</trans-unit>
<trans-unit id="extensionList.header.extensionName" resname="extensionList.header.extensionName">
<source>Extension</source>
</trans-unit>
<trans-unit id="extensionList.header.version" resname="extensionList.header.version">
<source>Version</source>
</trans-unit>
<trans-unit id="extensionList.header.extensionKey" resname="extensionList.header.extensionKey">
<source>Key</source>
</trans-unit>
<trans-unit id="extensionList.header.extensionVersion" resname="extensionList.header.extensionVersion">
<source>Version</source>
</trans-unit>
<trans-unit id="extensionList.header.extensionActions" resname="extensionList.header.extensionActions">
<source>Actions</source>
</trans-unit>
<trans-unit id="extensionList.header.extensionState" resname="extensionList.header.extensionState">
<source>State</source>
</trans-unit>
<trans-unit id="extensionList.header.extensionType" resname="extensionList.header.extensionType">
<source>Type</source>
</trans-unit>
<trans-unit id="extensionList.header.uploadComment" resname="extensionList.header.uploadComment">
<source>Upload Comment</source>
</trans-unit>
<trans-unit id="extensionList.header.lastUpdate" resname="extensionList.header.lastUpdate">
<source>Last Updated</source>
</trans-unit>
<trans-unit id="extensionList.header.description" resname="extensionList.header.description">
<source>Description</source>
</trans-unit>
<trans-unit id="extensionList.header.author" resname="extensionList.header.author">
<source>Author</source>
</trans-unit>
<trans-unit id="searchTemplate.searchExtensions" resname="searchTemplate.searchExtensions">
<source>Search extensions</source>
</trans-unit>
<trans-unit id="extensionList.search" resname="extensionList.search">
<source>Search</source>
</trans-unit>
<trans-unit id="searchTemplate.submitButton" resname="searchTemplate.submitButton">
<source>Go</source>
</trans-unit>
<trans-unit id="searchTemplate.resetSearchButton" resname="searchTemplate.resetSearchButton">
<source>Reset Search</source>
</trans-unit>
<trans-unit id="searchTemplate.yourSearch" resname="searchTemplate.yourSearch">
<source>Your search</source>
</trans-unit>
<trans-unit id="searchTemplate.searchAgain" resname="searchTemplate.searchAgain">
<source>Search again</source>
</trans-unit>
<trans-unit id="uploadTemplate.uploadButton" resname="uploadTemplate.uploadButton">
<source>Upload!</source>
</trans-unit>
<trans-unit id="uploadTemplate.extensionLabel" resname="uploadTemplate.extensionLabel">
<source>Extension</source>
</trans-unit>
<trans-unit id="extensionList.removalConfirmation.title" resname="extensionList.removalConfirmation.title">
<source>Extension Removal</source>
</trans-unit>
<trans-unit id="extensionList.removalConfirmation.message" resname="extensionList.removalConfirmation.message">
<source>The extension is currently installed. Uninstall extension?</source>
</trans-unit>
<trans-unit id="extensionList.updateConfirmation.title" resname="extensionList.updateConfirmation.title">
<source>Update?</source>
</trans-unit>
<trans-unit id="extensionList.updateConfirmation.message" resname="extensionList.updateConfirmation.message">
<source>Update Comments</source>
</trans-unit>
<trans-unit id="extensionList.databaseImport" resname="extensionList.databaseImport">
<source>The static database data has changed. You should re-import the data.</source>
</trans-unit>
<trans-unit id="extensionList.databaseReload" resname="extensionList.databaseReload">
<source>Nothing has changed since last import. You might want to reload static database data.</source>
</trans-unit>
<trans-unit id="extensionList.updateConfirmation.questionVersionComments" resname="extensionList.updateConfirmation.questionVersionComments">
<source>Version Comments</source>
</trans-unit>
<trans-unit id="extensionList.updateFlashMessage.title" resname="extensionList.updateFlashMessage.title">
<source>Extension Update</source>
</trans-unit>
<trans-unit id="extensionList.updateFlashMessage.body" resname="extensionList.updateFlashMessage.body">
<source>%s was updated!</source>
</trans-unit>
<trans-unit id="extensionList.removalConfirmation.question" resname="extensionList.removalConfirmation.question">
<source>Are you sure you want to remove the extension?</source>
</trans-unit>
<trans-unit id="dependencyCheck.unresolvedDependencies.title" resname="dependencyCheck.unresolvedDependencies.title">
<source>Please read this carefully</source>
</trans-unit>
<trans-unit id="dependencyCheck.unresolvedDependencies.message" resname="dependencyCheck.unresolvedDependencies.message">
<source><![CDATA[
If you continue installing the extension, all dependency checks will be turned off.
<ul>
<li>Required extensions are tried to be fetched from TER (if they do not yet exist in the system)</li>
<li>Version dependency checks are skipped</li>
</ul>
<strong>
Be aware that an installation without dependency checks may turn your installation unusable.<br />
In such a case manual intervention is required.
</strong>
]]></source>
</trans-unit>
<trans-unit id="dependencyCheck.unresolvedDependencies.question" resname="dependencyCheck.unresolvedDependencies.question">
<source>Are you sure you want to proceed?</source>
</trans-unit>
<trans-unit id="dependencyCheck.unresolvedDependencies.proceed" resname="dependencyCheck.unresolvedDependencies.proceed">
<source>I know what I'm doing, install the extension!</source>
</trans-unit>
<trans-unit id="dependencyCheck.headline" resname="dependencyCheck.headline">
<source>The following errors were found while trying to install "%s"</source>
</trans-unit>
<trans-unit id="dependencyCheck.requiredExtension" resname="dependencyCheck.requiredExtension">
<source>Required extension "%s"</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencies.headline" resname="downloadExtension.dependencies.headline">
<source>The following dependencies have to be resolved before installation:
</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencies.extensionWithVersion" resname="downloadExtension.dependencies.extensionWithVersion">
<source>%1$s (new version %2$s)</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencies.typeHeadline" resname="downloadExtension.dependencies.typeHeadline" xml:space="preserve">
<source>&lt;h3&gt;Extensions marked for %s:&lt;/h3&gt;
%s
</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencies.resolveAutomatically" resname="downloadExtension.dependencies.resolveAutomatically">
<source>Shall these dependencies be resolved automatically?</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencies.errorTitle" resname="downloadExtension.dependencies.errorTitle">
<source>Dependencies could not be resolved</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencies.errorMessage" resname="downloadExtension.dependencies.errorMessage">
<source>The dependencies of the following Extensions could not be resolved</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencyType.download" resname="downloadExtension.dependencyType.download">
<source>download</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencyType.install" resname="downloadExtension.dependencyType.install">
<source>install</source>
</trans-unit>
<trans-unit id="downloadExtension.dependencyType.update" resname="downloadExtension.dependencyType.update">
<source>update</source>
</trans-unit>
<trans-unit id="downloadExtension.updateExtension.error" resname="downloadExtension.updateExtension.error">
<source>Error while updating extension</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveDownloadError.title" resname="extensionList.dependenciesResolveDownloadError.title">
<source>Download Error</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveDownloadSuccess.message" resname="extensionList.dependenciesResolveDownloadSuccess.message">
<source>Your installation of {0} was successful.</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveDownloadSuccess.message.downloadOnly" resname="extensionList.dependenciesResolveDownloadSuccess.message.downloadOnly">
<source>Your download of {0} was successful.</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveDownloadSuccess.header" resname="extensionList.dependenciesResolveDownloadSuccess.header">
<source>Log</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveDownloadSuccess.item" resname="extensionList.dependenciesResolveDownloadSuccess.item">
<source>Extensions</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveFlashMessage.title" resname="extensionList.dependenciesResolveFlashMessage.title">
<source>{0} installed.</source>
</trans-unit>
<trans-unit id="extensionList.dependenciesResolveFlashMessage.title.downloadOnly" resname="extensionList.dependenciesResolveFlashMessage.title.downloadOnly">
<source>{0} downloaded.</source>
</trans-unit>
<trans-unit id="extensionList.uploadFlashMessage.title" resname="extensionList.uploadFlashMessage.title">
<source>Extension Upload</source>
</trans-unit>
<trans-unit id="extensionList.uploadFlashMessage.message" resname="extensionList.uploadFlashMessage.message">
<source>%s was uploaded!</source>
</trans-unit>
<trans-unit id="extensionList.installedFlashMessage.message" resname="extensionList.installedFlashMessage.message">
<source>%s was installed!</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTerFlashMessage.title" resname="extensionList.updateFromTerFlashMessage.title">
<source>Update Extension List</source>
</trans-unit>
<trans-unit id="extensionList.downloadViewHelper.submit" resname="extensionList.downloadViewHelper.submit">
<source>Import and Install</source>
</trans-unit>
<trans-unit id="extensionList.downloadViewHelper.submit.downloadOnly" resname="extensionList.downloadViewHelper.submit.downloadOnly">
<source>Import</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.label" resname="extensionList.showAllVersions.label">
<source>Show all versions</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.extensionKey" resname="extensionList.showAllVersions.extensionKey">
<source>Extension key</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.version" resname="extensionList.showAllVersions.version">
<source>Version</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.lastUploaded" resname="extensionList.showAllVersions.lastUploaded">
<source>Last uploaded</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.downloads" resname="extensionList.showAllVersions.downloads">
<source>Downloads</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.category" resname="extensionList.showAllVersions.category">
<source>Category</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.manual" resname="extensionList.showAllVersions.manual">
<source>Manual</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.author" resname="extensionList.showAllVersions.author">
<source>Author</source>
</trans-unit>
<trans-unit id="extensionList.showAllVersions.readOnline" resname="extensionList.showAllVersions.readOnline">
<source>Read online</source>
</trans-unit>
<trans-unit id="extensionList.remove.message" resname="extensionList.remove.message">
<source>Extension "%s" was removed successfully!</source>
</trans-unit>
<trans-unit id="extensionList.distribution.key" resname="extensionList.distribution.key">
<source>Key</source>
</trans-unit>
<trans-unit id="extensionList.distribution.author" resname="extensionList.distribution.author">
<source>Author</source>
</trans-unit>
<trans-unit id="extensionList.distribution.title" resname="extensionList.distribution.title">
<source>Title</source>
</trans-unit>
<trans-unit id="extensionList.distribution.version" resname="extensionList.distribution.version">
<source>Version</source>
</trans-unit>
<trans-unit id="extensionList.distribution.downloads" resname="extensionList.distribution.downloads">
<source>Downloads</source>
</trans-unit>
<trans-unit id="extensionList.distribution.lastUpdated" resname="extensionList.distribution.lastUpdated">
<source>Last Update</source>
</trans-unit>
<trans-unit id="extensionList.showUnsuitableDistributions" resname="extensionList.showUnsuitableDistributions">
<source>Show also distributions that are not suitable for this TYPO3 version</source>
</trans-unit>
<trans-unit id="extensionList.officialDistribution" resname="extensionList.officialDistribution">
<source>Official distribution</source>
</trans-unit>
<trans-unit id="distributions" resname="distributions">
<source>Get preconfigured distribution</source>
</trans-unit>
<trans-unit id="extensionList.installDistribution" resname="extensionList.installDistribution">
<source>Install</source>
</trans-unit>
<trans-unit id="extensionList.installImpexp" resname="extensionList.installImpexp">
<source>Please install the Import/Export (impexp) extension to enable distribution support.</source>
</trans-unit>
<trans-unit id="distribution.installImpexp" resname="distribution.installImpexp">
<source>Install impexp</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.label" resname="extensionList.updateFromTer.label">
<source>Retrieving extension list from TYPO3 Extension Repository (TER)...</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.buttonLabel" resname="extensionList.updateFromTer.buttonLabel">
<source>Update now</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.lastUpdate.label" resname="extensionList.updateFromTer.lastUpdate.label">
<source>Last update</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.lastUpdate.timeSinceLastUpdateLabel" resname="extensionList.updateFromTer.lastUpdate.timeSinceLastUpdateLabel">
<source>Time since last update</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.lastUpdate.noInfo" resname="extensionList.updateFromTer.lastUpdate.noInfo">
<source>unknown</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.lastUpdate.fullTimeFormat" resname="extensionList.updateFromTer.lastUpdate.fullTimeFormat">
<source>Y-m-d H:i:s</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.lastUpdate.timeOfLastUpdate" resname="extensionList.updateFromTer.lastUpdate.timeOfLastUpdate">
<source>Time of last update: </source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.lastUpdate.noTimeOfLastUpdate" resname="extensionList.updateFromTer.lastUpdate.noTimeOfLastUpdate">
<source>No last update time known.</source>
</trans-unit>
<trans-unit id="extensionList.updateFromTer.never" resname="extensionList.updateFromTer.never">
<source>Never</source>
</trans-unit>
<trans-unit id="extensionList.uninstall.dependencyError" resname="extensionList.uninstall.dependencyError">
<source>Cannot deactivate extension '%s' - The extension(s) '%s' depend on it.</source>
</trans-unit>
<trans-unit id="distribution.error.headline" resname="distribution.error.headline">
<source>Could not install distribution '%s'</source>
</trans-unit>
<trans-unit id="distribution.welcome.headline" resname="distribution.welcome.headline">
<source>Congratulations...</source>
</trans-unit>
<trans-unit id="distribution.welcome.message" resname="distribution.welcome.message">
<source>You successfully installed the distribution '%s'</source>
</trans-unit>
<trans-unit id="distribution.welcome.nextSteps" resname="distribution.welcome.nextSteps">
<source>Now you can</source>
</trans-unit>
<trans-unit id="distribution.welcome.openViewModule" resname="distribution.welcome.openViewModule">
<source>View your website</source>
</trans-unit>
<trans-unit id="distribution.welcome.openPageModule" resname="distribution.welcome.openPageModule">
<source>Start editing your website</source>
</trans-unit>
<trans-unit id="distribution.dependency.headline" resname="distribution.dependency.headline">
<source>Dependencies, conflicts and suggestions</source>
</trans-unit>
<trans-unit id="distribution.dependency.identifier" resname="distribution.dependency.identifier">
<source>Identifier</source>
</trans-unit>
<trans-unit id="distribution.dependency.type" resname="distribution.dependency.type">
<source>Type</source>
</trans-unit>
<trans-unit id="distribution.dependency.version" resname="distribution.dependency.version">
<source>Version</source>
</trans-unit>
<trans-unit id="task.updateExtensionListTask.name" resname="task.updateExtensionListTask.name">
<source>Update extension list</source>
</trans-unit>
<trans-unit id="task.updateExtensionListTask.description" resname="task.updateExtensionListTask.description">
<source>Update TER extension list on a regular basis. Once a day is a good interval.</source>
</trans-unit>
<trans-unit id="report.status.mainRepository.title" resname="report.status.mainRepository.title">
<source>Update status of typo3.org main repository extension list</source>
</trans-unit>
<trans-unit id="report.status.mainRepository.notFound.value" resname="report.status.mainRepository.notFound.value">
<source>Error</source>
</trans-unit>
<trans-unit id="report.status.mainRepository.notFound.message" resname="report.status.mainRepository.notFound.message">
<source>The typo3.org extension repository was not found. Please import the main typo3.org extension repository in the install tool wizard.</source>
</trans-unit>
<trans-unit id="report.status.mainRepository.notUpToDate.value" resname="report.status.mainRepository.notUpToDate.value">
<source>Extension list is not up to date!</source>
</trans-unit>
<trans-unit id="report.status.mainRepository.notUpToDate.message" resname="report.status.mainRepository.notUpToDate.message">
<source>The Main Repository extension list is older than 7 days. Please update it in the Extension manager or Scheduler.</source>
</trans-unit>
<trans-unit id="report.status.mainRepository.upToDate.value" resname="report.status.mainRepository.upToDate.value">
<source>OK</source>
</trans-unit>
<trans-unit id="report.status.loadedExtensions.title" resname="report.status.loadedExtensions.title">
<source>Security status of loaded extensions</source>
</trans-unit>
<trans-unit id="report.status.loadedExtensions.noInsecureExtensionLoaded.value" resname="report.status.loadedExtensions.noInsecureExtensionLoaded.value">
<source>OK</source>
</trans-unit>
<trans-unit id="report.status.loadedExtensions.insecureExtensionLoaded.value" resname="report.status.loadedExtensions.insecureExtensionLoaded.value">
<source>%s insecure extension(s) found</source>
</trans-unit>
<trans-unit id="report.status.loadedExtensions.insecureExtensionLoaded.message" resname="report.status.loadedExtensions.insecureExtensionLoaded.message">
<source>The following extensions are insecure and usage might damage your system. Please update these extensions as soon as possible or remove them from your system:&lt;br&gt;&lt;br&gt;%s</source>
</trans-unit>
<trans-unit id="report.status.loadedExtensions.insecureExtensionLoaded.message.extension" resname="report.status.loadedExtensions.insecureExtensionLoaded.message.extension">
<source>&lt;strong&gt;%1$s&lt;/strong&gt; (version %2$s)&lt;br&gt;</source>
</trans-unit>
<trans-unit id="report.status.existingExtensions.title" resname="report.status.existingExtensions.title">
<source>Security status of existing, but not loaded extensions</source>
</trans-unit>
<trans-unit id="report.status.existingExtensions.noInsecureExtensionExists.value" resname="report.status.existingExtensions.noInsecureExtensionExists.value">
<source>OK</source>
</trans-unit>
<trans-unit id="report.status.existingExtensions.insecureExtensionExists.value" resname="report.status.existingExtensions.insecureExtensionExists.value">
<source>%s insecure extension(s) found</source>
</trans-unit>
<trans-unit id="report.status.existingExtensions.insecureExtensionExists.message" resname="report.status.existingExtensions.insecureExtensionExists.message">
<source>The following extensions were found on your system, but are currently not installed. Please delete the extensions using the extension manager:&lt;br&gt;&lt;br&gt;%s</source>
</trans-unit>
<trans-unit id="report.status.existingExtensions.insecureExtensionExists.message.extension" resname="report.status.existingExtensions.insecureExtensionExists.message.extension">
<source>&lt;strong&gt;%1$s&lt;/strong&gt; (version %2$s)&lt;br&gt;</source>
</trans-unit>
<trans-unit id="report.status.loadedOutdatedExtensions.title" resname="report.status.loadedOutdatedExtensions.title">
<source>Outdated status of loaded extensions</source>
</trans-unit>
<trans-unit id="report.status.loadedOutdatedExtensions.noOutdatedExtensionLoaded.value" resname="report.status.loadedOutdatedExtensions.noOutdatedExtensionLoaded.value">
<source>OK</source>
</trans-unit>
<trans-unit id="report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.value" resname="report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.value">
<source>%s outdated extension(s) found</source>
</trans-unit>
<trans-unit id="report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message" resname="report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message">
<source>The following extensions are outdated and may not be compatible with your installation. Please make sure these extensions are compatible and ask the extension author to publish updates:&lt;br&gt;&lt;br&gt;%s</source>
</trans-unit>
<trans-unit id="report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message.extension" resname="report.status.loadedOutdatedExtensions.outdatedExtensionLoaded.message.extension">
<source>&lt;strong&gt;%1$s&lt;/strong&gt; (version %2$s)&lt;br&gt;</source>
</trans-unit>
<trans-unit id="report.status.existingOutdatedExtensions.title" resname="report.status.existingOutdatedExtensions.title">
<source>Outdated status of existing, but not loaded extensions</source>
</trans-unit>
<trans-unit id="report.status.existingOutdatedExtensions.noOutdatedExtensionExists.value" resname="report.status.existingOutdatedExtensions.noOutdatedExtensionExists.value">
<source>OK</source>
</trans-unit>
<trans-unit id="report.status.existingOutdatedExtensions.outdatedExtensionExists.value" resname="report.status.existingOutdatedExtensions.outdatedExtensionExists.value">
<source>%s outdated extension(s) found</source>
</trans-unit>
<trans-unit id="report.status.existingOutdatedExtensions.outdatedExtensionExists.message" resname="report.status.existingOutdatedExtensions.outdatedExtensionExists.message">
<source>The following extensions were found on your system, but are currently not installed. Please make sure they are compatible with your system before installing them:&lt;br&gt;&lt;br&gt;%s</source>
</trans-unit>
<trans-unit id="report.status.existingOutdatedExtensions.outdatedExtensionExists.message.extension" resname="report.status.existingOutdatedExtensions.outdatedExtensionExists.message.extension">
<source>&lt;strong&gt;%1$s&lt;/strong&gt; (version %2$s)&lt;br&gt;</source>
</trans-unit>
<trans-unit id="fileHandling.couldNotRemoveDirectory" resname="fileHandling.couldNotRemoveDirectory">
<source>ERROR: Could not remove extension directory "%s". Reasons</source>
</trans-unit>
<trans-unit id="fileHandling.couldNotCreateDirectory" resname="fileHandling.couldNotCreateDirectory">
<source>ERROR: Could not create extension directory "%s"!</source>
</trans-unit>
<trans-unit id="fileHandling.installPathWasNoDirectory" resname="fileHandling.installPathWasNoDirectory">
<source>ERROR: The extension install path "%s" was no directory!</source>
</trans-unit>
<trans-unit id="config.automaticInstallation" resname="config.automaticInstallation">
<source>Install extensions automatically after download from TER or file upload</source>
</trans-unit>
<trans-unit id="config.offlineMode" resname="config.offlineMode">
<source>Disable TER connection and hide menu items</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
<file t3:id="1435679883" source-language="en" datatype="plaintext" original="EXT:extensionmanager/Resources/Private/Language/locallang_db.xlf" date="2015-06-30T15:55:11Z" product-name="">
<header/>
<body>
<trans-unit id="tx_extensionmanager_domain_model_extension" resname="tx_extensionmanager_domain_model_extension">
<source>Extension</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.extensionkey" resname="tx_extensionmanager_domain_model_extension.extensionkey">
<source>Extension Key</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.version" resname="tx_extensionmanager_domain_model_extension.version">
<source>Version</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.title" resname="tx_extensionmanager_domain_model_extension.title">
<source>Title</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.description" resname="tx_extensionmanager_domain_model_extension.description">
<source>Description</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.state" resname="tx_extensionmanager_domain_model_extension.state">
<source>State</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.category" resname="tx_extensionmanager_domain_model_extension.category">
<source>Category</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.lastupdated" resname="tx_extensionmanager_domain_model_extension.lastupdated">
<source>Last Updated</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.updatecomment" resname="tx_extensionmanager_domain_model_extension.updatecomment">
<source>Update Comment</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.authorname" resname="tx_extensionmanager_domain_model_extension.authorname">
<source>Author Name</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.authoremail" resname="tx_extensionmanager_domain_model_extension.authoremail">
<source>Author Email</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.md5hash" resname="tx_extensionmanager_domain_model_extension.md5hash">
<source>Md5 hash</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.reviewstate" resname="tx_extensionmanager_domain_model_extension.reviewstate">
<source>Review State</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.integerversion" resname="tx_extensionmanager_domain_model_extension.integerversion">
<source>Integer Version</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.currentversion" resname="tx_extensionmanager_domain_model_extension.currentversion">
<source>Current Version</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_extension.serializedDependencies" resname="tx_extensionmanager_domain_model_extension.serializedDependencies">
<source>Serialized dependencies</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository" resname="tx_extensionmanager_domain_model_repository">
<source>Repository</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository.title" resname="tx_extensionmanager_domain_model_repository.title">
<source>Title</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository.description" resname="tx_extensionmanager_domain_model_repository.description">
<source>Description</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository.wsdlUrl" resname="tx_extensionmanager_domain_model_repository.wsdlUrl">
<source>WSDL URL</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository.mirrorListUrl" resname="tx_extensionmanager_domain_model_repository.mirrorListUrl">
<source>Mirror list URL</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository.lastUpdate" resname="tx_extensionmanager_domain_model_repository.lastUpdate">
<source>Last update</source>
</trans-unit>
<trans-unit id="tx_extensionmanager_domain_model_repository.extensionCount" resname="tx_extensionmanager_domain_model_repository.extensionCount">
<source>Extension count</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
<file t3:id="1415814819" source-language="en" datatype="plaintext" original="EXT:extensionmanager/Resources/Private/Language/locallang_mod.xlf" date="2011-10-17T20:22:38Z" product-name="workspaces">
<header/>
<body>
<trans-unit id="mlang_tabs_tab" resname="mlang_tabs_tab">
<source>Extensions</source>
</trans-unit>
<trans-unit id="mlang_labels_tablabel" resname="mlang_labels_tablabel">
<source>TYPO3 Extension Manager</source>
</trans-unit>
<trans-unit id="mlang_labels_tabdescr" resname="mlang_labels_tabdescr">
<source>Manages TYPO3 extensions from a central repository. TYPO3 extensions include plugins, modules, class extensions, configuration code, etc. &lt;br /&gt;&lt;em&gt;Access for 'admin' users only!&lt;/em&gt;</source>
</trans-unit>
</body>
</file>
</xliff>
@@ -0,0 +1,13 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:be.pageRenderer
includeRequireJsModules="{
0:'TYPO3/CMS/Extensionmanager/Main'
}"
/>
<em:be.trigger triggers="{triggers}" />
<f:render section="headline" />
<f:render section="content" />
@@ -0,0 +1,50 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<div class="card card-size-fixed-small">
<div class="card-image">
<f:link.action action="show" controller="Distribution" arguments="{extension:distribution}">
<em:distributionImage extensionkey="{distribution.extensionKey}" alt="{distribution.title}" height="225" width="300" />
</f:link.action>
<f:if condition="{distribution.dependencies}">
<div class="card-image-badge">
<em:typo3Dependency extension="{distribution}" />
</div>
</f:if>
<f:if condition="{official}">
<div class="distribution-official-badge">
<f:image
src="EXT:extensionmanager/Resources/Public/Images/OfficialBadge.svg" alt="{distribution.title}"
height="64"
width="64"
/>
</div>
</f:if>
</div>
<div class="card-header">
<h3 class="card-title">
<f:link.action action="show" controller="Distribution" arguments="{extension:distribution}">
{distribution.title}
</f:link.action>
</h3>
<span class="card-subtitle">
{distribution.extensionKey}
</span>
</div>
<div class="card-content">
<p class="card-text">
{distribution.description -> f:format.crop(maxCharacters: 150) -> f:format.raw()}
</p>
</div>
<div class="card-footer">
<f:link.action action="installDistribution" controller="Download" arguments="{extension:distribution}" class="btn btn-default t3-button-action-installdistribution">
<core:icon identifier="actions-system-extension-import" /> <f:translate key="extensionList.installDistribution">Install</f:translate>
</f:link.action>
<f:link.action action="show" controller="Distribution" arguments="{extension:distribution}" class="btn btn-link">
<f:translate key="button.details">Show Details</f:translate>
</f:link.action>
</div>
</div>
@@ -0,0 +1,12 @@
<f:be.widget.paginate objects="{extensions}" as="paginatedExtensions" configuration="{itemsPerPage: 10, maximumNumberOfLinks: 2}">
<table id="terTable" class="table table-striped table-hover typo3-extension-list">
<f:if condition="{showVersionList}">
<f:then>
<f:render partial="List/TerShowVersionsTable.html" arguments="{paginatedExtensions:paginatedExtensions}" />
</f:then>
<f:else>
<f:render partial="List/TerTable.html" arguments="{paginatedExtensions:paginatedExtensions, availableAndInstalled:availableAndInstalled}" />
</f:else>
</f:if>
</table>
</f:be.widget.paginate>
@@ -0,0 +1,19 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<td>
<em:downloadExtension extension="{extension}" />
</td>
<td>
{extension.title}
</td>
<td>
{extension.version}
</td>
<td>
<f:format.nl2br>{extension.updateComment}</f:format.nl2br>
</td>
<td>
<f:format.date>{extension.lastUpdated}</f:format.date>
</td>
<td class="{extension.stateString}">
{extension.stateString}
</td>
@@ -0,0 +1,20 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<thead>
<tr>
<th><f:translate key="extensionList.header.extensionActions"/></th>
<th><f:translate key="extensionList.header.extensionName"/></th>
<th><f:translate key="extensionList.header.version"/></th>
<th><f:translate key="extensionList.header.uploadComment"/></th>
<th><f:translate key="extensionList.header.lastUpdate"/></th>
<th><f:translate key="extensionList.header.extensionState"/></th>
</tr>
</thead>
<tbody>
<f:for each="{extensions}" as="extension">
<f:cycle values="{0: 'odd', 1: 'even'}" as="zebraClass">
<tr class="{zebraClass}">
</f:cycle>
<f:render partial="List/TerShowVersionsSingleLine" arguments="{extension:extension}" />
</tr>
</f:for>
</tbody>
@@ -0,0 +1,36 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<td>
<em:downloadExtension extension="{extension}" />
</td>
<td>
<f:link.action action="showAllVersions" arguments="{extensionKey: extension.extensionKey}" title="{f:translate(key:'extensionList.showAllVersions.label')}">
{extension.title}
</f:link.action>
<em:showExtensionVersions extension="{extension}" />
</td>
<td>
<f:link.action action="showAllVersions" arguments="{extensionKey: extension.extensionKey}" title="{f:translate(key:'extensionList.showAllVersions.label')}">
{extension.extensionKey}
</f:link.action>
</td>
<td>
<f:link.action action="showAllVersions" arguments="{extensionKey: extension.extensionKey}" title="{f:translate(key:'extensionList.showAllVersions.label')}">
{extension.version}
</f:link.action>
<em:showExtensionVersions extension="{extension}" />
</td>
<td>
<f:format.date>{extension.lastUpdated}</f:format.date>
</td>
<td title="{extension.description}">
<f:format.crop maxCharacters="50" respectWordBoundaries="true" respectHtml="false">{extension.description}</f:format.crop>
<div class="author">
<div class="author-name">{extension.authorName}</div>
<div class="author-email">{extension.authorEmail}</div>
</div>
</td>
<td>
<span class="label label-{extension.stateString}">{extension.stateString}</span>
</td>
@@ -0,0 +1,19 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<thead>
<tr>
<th><f:translate key="extensionList.header.extensionActions"/></th>
<th><f:translate key="extensionList.header.extensionName"/></th>
<th><f:translate key="extensionList.header.extensionKey"/></th>
<th><f:translate key="extensionList.header.version"/></th>
<th><f:translate key="extensionList.header.lastUpdate"/></th>
<th><f:translate key="extensionList.header.description"/></th>
<th><f:translate key="extensionList.header.extensionState"/></th>
</tr>
</thead>
<tbody>
<f:for each="{paginatedExtensions}" as="extension">
<tr class="{em:installationStateCssClass(needle:extension.extensionKey, haystack:availableAndInstalled)}">
<f:render partial="List/TerSingleLine.html" arguments="{extension:extension}" />
</tr>
</f:for>
</tbody>
@@ -0,0 +1,22 @@
<p><f:translate key="dependencyCheck.headline" arguments="{0: extension.extensionKey}" />:</p>
<ul>
<f:for each="{unresolvedDependencies}" key="key" as="messages">
<f:if condition="{key} == {extension.extensionKey}">
<f:for each="{messages}" as="message">
<li>{message.message -> f:format.htmlspecialchars()}</li>
</f:for>
</f:if>
</f:for>
<f:for each="{unresolvedDependencies}" key="key" as="messages">
<f:if condition="{key} != {extension.extensionKey}">
<li>
<strong>{f:translate(key: 'dependencyCheck.requiredExtension', arguments: '{key: key}') -> f:format.htmlspecialchars()}</strong>
<ul>
<f:for each="{messages}" as="message">
<li>{message.message -> f:format.htmlspecialchars()}</li>
</f:for>
</ul>
</li>
</f:if>
</f:for>
</ul>
@@ -0,0 +1,6 @@
<f:render partial="List/UnresolvedDependencies.html" arguments="{_all}" />
<f:be.infobox title="{f:translate(key: 'dependencyCheck.unresolvedDependencies.title')}" state="1">
<f:render partial="List/UnresolvedDependenciesMessage.html" />
<p><strong><f:translate key="dependencyCheck.unresolvedDependencies.question" /></strong></p>
</f:be.infobox>
@@ -0,0 +1,6 @@
<p>{f:translate(key: 'dependencyCheck.unresolvedDependencies.message') -> f:format.raw()}</p>
<div class="checkbox">
<label>
<input type="checkbox" name="unlockDependencyIgnoreButton"> <f:translate key="label.resolveDependenciesEnableButton" />
</label>
</div>
@@ -0,0 +1,15 @@
<f:form
action="updateExtensionListFromTer"
controller="UpdateFromTer"
format="json"
class="update-from-ter"
>
{f:translate(key: 'extensionList.updateFromTer.lastUpdate.timeSinceLastUpdateLabel')}
<span class="time-since-last-update" title="{f:translate(key: 'extensionList.updateFromTer.lastUpdate.noTimeOfLastUpdate')}">
{f:translate(key: 'extensionList.updateFromTer.lastUpdate.noInfo')}
</span>
<input
class="btn btn-default"
type="submit"
value="{f:translate(key: 'extensionList.updateFromTer.buttonLabel')}" />
</f:form>
@@ -0,0 +1,4 @@
<div class="uploadForm" style="display: none;">
<i class="fa fa-circle-o-notch fa-spin"></i>
<f:translate key="extensionList.loading"/>
</div>
@@ -0,0 +1,83 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main" />
<f:section name="headline">
</f:section>
<f:section name="content">
<div class="distribution-detail">
<div class="distribution-detail-previewpane">
<em:distributionImage extensionkey="{extension.extensionKey}" alt="" height="225" width="300" />
</div>
<div class="distribution-detail-body">
<div class="distribution-detail-header">
<h1>{extension.title}</h1>
<p>{extension.description}</p>
</div>
<ul class="distribution-detail-actions">
<f:if condition="{distributionActive}">
<f:else>
<li>
<f:link.action action="installDistribution" controller="Download" arguments="{extension:extension}" class="btn btn-default t3-button-action-installdistribution">
<core:icon identifier="actions-system-extension-import" /> <f:translate key="extensionList.installDistribution">Install</f:translate>
</f:link.action>
</li>
</f:else>
<f:then>
<li>
<button class="btn btn-default distribution-openViewModule" onclick="top.goToModule('web_ViewpageView');">
<core:icon identifier="actions-document-view" /> <f:translate key="distribution.welcome.openViewModule" />
</button>
</li>
<li>
<button class="btn btn-default distribution-openPageModule" onclick="top.goToModule('web_layout');">
<core:icon identifier="actions-open" /> <f:translate key="distribution.welcome.openPageModule" />
</button>
</li>
</f:then>
</f:if>
</ul>
<dl class="dl-horizontal dl-horizontal-wide distribution-detail-summary">
<dt><f:translate key="extensionList.distribution.title" /></dt>
<dd>{extension.title}</dd>
<dt><f:translate key="extensionList.distribution.key" /></dt>
<dd>{extension.extensionKey}</dd>
<dt><f:translate key="extensionList.distribution.version" /></dt>
<dd>{extension.version} (<f:format.date format="d.m.Y">{extension.lastUpdated}</f:format.date>)<br><span class="{extension.stateString}">{extension.stateString}</span></dd>
<dt><f:translate key="extensionList.distribution.author" /></dt>
<dd>{extension.authorName}</dd>
<dt><f:translate key="extensionList.distribution.downloads" /></dt>
<dd>{extension.alldownloadcounter}</dd>
</dl>
<f:if condition="{extension.dependencies}">
<h2><f:translate key="distribution.dependency.headline" /></h2>
<div class="table-fit">
<table class="table table-striped table-hover">
<thead>
<tr>
<td><f:translate key="distribution.dependency.identifier" /></td>
<td><f:translate key="distribution.dependency.type" /></td>
<td><f:translate key="distribution.dependency.version" /></td>
</tr>
</thead>
<tbody>
<f:for each="{extension.dependencies}" as="dependency">
<tr>
<td>{dependency.identifier}</td>
<td>{dependency.type}</td>
<td>
{dependency.lowestVersion}<f:if condition="{dependency.highestVersion}">-{dependency.highestVersion}</f:if>
</td>
</tr>
</f:for>
</tbody>
</table>
</div>
</f:if>
</div>
</div>
</f:section>
@@ -0,0 +1,9 @@
<f:format.raw><f:format.json value="{
result: result,
extension: extension.extensionKey,
installationTypeLanguageKey: installationTypeLanguageKey,
errorCount: '{f:count(subject: unresolvedDependencies)}',
errorTitle: '{f:translate(key: \'downloadExtension.dependencies.errorTitle\')}',
errorMessage: '{f:render(partial: \'List/UnresolvedDependencies\', arguments: \'{_all}\')}',
skipDependencyUri: '{f:uri.action(action: \'installExtensionWithoutSystemDependencyCheck\', format: \'json\', arguments: \'{extension: extension}\')}'
}" /></f:format.raw>
@@ -0,0 +1,41 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main"/>
<f:section name="headline">
<h1><f:translate key="distributions">Get Distributions</f:translate></h1>
</f:section>
<f:section name="content">
<f:if condition="{enableDistributionsView}">
<f:then>
<f:if condition="{showUnsuitableDistributions} == 0">
<div class="row">
<div class="col-sm-6">
<f:form class="typo3-extensionmanager-unsuitable-dist" action="distributions" arguments="{showUnsuitableDistributions: 1}" >
<div class="input-group">
<span class="input-group-btn">
<f:form.submit class="btn btn-default" value="{f:translate(key:'extensionList.showUnsuitableDistributions')}"/>
</span>
</div>
</f:form>
</div>
</div>
</f:if>
<div class="card-container">
<f:for each="{officialDistributions}" as="distribution">
<f:render partial="List/Distribution" arguments="{distribution: distribution, official: 1}" />
</f:for>
<f:for each="{communityDistributions}" as="distribution">
<f:render partial="List/Distribution" arguments="{distribution: distribution, official: 0}" />
</f:for>
</div>
</f:then>
<f:else>
<p>{f:translate(key: 'extensionList.installImpexp')}</p>
<f:link.action action="toggleExtensionInstallationState" controller="Action" arguments="{extensionKey: 'impexp'}" class="btn btn-default t3-button-action-installdistribution">
<span class="fa fa-cloud-download">&nbsp;</span><f:translate key="distribution.installImpexp">Install impexp</f:translate>
</f:link.action>
</f:else>
</f:if>
</f:section>
@@ -0,0 +1,103 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main" />
<f:section name="headline">
<h1><f:translate key="installedExtensions" /></h1>
</f:section>
<f:section name="content">
<f:render partial="List/UploadForm" />
<form class="form-inline">
<div class="form-group">
<f:form.textfield name="Tx_Extensionmanager_extensionkey" placeholder="{f:translate(key:'extensionList.search')}" id="Tx_Extensionmanager_extensionkey" value="{search}" class="form-control" />
</div>
</form>
<br>
<div class="table-fit">
<table id="typo3-extension-list" class="table table-striped table-hover typo3-extension-list">
<thead>
<tr>
<th title="{f:translate(key:'extensionList.header.title.update')}"><f:translate key="extensionList.header.update"/></th>
<th title="{f:translate(key:'extensionList.header.title.activate')}"><f:translate key="extensionList.header.activate"/></th>
<th><f:translate key="extensionList.header.extensionName"/></th>
<th><f:translate key="extensionList.header.extensionKey"/></th>
<th><f:translate key="extensionList.header.extensionVersion"/></th>
<th><f:translate key="extensionList.header.extensionState"/></th>
<th><f:translate key="extensionList.header.extensionType"/></th>
<th><f:translate key="extensionList.header.extensionActions"/></th>
</tr>
</thead>
<tbody>
<f:for each="{extensions}" as="extension" key="extensionKey">
<f:if condition="{extension.terObject}">
<f:then>
<tr id="{extensionKey}" class="{f:if(condition:'{extension.terObject.reviewState} == -1', then:'insecure')}{f:if(condition:'{extension.terObject.reviewState} == -2', then:'outdated')} {f:if(condition:'{extension.installed}', then: '', else: 'inactive')}">
</f:then>
<f:else>
<tr id="{extensionKey}" class="{f:if(condition:'{extension.installed}', then: '', else: 'inactive')}">
</f:else>
</f:if>
<td>
<f:if condition="{extension.updateAvailable}">
<f:if condition="{isComposerMode} || {settings.offlineMode} || {extension.state} == 'excludeFromUpdates'">
<f:then>
<span class="btn btn-default disabled" title="{f:translate(key:'extensionList.updateDisabled')}">
<core:icon identifier="actions-system-extension-update" />
</span>
</f:then>
<f:else>
<f:link.action action="updateCommentForUpdatableVersions"
class="btn btn-default"
additionalAttributes="{data-action:'update-extension'}"
format="json" controller="Download"
arguments="{extension:extension.key, integerVersionStart: extension.terObject.integerVersion, integerVersionStop: extension.updateToVersion.integerVersion}"
title="{f:translate(key:'extensionList.updateToVersion', arguments:'{0:extension.updateToVersion.version}')}"
>
<core:icon identifier="actions-system-extension-update" />
</f:link.action>
</f:else>
</f:if>
</f:if>
</td>
<td data-order="{f:if(condition: extension.installed, then: 'active', else: 'inactive')}">
<em:toggleExtensionInstallationState extension="{extension}" />
</td>
<td>
<f:if condition="{extension.ext_icon}">
<img class="ext-icon" src="../{extension.siteRelPath}{extension.ext_icon}" alt="" />
</f:if>
<span title="{extension.description}">{extension.title}</span>
</td>
<td>
{extensionKey}
</td>
<td>
{extension.version}
</td>
<td>
<span class="label label-{extension.state}">{extension.state}</span>
</td>
<td>
{extension.type}
</td>
<td>
<div class="btn-group">
<em:processAvailableActions extension="{extension}">
<em:updateScript class="btn btn-default" extensionKey="{extension.key}" />
<f:if condition="!{isComposerMode}">
<em:removeExtension class="btn btn-default" extension="{extension}" />
</f:if>
<f:link.action action="downloadExtensionZip" controller="Action" arguments="{extension:extension.key}" title="{f:translate(key:'extensionList.downloadzip')}" class="btn btn-default">
<core:icon identifier="actions-system-extension-download" />
</f:link.action>
<em:reloadSqlData class="btn btn-default" extension="{extension}" />
</em:processAvailableActions>
</div>
</td>
</tr>
</f:for>
</tbody>
</table>
</div>
</f:section>
@@ -0,0 +1,67 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main" />
<f:section name="docheader-buttons">
<a href="{f:uri.action(action: 'ter')}" title="{f:translate(key:'extConfTemplate.backToList')}">
<core:icon identifier="actions-view-go-back" />
</a>
</f:section>
<f:section name="headline">
<h1><f:translate key="showAllVersions" /> {extensionKey}</h1>
</f:section>
<f:section name="content">
<f:if condition="{currentVersion}">
<p><f:format.nl2br>{currentVersion.description}</f:format.nl2br></p>
<table cellpadding="0" cellspacing="0" class="currentVersionInfo">
<tr class="ter-ext-single-info-key">
<th><f:translate key="extensionList.showAllVersions.extensionKey" /></th>
<td><strong>{currentVersion.extensionKey}</strong></td>
</tr>
<tr>
<th><f:translate key="extensionList.showAllVersions.version" /></th>
<td>
{currentVersion.version}
<span class="ter-ext-state ter-ext-state-{currentVersion.stateString}">{currentVersion.stateString}</span>
</td>
</tr>
<tr>
<th><f:translate key="extensionList.showAllVersions.lastUploaded" /></th>
<td>
<f:format.date>{currentVersion.lastUpdated}</f:format.date></td>
</tr>
<tr>
<th><f:translate key="extensionList.showAllVersions.downloads" /></th>
<td>
<f:format.number decimals="0">
{currentVersion.alldownloadcounter}
</f:format.number>
</td>
</tr>
<tr>
<th><f:translate key="extensionList.showAllVersions.category" /></th>
<td>{currentVersion.categoryString}</td>
</tr>
<tr class="ter-ext-single-info-manual">
<th><f:translate key="extensionList.showAllVersions.manual" /></th>
<td>
<a href="https://docs.typo3.org/typo3cms/extensions/{currentVersion.extensionKey}/" target="_blank" rel="noopener noreferrer">
<f:translate key="extensionList.showAllVersions.readOnline" />
</a>
</td>
</tr>
<tr>
<th><f:translate key="extensionList.showAllVersions.author" /></th>
<td>{currentVersion.authorName}</td>
</tr>
</table>
</f:if>
<table id="terVersionTable" class="table table-striped table-hover typo3-extension-list">
<f:render partial="List/TerShowVersionsTable" arguments="{extensions: extensions}" />
</table>
</f:section>
@@ -0,0 +1,44 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main" />
<f:section name="headline">
<h1><f:translate key="getExtensions">Get Extensions</f:translate></h1>
</f:section>
<f:section name="content">
<f:render partial="List/UploadForm" />
<div class="row">
<div class="col-sm-6">
<f:form class="typo3-extensionmanager-searchTerForm form-inline" action="ter">
<div class="input-group">
<f:form.textfield name="search" value="{search}" class="form-control" />
<span class="input-group-btn">
<f:form.submit class="btn btn-default" value="{f:translate(key:'searchTemplate.submitButton')}"/>
</span>
</div>
</f:form>
</div>
<div class="col-sm-6">
<div class="pull-right">
<f:render partial="List/UpdateFromTer" />
</div>
</div>
</div>
<div id="terTableWrapper">
<f:if condition="{search}">
<f:then>
<table id="terSearchTable" class="table table-striped table-hover typo3-extension-list">
<f:render partial="List/TerTable" arguments="{paginatedExtensions:extensions, availableAndInstalled:availableAndInstalled}" />
</table>
</f:then>
<f:else>
<f:render partial="List/TerPaginator" arguments="{extensions:extensions, showVersionList:showVersionList, availableAndInstalled:availableAndInstalled}" />
</f:else>
</f:if>
<div class="splash-receivedata x-mask-loading"><core:icon identifier="spinner-circle-dark" /> <f:translate key="extensionList.updateFromTer.label"/></div>
</div>
</f:section>
@@ -0,0 +1,20 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main" />
<f:section name="headline">
<h1><f:translate key="installExtension">Install extension</f:translate> <small>{f:translate(key: 'downloadExtension.dependencies.errorTitle')}</small></h1>
</f:section>
<f:section name="content">
<f:render partial="List/UnresolvedDependencies" arguments="{_all}" />
<f:be.infobox title="{f:translate(key: 'dependencyCheck.unresolvedDependencies.title')}" state="1">
<f:render partial="List/UnresolvedDependenciesMessage" />
</f:be.infobox>
<f:link.action action="index" class="btn btn-default onClickMaskExtensionManager">
Go back
</f:link.action>
<f:link.action action="installExtensionWithoutSystemDependencyCheck" controller="Action" arguments="{extensionKey: extension.extensionKey}" class="btn btn-danger t3js-dependencies disabled onClickMaskExtensionManager">
<f:translate key="dependencyCheck.unresolvedDependencies.proceed" />
</f:link.action>
</f:section>
@@ -0,0 +1,20 @@
{namespace em=TYPO3\CMS\Extensionmanager\ViewHelpers}
<f:layout name="main" />
<f:section name="headline">
<h1><f:translate key="updateScript.headline" arguments="{0: extensionKey}" /></h1>
</f:section>
<f:section name="content">
<div class="update-script">
<f:if condition="{updateScriptResult}">
<f:then>
<f:format.raw>{updateScriptResult}</f:format.raw>
</f:then>
<f:else>
<f:translate key="updateScript.none" />
</f:else>
</f:if>
</div>
</f:section>
@@ -0,0 +1,27 @@
<f:form enctype="multipart/form-data" id="extensionUploadForm" method="post" controller="UploadExtensionFile" action="extract" class="form-horizontal">
<div class="form-group">
<label for="extensionFile" class="col-sm-2 control-label">
<f:translate key="uploadTemplate.extensionLabel" />
</label>
<div class="col-sm-4">
<f:form.upload name="extensionFile" id="extensionFile" class="form-control"/>
</div>
</div>
<div class="form-group">
<div class="col-sm-10 col-sm-offset-2">
<div class="checkbox">
<label for="extensionOverwrite">
<f:form.checkbox name="overwrite" id="extensionOverwrite" value="1" />
{f:translate(key:'extensionList.overwriteExtension')}
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<f:form.submit value="{f:translate(key:'uploadTemplate.uploadButton')}" id="extensionUpload" class="btn btn-primary"/>
</div>
</div>
</f:form>
Binary file not shown.

After

Width:  |  Height:  |  Size: 808 B

@@ -0,0 +1 @@
<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg"><title>module-extensionmanager</title><g fill="none" fill-rule="evenodd"><path d="M0 0h64v64H0z" fill="#F08D34"/><path d="M33.018 27.928l10.897-3.8A1 1 0 1 1 44.618 26L34 29.703V42.93c0 .589-.448 1.066-1 1.066s-1-.477-1-1.066V29.687l-10.67-3.815a1 1 0 1 1 .702-1.873l10.986 3.929zm.454-12a1.83 1.83 0 0 0-.944 0L16.472 21.05a.712.712 0 0 0-.472.643v20.633c0 .271.215.56.472.642l16.056 5.122c.26.083.687.082.944 0l16.056-5.122a.712.712 0 0 0 .472-.642V21.692a.723.723 0 0 0-.472-.643l-16.056-5.12z" fill="#FFF"/></g></svg>

After

Width:  |  Height:  |  Size: 581 B

@@ -0,0 +1,23 @@
<svg width="600" height="450" viewBox="0 0 600 450" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="1.5">
<path fill="url(#a)" d="M0 0h600v450H0z"/>
<path d="M374 384.829L629 290l-130-53-312 126" fill="url(#b)"/>
<path d="M374 72v312.829L413 362V96l-39-24z" fill="#f7f7f7"/>
<path d="M187 96l187-23v311.829L187 363V96z" fill="#fff"/>
<path d="M187 96v267l187 21.829L413 362V96l-39-23-187 23z" fill="none" stroke="#969696" stroke-width="2"/>
<path d="M291.466 305.869v-22.591l-22.591-2.759v22.591l22.591 2.759zm27.335-122.653c0-41.306-18.567-41.314-40.212-40.637-8.189.255-19.428 1.886-25.302 2.524v16.492c7.003-.5 18.299-1.38 27.561-.249 11.295 1.379 18.75 6.808 18.75 21.492 0 14.684-.903 16.155-15.587 31.757l-13.555 14.384v27.335l19.202 2.345v-23.687l12.199-12.969c15.136-15.998 16.944-21.166 16.944-38.787z" fill="#ccc" fill-rule="nonzero"/>
<g fill-rule="nonzero">
<path d="M388.788 360.247v8.369l-.813.47v-8.37l-1.44.831v-1.019l3.692-2.132v1.019l-1.439.832zm4.362 1.491v4.36l-.842.486v-4.36l-1.672-4.064.897-.517 1.233 3.082 1.234-4.507.851-.491-1.701 6.011zm4.224-1.62l-.785.453v3.541l-.814.47v-9.389s.805-.559 1.581-1.007c1.42-.82 1.831.204 1.831 1.853 0 2.039-.486 3.313-1.813 4.079m.093-5.03a7.66 7.66 0 0 0-.878.588v3.915l.878-.507c.524-.303.889-1.009.889-2.471 0-1.342-.226-1.908-.889-1.525m4.655 5.923c-1.542.89-1.953-.482-1.953-3.767 0-3.153.412-4.92 1.953-5.81 1.542-.89 1.953.402 1.953 3.555 0 3.285-.411 5.132-1.953 6.022m0-8.598c-.84.485-1.121 1.466-1.121 4.417 0 2.883.281 3.688 1.121 3.203.841-.486 1.121-1.615 1.121-4.497 0-2.951-.28-3.608-1.121-3.123m4.299 6.116c-.458.264-1.139.457-1.225.478v-.978c.225-.063.804-.259 1.216-.497.476-.274.785-1.033.785-2.067 0-1.219-.139-1.783-.803-1.399l-.767.442v-.98l.672-.388c.759-.438.794-1.572.794-2.107 0-1.061-.232-1.356-.699-1.086-.411.237-.88.655-1.15.892v-.979c.102-.086.655-.606 1.13-.881.963-.556 1.515-.284 1.515 1.715 0 .912-.225 1.846-.721 2.388.571-.275.832.472.832 1.786 0 1.999-.542 3.062-1.579 3.661"/>
<path d="M382.618 368.303a1.666 1.666 0 0 1-.375.293c-1.13.652-2.789-4.056-2.789-5.942 0-.694.115-.991.276-1.284-1.382 1.03-3.042 2.717-3.572 3.949-.115.298-.184.702-.184 1.165 0 2.943 2.189 8.359 3.733 7.468.715-.413 1.92-2.794 2.911-5.649m-.721-8.381c1.428-.825 2.858-1.32 2.858-.162 0 2.348-1.038 5.793-1.567 6.099-.945.545-2.121-2.548-2.121-4.433 0-.86.231-1.158.83-1.504" fill="#ff8700"/>
</g>
<defs>
<linearGradient id="a" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(36.9) scale(750)">
<stop offset="0" stop-color="#fff"/>
<stop offset="1" stop-color="#e6e6e6"/>
</linearGradient>
<linearGradient id="b" x2="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(53.626 -3.606 595.823) scale(98.3078)">
<stop offset="0" stop-color="#fff" stop-opacity="0"/>
<stop offset=".48" stop-color="#3b3b3b" stop-opacity=".039"/>
<stop offset="1" stop-opacity=".051"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
<g>
<circle fill="#FF8700" cx="32" cy="32" r="32"/>
<circle fill="#FFFFFF" cx="32" cy="32" r="18"/>
<g>
<g>
<path fill="#FFFFFF" d="M10.9,28.7c-0.1,0.4-0.2,0.8-0.4,1.2c-0.2,0.3-0.5,0.6-0.8,0.8c-0.3,0.2-0.7,0.4-1.2,0.4
c-0.5,0.1-0.9,0.1-1.5,0c-0.5-0.1-1-0.2-1.4-0.4c-0.4-0.2-0.7-0.5-1-0.8c-0.2-0.3-0.4-0.7-0.5-1.1C4,28.5,4,28.1,4,27.6
c0.1-0.4,0.2-0.8,0.4-1.2c0.2-0.3,0.5-0.6,0.8-0.8c0.3-0.2,0.7-0.4,1.2-0.4c0.4-0.1,0.9-0.1,1.5,0c0.5,0.1,1,0.2,1.4,0.4
c0.4,0.2,0.7,0.5,1,0.8c0.3,0.3,0.4,0.7,0.5,1.1C11,27.8,11,28.2,10.9,28.7z M9.6,28.5c0.1-0.5-0.1-0.8-0.4-1.2
c-0.3-0.3-0.9-0.5-1.5-0.6c-0.7-0.1-1.2-0.1-1.6,0.2c-0.4,0.2-0.7,0.5-0.7,1c-0.1,0.5,0.1,0.8,0.4,1.2c0.3,0.3,0.8,0.5,1.5,0.6
c0.7,0.1,1.2,0.1,1.7-0.1S9.6,28.9,9.6,28.5z"/>
<path fill="#FFFFFF" d="M11.7,24.9l-6.1-2.8l1.7-3.9l1.2,0.5l-1.1,2.5l1.4,0.6l1-2.1l1.2,0.5l-1,2.1l2.4,1.1L11.7,24.9z"/>
<path fill="#FFFFFF" d="M13.8,20.4l-5.3-4.1l2.6-3.4l1,0.8l-1.7,2.2l1.2,1l1.4-1.8l1,0.8l-1.4,1.8l2.1,1.6L13.8,20.4z"/>
<path fill="#FFFFFF" d="M17.1,16.5l-4.5-5l1.1-1l4.5,5L17.1,16.5z"/>
<path fill="#FFFFFF" d="M21.6,13.3c-0.4,0.2-0.8,0.4-1.2,0.4c-0.4,0.1-0.8,0-1.2-0.1c-0.4-0.1-0.8-0.3-1.1-0.6
c-0.4-0.3-0.7-0.7-1-1.2c-0.3-0.5-0.5-0.9-0.5-1.4c-0.1-0.5-0.1-0.9,0-1.3c0.1-0.4,0.3-0.8,0.5-1.1c0.3-0.3,0.6-0.6,0.9-0.8
c0.4-0.2,0.8-0.3,1.1-0.4c0.4,0,0.7,0,1,0.1l-0.2,1.2c-0.2,0-0.4-0.1-0.7-0.1c-0.2,0-0.4,0.1-0.6,0.2c-0.2,0.1-0.4,0.3-0.5,0.5
s-0.2,0.4-0.2,0.6c0,0.2,0,0.5,0,0.8c0.1,0.3,0.2,0.6,0.4,0.8c0.4,0.6,0.8,1,1.2,1.2s0.9,0.1,1.3-0.1c0.2-0.1,0.4-0.3,0.5-0.5
c0.1-0.2,0.2-0.4,0.3-0.7l1.2,0.4C22.9,12.2,22.4,12.9,21.6,13.3z"/>
<path fill="#FFFFFF" d="M24.1,12l-2.3-6.3l1.4-0.5l2.3,6.3L24.1,12z"/>
<path fill="#FFFFFF" d="M25.9,11.2l1.1-7L28.8,4l3.1,6.3l-1.6,0.2L29.6,9l-2,0.3L27.4,11L25.9,11.2z M27.8,7.5l-0.1,0.6l1.4-0.2
l-0.2-0.6c-0.1-0.3-0.3-0.7-0.4-1c-0.1-0.4-0.3-0.7-0.4-1l0,0c0,0.4-0.1,0.7-0.1,1.1C27.9,6.7,27.8,7.1,27.8,7.5z"/>
<path fill="#FFFFFF" d="M32.2,10.4l0.6-6.7l1.5,0.1l-0.5,5.4l2.7,0.2l-0.1,1.3L32.2,10.4z"/>
<path fill="#FFFFFF" d="M40.1,12.1l2.2-5l-1.7-0.8l0.5-1.2l4.8,2.1l-0.5,1.2l-1.7-0.8l-2.2,5L40.1,12.1z"/>
<path fill="#FFFFFF" d="M44.5,14.5l1.5-1.9l1-4.7l1.3,1l-0.5,1.6c-0.1,0.3-0.2,0.5-0.2,0.8c-0.1,0.2-0.2,0.5-0.2,0.8l0,0
c0.2-0.1,0.5-0.3,0.7-0.4c0.2-0.1,0.4-0.3,0.7-0.4l1.4-0.9l1.3,1l-4.2,2.2l-1.5,1.9L44.5,14.5z"/>
<path fill="#FFFFFF" d="M47.5,16.8l5.3-4.2l1.4,1.8c0.2,0.3,0.4,0.6,0.6,0.9c0.1,0.3,0.2,0.6,0.2,0.9c0,0.3,0,0.6-0.2,0.9
c-0.1,0.3-0.4,0.6-0.7,0.8c-0.3,0.2-0.6,0.4-0.9,0.5c-0.3,0.1-0.6,0.1-0.9,0c-0.3-0.1-0.6-0.2-0.8-0.4c-0.3-0.2-0.5-0.4-0.7-0.7
l-0.5-0.7L48.4,18L47.5,16.8z M51.1,15.9l0.5,0.6c0.5,0.6,1.1,0.7,1.6,0.3c0.3-0.2,0.4-0.5,0.4-0.7s-0.2-0.6-0.4-0.9l-0.4-0.5
L51.1,15.9z"/>
<path fill="#FFFFFF" d="M51.8,23.9c-0.2-0.4-0.3-0.8-0.2-1.2s0.1-0.8,0.3-1.2s0.4-0.7,0.8-1c0.3-0.3,0.8-0.6,1.3-0.8
c0.5-0.2,1-0.3,1.4-0.4c0.5,0,0.9,0,1.2,0.2s0.7,0.4,1,0.6s0.5,0.6,0.7,1.1c0.2,0.4,0.3,0.8,0.3,1.2c0,0.4-0.1,0.8-0.3,1.1
c-0.2,0.4-0.4,0.7-0.8,1c-0.3,0.3-0.8,0.6-1.3,0.8c-0.5,0.2-1,0.3-1.4,0.4c-0.5,0-0.9,0-1.3-0.2s-0.7-0.3-1-0.6
S52,24.3,51.8,23.9z M53,23.4c0.2,0.4,0.5,0.7,1,0.8c0.5,0.1,1,0,1.6-0.2c0.6-0.3,1.1-0.6,1.3-1c0.2-0.4,0.3-0.8,0.1-1.2
c-0.2-0.4-0.5-0.7-0.9-0.8c-0.5-0.1-1,0-1.6,0.2c-0.6,0.3-1.1,0.6-1.3,1S52.9,23,53,23.4z"/>
<path fill="#FFFFFF" d="M53.2,29.2c-0.1-0.5,0-1,0.1-1.4c0.1-0.4,0.3-0.7,0.6-1l1,0.6c-0.2,0.2-0.3,0.5-0.4,0.7
c-0.1,0.3-0.1,0.5-0.1,0.8c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.2,0.6,0.2c0.1,0,0.3-0.1,0.4-0.1c0.1-0.1,0.2-0.2,0.3-0.3
c0.1-0.1,0.1-0.3,0.1-0.6c0-0.2,0-0.5,0-0.9l1.1-0.1c0,0.3,0.1,0.5,0.1,0.7c0.1,0.2,0.1,0.3,0.2,0.5s0.2,0.2,0.3,0.2
c0.1,0,0.2,0,0.4,0c0.2,0,0.4-0.1,0.5-0.3c0.1-0.2,0.1-0.4,0.1-0.6c0-0.2-0.1-0.4-0.2-0.6c-0.1-0.2-0.3-0.4-0.5-0.5l0.8-0.9
c0.3,0.3,0.5,0.6,0.7,0.9s0.3,0.7,0.4,1.1c0,0.3,0,0.6,0,0.9c0,0.3-0.1,0.5-0.3,0.7s-0.3,0.4-0.5,0.5c-0.2,0.1-0.5,0.2-0.7,0.3
c-0.3,0-0.6,0-0.9-0.2c-0.3-0.2-0.5-0.4-0.7-0.7l0,0c-0.1,0.4-0.2,0.7-0.4,1s-0.6,0.4-1,0.5c-0.3,0-0.6,0-0.8-0.1
c-0.3-0.1-0.5-0.3-0.7-0.5s-0.3-0.4-0.5-0.7C53.4,29.9,53.3,29.6,53.2,29.2z"/>
</g>
<g>
<path fill="#FFFFFF" d="M53.4,35.8l6.4,1.9l-0.5,1.8c-0.1,0.5-0.3,0.9-0.6,1.3c-0.2,0.4-0.5,0.6-0.9,0.8C57.4,41.9,57,42,56.6,42
s-0.9,0-1.5-0.2c-0.6-0.2-1-0.4-1.4-0.7c-0.4-0.3-0.6-0.6-0.8-0.9c-0.2-0.4-0.3-0.7-0.3-1.2s0-0.9,0.2-1.3L53.4,35.8z M54.1,37.6
L54,37.9c-0.1,0.3-0.1,0.5-0.1,0.8c0,0.2,0.1,0.5,0.2,0.7c0.1,0.2,0.3,0.4,0.5,0.6c0.2,0.2,0.6,0.3,0.9,0.4
c0.4,0.1,0.7,0.2,1,0.2c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.3,0.5-0.5s0.2-0.4,0.3-0.7l0.1-0.3L54.1,37.6z"/>
<path fill="#FFFFFF" d="M51.3,41.6l5.9,3.2l-0.7,1.3L50.6,43L51.3,41.6z"/>
<path fill="#FFFFFF" d="M48.6,45.6c0.3-0.3,0.6-0.6,1-0.9c0.4-0.2,0.8-0.4,1.3-0.4l0.3,1.3c-0.3,0.1-0.6,0.2-0.9,0.3
c-0.3,0.1-0.5,0.3-0.7,0.5c-0.2,0.2-0.3,0.5-0.3,0.7c0,0.2,0.1,0.4,0.2,0.5c0.1,0.1,0.2,0.1,0.3,0.1c0.1,0,0.2,0,0.3,0
s0.2-0.1,0.3-0.1c0.1-0.1,0.2-0.1,0.4-0.2l0.8-0.4c0.2-0.1,0.3-0.2,0.5-0.2s0.4-0.1,0.6-0.1c0.2,0,0.4,0,0.6,0.1s0.4,0.2,0.6,0.3
c0.2,0.2,0.4,0.4,0.5,0.6c0.1,0.2,0.2,0.5,0.2,0.8c0,0.3,0,0.6-0.2,0.9s-0.3,0.6-0.5,0.8c-0.3,0.3-0.6,0.6-0.9,0.8
s-0.7,0.3-1.1,0.4L51.5,50c0.3-0.1,0.5-0.1,0.7-0.3c0.2-0.1,0.4-0.3,0.6-0.5c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2-0.1-0.3-0.2-0.5
c-0.1-0.1-0.2-0.1-0.3-0.1c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0.1-0.3,0.1c-0.1,0.1-0.2,0.1-0.4,0.2L50.8,49
c-0.4,0.2-0.8,0.3-1.1,0.3c-0.4,0-0.7-0.2-1.1-0.5c-0.2-0.2-0.4-0.4-0.5-0.6c-0.1-0.2-0.2-0.5-0.2-0.8c0-0.3,0-0.6,0.2-0.9
C48.1,46.2,48.3,45.9,48.6,45.6z"/>
<path fill="#FFFFFF" d="M45.6,48.7l3.3,4.4l1.5-1.1l0.8,1l-4.2,3.1l-0.8-1l1.5-1.1l-3.3-4.4L45.6,48.7z"/>
<path fill="#FFFFFF" d="M42.3,51l2.5,6.2l-2.2,0.9c-0.3,0.1-0.7,0.2-1,0.3c-0.3,0.1-0.6,0.1-0.9,0c-0.3-0.1-0.5-0.2-0.8-0.4
s-0.4-0.5-0.6-0.8c-0.2-0.5-0.2-0.9-0.2-1.3c0.1-0.4,0.3-0.7,0.5-1l-2.4-1.9l1.6-0.6l2.1,1.8l0.8-0.3l-0.9-2.2L42.3,51z M42.3,55
l-0.7,0.3c-0.4,0.2-0.6,0.3-0.8,0.6c-0.1,0.2-0.1,0.5,0,0.8c0.1,0.3,0.3,0.5,0.6,0.5c0.2,0,0.5,0,0.9-0.2l0.7-0.3L42.3,55z"/>
<path fill="#FFFFFF" d="M36.7,53l1.2,6.6l-1.5,0.3l-1.2-6.6L36.7,53z"/>
<path fill="#FFFFFF" d="M34,53.5l-0.1,6.7l-2.3,0c-0.4,0-0.7,0-1-0.1c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.3-0.5-0.5
c-0.1-0.2-0.2-0.5-0.2-0.8c0-0.2,0-0.3,0.1-0.5s0.1-0.3,0.2-0.4c0.1-0.1,0.2-0.2,0.3-0.3s0.2-0.2,0.4-0.2v0
c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.3-0.2-0.4-0.3C29.1,56.4,29,56.2,29,56c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9
c0.1-0.2,0.3-0.4,0.6-0.6c0.2-0.2,0.5-0.3,0.8-0.3c0.3-0.1,0.7-0.1,1-0.1L34,53.5z M32.5,54.7l-0.9,0c-0.8,0-1.3,0.3-1.3,0.9
c0,0.3,0.1,0.5,0.3,0.6c0.2,0.1,0.5,0.2,0.9,0.2l0.9,0L32.5,54.7z M32.4,57.6l-0.7,0c-0.4,0-0.6,0.1-0.8,0.2
c-0.2,0.1-0.3,0.3-0.3,0.6c0,0.3,0.1,0.4,0.2,0.6c0.2,0.1,0.4,0.2,0.8,0.2l0.7,0L32.4,57.6z"/>
<path fill="#FFFFFF" d="M25.7,52.4c0.8,0.3,1.4,0.7,1.7,1.3s0.3,1.5-0.1,2.6l-1.1,3.5l-1.5-0.4l1.1-3.6c0.2-0.6,0.2-1.1,0.1-1.4
c-0.1-0.3-0.4-0.5-0.7-0.6s-0.7-0.1-1,0.1c-0.3,0.2-0.5,0.6-0.7,1.2l-1.1,3.6l-1.4-0.4l1.1-3.5c0.3-1.1,0.8-1.8,1.4-2.2
C24.2,52.2,24.9,52.2,25.7,52.4z"/>
<path fill="#FFFFFF" d="M21.1,50.5l-2.9,4.6l1.6,1L19,57.2l-4.4-2.8l0.7-1.1l1.6,1l2.9-4.6L21.1,50.5z"/>
<path fill="#FFFFFF" d="M17.8,48.1L13.2,53l-1.1-1l4.6-4.9L17.8,48.1z"/>
<path fill="#FFFFFF" d="M14.3,44c0.3,0.4,0.4,0.8,0.5,1.2c0.1,0.4,0.1,0.8,0,1.2c-0.1,0.4-0.3,0.8-0.6,1.1
c-0.3,0.4-0.6,0.7-1.1,1c-0.5,0.3-0.9,0.5-1.3,0.6c-0.4,0.1-0.9,0.1-1.2,0.1c-0.4-0.1-0.8-0.2-1.1-0.4s-0.6-0.5-0.9-0.9
s-0.4-0.8-0.5-1.2C8,46.3,8,46,8.1,45.6c0.1-0.4,0.3-0.8,0.6-1.1c0.3-0.4,0.6-0.7,1.1-1c0.5-0.3,0.9-0.5,1.3-0.6
c0.4-0.1,0.9-0.2,1.3-0.1c0.4,0.1,0.8,0.2,1.1,0.4C13.8,43.3,14.1,43.6,14.3,44z M13.2,44.7c-0.3-0.4-0.6-0.6-1.1-0.6
c-0.5,0-1,0.2-1.6,0.6c-0.6,0.4-0.9,0.8-1.1,1.2c-0.2,0.4-0.1,0.8,0.1,1.2c0.3,0.4,0.6,0.6,1.1,0.6c0.5,0,1-0.2,1.5-0.6
c0.6-0.4,0.9-0.8,1.1-1.2C13.5,45.5,13.5,45.1,13.2,44.7z"/>
<path fill="#FFFFFF" d="M12.2,40.8l-6.4,2l-0.5-1.5L8,38.6l1.2-1.1l0,0c-0.3,0.1-0.7,0.3-1.1,0.5c-0.4,0.2-0.8,0.3-1.2,0.4
l-2.3,0.7l-0.4-1.4l6.4-2l0.5,1.5l-2.7,2.7L7.2,41l0,0c0.3-0.1,0.7-0.3,1.1-0.5s0.8-0.3,1.2-0.4l2.3-0.7L12.2,40.8z"/>
</g>
</g>
<g>
<path fill="#FF8700" d="M38.4,36.4c-0.3,0.1-0.6,0.1-1,0.1c-3,0-7.3-10.3-7.3-13.8c0-1.3,0.3-1.7,0.7-2.1c-3.6,0.4-8,1.8-9.4,3.4
c-0.3,0.4-0.5,1.1-0.5,1.9c0,5.4,5.7,17.6,9.8,17.6C32.7,43.6,35.8,40.6,38.4,36.4"/>
<path fill="#FF8700" d="M36.5,20.4c3.7,0,7.5,0.6,7.5,2.7c0,4.3-2.7,9.5-4.1,9.5c-2.5,0-5.6-6.9-5.6-10.3
C34.3,20.7,34.9,20.4,36.5,20.4"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.7 KiB

@@ -0,0 +1,755 @@
/*
* This file is part of the TYPO3 CMS project.
*
* It is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License, either version 2
* of the License, or any later version.
*
* For the full copyright and license information, please read the
* LICENSE.txt file that was distributed with this source code.
*
* The TYPO3 project - inspiring people to share!
*/
/**
* Module: TYPO3/CMS/Extensionmanager/Main
* main logic holding everything together, consists of multiple parts
* ExtensionManager => Various functions for displaying the extension list / sorting
* Repository => Various AJAX functions for TER downloads
* ExtensionManager.Update => Various AJAX functions to display updates
* ExtensionManager.uploadForm => helper to show the upload form
*/
define([
'jquery',
'nprogress',
'TYPO3/CMS/Backend/Modal',
'TYPO3/CMS/Backend/SplitButtons',
'TYPO3/CMS/Backend/Tooltip',
'TYPO3/CMS/Backend/Notification',
'TYPO3/CMS/Backend/Severity',
'TYPO3/CMS/Core/SecurityUtility',
'datatables',
'TYPO3/CMS/Backend/jquery.clearable'
], function($, NProgress, Modal, SplitButtons, Tooltip, Notification, Severity, SecurityUtility) {
var securityUtility = new SecurityUtility();
/**
*
* @type {{identifier: {extensionlist: string, searchField: string, extensionManager: string}}}
* @exports TYPO3/CMS/Extensionmanager/Main
*/
var ExtensionManager = {
identifier: {
extensionlist: '#typo3-extension-list',
searchField: '#Tx_Extensionmanager_extensionkey'
}
};
/**
*
* @returns {Object}
*/
ExtensionManager.manageExtensionListing = function() {
var $searchField = $(this.identifier.searchField),
dataTable = $(this.identifier.extensionlist).DataTable({
paging: false,
dom: 'lrtip',
lengthChange: false,
pageLength: 15,
stateSave: true,
drawCallback: this.bindExtensionListActions,
columns: [
null,
null,
{
type: 'extension'
},
null,
{
type: 'version'
}, {
orderable: false
},
null,
null
]
});
$searchField.parents('form').on('submit', function() {
return false;
});
var getVars = ExtensionManager.getUrlVars();
// restore filter
var currentSearch = (getVars['search'] ? getVars['search'] : dataTable.search());
$searchField.val(currentSearch);
$searchField.on('input', function(e) {
dataTable.search($(this).val()).draw();
});
return dataTable;
};
/**
*
*/
ExtensionManager.bindExtensionListActions = function() {
$('.removeExtension').not('.transformed').each(function() {
var $me = $(this);
$me.data('href', $me.attr('href'));
$me.attr('href', '#');
$me.addClass('transformed');
$me.click(function() {
Modal.confirm(
TYPO3.lang['extensionList.removalConfirmation.title'],
TYPO3.lang['extensionList.removalConfirmation.question'],
Severity.error,
[
{
text: TYPO3.lang['button.cancel'],
active: true,
btnClass: 'btn-default',
trigger: function() {
Modal.dismiss();
}
}, {
text: TYPO3.lang['button.remove'],
btnClass: 'btn-danger',
trigger: function() {
ExtensionManager.removeExtensionFromDisk($me);
Modal.dismiss();
}
}
]
);
});
});
};
/**
*
* @param {Object} $extension
*/
ExtensionManager.removeExtensionFromDisk = function($extension) {
$.ajax({
url: $extension.data('href'),
beforeSend: function() {
NProgress.start();
},
success: function() {
location.reload();
},
complete: function() {
NProgress.done();
}
});
};
/**
*
* @returns {Array}
*/
ExtensionManager.getUrlVars = function() {
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for (var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
};
$.fn.dataTableExt.oSort['extension-asc'] = function(a, b) {
return ExtensionManager.extensionCompare(a, b);
};
$.fn.dataTableExt.oSort['extension-desc'] = function(a, b) {
var result = ExtensionManager.extensionCompare(a, b);
return result * -1;
};
$.fn.dataTableExt.oSort['version-asc'] = function(a, b) {
var result = ExtensionManager.versionCompare(a, b);
return result * -1;
};
$.fn.dataTableExt.oSort['version-desc'] = function(a, b) {
return ExtensionManager.versionCompare(a, b);
};
/**
* Special sorting for the extension version column
*
* @param {String} a
* @param {String} b
* @returns {Number}
*/
ExtensionManager.versionCompare = function(a, b) {
if (a === b) {
return 0;
}
var a_components = a.split(".");
var b_components = b.split(".");
var len = Math.min(a_components.length, b_components.length);
// loop while the components are equal
for (var i = 0; i < len; i++) {
// A bigger than B
if (parseInt(a_components[i]) > parseInt(b_components[i])) {
return 1;
}
// B bigger than A
if (parseInt(a_components[i]) < parseInt(b_components[i])) {
return -1;
}
}
// If one's a prefix of the other, the longer one is greaRepository.
if (a_components.length > b_components.length) {
return 1;
}
if (a_components.length < b_components.length) {
return -1;
}
// Otherwise they are the same.
return 0;
};
/**
* The extension name column can contain various forms of HTML that
* break a direct comparison of values
*
* @param {String} a
* @param {String} b
* @returns {Number}
*/
ExtensionManager.extensionCompare = function(a, b) {
var div = document.createElement("div");
div.innerHTML = a;
var aStr = div.textContent || div.innerText || a;
div.innerHTML = b;
var bStr = div.textContent || div.innerText || b;
return aStr.trim().localeCompare(bStr.trim());
}
/**
*
* @param {Object} data
*/
ExtensionManager.updateExtension = function(data) {
var i = 0;
var $form = $('<form>');
$.each(data.updateComments, function(version, comment) {
var $input = $('<input>').attr({type: 'radio', name: 'version'}).val(version);
if (i === 0) {
$input.attr('checked', 'checked');
}
$form.append([
$('<h3>').append([
$input,
' ' + securityUtility.encodeHtml(version)
]),
$('<div>')
.append(
comment
.replace(/(\r\n|\n\r|\r|\n)/g, '\n')
.split(/\n/).map(function(line) {
return securityUtility.encodeHtml(line);
})
.join('<br>')
)
]);
i++;
});
var $container = $('<div>').append([
$('<h1>').text(TYPO3.lang['extensionList.updateConfirmation.title']),
$('<h2>').text(TYPO3.lang['extensionList.updateConfirmation.message']),
$form
]);
NProgress.done();
Modal.confirm(
TYPO3.lang['extensionList.updateConfirmation.questionVersionComments'],
$container,
Severity.warning,
[
{
text: TYPO3.lang['button.cancel'],
active: true,
btnClass: 'btn-default',
trigger: function() {
Modal.dismiss();
}
}, {
text: TYPO3.lang['button.updateExtension'],
btnClass: 'btn-warning',
trigger: function() {
$.ajax({
url: data.url,
data: {
tx_extensionmanager_tools_extensionmanagerextensionmanager: {
version: $('input:radio[name=version]:checked', Modal.currentModal).val()
}
},
dataType: 'json',
beforeSend: function() {
NProgress.start();
},
complete: function() {
location.reload();
}
});
Modal.dismiss();
}
}
]
);
};
/**
*
* @type {{downloadPath: string}}
*/
var Repository = {
downloadPath: ''
};
/**
*
*/
Repository.initDom = function() {
NProgress.configure({parent: '.module-loading-indicator', showSpinner: false});
$('#terTable').DataTable({
lengthChange: false,
pageLength: 15,
stateSave: false,
info: false,
paging: false,
searching: false,
ordering: false,
drawCallback: Repository.bindDownload
});
$('#terVersionTable').DataTable({
lengthChange: false,
pageLength: 15,
stateSave: false,
info: false,
paging: false,
searching: false,
drawCallback: Repository.bindDownload,
order: [
[2, 'asc']
],
columns: [
{orderable: false},
null,
{type: 'version'},
null,
null,
null
]
});
$('#terSearchTable').DataTable({
paging: false,
lengthChange: false,
stateSave: false,
searching: false,
language: {
search: 'Filter results:'
},
ordering: false,
drawCallback: Repository.bindDownload
});
Repository.bindDownload();
Repository.bindSearchFieldResetter();
};
/**
*
*/
Repository.bindDownload = function() {
var installButtons = $('.downloadFromTer form.download button[type=submit]');
installButtons.off('click');
installButtons.on('click', function(event) {
event.preventDefault();
var url = $(event.currentTarget.form).attr('data-href');
Repository.downloadPath = $(event.currentTarget.form).find('input.downloadPath:checked').val();
$.ajax({
url: url,
dataType: 'json',
beforeSend: function() {
NProgress.start();
},
success: Repository.getDependencies
});
});
};
/**
*
* @param {Object} data
* @returns {Boolean}
*/
Repository.getDependencies = function(data) {
NProgress.done();
if (data.hasDependencies) {
Modal.confirm(data.title, $(data.message), Severity.info, [
{
text: TYPO3.lang['button.cancel'],
active: true,
btnClass: 'btn-default',
trigger: function() {
Modal.dismiss();
}
}, {
text: TYPO3.lang['button.resolveDependencies'],
btnClass: 'btn-info',
trigger: function() {
Repository.getResolveDependenciesAndInstallResult(data.url + '&tx_extensionmanager_tools_extensionmanagerextensionmanager[downloadPath]=' + Repository.downloadPath);
Modal.dismiss();
}
}
]);
} else {
if (data.hasErrors) {
Notification.error(data.title, data.message, 15);
} else {
Repository.getResolveDependenciesAndInstallResult(data.url + '&tx_extensionmanager_tools_extensionmanagerextensionmanager[downloadPath]=' + Repository.downloadPath);
}
}
return false;
};
/**
*
* @param {String} url
*/
Repository.getResolveDependenciesAndInstallResult = function(url) {
$.ajax({
url: url,
dataType: 'json',
beforeSend: function() {
NProgress.start();
},
success: function(data) {
if (data.errorCount > 0) {
Modal.confirm(data.errorTitle, $(data.errorMessage), Severity.error, [
{
text: TYPO3.lang['button.cancel'],
active: true,
btnClass: 'btn-default',
trigger: function() {
Modal.dismiss();
}
}, {
text: TYPO3.lang['button.resolveDependenciesIgnore'],
btnClass: 'btn-danger disabled t3js-dependencies',
trigger: function() {
if (!$(this).hasClass('disabled')) {
Repository.getResolveDependenciesAndInstallResult(data.skipDependencyUri);
Modal.dismiss();
}
}
}
]);
Modal.currentModal.on('shown.bs.modal', function() {
var $actionButton = Modal.currentModal.find('.t3js-dependencies');
$('input[name="unlockDependencyIgnoreButton"]', Modal.currentModal).on('change', function() {
$actionButton.toggleClass('disabled', !$(this).prop('checked'));
});
});
} else {
var successMessage = TYPO3.lang['extensionList.dependenciesResolveDownloadSuccess.message' + data.installationTypeLanguageKey].replace(/\{0\}/g, data.extension);
successMessage += '\n' + TYPO3.lang['extensionList.dependenciesResolveDownloadSuccess.header'] + ': ';
$.each(data.result, function(index, value) {
successMessage += '\n\n' + TYPO3.lang['extensionList.dependenciesResolveDownloadSuccess.item'] + ' ' + index + ': ';
$.each(value, function(extkey) {
successMessage += '\n* ' + extkey
});
});
Notification.info(TYPO3.lang['extensionList.dependenciesResolveFlashMessage.title' + data.installationTypeLanguageKey].replace(/\{0\}/g, data.extension), successMessage, 15);
top.TYPO3.ModuleMenu.App.refreshMenu();
}
},
complete: function() {
NProgress.done();
}
});
};
/**
*
*/
Repository.bindSearchFieldResetter = function() {
var $searchFields = $('.typo3-extensionmanager-searchTerForm input[type="text"]');
var searchResultShown = ('' !== $searchFields.first().val());
$searchFields.clearable(
{
onClear: function() {
if (searchResultShown) {
$(this).closest('form').submit();
}
}
}
);
};
/**
*
* @type {{identifier: {extensionTable: string, terUpdateAction: string, pagination: string, splashscreen: string, terTableWrapper: string, terTableDataTableWrapper: string}}}
*/
ExtensionManager.Update = {
identifier: {
extensionTable: '#terTable',
terUpdateAction: '.update-from-ter',
pagination: '.pagination-wrap',
splashscreen: '.splash-receivedata',
terTableWrapper: '#terTableWrapper',
terTableDataTableWrapper: '#terTableWrapper .dataTables_wrapper'
}
};
/**
* Register "update from ter" action
*/
ExtensionManager.Update.initializeEvents = function() {
$(ExtensionManager.Update.identifier.terUpdateAction).each(function() {
// "this" is the form which updates the extension list from
// TER on submit
var $me = $(this),
updateURL = $(this).attr('action');
$me.attr('action', '#');
$me.submit(function() {
// Force update on click.
ExtensionManager.Update.updateFromTer(updateURL, true);
// Prevent normal submit action.
return false;
});
// This might give problems when there are more "update"-buttons,
// each one would trigger a TER-ExtensionManager.Update.
ExtensionManager.Update.updateFromTer(updateURL, false);
});
};
/**
*
* @param {String} url
* @param {Boolean} forceUpdate
*/
ExtensionManager.Update.updateFromTer = function(url, forceUpdate) {
if (forceUpdate) {
url = url + '&tx_extensionmanager_tools_extensionmanagerextensionmanager%5BforceUpdateCheck%5D=1';
}
// Hide triggers for TER update
$(ExtensionManager.Update.identifier.terUpdateAction).addClass('is-hidden');
// Hide extension table
$(ExtensionManager.Update.identifier.extensionTable).hide();
// Show loaders
$(ExtensionManager.Update.identifier.splashscreen).addClass('is-shown');
$(ExtensionManager.Update.identifier.terTableDataTableWrapper).addClass('is-loading');
$(ExtensionManager.Update.identifier.pagination).addClass('is-loading');
var reload = false;
$.ajax({
url: url,
dataType: 'json',
cache: false,
beforeSend: function() {
NProgress.start();
},
success: function(data) {
// Something went wrong, show message
if (data.errorMessage.length) {
Notification.error(TYPO3.lang['extensionList.updateFromTerFlashMessage.title'], data.errorMessage, 10);
}
// Message with latest updates
var $lastUpdate = $(ExtensionManager.Update.identifier.terUpdateAction + ' .time-since-last-update');
$lastUpdate.text(data.timeSinceLastUpdate);
$lastUpdate.attr(
'title',
TYPO3.lang['extensionList.updateFromTer.lastUpdate.timeOfLastUpdate'] + data.lastUpdateTime
);
if (data.updated) {
// Reload page
reload = true;
window.location.replace(window.location.href);
}
},
error: function(jqXHR, textStatus, errorThrown) {
// Create an error message with diagnosis info.
var errorMessage = textStatus + '(' + errorThrown + '): ' + jqXHR.responseText;
Notification.warning(
TYPO3.lang['extensionList.updateFromTerFlashMessage.title'],
errorMessage,
10
);
},
complete: function() {
NProgress.done();
if (!reload) {
// Hide loaders
$(ExtensionManager.Update.identifier.splashscreen).removeClass('is-shown');
$(ExtensionManager.Update.identifier.terTableDataTableWrapper).removeClass('is-loading');
$(ExtensionManager.Update.identifier.pagination).removeClass('is-loading');
// Show triggers for TER-update
$(ExtensionManager.Update.identifier.terUpdateAction).removeClass('is-hidden');
// Show extension table
$(ExtensionManager.Update.identifier.extensionTable).show();
}
}
});
};
/**
*
*/
ExtensionManager.Update.transformPaginatorToAjax = function() {
$(ExtensionManager.Update.identifier.pagination + ' a').each(function() {
var $me = $(this);
$me.data('href', $(this).attr('href'));
$me.attr('href', '#');
$me.click(function() {
var $terTableWrapper = $(ExtensionManager.Update.identifier.terTableWrapper);
NProgress.start();
$.ajax({
url: $(this).data('href'),
dataType: 'json',
success: function(data) {
$terTableWrapper.html(data);
ExtensionManager.Update.transformPaginatorToAjax();
},
complete: function() {
NProgress.done();
}
});
});
});
};
/**
* show the uploading form
*/
ExtensionManager.UploadForm = {
expandedUploadFormClass: 'transformed'
};
/**
*
*/
ExtensionManager.UploadForm.initializeEvents = function() {
// Show upload form
$(document).on('click', '.t3js-upload', function(event) {
var $me = $(this),
$uploadForm = $('.uploadForm');
event.preventDefault();
if ($me.hasClass(ExtensionManager.UploadForm.expandedUploadFormClass)) {
$uploadForm.stop().slideUp();
$me.removeClass(ExtensionManager.UploadForm.expandedUploadFormClass);
} else {
$me.addClass(ExtensionManager.UploadForm.expandedUploadFormClass);
$uploadForm.stop().slideDown();
$.ajax({
url: $me.attr('href'),
dataType: 'html',
success: function(data) {
$uploadForm.html(data);
}
});
}
});
};
$(function() {
var dataTable = ExtensionManager.manageExtensionListing();
$(document).on('click', '.onClickMaskExtensionManager', function() {
NProgress.start();
}).on('click', 'a[data-action=update-extension]', function(e) {
e.preventDefault();
$.ajax({
url: $(this).attr('href'),
dataType: 'json',
beforeSend: function() {
NProgress.start();
},
success: ExtensionManager.updateExtension
});
}).on('change', 'input[name=unlockDependencyIgnoreButton]', function() {
var $actionButton = $('.t3js-dependencies');
$actionButton.toggleClass('disabled', !$(this).prop('checked'));
});
$(ExtensionManager.identifier.searchField).clearable({
onClear: function() {
dataTable.search('').draw();
}
});
$(document).on('click', '.t3-button-action-installdistribution', function() {
NProgress.start();
});
SplitButtons.addPreSubmitCallback(function(e) {
if ($(e.target).hasClass('t3js-save-close')) {
$('#configurationform').append($('<input />', {
type: 'hidden',
name: 'tx_extensionmanager_tools_extensionmanagerextensionmanager[action]',
value: 'saveAndClose'
}));
}
});
// initialize the repository
Repository.initDom();
ExtensionManager.Update.initializeEvents();
ExtensionManager.UploadForm.initializeEvents();
Tooltip.initialize('#typo3-extension-list [title]', {
delay: {
show: 500,
hide: 100
},
trigger: 'hover',
container: 'body'
});
});
if (typeof TYPO3.ExtensionManager === 'undefined') {
TYPO3.ExtensionManager = ExtensionManager;
}
return ExtensionManager;
});