Bug 1417577 - Support locale direction changes in sync sidebar r=eoger,gandalf

MozReview-Commit-ID: 2pHSjoOhW9o

--HG--
extra : rebase_source : bf6c483413994c279fbcb762c3305f4dcf8f703a
This commit is contained in:
Carol Ng 2018-05-30 14:12:24 -04:00
Родитель 39a52ad23c
Коммит 0f895bd54e
2 изменённых файлов: 38 добавлений и 1 удалений

Просмотреть файл

@ -79,6 +79,11 @@ SyncedTabsDeckComponent.prototype = {
// if this engine is disabled and refresh the UI one last time.
Services.obs.addObserver(this, "weave:service:ready");
// Add app locale change support for HTML sidebar
Services.obs.addObserver(this, "intl:app-locales-changed");
Services.prefs.addObserver("intl.uidirection", this);
this.updateDir();
// Go ahead and trigger sync
this._SyncedTabs.syncTabs()
.catch(Cu.reportError);
@ -101,6 +106,8 @@ SyncedTabsDeckComponent.prototype = {
Services.obs.removeObserver(this, FxAccountsCommon.ONLOGIN_NOTIFICATION);
Services.obs.removeObserver(this, "weave:service:login:change");
Services.obs.removeObserver(this, "weave:service:ready");
Services.obs.removeObserver(this, "intl:app-locales-changed");
Services.prefs.removeObserver("intl.uidirection", this);
this._deckView.destroy();
},
@ -117,6 +124,14 @@ SyncedTabsDeckComponent.prototype = {
case "weave:service:login:change":
this.updatePanel();
break;
case "intl:app-locales-changed":
this.updateDir();
break;
case "nsPref:changed":
if (data == "intl.uidirection") {
this.updateDir();
}
break;
default:
break;
}
@ -158,6 +173,17 @@ SyncedTabsDeckComponent.prototype = {
});
},
updateDir() {
// If the HTML document doesn't exist, we can't update the window
if (!this._window.document) return;
if (Services.locale.isAppLocaleRTL) {
this._window.document.body.dir = "rtl";
} else {
this._window.document.body.dir = "ltr";
}
},
updatePanel() {
// return promise for tests
return this.getPanelStatus()

Просмотреть файл

@ -94,7 +94,7 @@ add_task(async function testObserver() {
sinon.stub(listStore, "getData");
let component = new SyncedTabsDeckComponent({
mockWindow,
window: mockWindow,
deckStore,
listStore,
listComponent,
@ -104,10 +104,12 @@ add_task(async function testObserver() {
sinon.spy(component, "observe");
sinon.stub(component, "updatePanel");
sinon.stub(component, "updateDir");
component.init();
SyncedTabs.syncTabs.restore();
Assert.ok(component.updatePanel.called, "triggers panel update during init");
Assert.ok(component.updateDir.called, "triggers UI direction update during init");
Services.obs.notifyObservers(null, SyncedTabs.TOPIC_TABS_CHANGED);
@ -128,6 +130,15 @@ add_task(async function testObserver() {
Assert.ok(component.observe.calledWith(null, "weave:service:login:change"),
"component is notified of login change");
Assert.equal(component.updatePanel.callCount, 4, "triggers panel update again");
Services.locale.setAvailableLocales(["ab-CD"]);
Services.locale.setRequestedLocales(["ab-CD"]);
Assert.ok(component.updateDir.calledTwice, "locale change triggers UI direction update");
Services.prefs.setIntPref("intl.uidirection", 1);
Assert.equal(component.updateDir.callCount, 3, "pref change triggers UI direction update");
});
add_task(async function testPanelStatus() {