clean_node.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * DevExtreme (integration/knockout/clean_node.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var elementData = require("../../core/element_data");
  11. var afterCleanData = elementData.afterCleanData;
  12. var strategyChanging = elementData.strategyChanging;
  13. var ko = require("knockout");
  14. var compareVersion = require("../../core/utils/version").compare;
  15. var originalKOCleanExternalData = ko.utils.domNodeDisposal.cleanExternalData;
  16. var patchCleanData = function() {
  17. afterCleanData(function(nodes) {
  18. for (var i = 0; i < nodes.length; i++) {
  19. nodes[i].cleanedByJquery = true
  20. }
  21. for (i = 0; i < nodes.length; i++) {
  22. if (!nodes[i].cleanedByKo) {
  23. ko.cleanNode(nodes[i])
  24. }
  25. delete nodes[i].cleanedByKo
  26. }
  27. for (i = 0; i < nodes.length; i++) {
  28. delete nodes[i].cleanedByJquery
  29. }
  30. });
  31. ko.utils.domNodeDisposal.cleanExternalData = function(node) {
  32. node.cleanedByKo = true;
  33. if (!node.cleanedByJquery) {
  34. elementData.cleanData([node])
  35. }
  36. }
  37. };
  38. var restoreOriginCleanData = function() {
  39. afterCleanData(function() {});
  40. ko.utils.domNodeDisposal.cleanExternalData = originalKOCleanExternalData
  41. };
  42. patchCleanData();
  43. strategyChanging.add(function(strategy) {
  44. var isJQuery = !!strategy.fn;
  45. if (isJQuery && compareVersion(strategy.fn.jquery, [2, 0]) < 0) {
  46. restoreOriginCleanData()
  47. }
  48. });