]> source.dussan.org Git - nextcloud-server.git/commitdiff
applied merge request #128: fixed some sorting and display issues with gallery app.
authorBjoern Schiessle <schiessle@owncloud.com>
Fri, 15 Jun 2012 08:46:29 +0000 (10:46 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Fri, 15 Jun 2012 08:46:29 +0000 (10:46 +0200)
This also fix bug #872 for the new gallery

apps/gallery/lib/tiles.php
apps/gallery/templates/index.php

index 5837c752ef66bd9de338d77ab6ea059d653083da..dcdf6aa1bfb44f601eb584ee8621818d031bac1f 100644 (file)
@@ -63,7 +63,7 @@ class TilesLine {
                                $img_w = $this->tiles_array[$i]->getWidth();
                                $extra = '';
                                if ($img_w != IMAGE_WIDTH) $extra = ' style="width:'.$img_w.'px"';
-                       $r .= '<div class="gallery_div" '.$extra.' onmouseover="'.$this->tiles_array[$i]->getOnHoverAction().'" onmouseout="'.$this->tiles_array[$i]->getOnOutAction().'" onclick="'.$this->tiles_array[$i]->getOnClickAction().'">'.$this->tiles_array[$i]->get().'</div>';
+                               $r .= '<div class="gallery_div" '.$extra.' onmouseover="'.$this->tiles_array[$i]->getOnHoverAction().'" onmouseout="'.$this->tiles_array[$i]->getOnOutAction().'" onclick="'.$this->tiles_array[$i]->getOnClickAction().'" style="background-color:#ddd">'.$this->tiles_array[$i]->get().'</div>';
                }
                
                $r .= '</div>';
@@ -122,7 +122,7 @@ class TileStack extends TileBase {
                $this->tiles_array = array();
                $this->stack_name = $stack_name;
                for ($i = 0; $i < count($path_array) && $i < self::STACK_REPRESENTATIVES; $i++) {
-               $tile = new TileSingle($path_array[$i]);
+                       $tile = new TileSingle($path_array[$i]);
                        array_push($this->tiles_array, $tile);
                }
        }
index 749f8891f8163eca5496358eebdcd8115e5cd102..1fdbea59575dc37fc799097183b5a347d61649f0 100644 (file)
@@ -9,7 +9,7 @@ div.miniature_border {position:absolute; height: 150px; -moz-transition-duration
 div.line {display:inline-block; border: 0; width: auto; height: 160px}
 div.gallery_div img{position:absolute; top: 1; left: 0; -moz-transition-duration: 0.3s; -o-transition-duration:0.3s; -webkit-transition-duration: 0.3s; height:150px; width: auto;}
 div.gallery_div img.shrinker {width:80px !important;}
-div.title { opacity: 0; text-align: center; vertical-align: middle; font-family: Arial; font-size: 12px; border: 0; position: absolute; text-overflow: ellipsis; bottom: 20px; left:5px; height:auto; padding: 5px; width: 140px; background-color: black; color: white; -webkit-transition: opacity 0.5s;  z-index:1000; border-radius: 7px}
+div.title { opacity: 0; text-align: center; vertical-align: middle; font-family: Arial; font-size: 12px; border: 0; position: absolute; text-overflow: ellipsis; bottom: 20px; right:-5px; height:auto; padding: 5px; width: 140px; background-color: black; color: white; -webkit-transition: opacity 0.5s; z-index:1000; border-radius: 7px}
 div.visible { opacity: 0.8;}
 </style>
 <script type="text/javascript">
@@ -43,7 +43,7 @@ function deplode(element) {
 function openNewGal(album_name) {
        root = root + album_name + "/";
        var url = window.location.toString().replace(window.location.search, '');
-  url = url + "?app=gallery&root="+encodeURIComponent(root);
+       url = url + "?app=gallery&root="+encodeURIComponent(root);
        
        window.location = url;
 }
@@ -79,39 +79,60 @@ $root = empty($_GET['root'])?'/':$_GET['root'];
 $images = \OC_FileCache::searchByMime('image', null, '/'.\OCP\USER::getUser().'/files'.$root);
 sort($images);
 
-$arr = array();
 $tl = new \OC\Pictures\TilesLine();
 $ts = new \OC\Pictures\TileStack(array(), '');
 $previous_element = @$images[0];
+
+$root_images = array();\r
+$second_level_images = array();\r
+\r
+$fallback_images = array(); // if the folder only cotains subfolders with images -> these are taken for the stack preview
+
 for($i = 0; $i < count($images); $i++) {
        $prev_dir_arr = explode('/', $previous_element);
        $dir_arr = explode('/', $images[$i]);
 
-       if (count($dir_arr)==1) {
-               $tl->addTile(new \OC\Pictures\TileSingle($root.$images[$i]));
-               continue;
+       if(count($dir_arr) == 1) { // getting the images in this directory\r
+               $root_images[] = $root.$images[$i];\r
+       } else {\r
+               if(strcmp($prev_dir_arr[0], $dir_arr[0]) != 0) { // if we entered a new directory\r
+                       if(count($second_level_images) == 0) { // if we don't have images in this directory\r
+                               if(count($fallback_images) != 0) { // but have fallback_images\r
+                                       $tl->addTile(new \OC\Pictures\TileStack($fallback_images, $prev_dir_arr[0]));\r
+                                       $fallback_images = array();\r
+                               }\r
+                       } else { // if we collected images for this directory\r
+                               $tl->addTile(new \OC\Pictures\TileStack($second_level_images, $prev_dir_arr[0]));\r
+                               $fallback_images = array();\r
+                               $second_level_images = array();\r
+                       }\r
+               }\r
+               if (count($dir_arr) == 2) { // These are the pics in our current subdir\r
+                       $second_level_images[] = $root.$images[$i];\r
+                       $fallback_images = array();\r
+               } else { // These are images from the deeper directories\r
+                       if(count($second_level_images) == 0) {\r
+                               $fallback_images[] = $root.$images[$i];\r
+                       }\r
+               }\r
+               // have us a little something to compare against\r
+               $previous_element = $images[$i];\r
        }
-       if (strcmp($prev_dir_arr[0], $dir_arr[0])!=0) {
-               $tl->addTile(new \OC\Pictures\TileStack($arr, $prev_dir_arr[0]));
-               $arr = array();
-       }
-       $arr[] = $root.$images[$i];
-       $previous_element = $images[$i];
 }
 
-$dir_arr = explode('/', $previous_element);
+// if last element in the directory was a directory we don't want to miss it :)\r
+if(count($second_level_images)>0) {\r
+       $tl->addTile(new \OC\Pictures\TileStack($second_level_images, $prev_dir_arr[0]));\r
+}
 
-if (count($images)>1 && count($dir_arr) > 1) {
-  if (count($dir_arr) && $ts->getCount() == 0){
-      $ts = new \OC\Pictures\TileStack(array($root.$previous_element), $dir_arr[0]);
-  } else {
-    $arr[] = $previous_element;
-    $ts->addTile($arr);
-  }
+// if last element in the directory was a directory with no second_level_images we also don't want to miss it ...\r
+if(count($fallback_images)>0) {\r
+       $tl->addTile(new \OC\Pictures\TileStack($fallback_images, $prev_dir_arr[0]));\r
 }
 
-if ($ts->getCount() != 0) {
-       $tl->addTile($ts);
+// and finally our images actually stored in the root folder\r
+for($i = 0; $i<count($root_images); $i++) {\r
+       $tl->addTile(new \OC\Pictures\TileSingle($root_images[$i]));\r
 }
 
 echo $tl->get();