Changeset 2112


Ignore:
Timestamp:
07/15/10 14:51:39 (19 months ago)
Author:
dart
Message:

LoReality?:
o AJAX work for message

Location:
trunk/loreality
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/loreality/loreality/controllers/messager.py

    r2111 r2112  
    1414 
    1515from authkit.authorize.pylons_adaptors import authorize 
    16 from pylons.decorators import validate 
     16from pylons.decorators import validate,jsonify 
     17 
    1718 
    1819from formencode import htmlfill, variabledecode 
     
    6263    def open(self, id): 
    6364        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 ) 
    64101    #-------------------------------------------------------------- 
    65102    def delete(self, id): 
  • trunk/loreality/loreality/model/databases.py

    r2111 r2112  
    125125    login = sa.Column(sa.types.String, nullable=False) 
    126126    squadron_id = sa.Column(UUID(), ForeignKey('squadrons.id')) 
     127    loobject_id = sa.Column(UUID(), ForeignKey('loobjects.id')) 
    127128 
    128129    messages = orm.relation("Message", backref="pilot") 
     
    139140        if message.unread: 
    140141            self.messages_unread += 1 
     142#---------------------------------------------------------------- 
     143class 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  
    7272div.message { 
    7373 display: inline; 
    74  border: solid black 1px; 
     74 /* border: solid black 1px; */ 
    7575 width: 80%; 
    76  background: #AAAAAA; 
     76 /* background: #AAAAAA; */ 
    7777 font-size: small; 
    7878} 
     
    8686    margin-right: 30px; 
    8787} 
    88 span.unread a{ 
     88span.read{ 
     89    font-weight: normal; 
     90    background: #AAAAAA; 
     91} 
     92span.unread{ 
    8993    font-weight: bold; 
    90      background: #ffffff; 
     94    color: #aa1111; 
     95    background: #ffffff; 
    9196} 
    9297div.message_open{ 
  • trunk/loreality/loreality/templates/base/index.html

    r2111 r2112  
    1212${ h.stylesheet_link( '/style.css') } 
    1313${ 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 
    1421    <title>${self.title()}</title> 
    1522    ${self.head()} 
     
    2431                % if h.auth.authorized(h.auth.is_valid_user) and not (request.urlvars['controller'] == 'account' and request.urlvars['action'] == 'signout'): 
    2532            <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>. 
    2734            </div> 
    2835                % endif 
     
    6370    % endif 
    6471</%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  
    11<%inherit file="/base/index.html"/> 
     2 
     3<script> 
     4/*-------------------------------------*/ 
     5function 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/*-------------------------------------*/ 
     21function helloError(data, ioArgs) { 
     22    alert('Error when retrieving data from the server!'); 
     23} 
     24/*-------------------------------------*/ 
     25function 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} 
     33dojo.addOnLoad( loadMsg ); 
     34/*-------------------------------------*/ 
     35function 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> 
    254 
    355<h2>Messager</h2> 
    456% for message in c.messages: 
    5 % if message.id == c.message_open: 
    6 <div class="message_open"> 
    7 % else: 
    857<div class="message"> 
    9 % endif 
    1058    <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> 
    2289</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> 
    2397<br/> 
    2498% endfor 
    25  
     99<h2>New one</h2> 
     100<div id="message_list"> 
     101    <table id="message_table"> 
     102    </table> 
     103</div> 
    26104<a href=${h.url_for(controller='messager', action='create', id=None)}>[New message]</a> 
    27105 
Note: See TracChangeset for help on using the changeset viewer.