wip: experiments with Canvas support for exercise.assign
[fnpeditor.git] / src / editor / plugins / core / edumed / assign / element.js
1 define(function(require) {
2     
3 'use strict';
4
5
6 var _ = require('libs/underscore');
7
8 var elementBase = require('plugins/core/edumed/elementBase'),
9     AssignExerciseView = require('./view');
10
11 var AssignExerciseElement = Object.create(elementBase);
12 _.extend(AssignExerciseElement, {
13     init: function() {
14         elementBase.init.call(this);
15         
16         this.view = new AssignExerciseView(this, this.wlxmlNode);
17         this._container().append(this.view.dom);
18
19         this.view.on('assignmentAdded', function() {
20
21         }.bind(this));
22
23         this.view.on('assignmentRemoved', function() {
24
25         }.bind(this));
26
27
28         var exerciseNode = this.wlxmlNode;
29         this.createContainer(this.wlxmlNode.object.getDescription(), {
30             resetBackground: true,
31             manages: function(node, removedFrom) {
32                 if(exerciseNode.object.isList(node) || (removedFrom && exerciseNode.object.isList(removedFrom))) {
33                     return false;
34                 }
35                 return exerciseNode.sameNode(node.parent() || removedFrom); 
36             }.bind(),
37             dom: this.view.dom.find('.description')
38         });
39
40         this.reloadView();
41     },
42     onNodeAdded: function(event) {
43         var node = event.meta.node;
44         if(this.wlxmlNode.object.isItemNode(node)) {
45             this.reloadView();
46         }
47     },
48     onNodeAttrChange: function(event) {
49         void(event);
50     },
51     onNodeDetached: function(event) {
52         if(this.wlxmlNode.object.isItemNode(event.meta.node, event.meta.parent)) {
53             this.reloadView();
54         }
55     },
56     reloadView: function() {
57         this.view.clearItems();
58         this.wlxmlNode.object.getSourceItems().forEach(function(item) {
59             this.view.addSourceItem(item);
60         }.bind(this));
61         this.wlxmlNode.object.getDestinationItems().forEach(function(item) {
62             this.view.addDestinationItem(item);
63         }.bind(this));
64     },
65     getVerticallyFirstTextElement: function() {
66         var toret;
67         this.containers.some(function(container) {
68             toret = container.getVerticallyFirstTextElement();
69             return !!toret;
70         });
71         return toret;
72     }
73 });
74
75 return {tag: 'div', klass: 'exercise.assign', prototype: AssignExerciseElement};
76
77 });