New admin UI functionality.
[catagits/App-IdiotBox.git] / lib / App / IdiotBox.pm
index 119f517..4895302 100644 (file)
@@ -36,6 +36,7 @@ sub dispatch_request {
   my $self = shift;
   sub (/) { $self->show_front_page },
 
+  # Admin
   sub (/admin/) {
     sub (%new_name=&new_slug=) {
         my ($self, $name, $slug) = @_;
@@ -45,25 +46,46 @@ sub dispatch_request {
           name => $name,
         );
 
-        return $self->show_admin_page(error => $err) if $err;
+        return $self->show_admin_page(message => $err) if $err;
 
         my $nb = $self->buckets->add($nb);
 
-        $self->show_admin_page;
+        $self->show_admin_page(message => "New bucket created");
     },
   },
   sub (/admin/) { $self->show_admin_page },
 
-  sub (/admin/*/...) {
+  sub (/admin/bucket/*/...) {
     my $bucket = $self->buckets->get({ slug => $_[1] });
-    sub (%new_name=) {
-      my ($self, $new_name) = @_;
 
+    # Admin, video
+    sub (/video/*/...) {
+      my $video = $bucket->videos->get({ slug => $_[1] });
+
+      sub (POST + %edit_video=&*) {
+        my ($self, undef, $args) = @_;
+        delete $args->{edit_video};
+
+        my ($uv, $err) = $video->update(%$args);
+
+        return $self->show_edit_video_page($video, message => $err) if $err;
+
+        $self->videos->replace($video, $uv);
+
+        $self->show_edit_video_page($video, message => "Video updated");
+      },
+
+      sub (/) { $self->show_edit_video_page($video); }
+    },
+
+    sub (POST + %edit_bucket=&*) {
+      my ($self, $new_name) = @_;
+       die "WTF";
       my ($ub, $err) = $bucket->update(
         name => $new_name,
       );
 
-      return $self->show_admin_page(error => $err) if $err;
+      return $self->show_admin_page(message => $err) if $err;
 
       $self->buckets->replace($bucket, $ub);
 
@@ -80,6 +102,8 @@ sub dispatch_request {
       $self->show_bucket_deleted_page($bucket->slug);
     },
   },
+
+  # Normal site
   sub (/*/...) {
     my $bucket = $self->buckets->get({ slug => $_[1] });
     sub (/) {
@@ -118,7 +142,7 @@ sub show_front_page {
 sub show_admin_page {
   my $self = shift;
   my %opts = @_;
-  my $error = $opts{error} || '';
+  my $message = $opts{message} || '';
 
   my $bucket = $self->buckets;
   $self->html_response(
@@ -130,14 +154,14 @@ sub show_admin_page {
               $_->select('.bucket-slug')->replace_content($obj->slug)
                 ->select('.bucket-name')->replace_content($obj->name)
                 ->select('.edit-link')->set_attribute(
-                    'href' => $obj->slug.'/'
+                    'href' => 'bucket/'.$obj->slug.'/'
                   )
                 ->select('.delete-link')->set_attribute(
-                    'href' => $obj->slug.'/delete/'
+                    'href' => 'bucket/'.$obj->slug.'/delete/'
                   )
             }
           }))
-        ->select('.error-text')->replace_content($error)
+        ->select('.message-text')->replace_content($message)
 
     }
 
@@ -146,7 +170,7 @@ sub show_admin_page {
 
 sub show_confirm_delete_bucket_page {
   my ($self, $bucket) = @_;
-  $self->html_response('delete' => sub {
+  $self->html_response('delete_bucket' => sub {
     $_->select('.bucket-name')->replace_content($bucket->name)
       ->select('.confirm-yes')->set_attribute(
         'href' => 'yes/'
@@ -156,23 +180,47 @@ sub show_confirm_delete_bucket_page {
 
 sub show_edit_bucket_page {
   my ($self, $bucket, %opt) = @_;
-  my $error = $opt{error} || '';
-  $self->html_response('edit' => sub {
+  my $message = $opt{message} || '';
+  $self->html_response('edit_bucket' => sub {
     $_->select('.bucket-name')->replace_content($bucket->name)
-      ->select('.error-text')->replace_content($error);
+      ->select('.bucket-slug')->replace_content($bucket->slug)
+      ->select('.message-text')->replace_content($message)
+      ->select('#video-list')->repeat_content($bucket->videos->map(sub {
+          my $video = $_;
+          sub {
+            $_->select('.video-name')->replace_content($video->name)
+              ->select('.video-author')->replace_content($video->author)
+              ->select('.video-link')->set_attribute(
+                  href => 'video/'.$video->slug.'/'
+                )
+          }
+        }))
+
+  });
+}
+
+sub show_edit_video_page {
+  my ($self, $video, %opt) = @_;
+  my $message = $opt{message} || '';
+  $self->html_response('edit_video' => sub {
+    $_->select('.video-name')->set_attribute(value => $video->name)
+      ->select('.author-name')->set_attribute(value => $video->author)
+      ->select('.bucket-slug')->replace_content($video->bucket->slug)
+      ->select('.slug-name')->replace_content($video->slug)
+      ->select('.message-text')->replace_content($message)
   });
 }
 
 sub show_bucket_deleted_page {
   my ($self, $name) = @_;
-  $self->html_response('deleted' => sub {
+  $self->html_response('deleted_bucket' => sub {
     $_->select('.bucket-name')->replace_content($name)
   });
 }
 
 sub show_bucket_edited_page {
   my ($self, $name) = @_;
-  $self->html_response('edited' => sub {
+  $self->html_response('edited_bucket' => sub {
     $_->select('.bucket-name')->replace_content($name)
   });
 }