msn-viewer/src/xsl/MessageLog.xsl

138 lines
4.3 KiB
XML

<?xml version="1.0"?>
<!--
This XSLT file is based on the default XSL stylesheet generated by MSN
Messenger, and unlike the rest of the application, is probably(?) not
covered under the AGPL.
The file was originally retrieved from this project:
https://github.com/jerecui/MSNChatHistoryCombiner
-->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- localized strings -->
<xsl:variable name='ColumnHeader_Date'>Date</xsl:variable>
<xsl:variable name='ColumnHeader_Time'>Time</xsl:variable>
<xsl:variable name='ColumnHeader_From'>From</xsl:variable>
<xsl:variable name='ColumnHeader_Message'>Message</xsl:variable>
<!-- variables -->
<xsl:variable name='UseZebraStripe'>1</xsl:variable>
<xsl:variable name='ZebraStripeClass'>session-stripe</xsl:variable>
<xsl:variable name='MostRecentSessionFirst'>0</xsl:variable>
<xsl:template match="Log">
<table id='BodyTable' class="table border">
<thead>
<tr>
<th class="d-lg-none message-mobile-date-time">
<!-- for mobile date/time -->
</th>
<th class="d-none d-lg-table-cell">
<xsl:value-of select="$ColumnHeader_Date"/>
</th>
<th class="d-none d-lg-table-cell border-end">
<xsl:value-of select="$ColumnHeader_Time"/>
</th>
<th>
<xsl:value-of select="$ColumnHeader_From"/>
</th>
<th>
<xsl:value-of select="$ColumnHeader_Message"/>
</th>
</tr>
</thead>
<tbody class="table-group-divider">
<xsl:choose>
<!-- newest session first -->
<xsl:when test="$MostRecentSessionFirst = 1">
<xsl:apply-templates>
<xsl:sort select='@SessionID' order='descending' data-type='number'/>
<xsl:sort select='@DateTime' order='ascending'/>
</xsl:apply-templates>
</xsl:when>
<!-- oldest session first -->
<xsl:otherwise>
<xsl:apply-templates>
<xsl:sort select='@SessionID' order='ascending' data-type='number'/>
<xsl:sort select='@DateTime' order='ascending'/>
</xsl:apply-templates>
</xsl:otherwise>
</xsl:choose>
</tbody>
</table>
</xsl:template>
<xsl:template match="Message">
<tr>
<xsl:call-template name="CommonMessageProcessing" />
<td class="message-from-user" ><xsl:apply-templates select="From/User"/> </td>
<td class="message-content">
<div class="overflow-auto">
<xsl:value-of select="Text"/>
</div>
</td>
</tr>
</xsl:template>
<xsl:template match="Invitation|InvitationResponse|Join|Leave">
<tr>
<xsl:call-template name="CommonMessageProcessing" />
<td>
<span>
<xsl:value-of select="Text"/>
</span>
</td>
</tr>
</xsl:template>
<xsl:template match="From/User">
<a class="info-popover" href="javascript:void(0);" tabindex="0"
data-bs-trigger="focus"
data-bs-container="body" data-bs-toggle="popover"
data-bs-placement="bottom" data-bs-title="Username">
<xsl:attribute name="data-bs-content">
<xsl:value-of select="@FriendlyName"/>
</xsl:attribute>
<xsl:value-of select="@FriendlyName"/>
</a>
</xsl:template>
<xsl:template name="CommonMessageProcessing">
<!-- zebra-stripe the sessions -->
<xsl:if test="$UseZebraStripe = 1">
<xsl:if test="(@SessionID mod 2) = 1">
<xsl:attribute name="class">
<xsl:value-of select="$ZebraStripeClass"/>
</xsl:attribute>
</xsl:if>
</xsl:if>
<!-- mobile shows a popover span for date/time -->
<td class="d-lg-none message-mobile-date-time">
<a class="info-popover" href="javascript:void(0);" tabindex="0"
data-bs-trigger="focus"
data-bs-container="body" data-bs-toggle="popover"
data-bs-placement="right" data-bs-title="Date/Time">
<xsl:attribute name="data-bs-content">
<xsl:value-of select="@Date"/>&#160;<xsl:value-of select="@Time"/>
</xsl:attribute>
<i class="bi bi-clock"></i>
</a>
</td>
<td class="d-none d-lg-table-cell message-date"> <xsl:value-of select="@Date"/> </td>
<td class="d-none d-lg-table-cell message-time border-end"> <xsl:value-of select="@Time"/> </td>
</xsl:template>
</xsl:stylesheet>