UNPKG

sequence-viewer

Version:

A protein sequence viewer written in javascript

1,538 lines (1,265 loc) 525 kB
require=(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<r.length;o++)s(r[o]);return s})({"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/amdefine/amdefine.js":[function(require,module,exports){ (function (process,__filename){ /** vim: et:ts=4:sw=4:sts=4 * @license amdefine 1.0.0 Copyright (c) 2011-2015, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/amdefine for details */ /*jslint node: true */ /*global module, process */ 'use strict'; /** * Creates a define for node. * @param {Object} module the "module" object that is defined by Node for the * current module. * @param {Function} [requireFn]. Node's require function for the current module. * It only needs to be passed in Node versions before 0.5, when module.require * did not exist. * @returns {Function} a define function that is usable for the current node * module. */ function amdefine(module, requireFn) { 'use strict'; var defineCache = {}, loaderCache = {}, alreadyCalled = false, path = require('path'), makeRequire, stringRequire; /** * Trims the . and .. from an array of path segments. * It will keep a leading path segment if a .. will become * the first path segment, to help with module name lookups, * which act like paths, but can be remapped. But the end result, * all paths that use this function should look normalized. * NOTE: this method MODIFIES the input array. * @param {Array} ary the array of path segments. */ function trimDots(ary) { var i, part; for (i = 0; ary[i]; i+= 1) { part = ary[i]; if (part === '.') { ary.splice(i, 1); i -= 1; } else if (part === '..') { if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { //End of the line. Keep at least one non-dot //path segment at the front so it can be mapped //correctly to disk. Otherwise, there is likely //no path mapping for a path starting with '..'. //This can still fail, but catches the most reasonable //uses of .. break; } else if (i > 0) { ary.splice(i - 1, 2); i -= 2; } } } } function normalize(name, baseName) { var baseParts; //Adjust any relative paths. if (name && name.charAt(0) === '.') { //If have a base name, try to normalize against it, //otherwise, assume it is a top-level require that will //be relative to baseUrl in the end. if (baseName) { baseParts = baseName.split('/'); baseParts = baseParts.slice(0, baseParts.length - 1); baseParts = baseParts.concat(name.split('/')); trimDots(baseParts); name = baseParts.join('/'); } } return name; } /** * Create the normalize() function passed to a loader plugin's * normalize method. */ function makeNormalize(relName) { return function (name) { return normalize(name, relName); }; } function makeLoad(id) { function load(value) { loaderCache[id] = value; } load.fromText = function (id, text) { //This one is difficult because the text can/probably uses //define, and any relative paths and requires should be relative //to that id was it would be found on disk. But this would require //bootstrapping a module/require fairly deeply from node core. //Not sure how best to go about that yet. throw new Error('amdefine does not implement load.fromText'); }; return load; } makeRequire = function (systemRequire, exports, module, relId) { function amdRequire(deps, callback) { if (typeof deps === 'string') { //Synchronous, single module require('') return stringRequire(systemRequire, exports, module, deps, relId); } else { //Array of dependencies with a callback. //Convert the dependencies to modules. deps = deps.map(function (depName) { return stringRequire(systemRequire, exports, module, depName, relId); }); //Wait for next tick to call back the require call. if (callback) { process.nextTick(function () { callback.apply(null, deps); }); } } } amdRequire.toUrl = function (filePath) { if (filePath.indexOf('.') === 0) { return normalize(filePath, path.dirname(module.filename)); } else { return filePath; } }; return amdRequire; }; //Favor explicit value, passed in if the module wants to support Node 0.4. requireFn = requireFn || function req() { return module.require.apply(module, arguments); }; function runFactory(id, deps, factory) { var r, e, m, result; if (id) { e = loaderCache[id] = {}; m = { id: id, uri: __filename, exports: e }; r = makeRequire(requireFn, e, m, id); } else { //Only support one define call per file if (alreadyCalled) { throw new Error('amdefine with no module ID cannot be called more than once per file.'); } alreadyCalled = true; //Use the real variables from node //Use module.exports for exports, since //the exports in here is amdefine exports. e = module.exports; m = module; r = makeRequire(requireFn, e, m, module.id); } //If there are dependencies, they are strings, so need //to convert them to dependency values. if (deps) { deps = deps.map(function (depName) { return r(depName); }); } //Call the factory with the right dependencies. if (typeof factory === 'function') { result = factory.apply(m.exports, deps); } else { result = factory; } if (result !== undefined) { m.exports = result; if (id) { loaderCache[id] = m.exports; } } } stringRequire = function (systemRequire, exports, module, id, relId) { //Split the ID by a ! so that var index = id.indexOf('!'), originalId = id, prefix, plugin; if (index === -1) { id = normalize(id, relId); //Straight module lookup. If it is one of the special dependencies, //deal with it, otherwise, delegate to node. if (id === 'require') { return makeRequire(systemRequire, exports, module, relId); } else if (id === 'exports') { return exports; } else if (id === 'module') { return module; } else if (loaderCache.hasOwnProperty(id)) { return loaderCache[id]; } else if (defineCache[id]) { runFactory.apply(null, defineCache[id]); return loaderCache[id]; } else { if(systemRequire) { return systemRequire(originalId); } else { throw new Error('No module with ID: ' + id); } } } else { //There is a plugin in play. prefix = id.substring(0, index); id = id.substring(index + 1, id.length); plugin = stringRequire(systemRequire, exports, module, prefix, relId); if (plugin.normalize) { id = plugin.normalize(id, makeNormalize(relId)); } else { //Normalize the ID normally. id = normalize(id, relId); } if (loaderCache[id]) { return loaderCache[id]; } else { plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {}); return loaderCache[id]; } } }; //Create a define function specific to the module asking for amdefine. function define(id, deps, factory) { if (Array.isArray(id)) { factory = deps; deps = id; id = undefined; } else if (typeof id !== 'string') { factory = id; id = deps = undefined; } if (deps && !Array.isArray(deps)) { factory = deps; deps = undefined; } if (!deps) { deps = ['require', 'exports', 'module']; } //Set up properties for this module. If an ID, then use //internal cache. If no ID, then use the external variables //for this node module. if (id) { //Put the module in deep freeze until there is a //require call for it. defineCache[id] = [id, deps, factory]; } else { runFactory(id, deps, factory); } } //define.require, which has access to all the values in the //cache. Useful for AMD modules that all have IDs in the file, //but need to finally export a value to node based on one of those //IDs. define.require = function (id) { if (loaderCache[id]) { return loaderCache[id]; } if (defineCache[id]) { runFactory.apply(null, defineCache[id]); return loaderCache[id]; } }; define.amd = {}; return define; } module.exports = amdefine; }).call(this,require('_process'),"/node_modules/amdefine/amdefine.js") },{"_process":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/watchify/node_modules/process/browser.js","path":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/path-browserify/index.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/backbone-events-standalone/backbone-events-standalone.js":[function(require,module,exports){ /** * Standalone extraction of Backbone.Events, no external dependency required. * Degrades nicely when Backone/underscore are already available in the current * global context. * * Note that docs suggest to use underscore's `_.extend()` method to add Events * support to some given object. A `mixin()` method has been added to the Events * prototype to avoid using underscore for that sole purpose: * * var myEventEmitter = BackboneEvents.mixin({}); * * Or for a function constructor: * * function MyConstructor(){} * MyConstructor.prototype.foo = function(){} * BackboneEvents.mixin(MyConstructor.prototype); * * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. * (c) 2013 Nicolas Perriault */ /* global exports:true, define, module */ (function() { var root = this, nativeForEach = Array.prototype.forEach, hasOwnProperty = Object.prototype.hasOwnProperty, slice = Array.prototype.slice, idCounter = 0; // Returns a partial implementation matching the minimal API subset required // by Backbone.Events function miniscore() { return { keys: Object.keys || function (obj) { if (typeof obj !== "object" && typeof obj !== "function" || obj === null) { throw new TypeError("keys() called on a non-object"); } var key, keys = []; for (key in obj) { if (obj.hasOwnProperty(key)) { keys[keys.length] = key; } } return keys; }, uniqueId: function(prefix) { var id = ++idCounter + ''; return prefix ? prefix + id : id; }, has: function(obj, key) { return hasOwnProperty.call(obj, key); }, each: function(obj, iterator, context) { if (obj == null) return; if (nativeForEach && obj.forEach === nativeForEach) { obj.forEach(iterator, context); } else if (obj.length === +obj.length) { for (var i = 0, l = obj.length; i < l; i++) { iterator.call(context, obj[i], i, obj); } } else { for (var key in obj) { if (this.has(obj, key)) { iterator.call(context, obj[key], key, obj); } } } }, once: function(func) { var ran = false, memo; return function() { if (ran) return memo; ran = true; memo = func.apply(this, arguments); func = null; return memo; }; } }; } var _ = miniscore(), Events; // Backbone.Events // --------------- // A module that can be mixed in to *any object* in order to provide it with // custom events. You may bind with `on` or remove with `off` callback // functions to an event; `trigger`-ing an event fires all callbacks in // succession. // // var object = {}; // _.extend(object, Backbone.Events); // object.on('expand', function(){ alert('expanded'); }); // object.trigger('expand'); // Events = { // Bind an event to a `callback` function. Passing `"all"` will bind // the callback to all events fired. on: function(name, callback, context) { if (!eventsApi(this, 'on', name, [callback, context]) || !callback) return this; this._events || (this._events = {}); var events = this._events[name] || (this._events[name] = []); events.push({callback: callback, context: context, ctx: context || this}); return this; }, // Bind an event to only be triggered a single time. After the first time // the callback is invoked, it will be removed. once: function(name, callback, context) { if (!eventsApi(this, 'once', name, [callback, context]) || !callback) return this; var self = this; var once = _.once(function() { self.off(name, once); callback.apply(this, arguments); }); once._callback = callback; return this.on(name, once, context); }, // Remove one or many callbacks. If `context` is null, removes all // callbacks with that function. If `callback` is null, removes all // callbacks for the event. If `name` is null, removes all bound // callbacks for all events. off: function(name, callback, context) { var retain, ev, events, names, i, l, j, k; if (!this._events || !eventsApi(this, 'off', name, [callback, context])) return this; if (!name && !callback && !context) { this._events = {}; return this; } names = name ? [name] : _.keys(this._events); for (i = 0, l = names.length; i < l; i++) { name = names[i]; if (events = this._events[name]) { this._events[name] = retain = []; if (callback || context) { for (j = 0, k = events.length; j < k; j++) { ev = events[j]; if ((callback && callback !== ev.callback && callback !== ev.callback._callback) || (context && context !== ev.context)) { retain.push(ev); } } } if (!retain.length) delete this._events[name]; } } return this; }, // Trigger one or many events, firing all bound callbacks. Callbacks are // passed the same arguments as `trigger` is, apart from the event name // (unless you're listening on `"all"`, which will cause your callback to // receive the true name of the event as the first argument). trigger: function(name) { if (!this._events) return this; var args = slice.call(arguments, 1); if (!eventsApi(this, 'trigger', name, args)) return this; var events = this._events[name]; var allEvents = this._events.all; if (events) triggerEvents(events, args); if (allEvents) triggerEvents(allEvents, arguments); return this; }, // Tell this object to stop listening to either specific events ... or // to every object it's currently listening to. stopListening: function(obj, name, callback) { var listeners = this._listeners; if (!listeners) return this; var deleteListener = !name && !callback; if (typeof name === 'object') callback = this; if (obj) (listeners = {})[obj._listenerId] = obj; for (var id in listeners) { listeners[id].off(name, callback, this); if (deleteListener) delete this._listeners[id]; } return this; } }; // Regular expression used to split event strings. var eventSplitter = /\s+/; // Implement fancy features of the Events API such as multiple event // names `"change blur"` and jQuery-style event maps `{change: action}` // in terms of the existing API. var eventsApi = function(obj, action, name, rest) { if (!name) return true; // Handle event maps. if (typeof name === 'object') { for (var key in name) { obj[action].apply(obj, [key, name[key]].concat(rest)); } return false; } // Handle space separated event names. if (eventSplitter.test(name)) { var names = name.split(eventSplitter); for (var i = 0, l = names.length; i < l; i++) { obj[action].apply(obj, [names[i]].concat(rest)); } return false; } return true; }; // A difficult-to-believe, but optimized internal dispatch function for // triggering events. Tries to keep the usual cases speedy (most internal // Backbone events have 3 arguments). var triggerEvents = function(events, args) { var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2]; switch (args.length) { case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return; case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return; case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return; case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return; default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); } }; var listenMethods = {listenTo: 'on', listenToOnce: 'once'}; // Inversion-of-control versions of `on` and `once`. Tell *this* object to // listen to an event in another object ... keeping track of what it's // listening to. _.each(listenMethods, function(implementation, method) { Events[method] = function(obj, name, callback) { var listeners = this._listeners || (this._listeners = {}); var id = obj._listenerId || (obj._listenerId = _.uniqueId('l')); listeners[id] = obj; if (typeof name === 'object') callback = this; obj[implementation](name, callback, this); return this; }; }); // Aliases for backwards compatibility. Events.bind = Events.on; Events.unbind = Events.off; // Mixin utility Events.mixin = function(proto) { var exports = ['on', 'once', 'off', 'trigger', 'stopListening', 'listenTo', 'listenToOnce', 'bind', 'unbind']; _.each(exports, function(name) { proto[name] = this[name]; }, this); return proto; }; // Export Events as BackboneEvents depending on current context if (typeof exports !== 'undefined') { if (typeof module !== 'undefined' && module.exports) { exports = module.exports = Events; } exports.BackboneEvents = Events; }else if (typeof define === "function" && typeof define.amd == "object") { define(function() { return Events; }); } else { root.BackboneEvents = Events; } })(this); },{}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/backbone-events-standalone/index.js":[function(require,module,exports){ module.exports = require('./backbone-events-standalone'); },{"./backbone-events-standalone":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/backbone-events-standalone/backbone-events-standalone.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/biojs-events/index.js":[function(require,module,exports){ var events = require("backbone-events-standalone"); events.onAll = function(callback,context){ this.on("all", callback,context); return this; }; // Mixin utility events.oldMixin = events.mixin; events.mixin = function(proto) { events.oldMixin(proto); // add custom onAll var exports = ['onAll']; for(var i=0; i < exports.length;i++){ var name = exports[i]; proto[name] = this[name]; } return proto; }; module.exports = events; },{"backbone-events-standalone":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/backbone-events-standalone/index.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars.js":[function(require,module,exports){ (function (global){ 'use strict'; var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; exports.__esModule = true; var _Handlebars = require('./handlebars.runtime'); var _Handlebars2 = _interopRequireWildcard(_Handlebars); // Compiler imports var _AST = require('./handlebars/compiler/ast'); var _AST2 = _interopRequireWildcard(_AST); var _Parser$parse = require('./handlebars/compiler/base'); var _Compiler$compile$precompile = require('./handlebars/compiler/compiler'); var _JavaScriptCompiler = require('./handlebars/compiler/javascript-compiler'); var _JavaScriptCompiler2 = _interopRequireWildcard(_JavaScriptCompiler); var _Visitor = require('./handlebars/compiler/visitor'); var _Visitor2 = _interopRequireWildcard(_Visitor); var _create = _Handlebars2['default'].create; function create() { var hb = _create(); hb.compile = function (input, options) { return _Compiler$compile$precompile.compile(input, options, hb); }; hb.precompile = function (input, options) { return _Compiler$compile$precompile.precompile(input, options, hb); }; hb.AST = _AST2['default']; hb.Compiler = _Compiler$compile$precompile.Compiler; hb.JavaScriptCompiler = _JavaScriptCompiler2['default']; hb.Parser = _Parser$parse.parser; hb.parse = _Parser$parse.parse; return hb; } var inst = create(); inst.create = create; inst.Visitor = _Visitor2['default']; /*jshint -W040 */ /* istanbul ignore next */ var $Handlebars = global.Handlebars; /* istanbul ignore next */ inst.noConflict = function () { if (global.Handlebars === inst) { global.Handlebars = $Handlebars; } }; inst['default'] = inst; exports['default'] = inst; module.exports = exports['default']; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./handlebars.runtime":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars.runtime.js","./handlebars/compiler/ast":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","./handlebars/compiler/base":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js","./handlebars/compiler/compiler":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js","./handlebars/compiler/javascript-compiler":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js","./handlebars/compiler/visitor":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars.runtime.js":[function(require,module,exports){ (function (global){ 'use strict'; var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; exports.__esModule = true; /*global window */ var _import = require('./handlebars/base'); var base = _interopRequireWildcard(_import); // Each of these augment the Handlebars object. No need to setup here. // (This is done to easily share code between commonjs and browse envs) var _SafeString = require('./handlebars/safe-string'); var _SafeString2 = _interopRequireWildcard(_SafeString); var _Exception = require('./handlebars/exception'); var _Exception2 = _interopRequireWildcard(_Exception); var _import2 = require('./handlebars/utils'); var Utils = _interopRequireWildcard(_import2); var _import3 = require('./handlebars/runtime'); var runtime = _interopRequireWildcard(_import3); // For compatibility and usage outside of module systems, make the Handlebars object a namespace function create() { var hb = new base.HandlebarsEnvironment(); Utils.extend(hb, base); hb.SafeString = _SafeString2['default']; hb.Exception = _Exception2['default']; hb.Utils = Utils; hb.escapeExpression = Utils.escapeExpression; hb.VM = runtime; hb.template = function (spec) { return runtime.template(spec, hb); }; return hb; } var Handlebars = create(); Handlebars.create = create; /*jshint -W040 */ /* istanbul ignore next */ var root = typeof global !== 'undefined' ? global : window, $Handlebars = root.Handlebars; /* istanbul ignore next */ Handlebars.noConflict = function () { if (root.Handlebars === Handlebars) { root.Handlebars = $Handlebars; } }; Handlebars['default'] = Handlebars; exports['default'] = Handlebars; module.exports = exports['default']; }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./handlebars/base":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/base.js","./handlebars/exception":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/exception.js","./handlebars/runtime":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/runtime.js","./handlebars/safe-string":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/safe-string.js","./handlebars/utils":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/utils.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/base.js":[function(require,module,exports){ 'use strict'; var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; exports.__esModule = true; exports.HandlebarsEnvironment = HandlebarsEnvironment; exports.createFrame = createFrame; var _import = require('./utils'); var Utils = _interopRequireWildcard(_import); var _Exception = require('./exception'); var _Exception2 = _interopRequireWildcard(_Exception); var VERSION = '3.0.1'; exports.VERSION = VERSION; var COMPILER_REVISION = 6; exports.COMPILER_REVISION = COMPILER_REVISION; var REVISION_CHANGES = { 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it 2: '== 1.0.0-rc.3', 3: '== 1.0.0-rc.4', 4: '== 1.x.x', 5: '== 2.0.0-alpha.x', 6: '>= 2.0.0-beta.1' }; exports.REVISION_CHANGES = REVISION_CHANGES; var isArray = Utils.isArray, isFunction = Utils.isFunction, toString = Utils.toString, objectType = '[object Object]'; function HandlebarsEnvironment(helpers, partials) { this.helpers = helpers || {}; this.partials = partials || {}; registerDefaultHelpers(this); } HandlebarsEnvironment.prototype = { constructor: HandlebarsEnvironment, logger: logger, log: log, registerHelper: function registerHelper(name, fn) { if (toString.call(name) === objectType) { if (fn) { throw new _Exception2['default']('Arg not supported with multiple helpers'); } Utils.extend(this.helpers, name); } else { this.helpers[name] = fn; } }, unregisterHelper: function unregisterHelper(name) { delete this.helpers[name]; }, registerPartial: function registerPartial(name, partial) { if (toString.call(name) === objectType) { Utils.extend(this.partials, name); } else { if (typeof partial === 'undefined') { throw new _Exception2['default']('Attempting to register a partial as undefined'); } this.partials[name] = partial; } }, unregisterPartial: function unregisterPartial(name) { delete this.partials[name]; } }; function registerDefaultHelpers(instance) { instance.registerHelper('helperMissing', function () { if (arguments.length === 1) { // A missing field in a {{foo}} constuct. return undefined; } else { // Someone is actually trying to call something, blow up. throw new _Exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); } }); instance.registerHelper('blockHelperMissing', function (context, options) { var inverse = options.inverse, fn = options.fn; if (context === true) { return fn(this); } else if (context === false || context == null) { return inverse(this); } else if (isArray(context)) { if (context.length > 0) { if (options.ids) { options.ids = [options.name]; } return instance.helpers.each(context, options); } else { return inverse(this); } } else { if (options.data && options.ids) { var data = createFrame(options.data); data.contextPath = Utils.appendContextPath(options.data.contextPath, options.name); options = { data: data }; } return fn(context, options); } }); instance.registerHelper('each', function (context, options) { if (!options) { throw new _Exception2['default']('Must pass iterator to #each'); } var fn = options.fn, inverse = options.inverse, i = 0, ret = '', data = undefined, contextPath = undefined; if (options.data && options.ids) { contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; } if (isFunction(context)) { context = context.call(this); } if (options.data) { data = createFrame(options.data); } function execIteration(field, index, last) { if (data) { data.key = field; data.index = index; data.first = index === 0; data.last = !!last; if (contextPath) { data.contextPath = contextPath + field; } } ret = ret + fn(context[field], { data: data, blockParams: Utils.blockParams([context[field], field], [contextPath + field, null]) }); } if (context && typeof context === 'object') { if (isArray(context)) { for (var j = context.length; i < j; i++) { execIteration(i, i, i === context.length - 1); } } else { var priorKey = undefined; for (var key in context) { if (context.hasOwnProperty(key)) { // We're running the iterations one step out of sync so we can detect // the last iteration without have to scan the object twice and create // an itermediate keys array. if (priorKey) { execIteration(priorKey, i - 1); } priorKey = key; i++; } } if (priorKey) { execIteration(priorKey, i - 1, true); } } } if (i === 0) { ret = inverse(this); } return ret; }); instance.registerHelper('if', function (conditional, options) { if (isFunction(conditional)) { conditional = conditional.call(this); } // Default behavior is to render the positive path if the value is truthy and not empty. // The `includeZero` option may be set to treat the condtional as purely not empty based on the // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. if (!options.hash.includeZero && !conditional || Utils.isEmpty(conditional)) { return options.inverse(this); } else { return options.fn(this); } }); instance.registerHelper('unless', function (conditional, options) { return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); }); instance.registerHelper('with', function (context, options) { if (isFunction(context)) { context = context.call(this); } var fn = options.fn; if (!Utils.isEmpty(context)) { if (options.data && options.ids) { var data = createFrame(options.data); data.contextPath = Utils.appendContextPath(options.data.contextPath, options.ids[0]); options = { data: data }; } return fn(context, options); } else { return options.inverse(this); } }); instance.registerHelper('log', function (message, options) { var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1; instance.log(level, message); }); instance.registerHelper('lookup', function (obj, field) { return obj && obj[field]; }); } var logger = { methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' }, // State enum DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, level: 1, // Can be overridden in the host environment log: function log(level, message) { if (typeof console !== 'undefined' && logger.level <= level) { var method = logger.methodMap[level]; (console[method] || console.log).call(console, message); // eslint-disable-line no-console } } }; exports.logger = logger; var log = logger.log; exports.log = log; function createFrame(object) { var frame = Utils.extend({}, object); frame._parent = object; return frame; } /* [args, ]options */ },{"./exception":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/exception.js","./utils":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/utils.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js":[function(require,module,exports){ 'use strict'; exports.__esModule = true; var AST = { Program: function Program(statements, blockParams, strip, locInfo) { this.loc = locInfo; this.type = 'Program'; this.body = statements; this.blockParams = blockParams; this.strip = strip; }, MustacheStatement: function MustacheStatement(path, params, hash, escaped, strip, locInfo) { this.loc = locInfo; this.type = 'MustacheStatement'; this.path = path; this.params = params || []; this.hash = hash; this.escaped = escaped; this.strip = strip; }, BlockStatement: function BlockStatement(path, params, hash, program, inverse, openStrip, inverseStrip, closeStrip, locInfo) { this.loc = locInfo; this.type = 'BlockStatement'; this.path = path; this.params = params || []; this.hash = hash; this.program = program; this.inverse = inverse; this.openStrip = openStrip; this.inverseStrip = inverseStrip; this.closeStrip = closeStrip; }, PartialStatement: function PartialStatement(name, params, hash, strip, locInfo) { this.loc = locInfo; this.type = 'PartialStatement'; this.name = name; this.params = params || []; this.hash = hash; this.indent = ''; this.strip = strip; }, ContentStatement: function ContentStatement(string, locInfo) { this.loc = locInfo; this.type = 'ContentStatement'; this.original = this.value = string; }, CommentStatement: function CommentStatement(comment, strip, locInfo) { this.loc = locInfo; this.type = 'CommentStatement'; this.value = comment; this.strip = strip; }, SubExpression: function SubExpression(path, params, hash, locInfo) { this.loc = locInfo; this.type = 'SubExpression'; this.path = path; this.params = params || []; this.hash = hash; }, PathExpression: function PathExpression(data, depth, parts, original, locInfo) { this.loc = locInfo; this.type = 'PathExpression'; this.data = data; this.original = original; this.parts = parts; this.depth = depth; }, StringLiteral: function StringLiteral(string, locInfo) { this.loc = locInfo; this.type = 'StringLiteral'; this.original = this.value = string; }, NumberLiteral: function NumberLiteral(number, locInfo) { this.loc = locInfo; this.type = 'NumberLiteral'; this.original = this.value = Number(number); }, BooleanLiteral: function BooleanLiteral(bool, locInfo) { this.loc = locInfo; this.type = 'BooleanLiteral'; this.original = this.value = bool === 'true'; }, UndefinedLiteral: function UndefinedLiteral(locInfo) { this.loc = locInfo; this.type = 'UndefinedLiteral'; this.original = this.value = undefined; }, NullLiteral: function NullLiteral(locInfo) { this.loc = locInfo; this.type = 'NullLiteral'; this.original = this.value = null; }, Hash: function Hash(pairs, locInfo) { this.loc = locInfo; this.type = 'Hash'; this.pairs = pairs; }, HashPair: function HashPair(key, value, locInfo) { this.loc = locInfo; this.type = 'HashPair'; this.key = key; this.value = value; }, // Public API used to evaluate derived attributes regarding AST nodes helpers: { // a mustache is definitely a helper if: // * it is an eligible helper, and // * it has at least one parameter or hash segment helperExpression: function helperExpression(node) { return !!(node.type === 'SubExpression' || node.params.length || node.hash); }, scopedId: function scopedId(path) { return /^\.|this\b/.test(path.original); }, // an ID is simple if it only has one part, and that part is not // `..` or `this`. simpleId: function simpleId(path) { return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; } } }; // Must be exported as an object rather than the root of the module as the jison lexer // must modify the object to operate properly. exports['default'] = AST; module.exports = exports['default']; },{}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js":[function(require,module,exports){ 'use strict'; var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; exports.__esModule = true; exports.parse = parse; var _parser = require('./parser'); var _parser2 = _interopRequireWildcard(_parser); var _AST = require('./ast'); var _AST2 = _interopRequireWildcard(_AST); var _WhitespaceControl = require('./whitespace-control'); var _WhitespaceControl2 = _interopRequireWildcard(_WhitespaceControl); var _import = require('./helpers'); var Helpers = _interopRequireWildcard(_import); var _extend = require('../utils'); exports.parser = _parser2['default']; var yy = {}; _extend.extend(yy, Helpers, _AST2['default']); function parse(input, options) { // Just return if an already-compiled AST was passed in. if (input.type === 'Program') { return input; } _parser2['default'].yy = yy; // Altering the shared object here, but this is ok as parser is a sync operation yy.locInfo = function (locInfo) { return new yy.SourceLocation(options && options.srcName, locInfo); }; var strip = new _WhitespaceControl2['default'](); return strip.accept(_parser2['default'].parse(input)); } },{"../utils":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/utils.js","./ast":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js","./helpers":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js","./parser":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js","./whitespace-control":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js":[function(require,module,exports){ 'use strict'; exports.__esModule = true; /*global define */ var _isArray = require('../utils'); var SourceNode = undefined; try { /* istanbul ignore next */ if (typeof define !== 'function' || !define.amd) { // We don't support this in AMD environments. For these environments, we asusme that // they are running on the browser and thus have no need for the source-map library. var SourceMap = require('source-map'); SourceNode = SourceMap.SourceNode; } } catch (err) {} /* istanbul ignore if: tested but not covered in istanbul due to dist build */ if (!SourceNode) { SourceNode = function (line, column, srcFile, chunks) { this.src = ''; if (chunks) { this.add(chunks); } }; /* istanbul ignore next */ SourceNode.prototype = { add: function add(chunks) { if (_isArray.isArray(chunks)) { chunks = chunks.join(''); } this.src += chunks; }, prepend: function prepend(chunks) { if (_isArray.isArray(chunks)) { chunks = chunks.join(''); } this.src = chunks + this.src; }, toStringWithSourceMap: function toStringWithSourceMap() { return { code: this.toString() }; }, toString: function toString() { return this.src; } }; } function castChunk(chunk, codeGen, loc) { if (_isArray.isArray(chunk)) { var ret = []; for (var i = 0, len = chunk.length; i < len; i++) { ret.push(codeGen.wrap(chunk[i], loc)); } return ret; } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { // Handle primitives that the SourceNode will throw up on return chunk + ''; } return chunk; } function CodeGen(srcFile) { this.srcFile = srcFile; this.source = []; } CodeGen.prototype = { prepend: function prepend(source, loc) { this.source.unshift(this.wrap(source, loc)); }, push: function push(source, loc) { this.source.push(this.wrap(source, loc)); }, merge: function merge() { var source = this.empty(); this.each(function (line) { source.add([' ', line, '\n']); }); return source; }, each: function each(iter) { for (var i = 0, len = this.source.length; i < len; i++) { iter(this.source[i]); } }, empty: function empty() { var loc = arguments[0] === undefined ? this.currentLocation || { start: {} } : arguments[0]; return new SourceNode(loc.start.line, loc.start.column, this.srcFile); }, wrap: function wrap(chunk) { var loc = arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; if (chunk instanceof SourceNode) { return chunk; } chunk = castChunk(chunk, this, loc); return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); }, functionCall: function functionCall(fn, type, params) { params = this.generateList(params); return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); }, quotedString: function quotedString(str) { return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 .replace(/\u2029/g, '\\u2029') + '"'; }, objectLiteral: function objectLiteral(obj) { var pairs = []; for (var key in obj) { if (obj.hasOwnProperty(key)) { var value = castChunk(obj[key], this); if (value !== 'undefined') { pairs.push([this.quotedString(key), ':', value]); } } } var ret = this.generateList(pairs); ret.prepend('{'); ret.add('}'); return ret; }, generateList: function generateList(entries, loc) { var ret = this.empty(loc); for (var i = 0, len = entries.length; i < len; i++) { if (i) { ret.add(','); } ret.add(castChunk(entries[i], this, loc)); } return ret; }, generateArray: function generateArray(entries, loc) { var ret = this.generateList(entries, loc); ret.prepend('['); ret.add(']'); return ret; } }; exports['default'] = CodeGen; module.exports = exports['default']; /* NOP */ },{"../utils":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/utils.js","source-map":"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/source-map/lib/source-map.js"}],"/Users/mathieu/Documents/work-space/sequence-viewer/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js":[function(require,module,exports){ 'use strict'; var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }; exports.__esModule = true; exports.Compiler = Compiler; exports.precompile = precompile; exports.compile = compile; var _Exception = require('../exception'); var _Exception2 = _interopRequireWildcard(_Exception); var _isArray$indexOf = require('../utils'); var _AST = require('./ast'); var _AST2 = _interopRequireWildcard(_AST); var slice = [].slice; function Compiler() {} // the foundHelper register will disambiguate helper lookup from finding a // function in a context. This is necessary for mustache compatibility, which // requires that context functions in blocks are evaluated by blockHelperMissing, // and then proceed as if the resulting value was provided to blockHelperMissing. Compiler.prototype = { compiler: Compiler, equals: function equals(other) { var len = this.opcodes.length; if (other.opcodes.length !== len) { return false; } for (var i = 0; i < len; i++) { var opcode = this.opcodes[i], otherOpcode = other.opcodes[i]; if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { return false; } } // We know that length is the same between the two arrays because they are directly tied // to the opcode behavior above. len = this.children.length; for (var i = 0; i < len; i++) { if (!this.children[i].equals(other.children[i])) { return false; } } return true; }, guid: 0, compile: function compile(program, options) { this.sourceNode = []; this.opcodes = []; this.children = []; this.options = options; this.stringParams = options.stringParams; this.trackIds = options.trackIds; options.blockParams = options.blockParams || []; // These changes will propagate to the other compiler components var knownHelpers = options.knownHelpers; options.knownHelpers = { helperMissing: true, blockHelperMissing: true, each: true, 'if': true, unless: true, 'with': true, log: true, lookup: true }; if (knownHelpers) { for (var _name in knownHelpers) { if (_name in knownHelpers) { options.knownHelpers[_name] = knownHelpers[_name]; } } } return this.accept(program); }, compileProgram: function compileProgram(program) { var childCompiler = new this.compiler(), // eslint-disable-line new-cap result = childCompiler.compile(program, this.options), guid = this.guid++; this.usePartial = this.usePartial || result.usePartial; this.children[guid] = result; this.useDepths = this.useDepths || result.useDepths; return guid; }, accept: function accept(node) { this.sourceNode.unshift(node); var ret = this[node.type](node); this.sourceNode.shift(); return ret; }, Program: function Program(program) { this.options.blockParams.unshift(program.blockParams); var body = program.body, bodyLength = body.length; for (var i = 0; i < bodyLength; i++) { this.accept(body[i]); } this.options.blockParams.shift(); this.isSimple = bodyLength === 1; this.blockParams = program.blockParams ? program.blockParams.length : 0; return this; }, BlockStatement: function BlockStatement(block) { transformLiteralToPath(block); var program = block.program, inverse = block.inverse; program = program && this.compileProgram(program); inverse = inverse && this.compileProgram(inverse); var type = this.classifySexpr(block); if (type === 'helper') { this.helperSexpr(block, program, inverse); } else if (type === 'simple') { this.simpleSexpr(block); // now that the simple mustache is resolved, we need to // evaluate it by executing `blockHelperMissing` this.opcode('pushProgram', program); this.opcode('pushProgram'