parent
ba571914a1
commit
0cef00ca8f
|
@ -20,10 +20,8 @@ class STLUploadForm(ModelForm):
|
||||||
stlfile = self.cleaned_data.get("file")
|
stlfile = self.cleaned_data.get("file")
|
||||||
stlfile.open()
|
stlfile.open()
|
||||||
|
|
||||||
print dir(stlfile)
|
|
||||||
|
|
||||||
if stlfile.read(5) != "solid":
|
if stlfile.read(5) != "solid":
|
||||||
print "binary"
|
#print "binary"
|
||||||
#Skip header
|
#Skip header
|
||||||
stlfile.seek(80)
|
stlfile.seek(80)
|
||||||
count = struct.unpack("i",stlfile.read(4))[0]
|
count = struct.unpack("i",stlfile.read(4))[0]
|
||||||
|
@ -31,7 +29,7 @@ class STLUploadForm(ModelForm):
|
||||||
raise forms.ValidationError("Not a valid binary STL file.")
|
raise forms.ValidationError("Not a valid binary STL file.")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print "ascii"
|
#print "ascii"
|
||||||
next_patterns = [facet_pattern]
|
next_patterns = [facet_pattern]
|
||||||
stlfile.readline()
|
stlfile.readline()
|
||||||
line = stlfile.readline().strip()
|
line = stlfile.readline().strip()
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block title %} All public pastes{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block headeraddons %}
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="content">
|
||||||
|
<div id="prompt">
|
||||||
|
<!-- if IE without GCF, prompt goes here -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1>All public pastes</h1>
|
||||||
|
<div class="pure-g-r">
|
||||||
|
<div class="pure-u-2-3">
|
||||||
|
<div class="textcontainer">
|
||||||
|
|
||||||
|
<table class="pure-table pure-table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Uploader</th>
|
||||||
|
<th>Size (w x h x d)</th>
|
||||||
|
<th>Polygons</th>
|
||||||
|
<th>Expires</th>
|
||||||
|
<th>Date</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
{% for geometry in geometries %}
|
||||||
|
<tr {% cycle '' 'class="odd-row"' %}>
|
||||||
|
<td><a href="{{geometry.get_absolute_url}}">{{geometry.name}}</a></td>
|
||||||
|
<td>
|
||||||
|
{% if geometry.user %}
|
||||||
|
{{geometry.user.username}}
|
||||||
|
{% else %}
|
||||||
|
Anonymous
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{geometry.get_width}} x {{geometry.get_height}} x {{geometry.get_depth}}</td>
|
||||||
|
<td>{{geometry.get_polycount}}</td>
|
||||||
|
<td>
|
||||||
|
{% if geometry.get_expiration_date %}
|
||||||
|
{{ geometry.get_expiration_date|timeuntil}}
|
||||||
|
{% else %}
|
||||||
|
never
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>{{geometry.date}}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
{% if geometries.has_previous %}
|
||||||
|
<a href="?page={{ geometries.previous_page_number }}">previous... </a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if geometries.number %}
|
||||||
|
Page {{ geometries.number }} of {{ geometries.paginator.num_pages }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if geometries.has_next %}
|
||||||
|
<a href="?page={{ geometries.next_page_number }}"> ..next</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1-3">
|
||||||
|
{% include 'pastebin/latest_geometries.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -1,8 +1,11 @@
|
||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
from views import GeometryView, GeometryCreate, GeometryDelete
|
from views import GeometryView, GeometryListView, GeometryCreate, GeometryDelete
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^new/$', GeometryCreate.as_view(), name='geometry_create'),
|
url(r'^new/$', GeometryCreate.as_view(), name='geometry_create'),
|
||||||
url(r'^g/delete/(?P<id>\d+)/$', GeometryDelete.as_view(), name='geometry_delete'),
|
url(r'^list/$', GeometryListView.as_view(), name='geometry_list'),
|
||||||
url(r'^g/(?P<id>\d+)/$', GeometryView.as_view(), name='geometry_details'))
|
url(r'^list/page/(?P<page>[0-9]+)/$', GeometryListView.as_view(), name='geometry_list'),
|
||||||
|
url(r'^delete/(?P<id>\d+)/$', GeometryDelete.as_view(), name='geometry_delete'),
|
||||||
|
url(r'^(?P<id>\d+)/$', GeometryView.as_view(), name='geometry_details'))
|
||||||
|
|
|
@ -4,7 +4,7 @@ from django.core.urlresolvers import reverse
|
||||||
from django.views.generic.base import ContextMixin
|
from django.views.generic.base import ContextMixin
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.views.generic.base import TemplateView
|
from django.views.generic.base import TemplateView
|
||||||
|
from django.views.generic.list import ListView
|
||||||
|
|
||||||
from forms import GeometryForm, AnonymousGeometryForm
|
from forms import GeometryForm, AnonymousGeometryForm
|
||||||
from models import Geometry
|
from models import Geometry
|
||||||
|
@ -16,6 +16,14 @@ class LastesGeometriesMixin(ContextMixin):
|
||||||
context['latest_geometries'] = Geometry.get_latest()
|
context['latest_geometries'] = Geometry.get_latest()
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
class GeometryListView(ListView, LastesGeometriesMixin):
|
||||||
|
model = Geometry
|
||||||
|
paginate_by = 50
|
||||||
|
paginate_orphans = 25
|
||||||
|
page_kwarg = 'page'
|
||||||
|
context_object_name = 'geometries'
|
||||||
|
template_name = 'pastebin/geometry_list.html'
|
||||||
|
|
||||||
|
|
||||||
class GeometryView(DetailView):
|
class GeometryView(DetailView):
|
||||||
model = Geometry
|
model = Geometry
|
||||||
|
|
|
@ -60,27 +60,10 @@ body {
|
||||||
color: #4C5B89; }
|
color: #4C5B89; }
|
||||||
.textcontainer a:hover {
|
.textcontainer a:hover {
|
||||||
color: #7E98E5; }
|
color: #7E98E5; }
|
||||||
.textcontainer .button-green {
|
.textcontainer table {
|
||||||
color: white;
|
background-color: #ffffff; }
|
||||||
background-color: #1CB841; }
|
.textcontainer table .odd-row {
|
||||||
.textcontainer .button-green:visited {
|
background-color: #e4eef2; }
|
||||||
color: white; }
|
|
||||||
.textcontainer .button-green:hover {
|
|
||||||
color: white; }
|
|
||||||
.textcontainer .button-red {
|
|
||||||
color: white;
|
|
||||||
background-color: #ca3c3c; }
|
|
||||||
.textcontainer .button-red:visited {
|
|
||||||
color: white; }
|
|
||||||
.textcontainer .button-red:hover {
|
|
||||||
color: white; }
|
|
||||||
.textcontainer .button-lightblue {
|
|
||||||
color: white;
|
|
||||||
background-color: #42B8DD; }
|
|
||||||
.textcontainer .button-lightblue:visited {
|
|
||||||
color: white; }
|
|
||||||
.textcontainer .button-lightblue:hover {
|
|
||||||
color: white; }
|
|
||||||
.textcontainer .uploads-list {
|
.textcontainer .uploads-list {
|
||||||
list-style: none; }
|
list-style: none; }
|
||||||
.textcontainer .pure-form label {
|
.textcontainer .pure-form label {
|
||||||
|
@ -94,3 +77,27 @@ body {
|
||||||
.textcontainer .resetlink {
|
.textcontainer .resetlink {
|
||||||
font-size: 75%;
|
font-size: 75%;
|
||||||
text-decoration: none; }
|
text-decoration: none; }
|
||||||
|
|
||||||
|
#fileinfos .button-green, .textcontainer .button-green {
|
||||||
|
color: white;
|
||||||
|
background-color: #1CB841; }
|
||||||
|
#fileinfos .button-green:visited, .textcontainer .button-green:visited {
|
||||||
|
color: white; }
|
||||||
|
#fileinfos .button-green:hover, .textcontainer .button-green:hover {
|
||||||
|
color: white; }
|
||||||
|
|
||||||
|
#fileinfos .button-red, .textcontainer .button-red {
|
||||||
|
color: white;
|
||||||
|
background-color: #ca3c3c; }
|
||||||
|
#fileinfos .button-red:visited, .textcontainer .button-red:visited {
|
||||||
|
color: white; }
|
||||||
|
#fileinfos .button-red:hover, .textcontainer .button-red:hover {
|
||||||
|
color: white; }
|
||||||
|
|
||||||
|
#fileinfos .button-lightblue, .textcontainer .button-lightblue {
|
||||||
|
color: white;
|
||||||
|
background-color: #42B8DD; }
|
||||||
|
#fileinfos .button-lightblue:visited, .textcontainer .button-lightblue:visited {
|
||||||
|
color: white; }
|
||||||
|
#fileinfos .button-lightblue:hover, .textcontainer .button-lightblue:hover {
|
||||||
|
color: white; }
|
||||||
|
|
|
@ -100,24 +100,14 @@ body{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
background-color: #ffffff;
|
||||||
|
|
||||||
.button-green {
|
.odd-row {
|
||||||
@include fixlinkcolor(#ffffff);
|
background-color: #e4eef2;
|
||||||
background-color: #1CB841;
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.button-red {
|
|
||||||
@include fixlinkcolor(#ffffff);
|
|
||||||
background-color: #ca3c3c;
|
|
||||||
}
|
|
||||||
|
|
||||||
.button-lightblue {
|
|
||||||
@include fixlinkcolor(#ffffff);
|
|
||||||
background-color: #42B8DD;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.uploads-list {
|
.uploads-list {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
}
|
}
|
||||||
|
@ -144,4 +134,19 @@ body{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#fileinfos .button-green, .textcontainer .button-green {
|
||||||
|
@include fixlinkcolor(#ffffff);
|
||||||
|
background-color: #1CB841;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fileinfos .button-red, .textcontainer .button-red {
|
||||||
|
@include fixlinkcolor(#ffffff);
|
||||||
|
background-color: #ca3c3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fileinfos .button-lightblue, .textcontainer .button-lightblue {
|
||||||
|
@include fixlinkcolor(#ffffff);
|
||||||
|
background-color: #42B8DD;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{% url 'home' %}">Home</a></li>
|
<li><a href="{% url 'home' %}">Home</a></li>
|
||||||
<li><a href="{% url 'geometry_create' %}">New Paste</a></li>
|
<li><a href="{% url 'geometry_create' %}">New Paste</a></li>
|
||||||
|
<li><a href="{% url 'geometry_list' %}">Public Pastes</a></li>
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<li><a href="{% url 'user_update' user_id=user.pk %}">Account</a></li>
|
<li><a href="{% url 'user_update' user_id=user.pk %}">Account</a></li>
|
||||||
<li><a href="{% url 'logout' %}">Logout</a></li>
|
<li><a href="{% url 'logout' %}">Logout</a></li>
|
||||||
|
|
|
@ -35,8 +35,10 @@
|
||||||
<li>Models uploaded by registred user stay online indefinitely</li>
|
<li>Models uploaded by registred user stay online indefinitely</li>
|
||||||
</ul>
|
</ul>
|
||||||
<i>Private</i> only means that past3d will not show the link to anyone else.
|
<i>Private</i> only means that past3d will not show the link to anyone else.
|
||||||
Whereas a public paste can be shown at various places on this site,
|
Whereas a public paste can be shown the Latest Uploads sidebar and
|
||||||
e.g. the Latest Uploads sidebar.
|
the list of all public pastes.
|
||||||
|
So if you want your stuff to stay <i>private</i> don't post the link on twitter
|
||||||
|
or your favorite 3 printing forum, because once the googlebot has it it's public.
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
<br/>
|
||||||
Also note that as an unregistered user your models will only stay online for a limited time span (up to one month maximum).<br/>
|
Also note that as an unregistered user your models will only stay online for a limited time span (up to one month maximum).<br/>
|
||||||
|
|
Loading…
Reference in New Issue