widl-nan
Version:
Auto generate native C++ addon source code by parsing Web IDL definition
77 lines (67 loc) • 2.13 kB
Plain Text
{{#def.idlType}}
{{#def.members}}
{{
var getCallbackHelperClassName = function (className) {
return className + 'Helper';
};
var extractAllCallbackMethod = function (def) {
var result = {
callbacks: {},
callbacksArray: [],
methods: []
};
getAllMethodMembers(def).forEach(method => {
if (method.arguments) {
method.arguments.forEach(arg => {
if (! isPrimitiveType(arg.idlType)) {
var type = arg.idlType.idlType;
if (def.refTypeMap[type]) {
var callback = def.refTypeMap[type];
if (callback.type === 'callback') {
result.methods.push(method);
result.callbacks[callback.name] = callback;
result.callbacksArray.push(callback);
}
}
}
});
}
});
return result;
};
var isCallback = function (idlType, callback) {
var retValue = false;
var typeName = idlType.idlType;
if (callback && callback.callbacks && callback.callbacks[typeName] && callback.callbacks[typeName].type === 'callback') {
retValue = true;
}
return retValue;
};
var getCallbackHelperAssignmentString = function(method, padding) {
padding = padding || '';
var callback = extractAllCallbackMethod(it);
var returnList = [];
if ( method.arguments ) {
method.arguments.forEach(arg => {
if (isCallback(arg.idlType, callback)) {
if (returnList.length == 0) {
returnList.push('// TODO(widl-nan): Use a collection if want to hold multiple callbacks');
}
var helperClassName = getCallbackHelperClassName(arg.idlType.idlType);
var str = 'this->';
str += classNameToMemberName(helperClassName);
str += '.reset(';
str += arg.name;
str += ');';
returnList.push(str);
str = '// TODO(widl-nan): use this->';
str += 'Call' + helperClassName + '()';
returnList.push(str);
str = '// to call JavaScript callback function in the future (Do NOT do it a thread)';
returnList.push(str);
}
});
}
return returnList.join('\n' + padding);
};
}}