some other minor changes from milpeer
[fnpeditor.git] / src / editor / plugins / core / edumed / choice / choiceBase.js
1 define(function(require) {
2     
3 'use strict';
4
5 var $ = require('libs/jquery'),
6     _ = require('libs/underscore'),
7     elementBase = require('plugins/core/edumed/elementBase'),
8     template = require('libs/text!./element.html');
9
10
11 var choiceBase = Object.create(elementBase);
12 _.extend(choiceBase, {
13     init: function() {
14         elementBase.init.call(this);
15         this.view = $(_.template(template)({type: this.type, name: this.name}));
16         this._container().append(this.view);
17
18         this.createContainer(this.wlxmlNode.contents().filter(function(n) {return !n.is('list');}), {
19             resetBackground: true,
20             manages: function(node, removedFrom) {
21                 if(node.is('list.orderable')) {
22                     return false;
23                 }
24                 return this.wlxmlNode.sameNode(node.parent() || removedFrom);
25             }.bind(this),
26             dom: this.view.find('.description')
27         });
28
29         this.wlxmlNode.contents()
30             .filter(function(node) { return node.is('list'); })
31             .some(function(node) {
32                 this.listView = this.createListView(node);
33                 this.view.find('.list').append(this.listView.dom);
34             }.bind(this));
35     },
36     getVerticallyFirstTextElement: function() {
37         var toret;
38         this.containers.some(function(container) {
39             toret = container.getVerticallyFirstTextElement();
40             return !!toret;
41         });
42         return toret;
43     },
44     onNodeAdded: function(event) {
45         var node = event.meta.node;
46         if(this.listView.listNode.sameNode(node.parent()) && node.is('item.answer')) {
47             this.listView.addItem(node);
48         }
49     },
50     onNodeDetached: function(event) {
51         var node = event.meta.node;
52         if(this.listView.listNode.sameNode(event.meta.parent) && node.is('item.answer')) {
53             this.listView.removeItem(node);
54         }
55     }
56 });
57
58 return choiceBase;
59
60 });
61
62