Commit 4d2c807c authored by JC Brand's avatar JC Brand

Fixes #220. Enable usage of both `_` and `fp` in non-AMD case

parent 93e67567
...@@ -69,7 +69,9 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -69,7 +69,9 @@ return /******/ (function(modules) { // webpackBootstrap
} }
if (typeof _ == 'function' && typeof _.runInContext == 'function') { if (typeof _ == 'function' && typeof _.runInContext == 'function') {
_ = browserConvert(_.runInContext()); // XXX: Customization in order to be able to run both _ and fp in the
// non-AMD usecase.
fp = browserConvert(_.runInContext());
} }
module.exports = browserConvert; module.exports = browserConvert;
...@@ -1037,4 +1039,4 @@ return /******/ (function(modules) { // webpackBootstrap ...@@ -1037,4 +1039,4 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ } /***/ }
/******/ ]) /******/ ])
}); });
; ;
\ No newline at end of file
...@@ -52,9 +52,10 @@ ...@@ -52,9 +52,10 @@
<script type="text/javascript" src="../dist/locales.js"></script> <script type="text/javascript" src="../dist/locales.js"></script>
<!-- END I18N --> <!-- END I18N -->
<script type="text/javascript" src="../node_modules/awesomplete/awesomplete.js"></script> <script type="text/javascript" src="../node_modules/awesomplete-avoid-xss/awesomplete.js"></script>
<script type="text/javascript" src="../node_modules/moment/min/moment-with-locales.js"></script> <script type="text/javascript" src="../node_modules/moment/min/moment-with-locales.js"></script>
<script type="text/javascript" src="../3rdparty/lodash.fp.js"></script>
<script src="../dist/converse-no-dependencies.js"></script> <script src="../dist/converse-no-dependencies.js"></script>
</head> </head>
<body id="page-top" data-spy="scroll" data-target=".navbar-custom"> <body id="page-top" data-spy="scroll" data-target=".navbar-custom">
...@@ -80,16 +81,14 @@ ...@@ -80,16 +81,14 @@
</body> </body>
<script> <script>
require(['converse'], function (converse) { converse.initialize({
converse.initialize({ bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes
bosh_service_url: 'https://conversejs.org/http-bind/', // Please use this connection manager only for testing purposes i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported
i18n: locales.en, // Refer to ./locale/locales.js to see which locales are supported prebind: false,
prebind: false, show_controlbox_by_default: true,
show_controlbox_by_default: true, debug: true,
debug: true, roster_groups: true,
roster_groups: true, keepalive: true
keepalive: true
});
}); });
</script> </script>
</html> </html>
...@@ -3761,1046 +3761,6 @@ return Promise$3; ...@@ -3761,1046 +3761,6 @@ return Promise$3;
//# sourceMappingURL=es6-promise.auto.map //# sourceMappingURL=es6-promise.auto.map
; ;
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define('lodash.converter',[], factory);
else if(typeof exports === 'object')
exports["fp"] = factory();
else
root["fp"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
var baseConvert = __webpack_require__(1);
/**
* Converts `lodash` to an immutable auto-curried iteratee-first data-last
* version with conversion `options` applied.
*
* @param {Function} lodash The lodash function to convert.
* @param {Object} [options] The options object. See `baseConvert` for more details.
* @returns {Function} Returns the converted `lodash`.
*/
function browserConvert(lodash, options) {
return baseConvert(lodash, lodash, options);
}
if (typeof _ == 'function' && typeof _.runInContext == 'function') {
_ = browserConvert(_.runInContext());
}
module.exports = browserConvert;
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
var mapping = __webpack_require__(2),
fallbackHolder = __webpack_require__(3);
/** Built-in value reference. */
var push = Array.prototype.push;
/**
* Creates a function, with an arity of `n`, that invokes `func` with the
* arguments it receives.
*
* @private
* @param {Function} func The function to wrap.
* @param {number} n The arity of the new function.
* @returns {Function} Returns the new function.
*/
function baseArity(func, n) {
return n == 2
? function(a, b) { return func.apply(undefined, arguments); }
: function(a) { return func.apply(undefined, arguments); };
}
/**
* Creates a function that invokes `func`, with up to `n` arguments, ignoring
* any additional arguments.
*
* @private
* @param {Function} func The function to cap arguments for.
* @param {number} n The arity cap.
* @returns {Function} Returns the new function.
*/
function baseAry(func, n) {
return n == 2
? function(a, b) { return func(a, b); }
: function(a) { return func(a); };
}
/**
* Creates a clone of `array`.
*
* @private
* @param {Array} array The array to clone.
* @returns {Array} Returns the cloned array.
*/
function cloneArray(array) {
var length = array ? array.length : 0,
result = Array(length);
while (length--) {
result[length] = array[length];
}
return result;
}
/**
* Creates a function that clones a given object using the assignment `func`.
*
* @private
* @param {Function} func The assignment function.
* @returns {Function} Returns the new cloner function.
*/
function createCloner(func) {
return function(object) {
return func({}, object);
};
}
/**
* A specialized version of `_.spread` which flattens the spread array into
* the arguments of the invoked `func`.
*
* @private
* @param {Function} func The function to spread arguments over.
* @param {number} start The start position of the spread.
* @returns {Function} Returns the new function.
*/
function flatSpread(func, start) {
return function() {
var length = arguments.length,
lastIndex = length - 1,
args = Array(length);
while (length--) {
args[length] = arguments[length];
}
var array = args[start],
otherArgs = args.slice(0, start);
if (array) {
push.apply(otherArgs, array);
}
if (start != lastIndex) {
push.apply(otherArgs, args.slice(start + 1));
}
return func.apply(this, otherArgs);
};
}
/**
* Creates a function that wraps `func` and uses `cloner` to clone the first
* argument it receives.
*
* @private
* @param {Function} func The function to wrap.
* @param {Function} cloner The function to clone arguments.
* @returns {Function} Returns the new immutable function.
*/
function wrapImmutable(func, cloner) {
return function() {
var length = arguments.length;
if (!length) {
return;
}
var args = Array(length);
while (length--) {
args[length] = arguments[length];
}
var result = args[0] = cloner.apply(undefined, args);
func.apply(undefined, args);
return result;
};
}
/**
* The base implementation of `convert` which accepts a `util` object of methods
* required to perform conversions.
*
* @param {Object} util The util object.
* @param {string} name The name of the function to convert.
* @param {Function} func The function to convert.
* @param {Object} [options] The options object.
* @param {boolean} [options.cap=true] Specify capping iteratee arguments.
* @param {boolean} [options.curry=true] Specify currying.
* @param {boolean} [options.fixed=true] Specify fixed arity.
* @param {boolean} [options.immutable=true] Specify immutable operations.
* @param {boolean} [options.rearg=true] Specify rearranging arguments.
* @returns {Function|Object} Returns the converted function or object.
*/
function baseConvert(util, name, func, options) {
var setPlaceholder,
isLib = typeof name == 'function',
isObj = name === Object(name);
if (isObj) {
options = func;
func = name;
name = undefined;
}
if (func == null) {
throw new TypeError;
}
options || (options = {});
var config = {
'cap': 'cap' in options ? options.cap : true,
'curry': 'curry' in options ? options.curry : true,
'fixed': 'fixed' in options ? options.fixed : true,
'immutable': 'immutable' in options ? options.immutable : true,
'rearg': 'rearg' in options ? options.rearg : true
};
var forceCurry = ('curry' in options) && options.curry,
forceFixed = ('fixed' in options) && options.fixed,
forceRearg = ('rearg' in options) && options.rearg,
placeholder = isLib ? func : fallbackHolder,
pristine = isLib ? func.runInContext() : undefined;
var helpers = isLib ? func : {
'ary': util.ary,
'assign': util.assign,
'clone': util.clone,
'curry': util.curry,
'forEach': util.forEach,
'isArray': util.isArray,
'isFunction': util.isFunction,
'iteratee': util.iteratee,
'keys': util.keys,
'rearg': util.rearg,
'toInteger': util.toInteger,
'toPath': util.toPath
};
var ary = helpers.ary,
assign = helpers.assign,
clone = helpers.clone,
curry = helpers.curry,
each = helpers.forEach,
isArray = helpers.isArray,
isFunction = helpers.isFunction,
keys = helpers.keys,
rearg = helpers.rearg,
toInteger = helpers.toInteger,
toPath = helpers.toPath;
var aryMethodKeys = keys(mapping.aryMethod);
var wrappers = {
'castArray': function(castArray) {
return function() {
var value = arguments[0];
return isArray(value)
? castArray(cloneArray(value))
: castArray.apply(undefined, arguments);
};
},
'iteratee': function(iteratee) {
return function() {
var func = arguments[0],
arity = arguments[1],
result = iteratee(func, arity),
length = result.length;
if (config.cap && typeof arity == 'number') {
arity = arity > 2 ? (arity - 2) : 1;
return (length && length <= arity) ? result : baseAry(result, arity);
}
return result;
};
},
'mixin': function(mixin) {
return function(source) {
var func = this;
if (!isFunction(func)) {
return mixin(func, Object(source));
}
var pairs = [];
each(keys(source), function(key) {
if (isFunction(source[key])) {
pairs.push([key, func.prototype[key]]);
}
});
mixin(func, Object(source));
each(pairs, function(pair) {
var value = pair[1];
if (isFunction(value)) {
func.prototype[pair[0]] = value;
} else {
delete func.prototype[pair[0]];
}
});
return func;
};
},
'nthArg': function(nthArg) {
return function(n) {
var arity = n < 0 ? 1 : (toInteger(n) + 1);
return curry(nthArg(n), arity);
};
},
'rearg': function(rearg) {
return function(func, indexes) {
var arity = indexes ? indexes.length : 0;
return curry(rearg(func, indexes), arity);
};
},
'runInContext': function(runInContext) {
return function(context) {
return baseConvert(util, runInContext(context), options);
};
}
};
/*--------------------------------------------------------------------------*/
/**
* Casts `func` to a function with an arity capped iteratee if needed.
*
* @private
* @param {string} name The name of the function to inspect.
* @param {Function} func The function to inspect.
* @returns {Function} Returns the cast function.
*/
function castCap(name, func) {
if (config.cap) {
var indexes = mapping.iterateeRearg[name];
if (indexes) {
return iterateeRearg(func, indexes);
}
var n = !isLib && mapping.iterateeAry[name];
if (n) {
return iterateeAry(func, n);
}
}
return func;
}
/**
* Casts `func` to a curried function if needed.
*
* @private
* @param {string} name The name of the function to inspect.
* @param {Function} func The function to inspect.
* @param {number} n The arity of `func`.
* @returns {Function} Returns the cast function.
*/
function castCurry(name, func, n) {
return (forceCurry || (config.curry && n > 1))
? curry(func, n)
: func;
}
/**
* Casts `func` to a fixed arity function if needed.
*
* @private
* @param {string} name The name of the function to inspect.
* @param {Function} func The function to inspect.
* @param {number} n The arity cap.
* @returns {Function} Returns the cast function.
*/
function castFixed(name, func, n) {
if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {
var data = mapping.methodSpread[name],
start = data && data.start;
return start === undefined ? ary(func, n) : flatSpread(func, start);
}
return func;
}
/**
* Casts `func` to an rearged function if needed.
*
* @private
* @param {string} name The name of the function to inspect.
* @param {Function} func The function to inspect.
* @param {number} n The arity of `func`.
* @returns {Function} Returns the cast function.
*/
function castRearg(name, func, n) {
return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))
? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])
: func;
}
/**
* Creates a clone of `object` by `path`.
*
* @private
* @param {Object} object The object to clone.
* @param {Array|string} path The path to clone by.
* @returns {Object} Returns the cloned object.
*/
function cloneByPath(object, path) {
path = toPath(path);
var index = -1,
length = path.length,
lastIndex = length - 1,
result = clone(Object(object)),
nested = result;
while (nested != null && ++index < length) {
var key = path[index],
value = nested[key];
if (value != null) {
nested[path[index]] = clone(index == lastIndex ? value : Object(value));
}
nested = nested[key];
}
return result;
}
/**
* Converts `lodash` to an immutable auto-curried iteratee-first data-last
* version with conversion `options` applied.
*
* @param {Object} [options] The options object. See `baseConvert` for more details.
* @returns {Function} Returns the converted `lodash`.
*/
function convertLib(options) {
return _.runInContext.convert(options)(undefined);
}
/**
* Create a converter function for `func` of `name`.
*
* @param {string} name The name of the function to convert.
* @param {Function} func The function to convert.
* @returns {Function} Returns the new converter function.
*/
function createConverter(name, func) {
var realName = mapping.aliasToReal[name] || name,
methodName = mapping.remap[realName] || realName,
oldOptions = options;
return function(options) {
var newUtil = isLib ? pristine : helpers,
newFunc = isLib ? pristine[methodName] : func,
newOptions = assign(assign({}, oldOptions), options);
return baseConvert(newUtil, realName, newFunc, newOptions);
};
}
/**
* Creates a function that wraps `func` to invoke its iteratee, with up to `n`
* arguments, ignoring any additional arguments.
*
* @private
* @param {Function} func The function to cap iteratee arguments for.
* @param {number} n The arity cap.
* @returns {Function} Returns the new function.
*/
function iterateeAry(func, n) {
return overArg(func, function(func) {
return typeof func == 'function' ? baseAry(func, n) : func;
});
}
/**
* Creates a function that wraps `func` to invoke its iteratee with arguments
* arranged according to the specified `indexes` where the argument value at
* the first index is provided as the first argument, the argument value at
* the second index is provided as the second argument, and so on.
*
* @private
* @param {Function} func The function to rearrange iteratee arguments for.
* @param {number[]} indexes The arranged argument indexes.
* @returns {Function} Returns the new function.
*/
function iterateeRearg(func, indexes) {
return overArg(func, function(func) {
var n = indexes.length;
return baseArity(rearg(baseAry(func, n), indexes), n);
});
}
/**
* Creates a function that invokes `func` with its first argument transformed.
*
* @private
* @param {Function} func The function to wrap.
* @param {Function} transform The argument transform.
* @returns {Function} Returns the new function.
*/
function overArg(func, transform) {
return function() {
var length = arguments.length;
if (!length) {
return func();
}
var args = Array(length);
while (length--) {
args[length] = arguments[length];
}
var index = config.rearg ? 0 : (length - 1);
args[index] = transform(args[index]);
return func.apply(undefined, args);
};
}
/**
* Creates a function that wraps `func` and applys the conversions
* rules by `name`.
*
* @private
* @param {string} name The name of the function to wrap.
* @param {Function} func The function to wrap.
* @returns {Function} Returns the converted function.
*/
function wrap(name, func) {
var result,
realName = mapping.aliasToReal[name] || name,
wrapped = func,
wrapper = wrappers[realName];
if (wrapper) {
wrapped = wrapper(func);
}
else if (config.immutable) {
if (mapping.mutate.array[realName]) {
wrapped = wrapImmutable(func, cloneArray);
}
else if (mapping.mutate.object[realName]) {
wrapped = wrapImmutable(func, createCloner(func));
}
else if (mapping.mutate.set[realName]) {
wrapped = wrapImmutable(func, cloneByPath);
}
}
each(aryMethodKeys, function(aryKey) {
each(mapping.aryMethod[aryKey], function(otherName) {
if (realName == otherName) {
var data = mapping.methodSpread[realName],
afterRearg = data && data.afterRearg;
result = afterRearg
? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)
: castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);
result = castCap(realName, result);
result = castCurry(realName, result, aryKey);
return false;
}
});
return !result;
});
result || (result = wrapped);
if (result == func) {
result = forceCurry ? curry(result, 1) : function() {
return func.apply(this, arguments);
};
}
result.convert = createConverter(realName, func);
if (mapping.placeholder[realName]) {
setPlaceholder = true;
result.placeholder = func.placeholder = placeholder;
}
return result;
}
/*--------------------------------------------------------------------------*/
if (!isObj) {
return wrap(name, func);
}
var _ = func;
// Convert methods by ary cap.
var pairs = [];
each(aryMethodKeys, function(aryKey) {
each(mapping.aryMethod[aryKey], function(key) {
var func = _[mapping.remap[key] || key];
if (func) {
pairs.push([key, wrap(key, func)]);
}
});
});
// Convert remaining methods.
each(keys(_), function(key) {
var func = _[key];
if (typeof func == 'function') {
var length = pairs.length;
while (length--) {
if (pairs[length][0] == key) {
return;
}
}
func.convert = createConverter(key, func);
pairs.push([key, func]);
}
});
// Assign to `_` leaving `_.prototype` unchanged to allow chaining.
each(pairs, function(pair) {
_[pair[0]] = pair[1];
});
_.convert = convertLib;
if (setPlaceholder) {
_.placeholder = placeholder;
}
// Assign aliases.
each(keys(_), function(key) {
each(mapping.realToAlias[key] || [], function(alias) {
_[alias] = _[key];
});
});
return _;
}
module.exports = baseConvert;
/***/ },
/* 2 */
/***/ function(module, exports) {
/** Used to map aliases to their real names. */
exports.aliasToReal = {
// Lodash aliases.
'each': 'forEach',
'eachRight': 'forEachRight',
'entries': 'toPairs',
'entriesIn': 'toPairsIn',
'extend': 'assignIn',
'extendAll': 'assignInAll',
'extendAllWith': 'assignInAllWith',
'extendWith': 'assignInWith',
'first': 'head',
// Methods that are curried variants of others.
'conforms': 'conformsTo',
'matches': 'isMatch',
'property': 'get',
// Ramda aliases.
'__': 'placeholder',
'F': 'stubFalse',
'T': 'stubTrue',
'all': 'every',
'allPass': 'overEvery',
'always': 'constant',
'any': 'some',
'anyPass': 'overSome',
'apply': 'spread',
'assoc': 'set',
'assocPath': 'set',
'complement': 'negate',
'compose': 'flowRight',
'contains': 'includes',
'dissoc': 'unset',
'dissocPath': 'unset',
'dropLast': 'dropRight',
'dropLastWhile': 'dropRightWhile',
'equals': 'isEqual',
'identical': 'eq',
'indexBy': 'keyBy',
'init': 'initial',
'invertObj': 'invert',
'juxt': 'over',
'omitAll': 'omit',
'nAry': 'ary',
'path': 'get',
'pathEq': 'matchesProperty',
'pathOr': 'getOr',
'paths': 'at',
'pickAll': 'pick',
'pipe': 'flow',
'pluck': 'map',
'prop': 'get',
'propEq': 'matchesProperty',
'propOr': 'getOr',
'props': 'at',
'symmetricDifference': 'xor',
'symmetricDifferenceBy': 'xorBy',
'symmetricDifferenceWith': 'xorWith',
'takeLast': 'takeRight',
'takeLastWhile': 'takeRightWhile',
'unapply': 'rest',
'unnest': 'flatten',
'useWith': 'overArgs',
'where': 'conformsTo',
'whereEq': 'isMatch',
'zipObj': 'zipObject'
};
/** Used to map ary to method names. */
exports.aryMethod = {
'1': [
'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',
'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',
'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',
'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',
'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',
'uniqueId', 'words', 'zipAll'
],
'2': [
'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',
'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',
'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',
'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',
'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',
'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',
'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',
'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',
'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',
'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',
'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',
'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',
'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',
'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',
'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',
'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',
'zipObjectDeep'
],
'3': [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',
'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',
'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',
'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',
'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',
'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',
'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',
'xorWith', 'zipWith'
],
'4': [
'fill', 'setWith', 'updateWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
'2': [1, 0],
'3': [2, 0, 1],
'4': [3, 2, 0, 1]
};
/** Used to map method names to their iteratee ary. */
exports.iterateeAry = {
'dropRightWhile': 1,
'dropWhile': 1,
'every': 1,
'filter': 1,
'find': 1,
'findFrom': 1,
'findIndex': 1,
'findIndexFrom': 1,
'findKey': 1,
'findLast': 1,
'findLastFrom': 1,
'findLastIndex': 1,
'findLastIndexFrom': 1,
'findLastKey': 1,
'flatMap': 1,
'flatMapDeep': 1,
'flatMapDepth': 1,
'forEach': 1,
'forEachRight': 1,
'forIn': 1,
'forInRight': 1,
'forOwn': 1,
'forOwnRight': 1,
'map': 1,
'mapKeys': 1,
'mapValues': 1,
'partition': 1,
'reduce': 2,
'reduceRight': 2,
'reject': 1,
'remove': 1,
'some': 1,
'takeRightWhile': 1,
'takeWhile': 1,
'times': 1,
'transform': 2
};
/** Used to map method names to iteratee rearg configs. */
exports.iterateeRearg = {
'mapKeys': [1],
'reduceRight': [1, 0]
};
/** Used to map method names to rearg configs. */
exports.methodRearg = {
'assignInAllWith': [1, 0],
'assignInWith': [1, 2, 0],
'assignAllWith': [1, 0],
'assignWith': [1, 2, 0],
'differenceBy': [1, 2, 0],
'differenceWith': [1, 2, 0],
'getOr': [2, 1, 0],
'intersectionBy': [1, 2, 0],
'intersectionWith': [1, 2, 0],
'isEqualWith': [1, 2, 0],
'isMatchWith': [2, 1, 0],
'mergeAllWith': [1, 0],
'mergeWith': [1, 2, 0],
'padChars': [2, 1, 0],
'padCharsEnd': [2, 1, 0],
'padCharsStart': [2, 1, 0],
'pullAllBy': [2, 1, 0],
'pullAllWith': [2, 1, 0],
'rangeStep': [1, 2, 0],
'rangeStepRight': [1, 2, 0],
'setWith': [3, 1, 2, 0],
'sortedIndexBy': [2, 1, 0],
'sortedLastIndexBy': [2, 1, 0],
'unionBy': [1, 2, 0],
'unionWith': [1, 2, 0],
'updateWith': [3, 1, 2, 0],
'xorBy': [1, 2, 0],
'xorWith': [1, 2, 0],
'zipWith': [1, 2, 0]
};
/** Used to map method names to spread configs. */
exports.methodSpread = {
'assignAll': { 'start': 0 },
'assignAllWith': { 'start': 0 },
'assignInAll': { 'start': 0 },
'assignInAllWith': { 'start': 0 },
'defaultsAll': { 'start': 0 },
'defaultsDeepAll': { 'start': 0 },
'invokeArgs': { 'start': 2 },
'invokeArgsMap': { 'start': 2 },
'mergeAll': { 'start': 0 },
'mergeAllWith': { 'start': 0 },
'partial': { 'start': 1 },
'partialRight': { 'start': 1 },
'without': { 'start': 1 },
'zipAll': { 'start': 0 }
};
/** Used to identify methods which mutate arrays or objects. */
exports.mutate = {
'array': {
'fill': true,
'pull': true,
'pullAll': true,
'pullAllBy': true,
'pullAllWith': true,
'pullAt': true,
'remove': true,
'reverse': true
},
'object': {
'assign': true,
'assignAll': true,
'assignAllWith': true,
'assignIn': true,
'assignInAll': true,
'assignInAllWith': true,
'assignInWith': true,
'assignWith': true,
'defaults': true,
'defaultsAll': true,
'defaultsDeep': true,
'defaultsDeepAll': true,
'merge': true,
'mergeAll': true,
'mergeAllWith': true,
'mergeWith': true,
},
'set': {
'set': true,
'setWith': true,
'unset': true,
'update': true,
'updateWith': true
}
};
/** Used to track methods with placeholder support */
exports.placeholder = {
'bind': true,
'bindKey': true,
'curry': true,
'curryRight': true,
'partial': true,
'partialRight': true
};
/** Used to map real names to their aliases. */
exports.realToAlias = (function() {
var hasOwnProperty = Object.prototype.hasOwnProperty,
object = exports.aliasToReal,
result = {};
for (var key in object) {
var value = object[key];
if (hasOwnProperty.call(result, value)) {
result[value].push(key);
} else {
result[value] = [key];
}
}
return result;
}());
/** Used to map method names to other names. */
exports.remap = {
'assignAll': 'assign',
'assignAllWith': 'assignWith',
'assignInAll': 'assignIn',
'assignInAllWith': 'assignInWith',
'curryN': 'curry',
'curryRightN': 'curryRight',
'defaultsAll': 'defaults',
'defaultsDeepAll': 'defaultsDeep',
'findFrom': 'find',
'findIndexFrom': 'findIndex',
'findLastFrom': 'findLast',
'findLastIndexFrom': 'findLastIndex',
'getOr': 'get',
'includesFrom': 'includes',
'indexOfFrom': 'indexOf',
'invokeArgs': 'invoke',
'invokeArgsMap': 'invokeMap',
'lastIndexOfFrom': 'lastIndexOf',
'mergeAll': 'merge',
'mergeAllWith': 'mergeWith',
'padChars': 'pad',
'padCharsEnd': 'padEnd',
'padCharsStart': 'padStart',
'propertyOf': 'get',
'rangeStep': 'range',
'rangeStepRight': 'rangeRight',
'restFrom': 'rest',
'spreadFrom': 'spread',
'trimChars': 'trim',
'trimCharsEnd': 'trimEnd',
'trimCharsStart': 'trimStart',
'zipAll': 'zip'
};
/** Used to track methods that skip fixing their arity. */
exports.skipFixed = {
'castArray': true,
'flow': true,
'flowRight': true,
'iteratee': true,
'mixin': true,
'rearg': true,
'runInContext': true
};
/** Used to track methods that skip rearranging arguments. */
exports.skipRearg = {
'add': true,
'assign': true,
'assignIn': true,
'bind': true,
'bindKey': true,
'concat': true,
'difference': true,
'divide': true,
'eq': true,
'gt': true,
'gte': true,
'isEqual': true,
'lt': true,
'lte': true,
'matchesProperty': true,
'merge': true,
'multiply': true,
'overArgs': true,
'partial': true,
'partialRight': true,
'propertyOf': true,
'random': true,
'range': true,
'rangeRight': true,
'subtract': true,
'zip': true,
'zipObject': true,
'zipObjectDeep': true
};
/***/ },
/* 3 */
/***/ function(module, exports) {
/**
* The default argument placeholder value for methods.
*
* @type {Object}
*/
module.exports = {};
/***/ }
/******/ ])
});
;
if (!String.prototype.endsWith) { if (!String.prototype.endsWith) {
String.prototype.endsWith = function (searchString, position) { String.prototype.endsWith = function (searchString, position) {
var subjectString = this.toString(); var subjectString = this.toString();
...@@ -7784,7 +6744,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol ...@@ -7784,7 +6744,8 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
}; };
}); });
//# sourceMappingURL=pluggable.js.map; //# sourceMappingURL=pluggable.js.map
;
// Converse.js (A browser based XMPP chat client) // Converse.js (A browser based XMPP chat client)
...@@ -7831,6 +6792,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol ...@@ -7831,6 +6792,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
'promises': {} 'promises': {}
}; };
debugger;
_.extend(_converse, Backbone.Events); _.extend(_converse, Backbone.Events);
_converse.core_plugins = ['converse-bookmarks', 'converse-chatview', 'converse-controlbox', 'converse-core', 'converse-disco', 'converse-dragresize', 'converse-headline', 'converse-mam', 'converse-minimize', 'converse-muc', 'converse-notification', 'converse-otr', 'converse-ping', 'converse-register', 'converse-roomslist', 'converse-rosterview', 'converse-vcard']; _converse.core_plugins = ['converse-bookmarks', 'converse-chatview', 'converse-controlbox', 'converse-core', 'converse-disco', 'converse-dragresize', 'converse-headline', 'converse-mam', 'converse-minimize', 'converse-muc', 'converse-notification', 'converse-otr', 'converse-ping', 'converse-register', 'converse-roomslist', 'converse-rosterview', 'converse-vcard'];
...@@ -12479,7 +11441,7 @@ return __p ...@@ -12479,7 +11441,7 @@ return __p
initialize: function initialize() { initialize: function initialize() {
this.model.on('change:current_skintone', this.render, this); this.model.on('change:current_skintone', this.render, this);
this.model.on('change:current_category', this.render, this); this.model.on('change:current_category', this.render, this);
this.setScrollPosition = _.debounce(this.setScrollPosition, 50).bind(this); this.setScrollPosition = _.debounce(this.setScrollPosition, 50);
}, },
render: function render() { render: function render() {
var _this = this; var _this = this;
...@@ -12493,7 +11455,7 @@ return __p ...@@ -12493,7 +11455,7 @@ return __p
})); }));
this.el.innerHTML = emojis_html; this.el.innerHTML = emojis_html;
_.forEach(this.el.querySelectorAll('.emoji-picker'), function (el) { _.forEach(this.el.querySelectorAll('.emoji-picker'), function (el) {
el.addEventListener('scroll', _this.setScrollPosition); el.addEventListener('scroll', _this.setScrollPosition.bind(_this));
}); });
this.restoreScrollPosition(); this.restoreScrollPosition();
return this; return this;
...@@ -12564,6 +11526,8 @@ return __p ...@@ -12564,6 +11526,8 @@ return __p
}, },
initialize: function initialize() { initialize: function initialize() {
this.markScrolled = _.debounce(this.markScrolled, 100);
this.createEmojiPicker(); this.createEmojiPicker();
this.model.messages.on('add', this.onMessageAdded, this); this.model.messages.on('add', this.onMessageAdded, this);
this.model.on('show', this.show, this); this.model.on('show', this.show, this);
...@@ -13028,9 +11992,7 @@ return __p ...@@ -13028,9 +11992,7 @@ return __p
ev.stopPropagation(); ev.stopPropagation();
this.toggleEmojiMenu(); this.toggleEmojiMenu();
var target = ev.target.nodeName === 'IMG' ? ev.target.parentElement : ev.target; var target = ev.target.nodeName === 'IMG' ? ev.target.parentElement : ev.target;
this.insertIntoTextArea(target.getAttribute('data-emoji'));
var shortname = target.getAttribute('data-emoji');
this.insertIntoTextArea(emojione.shortnameToUnicode(shortname));
}, },
toggleEmojiMenu: function toggleEmojiMenu(ev) { toggleEmojiMenu: function toggleEmojiMenu(ev) {
if (!_.isUndefined(ev)) { if (!_.isUndefined(ev)) {
...@@ -13199,7 +12161,7 @@ return __p ...@@ -13199,7 +12161,7 @@ return __p
}, },
markScrolled: _.debounce(function (ev) { markScrolled: function markScrolled(ev) {
/* Called when the chat content is scrolled up or down. /* Called when the chat content is scrolled up or down.
* We want to record when the user has scrolled away from * We want to record when the user has scrolled away from
* the bottom, so that we don't automatically scroll away * the bottom, so that we don't automatically scroll away
...@@ -13218,12 +12180,13 @@ return __p ...@@ -13218,12 +12180,13 @@ return __p
} }
var scrolled = true; var scrolled = true;
var is_at_bottom = this.$content.scrollTop() + this.$content.innerHeight() >= this.$content[0].scrollHeight - 10; var is_at_bottom = this.$content.scrollTop() + this.$content.innerHeight() >= this.$content[0].scrollHeight - 10;
if (is_at_bottom) { if (is_at_bottom) {
scrolled = false; scrolled = false;
this.onScrolledDown(); this.onScrolledDown();
} }
utils.safeSave(this.model, { 'scrolled': scrolled }); utils.safeSave(this.model, { 'scrolled': scrolled });
}, 150), },
viewUnreadMessages: function viewUnreadMessages() { viewUnreadMessages: function viewUnreadMessages() {
this.model.save('scrolled', false); this.model.save('scrolled', false);
...@@ -16499,13 +15462,18 @@ return __p ...@@ -16499,13 +15462,18 @@ return __p
}); });
_converse.api.promises.add('roomsPanelRendered'); _converse.api.promises.add('roomsPanelRendered');
_converse.openChatRoom = function (settings) { _converse.openChatRoom = function (settings, bring_to_foreground) {
/* Opens a chat room, making sure that certain attributes /* Opens a chat room, making sure that certain attributes
* are correct, for example that the "type" is set to * are correct, for example that the "type" is set to
* "chatroom". * "chatroom".
*/ */
if (_.isUndefined(settings.jid)) {
throw new Error("openChatRoom needs to be called with a JID");
}
settings.type = CHATROOMS_TYPE; settings.type = CHATROOMS_TYPE;
return _converse.chatboxviews.showChat(settings); settings.id = settings.jid;
settings.box_id = b64_sha1(settings.jid);
return _converse.chatboxviews.showChat(settings, bring_to_foreground);
}; };
_converse.ChatRoom = _converse.ChatBox.extend({ _converse.ChatRoom = _converse.ChatBox.extend({
...@@ -18584,11 +17552,8 @@ return __p ...@@ -18584,11 +17552,8 @@ return __p
} }
} }
return { return {
'id': jid,
'jid': jid, 'jid': jid,
'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid)), 'name': name || Strophe.unescapeNode(Strophe.getNodeFromJid(jid))
'type': CHATROOMS_TYPE,
'box_id': b64_sha1(jid)
}; };
}, },
openChatRoom: function openChatRoom(ev) { openChatRoom: function openChatRoom(ev) {
...@@ -18636,9 +17601,7 @@ return __p ...@@ -18636,9 +17601,7 @@ return __p
} }
if (result === true) { if (result === true) {
var chatroom = _converse.openChatRoom({ var chatroom = _converse.openChatRoom({
'id': room_jid,
'jid': room_jid, 'jid': room_jid,
'box_id': b64_sha1(room_jid),
'password': $x.attr('password') 'password': $x.attr('password')
}); });
if (chatroom.get('connection_status') === converse.ROOMSTATUS.DISCONNECTED) { if (chatroom.get('connection_status') === converse.ROOMSTATUS.DISCONNECTED) {
...@@ -19080,6 +18043,30 @@ return __p ...@@ -19080,6 +18043,30 @@ return __p
// Promises exposed by this plugin // Promises exposed by this plugin
_converse.api.promises.add('bookmarksInitialized'); _converse.api.promises.add('bookmarksInitialized');
// Pure functions on the _converse object
_.extend(_converse, {
removeBookmarkViaEvent: function removeBookmarkViaEvent(ev) {
/* Remove a bookmark as determined by the passed in
* event.
*/
ev.preventDefault();
var name = ev.target.getAttribute('data-bookmark-name');
var jid = ev.target.getAttribute('data-room-jid');
if (confirm(__(___("Are you sure you want to remove the bookmark \"%1$s\"?"), name))) {
_.invokeMap(_converse.bookmarks.where({ 'jid': jid }), Backbone.Model.prototype.destroy);
}
},
addBookmarkViaEvent: function addBookmarkViaEvent(ev) {
/* Add a bookmark as determined by the passed in
* event.
*/
ev.preventDefault();
var jid = ev.target.getAttribute('data-room-jid');
var chatroom = _converse.openChatRoom({ 'jid': jid }, true);
_converse.chatboxviews.get(jid).renderBookmarkForm();
}
});
_converse.Bookmark = Backbone.Model; _converse.Bookmark = Backbone.Model;
_converse.BookmarksList = Backbone.Model.extend({ _converse.BookmarksList = Backbone.Model.extend({
...@@ -19204,8 +18191,9 @@ return __p ...@@ -19204,8 +18191,9 @@ return __p
tagName: 'div', tagName: 'div',
className: 'bookmarks-list, rooms-list-container', className: 'bookmarks-list, rooms-list-container',
events: { events: {
'click .remove-bookmark': 'removeBookmark', 'click .add-bookmark': 'addBookmark',
'click .bookmarks-toggle': 'toggleBookmarksList' 'click .bookmarks-toggle': 'toggleBookmarksList',
'click .remove-bookmark': 'removeBookmark'
}, },
initialize: function initialize() { initialize: function initialize() {
...@@ -19237,14 +18225,11 @@ return __p ...@@ -19237,14 +18225,11 @@ return __p
} }
return this.$el; return this.$el;
}, },
removeBookmark: function removeBookmark(ev) {
ev.preventDefault();
var name = $(ev.target).data('bookmarkName'); removeBookmark: _converse.removeBookmarkViaEvent,
var jid = $(ev.target).data('roomJid'); addBookmark: _converse.addBookmarkViaEvent,
if (confirm(__(___("Are you sure you want to remove the bookmark \"%1$s\"?"), name))) {
_.invokeMap(_converse.bookmarks.where({ 'jid': jid }), Backbone.Model.prototype.destroy);
}
},
renderBookmarkListElement: function renderBookmarkListElement(item) { renderBookmarkListElement: function renderBookmarkListElement(item) {
if (item instanceof _converse.ChatBox) { if (item instanceof _converse.ChatBox) {
item = _.head(this.model.where({ 'jid': item.get('jid') })); item = _.head(this.model.where({ 'jid': item.get('jid') }));
...@@ -19394,17 +18379,27 @@ __e(name) + ...@@ -19394,17 +18379,27 @@ __e(name) +
__e(info_leave_room) + __e(info_leave_room) +
'" href="#">&nbsp;</a>\n\n'; '" href="#">&nbsp;</a>\n\n';
if (allow_bookmarks) { ; if (allow_bookmarks) { ;
__p += '\n<a class="right remove-bookmark icon-pushpin '; __p += '\n<a class="right icon-pushpin ';
if (bookmarked) { ; if (bookmarked) { ;
__p += ' button-on '; __p += ' remove-bookmark button-on ';
} else { ;
__p += ' add-bookmark ';
} ; } ;
__p += '"\n data-room-jid="' + __p += '"\n data-room-jid="' +
__e(jid) + __e(jid) +
'" data-bookmark-name="' + '" data-bookmark-name="' +
__e(name) + __e(name) +
'"\n title="' + '"\n title="';
if (bookmarked) { ;
__p += ' ' +
__e(info_remove_bookmark) + __e(info_remove_bookmark) +
'" href="#">&nbsp;</a>\n'; ' ';
} else { ;
__p += ' ' +
__e(info_add_bookmark) +
' ';
} ;
__p += '"\n href="#">&nbsp;</a>\n';
} ; } ;
__p += '\n<a class="right room-info icon-room-info" data-room-jid="' + __p += '\n<a class="right room-info icon-room-info" data-room-jid="' +
__e(jid) + __e(jid) +
...@@ -19441,6 +18436,21 @@ return __p ...@@ -19441,6 +18436,21 @@ return __p
converse.plugins.add('converse-roomslist', { converse.plugins.add('converse-roomslist', {
/* Optional dependencies are other plugins which might be
* overridden or relied upon, and therefore need to be loaded before
* this plugin. They are called "optional" because they might not be
* available, in which case any overrides applicable to them will be
* ignored.
*
* It's possible however to make optional dependencies non-optional.
* If the setting "strict_plugin_dependencies" is set to true,
* an error will be raised if the plugin is not found.
*
* NB: These plugins need to have already been loaded via require.js.
*/
optional_dependencies: ["converse-bookmarks"],
initialize: function initialize() { initialize: function initialize() {
/* The initialize function gets called as soon as the plugin is /* The initialize function gets called as soon as the plugin is
* loaded by converse.js's plugin machinery. * loaded by converse.js's plugin machinery.
...@@ -19460,8 +18470,10 @@ return __p ...@@ -19460,8 +18470,10 @@ return __p
tagName: 'div', tagName: 'div',
className: 'open-rooms-list rooms-list-container', className: 'open-rooms-list rooms-list-container',
events: { events: {
'click .add-bookmark': 'addBookmark',
'click .close-room': 'closeRoom', 'click .close-room': 'closeRoom',
'click .open-rooms-toggle': 'toggleRoomsList' 'click .open-rooms-toggle': 'toggleRoomsList',
'click .remove-bookmark': 'removeBookmark'
}, },
initialize: function initialize() { initialize: function initialize() {
...@@ -19535,6 +18547,7 @@ return __p ...@@ -19535,6 +18547,7 @@ return __p
'allow_bookmarks': _converse.allow_bookmarks, 'allow_bookmarks': _converse.allow_bookmarks,
'info_leave_room': __('Leave this room'), 'info_leave_room': __('Leave this room'),
'info_remove_bookmark': __('Unbookmark this room'), 'info_remove_bookmark': __('Unbookmark this room'),
'info_add_bookmark': __('Bookmark this room'),
'info_title': __('Show more information on this room'), 'info_title': __('Show more information on this room'),
'name': name, 'name': name,
'open_title': __('Click to open this room') 'open_title': __('Click to open this room')
...@@ -19542,6 +18555,11 @@ return __p ...@@ -19542,6 +18555,11 @@ return __p
this.el.querySelector('.open-rooms-list').appendChild(div.firstChild); this.el.querySelector('.open-rooms-list').appendChild(div.firstChild);
this.show(); this.show();
}, },
removeBookmark: _converse.removeBookmarkViaEvent,
addBookmark: _converse.addBookmarkViaEvent,
removeRoomsListElement: function removeRoomsListElement(item) { removeRoomsListElement: function removeRoomsListElement(item) {
var list_el = this.el.querySelector('.open-rooms-list'); var list_el = this.el.querySelector('.open-rooms-list');
var el = _.head(sizzle(".available-chatroom[data-room-jid=\"" + item.get('jid') + "\"]", list_el)); var el = _.head(sizzle(".available-chatroom[data-room-jid=\"" + item.get('jid') + "\"]", list_el));
...@@ -20067,15 +19085,14 @@ return __p ...@@ -20067,15 +19085,14 @@ return __p
var vcard = iq.querySelector('vCard'), var vcard = iq.querySelector('vCard'),
img_type = _.get(vcard.querySelector('TYPE'), 'textContent'), img_type = _.get(vcard.querySelector('TYPE'), 'textContent'),
img = _.get(vcard.querySelector('BINVAL'), 'textContent'), img = _.get(vcard.querySelector('BINVAL'), 'textContent'),
url = _.get(vcard.querySelector('URL'), 'textContent'); url = _.get(vcard.querySelector('URL'), 'textContent'),
fullname = _.get(vcard.querySelector('FN'), 'textContent');
var fullname = _.get(vcard.querySelector('FN'), 'textContent');
if (jid) { if (jid) {
var contact = _converse.roster.get(jid); var contact = _converse.roster.get(jid);
if (contact) { if (contact) {
fullname = _.isUndefined(fullname) ? _.get(contact, 'fullname', jid) : fullname;
contact.save({ contact.save({
'fullname': fullname, 'fullname': fullname || _.get(contact, 'fullname', jid),
'image_type': img_type, 'image_type': img_type,
'image': img, 'image': img,
'url': url, 'url': url,
...@@ -22745,6 +21762,7 @@ if (typeof define !== 'undefined') { ...@@ -22745,6 +21762,7 @@ if (typeof define !== 'undefined') {
define('jquery.browser', [], function () { return jQuery; }); define('jquery.browser', [], function () { return jQuery; });
define('awesomplete', [], function () { return jQuery; }); define('awesomplete', [], function () { return jQuery; });
define('lodash', [], function () { return _; }); define('lodash', [], function () { return _; });
define('lodash.converter', [], function () { return fp; });
define('lodash.noconflict', [], function () { return _; }); define('lodash.noconflict', [], function () { return _; });
define('moment_with_locales', [], function () { return moment; }); define('moment_with_locales', [], function () { return moment; });
define('strophe', [], function () { define('strophe', [], function () {
...@@ -36,7 +36,9 @@ ...@@ -36,7 +36,9 @@
"strophe.vcard", "strophe.vcard",
"strophe.ping", "strophe.ping",
"otr", "otr",
"lodash" "lodash",
"lodash.converter",
"lodash.noconflict"
], ],
paths: { paths: {
"converse-bookmarks": "builds/converse-bookmarks", "converse-bookmarks": "builds/converse-bookmarks",
......
...@@ -44,7 +44,7 @@ require.config({ ...@@ -44,7 +44,7 @@ require.config({
"typeahead": "components/typeahead.js/index", "typeahead": "components/typeahead.js/index",
"underscore": "src/underscore-shim", "underscore": "src/underscore-shim",
"utils": "src/utils", "utils": "src/utils",
"xss.noconflict": "src/xss.noconflict", "xss.noconflict": "src/xss.noconflict",
"xss": "node_modules/xss/dist/xss", "xss": "node_modules/xss/dist/xss",
// Converse // Converse
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
define('jquery.browser', [], function () { return jQuery; }); define('jquery.browser', [], function () { return jQuery; });
define('awesomplete', [], function () { return jQuery; }); define('awesomplete', [], function () { return jQuery; });
define('lodash', [], function () { return _; }); define('lodash', [], function () { return _; });
define('lodash.converter', [], function () { return fp; });
define('lodash.noconflict', [], function () { return _; }); define('lodash.noconflict', [], function () { return _; });
define('moment_with_locales', [], function () { return moment; }); define('moment_with_locales', [], function () { return moment; });
define('strophe', [], function () { define('strophe', [], function () {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment