Version 3.18.1
Show:

File: get/js/get-nodejs.js

                /**
                * NodeJS specific Get module used to load remote resources.
                * It contains the same signature as the default Get module so there is no code change needed.
                * @module get-nodejs
                * @class GetNodeJS
                */
            
                var Module = require('module'),
            
                    path = require('path'),
                    fs = require('fs'),
                    request = require('request'),
                    end = function(cb, msg, result) {
                        //Y.log('Get end: ' + cb.onEnd);
                        if (Y.Lang.isFunction(cb.onEnd)) {
                            cb.onEnd.call(Y, msg, result);
                        }
                    }, pass = function(cb) {
                        //Y.log('Get pass: ' + cb.onSuccess);
                        if (Y.Lang.isFunction(cb.onSuccess)) {
                            cb.onSuccess.call(Y, cb);
                        }
                        end(cb, 'success', 'success');
                    }, fail = function(cb, er) {
                        //Y.log('Get fail: ' + er);
                        er.errors = [er];
                        if (Y.Lang.isFunction(cb.onFailure)) {
                            cb.onFailure.call(Y, er, cb);
                        }
                        end(cb, er, 'fail');
                    };
            
            
                Y.Get = function() {
                };
            
                //Setup the default config base path
                Y.config.base = path.join(__dirname, '../');
            
                YUI.require = require;
                YUI.process = process;
            
                /**
                * Takes the raw JS files and wraps them to be executed in the YUI context so they can be loaded
                * into the YUI object
                * @method _exec
                * @private
                * @param {String} data The JS to execute
                * @param {String} url The path to the file that was parsed
                * @param {Function} cb The callback to execute when this is completed
                * @param {Error} cb.err=null Error object
                * @param {String} cb.url The URL that was just parsed
                */
            
                Y.Get._exec = function(data, url, cb) {
                    if (data.charCodeAt(0) === 0xFEFF) {
                        data = data.slice(1);
                    }
            
                    var mod = new Module(url, module);
                    mod.filename = url;
                    mod.paths = Module._nodeModulePaths(path.dirname(url));
                    if (typeof YUI._getLoadHook === 'function') {
                        data = YUI._getLoadHook(data, url);
                    }
                    mod._compile('module.exports = function (YUI) {' +
                        'return (function () {'+ data + '\n;return YUI;}).apply(global);' +
                    '};', url);
            
                    /*global YUI:true */
                    YUI = mod.exports(YUI);
            
                    mod.loaded = true;
            
                    cb(null, url);
                };
            
                /**
                * Fetches the content from a remote URL or a file from disc and passes the content
                * off to `_exec` for parsing
                * @method _include
                * @private
                * @param {String} url The URL/File path to fetch the content from
                * @param {Function} cb The callback to fire once the content has been executed via `_exec`
                */
                Y.Get._include = function (url, cb) {
                    var cfg,
                        mod,
                        self = this;
            
                    if (url.match(/^https?:\/\//)) {
                        cfg = {
                            url: url,
                            timeout: self.timeout
                        };
                        request(cfg, function (err, response, body) {
                            if (err) {
                                Y.log(err, 'error', 'get');
                                cb(err, url);
                            } else {
                                Y.Get._exec(body, url, cb);
                            }
                        });
                    } else {
                        try {
                            // Try to resolve paths relative to the module that required yui.
                            url = Module._findPath(url, Module._resolveLookupPaths(url, module.parent.parent)[1]);
            
                            if (Y.config.useSync) {
                                //Needs to be in useSync
                                mod = fs.readFileSync(url,'utf8');
                            } else {
                                fs.readFile(url, 'utf8', function (err, mod) {
                                    if (err) {
                                        cb(err, url);
                                    } else {
                                        Y.Get._exec(mod, url, cb);
                                    }
                                });
                                return;
                            }
                        } catch (err) {
                            cb(err, url);
                            return;
                        }
            
                        Y.Get._exec(mod, url, cb);
                    }
                };
            
            
                /**
                * Override for Get.script for loading local or remote YUI modules.
                * @method js
                * @param {Array|String} s The URL's to load into this context
                * @param {Object} options Transaction options
                */
                Y.Get.js = function(s, options) {
                    var urls = Y.Array(s), url, i, l = urls.length, c= 0,
                        check = function() {
                            if (c === l) {
                                pass(options);
                            }
                        };
            
            
                    /*jshint loopfunc: true */
                    for (i=0; i<l; i++) {
                        url = urls[i];
                        if (Y.Lang.isObject(url)) {
                            url = url.url;
                        }
            
                        url = url.replace(/'/g, '%27');
                        Y.log('URL: ' + url, 'info', 'get');
                        Y.Get._include(url, function(err, url) {
                            if (!Y.config) {
                                Y.config = {
                                    debug: true
                                };
                            }
                            if (options.onProgress) {
                                options.onProgress.call(options.context || Y, url);
                            }
                            Y.log('After Load: ' + url, 'info', 'get');
                            if (err) {
                                fail(options, err);
                                Y.log('----------------------------------------------------------', 'error', 'get');
                                Y.log(err, 'error', 'get');
                                Y.log('----------------------------------------------------------', 'error', 'get');
                            } else {
                                c++;
                                check();
                            }
                        });
                    }
            
                    //Keeping Signature in the browser.
                    return {
                        execute: function() {}
                    };
                };
            
                /**
                * Alias for `Y.Get.js`
                * @method script
                */
                Y.Get.script = Y.Get.js;
            
                //Place holder for SS Dom access
                Y.Get.css = function(s, cb) {
                    Y.log('Y.Get.css is not supported, just reporting that it has loaded but not fetching.', 'warn', 'get');
                    pass(cb);
                };