X-Git-Url: https://git.mdrn.pl/fnpeditor.git/blobdiff_plain/c833dec45110d8cb85cdf63813a17b1c27516552..3dfe15d50b60598341b9754876db4a48162c5cd0:/src/editor/plugins/core/edumed/replace/element.js diff --git a/src/editor/plugins/core/edumed/replace/element.js b/src/editor/plugins/core/edumed/replace/element.js new file mode 100644 index 0000000..3f12f26 --- /dev/null +++ b/src/editor/plugins/core/edumed/replace/element.js @@ -0,0 +1,86 @@ +define(function(require) { + +'use strict'; + + +var $ = require('libs/jquery'), + _ = require('libs/underscore'), + documentElement = require('modules/documentCanvas/canvas/documentElement'), + genericElement = require('modules/documentCanvas/canvas/genericElement'), + viewTemplate = require('libs/text!./view.html'), + tipTemplate = require('libs/text!./tip.html'); + +var AnswerElement = Object.create(genericElement); +_.extend(AnswerElement, { + init: function() { + genericElement.init.call(this); + this.tip = $(tipTemplate); + this.tip.text(this.wlxmlNode.getAttr('answer') || ''); + this.tip.on('click', function(e) { + var doc = this.wlxmlNode.document, + textNode = this.wlxmlNode.contents()[0]; + e.preventDefault(); + e.stopPropagation(); + + if(textNode) { + this.canvas.select(doc.createFragment(doc.CaretFragment, {node:textNode, offset: textNode.getText().length})); + this.canvas.showContextMenu(this, {x: e.clientX, y: e.clientY}); + } + }.bind(this)); + this.addWidget(this.tip); + }, + onNodeAttrChange: function(event) { + if(event.meta.attr === 'answer') { + this.tip.text(event.meta.newVal || ''); + } + } +}); + +var ReplaceExerciseElement = Object.create(documentElement.DocumentNodeElement.prototype); +_.extend(ReplaceExerciseElement, { + init: function() { + documentElement.DocumentNodeElement.prototype.init.call(this); + var view = $(_.template(viewTemplate)()); + this._container().append(view); + + + this.elementsRegister.register( + {tag: 'span', klass: 'answer', prototype: AnswerElement} + ); + + this.createContainer(this.wlxmlNode.contents(), { + manages: function() { + return true; + }, + dom: view.find('.content') + }); + + this.addToContextMenu('core.markToReplace'); + this.contextMenuActions[0].on('actionExecuted', function(ret) { + if(ret instanceof this.wlxmlNode.document.Fragment && ret.isValid()) { + this.canvas.select(ret); + } + }.bind(this)); + this.addToContextMenu('core.editReplaceMark'); + this.addToContextMenu('core.removeReplaceMark'); + + }, + getVerticallyFirstTextElement: function() { + var toret; + this.containers.some(function(container) { + toret = container.getVerticallyFirstTextElement(); + return !!toret; + }); + return toret; + } +}); + +return {tag: 'div', klass: 'exercise.replace', prototype: ReplaceExerciseElement}; + +}); + + + + + +