TODO: Refactor it out of documentToolbar module, use some kind of
more generalized mechanism.
define(['libs/jquery', 'libs/underscore', 'utils/wlxml', 'libs/text!./template.html'], function($, _, wlxmlUtils, template) {
'use strict';
define(['libs/jquery', 'libs/underscore', 'utils/wlxml', 'libs/text!./template.html'], function($, _, wlxmlUtils, template) {
'use strict';
return function(sandbox) {
return function(sandbox) {
+ var documentTemplates = sandbox.getBootstrappedData(),
+ currentNode;
+
- node: $(_.template(template)({tagNames: wlxmlUtils.wlxmlTagNames, classNames: wlxmlUtils.wlxmlClassNames})),
+ node: $(_.template(template)({tagNames: wlxmlUtils.wlxmlTagNames, classNames: wlxmlUtils.wlxmlClassNames, templates: documentTemplates})),
setup: function() {
var view = this;
this.node.find('button').click(function(e) {
e.stopPropagation();
setup: function() {
var view = this;
this.node.find('button').click(function(e) {
e.stopPropagation();
var btn = $(e.currentTarget),
btnName = btn.attr('data-name'),
meta = btn.attr('data-meta'),
params = {},
command = btnName;
var btn = $(e.currentTarget),
btnName = btn.attr('data-name'),
meta = btn.attr('data-meta'),
params = {},
command = btnName;
- if(btn.attr('data-btn-type') === 'toggle') {
- command = 'toggle-' + command;
- btn.toggleClass('active');
- params.toggle = btn.hasClass('active');
- }
+ if(myHandlers[btnName]) {
+ myHandlers[btnName](btn);
+ } else {
+ if(btn.attr('data-btn-type') === 'toggle') {
+ command = 'toggle-' + command;
+ btn.toggleClass('active');
+ params.toggle = btn.hasClass('active');
+ }
- if(btnName === 'new-node') {
- command = 'newNodeRequested';
- params.wlxmlTag = view.getOption('newTag-tag');
- params.wlxmlClass = view.getOption('newTag-class');
- if(meta) {
- var split = meta.split('/');
- params.wlxmlTag = split[0];
- params.wlxmlClass = split[1];
+ if(btnName === 'new-node') {
+ command = 'newNodeRequested';
+ params.wlxmlTag = view.getOption('newTag-tag');
+ params.wlxmlClass = view.getOption('newTag-class');
+ if(meta) {
+ var split = meta.split('/');
+ params.wlxmlTag = split[0];
+ params.wlxmlClass = split[1];
+ }
+ } else {
+ params.meta = meta;
- } else {
- params.meta = meta;
- }
- if(command === 'undo' || command === 'redo') {
- params.callback = function(disable) {
- btn.attr('disabled', !disable);
- };
- }
+ if(command === 'undo' || command === 'redo') {
+ params.callback = function(disable) {
+ btn.attr('disabled', !disable);
+ };
+ }
- sandbox.publish('command', command, params);
+ sandbox.publish('command', command, params);
+ }
});
},
getOption: function(option) {
});
},
getOption: function(option) {
+ var myHandlers = {
+ templatesBtn: function() {
+ if(currentNode && currentNode.nodeType === Node.ELEMENT_NODE) {
+ var templateId = parseInt(view.node.find('[data-name=templates-select]').val(), 10);
+ documentTemplates.forEach(function(template) {
+ if(template.id === templateId) {
+ var toAdd = currentNode.document.createDocumentNode(template.content);
+ currentNode.after(toAdd);
+ }
+ });
+ }
+ }
+ };
+
view.setup();
return {
start: function() { sandbox.publish('ready'); },
getView: function() { return view.node; },
view.setup();
return {
start: function() { sandbox.publish('ready'); },
getView: function() { return view.node; },
+ setNodeElement: function(node) {
+ currentNode = node;
+ },
getOption: function(option) { return view.getOption(option); }
};
};
getOption: function(option) { return view.getOption(option); }
};
};
<button data-name="grid" data-btn-type="toggle" class="btn btn-mini"><i class="icon-th-large"></i></button>
</div>
<button data-name="grid" data-btn-type="toggle" class="btn btn-mini"><i class="icon-th-large"></i></button>
</div>
+ <% if(templates) { %>
+ <div class="rng-module-documentToolbar-toolbarGroup">
+ <select data-name="templates-select">
+ <% templates.forEach(function(template) { %>
+ <option value="<%= template.id %>"><%= template.name %></option>
+ <% }); %>
+ </select>
+ <button class="btn btn-mini" data-name="templatesBtn">+</button>
+ </div>
+ <% } %>
+
<div style="clear: both;"></div>
</div>
\ No newline at end of file
<div style="clear: both;"></div>
</div>
\ No newline at end of file
sandbox.getModule('nodePane').setNodeElement(nodeElement);
sandbox.getModule('nodeFamilyTree').setElement(nodeElement);
sandbox.getModule('nodeBreadCrumbs').setNodeElement(nodeElement);
sandbox.getModule('nodePane').setNodeElement(nodeElement);
sandbox.getModule('nodeFamilyTree').setElement(nodeElement);
sandbox.getModule('nodeBreadCrumbs').setNodeElement(nodeElement);
+ sandbox.getModule('documentToolbar').setNodeElement(nodeElement);
},
updateCurrentTextElement: function(textElement) {
sandbox.getModule('nodeFamilyTree').setElement(textElement);
},
updateCurrentTextElement: function(textElement) {
sandbox.getModule('nodeFamilyTree').setElement(textElement);