Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(161)

Side by Side Diff: chrome/browser/resources/file_manager/slideshow.html

Issue 8799006: Replace the Slideshow with the Photo Editor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 <!DOCTYPE HTML>
2 <html i18n-values="dir:textdirection;">
3 <head>
4 <meta charset="utf-8">
5 <title>Slideshow</title>
6 <style>
7
8 body {
9 overflow: hidden;
10 background: black;
11 }
12
13 #glow {
14 left: 0;
15 right: 0;
16 bottom: 30px;
17 height: 8px;
18 opacity: .4;
19 position: absolute;
20 background: -webkit-linear-gradient(transparent, white);
21 }
22
23 #main {
24 position: absolute;
25 left: 0;
26 right:0;
27 top: 0;
28 bottom: 30px;
29 overflow: hidden;
30 -webkit-transform: translateZ(0);
31 }
32
33 #playercontrols {
34 bottom: 0;
35 left: 0;
36 z-index: 999;
37 height: 30px;
38 opacity: .9;
39 right: 0;
40 align:center;
41 -webkit-box-align: center;
42 -webkit-box-pack: center;
43 display: -webkit-box;
44 position: absolute;
45 background: -webkit-linear-gradient(#323232, #070707);
46 }
47
48 #prevbutton > div {
49 background: url('images/mediaplayer_prev.png');
50 background-repeat: no-repeat;
51 background-position: 4px 8px;
52 width: 100%;
53 height: 30px;
54 z-index: 9999;
55 }
56
57 .currentpicture {
58 width: 100%;
59 height: 100%;
60 position: absolute;
61 top: 0;
62 -webkit-transition-property: left;
63 -webkit-transition-duration: 1s;
64 display: -webkit-box;
65 -webkit-box-align: center;
66 -webkit-box-pack: center;
67 pointer-events: none;
68 }
69
70 .comingfromleft {
71 left: -100%;
72 }
73
74 .comingfromright {
75 left: 100%;
76 }
77
78 #nextbutton > div {
79 background: url('images/mediaplayer_next.png');
80 background-repeat: no-repeat;
81 background-position: 4px 8px;
82 width: 100%;
83 height: 30px;
84 z-index: 9999;
85 }
86
87 button {
88 z-index: 9999;
89 cursor: pointer;
90 width: 28px;
91 height: 30px;
92 webkit-appearance: none;
93 padding: 0;
94 border: 0;
95 background: transparent;
96 }
97
98 button:hover {
99 background: -webkit-linear-gradient(#6a7eac, #000000);
100 }
101
102 </style>
103 <script src="chrome://resources/js/local_strings.js"></script>
104 <script src="chrome://resources/js/media_common.js"></script>
105 <script>
106
107 document.addEventListener('DOMContentLoaded', load);
108
109 document.onselectstart = function(e) {
110 e.preventDefault();
111 };
112
113 function $(o) {
114 return document.getElementById(o);
115 }
116
117 ///////////////////////////////////////////////////////////////////////////////
118 // Document Functions:
119
120 var currentPicture = null;
121 var prevPicture = null;
122 var currentFileOffset = 0;
123 var filelist = [];
124 var moveRight = false;
125 var lastimg = null;
126
127 function loadedPicture() {
128 if (prevPicture) {
129 if (moveRight) {
130 prevPicture.style.left = '-100%';
131 } else {
132 prevPicture.style.left = '100%';
133 }
134 }
135 if (window.innerHeight < lastimg.height ||
136 window.innerWidth < lastimg.width) {
137 if (lastimg.width > lastimg.height) {
138 lastimg.style.height = 'auto';
139 lastimg.style.width = '100%';
140 } else {
141 lastimg.style.width = 'auto';
142 lastimg.style.height = '100%';
143 }
144 }
145 setTimeout(function() {
146 currentPicture.style.left = '0';
147 }, 10);
148 }
149
150 function transitionTo(filePath, fromTheRight) {
151 if (currentPicture) {
152 if (prevPicture) {
153 $('main').removeChild(prevPicture);
154 }
155 prevPicture = currentPicture;
156 }
157
158 currentPicture = document.createElement('div');
159
160 $('main').appendChild(currentPicture);
161 if (fromTheRight) {
162 currentPicture.className = 'currentpicture comingfromright';
163 } else {
164 currentPicture.className = 'currentpicture comingfromleft';
165 }
166 var image = document.createElement('img');
167 lastimg = image;
168 image.onload = loadedPicture;
169 image.onerror = loadedPicture;
170 image.src = filePath;
171 currentPicture.appendChild(image);
172 moveRight = fromTheRight;
173 }
174
175 function browseFileResult() {
176 currentFileOffset = 0;
177 if (filelist.length > 0) {
178 transitionTo(filelist[currentFileOffset], true);
179 }
180 }
181
182 function keyPressed(e) {
183 // Left Pressed
184 if (e.keyCode == 37) {
185 if (currentFileOffset > 0) {
186 currentFileOffset--;
187 transitionTo(filelist[currentFileOffset], false);
188 }
189 }
190 // Right Pressed
191 if (e.keyCode == 39) {
192 if (currentFileOffset < (filelist.length - 1)) {
193 currentFileOffset++;
194 transitionTo(filelist[currentFileOffset], true);
195 }
196 }
197 }
198
199 /**
200 * Pattern of siblibng files to be shown. It should match exactly the same files
201 * that matches the appropriate "file_filters" section in the manifest. We want
202 * to avoid situation whan a file is accessible via "prev"/"next" button but not
203 * accessible via the File Browser directly (and vise versa).
204 */
205 const imageFilesPattern = /\.(jpg|jpeg|png|gif|webp|JPG|JPEG|PNG|GIF|WEBP)$/;
206
207 /**
208 * Loads directory siblings of the file what match the filePattern.
209 * Sets filelist. Sets currentFileOffset to index of the fileUrl.
210 * @param {string} fileUrl The file to show.
211 */
212 function loadDirectorySiblings(fileUrl) {
213 var fileUrlFixed;
214 webkitResolveLocalFileSystemURL(fileUrl, function(entry) {
215 fileUrlFixed = entry.toURL(); // Make sure the URL has canonical shape.
216 entry.getParent(function(entry) {
217 readAllEntries(entry.createReader());
218 }, onError);
219 }, onError);
220
221 function readAllEntries(directoryReader) {
222 directoryReader.readEntries(function(entries) {
223 if (entries.length > 0) {
224 onReadSome(entries);
225 readAllEntries(directoryReader);
226 } else {
227 onReadDone();
228 }
229 }, onError);
230 }
231
232 function onError() {
233 console.error('Error reading directory content');
234 }
235
236 var siblings = [];
237 function onReadSome(entries) {
238 for (var i = 0; i < entries.length; i++) {
239 var entry = entries[i];
240 if (entry.isFile && imageFilesPattern.test(entry.name)) {
241 siblings.push(entry.toURL());
242 }
243 }
244 }
245
246 function onReadDone() {
247 // Only change the filelist if siblings have read successfully.
248 if (siblings.indexOf(fileUrl) >= 0) {
249 filelist = siblings;
250 currentFileOffset = filelist.indexOf(fileUrlFixed);
251 }
252 }
253 }
254
255 function load() {
256 localStrings = new LocalStrings();
257
258 var views = chrome.extension.getViews();
259 for (var i = 0; i < views.length; i++) {
260 if (views[i].g_slideshow_data) {
261 filelist = views[i].g_slideshow_data;
262 views[i].g_slideshow_data = null;
263
264 // If selected exactly one file allow user to navigate to
265 // directory siblings.
266 if (filelist && filelist.length == 1) loadDirectorySiblings(filelist[0]);
267 }
268 }
269
270 browseFileResult();
271 }
272
273 function prevButtonClick() {
274 if (currentFileOffset > 0) {
275 currentFileOffset--;
276 transitionTo(filelist[currentFileOffset], false);
277 }
278 }
279
280 function nextButtonClick() {
281 if (currentFileOffset < (filelist.length - 1)) {
282 currentFileOffset++;
283 transitionTo(filelist[currentFileOffset], true);
284 }
285 }
286
287 </script>
288 <body onkeydown="keyPressed(event)">
289 <div id="main"></div>
290 <div id="glow"></div>
291 <div id="playercontrols">
292 <button id="prevbutton" onclick="prevButtonClick()">
293 <div></div>
294 </button>
295 <button id="nextbutton" onclick="nextButtonClick()">
296 <div></div>
297 </button>
298 </div>
299 </body>
300 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698