can
Version:
MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.
125 lines (111 loc) • 2.97 kB
HTML
<style>
/* use a class instead of disable the button so mouseover events are fired */
.disabled {
opacity: 0.5;
}
</style>
<div id="demo">
<div id="app"></div>
<script type="text/stache" id="app-template">
<table>
<thead>
<td></td><td>Name</td><td>Email</td>
</thead>
<tbody>
{{#each users}}
<tr>
<td><input ($change)="toggle(.)" type="checkbox"/></td>
<td>{{name}}</td>
<td>{{email}}</td>
</tr>
{{/each}}
</tbody>
<tfoot>
<tr>
<td colspan="3">
<button tooltip="{{deleteTooltip}}"
{{^selected.length}}class="disabled"{{/selected.length}}
($click)="notImplemented()">
Delete
</button>
<button
tooltip="{{archiveTooltip}}"
{{^selected.length}}class="disabled"{{/selected.length}}
($click)="notImplemented()">
Archive
</button>
</td>
</tr>
</tfoot>
</table>
</script>
</div>
<script src="../../node_modules/steal/steal.js" main="@empty">
var stache = require("can-stache");
var canViewCallbacks = require("can-view-callbacks");
var DefineList = require("can-define/list/list");
var DefineMap = require("can-define/map/map");
var domEvents = require("can-util/dom/events/events");
var $ = require("jquery");
require("jquery-ui/ui/widgets/tooltip");
require("jquery-ui/themes/base/all.css");
require("can-stache-bindings");
require("can-util/dom/events/attributes/attributes");
canViewCallbacks.attr("tooltip", function( el, attrData ) {
// A helper that updates or sets up the tooltip
var updateTooltip = function(){
$(el).tooltip({
content: el.getAttribute("tooltip"),
items: "[tooltip]"
})
}
// When the tooltip attribute changes, update the tooltip
domEvents.addEventListener.call(el, "attributes", function(ev){
if(ev.attributeName === "tooltip") {
updateTooltip();
}
});
// Setup the tooltip
updateTooltip();
});
var users = new DefineList([
{ name: "Justin Meyer", email: "justin@bitovi" },
{ name: "Brian Moschel", email: "brian@bitovi" },
{ name: "Bitovi", email: "contact@bitovi" },
])
var selected = new DefineList();
var template = stache( $("#app-template").text() );
$("#app").html( template({
selected: selected,
users: users,
toggle: function(user){
var index = selected.indexOf( user );
if( index >= 0 ) {
selected.splice(index, 1)
} else {
selected.push(user)
}
},
deleteTooltip: function(){
console.log("calling delete", selected.length);
var selectedCount = selected.length
if(selectedCount) {
return "Delete "+selectedCount+" users";
} else {
return "Select users to delete them.";
}
},
archiveTooltip: function(){
var selectedCount = selected.length;
if(selectedCount) {
return "Archive "+selectedCount+" users";
} else {
return "Select users to archive them.";
}
},
notImplemented: function(){
alert("we didn't make this work for this demo")
}
}) );
</script>
<script>DEMO_HTML = document.getElementById("demo").innerHTML</script>