Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
This commit is contained in:
parent
93e3a48004
commit
b38dea0597
25901 changed files with 9982925 additions and 369 deletions
178
gaia/apps/calendar/js/templates/alarm.js
Executable file
178
gaia/apps/calendar/js/templates/alarm.js
Executable file
|
|
@ -0,0 +1,178 @@
|
|||
/* global mozIntl */
|
||||
define(function(require, exports, module) {
|
||||
'use strict';
|
||||
|
||||
var create = require('template').create;
|
||||
|
||||
var MINUTE = 60;
|
||||
var HOUR = 3600;
|
||||
var DAY = 86400;
|
||||
var WEEK = 604800;
|
||||
var MORNING = HOUR * 9;
|
||||
var layouts = {
|
||||
standard: [
|
||||
'none',
|
||||
0,
|
||||
0 - MINUTE * 5,
|
||||
0 - MINUTE * 15,
|
||||
0 - MINUTE * 30,
|
||||
0 - HOUR,
|
||||
0 - HOUR * 2,
|
||||
0 - DAY
|
||||
],
|
||||
allday: [
|
||||
'none',
|
||||
0 + MORNING,
|
||||
0 - DAY + MORNING,
|
||||
0 - DAY * 2 + MORNING,
|
||||
0 - WEEK + MORNING,
|
||||
0 - WEEK * 2 + MORNING
|
||||
]
|
||||
};
|
||||
|
||||
var Alarm = create({
|
||||
reminder: function() {
|
||||
var alarmContent = '';
|
||||
var alarms = this.arg('alarms');
|
||||
var isAllDay = this.arg('isAllDay');
|
||||
|
||||
var i = 0;
|
||||
var alarm;
|
||||
while ((alarm = alarms[i])) {
|
||||
i++;
|
||||
alarmContent += Alarm.description.render({
|
||||
trigger: alarm.trigger,
|
||||
layout: isAllDay ? 'allday' : 'standard'
|
||||
});
|
||||
}
|
||||
|
||||
return alarmContent;
|
||||
},
|
||||
|
||||
description: function() {
|
||||
var {id, data} = getL10n(this.arg('trigger'), this.arg('layout'));
|
||||
var args = JSON.stringify(data);
|
||||
var description = navigator.mozL10n.get(id, data);
|
||||
|
||||
return `<div role="listitem" data-l10n-id="${id}"
|
||||
data-l10n-args=\'${args}\'>
|
||||
${description}
|
||||
</div>`;
|
||||
},
|
||||
|
||||
// builds a list of <option>
|
||||
options: function() {
|
||||
var content = '';
|
||||
var selected;
|
||||
var foundSelected = false;
|
||||
|
||||
var trigger = this.arg('trigger');
|
||||
var layout = this.arg('layout') || 'standard';
|
||||
var options = layouts[layout];
|
||||
|
||||
var i = 0;
|
||||
var iLen = options.length;
|
||||
|
||||
for (; i < iLen; i++) {
|
||||
selected = false;
|
||||
|
||||
// trigger option 'selected' by normalizing imported dates
|
||||
if (layout === 'allday') {
|
||||
if (options[i] === (trigger + MORNING)) {
|
||||
trigger += MORNING;
|
||||
}
|
||||
}
|
||||
|
||||
if (!selected && trigger && options[i] === trigger) {
|
||||
selected = true;
|
||||
foundSelected = true;
|
||||
}
|
||||
|
||||
content += Alarm.option.render({
|
||||
selected: selected,
|
||||
layout: layout,
|
||||
value: options[i]
|
||||
});
|
||||
}
|
||||
|
||||
// foundSelected is used in cases where user is editing an event that has
|
||||
// a custom reminder value (X minutes/hours/days before event) and that
|
||||
// is an option that we don't support internally on the calendar app.
|
||||
// we always add a new <option> using the custom value and mark it as
|
||||
// selected.
|
||||
if (!foundSelected && /^-?\d+$/.test(trigger)) {
|
||||
content += Alarm.option.render({
|
||||
selected: true,
|
||||
layout: layout,
|
||||
value: trigger
|
||||
});
|
||||
}
|
||||
|
||||
return content;
|
||||
},
|
||||
|
||||
option: function() {
|
||||
var _ = navigator.mozL10n.get;
|
||||
|
||||
var layout = this.arg('layout');
|
||||
var value = this.arg('value');
|
||||
var selected = this.arg('selected');
|
||||
|
||||
var l10n = getL10n(value, layout);
|
||||
|
||||
var content = [
|
||||
'<option',
|
||||
'value="' + value + '"',
|
||||
(selected ? 'selected' : ''),
|
||||
'data-l10n-id="' + l10n.id + '"',
|
||||
'data-l10n-args=\'' + JSON.stringify(l10n.data) + '\'>',
|
||||
_(l10n.id, l10n.data) + '</option>'
|
||||
].join(' ');
|
||||
|
||||
return content;
|
||||
},
|
||||
|
||||
picker: function() {
|
||||
return '<span class="button icon icon-dialog">' +
|
||||
'<select name="alarm[]">' +
|
||||
Alarm.options.render(this.data) +
|
||||
'</select>' +
|
||||
'</span>';
|
||||
}
|
||||
});
|
||||
|
||||
function getL10n(trigger, layout) {
|
||||
if (trigger === 'none') {
|
||||
return {
|
||||
id: trigger,
|
||||
data: {}
|
||||
};
|
||||
}
|
||||
|
||||
// Format the display text based on a zero-offset trigger
|
||||
if (layout === 'allday') {
|
||||
var options = layouts.allday;
|
||||
if (options.indexOf(trigger) !== -1) {
|
||||
trigger -= MORNING;
|
||||
}
|
||||
}
|
||||
|
||||
if (trigger === 0) {
|
||||
return {
|
||||
id: 'alarm-at-event-' + layout,
|
||||
data: {}
|
||||
};
|
||||
}
|
||||
|
||||
var affix = trigger > 0 ? 'after' : 'before';
|
||||
var part = mozIntl._gaia.relativePart(trigger * 1000);
|
||||
return {
|
||||
id: part.unit + '-' + affix,
|
||||
data: {
|
||||
value: part.value
|
||||
}
|
||||
};
|
||||
}
|
||||
module.exports = Alarm;
|
||||
|
||||
});
|
||||
Loading…
Reference in a new issue