boxes successfully render on page

This commit is contained in:
Sanj 2011-04-10 07:30:43 +05:30
parent e551dcab79
commit 5fb754bec8
10 changed files with 150 additions and 62 deletions

View File

@ -155,7 +155,10 @@ class ItfModel(models.Model):
ret = [] ret = []
page_no = options['page_no'] page_no = options['page_no']
list_size = options['list_size'] list_size = options['list_size']
qset = kls.objects.all() try:
qset = kls.get_qset()
except:
qset = kls.objects.all()
search = options['search'] search = options['search']
if search != '': if search != '':
@ -168,7 +171,7 @@ class ItfModel(models.Model):
operator = '-' operator = '-'
else: else:
operator = '' operator = ''
sort = operator + s['ey'] sort = operator + s['key']
qset = qset.order_by(sort) qset = qset.order_by(sort)
r0 = options['range'][0] r0 = options['range'][0]
@ -178,6 +181,12 @@ class ItfModel(models.Model):
ret.append(r.list_dict()) ret.append(r.list_dict())
return ret return ret
@classmethod
def get_qset(kls):
'''
Override this method in your model class to define a custom queryset instead of objects.all(), for instance, to always exclude unpublished items.
'''
raise NotImplementedError
def getField(fields, name): def getField(fields, name):
for f in fields: for f in fields:

View File

@ -20,16 +20,9 @@ class BestPractice(ItfModel):
modified = models.DateTimeField(auto_now=True, null=True) modified = models.DateTimeField(auto_now=True, null=True)
fts_fields = ['title', 'story', 'guideline', 'law', 'theatre', 'quick_howto'] fts_fields = ['title', 'story', 'guideline', 'law', 'theatre', 'quick_howto']
related_models = ["bestpracticestory", "bestpracticelink", "bestpracticeimage"]
extra_buttons = [
{
'title': 'Foo button',
'mouseover': 'blah',
'dialog': ''
}
]
fk_filters = ['category'] fk_filters = ['category']
sort_fields = ['title'] sort_fields = ['title']
add_form = "BestPracticeForm" add_form = "BestPracticeForm"
getters = ['info_dict', 'list_dict', 'no_of_stories'] getters = ['info_dict', 'list_dict', 'no_of_stories']

View File

@ -22,7 +22,7 @@ class ModelExtra(models.Model):
return { return {
'id': self.id, 'id': self.id,
'module': self.model.model_class()._meta.app_label, 'module': self.model.model_class()._meta.app_label,
'model': self.model.model, 'model': self.model.model_class().__name__,
'has_comments': self.has_comments, 'has_comments': self.has_comments,
# 'info': self.info, # 'info': self.info,
'friendly_name': self.friendly_name, 'friendly_name': self.friendly_name,

View File

@ -1,13 +1,35 @@
from django.db import models from django.db import models
from django.contrib.comments.signals import comment_was_posted from django.contrib.comments.signals import comment_was_posted
from django.core.mail import send_mail from django.core.mail import send_mail
from app.models import ItfModel
class Issue(models.Model): class Issue(ItfModel):
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
summary = models.TextField(blank=True, null=True) summary = models.TextField(blank=True, null=True)
date = models.DateField() date = models.DateField()
html = models.TextField(blank=True) html = models.TextField(blank=True)
fts_fields = ['title', 'summary']
fk_filters = []
def preview_dict(self):
return {
'id': self.id,
'title': self.title,
'summary': self.summary,
}
def info_dict(self):
d = self.preview_dict()
d['html'] = self.html
return d
def list_dict(self):
return {
'id': self.id,
'title': self.title
}
def __unicode__(self): def __unicode__(self):
return self.title return self.title

View File

@ -114,7 +114,7 @@ class Image(models.Model):
def __unicode__(self): def __unicode__(self):
return self.title return self.title
class Document(models.Model): class Document(ItfModel):
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
intro = RichTextField(blank=True, null=True) intro = RichTextField(blank=True, null=True)
file = models.FileField(upload_to='upload/docs', blank=True, null=True) file = models.FileField(upload_to='upload/docs', blank=True, null=True)
@ -122,16 +122,57 @@ class Document(models.Model):
talk = models.ForeignKey('Talk', blank=True, null=True) talk = models.ForeignKey('Talk', blank=True, null=True)
is_resource = models.BooleanField() is_resource = models.BooleanField()
fts_fields = ['title', 'intro']
fk_filters = []
sort_fields = ['title']
def preview_dict(self):
return {
'id': self.id,
'title': self.title,
'intro': self.intro,
'file': self.file.url
}
def list_dict(self):
return {
'id': self.id,
'title': self.title
}
def info_dict(self):
return self.preview_dict()
def __unicode__(self): def __unicode__(self):
return self.title return self.title
class Project(models.Model): class Project(ItfModel):
title = models.CharField(max_length=255) title = models.CharField(max_length=255)
intro = models.TextField(blank=True, null=True) intro = models.TextField(blank=True, null=True)
start_date = models.DateField(blank=True, null=True) start_date = models.DateField(blank=True, null=True)
end_date = models.DateField(blank=True, null=True) end_date = models.DateField(blank=True, null=True)
slug = models.SlugField() slug = models.SlugField()
fts_fields = ['title', 'intro']
fk_filters = []
sort_fields = ['title', 'start_date']
def preview_dict(self):
return {
'id': self.id,
'title': self.title,
'intro': self.intro
}
def info_dict(self):
return self.preview_dict()
def list_dict(self):
return {
'id': self.id,
'title': self.title
}
def __unicode__(self): def __unicode__(self):
return self.title return self.title

View File

@ -8,12 +8,6 @@ app.launch(function(data) {
Ox.theme("classic"); Ox.theme("classic");
Ox.print(data); Ox.print(data);
app.$body = $('body');
app.$document = $(document);
app.$window = $(window);
app.$window.resize(function() {
ITF.setSizes();
});
/* /*
app.user = data.user; app.user = data.user;
app.config = data.config; app.config = data.config;
@ -24,21 +18,36 @@ app.launch(function(data) {
app.constructors = ['wrapper', 'headerPanel', 'mainPanel', 'leftPanel', 'cityPicker', 'calendarBox', 'currentEventsList', 'middlePanel', 'middleTopPanel', 'newsfeedBox', 'aboutBox', 'itfBox', 'middleBottomPanel', 'erangBox', 'scriptArchiveBox', 'bestPracticesBox', 'biblioBox', 'offersNeedsBox', 'surveysBox', 'rightPanel', 'searchBox', 'loginBox', 'previewBox', 'footerPanel'] app.constructors = ['wrapper', 'headerPanel', 'mainPanel', 'leftPanel', 'cityPicker', 'calendarBox', 'currentEventsList', 'middlePanel', 'middleTopPanel', 'newsfeedBox', 'aboutBox', 'itfBox', 'middleBottomPanel', 'erangBox', 'scriptArchiveBox', 'bestPracticesBox', 'biblioBox', 'offersNeedsBox', 'surveysBox', 'rightPanel', 'searchBox', 'loginBox', 'previewBox', 'footerPanel']
*/ */
app.$ui = {}; app.$ui = {};
app.$body = $('body');
app.$document = $(document);
app.$window = $(window);
/* /*
Ox.each(app.constructors, function(i, v) { Ox.each(app.constructors, function(i, v) {
app.$ui[v] = app.construct[v](); app.$ui[v] = app.construct[v]();
}); });
*/ */
var wrapper = app.construct.wrapper(data.page); // Ox.print("BOO", data);
app.$body.css({'opacity': 0}); app.api.getPage({}, function(data) {
//FIXME: user handling should be cleaner? var wrapper = app.construct.wrapper(data.data);
if (data.user.level != 'guest') { app.$body.css({'opacity': 0});
ITF.login(data); //FIXME: user handling should be cleaner?
}
wrapper.appendTo(app.$body); wrapper.appendTo(app.$body);
ITF.setSizes(); /*
app.$body.animate({ if (data.user.level != 'guest') {
'opacity': 1 ITF.login(data);
}, 2000); }
*/
/*
app.$window.resize(function() {
ITF.setSizes();
});
ITF.setSizes();
*/
app.$body.animate({
'opacity': 1
}, 2000);
});
}); });

View File

@ -1,38 +1,49 @@
/* /*
*/ */
Ox.ItfPage = function(page, parentPanel) { Ox.ItfPage = function(page, parentPanel) {
var panelItems = []; var panelItems = [];
for (var i=0; i < page.panels.displayed.length; i++) { Ox.print("page", page);
var t = page.panels.displayed[i]; GLOB_PAGE = page;
for (var i=0; i < page.displayed.length; i++) {
var t = page.displayed[i];
var displayed = true; var displayed = true;
var panel = new Ox.ItfPanel(t, displayed); var panel = new Ox.ItfPanel(t, displayed);
panelItems.push(panel); panelItems.push({
'element': panel,
'size': 300
});
} }
var hiddenPanel = new Ox.ItfHiddenPanelContainer(); var hiddenPanel = new Ox.ItfHiddenPanelContainer();
for (var j=0; j < page.panels.hidden.length; j++) { for (var j=0; j < page.hidden.length; j++) {
var t = page.panels.hidden[j]; var t = page.hidden[j];
var displayed = false; var displayed = false;
var panel = new Ox.ItfPanel(t, displayed); var panel = new Ox.ItfPanel(t, displayed);
hiddenPanel.addPanel(panel); hiddenPanel.addPanel(panel);
} }
var that = app.ui['ItfPage'] = new Ox.SplitPanel({ panelItems.push({
'element': hiddenPanel,
'size': 30
});
var that = app.$ui['ItfPage'] = new Ox.SplitPanel({
orientation: 'vertical', orientation: 'vertical',
id: 'ItfPage', id: 'ItfPage',
elements: panelItems elements: panelItems
}); });
return that; return that;
} };
Ox.ItfPanel = function(panelData, displayed) { Ox.ItfPanel = function(panelData, displayed) {
var items = []; var items = [];
var id = panelData.title; var id = "Panel" + panelData.id;
for (var i=0; i < panelData.boxes.length; i++) { for (var i=0; i < panelData.boxes.length; i++) {
var t = panelData.boxes[i]; var t = panelData.boxes[i];
var box = new Ox.ItfBox(t); var box = new Ox.ItfBox(t);
items.push(box); items.push({
'element': box,
'size': 512
});
} }
var that = new Ox.SplitPanel({ var that = new Ox.SplitPanel({
orientation: 'horizontal', orientation: 'horizontal',
@ -40,11 +51,12 @@ Ox.ItfPanel = function(panelData, displayed) {
elements: items elements: items
}); });
that.displayed = displayed; that.displayed = displayed;
return that;
}; };
Ox.HiddenPanelContainer = function() { Ox.ItfHiddenPanelContainer = function() {
return new Ox.Element();
}; };
@ -55,14 +67,14 @@ Ox.ItfBox = function(boxData) {
'id': boxData.itfId, 'id': boxData.itfId,
'title': boxData.title 'title': boxData.title
}; };
var that = app.ui[boxData.itfId] = new Ox.Element(options, self); var that = app.$ui[boxData.itfId] = new Ox.Element(options, self);
var $titlebar = new Ox.Bar({ var $titlebar = new Ox.Bar({
orientation: 'horizontal', orientation: 'horizontal',
size: '24 size: 24
}).appendTo(that); }).appendTo(that);
var $title = new Ox.Element() var $title = new Ox.Element()
.addClass('OxTitle') .addClass('OxTitle')
.html(title) .html(boxData.title)
.appendTo($titlebar); .appendTo($titlebar);
var $buttons = new Ox.Element().appendTo($title).css({'position': 'absolute', 'top': '1px', 'right': '1px'}); var $buttons = new Ox.Element().appendTo($title).css({'position': 'absolute', 'top': '1px', 'right': '1px'});
var boxButtons = Ox.merge(ItfBoxTypes[boxData.type].buttons, boxData.extra_buttons); var boxButtons = Ox.merge(ItfBoxTypes[boxData.type].buttons, boxData.extra_buttons);
@ -70,12 +82,11 @@ Ox.ItfBox = function(boxData) {
var t = boxButtons[i]; var t = boxButtons[i];
var button = new Ox.ItfButton(t, boxData).appendTo($buttons); var button = new Ox.ItfButton(t, boxData).appendTo($buttons);
} }
$content = ItfBoxTypes[boxData.type].render(boxData); $content = ItfBoxTypes[boxData.type].render(boxData);
$content.appendTo(that); $content.appendTo(that);
that.$content = $content; that.$content = $content;
return that; return that;
} };
Ox.ItfButton = function(buttonData, boxData) { Ox.ItfButton = function(buttonData, boxData) {
@ -88,7 +99,7 @@ Ox.ItfButton = function(buttonData, boxData) {
}); });
var that = ItfButtonTypes[buttonData.type](button, buttonData, boxData); var that = ItfButtonTypes[buttonData.type](button, buttonData, boxData);
return that; return that;
} };
Ox.ItfList = function(modelData, boxData, size, self) { Ox.ItfList = function(modelData, boxData, size, self) {
@ -104,7 +115,7 @@ Ox.ItfList = function(modelData, boxData, size, self) {
'scrollbarVisible': true, 'scrollbarVisible': true,
'hasComments': modelData.has_comments || false, 'hasComments': modelData.has_comments || false,
'items': function(data, callback) { 'items': function(data, callback) {
app.api.find(getFindParams(modelData, boxData)); app.api.find(getFindParams(modelData, boxData, data), callback);
}, },
'max': 1, 'max': 1,
'columns': [ 'columns': [
@ -147,13 +158,12 @@ Ox.ItfList = function(modelData, boxData, size, self) {
return that; return that;
function getFindParams(modelData, boxData) { function getFindParams(modelData, boxData, data) {
var box = app.ui[boxData.itfId]; var box = app.$ui[boxData.itfId];
return { data['search'] = '';
'search': '', data['model'] = modelData.model;
'model': modelData.model, data['module'] = modelData.module;
'module': modelData.module return data;
}
} }
} };

View File

@ -123,7 +123,7 @@ BEGIN mainPanel
resize: [0, 128, 256, 384] resize: [0, 128, 256, 384]
}, */ }, */
{ {
element: app.construct.middlePanel() element: app.construct.middlePanel(pageData)
// resizable: true // resizable: true
}, },
{ {

View File

@ -319,7 +319,7 @@ Ox.ItfBox = function(options, self) {
} }
/*
Ox.ItfList = function(options, self) { Ox.ItfList = function(options, self) {
var self = self || {}; var self = self || {};
var opts = $.extend({ var opts = $.extend({
@ -379,6 +379,7 @@ Ox.ItfList = function(options, self) {
}); });
return that; return that;
} }
*/
function _getComments(comments) { function _getComments(comments) {
var that = new Ox.Element().addClass("OxCommentsWrapper") var that = new Ox.Element().addClass("OxCommentsWrapper")

View File

@ -24,6 +24,9 @@ if(typeof(console)=='undefined') {
<script type="text/javascript" src="/static/js/itf/construct.js"></script> <script type="text/javascript" src="/static/js/itf/construct.js"></script>
<script type="text/javascript" src="/static/js/itf/widgets.js"></script> <script type="text/javascript" src="/static/js/itf/widgets.js"></script>
<script type="text/javascript" src="/static/js/itf/forms.js"></script> <script type="text/javascript" src="/static/js/itf/forms.js"></script>
<script type="text/javascript" src="/static/js/itf/boxes.js"></script>
<script type="text/javascript" src="/static/js/itf/box_types.js"></script>
<script type="text/javascript" src="/static/js/itf/button_types.js"></script>
<script type="text/javascript" src="/static/js/bookmyshow.js"></script> <script type="text/javascript" src="/static/js/bookmyshow.js"></script>
</head> </head>
<body></body> <body></body>