From 38ac196b2f00c1e13a0928cd892384bc296c8a98 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Thu, 6 Feb 2014 23:09:13 +0200 Subject: web client: extract each widget to a dedicated file --- web/widget/checkboxes.js | 78 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 web/widget/checkboxes.js (limited to 'web/widget/checkboxes.js') diff --git a/web/widget/checkboxes.js b/web/widget/checkboxes.js new file mode 100644 index 0000000..a34aced --- /dev/null +++ b/web/widget/checkboxes.js @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2012-2014 Kaarle Ritvanen + * See LICENSE file for license details + */ + +define( + [ + "acf2/dom", + "acf2/statusbar", + "acf2/widget/abstract/inline", + "jquery", + "underscore" + ], + function(dom, statusBar, Base, $, _) { + var Class = Base.extend({ + showStatus: true, + + setStatus: function(status) { + this.super( + Class, + "setStatus", + status == "invalid" ? "invalid" : null + ); + }, + + render: function(data, meta) { + this.dynamic = meta.members.dynamic; + + this.super(Class, "render", data, meta); + + var table = $(""); + this.el.append($("").html(table)); + + var self = this; + + _.each(meta.members.choice, function(choice) { + var selected = _.contains(data.data, choice.value); + if (!(choice.enabled || selected)) return; + + var cbox = $("").attr({ + type: "checkbox", checked: selected + }); + + var row = $(""); + row.append($("
").html(cbox)); + + var item = $(""); + if (choice.ref) + item.html(dom.objectRef(choice.ref) + .text(choice["ui-value"])); + else item.text(choice["ui-value"]); + row.append(item); + + function setRowStatus() { + dom.setStatus(row, data.status(choice.value)); + } + setRowStatus(); + + cbox.change(function() { + ( + cbox.is(":checked") ? + data.add(choice.value) : + data.delete(choice.value) + ).done(function(txnValid) { + self.setStatus(data.status()); + setRowStatus(); + statusBar.validationReady(txnValid); + }); + }); + + table.append(row); + }); + } + }); + + return Class; + } +); -- cgit v1.2.3