aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files/js/sidebarpreviewmanager.js
blob: 69528ce4e4378ab4e4417c818485d16d5bc1c452 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/*
 * Copyright (c) 2016
 *
 * This file is licensed under the Affero General Public License version 3
 * or later.
 *
 * See the COPYING-README file.
 *
 */

(function () {
	var SidebarPreviewManager = function (fileList) {
		this._fileList = fileList;
		this._previewHandlers = {};
		OC.Plugins.attach('OCA.Files.SidebarPreviewManager', this);
	};

	SidebarPreviewManager.prototype = {
		addPreviewHandler: function (mime, handler) {
			this._previewHandlers[mime] = handler;
		},

		getMimeTypePreviewHandler: function(mime) {
			var mimePart = mime.split('/').shift();
			if (this._previewHandlers[mime]) {
				return this._previewHandlers[mime];
			} else if (this._previewHandlers[mimePart]) {
				return this._previewHandlers[mimePart];
			} else {
				return null;
			}
		},

		getPreviewHandler: function (mime) {
			var mimetypeHandler = this.getMimeTypePreviewHandler(mime);
			if (mimetypeHandler) {
				return mimetypeHandler;
			} else {
				return this.fallbackPreview.bind(this);
			}
		},

		loadPreview: function (model, $thumbnailDiv, $thumbnailContainer) {
			if (model.get('hasPreview') === false && this.getMimeTypePreviewHandler(model.get('mimetype')) === null) {
				var mimeIcon = OC.MimeType.getIconUrl(model.get('mimetype'));
				$thumbnailDiv.removeClass('icon-loading icon-32');
				$thumbnailContainer.removeClass('image'); //fall back to regular view
				$thumbnailDiv.css({
					'background-image': 'url("' + mimeIcon + '")'
				});
			} else {
				var handler = this.getPreviewHandler(model.get('mimetype'));
				var fallback = this.fallbackPreview.bind(this, model, $thumbnailDiv, $thumbnailContainer);
				handler(model, $thumbnailDiv, $thumbnailContainer, fallback);
			}
		},

		// previews for images and mimetype icons
		fallbackPreview: function (model, $thumbnailDiv, $thumbnailContainer) {
			var isImage = model.isImage();
			var maxImageWidth = $thumbnailContainer.parent().width() + 50;  // 50px for negative margins
			var maxImageHeight = maxImageWidth / (16 / 9);
			var smallPreviewSize = 75;

			var isLandscape = function (img) {
				return img.width > (img.height * 1.2);
			};

			var isSmall = function (img) {
				return (img.width * 1.1) < (maxImageWidth * window.devicePixelRatio);
			};

			var getTargetHeight = function (img) {
				if (isImage) {
					var targetHeight = img.height / window.devicePixelRatio;
					if (targetHeight <= smallPreviewSize) {
						targetHeight = smallPreviewSize;
					}
					return targetHeight;
				} else {
					return smallPreviewSize;
				}
			};

			var getTargetRatio = function (img) {
				var ratio = img.width / img.height;
				if (ratio > 16 / 9) {
					return ratio;
				} else {
					return 16 / 9;
				}
			};

			this._fileList.lazyLoadPreview({
				fileId: model.get('id'),
				path: model.getFullPath(),
				mime: model.get('mimetype'),
				etag: model.get('etag'),
				y: isImage ? maxImageHeight : smallPreviewSize,
				x: isImage ? maxImageWidth : smallPreviewSize,
				a: isImage ? 1 : null,
				mode: isImage ? 'cover' : null,
				callback: function (previewUrl, img) {
					$thumbnailDiv.previewImg = previewUrl;

					// as long as we only have the mimetype icon, we only save it in case there is no preview
					if (!img) {
						return;
					}
					$thumbnailDiv.removeClass('icon-loading icon-32');
					var targetHeight = getTargetHeight(img);
					if (isImage && targetHeight > smallPreviewSize) {
						$thumbnailContainer.addClass((isLandscape(img) && !isSmall(img)) ? 'landscape' : 'portrait');
						$thumbnailContainer.addClass('large');
					}

					// only set background when we have an actual preview
					// when we don't have a preview we show the mime icon in the error handler
					$thumbnailDiv.css({
						'background-image': 'url("' + previewUrl + '")',
						height: (targetHeight > smallPreviewSize) ? 'auto' : targetHeight,
						'max-height': isSmall(img) ? targetHeight : null
					});

					var targetRatio = getTargetRatio(img);
					$thumbnailDiv.find('.stretcher').css({
						'padding-bottom': (100 / targetRatio) + '%'
					});
				},
				error: function () {
					$thumbnailDiv.removeClass('icon-loading icon-32');
					$thumbnailContainer.removeClass('image'); //fall back to regular view
					$thumbnailDiv.css({
						'background-image': 'url("' + $thumbnailDiv.previewImg + '")'
					});
				}
			});
		}
	};

	OCA.Files.SidebarPreviewManager = SidebarPreviewManager;
})();
class="w"> "Ezabatu", "Add" : "Gehitu", "Edit tags" : "Editatu etiketak", "Error loading dialog template: {error}" : "Errorea elkarrizketa txantiloia kargatzean: {errorea}", "No tags selected for deletion." : "Ez dira ezabatzeko etiketak hautatu.", "unknown text" : "testu ezezaguna", "Hello world!" : "Kaixo Mundua!", "sunny" : "eguzkitsua", "Hello {name}, the weather is {weather}" : "Kaixo {name}, eguraldia {weather} da", "Hello {name}" : "Kaixo {name}", "_download %n file_::_download %n files_" : ["%n fitxategia jaitsi","jaitsi %n fitxategiak"], "Updating {productName} to version {version}, this may take a while." : "Eguneratu {productName} {version} bertsiora, bere denbora behar du.", "Please reload the page." : "Mesedez birkargatu orria.", "The update was unsuccessful. " : "Eguneraketa ongi burutu da.", "The update was successful. Redirecting you to ownCloud now." : "Eguneraketa ongi egin da. Orain zure ownClouderea berbideratua izango zara.", "Couldn't reset password because the token is invalid" : "Ezin izan da pasahitza berrezarri tokena baliogabea delako", "Couldn't send reset email. Please make sure your username is correct." : "Ezin izan da berrezartzeko eposta bidali. Ziurtatu zure erabiltzaile izena egokia dela.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ezin izan da berrezartzeko eposta bidali erabiltzaile izen honetarako eposta helbiderik ez dagoelako. Mesedez harremanetan jarri kudeatzailearekin.", "%s password reset" : "%s pasahitza berrezarri", "Use the following link to reset your password: {link}" : "Eribili hurrengo lotura zure pasahitza berrezartzeko: {link}", "New password" : "Pasahitz berria", "New Password" : "Pasahitz Berria", "Reset password" : "Berrezarri pasahitza", "Searching other places" : "Beste lekuak bilatzen", "No search result in other places" : "Ez da bilaketaren emaitzik lortu beste lekuetan", "_{count} search result in other places_::_{count} search results in other places_" : ["Bilaketa emaitza {count} beste lekuetan","{count} emaitza lortu dira beste lekuetan"], "Mac OS X is not supported and %s will not work properly on this platform. Use it at your own risk! " : "Mac OS X-ek ez du sostengurik eta %s gaizki ibili daiteke plataforma honetan. Erabiltzekotan, zure ardurapean.", "For the best results, please consider using a GNU/Linux server instead." : "Emaitza hobeak izateko, mesedez gogoan hartu GNU/Linux zerbitzari bat erabiltzea.", "It seems that this %s instance is running on a 32-bit PHP environment and the open_basedir has been configured in php.ini. This will lead to problems with files over 4GB and is highly discouraged." : "Dirudi %s instantzia hau 32biteko PHP ingurunean ari dela eta open_basedir php.ini fitxategian konfiguratu dela. Honek 4GB baino gehiagoko fitxategiekin arazoak sor ditzake eta ez da aholkatzen.", "Please remove the open_basedir setting within your php.ini or switch to 64-bit PHP." : "Mesedez ezabatu open_basedir ezarpena zure php.ini-tik edo aldatu 64-biteko PHPra.", "It seems that this %s instance is running on a 32-bit PHP environment and cURL is not installed. This will lead to problems with files over 4GB and is highly discouraged." : "Dirudi %s instantzia hau 32-biteko PHP inguruan ari dela eta cURL ez dago instalaturik. Honek 4GB baino gehiagoko fitxategiekin arazoak sor ditzake eta ez da aholkatzen.", "Please install the cURL extension and restart your webserver." : "Mesedez instalatu cURL extensioa eta berrabiarazi zure web zerbitzaria.", "Personal" : "Pertsonala", "Users" : "Erabiltzaileak", "Apps" : "Aplikazioak", "Admin" : "Admin", "Help" : "Laguntza", "Error loading tags" : "Errore bat izan da etiketak kargatzearkoan.", "Tag already exists" : "Etiketa dagoeneko existitzen da", "Error deleting tag(s)" : "Errore bat izan da etiketa(k) ezabatzerakoan", "Error tagging" : "Errorea etiketa ezartzerakoan", "Error untagging" : "Errorea etiketa kentzerakoan", "Error favoriting" : "Errorea gogokoetara gehitzerakoan", "Error unfavoriting" : "Errorea gogokoetatik kentzerakoan", "Access forbidden" : "Sarrera debekatuta", "File not found" : "Ez da fitxategia aurkitu", "The specified document has not been found on the server." : "Zehaztutako dokumentua ez da zerbitzarian aurkitu.", "You can click here to return to %s." : "Hemen klika dezakezu %sra itzultzeko.", "Hey there,\n\njust letting you know that %s shared %s with you.\nView it: %s\n\n" : "Kaixo\n\n%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s\n\n", "The share will expire on %s." : "Elkarbanaketa %s-n iraungiko da.", "Cheers!" : "Ongi izan!", "Internal Server Error" : "Zerbitzariaren Barne Errorea", "The server encountered an internal error and was unable to complete your request." : "Zerbitzariak barne errore bat izan du eta ez da gai izan zure eskaria osatzeko.", "Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report." : "Mesedez harremanetan jarri zerbitzariaren kudeatzailearekin errore hau aldi askotan agertzekotan, mesedez gehitu beheko zehaztapen teknikoak zure txostenean.", "More details can be found in the server log." : "Zehaztapen gehiago zerbitzariaren egunerokoan aurki daitezke.", "Technical details" : "Arazo teknikoak", "Remote Address: %s" : "Urruneko Helbidea: %s", "Request ID: %s" : "Eskariaren IDa: %s", "Code: %s" : "Kodea: %s", "Message: %s" : "Mezua: %s", "File: %s" : "Fitxategia: %s", "Line: %s" : "Lerroa: %s", "Trace" : "Arrastoa", "Security Warning" : "Segurtasun abisua", "Your PHP version is vulnerable to the NULL Byte attack (CVE-2006-7243)" : "Zure PHP bertsioa NULL Byte erasoak (CVE-2006-7243) mendera dezake.", "Please update your PHP installation to use %s securely." : "Mesedez eguneratu zure PHP instalazioa %s seguru erabiltzeko", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "Zure data karpeta eta fitxategiak interneten bidez eskuragarri egon daitezke .htaccess fitxategia ez delako funtzionatzen ari.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Zure zerbitrzaria ongi konfiguratzeko, mezedez <a href=\"%s\" target=\"_blank\">dokumentazioa</a> ikusi.", "Create an <strong>admin account</strong>" : "Sortu <strong>kudeatzaile kontu<strong> bat", "Username" : "Erabiltzaile izena", "Storage & database" : "Biltegia & datubasea", "Data folder" : "Datuen karpeta", "Configure the database" : "Konfiguratu datu basea", "Only %s is available." : "Soilik %s dago eskuragarri.", "Database user" : "Datubasearen erabiltzailea", "Database password" : "Datubasearen pasahitza", "Database name" : "Datubasearen izena", "Database tablespace" : "Datu basearen taula-lekua", "Database host" : "Datubasearen hostalaria", "Finish setup" : "Bukatu konfigurazioa", "Finishing …" : "Bukatzen...", "This application requires JavaScript for correct operation. Please <a href=\"http://enable-javascript.com/\" target=\"_blank\">enable JavaScript</a> and reload the page." : "Aplikazio honek ongi funtzionatzeko JavaScript behar du. Mesedez <a href=\"http://enable-javascript.com/\" target=\"_blank\">gaitu JavaScript</a> eta birkargatu orri hau.", "%s is available. Get more information on how to update." : "%s erabilgarri dago. Eguneratzeaz argibide gehiago eskuratu.", "Log out" : "Saioa bukatu", "Search" : "Bilatu", "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", "Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.", "Forgot your password? Reset it!" : "Pasahitza ahaztu duzu? Berrezarri!", "remember" : "gogoratu", "Log in" : "Hasi saioa", "Alternative Logins" : "Beste erabiltzaile izenak", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s", "This ownCloud instance is currently in single user mode." : "ownCloud instantzia hau erabiltzaile bakar moduan dago.", "This means only administrators can use the instance." : "Honek administradoreak bakarrik erabili dezakeela esan nahi du.", "Contact your system administrator if this message persists or appeared unexpectedly." : "Jarri harremanetan zure sistema administratzailearekin mezu hau irauten badu edo bat-batean agertu bada.", "Thank you for your patience." : "Milesker zure patzientziagatik.", "You are accessing the server from an untrusted domain." : "Zerbitzaria domeinu ez fidagarri batetik eskuratzen ari zara.", "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Mesedez harremanetan jarri kudeatzailearekin. Zu kudeatzailea bazara, konfiguratu \"trusted_domain\" ezarpena config/config.php fitxategian. Adibidezko konfigurazko bat config/config.sample.php fitxategian dago.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Zure ezarpenen gorabehera, administratzaile bezala posible duzu ere azpiko botoia erabiltzea fidatzeko domeinu horrekin.", "Add \"%s\" as trusted domain" : "Gehitu \"%s\" domeinu fidagarri gisa", "%s will be updated to version %s." : "%s %s bertsiora eguneratuko da.", "The following apps will be disabled:" : "Ondorengo aplikazioak desgaituko dira:", "The theme %s has been disabled." : "%s gaia desgaitu da.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Ekin aurretik egiazta ezazu datu basearen, ezarpenen karpetaren eta datuen karpetaren babeskopia duzula.", "Start update" : "Hasi eguneraketa", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "Instalazio handien itxarote-denbora saihesteko, ondoko komandoa exekuta dezakezu instalazio direktoriotik:", "This %s instance is currently being updated, which may take a while." : "%s instantzia hau eguneratzen ari da, honek denbora har dezake.", "This page will refresh itself when the %s instance is available again." : "Orri honek bere burua eguneratuko du %s instantzia berriz prest dagoenean." },"pluralForm" :"nplurals=2; plural=(n != 1);" }