// Usage: // // - Call with a module name + selector name to get a transformed (opaque) selector // // ```js // CSSModule("events_index", "header") // // => "..." (some opaque string that matches the stylesheet) // ``` // // - Call with a module name to get a function for modulizing selectors // // ```js // var eventsModule = CSSModule("events_index") // var headerSelector = eventsModule("header") // var footerSelector = eventsModule("footer") // ``` // // This behavior has to match `CSSModules::Rewrite` in Ruby // so that generated selectors match. function CSSModule(moduleName, selectorName) { // This matches `Rewrite`: var opaqueString = btoa(moduleName).replace(/[^a-zA-Z0-9]/g, "") var transformedModuleName = opaqueString + "_" + moduleName; if (selectorName) { return transformedModuleName + "_" + selectorName; } else { return function(selectorName) { return transformedModuleName + "_" + selectorName; }; } };