Second Try!
Less Crazy Code
by db_dev
HTML
<script src="//code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.0/umd/popper.min.js"></script>
<script src="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<div class="container">
<div class="row">
<div class="col">
<!-- ko foreach: ChatEntries -->
<div class="chat-entry">
<!-- ko if: $index() === 0 -->
<span class="entry-sender"><img src="https://via.placeholder.com/50" alt=""/></span>
<span class="entry-content" data-bind="html: Content"></span>
<!-- /ko -->
<!-- ko if: $parent.ChatEntries()[$index()-1]-->
<!-- ko if: user !== ($parent.ChatEntries()[$index()-1].user)-->
<span class="entry-sender"><img src="https://via.placeholder.com/50" alt=""/></span>
<span class="entry-content" data-bind="html: Content"></span>
<!-- /ko -->
<!-- ko if: user === ($parent.ChatEntries()[$index()-1].user)-->
<span class="entry-content" data-bind="html: Content"></span>
<!-- /ko -->
<!-- /ko -->
</div>
<!-- /ko -->
</div>
</div>
</div>
CSS
.row {
background: #f8f9fa;
margin-top: 20px;
}
.col {
border: solid 1px #6c757d;
padding: 10px;
}
JavaScript
var viewModel = function() {
var self = this;
self.ChatEntries = ko.observableArray([{
Content: "content 1",
user: "user 1"
}, {
Content: "content 2",
user: "user 1"
}, {
Content: "content 3",
user: "user 2"
}]);
}
ko.applyBindings(new viewModel());