package ; import Common; import js.JQuery; /** * * Tag products with categories * * @author fbarbut */ @:keep class Tagger { var contractId : Int; var data:TaggerInfos; var pids : Array; //selected product Ids public function new(cid:Int) { contractId = cid; pids = []; } public function init() { var req = new haxe.Http("/product/categorizeInit/"+contractId); req.onData = function(_data) { data = haxe.Json.parse(_data); render(); } req.request(); } function render() { var html = new StringBuf(); html.add(""); for (p in data.products) { html.add(""); var checked = Lambda.has(pids,p.product.id) ? "checked" : ""; html.add(''); html.add(""); var tags = []; //trace('product tags ${p.categories} from tags ${data.categories}'); for (c in p.categories) { //trouve le nom du tag var name = ""; var color = ""; for (gc in data.categories) { for ( t in gc.tags) { if (c == t.id) { name = t.name; color = gc.color; break; } } } //var bt = App.jq("[X]") tags.push(""+name+""); } html.add(""); html.add(""); } html.add("
" + p.product.name+""+ tags.join(" ") +"
"); App.jq("#tagger").html(html.toString()); App.jq("#tagger .tag").click(function(e) { var el : js.html.Element = cast e.currentTarget; //find tag Id var tid = Std.parseInt(el.getAttribute('class').split(" ")[1].substr(1)); //find product Id var pid = Std.parseInt(el.parentElement.parentElement.getAttribute('class').substr(1)); //remove element el.remove(); //datas remove(tid,pid); }); } public function add() { var tagId = Std.parseInt(App.jq("#tag").val()); if (tagId == 0) js.Browser.alert("Impossible de trouver la catégorie selectionnée"); pids = []; for ( e in App.jq("#tagger input:checked").elements() ) { pids.push(Std.parseInt(e.attr("name").substr(1))); } if (pids.length == 0) js.Browser.alert("Sélectionnez un produit afin de pouvoir lui attribuer une catégorie"); for (p in pids) { addTag(tagId, p); } render(); } public function remove(tagId:Int,productId:Int) { //data for ( p in data.products) { if (p.product.id == productId) { for ( t in p.categories) { if (t == tagId) p.categories.remove(t); } } } } function addTag(tagId:Int, productId:Int) { //check for doubles for ( p in data.products) { if (p.product.id == productId) { for (t in p.categories) { if (t == tagId) return; } } } //data for ( p in data.products) { if (p.product.id == productId) { p.categories.push(tagId); break; } } } public function submit() { var req = new haxe.Http("/product/categorizeSubmit/" + contractId); req.addParameter("data", haxe.Json.stringify(data)); req.onData = function(_data) { js.Browser.alert(_data); } req.request(true); } }