overleaf/services/web/frontend/js/modules/recursionHelper.js

79 lines
2.3 KiB
JavaScript
Raw Normal View History

/* eslint-disable
max-len,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
//
// * An Angular service which helps with creating recursive directives.
// * @author Mark Lagendijk
// * @license MIT
//
// From: https://github.com/marklagendijk/angular-recursion
/* eslint-disable
max-len,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
//
// * An Angular service which helps with creating recursive directives.
// * @author Mark Lagendijk
// * @license MIT
//
// From: https://github.com/marklagendijk/angular-recursion
angular.module('RecursionHelper', []).factory('RecursionHelper', [
'$compile',
function ($compile) {
/*
Manually compiles the element, fixing the recursion loop.
@param element
@param [link] A post-link function, or an object with function(s) registered via pre and post properties.
@returns An object containing the linking functions.
*/
return {
compile(element, link) {
// Normalize the link parameter
if (angular.isFunction(link)) {
link = { post: link }
}
// Break the recursion loop by removing the contents
const contents = element.contents().remove()
let compiledContents
return {
pre: link && link.pre ? link.pre : null,
/*
Compiles and re-adds the contents
*/
post(scope, element) {
// Compile the contents
if (!compiledContents) {
compiledContents = $compile(contents)
}
// Re-add the compiled contents to the element
compiledContents(scope, function (clone) {
element.append(clone)
})
// Call the post-linking function, if any
if (link && link.post) {
link.post.apply(null, arguments)
}
}
}
}
}
}
])