smartxml: fix DocumentNode.parent
[fnpeditor.git] / src / editor / modules / documentCanvas / classAttributes.js
1 define([], function() {
2     
3 'use strict';
4
5 var wlxmlDict = {
6     'uri': {
7         'uri': 'string'
8     }
9 };
10
11 var hasMetaAttr = function(klass, attrName, dict) {
12     dict = dict || wlxmlDict;
13     if(!klass)
14         return false;
15
16     var parts = klass.split('.');
17     var partialClass = '';
18     for(var i = 0; i < parts.length; i++) {
19         partialClass += (partialClass === '' ? '' : '.') + parts[i];
20         if(dict[partialClass] && dict[partialClass][attrName])
21             return true;
22     }
23     return false;
24 };
25
26 var getMetaAttrsList = function(klass, dict) {
27     dict = dict || wlxmlDict;
28     klass = klass || '';
29
30     var toret = {own: [], inheritedFrom: {}, all: []};
31     var parts = klass.split('.');
32     var partialClass = '';
33     
34     var generate = function(klass) {
35         var toret = [],
36             desc = dict[klass];
37
38         if(!desc)
39             return toret;
40         
41         _.keys(desc).forEach(function(key) {
42             toret.push({name: key, type: desc[key]});
43         });
44         return toret;
45     };
46
47     toret.own = generate(klass);
48     for(var i = 0; i < parts.length; i++) {
49         partialClass += (partialClass === '' ? '' : '.') + parts[i];
50         var list = generate(partialClass);
51         if(list.length > 0) {
52             toret.inheritedFrom[partialClass] = generate(partialClass);
53             toret.all = toret.all.concat(toret.inheritedFrom[partialClass]);
54         }
55     }
56     return toret;
57 };
58
59 return {
60     hasMetaAttr: hasMetaAttr,
61     getMetaAttrsList: getMetaAttrsList
62 };
63
64 });