summaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/templates/backgrounds.html269
-rw-r--r--frontend/urls.py7
-rw-r--r--frontend/views.py67
3 files changed, 342 insertions, 1 deletions
diff --git a/frontend/templates/backgrounds.html b/frontend/templates/backgrounds.html
new file mode 100644
index 0000000..ef7ff2e
--- /dev/null
+++ b/frontend/templates/backgrounds.html
@@ -0,0 +1,269 @@
+<html>
+<head>
+<title>SCANNERJAMMER BACKGROUNDS</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta property="og:title" content="ScannerJammer Backgrounds"/>
+<meta property="og:type" content="website"/>
+<meta property="og:url" content="http://scannerjammer.com/bgz/"/>
+<meta property="og:image" content="http://scannerjammer.com/img/bgz-icon.jpg"/>
+<meta property="og:site_name" content="ScannerJammer"/>
+<meta property="og:description" content="Every room background ever on ScannerJammer"/>
+<meta property="fb:admins" content="100001923956223,1709246"/>
+<style type="text/css">
+body
+ {
+ font-family: papyrus, trebuchet ms, sans-serif;
+background-image: -webkit-gradient(
+ linear,
+ left bottom,
+ left top,
+ color-stop(0.28, rgb(255,255,255)),
+ color-stop(0.64, rgb(250,247,250))
+);
+background-image: -moz-linear-gradient(
+ center bottom,
+ rgb(255,255,255) 28%,
+ rgb(250,247,250) 64%
+);
+ }
+html
+ {
+ padding-bottom: 400px;
+ }
+div
+ {
+ width: 230px;
+ height: 270px;
+ vertical-align: bottom;
+ float: left;
+ margin-right: 20px;
+ }
+div img
+ {
+ max-width: 230px;
+ max-height: 200px;
+ border: 0;
+ }
+a.i
+ {
+ width: 100%;
+ height: 200px;
+ padding-bottom: 5px;
+ display: block;
+ text-align: center;
+ }
+span
+ {
+ float: right;
+ }
+#dump
+ {
+ position: fixed;
+ left: 0;
+ bottom: 10px;
+ padding: 10px;
+ width: 100%;
+ border-bottom: 2px solid #000;
+ background-color: #f8f8f8;
+ border-top: 1px solid #888;
+ }
+#dump #rebus
+ {
+ clear: right;
+ width: 90%;
+ max-height: 700px;
+ overflow-y: scroll;
+ background-color: #fff;
+ padding-bottom: 5px;
+ border-bottom: 1px solid #ddd;
+ margin-bottom: 5px;
+ }
+#dump #rebus img
+ {
+ display: inline;
+ max-width: 400px;
+ max-height: 400px;
+ margin-right: -4px;
+ }
+#dump #urlz
+ {
+ width: 90%;
+ font-size: 15px;
+ }
+#dump #clear
+ {
+ font-size: 15px;
+ }
+#help
+ {
+ display: none;
+ position: fixed;
+ top: 10px;
+ right: 10px;
+ cursor: pointer;
+ text-align: right;
+ font-family: sans-serif;
+ }
+#help b
+ {
+ padding: 5px;
+ background-color: #f8f4fb;
+ display: block;
+ max-width: 160px;
+ text-align: right;
+ }
+#help #keys
+ {
+ clear: both;
+ background-color: #f8f8f8;
+ padding: 5px;
+ display: none;
+ width: 120px;
+ font-size: 12px;
+ }
+.nextpage
+ {
+ position: fixed;
+ bottom: 20px;
+ right: 10px;
+ font-size: 24px;
+ padding: 5px;
+ background-color: #fff;
+ color: #0E40bF;
+ }
+a.u
+ {
+ color: DodgerBlue;
+ }
+a.r
+ {
+ color: coral;
+ }
+
+</style>
+</head>
+<body>
+<section id="help">
+ <b>keys</b>
+ <div id="keys">ESC toggle<br/>C clear<br/>R reverse<br/>BACKSPACE delete</div>
+</section>
+<!--
+<section id="dump">
+ <div id="rebus"></div>
+ <input id="urlz" type="text" />
+ <button id="clear">clear</button>
+</section>
+-->
+
+{% for b in backgrounds %}
+<div>
+ <a class='i' href='{{ b.settings.url }}' target='blank'><img src='{{ b.settings.url }}'/></a>
+ <small>
+ <a class='u' href='/profile/{{ b.user.username }}'>{{ b.user.username }}</a>
+ <span>{{ b.domain }}</span><br/>
+ <a class='r' href='/{{ b.room.name }}/'>{{ b.room.name }}</a>
+ <span>{{ b.datetime|date:"d-M @ H:i" }}</span>
+ </small>
+</div>
+{% endfor %}
+<a href='?start={{ lowest_id }}&limit={{backgrounds|length }}' class='nextpage'>Next page ...</a>
+</body>
+<script type="text/javascript" src="/js/jquery-1.5.2.min.js"></script>
+<script type="text/javascript">
+var Dump =
+ {
+ pick: function ()
+ {
+ Dump.pickUrl( $(this).attr("src") )
+ },
+ pickUrl: function (url)
+ {
+ $("#rebus").append ($ ("<img>").attr ("src", url))
+ $("#rebus").show()
+ $("#urlz").val( $("#urlz").val() + " " + url )
+ return false
+ },
+ clear: function ()
+ {
+ $("#rebus").html("")
+ $("#urlz").val("")
+ },
+ backspace: function ()
+ {
+ $("#rebus img:last").remove()
+ var urllist = $("#urlz").val().split(" ")
+ urllist.pop()
+ $("#urlz").val( urllist.join(" ") )
+ },
+ reverse: function ()
+ {
+ urllist = $("#urlz").val().split(" ")
+ Dump.clear()
+ for (i in urllist.reverse())
+ if (urllist[i])
+ Dump.pickUrl(urllist[i])
+ },
+ }
+var Main =
+ {
+ editing: false,
+ kp: function (event)
+ {
+ switch (event.keyCode)
+ {
+ // BS
+ case 8:
+ if (! Main.editing)
+ Dump.backspace()
+ return false
+ // C
+ case 67:
+ if (! Main.editing)
+ Dump.clear()
+ break
+ // R
+ case 82:
+ if (! Main.editing)
+ Dump.reverse()
+ break
+ // ESC
+ case 27:
+ // H
+ case 72:
+ if (! Main.editing)
+ $("#rebus").toggle()
+ break
+ }
+ return true
+ },
+ poll: function ()
+ {
+ },
+ pollCallback: function ()
+ {
+ },
+ init: function ()
+ {
+ $(document).keydown(Main.kp)
+ $("#urlz").focus(function(){ Main.editing = true })
+ $("#urlz").blur(function(){ Main.editing = false })
+ $("#clear").live("click", Dump.clear)
+ $("div img").live("click", Dump.pick)
+ $("#help").click(function(){ $("#keys").toggle() })
+ Dump.clear()
+ },
+ }
+Main.init()
+</script>
+<script type="text/javascript">
+ var serverHost = "{{ server_host }}";
+ var serverPort = {{ server_port }};
+</script>
+<script type="text/javascript" src="/js/jquery-1.5.2.min.js"></script>
+<script type="text/javascript" src="/js/jquery.md5.js"></script>
+<script type="text/javascript" src="/js/swfobject.js"></script>
+<script type="text/javascript" src="/js/debug.js"></script>
+<script type="text/javascript" src="/js/api.js"></script>
+<script type="text/javascript" src="/js/auth.js"></script>
+<script type="text/javascript" src="/js/poll.js"></script>
+</html>
diff --git a/frontend/urls.py b/frontend/urls.py
new file mode 100644
index 0000000..7a438c9
--- /dev/null
+++ b/frontend/urls.py
@@ -0,0 +1,7 @@
+from django.conf.urls import patterns, include, url
+
+
+urlpatterns = patterns('frontend.views',
+ # API
+ url(r'^backgrounds/$', 'backgrounds'),
+)
diff --git a/frontend/views.py b/frontend/views.py
index 60f00ef..552f0d9 100644
--- a/frontend/views.py
+++ b/frontend/views.py
@@ -1 +1,66 @@
-# Create your views here.
+import re
+
+from django.conf import settings
+from django.http import HttpResponse
+from django.shortcuts import render_to_response
+
+from backend.models import SJLike
+from backend.models import SJRoom
+from backend.models import SJContent
+from backend.models import SJSearch
+from backend.models import SJUserProfile
+
+from backend.views import is_number
+from backend.views import is_image
+
+from django.db.models import Q
+
+LIMIT = 40
+
+BLOCKED_DOMAINS = {
+ 'dvdbeaver.com': True,
+ '4chan.org': True,
+ 'yahoo.com': True,
+ 'adultswim.com': True,
+}
+
+
+def bg(request):
+ """
+ """
+ query = Q(content_type='background')
+ if request.GET.get('start', None):
+ if is_number(request.GET['start']):
+ query &= Q(id__lt=int(request.GET['start']))
+ limit = LIMIT
+ if request.GET.get('limit', None):
+ if is_number(request.GET['limit']):
+ limit = int(request.GET['limit'])
+ backgrounds = SJContent.objects.filter(query).order_by('-id')[0:limit]
+
+ filtered_backgrounds = []
+ for b in backgrounds:
+ s = b.settings
+ url = s['url']
+ if not url.startswith('http:'):
+ continue
+ domain = ''
+ try:
+ domain = '.'.join(url.split('/')[2].split('.')[-2:])
+ except:
+ continue
+ if domain in BLOCKED_DOMAINS:
+ continue
+ b.domain = domain
+ filtered_backgrounds.append(b)
+
+ return render_to_response(
+ 'backgrounds.html',
+ {
+ 'server_host': settings.SERVER_HOST,
+ 'server_port': settings.SERVER_PORT,
+ 'lowest_id': backgrounds[limit - 1].id,
+ 'backgrounds': filtered_backgrounds,
+ 'domain': domain,
+ }
+ )