{"ScriptPreparationCode":"function toggleAttributeSpacedValue2(elements, attributeName, value, force) {\r\n if (elements \u0026\u0026 typeof elements == \u0027object\u0027) {\r\n \r\n var i = 0,\r\n eln = typeof elements.length == \u0027number\u0027,\r\n el = eln ? elements.length : 1,\r\n vl,\r\n vln,\r\n values,\r\n finalAttributeValue,\r\n currentAttributeValue,\r\n valueItem,\r\n spacedValueItem,\r\n hasValueItem,\r\n element;\r\n \r\n if (value \u0026\u0026 (typeof value == \u0027string\u0027 || (value = value \u002B \u0027\u0027))) {\r\n\r\n for (; i \u003C el; i\u002B\u002B) {\r\n if (typeof (element = eln ? elements[i] : elements) == \u0027object\u0027 \u0026\u0026 element.nodeType === 1) {\r\n finalAttributeValue = currentAttributeValue = (currentAttributeValue = element.getAttribute(attributeName)) ? \u0027 \u0027 \u002B currentAttributeValue.replace(rSpaceGlobal, \u0027 \u0027) \u002B \u0027 \u0027 : \u0027\u0027;\r\n values || ((vln = value.indexOf(\u0027 \u0027) \u003E -1) ? vl = (values = value.split(rSpaceGlobal)).length : vl = 1, values = value.trim());\r\n for (var j = 0; j \u003C vl; j\u002B\u002B) {\r\n if ((valueItem = vln ? values[j] : values)) {\r\n hasValueItem = !finalAttributeValue ? false : finalAttributeValue.indexOf(spacedValueItem = \u0027 \u0027 \u002B valueItem \u002B \u0027 \u0027) \u003E -1;\r\n if (typeof force != \u0027boolean\u0027 || force != hasValueItem) {\r\n finalAttributeValue = hasValueItem ? finalAttributeValue.replace(spacedValueItem, \u0027 \u0027) : finalAttributeValue \u002B valueItem \u002B \u0027 \u0027;\r\n }\r\n }\r\n }\r\n if (finalAttributeValue \u0026\u0026 (finalAttributeValue = finalAttributeValue.trim())) {\r\n element.setAttribute(attributeName, finalAttributeValue); \r\n } else {\r\n element.removeAttribute(attributeName);\r\n }\r\n }\r\n }\r\n } else {\r\n for (; i \u003C el; i\u002B\u002B) {\r\n if (typeof (element = eln ? elements[i] : elements) == \u0027object\u0027 \u0026\u0026 element.nodeType === 1) {\r\n element.removeAttribute(attributeName);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nvar rSpaceGlobal = /\\s\u002B/g,\r\n toggleAttributeSpacedValue1 = (function() {\r\n var rSpace = /\\s\u002B/, \r\n rSpaceGlobal = /\\s\u002B/g, \r\n rAttributeCleanup = /[\\n\\t\\r]/g;\r\n return function(elements, attributeName, value, force) {\r\n if (elements \u0026\u0026 typeof elements == \u0027object\u0027) {\r\n \r\n if (typeof elements.length != \u0027number\u0027) {\r\n elements = [elements];\r\n }\r\n \r\n if (typeof force != \u0027boolean\u0027) {\r\n force = undefined;\r\n }\r\n \r\n if (value \u0026\u0026 (typeof value == \u0027string\u0027 || (value = value \u002B \u0027\u0027))) {\r\n var values,\r\n attributeValue,\r\n finalAttributeValue,\r\n currentAttributeValue,\r\n valueItem,\r\n spacedValueItem,\r\n hasValueItem,\r\n remove,\r\n element;\r\n\r\n for (var i = 0, el = elements.length; i \u003C el; i\u002B\u002B) {\r\n element = elements[i];\r\n if (typeof element == \u0027object\u0027 \u0026\u0026 element.nodeType === 1) {\r\n attributeValue = element.getAttribute(attributeName);\r\n finalAttributeValue = currentAttributeValue = attributeValue ? (\u0027 \u0027 \u002B attributeValue \u002B \u0027 \u0027).replace(rAttributeCleanup, \u0027 \u0027) : \u0027\u0027;\r\n for (var j = 0, vl = (values || (values = value.split(rSpace))).length; j \u003C vl; j\u002B\u002B) {\r\n if ((valueItem = values[j])) {\r\n spacedValueItem = \u0027 \u0027 \u002B valueItem \u002B \u0027 \u0027;\r\n hasValueItem = ~finalAttributeValue.indexOf(spacedValueItem);\r\n remove = force != undefined ? !force : hasValueItem;\r\n if (remove \u0026\u0026 hasValueItem) {\r\n finalAttributeValue = finalAttributeValue.replace(spacedValueItem, \u0027 \u0027)\r\n } else if (!remove \u0026\u0026 !hasValueItem) {\r\n finalAttributeValue = finalAttributeValue \u002B spacedValueItem;\r\n }\r\n }\r\n }\r\n if (finalAttributeValue != currentAttributeValue) {\r\n finalAttributeValue = finalAttributeValue.replace(rSpaceGlobal, \u0027 \u0027);\r\n finalAttributeValue = finalAttributeValue ? finalAttributeValue.trim() : finalAttributeValue;\r\n if (finalAttributeValue) {\r\n if (attributeName===\u0027class\u0027){\r\n element.className = finalAttributeValue;\r\n }else{\r\n element.setAttribute(attributeName, finalAttributeValue); \r\n }\r\n } else {\r\n element.removeAttribute(attributeName);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n for (var i = 0, el = elements.length; i \u003C el; i\u002B\u002B) {\r\n element = elements[i];\r\n if (typeof element == \u0027object\u0027 \u0026\u0026 element.nodeType === 1) {\r\n element.removeAttribute(attributeName);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })()","TestCases":[{"Name":"V1","Code":"var asdf = document.querySelector(\u0027asdf1\u0027);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027aaa\u0027);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027aaa\u0027, true);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027bbb\u0027, false);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027bbb\u0027);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027ccc\u0027);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027bbb\u0027);\r\ntoggleAttributeSpacedValue1(asdf, \u0027data-role\u0027, \u0027aaa ccc\u0027, false);","IsDeferred":false},{"Name":"V2","Code":"var asdf = document.querySelector(\u0027asdf2\u0027);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027aaa\u0027);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027aaa\u0027, true);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027bbb\u0027, false);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027bbb\u0027);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027ccc\u0027);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027bbb\u0027);\r\ntoggleAttributeSpacedValue2(asdf, \u0027data-role\u0027, \u0027aaa ccc\u0027, false);","IsDeferred":false}]}