Upgrade handlebars (#8675)
* Upgrade Handlebars to 4.3.0 * Upgrade Handlebars to the latest version
This commit is contained in:
parent
b51b2ccf61
commit
abff3716ba
|
@ -1,5 +1,6 @@
|
|||
import { get } from "@ember/object";
|
||||
import Helper from "@ember/component/helper";
|
||||
import RawHandlebars from "discourse-common/lib/raw-handlebars";
|
||||
|
||||
export function makeArray(obj) {
|
||||
if (obj === null || obj === undefined) {
|
||||
|
@ -88,5 +89,5 @@ export function registerUnbound(name, fn) {
|
|||
_helpers[name] = Helper.extend({
|
||||
compute: (params, args) => fn(...params, args)
|
||||
});
|
||||
Handlebars.registerHelper(name, func);
|
||||
RawHandlebars.registerHelper(name, func);
|
||||
}
|
||||
|
|
|
@ -1,14 +1,23 @@
|
|||
import { get } from "@ember/object";
|
||||
|
||||
export function registerRawHelpers(hbs, handlebarsClass) {
|
||||
hbs.helper = function() {};
|
||||
hbs.helpers = Object.create(handlebarsClass.helpers);
|
||||
if (!hbs.helpers) {
|
||||
hbs.helpers = Object.create(handlebarsClass.helpers);
|
||||
}
|
||||
|
||||
hbs.helpers["get"] = function(context, options) {
|
||||
var firstContext = options.contexts[0];
|
||||
var val = firstContext[context];
|
||||
if (!context || !options.contexts) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (context.indexOf("controller.") === 0) {
|
||||
if (typeof context !== "string") {
|
||||
return context;
|
||||
}
|
||||
|
||||
let firstContext = options.contexts[0];
|
||||
let val = firstContext[context];
|
||||
|
||||
if (context.toString().indexOf("controller.") === 0) {
|
||||
context = context.slice(context.indexOf(".") + 1);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { rawConnectorsFor } from "discourse/lib/plugin-connectors";
|
||||
import RawHandlebars from "discourse-common/lib/raw-handlebars";
|
||||
|
||||
Handlebars.registerHelper("raw-plugin-outlet", function(args) {
|
||||
RawHandlebars.registerHelper("raw-plugin-outlet", function(args) {
|
||||
const connectors = rawConnectorsFor(args.hash.name);
|
||||
if (connectors.length) {
|
||||
const output = connectors.map(c => c.template({ context: this }));
|
||||
|
|
|
@ -6,6 +6,7 @@ pre-commit:
|
|||
run: bundle exec rubocop {staged_files}
|
||||
eslint:
|
||||
glob: "*.{js,es6}"
|
||||
exclude: 'vendor/*'
|
||||
run: yarn eslint --ext .es6 -f compact {staged_files}
|
||||
yaml-syntax:
|
||||
glob: "*.{yaml,yml}"
|
||||
|
|
|
@ -11,8 +11,9 @@
|
|||
"bootbox": "3.2.0",
|
||||
"bootstrap": "v3.4.1",
|
||||
"chart.js": "2.9.3",
|
||||
"eslint-plugin-lodash": "^6.0.0",
|
||||
"favcount": "https://github.com/chrishunt/favcount",
|
||||
"handlebars": "^4.1.2",
|
||||
"handlebars": "^4.3.0",
|
||||
"highlight.js": "https://github.com/highlightjs/highlight.js",
|
||||
"htmlparser": "https://github.com/tautologistics/node-htmlparser",
|
||||
"intersection-observer": "^0.5.1",
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1,7 +1,7 @@
|
|||
/**!
|
||||
|
||||
@license
|
||||
handlebars v4.1.2
|
||||
handlebars v4.5.3
|
||||
|
||||
Copyright (C) 2011-2017 by Yehuda Katz
|
||||
|
||||
|
@ -95,7 +95,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
// 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 _handlebarsSafeString = __webpack_require__(20);
|
||||
var _handlebarsSafeString = __webpack_require__(32);
|
||||
|
||||
var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
|
||||
|
||||
|
@ -107,11 +107,11 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
var Utils = _interopRequireWildcard(_handlebarsUtils);
|
||||
|
||||
var _handlebarsRuntime = __webpack_require__(21);
|
||||
var _handlebarsRuntime = __webpack_require__(33);
|
||||
|
||||
var runtime = _interopRequireWildcard(_handlebarsRuntime);
|
||||
|
||||
var _handlebarsNoConflict = __webpack_require__(33);
|
||||
var _handlebarsNoConflict = __webpack_require__(38);
|
||||
|
||||
var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
|
||||
|
||||
|
@ -201,17 +201,19 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
var _helpers = __webpack_require__(9);
|
||||
|
||||
var _decorators = __webpack_require__(17);
|
||||
var _decorators = __webpack_require__(29);
|
||||
|
||||
var _logger = __webpack_require__(19);
|
||||
var _logger = __webpack_require__(31);
|
||||
|
||||
var _logger2 = _interopRequireDefault(_logger);
|
||||
|
||||
var VERSION = '4.1.2';
|
||||
var VERSION = '4.5.3';
|
||||
exports.VERSION = VERSION;
|
||||
var COMPILER_REVISION = 7;
|
||||
|
||||
var COMPILER_REVISION = 8;
|
||||
exports.COMPILER_REVISION = COMPILER_REVISION;
|
||||
var LAST_COMPATIBLE_COMPILER_REVISION = 7;
|
||||
|
||||
exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_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',
|
||||
|
@ -219,7 +221,8 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
4: '== 1.x.x',
|
||||
5: '== 2.0.0-alpha.x',
|
||||
6: '>= 2.0.0-beta.1',
|
||||
7: '>= 4.0.0'
|
||||
7: '>= 4.0.0 <4.3.0',
|
||||
8: '>= 4.3.0'
|
||||
};
|
||||
|
||||
exports.REVISION_CHANGES = REVISION_CHANGES;
|
||||
|
@ -303,6 +306,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
exports.createFrame = createFrame;
|
||||
exports.blockParams = blockParams;
|
||||
exports.appendContextPath = appendContextPath;
|
||||
|
||||
var escape = {
|
||||
'&': '&',
|
||||
'<': '<',
|
||||
|
@ -427,15 +431,20 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
exports.__esModule = true;
|
||||
|
||||
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
||||
var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
|
||||
|
||||
function Exception(message, node) {
|
||||
var loc = node && node.loc,
|
||||
line = undefined,
|
||||
column = undefined;
|
||||
endLineNumber = undefined,
|
||||
column = undefined,
|
||||
endColumn = undefined;
|
||||
|
||||
if (loc) {
|
||||
line = loc.start.line;
|
||||
endLineNumber = loc.end.line;
|
||||
column = loc.start.column;
|
||||
endColumn = loc.end.column;
|
||||
|
||||
message += ' - ' + line + ':' + column;
|
||||
}
|
||||
|
@ -455,6 +464,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
try {
|
||||
if (loc) {
|
||||
this.lineNumber = line;
|
||||
this.endLineNumber = endLineNumber;
|
||||
|
||||
// Work around issue under safari where we can't directly set the column value
|
||||
/* istanbul ignore next */
|
||||
|
@ -463,8 +473,13 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
value: column,
|
||||
enumerable: true
|
||||
});
|
||||
Object.defineProperty(this, 'endColumn', {
|
||||
value: endColumn,
|
||||
enumerable: true
|
||||
});
|
||||
} else {
|
||||
this.column = column;
|
||||
this.endColumn = endColumn;
|
||||
}
|
||||
}
|
||||
} catch (nop) {
|
||||
|
@ -520,6 +535,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
exports.__esModule = true;
|
||||
exports.registerDefaultHelpers = registerDefaultHelpers;
|
||||
exports.moveHelperToHooks = moveHelperToHooks;
|
||||
|
||||
var _helpersBlockHelperMissing = __webpack_require__(10);
|
||||
|
||||
|
@ -529,23 +545,23 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
var _helpersEach2 = _interopRequireDefault(_helpersEach);
|
||||
|
||||
var _helpersHelperMissing = __webpack_require__(12);
|
||||
var _helpersHelperMissing = __webpack_require__(24);
|
||||
|
||||
var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
|
||||
|
||||
var _helpersIf = __webpack_require__(13);
|
||||
var _helpersIf = __webpack_require__(25);
|
||||
|
||||
var _helpersIf2 = _interopRequireDefault(_helpersIf);
|
||||
|
||||
var _helpersLog = __webpack_require__(14);
|
||||
var _helpersLog = __webpack_require__(26);
|
||||
|
||||
var _helpersLog2 = _interopRequireDefault(_helpersLog);
|
||||
|
||||
var _helpersLookup = __webpack_require__(15);
|
||||
var _helpersLookup = __webpack_require__(27);
|
||||
|
||||
var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
|
||||
|
||||
var _helpersWith = __webpack_require__(16);
|
||||
var _helpersWith = __webpack_require__(28);
|
||||
|
||||
var _helpersWith2 = _interopRequireDefault(_helpersWith);
|
||||
|
||||
|
@ -559,6 +575,15 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
_helpersWith2['default'](instance);
|
||||
}
|
||||
|
||||
function moveHelperToHooks(instance, helperName, keepHelper) {
|
||||
if (instance.helpers[helperName]) {
|
||||
instance.hooks[helperName] = instance.helpers[helperName];
|
||||
if (!keepHelper) {
|
||||
delete instance.helpers[helperName];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/***/ }),
|
||||
/* 10 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
@ -606,7 +631,9 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
/* 11 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
/* WEBPACK VAR INJECTION */(function(global) {'use strict';
|
||||
|
||||
var _Object$keys = __webpack_require__(12)['default'];
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(2)['default'];
|
||||
|
||||
|
@ -668,11 +695,21 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
execIteration(i, i, i === context.length - 1);
|
||||
}
|
||||
}
|
||||
} else if (global.Symbol && context[global.Symbol.iterator]) {
|
||||
var newContext = [];
|
||||
var iterator = context[global.Symbol.iterator]();
|
||||
for (var it = iterator.next(); !it.done; it = iterator.next()) {
|
||||
newContext.push(it.value);
|
||||
}
|
||||
context = newContext;
|
||||
for (var j = context.length; i < j; i++) {
|
||||
execIteration(i, i, i === context.length - 1);
|
||||
}
|
||||
} else {
|
||||
var priorKey = undefined;
|
||||
(function () {
|
||||
var priorKey = undefined;
|
||||
|
||||
for (var key in context) {
|
||||
if (context.hasOwnProperty(key)) {
|
||||
_Object$keys(context).forEach(function (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.
|
||||
|
@ -681,11 +718,11 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
}
|
||||
priorKey = key;
|
||||
i++;
|
||||
});
|
||||
if (priorKey !== undefined) {
|
||||
execIteration(priorKey, i - 1, true);
|
||||
}
|
||||
}
|
||||
if (priorKey !== undefined) {
|
||||
execIteration(priorKey, i - 1, true);
|
||||
}
|
||||
})();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -698,9 +735,184 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
};
|
||||
|
||||
module.exports = exports['default'];
|
||||
/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
|
||||
|
||||
/***/ }),
|
||||
/* 12 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
module.exports = { "default": __webpack_require__(13), __esModule: true };
|
||||
|
||||
/***/ }),
|
||||
/* 13 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
__webpack_require__(14);
|
||||
module.exports = __webpack_require__(20).Object.keys;
|
||||
|
||||
/***/ }),
|
||||
/* 14 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// 19.1.2.14 Object.keys(O)
|
||||
var toObject = __webpack_require__(15);
|
||||
|
||||
__webpack_require__(17)('keys', function($keys){
|
||||
return function keys(it){
|
||||
return $keys(toObject(it));
|
||||
};
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
/* 15 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// 7.1.13 ToObject(argument)
|
||||
var defined = __webpack_require__(16);
|
||||
module.exports = function(it){
|
||||
return Object(defined(it));
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 16 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
// 7.2.1 RequireObjectCoercible(argument)
|
||||
module.exports = function(it){
|
||||
if(it == undefined)throw TypeError("Can't call method on " + it);
|
||||
return it;
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 17 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// most Object methods by ES6 should accept primitives
|
||||
var $export = __webpack_require__(18)
|
||||
, core = __webpack_require__(20)
|
||||
, fails = __webpack_require__(23);
|
||||
module.exports = function(KEY, exec){
|
||||
var fn = (core.Object || {})[KEY] || Object[KEY]
|
||||
, exp = {};
|
||||
exp[KEY] = exec(fn);
|
||||
$export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 18 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
var global = __webpack_require__(19)
|
||||
, core = __webpack_require__(20)
|
||||
, ctx = __webpack_require__(21)
|
||||
, PROTOTYPE = 'prototype';
|
||||
|
||||
var $export = function(type, name, source){
|
||||
var IS_FORCED = type & $export.F
|
||||
, IS_GLOBAL = type & $export.G
|
||||
, IS_STATIC = type & $export.S
|
||||
, IS_PROTO = type & $export.P
|
||||
, IS_BIND = type & $export.B
|
||||
, IS_WRAP = type & $export.W
|
||||
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
|
||||
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
|
||||
, key, own, out;
|
||||
if(IS_GLOBAL)source = name;
|
||||
for(key in source){
|
||||
// contains in native
|
||||
own = !IS_FORCED && target && key in target;
|
||||
if(own && key in exports)continue;
|
||||
// export native or passed
|
||||
out = own ? target[key] : source[key];
|
||||
// prevent global pollution for namespaces
|
||||
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
|
||||
// bind timers to global for call from export context
|
||||
: IS_BIND && own ? ctx(out, global)
|
||||
// wrap global constructors for prevent change them in library
|
||||
: IS_WRAP && target[key] == out ? (function(C){
|
||||
var F = function(param){
|
||||
return this instanceof C ? new C(param) : C(param);
|
||||
};
|
||||
F[PROTOTYPE] = C[PROTOTYPE];
|
||||
return F;
|
||||
// make static versions for prototype methods
|
||||
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
|
||||
if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
|
||||
}
|
||||
};
|
||||
// type bitmap
|
||||
$export.F = 1; // forced
|
||||
$export.G = 2; // global
|
||||
$export.S = 4; // static
|
||||
$export.P = 8; // proto
|
||||
$export.B = 16; // bind
|
||||
$export.W = 32; // wrap
|
||||
module.exports = $export;
|
||||
|
||||
/***/ }),
|
||||
/* 19 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
||||
var global = module.exports = typeof window != 'undefined' && window.Math == Math
|
||||
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
|
||||
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
|
||||
|
||||
/***/ }),
|
||||
/* 20 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
var core = module.exports = {version: '1.2.6'};
|
||||
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
|
||||
|
||||
/***/ }),
|
||||
/* 21 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// optional / simple context binding
|
||||
var aFunction = __webpack_require__(22);
|
||||
module.exports = function(fn, that, length){
|
||||
aFunction(fn);
|
||||
if(that === undefined)return fn;
|
||||
switch(length){
|
||||
case 1: return function(a){
|
||||
return fn.call(that, a);
|
||||
};
|
||||
case 2: return function(a, b){
|
||||
return fn.call(that, a, b);
|
||||
};
|
||||
case 3: return function(a, b, c){
|
||||
return fn.call(that, a, b, c);
|
||||
};
|
||||
}
|
||||
return function(/* ...args */){
|
||||
return fn.apply(that, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 22 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = function(it){
|
||||
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
|
||||
return it;
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 23 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = function(exec){
|
||||
try {
|
||||
return !!exec();
|
||||
} catch(e){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 24 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
@ -728,17 +940,26 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 13 */
|
||||
/* 25 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(2)['default'];
|
||||
|
||||
exports.__esModule = true;
|
||||
|
||||
var _utils = __webpack_require__(4);
|
||||
|
||||
var _exception = __webpack_require__(5);
|
||||
|
||||
var _exception2 = _interopRequireDefault(_exception);
|
||||
|
||||
exports['default'] = function (instance) {
|
||||
instance.registerHelper('if', function (conditional, options) {
|
||||
if (arguments.length != 2) {
|
||||
throw new _exception2['default']('#if requires exactly one argument');
|
||||
}
|
||||
if (_utils.isFunction(conditional)) {
|
||||
conditional = conditional.call(this);
|
||||
}
|
||||
|
@ -754,6 +975,9 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
});
|
||||
|
||||
instance.registerHelper('unless', function (conditional, options) {
|
||||
if (arguments.length != 2) {
|
||||
throw new _exception2['default']('#unless requires exactly one argument');
|
||||
}
|
||||
return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
|
||||
});
|
||||
};
|
||||
|
@ -761,7 +985,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 14 */
|
||||
/* 26 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
'use strict';
|
||||
|
@ -791,39 +1015,49 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 15 */
|
||||
/* 27 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
'use strict';
|
||||
|
||||
exports.__esModule = true;
|
||||
var dangerousPropertyRegex = /^(constructor|__defineGetter__|__defineSetter__|__lookupGetter__|__proto__)$/;
|
||||
|
||||
exports.dangerousPropertyRegex = dangerousPropertyRegex;
|
||||
|
||||
exports['default'] = function (instance) {
|
||||
instance.registerHelper('lookup', function (obj, field) {
|
||||
if (!obj) {
|
||||
return obj;
|
||||
}
|
||||
if (field === 'constructor' && !obj.propertyIsEnumerable(field)) {
|
||||
if (dangerousPropertyRegex.test(String(field)) && !Object.prototype.propertyIsEnumerable.call(obj, field)) {
|
||||
return undefined;
|
||||
}
|
||||
return obj[field];
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 16 */
|
||||
/* 28 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var _interopRequireDefault = __webpack_require__(2)['default'];
|
||||
|
||||
exports.__esModule = true;
|
||||
|
||||
var _utils = __webpack_require__(4);
|
||||
|
||||
var _exception = __webpack_require__(5);
|
||||
|
||||
var _exception2 = _interopRequireDefault(_exception);
|
||||
|
||||
exports['default'] = function (instance) {
|
||||
instance.registerHelper('with', function (context, options) {
|
||||
if (arguments.length != 2) {
|
||||
throw new _exception2['default']('#with requires exactly one argument');
|
||||
}
|
||||
if (_utils.isFunction(context)) {
|
||||
context = context.call(this);
|
||||
}
|
||||
|
@ -850,7 +1084,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 17 */
|
||||
/* 29 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
@ -860,7 +1094,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
exports.__esModule = true;
|
||||
exports.registerDefaultDecorators = registerDefaultDecorators;
|
||||
|
||||
var _decoratorsInline = __webpack_require__(18);
|
||||
var _decoratorsInline = __webpack_require__(30);
|
||||
|
||||
var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
|
||||
|
||||
|
@ -869,7 +1103,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
}
|
||||
|
||||
/***/ }),
|
||||
/* 18 */
|
||||
/* 30 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
@ -902,7 +1136,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 19 */
|
||||
/* 31 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
@ -953,7 +1187,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 20 */
|
||||
/* 32 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
// Build out our basic SafeString type
|
||||
|
@ -972,12 +1206,12 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
module.exports = exports['default'];
|
||||
|
||||
/***/ }),
|
||||
/* 21 */
|
||||
/* 33 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
'use strict';
|
||||
|
||||
var _Object$seal = __webpack_require__(22)['default'];
|
||||
var _Object$seal = __webpack_require__(34)['default'];
|
||||
|
||||
var _interopRequireWildcard = __webpack_require__(1)['default'];
|
||||
|
||||
|
@ -1001,23 +1235,28 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
var _base = __webpack_require__(3);
|
||||
|
||||
var _helpers = __webpack_require__(9);
|
||||
|
||||
function checkRevision(compilerInfo) {
|
||||
var compilerRevision = compilerInfo && compilerInfo[0] || 1,
|
||||
currentRevision = _base.COMPILER_REVISION;
|
||||
|
||||
if (compilerRevision !== currentRevision) {
|
||||
if (compilerRevision < currentRevision) {
|
||||
var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
|
||||
compilerVersions = _base.REVISION_CHANGES[compilerRevision];
|
||||
throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
|
||||
} else {
|
||||
// Use the embedded version info since the runtime doesn't know about this revision yet
|
||||
throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
|
||||
}
|
||||
if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {
|
||||
var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
|
||||
compilerVersions = _base.REVISION_CHANGES[compilerRevision];
|
||||
throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
|
||||
} else {
|
||||
// Use the embedded version info since the runtime doesn't know about this revision yet
|
||||
throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
|
||||
}
|
||||
}
|
||||
|
||||
function template(templateSpec, env) {
|
||||
|
||||
/* istanbul ignore next */
|
||||
if (!env) {
|
||||
throw new _exception2['default']('No environment passed to template');
|
||||
|
@ -1029,9 +1268,12 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
templateSpec.main.decorator = templateSpec.main_d;
|
||||
|
||||
// Note: Using env.VM references rather than local var references throughout this section to allow
|
||||
// for external users to override these as psuedo-supported APIs.
|
||||
// for external users to override these as pseudo-supported APIs.
|
||||
env.VM.checkRevision(templateSpec.compiler);
|
||||
|
||||
// backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)
|
||||
var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;
|
||||
|
||||
function invokePartialWrapper(partial, context, options) {
|
||||
if (options.hash) {
|
||||
context = Utils.extend({}, context, options.hash);
|
||||
|
@ -1039,13 +1281,15 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
options.ids[0] = true;
|
||||
}
|
||||
}
|
||||
|
||||
partial = env.VM.resolvePartial.call(this, partial, context, options);
|
||||
var result = env.VM.invokePartial.call(this, partial, context, options);
|
||||
|
||||
var optionsWithHooks = Utils.extend({}, options, { hooks: this.hooks });
|
||||
|
||||
var result = env.VM.invokePartial.call(this, partial, context, optionsWithHooks);
|
||||
|
||||
if (result == null && env.compile) {
|
||||
options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
|
||||
result = options.partials[options.name](context, options);
|
||||
result = options.partials[options.name](context, optionsWithHooks);
|
||||
}
|
||||
if (result != null) {
|
||||
if (options.indent) {
|
||||
|
@ -1067,9 +1311,9 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
// Just add water
|
||||
var container = {
|
||||
strict: function strict(obj, name) {
|
||||
if (!(name in obj)) {
|
||||
throw new _exception2['default']('"' + name + '" not defined in ' + obj);
|
||||
strict: function strict(obj, name, loc) {
|
||||
if (!obj || !(name in obj)) {
|
||||
throw new _exception2['default']('"' + name + '" not defined in ' + obj, { loc: loc });
|
||||
}
|
||||
return obj[name];
|
||||
},
|
||||
|
@ -1112,15 +1356,6 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
}
|
||||
return value;
|
||||
},
|
||||
merge: function merge(param, common) {
|
||||
var obj = param || common;
|
||||
|
||||
if (param && common && param !== common) {
|
||||
obj = Utils.extend({}, common, param);
|
||||
}
|
||||
|
||||
return obj;
|
||||
},
|
||||
// An empty object to use as replacement for null-contexts
|
||||
nullContext: _Object$seal({}),
|
||||
|
||||
|
@ -1157,18 +1392,25 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
|
||||
ret._setup = function (options) {
|
||||
if (!options.partial) {
|
||||
container.helpers = container.merge(options.helpers, env.helpers);
|
||||
container.helpers = Utils.extend({}, env.helpers, options.helpers);
|
||||
|
||||
if (templateSpec.usePartial) {
|
||||
container.partials = container.merge(options.partials, env.partials);
|
||||
container.partials = Utils.extend({}, env.partials, options.partials);
|
||||
}
|
||||
if (templateSpec.usePartial || templateSpec.useDecorators) {
|
||||
container.decorators = container.merge(options.decorators, env.decorators);
|
||||
container.decorators = Utils.extend({}, env.decorators, options.decorators);
|
||||
}
|
||||
|
||||
container.hooks = {};
|
||||
|
||||
var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
|
||||
_helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
|
||||
_helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
|
||||
} else {
|
||||
container.helpers = options.helpers;
|
||||
container.partials = options.partials;
|
||||
container.decorators = options.decorators;
|
||||
container.hooks = options.hooks;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1205,6 +1447,10 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
return prog;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is currently part of the official API, therefore implementation details should not be changed.
|
||||
*/
|
||||
|
||||
function resolvePartial(partial, context, options) {
|
||||
if (!partial) {
|
||||
if (options.name === '@partial-block') {
|
||||
|
@ -1282,33 +1528,33 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
}
|
||||
|
||||
/***/ }),
|
||||
/* 22 */
|
||||
/* 34 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
module.exports = { "default": __webpack_require__(23), __esModule: true };
|
||||
module.exports = { "default": __webpack_require__(35), __esModule: true };
|
||||
|
||||
/***/ }),
|
||||
/* 23 */
|
||||
/* 35 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
__webpack_require__(24);
|
||||
module.exports = __webpack_require__(29).Object.seal;
|
||||
__webpack_require__(36);
|
||||
module.exports = __webpack_require__(20).Object.seal;
|
||||
|
||||
/***/ }),
|
||||
/* 24 */
|
||||
/* 36 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// 19.1.2.17 Object.seal(O)
|
||||
var isObject = __webpack_require__(25);
|
||||
var isObject = __webpack_require__(37);
|
||||
|
||||
__webpack_require__(26)('seal', function($seal){
|
||||
__webpack_require__(17)('seal', function($seal){
|
||||
return function seal(it){
|
||||
return $seal && isObject(it) ? $seal(it) : it;
|
||||
};
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
/* 25 */
|
||||
/* 37 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = function(it){
|
||||
|
@ -1316,135 +1562,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|||
};
|
||||
|
||||
/***/ }),
|
||||
/* 26 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// most Object methods by ES6 should accept primitives
|
||||
var $export = __webpack_require__(27)
|
||||
, core = __webpack_require__(29)
|
||||
, fails = __webpack_require__(32);
|
||||
module.exports = function(KEY, exec){
|
||||
var fn = (core.Object || {})[KEY] || Object[KEY]
|
||||
, exp = {};
|
||||
exp[KEY] = exec(fn);
|
||||
$export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 27 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
var global = __webpack_require__(28)
|
||||
, core = __webpack_require__(29)
|
||||
, ctx = __webpack_require__(30)
|
||||
, PROTOTYPE = 'prototype';
|
||||
|
||||
var $export = function(type, name, source){
|
||||
var IS_FORCED = type & $export.F
|
||||
, IS_GLOBAL = type & $export.G
|
||||
, IS_STATIC = type & $export.S
|
||||
, IS_PROTO = type & $export.P
|
||||
, IS_BIND = type & $export.B
|
||||
, IS_WRAP = type & $export.W
|
||||
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
|
||||
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
|
||||
, key, own, out;
|
||||
if(IS_GLOBAL)source = name;
|
||||
for(key in source){
|
||||
// contains in native
|
||||
own = !IS_FORCED && target && key in target;
|
||||
if(own && key in exports)continue;
|
||||
// export native or passed
|
||||
out = own ? target[key] : source[key];
|
||||
// prevent global pollution for namespaces
|
||||
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
|
||||
// bind timers to global for call from export context
|
||||
: IS_BIND && own ? ctx(out, global)
|
||||
// wrap global constructors for prevent change them in library
|
||||
: IS_WRAP && target[key] == out ? (function(C){
|
||||
var F = function(param){
|
||||
return this instanceof C ? new C(param) : C(param);
|
||||
};
|
||||
F[PROTOTYPE] = C[PROTOTYPE];
|
||||
return F;
|
||||
// make static versions for prototype methods
|
||||
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
|
||||
if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
|
||||
}
|
||||
};
|
||||
// type bitmap
|
||||
$export.F = 1; // forced
|
||||
$export.G = 2; // global
|
||||
$export.S = 4; // static
|
||||
$export.P = 8; // proto
|
||||
$export.B = 16; // bind
|
||||
$export.W = 32; // wrap
|
||||
module.exports = $export;
|
||||
|
||||
/***/ }),
|
||||
/* 28 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
|
||||
var global = module.exports = typeof window != 'undefined' && window.Math == Math
|
||||
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
|
||||
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
|
||||
|
||||
/***/ }),
|
||||
/* 29 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
var core = module.exports = {version: '1.2.6'};
|
||||
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
|
||||
|
||||
/***/ }),
|
||||
/* 30 */
|
||||
/***/ (function(module, exports, __webpack_require__) {
|
||||
|
||||
// optional / simple context binding
|
||||
var aFunction = __webpack_require__(31);
|
||||
module.exports = function(fn, that, length){
|
||||
aFunction(fn);
|
||||
if(that === undefined)return fn;
|
||||
switch(length){
|
||||
case 1: return function(a){
|
||||
return fn.call(that, a);
|
||||
};
|
||||
case 2: return function(a, b){
|
||||
return fn.call(that, a, b);
|
||||
};
|
||||
case 3: return function(a, b, c){
|
||||
return fn.call(that, a, b, c);
|
||||
};
|
||||
}
|
||||
return function(/* ...args */){
|
||||
return fn.apply(that, arguments);
|
||||
};
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 31 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = function(it){
|
||||
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
|
||||
return it;
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 32 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = function(exec){
|
||||
try {
|
||||
return !!exec();
|
||||
} catch(e){
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/***/ }),
|
||||
/* 33 */
|
||||
/* 38 */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
/* WEBPACK VAR INJECTION */(function(global) {/* global window */
|
||||
|
|
39
yarn.lock
39
yarn.lock
|
@ -563,10 +563,10 @@ commander@2.12.2:
|
|||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
|
||||
integrity sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==
|
||||
|
||||
commander@~2.17.1:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
|
||||
commander@~2.20.3:
|
||||
version "2.20.3"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
component-emitter@^1.2.1:
|
||||
version "1.2.1"
|
||||
|
@ -736,6 +736,13 @@ eslint-config-discourse@1.1.0:
|
|||
eslint "^4.19"
|
||||
prettier "^1.19.1"
|
||||
|
||||
eslint-plugin-lodash@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-lodash/-/eslint-plugin-lodash-6.0.0.tgz#70fa487ab632e62627ecf01ad3e85c228e3ab9d3"
|
||||
integrity sha512-iuxToisjIYAJdxWtW8OamFyc3yAsGCjU5WokvuBfTc/k5XdWOp9fAmzw+aFjj520/QXspCc8//xJpqkhYUj4qw==
|
||||
dependencies:
|
||||
lodash "^4.17.15"
|
||||
|
||||
eslint-scope@3.7.1:
|
||||
version "3.7.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
|
||||
|
@ -1124,10 +1131,10 @@ graceful-fs@^4.1.2:
|
|||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
|
||||
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
|
||||
|
||||
handlebars@^4.1.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67"
|
||||
integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==
|
||||
handlebars@^4.3.0:
|
||||
version "4.5.3"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482"
|
||||
integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==
|
||||
dependencies:
|
||||
neo-async "^2.6.0"
|
||||
optimist "^0.6.1"
|
||||
|
@ -1547,7 +1554,7 @@ linkify-it@^2.0.0:
|
|||
semver "5.3.0"
|
||||
uglify-js "2.7.5"
|
||||
|
||||
lodash@4.17.15, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
|
||||
lodash@4.17.15, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0:
|
||||
version "4.17.15"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
||||
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
||||
|
@ -1773,9 +1780,9 @@ natural-compare@^1.4.0:
|
|||
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
|
||||
|
||||
neo-async@^2.6.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
|
||||
integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
|
||||
version "2.6.1"
|
||||
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c"
|
||||
integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==
|
||||
|
||||
nice-try@^1.0.4:
|
||||
version "1.0.5"
|
||||
|
@ -2494,11 +2501,11 @@ uglify-js@2.7.5:
|
|||
yargs "~3.10.0"
|
||||
|
||||
uglify-js@^3.1.4:
|
||||
version "3.4.9"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
|
||||
integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
|
||||
version "3.7.4"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.4.tgz#e6d83a1aa32ff448bd1679359ab13d8db0fe0743"
|
||||
integrity sha512-tinYWE8X1QfCHxS1lBS8yiDekyhSXOO6R66yNOCdUJeojxxw+PX2BHAz/BWyW7PQ7pkiWVxJfIEbiDxyLWvUGg==
|
||||
dependencies:
|
||||
commander "~2.17.1"
|
||||
commander "~2.20.3"
|
||||
source-map "~0.6.1"
|
||||
|
||||
uglify-to-browserify@~1.0.0:
|
||||
|
|
Loading…
Reference in New Issue