From 805493e2a29f0ad6e973700c6eb2ed010bd1a2fb Mon Sep 17 00:00:00 2001 From: sanj Date: Thu, 12 Aug 2010 19:24:15 +0530 Subject: [PATCH] youtube works, flickr caches, added colorbox --- vurbanism/flyovers/models.py | 64 ++++++++++++++++++++++++++++--- vurbanism/static/js/vurbanism.js | 30 +++++++++++++-- vurbanism/templates/flyovers.html | 18 ++++++++- 3 files changed, 102 insertions(+), 10 deletions(-) diff --git a/vurbanism/flyovers/models.py b/vurbanism/flyovers/models.py index 8ba60ea..ab386c4 100644 --- a/vurbanism/flyovers/models.py +++ b/vurbanism/flyovers/models.py @@ -2,6 +2,11 @@ from django.contrib.gis.db import models import oxlib import flickr import settings +try: + import json +except: + import simplejson as json +from oxweb import youtube flickr.API_KEY = settings.FLICKR_API_KEY flickr.SECRET = settings.FLICKR_SECRET @@ -36,7 +41,8 @@ class Image(models.Model): caption = models.CharField(max_length=255, blank=True, null=True) category = models.ForeignKey("ImageCategory") flyover = models.ForeignKey(Flyover) - + flickrData = models.TextField(blank=True) + def get_flickr_id(self): regex = r'http\:\/\/.*?\/\d{4}/(.*?)_.*' return oxlib.findRe(self.url, regex) @@ -45,17 +51,24 @@ class Image(models.Model): return self.url + " - " + self.caption + " - " + self.category.name def get_dict(self): - flickrPhoto = flickr.Photo(id=self.get_flickr_id()) - sizes = flickrPhoto.getSizes() - return { + if self.flickrData != '': + return json.loads(self.flickrData) + else: + flickrPhoto = flickr.Photo(id=self.get_flickr_id()) + sizes = flickrPhoto.getSizes() + ret = { 'url': self.url, 'sizes': sizes, 'caption': self.caption, 'flyover': { 'id': self.flyover.id, 'name': self.flyover.name + } } - } + self.flickrData = json.dumps(ret) + self.save() + return ret + class ImageCategory(models.Model): name = models.CharField(max_length=255) @@ -83,10 +96,34 @@ class Video(models.Model): caption = models.CharField(max_length=255, blank=True, null=True) category = models.ForeignKey("VideoCategory") flyover = models.ForeignKey(Flyover) + youtubeData = models.TextField(blank=True) def __unicode__(self): return self.url + " - " + self.caption + " - " + self.category.name + def get_youtube_id(self): + reg = r'http.*?v=(.*?)$' + return oxlib.findRe(self.url, reg) + + def get_dict(self): + if self.youtubeData != '': + return json.loads(self.youtubeData) + else: + youtube_id = self.get_youtube_id() + info = youtube.getMovieInfo(youtube_id) + info['title'] = '' #Nasty, to avoid UnicodeDecodeError's when trying to do json.dumps on some video titles. FIXME. + ret = { + 'info': info, + 'flyover': { + 'id': self.flyover.id, + 'name': self.flyover.name + } + } + self.youtubeData = json.dumps(ret) + self.save() + return ret + + class VideoCategory(models.Model): name = models.CharField(max_length=255) description = models.TextField(blank=True, null=True) @@ -94,6 +131,21 @@ class VideoCategory(models.Model): def __unicode__(self): return self.name + def get_dict(self): + videos = [] + flyovers = [] + for v in Video.objects.filter(category=self): + videos.append(v.get_dict()) + flyovers.append(v.flyover.geojson_as_dict()) + return { + 'videos': videos, + 'flyovers': { + 'type': 'FeatureCollection', + 'features': flyovers + } + } + + class Audio(models.Model): fil = models.FileField(upload_to='audio/') caption = models.CharField(max_length=255, blank=True, null=True) @@ -112,7 +164,7 @@ class AudioCategory(models.Model): class Text(models.Model): # url = models.URLField("FlickR URL") - text = models.TextField(max_length=255) + text = models.TextField() category = models.ForeignKey("TextCategory") flyover = models.ForeignKey(Flyover) diff --git a/vurbanism/static/js/vurbanism.js b/vurbanism/static/js/vurbanism.js index 637eb5c..5061c25 100644 --- a/vurbanism/static/js/vurbanism.js +++ b/vurbanism/static/js/vurbanism.js @@ -141,13 +141,37 @@ $(function() { var id = $(this).attr("data-id"); $('#media').html("Loading images for " + catName + " .. please wait.."); $.getJSON("category", {'id': id, 'type': type}, function(json) { +// alert(type); var arr = []; var features = json.flyovers; var currFeatures = jsonLayer.features; jsonLayer.removeFeatures(currFeatures); jsonLayer.addFeatures(geojson_format.read(features)); - var html = tmpl("tmpl_images", {'images': json.images}); - $('#media').html(html); + alert(type); + switch(type.toLowerCase()) { + case "image": + var html = tmpl("tmpl_images", {'images': json.images}); + $('#media').html(html); + $('.imageWrapper a').colorbox(); + break; + case "video": + var html = tmpl("tmpl_videos", {'videos': json.videos}); + $('#media').html(html); + var i = 0; + $('.videoWrapper').each(function() { + var videoData = json.videos[i]; + $(this).data("videoData", videoData); + i++; + }); + $('.videoWrapper > a').click(function(e) { + e.preventDefault(); + var data = $(this).closest(".videoWrapper").data("videoData"); + var embedCode = data.info.embed; + $.colorbox({html: embedCode}); + }); + default: + $.noop(); + } }); }); }); @@ -164,7 +188,7 @@ function getFlyoverById(id) { $('.flyoverImage').live("mouseover", function() { var id = $(this).attr("data-id"); - console.log(id); +// console.log(id); var flyover = getFlyoverById(id); mapControl.select(flyover); currentlySelectedFeature = flyover; diff --git a/vurbanism/templates/flyovers.html b/vurbanism/templates/flyovers.html index 7fb77dd..1c6910d 100644 --- a/vurbanism/templates/flyovers.html +++ b/vurbanism/templates/flyovers.html @@ -103,7 +103,9 @@ a img { box-shadow: 0px 0px 1.5em; } + + @@ -116,7 +118,7 @@ a img {
<% for (var i=0; i @@ -125,6 +127,20 @@ a img {
+ + +