merge fx-team to mozilla-central a=merge

This commit is contained in:
Carsten "Tomcat" Book 2015-09-21 13:38:22 +02:00
Родитель 779006fb8a 4f37b5f665
Коммит c231a6730a
35 изменённых файлов: 216 добавлений и 391 удалений

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

@ -214,10 +214,6 @@ var gFxAccounts = {
this.showDoorhanger("sync-start-panel");
},
showSyncFailedDoorhanger: function () {
this.showDoorhanger("sync-error-panel");
},
updateUI: function () {
this.updateAppMenuItem();
this.updateMigrationNotification();

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

@ -449,28 +449,6 @@
</hbox>
</panel>
<!-- Sync Error Panel -->
<panel id="sync-error-panel" class="sync-panel" type="arrow" hidden="true"
noautofocus="true" onclick="this.hidePopup();"
flip="slide">
<hbox class="sync-panel-outer">
<image class="sync-panel-icon"/>
<vbox class="sync-panel-inner">
<description id="sync-error-panel-title"
value="&syncErrorPanel.heading;"/>
<description id="sync-error-panel-subtitle"
value="&syncErrorPanel.subTitle;"/>
<hbox class="sync-panel-button-box">
<spacer flex="1"/>
<button class="sync-panel-button"
label="&syncErrorPanel.signInButton.label;"
accesskey="&syncErrorPanel.signInButton.accesskey;"
onclick="gFxAccounts.openSignInAgainPage();"/>
</hbox>
</vbox>
</hbox>
</panel>
<!-- Bookmarks and history tooltip -->
<tooltip id="bhTooltip"/>

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

@ -607,89 +607,6 @@ html[dir="rtl"] .room-entry-context-actions > .dropdown-menu {
width: 16px;
}
/* Buttons */
.button-group {
display: flex;
flex-direction: row;
width: 100%;
padding-top: 6px;
}
.button-group > .button {
flex: 1;
margin: 0 5px;
min-height: 3rem;
font-size: 1.2rem;
line-height: 1rem;
font-weight: 300;
border-radius: 4px;
}
.button-group > .button:first-child {
-moz-margin-start: 0;
}
.button-group > .button:last-child {
-moz-margin-end: 0;
}
.button {
padding: 2px 5px;
background-color: #fbfbfb;
color: #333;
border-radius: 2px;
min-height: 26px;
font-size: 1.2rem;
line-height: 1.2rem;
border: none;
}
.button:hover {
background-color: #ebebeb;
}
.button:active {
background-color: #ccc;
color: #fff;
}
.button.button-accept {
background-color: #00a9dc;
color: #fff;
}
.button.button-accept:hover,
.button.button-accept:hover:active {
background-color: #5cccee;
color: #fff;
}
.button.button-cancel {
background-color: #ebebeb;
border: 0;
color: #000;
width: 105px; /* based on fixed width of Cancel button from mockup */
flex: 0 0 auto;
}
.button.button-cancel:hover,
.button.button-cancel:hover:active {
background-color: #dcd6d6;
color: #000;
}
.button.button-cancel:disabled {
background-color: #ebebeb;
color: #c3c3c3;
}
.button.button-accept:active {
background-color: #3aa689;
border-color: #3aa689;
color: #fff;
}
.button-close {
background-color: transparent;
background-image: url(../shared/img/icons-10x10.svg#close);

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

@ -719,6 +719,7 @@ loop.conversationViews = (function(mozL10n) {
mozLoop: this.props.mozLoop,
publishStream: this.publishStream,
settingsMenuItems: settingsMenuItems,
show: true,
video: this.props.video})
)
)

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

@ -719,6 +719,7 @@ loop.conversationViews = (function(mozL10n) {
mozLoop={this.props.mozLoop}
publishStream={this.publishStream}
settingsMenuItems={settingsMenuItems}
show={true}
video={this.props.video} />
</sharedViews.MediaLayoutView>
</div>

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

@ -975,7 +975,7 @@ loop.panel = (function(_, mozL10n) {
React.createElement("div", {className: "new-room-view"},
React.createElement("div", {className: contextClasses},
React.createElement(Checkbox, {checked: this.state.checked,
label: mozL10n.get("context_inroom_label"),
label: mozL10n.get("context_inroom_label2"),
onChange: this.onCheckboxChange}),
React.createElement(sharedViews.ContextUrlView, {
allowClick: false,

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

@ -975,7 +975,7 @@ loop.panel = (function(_, mozL10n) {
<div className="new-room-view">
<div className={contextClasses}>
<Checkbox checked={this.state.checked}
label={mozL10n.get("context_inroom_label")}
label={mozL10n.get("context_inroom_label2")}
onChange={this.onCheckboxChange} />
<sharedViews.ContextUrlView
allowClick={false}

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

@ -449,25 +449,6 @@ loop.roomViews = (function(mozL10n) {
mozLoop.telemetryAddValue("LOOP_ROOM_CONTEXT_CLICK", 1);
},
handleCheckboxChange: function(state) {
if (state.checked) {
// The checkbox was checked, prefill the fields with the values available
// in `availableContext`.
var context = this.state.availableContext;
this.setState({
newRoomURL: context.url,
newRoomDescription: context.description,
newRoomThumbnail: context.previewImage
});
} else {
this.setState({
newRoomURL: "",
newRoomDescription: "",
newRoomThumbnail: ""
});
}
},
handleFormSubmit: function(event) {
event && event.preventDefault();
@ -516,27 +497,13 @@ loop.roomViews = (function(mozL10n) {
var cx = React.addons.classSet;
var availableContext = this.state.availableContext;
// The checkbox shows as checked when there's already context data
// attached to this room.
var checked = !!urlDescription;
var checkboxLabel = urlDescription || (availableContext && availableContext.url ?
availableContext.description : "");
return (
React.createElement("div", {className: "room-context"},
React.createElement("p", {className: cx({"error": !!this.props.error,
"error-display-area": true})},
mozL10n.get("rooms_change_failed_label")
),
React.createElement("div", {className: "room-context-label"}, mozL10n.get("context_inroom_label")),
React.createElement(sharedViews.Checkbox, {
additionalClass: cx({ hide: !checkboxLabel }),
checked: checked,
disabled: checked,
label: checkboxLabel,
onChange: this.handleCheckboxChange,
useEllipsis: true,
value: location}),
React.createElement("h2", {className: "room-context-header"}, mozL10n.get("context_inroom_header")),
React.createElement("form", {onSubmit: this.handleFormSubmit},
React.createElement("input", {className: "room-context-name",
maxLength: this.maxRoomNameLength,
@ -554,16 +521,17 @@ loop.roomViews = (function(mozL10n) {
onKeyDown: this.handleTextareaKeyDown,
placeholder: mozL10n.get("context_edit_comments_placeholder"),
rows: "2", type: "text",
valueLink: this.linkState("newRoomDescription")})
),
React.createElement("button", {className: "btn btn-info",
disabled: this.props.savingContext,
onClick: this.handleFormSubmit},
mozL10n.get("context_save_label2")
),
React.createElement("button", {className: "room-context-btn-close",
onClick: this.handleCloseClick,
title: mozL10n.get("cancel_button")})
valueLink: this.linkState("newRoomDescription")}),
React.createElement(sharedViews.ButtonGroup, null,
React.createElement(sharedViews.Button, {additionalClass: "button-cancel",
caption: mozL10n.get("context_cancel_label"),
onClick: this.handleCloseClick}),
React.createElement(sharedViews.Button, {additionalClass: "button-accept",
caption: mozL10n.get("context_done_label"),
disabled: this.props.savingContext,
onClick: this.handleFormSubmit})
)
)
)
);
}
@ -819,6 +787,7 @@ loop.roomViews = (function(mozL10n) {
publishStream: this.publishStream,
screenShare: screenShareData,
settingsMenuItems: settingsMenuItems,
show: !shouldRenderEditContextView,
video: {enabled: !this.state.videoMuted, visible: true}}),
React.createElement(DesktopRoomInvitationView, {
dispatcher: this.props.dispatcher,

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

@ -449,25 +449,6 @@ loop.roomViews = (function(mozL10n) {
mozLoop.telemetryAddValue("LOOP_ROOM_CONTEXT_CLICK", 1);
},
handleCheckboxChange: function(state) {
if (state.checked) {
// The checkbox was checked, prefill the fields with the values available
// in `availableContext`.
var context = this.state.availableContext;
this.setState({
newRoomURL: context.url,
newRoomDescription: context.description,
newRoomThumbnail: context.previewImage
});
} else {
this.setState({
newRoomURL: "",
newRoomDescription: "",
newRoomThumbnail: ""
});
}
},
handleFormSubmit: function(event) {
event && event.preventDefault();
@ -516,27 +497,13 @@ loop.roomViews = (function(mozL10n) {
var cx = React.addons.classSet;
var availableContext = this.state.availableContext;
// The checkbox shows as checked when there's already context data
// attached to this room.
var checked = !!urlDescription;
var checkboxLabel = urlDescription || (availableContext && availableContext.url ?
availableContext.description : "");
return (
<div className="room-context">
<p className={cx({"error": !!this.props.error,
"error-display-area": true})}>
{mozL10n.get("rooms_change_failed_label")}
</p>
<div className="room-context-label">{mozL10n.get("context_inroom_label")}</div>
<sharedViews.Checkbox
additionalClass={cx({ hide: !checkboxLabel })}
checked={checked}
disabled={checked}
label={checkboxLabel}
onChange={this.handleCheckboxChange}
useEllipsis={true}
value={location} />
<h2 className="room-context-header">{mozL10n.get("context_inroom_header")}</h2>
<form onSubmit={this.handleFormSubmit}>
<input className="room-context-name"
maxLength={this.maxRoomNameLength}
@ -555,15 +522,16 @@ loop.roomViews = (function(mozL10n) {
placeholder={mozL10n.get("context_edit_comments_placeholder")}
rows="2" type="text"
valueLink={this.linkState("newRoomDescription")} />
<sharedViews.ButtonGroup>
<sharedViews.Button additionalClass="button-cancel"
caption={mozL10n.get("context_cancel_label")}
onClick={this.handleCloseClick} />
<sharedViews.Button additionalClass="button-accept"
caption={mozL10n.get("context_done_label")}
disabled={this.props.savingContext}
onClick={this.handleFormSubmit} />
</sharedViews.ButtonGroup>
</form>
<button className="btn btn-info"
disabled={this.props.savingContext}
onClick={this.handleFormSubmit}>
{mozL10n.get("context_save_label2")}
</button>
<button className="room-context-btn-close"
onClick={this.handleCloseClick}
title={mozL10n.get("cancel_button")}/>
</div>
);
}
@ -819,6 +787,7 @@ loop.roomViews = (function(mozL10n) {
publishStream={this.publishStream}
screenShare={screenShareData}
settingsMenuItems={settingsMenuItems}
show={!shouldRenderEditContextView}
video={{enabled: !this.state.videoMuted, visible: true}} />
<DesktopRoomInvitationView
dispatcher={this.props.dispatcher}

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

@ -75,6 +75,87 @@ p {
width: 100%;
}
/* Buttons */
.button-group {
display: flex;
flex-direction: row;
width: 100%;
padding-top: 6px;
}
.button-group > .button {
flex: 1;
margin: 0 5px;
min-height: 3rem;
font-size: 1.2rem;
line-height: 1rem;
font-weight: 300;
border-radius: 4px;
}
.button-group > .button:first-child {
-moz-margin-start: 0;
}
.button-group > .button:last-child {
-moz-margin-end: 0;
}
.button {
padding: 2px 5px;
background-color: #fbfbfb;
color: #333;
border-radius: 2px;
min-height: 26px;
font-size: 1.2rem;
line-height: 1.2rem;
border: none;
}
.button:hover {
background-color: #ebebeb;
}
.button:active {
background-color: #ccc;
color: #fff;
}
.button.button-accept {
background-color: #00a9dc;
color: #fff;
}
.button.button-accept:hover,
.button.button-accept:hover:active {
background-color: #5cccee;
color: #fff;
}
.button.button-cancel {
background-color: #ebebeb;
border: 0;
color: #000;
}
.button.button-cancel:hover,
.button.button-cancel:hover:active {
background-color: #dcd6d6;
color: #000;
}
.button.button-cancel:disabled {
background-color: #ebebeb;
color: #c3c3c3;
}
.button.button-accept:active {
background-color: #3aa689;
border-color: #3aa689;
color: #fff;
}
/* A reset for all button-appearing elements, with the lowest-common
* denominator of the needed rules. Intended to be used as a base class
* together with .btn-*

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

@ -915,13 +915,6 @@ html[dir="rtl"] .room-conversation-wrapper header a {
align-items: center;
}
.room-invitation-overlay input[type="text"] {
display: block;
background-color: rgba(0,0,0,.5);
border-radius: 3px;
padding: .5em;
}
.room-invitation-overlay .btn-group {
padding: 0 0 5rem 0;
}
@ -999,10 +992,9 @@ body[platform="win"] .share-service-dropdown.overflow > .dropdown-menu-item {
}
.room-context {
background: rgba(0,0,0,.8);
background: #fff;
border-top: 2px solid #444;
border-bottom: 2px solid #444;
padding: .5rem;
position: absolute;
left: 0;
bottom: 0;
@ -1049,13 +1041,11 @@ body[platform="win"] .share-service-dropdown.overflow > .dropdown-menu-item {
width: 100%;
}
.room-context-label {
margin-bottom: 1em;
}
.room-context-label,
.room-context > .checkbox-wrapper > label {
color: #fff;
.room-context-header {
color: #333;
font-size: 1.2rem;
font-weight: bold;
margin: 1rem auto;
}
.room-context-comment {
@ -1079,71 +1069,40 @@ body[platform="win"] .share-service-dropdown.overflow > .dropdown-menu-item {
}
.room-context > form {
margin-bottom: 1rem;
padding: .5rem;
width: 100%;
}
.room-context > form > textarea,
.room-context > form > input[type="text"] {
display: block;
background: rgba(0,0,0,.5);
font-family: "Helvetica Neue", Arial, sans;
border: 1px solid rgba(255,255,255,.2);
width: 100%;
padding: .5em;
border-radius: 3px;
resize: none;
color: #fff;
outline: none;
border-radius: 4px;
margin: 10px 0;
border: 1px solid #c3c3c3;
height: 2.6rem;
padding: 6px;
font-size: 1.1rem;
color: #4a4a4a;
box-shadow: none;
}
.room-context > form > textarea {
font-size: 1em;
font-family: inherit;
height: 5.2rem;
resize: none;
}
.room-context > form > input:not([disabled]).room-context-url {
color: #0095dd;
.room-context > form > textarea::-moz-placeholder,
.room-context > form > input::-moz-placeholder {
color: #999;
}
.room-context > form > input[disabled] {
background-color: rgba(255,255,255,.2);
color: rgba(255,255,255,.4);
}
.room-context > form > textarea:not(:last-of-type),
.room-context > form > input[type="text"] {
margin: 0 0 .5em 0;
}
.room-context > .btn {
margin: .5em 0 0;
font-size: 1.1em;
padding: 0 .5em;
align-self: flex-end;
}
.room-context-btn-close {
position: absolute;
right: 8px;
/* 8px offset + 2px border-top */
top: 10px;
width: 8px;
height: 8px;
background-color: transparent;
background-image: url("../img/icons-10x10.svg#close-darkergrey");
background-size: 8px 8px;
background-repeat: no-repeat;
border: 0;
padding: 0;
cursor: pointer;
}
.room-context-btn-close:hover,
.room-context-btn-close:hover:active {
background-image: url("../img/icons-10x10.svg#close-active");
}
html[dir="rtl"] .room-context-btn-close {
right: auto;
left: 8px;
.room-context > form > textarea:focus,
.room-context > form > input:focus {
border: 0.1rem solid #5cccee;
}
.media-layout {

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

@ -359,6 +359,7 @@ loop.shared.views = (function(_, mozL10n) {
publishStream: React.PropTypes.func.isRequired,
screenShare: React.PropTypes.object,
settingsMenuItems: React.PropTypes.array,
show: React.PropTypes.bool.isRequired,
video: React.PropTypes.object.isRequired
},
@ -440,6 +441,10 @@ loop.shared.views = (function(_, mozL10n) {
},
render: function() {
if (!this.props.show) {
return null;
}
var cx = React.addons.classSet;
var conversationToolbarCssClasses = cx({
"conversation-toolbar": true,
@ -798,7 +803,7 @@ loop.shared.views = (function(_, mozL10n) {
return null;
}
return React.createElement("p", null, mozL10n.get("context_inroom_label"));
return React.createElement("p", null, mozL10n.get("context_inroom_label2"));
},
render: function() {

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

@ -359,6 +359,7 @@ loop.shared.views = (function(_, mozL10n) {
publishStream: React.PropTypes.func.isRequired,
screenShare: React.PropTypes.object,
settingsMenuItems: React.PropTypes.array,
show: React.PropTypes.bool.isRequired,
video: React.PropTypes.object.isRequired
},
@ -440,6 +441,10 @@ loop.shared.views = (function(_, mozL10n) {
},
render: function() {
if (!this.props.show) {
return null;
}
var cx = React.addons.classSet;
var conversationToolbarCssClasses = cx({
"conversation-toolbar": true,
@ -798,7 +803,7 @@ loop.shared.views = (function(_, mozL10n) {
return null;
}
return <p>{mozL10n.get("context_inroom_label")}</p>;
return <p>{mozL10n.get("context_inroom_label2")}</p>;
},
render: function() {

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

@ -582,6 +582,7 @@ loop.standaloneRoomViews = (function(mozL10n) {
hangup: this.leaveRoom,
hangupButtonLabel: mozL10n.get("rooms_leave_button_label"),
publishStream: this.publishStream,
show: true,
video: {enabled: !this.state.videoMuted,
visible: this._roomIsActive()}})
),

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

@ -582,6 +582,7 @@ loop.standaloneRoomViews = (function(mozL10n) {
hangup={this.leaveRoom}
hangupButtonLabel={mozL10n.get("rooms_leave_button_label")}
publishStream={this.publishStream}
show={true}
video={{enabled: !this.state.videoMuted,
visible: this._roomIsActive()}} />
</sharedViews.MediaLayoutView>

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

@ -84,9 +84,9 @@ status_error=Something went wrong
# Text chat strings
chat_textbox_placeholder=Type here…
# LOCALIZATION NOTE (context_inroom_label): this string is followed by the
# LOCALIZATION NOTE (context_inroom_label2): this string is followed by the
# title/URL of the website you are having a conversation about, displayed on a
# separate line. If this structure doesn't work for your locale, you might want
# to consider this as a stand-alone title. See example screenshot:
# https://bug1084991.bugzilla.mozilla.org/attachment.cgi?id=8614721
context_inroom_label=Let's talk about:
context_inroom_label2=Let's Talk About:

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

@ -708,16 +708,13 @@ describe("loop.roomViews", function () {
expect(view.getDOMNode().querySelector(".room-context")).to.not.eql(null);
});
it("should hide the form when the edit button is clicked again", function() {
it("should not have a settings menu when the edit button is clicked", function() {
view = mountTestComponent();
var editButton = view.getDOMNode().querySelector(".settings-menu > li.entry-settings-edit");
React.addons.TestUtils.Simulate.click(editButton);
// Click again.
React.addons.TestUtils.Simulate.click(editButton);
expect(view.getDOMNode().querySelector(".room-context")).to.eql(null);
expect(view.getDOMNode().querySelector(".settings-menu")).to.eql(null);
});
});
});
@ -840,12 +837,12 @@ describe("loop.roomViews", function () {
expect(view.getDOMNode()).to.eql(null);
});
it("should close the view when the close button is clicked", function() {
it("should close the view when the cancel button is clicked", function() {
view = mountTestComponent({
roomData: { roomContextUrls: [fakeContextURL] }
});
var closeBtn = view.getDOMNode().querySelector(".room-context-btn-close");
var closeBtn = view.getDOMNode().querySelector(".button-cancel");
React.addons.TestUtils.Simulate.click(closeBtn);
expect(view.getDOMNode()).to.eql(null);
});
@ -866,35 +863,6 @@ describe("loop.roomViews", function () {
expect(node.querySelector(".room-context-url").value).to.eql(fakeContextURL.location);
expect(node.querySelector(".room-context-comments").value).to.eql(fakeContextURL.description);
});
it("should show the checkbox as disabled when context is already set", function() {
view = mountTestComponent({
roomData: {
roomToken: "fakeToken",
roomName: "fakeName",
roomContextUrls: [fakeContextURL]
}
});
var checkbox = view.getDOMNode().querySelector(".checkbox");
expect(checkbox.classList.contains("disabled")).to.eql(true);
});
it("should hide the checkbox when no context data is stored or available", function() {
view = mountTestComponent({
roomData: {
roomToken: "fakeToken",
roomName: "Hello, is it me you're looking for?"
}
});
// First check if availableContext is set correctly.
expect(view.state.availableContext).to.not.eql(null);
expect(view.state.availableContext.previewImage).to.eql(favicon);
var node = view.getDOMNode();
expect(node.querySelector(".checkbox-wrapper").classList.contains("hide")).to.eql(true);
});
});
describe("Update Room", function() {
@ -919,7 +887,7 @@ describe("loop.roomViews", function () {
value: "reallyFake"
}});
React.addons.TestUtils.Simulate.click(view.getDOMNode().querySelector(".btn-info"));
React.addons.TestUtils.Simulate.click(view.getDOMNode().querySelector(".button-accept"));
sinon.assert.calledOnce(dispatcher.dispatch);
sinon.assert.calledWithExactly(dispatcher.dispatch,
@ -955,7 +923,7 @@ describe("loop.roomViews", function () {
view.setProps({ savingContext: true }, function() {
var node = view.getDOMNode();
// The button should show up as disabled.
expect(node.querySelector(".btn-info").hasAttribute("disabled")).to.eql(true);
expect(node.querySelector(".button-accept").hasAttribute("disabled")).to.eql(true);
// Now simulate a successful save.
view.setProps({ savingContext: false }, function() {
@ -967,45 +935,6 @@ describe("loop.roomViews", function () {
});
});
describe("#handleCheckboxChange", function() {
var node, checkbox;
beforeEach(function() {
fakeMozLoop.getSelectedTabMetadata = sinon.stub().callsArgWith(0, {
favicon: fakeContextURL.thumbnail,
title: fakeContextURL.description,
url: fakeContextURL.location
});
view = mountTestComponent({
roomData: {
roomToken: "fakeToken",
roomName: "fakeName"
}
});
node = view.getDOMNode();
checkbox = node.querySelector(".checkbox");
});
it("should prefill the form with available context data when clicked", function() {
React.addons.TestUtils.Simulate.click(checkbox);
expect(node.querySelector(".room-context-name").value).to.eql("fakeName");
expect(node.querySelector(".room-context-url").value).to.eql(fakeContextURL.location);
expect(node.querySelector(".room-context-comments").value).to.eql(fakeContextURL.description);
});
it("should undo prefill when clicking the checkbox again", function() {
React.addons.TestUtils.Simulate.click(checkbox);
// Twice.
React.addons.TestUtils.Simulate.click(checkbox);
expect(node.querySelector(".room-context-name").value).to.eql("fakeName");
expect(node.querySelector(".room-context-url").value).to.eql("");
expect(node.querySelector(".room-context-comments").value).to.eql("");
});
});
describe("#handleContextClick", function() {
var fakeEvent;

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

@ -429,7 +429,8 @@ describe("loop.shared.views", function() {
function mountTestComponent(props) {
props = _.extend({
dispatcher: dispatcher,
mozLoop: {}
mozLoop: {},
show: true
}, props || {});
return TestUtils.renderIntoDocument(
React.createElement(sharedViews.ConversationToolbar, props));
@ -445,6 +446,16 @@ describe("loop.shared.views", function() {
clock.restore();
});
it("should not render the component when 'show' is false", function() {
var comp = mountTestComponent({
hangup: hangup,
publishStream: publishStream,
show: false
});
expect(comp.getDOMNode()).to.eql(null);
});
it("should start no idle", function() {
var comp = mountTestComponent({
hangupButtonLabel: "foo",

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

@ -1118,6 +1118,7 @@
publishStream: noop,
screenShare: { state: SCREEN_SHARE_STATES.INACTIVE, visible: true},
settingsMenuItems: [{ id: "feedback" }],
show: true,
video: { enabled: true, visible: true}})
)
),
@ -1132,6 +1133,7 @@
publishStream: noop,
screenShare: { state: SCREEN_SHARE_STATES.PENDING, visible: true},
settingsMenuItems: [{ id: "feedback" }],
show: true,
video: { enabled: false, visible: true}})
)
),
@ -1146,6 +1148,7 @@
publishStream: noop,
screenShare: { state: SCREEN_SHARE_STATES.ACTIVE, visible: true},
settingsMenuItems: [{ id: "feedback" }],
show: true,
video: { enabled: true, visible: true}})
)
)

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

@ -1118,6 +1118,7 @@
publishStream={noop}
screenShare={{ state: SCREEN_SHARE_STATES.INACTIVE, visible: true }}
settingsMenuItems={[{ id: "feedback" }]}
show={true}
video={{ enabled: true, visible: true }} />
</div>
</FramedExample>
@ -1132,6 +1133,7 @@
publishStream={noop}
screenShare={{ state: SCREEN_SHARE_STATES.PENDING, visible: true }}
settingsMenuItems={[{ id: "feedback" }]}
show={true}
video={{ enabled: false, visible: true }} />
</div>
</FramedExample>
@ -1146,6 +1148,7 @@
publishStream={noop}
screenShare={{ state: SCREEN_SHARE_STATES.ACTIVE, visible: true }}
settingsMenuItems={[{ id: "feedback" }]}
show={true}
video={{ enabled: true, visible: true }} />
</div>
</FramedExample>

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

@ -70,11 +70,11 @@
<!-- Passwords -->
<groupbox id="passwordsGroup" orient="vertical" data-category="paneSecurity" hidden="true">
<caption><label>&passwords.label;</label></caption>
<caption><label>&logins.label;</label></caption>
<hbox id="savePasswordsBox">
<checkbox id="savePasswords"
label="&rememberPasswords.label;" accesskey="&rememberPasswords.accesskey;"
label="&rememberLogins.label;" accesskey="&rememberLogins.accesskey;"
preference="signon.rememberSignons"
onsyncfrompreference="return gSecurityPane.readSavePasswords();"/>
<spacer flex="1"/>
@ -103,7 +103,7 @@
<row id="showPasswordRow">
<hbox id="showPasswordsBox"/>
<button id="showPasswords"
label="&savedPasswords.label;" accesskey="&savedPasswords.accesskey;"
label="&savedLogins.label;" accesskey="&savedLogins.accesskey;"
preference="pref.privacy.disable_button.view_passwords"/>
</row>
</rows>

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

@ -22,7 +22,3 @@ BROWSER_CHROME_MANIFESTS += [
XPCSHELL_TESTS_MANIFESTS += [
'test/unit/xpcshell.ini'
]
EXTRA_PP_COMPONENTS += [
'translation.manifest',
]

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

@ -1,3 +0,0 @@
#ifdef MOZ_SERVICES_HEALTHREPORT
category healthreport-js-provider-default TranslationProvider resource:///modules/translation/Translation.jsm
#endif

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

@ -386,7 +386,6 @@
@RESPATH@/browser/components/webideComponents.manifest
@RESPATH@/browser/components/Experiments.manifest
@RESPATH@/browser/components/ExperimentsService.js
@RESPATH@/browser/components/translation.manifest
@RESPATH@/components/Downloads.manifest
@RESPATH@/components/DownloadLegacy.js
@RESPATH@/components/BrowserPageThumbs.manifest

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

@ -115,10 +115,6 @@ These should match what Safari and other Apple applications use on OS X Lion. --
<!ENTITY fxaUnverified.label "Verify Your Account">
<!ENTITY syncStartPanel2.heading "&syncBrand.shortName.label; enabled">
<!ENTITY syncStartPanel2.subTitle "&brandShortName; will begin syncing momentarily.">
<!ENTITY syncErrorPanel.heading "Cannot connect to &syncBrand.shortName.label;">
<!ENTITY syncErrorPanel.subTitle "Please sign in to resume syncing.">
<!ENTITY syncErrorPanel.signInButton.label "Sign In">
<!ENTITY syncErrorPanel.signInButton.accesskey "S">
<!ENTITY fullScreenMinimize.tooltip "Minimize">

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

@ -31,6 +31,15 @@ first_time_experience_button_label=Get Started
first_time_experience_subheading=Join the conversation
invite_header_text=Invite someone to join you.
invite_header_text2=Invite a friend to join you
invite_facebook_button=share on Facebook
invite_facebook_triggered=shared!
invite_contacts_button=share with contacts
invite_contacts_triggered=shared!
invite_copy_button=copy link
invite_copy_triggered=copied!
invite_email_button=email link
invite_email_triggered=emailed!
# Status text
display_name_guest=Guest
@ -343,12 +352,16 @@ infobar_menuitem_dontshowagain_accesskey=D
# Context in conversation strings
# LOCALIZATION NOTE (context_inroom_label): this string is followed by the
# title/URL of the website you are having a conversation about, displayed on a
# LOCALIZATION NOTE (context_inroom_header): this string is displayed in the
# conversation window when the user edits context. It is a header to the edit
# section.
context_inroom_header=Let's Talk About…
# LOCALIZATION NOTE (context_inroom_label2): this string is followed by the
# title and domain of the website you are having a conversation about, displayed on a
# separate line. If this structure doesn't work for your locale, you might want
# to consider this as a stand-alone title. See example screenshot:
# https://bug1115342.bugzilla.mozilla.org/attachment.cgi?id=8563677
context_inroom_label=Let's talk about:
context_inroom_label2=Let's Talk About:
## LOCALIZATION_NOTE (context_edit_activate_label): {{title}} will be replaced
## by the title of the active tab, also known as the title of an HTML document.
## The quotes around the title are intentional.
@ -357,7 +370,8 @@ context_edit_name_placeholder=Conversation Name
context_edit_comments_placeholder=Comments
context_add_some_label=Add some context
context_show_tooltip=Show Context
context_save_label2=Save
context_cancel_label=Cancel
context_done_label=Done
context_link_modified=This link was modified.
context_learn_more_link_label=Learn more.
conversation_settings_menu_edit_context=Edit Context

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

@ -24,10 +24,10 @@
<!ENTITY addonExceptions.accesskey "E">
<!ENTITY passwords.label "Passwords">
<!ENTITY logins.label "Logins">
<!ENTITY rememberPasswords.label "Remember passwords for sites">
<!ENTITY rememberPasswords.accesskey "R">
<!ENTITY rememberLogins.label "Remember logins for sites">
<!ENTITY rememberLogins.accesskey "R">
<!ENTITY passwordExceptions.label "Exceptions…">
<!ENTITY passwordExceptions.accesskey "x">
@ -36,5 +36,5 @@
<!ENTITY changeMasterPassword.label "Change Master Password…">
<!ENTITY changeMasterPassword.accesskey "M">
<!ENTITY savedPasswords.label "Saved Passwords…">
<!ENTITY savedPasswords.accesskey "P">
<!ENTITY savedLogins.label "Saved Logins…">
<!ENTITY savedLogins.accesskey "L">

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

@ -1725,15 +1725,13 @@ toolbarbutton.chevron > .toolbarbutton-icon {
margin-top: 1em;
}
#sync-error-panel-title,
#sync-start-panel-title {
font-size: 120%;
font-weight: bold;
margin-bottom: 5px;
}
#sync-start-panel-subtitle,
#sync-error-panel-subtitle {
#sync-start-panel-subtitle {
margin: 0;
}

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

@ -3275,15 +3275,13 @@ notification[value="loop-sharing-notification"] .messageImage {
@hudButtonFocused@
}
#sync-error-panel-title,
#sync-start-panel-title {
font-size: 120%;
font-weight: bold;
margin-bottom: 5px;
}
#sync-start-panel-subtitle,
#sync-error-panel-subtitle {
#sync-start-panel-subtitle {
margin: 0;
}

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

@ -2473,15 +2473,13 @@ notification[value="loop-sharing-notification"] .messageImage {
margin-top: 1em;
}
#sync-error-panel-title,
#sync-start-panel-title {
font-size: 120%;
font-weight: bold;
margin-bottom: 5px;
}
#sync-start-panel-subtitle,
#sync-error-panel-subtitle {
#sync-start-panel-subtitle {
margin: 0;
}

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

@ -16,7 +16,7 @@ function SignonsStartup() {
kSignonBundle = document.getElementById("signonBundle");
document.getElementById("togglePasswords").label = kSignonBundle.getString("showPasswords");
document.getElementById("togglePasswords").accessKey = kSignonBundle.getString("showPasswordsAccessKey");
document.getElementById("signonsIntro").textContent = kSignonBundle.getString("loginsSpielAll");
document.getElementById("signonsIntro").textContent = kSignonBundle.getString("loginsDescriptionAll");
let treecols = document.getElementsByTagName("treecols")[0];
treecols.addEventListener("click", HandleTreeColumnClick.bind(null, SignonColumnSort));
@ -314,7 +314,7 @@ function SignonClearFilter() {
}
signonsTreeView._lastSelectedRanges = [];
document.getElementById("signonsIntro").textContent = kSignonBundle.getString("loginsSpielAll");
document.getElementById("signonsIntro").textContent = kSignonBundle.getString("loginsDescriptionAll");
}
function FocusFilterBox() {
@ -384,7 +384,7 @@ function _filterPasswords()
if (signonsTreeView.rowCount > 0)
signonsTreeView.selection.select(0);
document.getElementById("signonsIntro").textContent = kSignonBundle.getString("loginsSpielFiltered");
document.getElementById("signonsIntro").textContent = kSignonBundle.getString("loginsDescriptionFiltered");
}
function CopyPassword() {

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

@ -13,7 +13,7 @@
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="Startup(); SignonsStartup();"
onunload="Shutdown();"
title="&savedPasswords.title;"
title="&savedLogins.title;"
persist="width height screenX screenY">
<script type="application/javascript" src="chrome://passwordmgr/content/passwordManagerCommon.js"/>

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

@ -15,7 +15,7 @@
buttonlabelaccept="&closebutton.label;"
onload="Startup(); RejectsStartup();"
onunload="Shutdown();"
title="&savedPasswordsExceptions.title;"
title="&savedLoginsExceptions.title;"
persist="width height screenX screenY">
<prefpane id="SignonViewerDialogPane" flex="1">
@ -23,7 +23,7 @@
<script type="application/javascript" src="chrome://passwordmgr/content/passwordManagerExceptions.js"/>
<vbox id="rejectedsites" flex="1">
<description control="rejectsTree">&loginsSpielExceptions.label;</description>
<description control="rejectsTree">&savedLoginsExceptions.desc;</description>
<separator class="thin"/>
<tree id="rejectsTree" flex="1" style="height: 10em;" hidecolumnpicker="true"
onkeypress="HandleRejectKeyPress(event)"

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

@ -2,13 +2,13 @@
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<!ENTITY savedPasswords.title "Saved Passwords">
<!ENTITY savedPasswordsExceptions.title "Exceptions - Saved Passwords">
<!ENTITY savedLogins.title "Saved Logins">
<!ENTITY savedLoginsExceptions.title "Exceptions - Saved Logins">
<!ENTITY savedLoginsExceptions.desc "Logins for the following sites will not be saved:">
<!ENTITY closebutton.label "Close">
<!ENTITY closebutton.accesskey "C">
<!ENTITY loginsSpielExceptions.label "Passwords for the following sites will not be saved:">
<!ENTITY treehead.site.label "Site">
<!ENTITY treehead.username.label "Username">
<!ENTITY treehead.password.label "Password">

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

@ -56,8 +56,8 @@ removeAllPasswordsPrompt=Are you sure you wish to remove all passwords?
removeAllPasswordsTitle=Remove all passwords
removeLoginPrompt=Are you sure you wish to remove this login?
removeLoginTitle=Remove login
loginsSpielAll=Passwords for the following sites are stored on your computer:
loginsSpielFiltered=The following passwords match your search:
loginsDescriptionAll=Logins for the following sites are stored on your computer:
loginsDescriptionFiltered=The following logins match your search:
# LOCALIZATION NOTE (loginHostAge):
# This is used to show the context menu login items with their age.
# 1st string is the username for the login, 2nd is the login's age.