Skip to content

Commit

Permalink
Merge pull request #128 from alphagov/design-mode
Browse files Browse the repository at this point in the history
Add design mode component
  • Loading branch information
DilwoarH committed Jun 13, 2019
2 parents 42440bb + f80231e commit cd79779
Show file tree
Hide file tree
Showing 12 changed files with 146 additions and 21 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
source 'https://rubygems.org'

gem 'rake'
gem 'jasmine', '~> 2.9'
gem 'jasmine'
14 changes: 7 additions & 7 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
GEM
remote: https://rubygems.org/
specs:
jasmine (2.9.0)
jasmine-core (>= 2.9.0, < 3.0.0)
jasmine (3.4.0)
jasmine-core (~> 3.4.0)
phantomjs
rack (>= 1.2.1)
rake
jasmine-core (2.9.1)
jasmine-core (3.4.0)
phantomjs (2.1.1.0)
rack (2.0.3)
rake (12.3.0)
rack (2.0.7)
rake (12.3.2)

PLATFORMS
ruby

DEPENDENCIES
jasmine (~> 2.9)
jasmine
rake

BUNDLED WITH
1.16.1
1.16.2
Binary file added build/govuk-browser-extension-1.17.0.zip
Binary file not shown.
39 changes: 39 additions & 0 deletions spec/javascripts/design_mode_component_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"use strict";
describe("Toggling design mode", function () {
var $bannerEl;
var designModeComponent;

beforeEach(function () {
// Mock addListener function to call toggleDesignMode trigger when initialized
window.chrome = {
runtime: {
onMessage: {
addListener: function(callback) {
callback({ trigger: 'toggleDesignMode' })
}
},
sendMessage: function(){}
}
};
designModeComponent = new DesignModeComponent;
$bannerEl = $("#govuk-chrome-toolkit-design-mode-banner");
});

it("shows design mode banner", function () {
expect($bannerEl.text()).toMatch(/You are in design mode./);
});

it("removes the banner when toggled off", function () {
designModeComponent.toggleDesignMode();
expect($bannerEl.parent()).toHaveLength(0);
});

it("design mode is on when toggled on", function () {
expect(window.document.designMode).toEqual("on");
});

it("design mode is off when toggled off", function () {
designModeComponent.toggleDesignMode();
expect(window.document.designMode).toEqual("off");
});
});
3 changes: 2 additions & 1 deletion spec/javascripts/support/jasmine.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ src_files:
- src/popup/environment.js
- src/popup/extract_path.js
- src/popup/external_links.js
- src/highlight-component.js
- src/components/highlight-component/highlight-component.js
- src/components/design-mode-component/design-mode-component.js

helpers:
- support/helpers.js
Expand Down
15 changes: 15 additions & 0 deletions src/components/design-mode-component/design-mode-component.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
.govuk-panel.design-mode-component__banner {
color: #fff;
background-color: #005ea5;
margin-bottom: 0;
padding: 10px;
position: sticky;
position: -webkit-sticky;
top: 0; /* required */
z-index: 100;
}

.govuk-panel.design-mode-component__banner .govuk-panel__body {
font-size: 20px;
font-weight: bold;
}
40 changes: 40 additions & 0 deletions src/components/design-mode-component/design-mode-component.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"use strict";

function DesignModeComponent() {
this.state = false;
chrome.runtime.onMessage.addListener(function (request) {
if (request.trigger == "toggleDesignMode") {
this.toggleDesignMode();
}
}.bind(this));
}

DesignModeComponent.prototype.toggleDesignMode = function () {
this.state = !this.state;

window.document.designMode = this.state ? "on" : "off";
this.toggleDesignModeBanner();
this.sendState();
}

DesignModeComponent.prototype.toggleDesignModeBanner = function() {
var id = "govuk-chrome-toolkit-design-mode-banner";
if (this.state) {
$('body').prepend("\
<div class=\"govuk-panel design-mode-component__banner\" id=\""+ id + "\">\
<div class=\"govuk-panel__body\">\
You are in design mode.\
</div>\
</div>\
");
} else {
$("#"+id).remove();
}
}

DesignModeComponent.prototype.sendState = function() {
chrome.runtime.sendMessage({
action: "designModeState",
designModeState: this.state
});
};
File renamed without changes.
File renamed without changes.
10 changes: 7 additions & 3 deletions src/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,20 @@
"name": "GOV.UK Browser Extension",
"description": "Switch between GOV.UK environments and content",
"homepage_url": "https://github.com/alphagov/govuk-browser-extension",
"version": "1.16.0",
"version": "1.17.0",
"content_scripts": [
{
"matches": ["https://*.gov.uk/*"],
"js": [
"popup/lib/jquery.min.js",
"popup/lib/mustache.min.js",
"highlight-component.js"
"components/highlight-component/highlight-component.js",
"components/design-mode-component/design-mode-component.js"
],
"css": ["highlight-component.css"]
"css": [
"components/highlight-component/highlight-component.css",
"components/design-mode-component/design-mode-component.css"
]
}
],
"icons": {
Expand Down
3 changes: 3 additions & 0 deletions src/popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@
<li>
<a href='#' id='highlight-meta-tags'>Show meta tags</a>
</li>
<li>
<a href='#' id='toggle-design-mode'>Turn on design mode</a>
</li>
{{#abTests}}
<li>
<span class='ab-test-name'>A/B test: <strong>{{testName}}</strong></span>
Expand Down
41 changes: 32 additions & 9 deletions src/popup/popup.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ var Popup = Popup || {};
code: "window.highlightComponent = window.highlightComponent || new HighlightComponent; undefined;"
});

chrome.tabs.executeScript(null, {
code: "window.designModeComponent = window.designModeComponent || new DesignModeComponent; undefined;"
});

chrome.tabs.executeScript(null, {
file: "fetch-page-data.js"
});
Expand Down Expand Up @@ -52,6 +56,16 @@ var Popup = Popup || {};
}
});

chrome.runtime.onMessage.addListener(function (request, _sender) {
if (request.action == "designModeState") {
var toggleLink = $("#toggle-design-mode");
if (request.designModeState)
toggleLink.text("Turn off design mode");
else
toggleLink.text("Turn on design mode");
}
});

// Render the popup.
function renderPopup(location, host, origin, pathname, renderingApplication, windowHeight, abTestBuckets) {
// Creates a view object with the data and render a template with it.
Expand Down Expand Up @@ -86,6 +100,10 @@ var Popup = Popup || {};
chrome.tabs.executeScript(null, {
code: "window.highlightComponent.sendState(); undefined;"
});

chrome.tabs.executeScript(null, {
code: "window.designModeComponent.sendState(); undefined;"
});
}

function setupClicks(currentUrl) {
Expand Down Expand Up @@ -122,20 +140,17 @@ var Popup = Popup || {};

$('#highlight-components').on('click', function(e) {
e.preventDefault();

chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
var govukTab = tabs[0];
chrome.tabs.sendMessage(govukTab.id, { trigger: 'toggleComponents' });
});
sendChromeTabMessage('toggleComponents');
});

$('#highlight-meta-tags').on('click', function(e) {
e.preventDefault();
sendChromeTabMessage('toggleMetaTags');
});

chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
var govukTab = tabs[0];
chrome.tabs.sendMessage(govukTab.id, { trigger: 'toggleMetaTags' });
});
$('#toggle-design-mode').on('click', function(e) {
e.preventDefault();
sendChromeTabMessage('toggleDesignMode');
});
}

Expand Down Expand Up @@ -181,4 +196,12 @@ var Popup = Popup || {};
abTests: abTests
}
}

function sendChromeTabMessage(trigger) {
chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
var govukTab = tabs[0];
chrome.tabs.sendMessage(govukTab.id, { trigger: trigger });
});
}

}());

0 comments on commit cd79779

Please sign in to comment.