diff --git a/guidemaker-ember-template/package.json b/guidemaker-ember-template/package.json
index bcd963d5..fcba1124 100644
--- a/guidemaker-ember-template/package.json
+++ b/guidemaker-ember-template/package.json
@@ -96,8 +96,9 @@
"./components/table-of-contents.js": "./dist/_app_/components/table-of-contents.js",
"./helpers/html-safe.js": "./dist/_app_/helpers/html-safe.js",
"./helpers/starts-with.js": "./dist/_app_/helpers/starts-with.js",
- "./initializers/ember-template-showdown-extensions.js": "./dist/_app_/initializers/ember-template-showdown-extensions.js",
+ "./instance-initializers/ember-template-showdown-extensions.js": "./dist/_app_/instance-initializers/ember-template-showdown-extensions.js",
"./modifiers/highlight-active-title.js": "./dist/_app_/modifiers/highlight-active-title.js",
+ "./services/features.js": "./dist/_app_/services/features.js",
"./services/search.js": "./dist/_app_/services/search.js",
"./templates/application.js": "./dist/_app_/templates/application.js",
"./templates/error.js": "./dist/_app_/templates/error.js",
diff --git a/guidemaker-ember-template/rollup.config.mjs b/guidemaker-ember-template/rollup.config.mjs
index a26ec70f..8b44dc22 100644
--- a/guidemaker-ember-template/rollup.config.mjs
+++ b/guidemaker-ember-template/rollup.config.mjs
@@ -31,7 +31,7 @@ export default {
'modifiers/**/*.js',
'services/**/*.js',
'templates/**/*.js',
- 'initializers/**/*.js',
+ 'instance-initializers/**/*.js',
]),
// Follow the V2 Addon rules about dependencies. Your code can import from
diff --git a/guidemaker-ember-template/src/components/guides-article.hbs b/guidemaker-ember-template/src/components/guides-article.hbs
index 1677b4b8..430c7ee5 100644
--- a/guidemaker-ember-template/src/components/guides-article.hbs
+++ b/guidemaker-ember-template/src/components/guides-article.hbs
@@ -66,7 +66,7 @@
diff --git a/guidemaker-ember-template/src/initializers/ember-template-showdown-extensions.js b/guidemaker-ember-template/src/instance-initializers/ember-template-showdown-extensions.js
similarity index 58%
rename from guidemaker-ember-template/src/initializers/ember-template-showdown-extensions.js
rename to guidemaker-ember-template/src/instance-initializers/ember-template-showdown-extensions.js
index 96fd6e3b..7eaaa8fe 100644
--- a/guidemaker-ember-template/src/initializers/ember-template-showdown-extensions.js
+++ b/guidemaker-ember-template/src/instance-initializers/ember-template-showdown-extensions.js
@@ -1,6 +1,6 @@
import showdown from 'showdown';
-export function initialize(/* application */) {
+export function initialize(application) {
showdown.extension('header-links', function () {
return [
{
@@ -12,6 +12,38 @@ export function initialize(/* application */) {
},
];
});
+
+ const features = application.lookup('service:features');
+ showdown.extension('feature-flags', function () {
+ return [
+ {
+ type: 'lang',
+ filter: function (text) {
+ return text
+ .replace(
+ /]+)>([\s\S]*?)<\/feature-flag-on-\1>/g,
+ function (match, featureName, content) {
+ if (features.isEnabled(featureName)) {
+ return content;
+ } else {
+ return '';
+ }
+ },
+ )
+ .replace(
+ /]+)>([\s\S]*?)<\/feature-flag-off-\1>/g,
+ function (match, featureName, content) {
+ if (!features.isEnabled(featureName)) {
+ return content;
+ } else {
+ return '';
+ }
+ },
+ );
+ },
+ },
+ ];
+ });
}
export default {
diff --git a/guidemaker-ember-template/src/services/features.js b/guidemaker-ember-template/src/services/features.js
new file mode 100644
index 00000000..f2ef7949
--- /dev/null
+++ b/guidemaker-ember-template/src/services/features.js
@@ -0,0 +1,12 @@
+import Service from '@ember/service';
+
+export default class Features extends Service {
+ features = {};
+ setupFeatures(features) {
+ this.features = features;
+ }
+
+ isEnabled(featureName) {
+ return this.features[featureName];
+ }
+}
diff --git a/test-app/tests/integration/components/guides-article-test.js b/test-app/tests/integration/components/guides-article-test.js
index 0e607ea9..788e9580 100644
--- a/test-app/tests/integration/components/guides-article-test.js
+++ b/test-app/tests/integration/components/guides-article-test.js
@@ -98,4 +98,41 @@ module('Integration | Component | guides-article', function (hooks) {
'https://github.com/ember-learn/guidemaker-ember-template/edit/master/guides/v1.0.0/model-id.md',
);
});
+
+ test('it renders content based on feature flags', async function (assert) {
+ this.owner.register('service:page', PageStub);
+ this.owner.lookup('service:features').setupFeatures({
+ 'template-tag': true,
+ });
+
+ this.model = {
+ id: 'model-id',
+ content: `
+
+ This is template tag content.
+
+
+
+ This is classic template content.
+`,
+ };
+
+ await render(hbs`
+
+ `);
+
+ assert
+ .dom('.guides-article-content')
+ .includesText('This is template tag content.');
+ assert
+ .dom('.guides-article-content')
+ .doesNotIncludeText('This is classic template content.');
+
+ assert
+ .dom('feature-flag-off-template-tag')
+ .doesNotExist('Feature flag tags are stripped');
+ assert
+ .dom('feature-flag-on-template-tag')
+ .doesNotExist('Feature flag tags are stripped');
+ });
});