| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 | /* * grunt-init-amber * https://amber-lang.net/ * * Copyright (c) 2013 Manfred Kroehnert, contributors * Licensed under the MIT license. */'use strict';// Basic template description.exports.description = 'Create a web application based on Amber Smalltalk.';// Template-specific notes to be displayed before question prompts.exports.notes = ' _Project title_ should be a human-readable title.';// Template-specific notes to be displayed after question prompts.exports.after = 'You need to have these installed globally via npm:' +' _@ambers/cli_ and _grunt-cli_.' +' Now, install project dependencies with _npm install_' +' and recompile / prepare with _grunt default devel_.' +' If you are running _amber init_, these two tasks are going to be performed for you now.' +' Afterwards, start the development server with _amber serve_.' +' Your application is then accessible via _http://localhost:4000/_';// Any existing file or directory matching this wildcard will cause a warning.exports.warnOn = '*';// The actual init template.exports.template = function (grunt, init, done) {    var remembered = {};    function rememberViaValidator(name) {        var oldValidator = init.prompts[name].validator || function (line) {                return true;            };        var newValidator;        switch (oldValidator.length) { //apply would not work, .length is used to call it differently            case 1:                newValidator = function (line) {                    remembered[name] = line;                    return oldValidator.call(this, line);                };                break;            case 2:                newValidator = function (line, next) {                    remembered[name] = line;                    return oldValidator.call(this, line, next);                };                break;            default:                throw new Error("Panic: " + oldValidator.length + "-argument validator for " + name + ".");        }        init.prompts[name].validator = newValidator;    }    function capitalize(string) {        return string[0].toUpperCase() + string.slice(1).toLowerCase();    }    init.prompts.name.message = 'Main class and package of Amber application.\nProject name is derived by lowercasing this.';    init.prompts.name.validator = function (line) {        return /^[A-Z][A-Za-z0-9]*$/.test(line)    };    init.prompts.name.warning = 'Must be a valid class name: only alphanumeric and starting with an uppercase letter!';    rememberViaValidator('name');    rememberViaValidator('title');    init.process({type: 'amber'}, [        // Prompt for these values.        init.prompt('title', 'Application or Library Title'),        init.prompt('name', function (value, data, done) {            var words = remembered.title.split(/\W/);            words = words.filter(function (x) {                return x && x !== "none";            }).map(capitalize);            value = words.length ? words.join('') : 'MysteriousApp';            done(null, value);        }),        init.prompt('description', 'The Application or The Library doing The Thing.'),        init.prompt('author_name'),        init.prompt('author_email'),        {            name: 'namespace',            message: 'Namespace of the new Amber package.',            altDefault: function (value, data, done) {                value = 'amber-' + remembered.name.toLowerCase();                done(null, value);            },            validator: /^[a-z][a-z0-9/\-]*$/,            warning: 'Only lowercase letters, numbers, and - are allowed in namespaces!'        },        init.prompt('version'),        init.prompt('repository'),        init.prompt('homepage'),        init.prompt('bugs'),        init.prompt('author_url'),        init.prompt('licenses', 'MIT')    ], function (err, props) {        // Files to copy (and process).        var files = init.filesToCopy(props);        // Add properly-named license files.        init.addLicenseFiles(files, props.licenses);        // Actually copy (and process) files.        init.copyAndProcess(files, props, {noProcess: 'libs/**'});        // Clean up non-npm props.        delete props.namespace;        props.name = props.name.toLowerCase();        // A few additional properties.        props.keywords = ['Amber', 'Smalltalk'];        props.dependencies = {            "@ambers/contrib-jquery": "^0.6.0",            "@ambers/contrib-web": "^0.7.0",            "@ambers/lang": "^0.23.0",            "@ambers/domite": "^0.9.0",            "es6-promise": "^4.2.6",            "@ambers/silk": "^0.5.1"        };        props.devDependencies = {            "@ambers/ide-starter-modal": "^0.2.0",            "@ambers/sdk": "^0.12.1",            "@ambers/contrib-legacy": "^0.8.0",            "@ambers/helios": "^0.11.0",            "grunt": "^1.0.3",            "grunt-contrib-clean": "^1.1.0",            "grunt-contrib-requirejs": "^1.0.0",            "grunt-exec": "^3.0.0",            "requirejs": "^2.3.5"        };        props.node_version = '>=4.0.0';        props.scripts = {            "reset": "npm run clean && npm run init",            "clean": "(rm -rf node_modules || rd /s/q node_modules)",            "init": "npm install && grunt default devel",            "test": "grunt test"        };        // Generate package.json file, used by npm and grunt.        init.writePackageJSON('package.json', props);        // All done!        done();    });};
 |