get-debug.js revision 74ead59e93c5200ec17d94b912efc72d0d5605a0
0c7c93f66f5b0af032703f26632682b685b26be5Dav GlassYUI.add('get', function(Y) {
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass /**
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass * 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.
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass * Note: There is an added method called Get.domScript, which is the same as Get.script in a browser, it simply loads the script into the dom tree
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass * so that you can call outerHTML on the document to print it to the screen.
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass * @module get-nodejs
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass */
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass var path = require('path'),
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass vm = require('vm'),
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass fs = require('fs'),
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass n_url = require('url'),
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass http = require('http'),
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass https = require('https');
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get = function() {};
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.config.base = path.join(__dirname, '../');
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get.urlInfoPort = function(urlInfo) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass return urlInfo.port ? parseInt(urlInfo.port, 10) :
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass urlInfo.protocol === 'http:' ? 80 : 443;
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass };
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get._exec = function(data, url, cb) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass var mod = "(function(YUI) { " + data + ";return YUI; })";
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass var script = vm.createScript(mod, url);
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass var fn = script.runInThisContext(mod);
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass YUI = fn(YUI);
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass cb(null);
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass };
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get._include = function(url, cb) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass if (url.match(/^https?:\/\//)) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass var u = n_url.parse(url, parseQueryString=false),
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass p = Y.Get.urlInfoPort(u),
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass req_url = u.pathname;
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass if (u.search) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass req_url += u.search;
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass }
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass var h = http;
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass if (p === 443 || u.protocol === 'https:') {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass h = https;
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass }
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass h.get({
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass host: u.hostname,
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass port: p,
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass path: req_url
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass }, function(res) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass var mod = '';
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass res.setEncoding('utf8');
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass res.on('data', function (chunk) {
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass mod += chunk;
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass });
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass res.on('end', function() {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get._exec(mod, url, cb);
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass });
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass });
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass } else {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (Y.config.useSync) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass //Needs to be in useSync
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass var mod = fs.readFileSync(url,'utf8');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get._exec(mod, url, cb);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass } else {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass fs.readFile(url, 'utf8', function(err, mod) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get._exec(mod, url, cb);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass });
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
f708d7565966b0cf46ee594efc3097461dfe9260Dav Glass }
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass };
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass var end = function(cb, msg, result) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass //Y.log('Get end: ' + cb.onEnd);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (Y.Lang.isFunction(cb.onEnd)) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass cb.onEnd.call(Y, msg, result);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }, pass = function(cb) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass //Y.log('Get pass: ' + cb.onSuccess);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (Y.Lang.isFunction(cb.onSuccess)) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass cb.onSuccess.call(Y, cb);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass end(cb, 'success', 'success');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }, fail = function(cb, er) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass //Y.log('Get fail: ' + er);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (Y.Lang.isFunction(cb.onFailure)) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass cb.onFailure.call(Y, er, cb);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass end(cb, er, 'fail');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass };
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass /**
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass * Override for Get.script for loading local or remote YUI modules.
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass */
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get.script = function(s, cb) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass var A = Y.Array,
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass urls = A(s), url, i, l = urls.length;
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass for (i=0; i<l; i++) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass url = urls[i];
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass url = url.replace(/'/g, '%27');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.log('URL: ' + url, 'info', 'get');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass // doesn't need to be blocking, so don't block.
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.Get._include(url, function(err) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (!Y.config) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.config = {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass debug: true
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass };
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.log('After Load: ' + url, 'info', 'get');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (err) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.log('----------------------------------------------------------', 'error', 'nodejsYUI3');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass if (err.stack) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass A.each(err.stack.split('\n'), function(frame) {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.log(frame, 'error', 'nodejsYUI3');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass });
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass } else {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass console.log(err);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass Y.log('----------------------------------------------------------', 'error', 'nodejsYUI3');
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass } else {
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass pass(cb);
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass });
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass }
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass };
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass
74ead59e93c5200ec17d94b912efc72d0d5605a0Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass
0c7c93f66f5b0af032703f26632682b685b26be5Dav Glass}, '@VERSION@' ,{requires:['yui-base']});