Changeset 2112
- Timestamp:
- 07/15/10 14:51:39 (19 months ago)
- Location:
- trunk/loreality
- Files:
-
- 6 edited
-
development.db (modified) (previous)
-
loreality/controllers/messager.py (modified) (2 diffs)
-
loreality/model/databases.py (modified) (2 diffs)
-
loreality/public/style.css (modified) (2 diffs)
-
loreality/templates/base/index.html (modified) (3 diffs)
-
loreality/templates/derived/page/messager.html (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/loreality/loreality/controllers/messager.py
r2111 r2112 14 14 15 15 from authkit.authorize.pylons_adaptors import authorize 16 from pylons.decorators import validate 16 from pylons.decorators import validate,jsonify 17 17 18 18 19 from formencode import htmlfill, variabledecode … … 62 63 def open(self, id): 63 64 return self.index(opened=uuid.UUID(id)) 65 #-------------------------------------------------------------- 66 @jsonify 67 def getallmsgs(self): 68 pilot_q = meta.Session.query(model.Pilot) 69 pilot = pilot_q.filter_by(login=request.environ['REMOTE_USER']).first() 70 if pilot is None: 71 abort(404) 72 73 messages = pilot.messages 74 buf = "" 75 76 for m in messages: 77 buf += "%(date)s#%(from_)s#%(subject)s|"%m.__dict__ 78 if buf: 79 buf = buf[:-1] 80 return buf 81 #-------------------------------------------------------------- 82 def getmsg(self, id): 83 pilot_q = meta.Session.query(model.Pilot) 84 pilot = pilot_q.filter_by(login=request.environ['REMOTE_USER']).first() 85 if pilot is None: 86 abort(404) 87 88 message_q = meta.Session.query(model.Message) 89 message = message_q.filter_by(id=uuid.UUID(id)).first() 90 if message is None: 91 return "Error" 92 93 #- Be sure it is our message 94 if message not in pilot.messages: return "Error" 95 96 if message.unread: 97 pilot.messages_unread -= 1 98 message.unread = False 99 meta.Session.commit() 100 return "%s|%s|%s"% ( str(message.id), message.text, pilot.messages_unread ) 64 101 #-------------------------------------------------------------- 65 102 def delete(self, id): -
trunk/loreality/loreality/model/databases.py
r2111 r2112 125 125 login = sa.Column(sa.types.String, nullable=False) 126 126 squadron_id = sa.Column(UUID(), ForeignKey('squadrons.id')) 127 loobject_id = sa.Column(UUID(), ForeignKey('loobjects.id')) 127 128 128 129 messages = orm.relation("Message", backref="pilot") … … 139 140 if message.unread: 140 141 self.messages_unread += 1 142 #---------------------------------------------------------------- 143 class LoObject(Base): 144 __tablename__ = 'loobjects' 145 id = sa.Column(UUID(), primary_key=True,default=uuid.uuid4) 146 name = sa.Column(sa.types.String, nullable=False) 147 group = sa.Column(sa.types.String, nullable=False) 148 149 latitude = sa.Column(sa.types.Integer, nullable=False) 150 longitude = sa.Column(sa.types.Integer, nullable=False) 151 altitude = sa.Column(sa.types.Integer, nullable=False) 152 heading = sa.Column(sa.types.Integer, nullable=False) -
trunk/loreality/loreality/public/style.css
r2111 r2112 72 72 div.message { 73 73 display: inline; 74 border: solid black 1px;74 /* border: solid black 1px; */ 75 75 width: 80%; 76 background: #AAAAAA;76 /* background: #AAAAAA; */ 77 77 font-size: small; 78 78 } … … 86 86 margin-right: 30px; 87 87 } 88 span.unread a{ 88 span.read{ 89 font-weight: normal; 90 background: #AAAAAA; 91 } 92 span.unread{ 89 93 font-weight: bold; 90 background: #ffffff; 94 color: #aa1111; 95 background: #ffffff; 91 96 } 92 97 div.message_open{ -
trunk/loreality/loreality/templates/base/index.html
r2111 r2112 12 12 ${ h.stylesheet_link( '/style.css') } 13 13 ${ h.javascript_link( '/dojo/dojo/dojo.js', djConfig="parseOnLoad: true") } 14 <script type="text/javascript"> 15 // Load Dojo's code relating to the Button widget 16 dojo.require("dijit.form.Button"); 17 dojo.require("dojo.fx"); 18 dojo.require("dojo.html"); 19 </script> 20 14 21 <title>${self.title()}</title> 15 22 ${self.head()} … … 24 31 % if h.auth.authorized(h.auth.is_valid_user) and not (request.urlvars['controller'] == 'account' and request.urlvars['action'] == 'signout'): 25 32 <div id="message_box"> 26 You have <a href="${h.url_for(controller='messager', action='index')}">${ h.msg.nb_messages(request.environ['REMOTE_USER'])} new messages</a>.33 You have <a href="${h.url_for(controller='messager', action='index')}">${self.messages_unread()} new messages</a>. 27 34 </div> 28 35 % endif … … 63 70 % endif 64 71 </%def> 72 73 <%def name="messages_unread()"> 74 <span id="nb_msg_unread">${h.msg.nb_messages(request.environ['REMOTE_USER'])}</span> 75 </%def> -
trunk/loreality/loreality/templates/derived/page/messager.html
r2111 r2112 1 1 <%inherit file="/base/index.html"/> 2 3 <script> 4 /*-------------------------------------*/ 5 function showMessage(data,ioArgs) { 6 if( data == "Error"){ 7 alert("Error"); 8 }else{ 9 d = data.split('|'); 10 dojo.fx.wipeIn({ 11 node:"message-" + d[0], 12 beforeBegin: function(n){ 13 dojo.byId("message-txt-"+d[0]).innerHTML = d[1]; 14 } 15 }).play(); 16 dojo.byId( "nb_msg_unread").innerHTML = d[2]; 17 } 18 19 } 20 /*-------------------------------------*/ 21 function helloError(data, ioArgs) { 22 alert('Error when retrieving data from the server!'); 23 } 24 /*-------------------------------------*/ 25 function loadMsg() { 26 dojo.empty("message_table"); 27 dojo.xhrGet({ 28 url: '${h.url_for(controller='messager', action='getallmsgs') }', 29 load: fillMessages, 30 error: helloError, 31 }).play(); 32 } 33 dojo.addOnLoad( loadMsg ); 34 /*-------------------------------------*/ 35 function fillMessages(data,ioArgs) { 36 if( data == "Error"){ 37 alert("Error"); 38 }else{ 39 var buffer = ""; 40 messages = data.split("|"); 41 for (i = 0; i < messages.length; i += 1) { 42 buffer += "<tr>"; 43 elements = messages[i].split("#"); 44 for (n = 0; n < elements.length; n += 1 ){ 45 buffer += "<td>" + elements[n] + "</td>" 46 } 47 buffer += "</tr>"; 48 } 49 dojo.html.set("message_table", buffer); 50 51 } 52 } 53 </script> 2 54 3 55 <h2>Messager</h2> 4 56 % for message in c.messages: 5 % if message.id == c.message_open:6 <div class="message_open">7 % else:8 57 <div class="message"> 9 % endif10 58 <a href=${h.url_for(controller='messager', action='delete',id=message.id) } class="action">[Delete]</a> 11 % if message.id == c.message_open: 12 <span><a href=${h.url_for(controller='messager', action='index',id=message.id) } class="action">${h.msg.get_from(message)} | ${message.date.strftime("%c")} <span id="subject">${message.subject}</span></a></span> 13 <div id="text">${h.literal(message.text)}</div> 14 <a href=${h.url_for(controller='messager', action='create',id=message.id) } class="action">[Reply]</a> 15 % else: 16 % if message.unread: 17 <span class="unread"><a href=${h.url_for(controller='messager', action='open',id=message.id) } class="action">${h.msg.get_from(message)} | ${message.date.strftime("%c")} | <span id="subject"> ${message.subject}</span></a></span> 18 %else: 19 <span><a href=${h.url_for(controller='messager', action='open',id=message.id) } class="action">${h.msg.get_from(message)} | ${message.date.strftime("%c")} | <span id="subject"> ${message.subject}</span></a></span> 20 % endif 21 % endif 59 <button dojoType="dijit.form.ToggleButton"> 60 <span 61 %if message.unread: 62 class="unread" 63 %else: 64 class="read" 65 %endif 66 id="span-${message.id}" >${h.msg.get_from(message)} | ${message.date.strftime("%c")} | <span id="subject"> ${message.subject}</span></span> 67 68 <script type="dojo/method" event="onChange"> 69 node = "span-${message.id}"; 70 if( this.checked ) 71 { 72 if( dojo.hasClass( node, "unread") ) 73 { 74 dojo.removeClass( node, "unread"); 75 dojo.addClass( node, "read"); 76 } 77 dojo.xhrGet({ 78 url: '${h.url_for(controller='messager', action='getmsg',id=message.id) }', 79 load: showMessage, 80 error: helloError, 81 }).play(); 82 }else{ 83 dojo.fx.wipeOut({ 84 node:"message-${message.id}", 85 }).play(); 86 } 87 </script> 88 </button> 22 89 </div> 90 <div id="message-${message.id}" class='message_open' style="display: none;"> 91 <button dojoType="dijit.form.Button">Reply 92 <script type="dojo/method" event="onClick"> 93 </script> 94 </button> 95 <p id="message-txt-${message.id}"></p> 96 </div> 23 97 <br/> 24 98 % endfor 25 99 <h2>New one</h2> 100 <div id="message_list"> 101 <table id="message_table"> 102 </table> 103 </div> 26 104 <a href=${h.url_for(controller='messager', action='create', id=None)}>[New message]</a> 27 105
Note: See TracChangeset
for help on using the changeset viewer.
