Chat Smartlet SXML

Release 1.1 - ...

Smartsite SXML CopyCode image Copy Code
<se:smartlet>
 <se:parameters>
  <se:parameter name="properties"><se:collection>
    <se:member name="allowanonymous" type="boolean" editable="true" callbackaccess="read" clientaccess="read">false</se:member>
    <se:member name="data" callbackaccess="write" clientaccess="read" />
    <se:member name="phrase" callbackaccess="read" clientaccess="readwrite"></se:member>
    <se:member name="sysmsg" type="boolean" callbackaccess="read" clientaccess="readwrite">false</se:member>
    <se:member name="index" type="integer" callbackaccess="readwrite" clientaccess="readwrite">0</se:member>
    <se:member name="legend">Chat Room</se:member>
    <se:member name="refreshinterval" type="integer" >5000</se:member>
    <se:member name="confirmclear" type="boolean" >false</se:member>
    <se:member name="confirmclearmessage" type="string" >Clear the chat window?</se:member>
    <se:member name="joinmessage" type="string">Entered this chat room...</se:member>
    <se:member name="createmessage" type="string">Started new chat...</se:member>
    <se:member name="mode" type="string" clientaccess="write" callbackaccess="read" />
  </se:collection></se:parameter>
  <se:parameter name="xml">
   <se:cache save="key = this.getcachekey()" 
    maxage="00:30:00" resulttype="none" trim="both" keydependencies="{smartlet.id()}">
    <se:placeholder localid="chat" render="false" default="{scope.chat.data()}">
     <se:parameters>
      <se:parameter name="fieldnames"><se:collection>
        <se:member name="Nr" type="integer" primarykey="true" />
        <se:member name="Created" type="datetime" />
        <se:member name="User" type="string" />
        <se:member name="Text" type="string" />
        <se:member name="SystemMsg" type="boolean" />
       </se:collection></se:parameter>
     </se:parameters>
    </se:placeholder>
   </se:cache>
   {buffer.set(chat, cache.get($key))}
   <se:if expression="smartlet.isajaxcallback()">
    <se:then>
     {sys.iif(user.isanonymous() AND !smartlet.get(allowanonymous), sys.throwexception(NotAuthorized, 'You must be logged in to chat.'))}
   
     <se:if expression="string.trim(smartlet.get(phrase, default=''))!=''">
      {datatable.rows.add($chat, datatable.rows.count($chat)+1, 
      datetime.now(), user.fullname(), smartlet.get(phrase), smartlet.get(sysmsg))});
     </se:if>
     {buffer.set(newdata, datatable.search($chat, "Nr " + char.gt() + smartlet.get(index)))} <!--// search for new records -->
     <se:format save="data" inputdata="newdata" whitespace="remove">
      <se:rowformat>
       <div class="{string.concat('Row ', sys.iif(this.field(5), 'SysMsg', ''))}">
        <span class="Added">{locale.formatdatetimecustom(this.field(2), 'HH:mm:ss')}</span>
        <span class="User">{this.field(3)}</span>
        <span class="Text">{this.field(4)}</span>
       </div>
       {smartlet.set(index, this.field(1))}
      </se:rowformat>
      <se:resultformat>
       {smartlet.set(data, this.result())}
      </se:resultformat>
     </se:format>
    </se:then>
    <se:else>
     {buffer.set(count, datatable.rows.count($chat))}
     {buffer.set(firstpost, datatable.findone($chat, "User='" + user.fullname() + "'"))}
     
     {smartlet.behavior.attach(smartlet.idselector(), smartlet.name(Behavior), 
     isAnonymous, scf.clientvar(user.isanonymous()),
     userName, user.fullname(),
     joinMessage, smartlet.get(joinmessage),
     createMessage, smartlet.get(createmessage),
     allowAnonymous, smartlet.get(allowanonymous),
     refreshInterval, smartlet.get(refreshinterval),
     confirmClear, smartlet.get(confirmclear),
     confirmClearMessage, smartlet.get(confirmclearmessage),
     firstPost, $firstpost,
     count, $count
     )}
     <se:smartletbox caption="{smartlet.get(legend)}: {user.fullname()}" innerclass="{smartlet.get(mode)}" trim="both" whitespace="normalize">
      <form action="{smartlet.link()}" class="CoolForm" id="{smartlet.id(form)}" method="post">
       <div>
        
        <label class="Control" for="{smartlet.id(history)}">Conversation</label>
        <div class="Control ChatHistory" id="{smartlet.id(history)}">
         <se:if expression="user.isanonymous() AND !smartlet.get(allowanonymous)">
          You must be logged in to chat...
         </se:if>
        </div>
        <br />
        <label class="Control" for="{smartlet.id(speak)}">Speak up</label>
        <input size="70" class="Control Speak" name="{smartlet.id(speak)}" id="{smartlet.id(speak)}" />
        <br /><label></label>
        <input class="Control Send" type="submit" id="{smartlet.id(send)}" value="Refresh" />
        <input class="Control Clear" type="submit" id="{smartlet.id(clear)}" value="Clear" />
       </div>
      </form>
     </se:smartletbox>
    </se:else>
   </se:if>
  </se:parameter>
 </se:parameters>
</se:smartlet>