2f3ee89d02
Changes to JS API: - popups have backdrop and is centered - plugin.popup() takes a string custom element name - plugin.popup() returns an API for closing and reopening the popup - plugin.deprecated.popup() takes Element (similar to GWT Plugin JS API) Recommended usage: ``` js Gerrit.install(function(plugin) { const popup = plugin.popup('my-plugin-popup-simple');; // ... work popup.close(); // ... more work popup.open(); }); ``` ``` html <dom-module id="my-plugin-popup-simple"> <template> <div>popup popup popup popup popup </div> </template> <script> Polymer({is: 'my-plugin-popup-simple'}); </script> </dom-module> ``` Change-Id: Icb3f83d35f3c60915f12b77bc8a7d548d50d5695
108 lines
2.6 KiB
JavaScript
108 lines
2.6 KiB
JavaScript
const fs = require('fs');
|
|
const twinkie = require('fried-twinkie');
|
|
|
|
/**
|
|
* For the purposes of template type checking, externs should be added for
|
|
* anything set on the window object. Note that sub-properties of these
|
|
* declared properties are considered something separate.
|
|
*
|
|
* @todo (beckysiegel) Gerrit's class definitions should be recognized in
|
|
* closure types.
|
|
*/
|
|
const EXTERN_NAMES = [
|
|
'Gerrit',
|
|
'GrAnnotation',
|
|
'GrAttributeHelper',
|
|
'GrChangeActionsInterface',
|
|
'GrChangeReplyInterface',
|
|
'GrDiffBuilder',
|
|
'GrDiffBuilderImage',
|
|
'GrDiffBuilderSideBySide',
|
|
'GrDiffBuilderUnified',
|
|
'GrDiffGroup',
|
|
'GrDiffLine',
|
|
'GrDomHooks',
|
|
'GrEtagDecorator',
|
|
'GrGapiAuth',
|
|
'GrGerritAuth',
|
|
'GrLinkTextParser',
|
|
'GrPluginEndpoints',
|
|
'GrPopupInterface',
|
|
'GrRangeNormalizer',
|
|
'GrReporting',
|
|
'GrReviewerUpdatesParser',
|
|
'GrThemeApi',
|
|
'moment',
|
|
'page',
|
|
'util',
|
|
];
|
|
|
|
fs.readdir('./polygerrit-ui/temp/behaviors/', (err, data) => {
|
|
if (err) {
|
|
console.log('error /polygerrit-ui/temp/behaviors/ directory');
|
|
}
|
|
const behaviors = data;
|
|
const externs = [];
|
|
|
|
for (const behavior of behaviors) {
|
|
externs.push({
|
|
path: `./polygerrit-ui/temp/behaviors/${behavior}`,
|
|
src: fs.readFileSync(
|
|
`./polygerrit-ui/temp/behaviors/${behavior}`, 'utf-8'),
|
|
});
|
|
}
|
|
|
|
let mappings = JSON.parse(fs.readFileSync(
|
|
`./polygerrit-ui/temp/map.json`, 'utf-8'));
|
|
|
|
// The directory is passed as arg2 by the test target.
|
|
const directory = process.argv[2];
|
|
if (directory) {
|
|
const mappingSpecificDirectory = {};
|
|
|
|
for (key of Object.keys(mappings)) {
|
|
if (directory === mappings[key].directory) {
|
|
mappingSpecificDirectory[key] = mappings[key];
|
|
}
|
|
}
|
|
mappings = mappingSpecificDirectory;
|
|
}
|
|
|
|
// If a particular file was passed by the user, don't test everything.
|
|
const file = process.argv[3];
|
|
if (file) {
|
|
const mappingSpecificFile = {};
|
|
for (key of Object.keys(mappings)) {
|
|
if (key.includes(file)) {
|
|
mappingSpecificFile[key] = mappings[key];
|
|
}
|
|
}
|
|
mappings = mappingSpecificFile;
|
|
}
|
|
|
|
externs.push({
|
|
path: 'custom-externs.js',
|
|
src: '/** @externs */' +
|
|
EXTERN_NAMES.map( name => { return `var ${name};`; }).join(' '),
|
|
});
|
|
|
|
const promises = [];
|
|
|
|
for (key of Object.keys(mappings)) {
|
|
if (mappings[key].html && mappings[key].js) {
|
|
promises.push(twinkie.checkTemplate(
|
|
mappings[key].html,
|
|
mappings[key].js,
|
|
'polygerrit.' + mappings[key].package,
|
|
externs
|
|
));
|
|
}
|
|
}
|
|
|
|
Promise.all(promises).then(() => {}, joinedErrors => {
|
|
if (joinedErrors) {
|
|
process.exit(1);
|
|
}
|
|
});
|
|
});
|