(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o} */ var modules = {}; /** * @ngdoc function * @name angular.module * @module ng * @description * * The `angular.module` is a global place for creating, registering and retrieving Angular * modules. * All modules (angular core or 3rd party) that should be available to an application must be * registered using this mechanism. * * When passed two or more arguments, a new module is created. If passed only one argument, an * existing module (the name passed as the first argument to `module`) is retrieved. * * * # Module * * A module is a collection of services, directives, controllers, filters, and configuration information. * `angular.module` is used to configure the {@link auto.$injector $injector}. * * ```js * // Create a new module * var myModule = angular.module('myModule', []); * * // register a new service * myModule.value('appName', 'MyCoolApp'); * * // configure existing services inside initialization blocks. * myModule.config(['$locationProvider', function($locationProvider) { * // Configure existing providers * $locationProvider.hashPrefix('!'); * }]); * ``` * * Then you can create an injector and load your modules like this: * * ```js * var injector = angular.injector(['ng', 'myModule']) * ``` * * However it's more likely that you'll just use * {@link ng.directive:ngApp ngApp} or * {@link angular.bootstrap} to simplify this process for you. * * @param {!string} name The name of the module to create or retrieve. * @param {!Array.=} requires If specified then new module is being created. If * unspecified then the module is being retrieved for further configuration. * @param {Function=} configFn Optional configuration function for the module. Same as * {@link angular.Module#config Module#config()}. * @returns {module} new module with the {@link angular.Module} api. */ return function module(name, requires, configFn) { var assertNotHasOwnProperty = function(name, context) { if (name === 'hasOwnProperty') { throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); } }; assertNotHasOwnProperty(name, 'module'); if (requires && modules.hasOwnProperty(name)) { modules[name] = null; } return ensure(modules, name, function() { if (!requires) { throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + "the module name or forgot to load it. If registering a module ensure that you " + "specify the dependencies as the second argument.", name); } /** @type {!Array.>} */ var invokeQueue = []; /** @type {!Array.} */ var configBlocks = []; /** @type {!Array.} */ var runBlocks = []; var config = invokeLater('$injector', 'invoke', 'push', configBlocks); /** @type {angular.Module} */ var moduleInstance = { // Private state _configBlocks: [], _runBlocks: runBlocks, /** * @ngdoc property * @name angular.Module#requires * @module ng * @returns {Array.} List of module names which must be loaded before this module. * @description * Holds the list of modules which the injector will load before the current module is * loaded. */ requires: requires, /** * @ngdoc property * @name angular.Module#name * @module ng * @returns {string} Name of the module. * @description */ name: name, /** * @ngdoc method * @name angular.Module#provider * @module ng * @param {string} name service name * @param {Function} providerType Construction function for creating new instance of the * service. * @description * See {@link auto.$provide#provider $provide.provider()}. */ provider: invokeLater('$provide', 'provider'), /** * @ngdoc method * @name angular.Module#factory * @module ng * @param {string} name service name * @param {Function} providerFunction Function for creating new instance of the service. * @description * See {@link auto.$provide#factory $provide.factory()}. */ factory: invokeLater('$provide', 'factory'), /** * @ngdoc method * @name angular.Module#service * @module ng * @param {string} name service name * @param {Function} constructor A constructor function that will be instantiated. * @description * See {@link auto.$provide#service $provide.service()}. */ service: invokeLater('$provide', 'service'), /** * @ngdoc method * @name angular.Module#value * @module ng * @param {string} name service name * @param {*} object Service instance object. * @description * See {@link auto.$provide#value $provide.value()}. */ value: invokeLater('$provide', 'value'), /** * @ngdoc method * @name angular.Module#constant * @module ng * @param {string} name constant name * @param {*} object Constant value. * @description * Because the constant are fixed, they get applied before other provide methods. * See {@link auto.$provide#constant $provide.constant()}. */ constant: invokeLater('$provide', 'constant', 'unshift'), /** * @ngdoc method * @name angular.Module#animation * @module ng * @param {string} name animation name * @param {Function} animationFactory Factory function for creating new instance of an * animation. * @description * * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. * * * Defines an animation hook that can be later used with * {@link ngAnimate.$animate $animate} service and directives that use this service. * * ```js * module.animation('.animation-name', function($inject1, $inject2) { * return { * eventName : function(element, done) { * //code to run the animation * //once complete, then run done() * return function cancellationFunction(element) { * //code to cancel the animation * } * } * } * }) * ``` * * See {@link ngAnimate.$animateProvider#register $animateProvider.register()} and * {@link ngAnimate ngAnimate module} for more information. */ animation: invokeLater('$animateProvider', 'register'), /** * @ngdoc method * @name angular.Module#filter * @module ng * @param {string} name Filter name. * @param {Function} filterFactory Factory function for creating new instance of filter. * @description * See {@link ng.$filterProvider#register $filterProvider.register()}. */ filter: invokeLater('$filterProvider', 'register'), /** * @ngdoc method * @name angular.Module#controller * @module ng * @param {string|Object} name Controller name, or an object map of controllers where the * keys are the names and the values are the constructors. * @param {Function} constructor Controller constructor function. * @description * See {@link ng.$controllerProvider#register $controllerProvider.register()}. */ controller: invokeLater('$controllerProvider', 'register'), /** * @ngdoc method * @name angular.Module#directive * @module ng * @param {string|Object} name Directive name, or an object map of directives where the * keys are the names and the values are the factories. * @param {Function} directiveFactory Factory function for creating new instance of * directives. * @description * See {@link ng.$compileProvider#directive $compileProvider.directive()}. */ directive: invokeLater('$compileProvider', 'directive'), /** * @ngdoc method * @name angular.Module#config * @module ng * @param {Function} configFn Execute this function on module load. Useful for service * configuration. * @description * Use this method to register work which needs to be performed on module loading. * For more about how to configure services, see * {@link providers#providers_provider-recipe Provider Recipe}. */ config: config, /** * @ngdoc method * @name angular.Module#run * @module ng * @param {Function} initializationFn Execute this function after injector creation. * Useful for application initialization. * @description * Use this method to register work which should be performed when the injector is done * loading all modules. */ run: function(block) { runBlocks.push(block); return this; } }; /** * ANGULAR HINT ALTERATION * To make this loader compatible with apps that are running * both Angular 1.2 and 1.3, the loader must handle 1.3 applications * that expect to initialize their config blocks after all providers * are registered. Hence, the configBlocks are added to the end * of the exisiting invokeQueue. */ Object.defineProperty(moduleInstance, '_invokeQueue', { get: function() { return invokeQueue.concat(configBlocks); } }); if (configFn) { config(configFn); } return moduleInstance; /** * @param {string} provider * @param {string} method * @param {String=} insertMethod * @returns {angular.Module} */ function invokeLater(provider, method, insertMethod, queue) { if (!queue) queue = invokeQueue; return function() { queue[insertMethod || 'push']([provider, method, arguments]); return moduleInstance; }; } }); }; }); } setupModuleLoader(window); })(window); /** * Closure compiler type information * * @typedef { { * requires: !Array., * invokeQueue: !Array.>, * * service: function(string, Function):angular.Module, * factory: function(string, Function):angular.Module, * value: function(string, *):angular.Module, * * filter: function(string, Function):angular.Module, * * init: function(Function):angular.Module * } } */ angular.Module; },{}],3:[function(require,module,exports){ 'use strict'; // Create pipe for all hint messages from different modules window.angular.hint = require('angular-hint-log'); // Load angular hint modules require('angular-hint-controllers'); // require('angular-hint-directives'); // require('angular-hint-dom'); require('angular-hint-events'); // require('angular-hint-interpolation'); require('angular-hint-modules'); require('angular-hint-scopes'); // List of all possible modules // The default ng-hint behavior loads all modules var allModules = [ 'ngHintControllers', // 'ngHintDirectives', // 'ngHintDom', 'ngHintEvents', // 'ngHintInterpolation', 'ngHintModules', 'ngHintScopes' ]; var SEVERITY_WARNING = 2; // Determine whether this run is by protractor. // If protractor is running, the bootstrap will already be deferred. // In this case `resumeBootstrap` should be patched to load the hint modules. if (window.name === 'NG_DEFER_BOOTSTRAP!') { var originalResumeBootstrap; Object.defineProperty(angular, 'resumeBootstrap', { get: function() { return function(modules) { return originalResumeBootstrap.call(angular, modules.concat(loadModules())); }; }, set: function(resumeBootstrap) { originalResumeBootstrap = resumeBootstrap; } }); } //If this is not a test, defer bootstrapping else { window.name = 'NG_DEFER_BOOTSTRAP!'; // determine which modules to load and resume bootstrap document.addEventListener('DOMContentLoaded', maybeBootstrap); } function maybeBootstrap() { // we don't know if angular is loaded if (!angular.resumeBootstrap) { return setTimeout(maybeBootstrap, 1); } var modules = loadModules(); angular.resumeBootstrap(modules); } function loadModules() { var modules = [], elt; if (angular.version.minor < 2) { return modules; } if ((elt = document.querySelector('[ng-hint-include]'))) { modules = hintModulesFromElement(elt); } else if (elt = document.querySelector('[ng-hint-exclude]')) { modules = excludeModules(hintModulesFromElement(elt)); } else if (document.querySelector('[ng-hint]')) { modules = allModules; } else { angular.hint.logMessage('General', 'ngHint is included on the page, but is not active because ' + 'there is no `ng-hint` attribute present', SEVERITY_WARNING); } return modules; } function excludeModules(modulesToExclude) { return allModules.filter(function(module) { return modulesToExclude.indexOf(module) === -1; }); } function hintModulesFromElement (elt) { var selectedModules = (elt.attributes['ng-hint-include'] || elt.attributes['ng-hint-exclude']).value.split(' '); return selectedModules.map(hintModuleName).filter(function (name) { return (allModules.indexOf(name) > -1) || angular.hint.logMessage('General', 'Module ' + name + ' could not be found', SEVERITY_WARNING); }); } function hintModuleName(name) { return 'ngHint' + title(name); } function title(str) { return str[0].toUpperCase() + str.substr(1); } var LEVELS = [ 'error', 'warning', 'suggestion' ]; },{"angular-hint-controllers":4,"angular-hint-events":6,"angular-hint-log":16,"angular-hint-modules":17,"angular-hint-scopes":35}],4:[function(require,module,exports){ 'use strict'; var hint = angular.hint = require('angular-hint-log'); var MODULE_NAME = 'Controllers', CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/, CATEGORY_CONTROLLER_NAME = 'Name controllers according to best practices', CATEGORY_GLOBAL_CONTROLLER = 'Using global functions as controllers is against Angular best practices and depricated in Angular 1.3 and up', SEVERITY_ERROR = 1, SEVERITY_WARNING = 2; // local state var nameToControllerMap = {}; /** * Decorates $controller with a patching function to * log a message if the controller is instantiated on the window */ angular.module('ngHintControllers', []). config(['$provide', function ($provide) { $provide.decorator('$controller', ['$delegate', controllerDecorator]); }]); function controllerDecorator($delegate) { return function(ctrl) { if (typeof ctrl === 'string') { var match = ctrl.match(CNTRL_REG); var ctrlName = (match && match[1]) || ctrl; sendMessageForControllerName(ctrlName); if (!nameToControllerMap[ctrlName] && typeof window[ctrlName] === 'function') { sendMessageForGlobalController(ctrlName); } } return $delegate.apply(this, arguments); }; } /** * Save details of the controllers as they are instantiated * for use in decoration. * Hint about the best practices for naming controllers. */ var originalModule = angular.module; function sendMessageForGlobalController(name) { hint.logMessage(MODULE_NAME, 'add `' + name + '` to a module', angular.version.minor <= 2 ? SEVERITY_WARNING : SEVERITY_ERROR, CATEGORY_GLOBAL_CONTROLLER); } function sendMessageForControllerName(name) { var newName = name; if (!startsWithUpperCase(name)) { newName = title(newName); } if (!endsWithController(name)) { newName = addControllerSuffix(newName); } if (name !== newName) { hint.logMessage(MODULE_NAME, 'Consider renaming `' + name + '` to `' + newName + '`.', SEVERITY_WARNING, CATEGORY_CONTROLLER_NAME); } } function startsWithUpperCase(name) { var firstChar = name.charAt(0); return firstChar === firstChar.toUpperCase() && firstChar !== firstChar.toLowerCase(); } function title (name) { return name[0].toUpperCase() + name.substr(1); } var CONTROLLER_RE = /Controller$/; function endsWithController(name) { return CONTROLLER_RE.test(name); } var RE = /(Ctrl|Kontroller)?$/; function addControllerSuffix(name) { return name.replace(RE, 'Controller'); } /* * decorate angular module API */ angular.module = function() { var module = originalModule.apply(this, arguments), originalController = module.controller; module.controller = function(controllerName, controllerConstructor) { nameToControllerMap[controllerName] = true; sendMessageForControllerName(controllerName); return originalController.apply(this, arguments); }; return module; }; },{"angular-hint-log":5}],5:[function(require,module,exports){ 'use strict'; /* * HintLog creates a queue of messages logged by ngHint modules. This object * has a key for each ngHint module that corresponds to the messages * from that module. */ var queuedMessages = {}, MESSAGE_TYPES = [ 'error', 'warning', 'suggestion' ]; /* * Add a message to the HintLog message queue. Messages are organized into categories * according to their module name and severity. */ function logMessage(moduleName, message, severity, category) { // If no severity was provided, categorize the message as a `suggestion` severity = severity || 3; var messageType = MESSAGE_TYPES[severity - 1]; moduleName = moduleName || 'General'; // If the category does not exist, initialize a new object queuedMessages[moduleName] = queuedMessages[moduleName] || {}; queuedMessages[moduleName][messageType] = queuedMessages[moduleName][messageType] || []; if (queuedMessages[moduleName][messageType].indexOf(message) < 0) { queuedMessages[moduleName][messageType].push(message); } this.onMessage(moduleName, message, messageType, category); } /* * Return and empty the current queue of messages. */ function flush() { var flushMessages = queuedMessages; queuedMessages = {}; return flushMessages; } module.exports.onMessage = function(message) {}; module.exports.logMessage = logMessage; module.exports.flush = flush; },{}],6:[function(require,module,exports){ 'use strict'; /** * Load necessary functions from /lib into variables. */ var ngEventDirectives = require('./lib/getEventDirectives')(), getEventAttribute = require('./lib/getEventAttribute'), getFunctionNames = require('./lib/getFunctionNames'), formatResults = require('./lib/formatResults'); /** * Decorate $provide in order to examine ng-event directives * and hint about their effective use. */ angular.module('ngHintEvents', []) .config(['$provide', function($provide) { for(var directive in ngEventDirectives) { var dirName = ngEventDirectives[directive]+'Directive'; try{ $provide.decorator(dirName, ['$delegate', '$timeout', '$parse', function($delegate, $timeout, $parse) { var original = $delegate[0].compile, falseBinds = [], messages = []; $delegate[0].compile = function(element, attrs, transclude) { var angularAttrs = attrs.$attr; var eventAttrName = getEventAttribute(angularAttrs); var fn = $parse(attrs[eventAttrName]); var messages = []; return function ngEventHandler(scope, element, attrs) { for(var attr in angularAttrs) { var boundFuncs = getFunctionNames(attrs[attr]); boundFuncs.forEach(function(boundFn) { if(ngEventDirectives[attr] && !(boundFn in scope)) { messages.push({ scope: scope, element:element, attrs: attrs, boundFunc: boundFn }); } }); } element.on(eventAttrName.substring(2).toLowerCase(), function(event) { scope.$apply(function() { fn(scope, {$event:event}); }); }); formatResults(messages); }; }; return $delegate; }]); } catch(e) {} } }]); },{"./lib/formatResults":8,"./lib/getEventAttribute":9,"./lib/getEventDirectives":10,"./lib/getFunctionNames":11}],7:[function(require,module,exports){ 'use strict'; var getValidProps = require('./getValidProps'), suggest = require('suggest-it'); module.exports = function addSuggestions(messages) { messages.forEach(function(messageObj) { var dictionary = getValidProps(messageObj.scope), suggestion = suggest(dictionary)(messageObj.boundFunc); messageObj['match'] = suggestion; }); return messages; }; },{"./getValidProps":12,"suggest-it":15}],8:[function(require,module,exports){ 'use strict'; var hintLog = angular.hint = require('angular-hint-log'), addSuggestions = require('./addSuggestions'), MODULE_NAME = 'Events', SEVERITY_ERROR = 1; module.exports = function formatResults(messages) { messages = addSuggestions(messages); if(messages.length) { messages.forEach(function(obj) { var id = (obj.element[0].id) ? ' with id: #' + obj.element[0].id : '', type = obj.element[0].nodeName, suggestion = obj.match ? ' (Try "' + obj.match + '").': '.', message = 'Variable "' + obj.boundFunc + '" called on ' + type + ' element' + id + ' does not exist in that scope' + suggestion + ' Event directive found on "' + obj.element[0].outerHTML + '".'; hintLog.logMessage(MODULE_NAME, message, SEVERITY_ERROR); }); } }; },{"./addSuggestions":7,"angular-hint-log":13}],9:[function(require,module,exports){ 'use strict'; var ngEventDirectives = require('./getEventDirectives')(); module.exports = function getEventAttribute(attrs) { for(var attr in attrs) { if(ngEventDirectives[attr]) { return attr; } } }; },{"./getEventDirectives":10}],10:[function(require,module,exports){ 'use strict'; module.exports = function getEventDirectives() { var list = 'click submit mouseenter mouseleave mousemove mousedown mouseover mouseup dblclick keyup keydown keypress blur focus submit cut copy paste'.split(' '); var eventDirHash = {}; list.forEach(function(dirName) { dirName = 'ng'+dirName.charAt(0).toUpperCase()+dirName.substring(1); eventDirHash[dirName] = dirName; }); return eventDirHash; }; },{}],11:[function(require,module,exports){ 'use strict'; module.exports = function getFunctionNames(str) { if (typeof str !== 'string') { return []; } var results = str.replace(/\s+/g, '').split(/[\+\-\/\|\<\>\^=&!%~]/g).map(function(x) { if(isNaN(+x)) { if(x.match(/\w+\(.*\)$/)){ return x.substring(0, x.indexOf('(')); } return x; } }).filter(function(x){return x;}); return results; }; },{}],12:[function(require,module,exports){ 'use strict'; module.exports = function getValidProps(obj) { var props = []; for(var prop in obj) { if (prop.charAt(0) !== '$' && typeof obj[prop] === 'function') { props.push(prop); } } return props; }; },{}],13:[function(require,module,exports){ /** * HintLog creates a queue of messages logged by ngHint modules. This object * has a key for each ngHint module that corresponds to the messages * from that module. */ var queuedMessages = {}, MESSAGE_TYPES = [ 'error', 'warning', 'suggestion' ]; /** * Add a message to the HintLog message queue. Messages are organized into categories * according to their module name and severity. **/ function logMessage(moduleName, message, severity, category) { // If no severity was provided, categorize the message as a `suggestion` severity = severity || 3; var messageType = MESSAGE_TYPES[severity - 1]; // If no ModuleName was found, categorize the message under `General` moduleName = moduleName || 'General'; // If the category does not exist, initialize a new object queuedMessages[moduleName] = queuedMessages[moduleName] || {}; queuedMessages[moduleName][messageType] = queuedMessages[moduleName][messageType] || []; if (queuedMessages[moduleName][messageType].indexOf(message) < 0) { queuedMessages[moduleName][messageType].push(message); } module.exports.onMessage(moduleName, message, messageType, category); } /** * Return and empty the current queue of messages. **/ function flush() { var flushMessages = queuedMessages; queuedMessages = {}; return flushMessages; } module.exports.onMessage = function(message) {}; module.exports.logMessage = logMessage; module.exports.flush = flush; },{}],14:[function(require,module,exports){ module.exports = distance; function distance(a, b) { var table = []; if (a.length === 0 || b.length === 0) return Math.max(a.length, b.length); for (var ii = 0, ilen = a.length + 1; ii !== ilen; ++ii) { table[ii] = []; for (var jj = 0, jlen = b.length + 1; jj !== jlen; ++jj) { if (ii === 0 || jj === 0) table[ii][jj] = Math.max(ii, jj); else { var diagPenalty = Number(a[ii-1] !== b[jj-1]); var diag = table[ii - 1][jj - 1] + diagPenalty; var top = table[ii - 1][jj] + 1; var left = table[ii][jj - 1] + 1; table[ii][jj] = Math.min(left, top, diag); } } } return table[a.length][b.length]; } },{}],15:[function(require,module,exports){ module.exports = suggestDictionary; var distance = require('./levenstein_distance'); function suggestDictionary(dict, opts) { opts = opts || {}; var threshold = opts.threshold || 0.5; return function suggest(word) { var length = word.length; return dict.reduce(function (result, dictEntry) { var score = distance(dictEntry, word); if (result.score > score && score / length < threshold) { result.score = score; result.word = dictEntry; } return result; }, { score: Infinity }).word; }; } suggestDictionary.distance = distance; },{"./levenstein_distance":14}],16:[function(require,module,exports){ module.exports=require(5) },{"/Users/bford/Development/angularjs-batarang/node_modules/angular-hint/node_modules/angular-hint-controllers/node_modules/angular-hint-log/hint-log.js":5}],17:[function(require,module,exports){ 'use strict'; var storeDependencies = require('./lib/storeDependencies'), getModule = require('./lib/getModule'), start = require('./lib/start'), storeNgAppAndView = require('./lib/storeNgAppAndView'), storeUsedModules = require('./lib/storeUsedModules'), hasNameSpace = require('./lib/hasNameSpace'), modData = require('./lib/moduleData'); var doc = Array.prototype.slice.call(document.getElementsByTagName('*')), originalAngularModule = angular.module, modules = {}; storeNgAppAndView(doc); angular.module = function(name, requiresOriginal) { var module = originalAngularModule.apply(this, arguments), name = module.name; module.requiresOriginal = requiresOriginal; modules[name] = module; hasNameSpace(name); var modToCheck = getModule(name, true); if(modToCheck && modToCheck.requiresOriginal !== module.requiresOriginal) { if(!modData.createdMulti[name]) { modData.createdMulti[name] = [getModule(name,true)]; } modData.createdMulti[name].push(module); } modData.createdModules[name] = module; return module; }; angular.module('ngHintModules', []).config(function() { var ngAppMod = modules[modData.ngAppMod]; storeUsedModules(ngAppMod, modules); start(); }); },{"./lib/getModule":20,"./lib/hasNameSpace":24,"./lib/moduleData":26,"./lib/start":29,"./lib/storeDependencies":30,"./lib/storeNgAppAndView":31,"./lib/storeUsedModules":32}],18:[function(require,module,exports){ var hintLog = angular.hint = require('angular-hint-log'), MODULE_NAME = 'Modules'; module.exports = function(modules) { modules.forEach(function(module) { hintLog.logMessage(MODULE_NAME, module.message, module.severity); }); }; },{"angular-hint-log":16}],19:[function(require,module,exports){ var modData = require('./moduleData'); MODULE_NAME = 'Modules', SEVERITY_WARNING = 2; module.exports = function() { var multiLoaded = []; for(var modName in modData.createdMulti) { var message = 'Multiple modules with name "' + modName + '" are being created and they will ' + 'overwrite each other.'; var multi = modData.createdMulti[modName]; var multiLength = multi.length; var details = { existingModule: multi[multiLength - 1], overwrittenModules: multi.slice(0, multiLength - 1) }; multiLoaded .push({module: details, message: message, name: MODULE_NAME, severity: SEVERITY_WARNING}); } return multiLoaded; }; },{"./moduleData":26}],20:[function(require,module,exports){ var modData = require('./moduleData'); module.exports = function(moduleName, getCreated) { return (getCreated)? modData.createdModules[moduleName] : modData.loadedModules[moduleName]; }; },{"./moduleData":26}],21:[function(require,module,exports){ var hintLog = angular.hint = require('angular-hint-log'), MODULE_NAME = 'Modules', SEVERITY_ERROR = 1; module.exports = function(attrs, ngAppFound) { if(attrs['ng-app'] && ngAppFound) { hintLog.logMessage(MODULE_NAME, 'ng-app may only be included once. The module "' + attrs['ng-app'].value + '" was not used to bootstrap because ng-app was already included.', SEVERITY_ERROR); } return attrs['ng-app'] ? attrs['ng-app'].value : undefined; }; },{"angular-hint-log":16}],22:[function(require,module,exports){ var getModule = require('./getModule'), dictionary = Object.keys(require('./moduleData').createdModules), suggest = require('suggest-it')(dictionary), SEVERITY_ERROR = 1; module.exports = function(loadedModules) { var undeclaredModules = []; for(var module in loadedModules) { var cModule = getModule(module, true); if(!cModule) { var match = suggest(module), suggestion = (match) ? '; Try: "'+match+'"' : '', message = 'Module "'+module+'" was loaded but does not exist'+suggestion+'.'; undeclaredModules.push({module: null, message: message, severity: SEVERITY_ERROR}); } } return undeclaredModules; }; },{"./getModule":20,"./moduleData":26,"suggest-it":34}],23:[function(require,module,exports){ var getModule = require('./getModule'); var IGNORED = ['ngHintControllers', 'ngHintDirectives', 'ngHintDom', 'ngHintEvents', 'ngHintInterpolation', 'ngHintModules', 'ngHintScopes', 'ng', 'ngLocale', 'protractorBaseModule_'], SEVERITY_WARNING = 2; module.exports = function(createdModules) { var unusedModules = []; for(var module in createdModules) { if(!getModule(module)) { var cModule = createdModules[module], message = 'Module "' + cModule.name + '" was created but never loaded.'; if(IGNORED.indexOf(cModule.name) === -1) { unusedModules.push({module: cModule, message: message, severity: SEVERITY_WARNING}); } } } return unusedModules; }; },{"./getModule":20}],24:[function(require,module,exports){ var hintLog = angular.hint = require('angular-hint-log'), MODULE_NAME = 'Modules', SEVERITY_SUGGESTION = 3; module.exports = function(str) { if (str === 'ng') { return true; } if(str.toLowerCase() === str || str.charAt(0).toUpperCase() === str.charAt(0)) { hintLog.logMessage(MODULE_NAME, 'The best practice for' + ' module names is to use lowerCamelCase. Check the name of "' + str + '".', SEVERITY_SUGGESTION); return false; } return true; }; },{"angular-hint-log":16}],25:[function(require,module,exports){ var normalizeAttribute = require('./normalizeAttribute'); module.exports = function(attrs) { for(var i = 0, length = attrs.length; i < length; i++) { if(normalizeAttribute(attrs[i].nodeName) === 'ng-view' || attrs[i].value.indexOf('ng-view') > -1) { return true; } } }; },{"./normalizeAttribute":28}],26:[function(require,module,exports){ module.exports = { createdModules: {}, createdMulti: {}, loadedModules: {} }; },{}],27:[function(require,module,exports){ var modData = require('./moduleData'), getModule = require('./getModule'); module.exports = function() { if(modData.ngViewExists && !getModule('ngRoute')) { return {message: 'Directive "ngView" was used in the application however "ngRoute" was not loaded into any module.'}; } }; },{"./getModule":20,"./moduleData":26}],28:[function(require,module,exports){ module.exports = function(attribute) { return attribute.replace(/^(?:data|x)[-_:]/, '').replace(/[:_]/g, '-'); }; },{}],29:[function(require,module,exports){ var display = require('./display'), formatMultiLoaded = require('./formatMultiLoaded'), getUnusedModules = require('./getUnusedModules'), getUndeclaredModules = require('./getUndeclaredModules'), modData = require('./moduleData'), ngViewNoNgRoute = require('./ngViewNoNgRoute'); module.exports = function() { var unusedModules = getUnusedModules(modData.createdModules), undeclaredModules = getUndeclaredModules(modData.loadedModules), multiLoaded = formatMultiLoaded(), noNgRoute = ngViewNoNgRoute(); if(unusedModules.length || undeclaredModules.length || multiLoaded.length || noNgRoute) { var toSend = unusedModules.concat(undeclaredModules) .concat(multiLoaded); if(noNgRoute) { toSend = toSend.concat(noNgRoute); } display(toSend); } }; },{"./display":18,"./formatMultiLoaded":19,"./getUndeclaredModules":22,"./getUnusedModules":23,"./moduleData":26,"./ngViewNoNgRoute":27}],30:[function(require,module,exports){ var modData = require('./moduleData'); module.exports = function(module, isNgAppMod) { var name = module.name || module; if(!isNgAppMod){ module.requires.forEach(function(dependency){ modData.loadedModules[dependency] = dependency; }); } else { modData.loadedModules[name] = name; modData.ngAppMod = name; } }; },{"./moduleData":26}],31:[function(require,module,exports){ var getNgAppMod = require('./getNgAppMod'), inAttrsOrClasses = require('./inAttrsOrClasses'), storeDependencies = require('./storeDependencies'), modData = require('./moduleData'); module.exports = function(doms) { var bothFound, ngViewFound, elem, isElemName, isInAttrsOrClasses, ngAppMod; for(var i = 0; i < doms.length; i++) { elem = doms[i]; var attributes = elem.attributes; isElemName = elem.nodeName.toLowerCase() === 'ng-view'; isInAttrsOrClasses = inAttrsOrClasses(attributes); ngViewFound = isElemName || isInAttrsOrClasses; ngAppMod = getNgAppMod(attributes, modData.ngAppFound); modData.ngAppFound = modData.ngAppFound || ngAppMod; if(ngAppMod) { storeDependencies(ngAppMod, true); } modData.ngViewExists = ngViewFound ? true : modData.ngViewExists; if(bothFound) { break; } } }; },{"./getNgAppMod":21,"./inAttrsOrClasses":25,"./moduleData":26,"./storeDependencies":30}],32:[function(require,module,exports){ var storeDependencies = require('./storeDependencies'); var storeUsedModules = module.exports = function(module, modules){ if(module) { storeDependencies(module); module.requires.forEach(function(modName) { var mod = modules[modName]; storeUsedModules(mod, modules); }); } }; },{"./storeDependencies":30}],33:[function(require,module,exports){ module.exports=require(14) },{"/Users/bford/Development/angularjs-batarang/node_modules/angular-hint/node_modules/angular-hint-events/node_modules/suggest-it/lib/levenstein_distance.js":14}],34:[function(require,module,exports){ module.exports=require(15) },{"./levenstein_distance":33,"/Users/bford/Development/angularjs-batarang/node_modules/angular-hint/node_modules/angular-hint-events/node_modules/suggest-it/lib/suggest-it.js":15}],35:[function(require,module,exports){ 'use strict'; var summarize = require('./lib/summarize-model'); var hint = angular.hint = require('angular-hint-log'); var debounceOn = require('debounce-on'); hint.emit = function () {}; module.exports = angular.module('ngHintScopes', []).config(['$provide', function ($provide) { $provide.decorator('$rootScope', ['$delegate', '$parse', decorateRootScope]); $provide.decorator('$compile', ['$delegate', decorateDollaCompile]); }]); function decorateRootScope($delegate, $parse) { var perf = window.performance || { now: function () { return 0; } }; var scopes = {}, watching = {}; var debouncedEmitModelChange = debounceOn(emitModelChange, 10, byScopeId); hint.watch = function (scopeId, path) { path = typeof path === 'string' ? path.split('.') : path; if (!watching[scopeId]) { watching[scopeId] = {}; } for (var i = 1, ii = path.length; i <= ii; i += 1) { var partialPath = path.slice(0, i).join('.'); if (watching[scopeId][partialPath]) { continue; } var get = gettterer(scopeId, partialPath); var value = summarize(get()); watching[scopeId][partialPath] = { get: get, value: value }; hint.emit('model:change', { id: scopeId, path: partialPath, value: value }); } }; hint.assign = function (scopeId, path, value) { var scope; if (scope = scopes[scopeId]) { scope.$apply(function () { return $parse(path).assign(scope, value); }); } }; hint.inspectScope = function (scopeId) { var scope; if (scope = scopes[scopeId]) { window.$scope = scope; } }; hint.unwatch = function (scopeId, unwatchPath) { Object.keys(watching[scopeId]). forEach(function (path) { if (path.indexOf(unwatchPath) === 0) { delete watching[scopeId][path]; } }); }; var debouncedEmit = debounceOn(hint.emit, 10, function (params) { return params.id + params.path; }); var scopePrototype = ('getPrototypeOf' in Object) ? Object.getPrototypeOf($delegate) : $delegate.__proto__; // var _watch = scopePrototype.$watch; // scopePrototype.$watch = function (watchExpression, reactionFunction) { // var watchStr = humanReadableWatchExpression(watchExpression); // var scopeId = this.$id; // if (typeof watchExpression === 'function') { // arguments[0] = function () { // var start = perf.now(); // var ret = watchExpression.apply(this, arguments); // var end = perf.now(); // hint.emit('scope:watch', { // id: scopeId, // watch: watchStr, // time: end - start // }); // return ret; // }; // } else { // var thatScope = this; // arguments[0] = function () { // var start = perf.now(); // var ret = thatScope.$eval(watchExpression); // var end = perf.now(); // hint.emit('scope:watch', { // id: scopeId, // watch: watchStr, // time: end - start // }); // return ret; // }; // } // if (typeof reactionFunction === 'function') { // var applyStr = reactionFunction.toString(); // arguments[1] = function () { // var start = perf.now(); // var ret = reactionFunction.apply(this, arguments); // var end = perf.now(); // hint.emit('scope:reaction', { // id: this.$id, // watch: watchStr, // time: end - start // }); // return ret; // }; // } // return _watch.apply(this, arguments); // }; var _destroy = scopePrototype.$destroy; scopePrototype.$destroy = function () { var id = this.id; hint.emit('scope:destroy', { id: id }); delete scopes[id]; delete watching[id]; return _destroy.apply(this, arguments); }; var _new = scopePrototype.$new; scopePrototype.$new = function () { var child = _new.apply(this, arguments); scopes[child.$id] = child; watching[child.$id] = {}; hint.emit('scope:new', { parent: this.$id, child: child.$id }); setTimeout(function () { emitScopeElt(child); }, 0); return child; }; function emitScopeElt (scope) { var scopeId = scope.$id; var elt = findElt(scopeId); var descriptor = scopeDescriptor(elt, scope); hint.emit('scope:link', { id: scopeId, descriptor: descriptor }); } function findElt (scopeId) { var elts = document.querySelectorAll('.ng-scope'); var elt, scope; for (var i = 0; i < elts.length; i++) { elt = angular.element(elts[i]); scope = elt.scope(); if (scope.$id === scopeId) { return elt; } } } var _digest = scopePrototype.$digest; scopePrototype.$digest = function (fn) { var start = perf.now(); var ret = _digest.apply(this, arguments); var end = perf.now(); hint.emit('scope:digest', { id: this.$id, time: end - start }); return ret; }; var _apply = scopePrototype.$apply; scopePrototype.$apply = function (fn) { var start = perf.now(); var ret = _apply.apply(this, arguments); var end = perf.now(); hint.emit('scope:apply', { id: this.$id, time: end - start }); debouncedEmitModelChange(this); return ret; }; function gettterer (scopeId, path) { if (path === '') { return function () { return scopes[scopeId]; }; } var getter = $parse(path); return function () { return getter(scopes[scopeId]); }; } function emitModelChange (scope) { var scopeId = scope.$id; if (watching[scopeId]) { Object.keys(watching[scopeId]).forEach(function (path) { var model = watching[scopeId][path]; var value = summarize(model.get()); if (value !== model.value) { hint.emit('model:change', { id: scope.$id, path: path, oldValue: model.value, value: value }); model.value = value; } }); } } hint.emit('scope:new', { parent: null, child: $delegate.$id }); scopes[$delegate.$id] = $delegate; watching[$delegate.$id] = {}; return $delegate; } function decorateDollaCompile ($delegate) { var newCompile = function () { var link = $delegate.apply(this, arguments); return function (scope) { var elt = link.apply(this, arguments); var descriptor = scopeDescriptor(elt, scope); hint.emit('scope:link', { id: scope.$id, descriptor: descriptor }); return elt; } }; // TODO: test this // copy private helpers like $$addScopeInfo for (var prop in $delegate) { if ($delegate.hasOwnProperty(prop)) { newCompile[prop] = $delegate[prop]; } } return newCompile; } function scopeDescriptor (elt, scope) { var val, types = [ 'ng-app', 'ng-controller', 'ng-repeat', 'ng-include' ], theseTypes = [], type; if (elt) { for (var i = 0; i < types.length; i++) { type = types[i]; if (val = elt.attr(type)) { theseTypes.push(type + '="' + val + '"'); } } } if (theseTypes.length === 0) { return 'scope.$id=' + scope.$id; } else { return theseTypes.join(' '); } } function byScopeId (scope) { return scope.$id; } function humanReadableWatchExpression (fn) { if (fn.exp) { fn = fn.exp; } else if (fn.name) { fn = fn.name; } return fn.toString(); } },{"./lib/summarize-model":36,"angular-hint-log":37,"debounce-on":38}],36:[function(require,module,exports){ module.exports = function summarizeModel (model) { if (model instanceof Array) { return JSON.stringify(model.map(summarizeProperty)); } else if (typeof model === 'object') { return JSON.stringify(Object. keys(model). filter(isAngularPrivatePropertyName). reduce(shallowSummary, {})); } else { return model; } function shallowSummary (obj, prop) { obj[prop] = summarizeProperty(model[prop]); return obj; } }; function isAngularPrivatePropertyName (key) { return !(key[0] === '$' && key[1] === '$') && key !== '$parent' && key !== '$root'; } // TODO: handle DOM nodes, fns, etc better. function summarizeProperty (obj) { return obj instanceof Array ? { '~array-length': obj.length } : obj === null ? null : typeof obj === 'object' ? { '~object': true } : obj; } },{}],37:[function(require,module,exports){ module.exports=require(5) },{"/Users/bford/Development/angularjs-batarang/node_modules/angular-hint/node_modules/angular-hint-controllers/node_modules/angular-hint-log/hint-log.js":5}],38:[function(require,module,exports){ module.exports = function debounceOn (fn, timeout, hash) { var timeouts = {}; timeout = typeof timeout === 'number' ? timeout : (hash = timeout, 100); hash = typeof hash === 'function' ? hash : defaultHash; return function () { var key = hash.apply(null, arguments); var args = arguments; if (typeof timeouts[key] === 'undefined') { timeouts[key] = setTimeout(function () { delete timeouts[key]; fn.apply(null, args); }, timeout); } return function cancel () { if (timeouts[key]) { clearTimeout(timeouts[key]); delete timeouts[key]; return true; } return false; }; }; }; function defaultHash () { return Array.prototype.join.call(arguments, '::'); } },{}]},{},[1]);