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:
OverSu 2026-09-30 23:13:03 +02:00
commit b38dea0597
25901 changed files with 9982925 additions and 369 deletions

View file

@ -0,0 +1,328 @@
;'use strict';(function(exports){var STORE_NAME='ice_contacts';var store=null;var status='not_initialized';var FIELD='ICE_CONTACTS';function init(){if(store!==null){return Promise.resolve(store);}
if(!navigator.getDataStores){return Promise.reject('No DS supported');}
if(status==='initialising'){document.addEventListener('ice_ready',function ready(){document.removeEventListener('ice_ready',ready);if(store===null){return Promise.reject('Error getting store');}else{return Promise.resolve(store);}});}
status='initialising';return new Promise(function(resolve,reject){navigator.getDataStores(STORE_NAME).then(function(stores){if(!stores||stores.length<0){document.dispatchEvent(new Event('on_ice_ready'));return reject('No DS found');}else{store=stores[0];status='initialised';document.dispatchEvent(new Event('ice_ready'));return resolve(store);}});});}
var ICEStore={setContacts:function(iceContacts){return init().then(function(){return store.put(iceContacts,FIELD).then(function(){return Promise.resolve(iceContacts);});});},getContacts:function(){return init().then(function(){return store.get(FIELD);});},onChange:function(cb){return init().then(function(){store.addEventListener('change',function(){store.get(FIELD).then(cb);});});}};exports.ICEStore=ICEStore;})(window);;'use strict';var Utils={prettyDate:function ut_prettyDate(time){var f=Intl.DateTimeFormat(navigator.languages,{hour12:navigator.mozHour12,hour:'numeric',minute:'numeric'});return f.format(new Date(time));},prettyDuration:function(node,duration,l10nPrefix){var elapsed=new Date(duration);var h=elapsed.getUTCHours();var m=elapsed.getUTCMinutes();var s=elapsed.getUTCSeconds();var l10nId=l10nPrefix||'callDuration';var durationL10n={h:h+'',m:m+'',s:s+''};if(l10nId==='callDuration'){durationL10n={h:(h>9?'':'0')+h,m:(m>9?'':'0')+m,s:(s>9?'':'0')+s};}
if(l10nPrefix==='callDurationTextFormat'&&h===0&&m===0){l10nId+='Seconds';}else{l10nId+=h>0?'Hours':'Minutes';}
navigator.mozL10n.setAttributes(node,l10nId,durationL10n);},setHeaderDate:function ut_setHeaderDate(elem,time){var diff=(Date.now()-time)/1000;var day_diff=Math.floor(diff/86400);var formattedTime;if(isNaN(day_diff)){elem.setAttribute('data-l10n-id','incorrectDate');return;}else if(day_diff===0){elem.setAttribute('data-l10n-id','today');return;}else if(day_diff===1){elem.setAttribute('data-l10n-id','yesterday');return;}else if(day_diff<6){formattedTime=(new Date(time)).toLocaleString(navigator.languages,{weekday:'long',});}else{formattedTime=(new Date(time)).toLocaleString(navigator.languages,{year:'2-digit',month:'2-digit',day:'2-digit'});}
elem.removeAttribute('data-l10n-id');elem.textContent=formattedTime;},getPhoneNumberPrimaryInfo:function ut_getPhoneNumberPrimaryInfo(matchingTel,contact){if(contact){if(contact.name&&contact.name.length&&contact.name[0]!==''){return contact.name;}else if(contact.org&&contact.org.length&&contact.org[0]!==''){return contact.org;}}
if(matchingTel){return matchingTel.value;}
return null;},toCamelCase:function ut_toCamelCase(str){return str.replace(/\-(.)/g,function replacer(str,p1){return p1.toUpperCase();});},_phoneTypesL10n:{'mobile':'phone_type_mobile','home':'phone_type_home','work':'phone_type_work','personal':'phone_type_personal','faxHome':'phone_type_fax_home','faxOffice':'phone_type_fax_office','faxOther':'phone_type_fax_other','other':'phone_type_other'},getPhoneNumberAdditionalInfo:function ut_getPhoneNumberAdditionalInfo(matchingTel){var type=matchingTel.type||'mobile';var carrier=matchingTel.carrier;if(Array.isArray(type)){type=type[0];}
var id;var args={};if(this._phoneTypesL10n.hasOwnProperty(type)){id=this._phoneTypesL10n[type];}else{id='phone_type_custom';args.type=type;}
if(carrier){id+='_and_carrier';args.carrier=carrier;}
return{id:id,args:Object.keys(args).length?args:null};},isPhoneType:function ut_isPhoneType(type){return this._phoneTypesL10n.hasOwnProperty(type);}};;'use strict';function DtmfTone(tone,short,serviceId){this.tone=tone;this.short=short;this.serviceId=serviceId;this.timer=0;}
DtmfTone.kShortToneLength=120;DtmfTone.prototype={play:function dt_play(){clearTimeout(this.timer);navigator.mozTelephony.stopTone(this.serviceId);navigator.mozTelephony.startTone(this.tone,this.serviceId);if(this.short){this.timer=window.setTimeout(function dt_stopTone(serviceId){navigator.mozTelephony.stopTone(serviceId);},DtmfTone.kShortToneLength,this.serviceId);}},stop:function dt_stop(){clearTimeout(this.timer);navigator.mozTelephony.stopTone(this.serviceId);}};;'use strict';const kMasterVolume=0.5;const kToneVolume=0.7;const kShortPressDuration=0.15;const kAttackDuration=0.025;const kDecayDuration=0.025;const kReleaseDuration=0.05;var TonePlayer={_audioContext:null,_channel:null,_gainNode:null,_playingNodes:[],_maybeTrashAudio:null,_initialized:false,init:function tp_init(channel){var telephony=navigator.mozTelephony;this._reset();this._channel=channel;this._maybeTrashAudio=(function tp_maybeTrashAudio(){var callIsActive=telephony&&(telephony.calls.length||telephony.conferenceGroup.calls.length);if(document.hidden&&!((this._channel==='telephony')&&callIsActive)){this._trashAudio();}}).bind(this);window.addEventListener('visibilitychange',this._maybeTrashAudio);telephony&&telephony.addEventListener('callschanged',this._maybeTrashAudio);this._initialized=true;},teardown:function tp_teardown(){var telephony=navigator.mozTelephony;telephony&&telephony.removeEventListener('callschanged',this._maybeTrashAudio);window.removeEventListener('visibilitychange',this._maybeTrashAudio);this._reset();this._initialized=false;},_reset:function tp_reset(){this._audioContext=null;this._channel=null;this._gainNode=null;this._playingNodes=[];this._maybeTrashAudio=null;},_ensureAudio:function tp_ensureAudio(){if(this._audioContext||!this._initialized){return;}
this._audioContext=new AudioContext();},_trashAudio:function tp_trashAudio(){this.stop();this._audioContext=null;},_startAt:function tp_startAt(frequencies,when,duration){var context=this._audioContext;var sampleRate=context.sampleRate;var envelope=context.createBuffer(1,(duration?duration:0.05)*sampleRate,sampleRate);for(var i=0;i<envelope.length;i++){var factor=kToneVolume;var t=i/sampleRate;if(t<=kAttackDuration){factor=t/kAttackDuration;}else if(t-kAttackDuration<=kDecayDuration){factor=1.0-(1.0-kToneVolume)*(t-kAttackDuration)/kDecayDuration;}
if(!duration){factor-=kToneVolume;}else if(t>duration-kReleaseDuration){factor*=(duration-t)/kReleaseDuration;}
envelope.getChannelData(0)[i]=factor*kMasterVolume;}
var gainNode=context.createGain();gainNode.connect(context.destination);if(!duration){this._gainNode=gainNode;}
var envelopeNode=context.createBufferSource();envelopeNode.buffer=envelope;envelopeNode.start(when);envelopeNode.connect(gainNode.gain);gainNode.gain.setValueAtTime(duration?0.0:kToneVolume*kMasterVolume,0.0);for(i=0;i<frequencies.length;++i){var oscNode=this._audioContext.createOscillator();oscNode.type='sine';oscNode.frequency.value=frequencies[i];oscNode.start(when);if(duration){oscNode.stop(Math.max(when,context.currentTime+0.5)+duration);}else{this._playingNodes.push(oscNode);}
oscNode.connect(gainNode);}},start:function tp_start(frequencies,shortPress){this._ensureAudio();this._startAt(frequencies,0,shortPress?kShortPressDuration:0);},stop:function tp_stop(){if(!this._gainNode){return;}
var context=this._audioContext;var sampleRate=context.sampleRate;var gain=this._gainNode.gain;this._gainNode=null;var ramp=context.createBuffer(1,kReleaseDuration*sampleRate,sampleRate);for(var i=0;i<ramp.length;i++){ramp.getChannelData(0)[i]=(ramp.length-i-1)/ramp.length*kToneVolume*kMasterVolume;}
var rampNode=context.createBufferSource();rampNode.buffer=ramp;rampNode.start();rampNode.connect(gain);gain.setValueAtTime(0.0,0.0);while(this._playingNodes.length){this._playingNodes.pop().stop(context.currentTime+kReleaseDuration+0.5);}},playSequence:function tp_playSequence(sequence){this._ensureAudio();var when=this._audioContext.currentTime+0.2;for(var index=0;index<sequence.length;++index){var step=sequence[index];var frequencies=step.slice(0,2);var duration=step[2]/1000;this._startAt(frequencies,when,duration);when+=duration;}}};;(function(window,undefined){'use strict';function L10nError(message,id,loc){this.name='L10nError';this.message=message;this.id=id;this.loc=loc;}
L10nError.prototype=Object.create(Error.prototype);L10nError.prototype.constructor=L10nError;var io={_load:function(type,url,callback,sync){var xhr=new XMLHttpRequest();var needParse;if(xhr.overrideMimeType){xhr.overrideMimeType(type);}
xhr.open('GET',url,!sync);if(type==='application/json'){if(sync){needParse=true;}else{xhr.responseType='json';}}
xhr.addEventListener('load',function io_onload(e){if(e.target.status===200||e.target.status===0){var res=e.target.response||e.target.responseText;callback(null,needParse?JSON.parse(res):res);}else{callback(new L10nError('Not found: '+url));}});xhr.addEventListener('error',callback);xhr.addEventListener('timeout',callback);try{xhr.send(null);}catch(e){if(e.name==='NS_ERROR_FILE_NOT_FOUND'){callback(new L10nError('Not found: '+url));}else{throw e;}}},load:function(url,callback,sync){return io._load('text/plain',url,callback,sync);},loadJSON:function(url,callback,sync){return io._load('application/json',url,callback,sync);}};function EventEmitter(){}
EventEmitter.prototype.emit=function ee_emit(){if(!this._listeners){return;}
var args=Array.prototype.slice.call(arguments);var type=args.shift();if(!this._listeners[type]){return;}
var typeListeners=this._listeners[type].slice();for(var i=0;i<typeListeners.length;i++){typeListeners[i].apply(this,args);}};EventEmitter.prototype.addEventListener=function ee_add(type,listener){if(!this._listeners){this._listeners={};}
if(!(type in this._listeners)){this._listeners[type]=[];}
this._listeners[type].push(listener);};EventEmitter.prototype.removeEventListener=function ee_rm(type,listener){if(!this._listeners){return;}
var typeListeners=this._listeners[type];var pos=typeListeners.indexOf(listener);if(pos===-1){return;}
typeListeners.splice(pos,1);};function getPluralRule(lang){var locales2rules={'af':3,'ak':4,'am':4,'ar':1,'asa':3,'az':0,'be':11,'bem':3,'bez':3,'bg':3,'bh':4,'bm':0,'bn':3,'bo':0,'br':20,'brx':3,'bs':11,'ca':3,'cgg':3,'chr':3,'cs':12,'cy':17,'da':3,'de':3,'dv':3,'dz':0,'ee':3,'el':3,'en':3,'eo':3,'es':3,'et':3,'eu':3,'fa':0,'ff':5,'fi':3,'fil':4,'fo':3,'fr':5,'fur':3,'fy':3,'ga':8,'gd':24,'gl':3,'gsw':3,'gu':3,'guw':4,'gv':23,'ha':3,'haw':3,'he':2,'hi':4,'hr':11,'hu':0,'id':0,'ig':0,'ii':0,'is':3,'it':3,'iu':7,'ja':0,'jmc':3,'jv':0,'ka':0,'kab':5,'kaj':3,'kcg':3,'kde':0,'kea':0,'kk':3,'kl':3,'km':0,'kn':0,'ko':0,'ksb':3,'ksh':21,'ku':3,'kw':7,'lag':18,'lb':3,'lg':3,'ln':4,'lo':0,'lt':10,'lv':6,'mas':3,'mg':4,'mk':16,'ml':3,'mn':3,'mo':9,'mr':3,'ms':0,'mt':15,'my':0,'nah':3,'naq':7,'nb':3,'nd':3,'ne':3,'nl':3,'nn':3,'no':3,'nr':3,'nso':4,'ny':3,'nyn':3,'om':3,'or':3,'pa':3,'pap':3,'pl':13,'ps':3,'pt':3,'rm':3,'ro':9,'rof':3,'ru':11,'rwk':3,'sah':0,'saq':3,'se':7,'seh':3,'ses':0,'sg':0,'sh':11,'shi':19,'sk':12,'sl':14,'sma':7,'smi':7,'smj':7,'smn':7,'sms':7,'sn':3,'so':3,'sq':3,'sr':11,'ss':3,'ssy':3,'st':3,'sv':3,'sw':3,'syr':3,'ta':3,'te':3,'teo':3,'th':0,'ti':4,'tig':3,'tk':3,'tl':4,'tn':3,'to':0,'tr':0,'ts':3,'tzm':22,'uk':11,'ur':3,'ve':3,'vi':0,'vun':3,'wa':4,'wae':3,'wo':0,'xh':3,'xog':3,'yo':0,'zh':0,'zu':3};function isIn(n,list){return list.indexOf(n)!==-1;}
function isBetween(n,start,end){return typeof n===typeof start&&start<=n&&n<=end;}
var pluralRules={'0':function(){return'other';},'1':function(n){if((isBetween((n%100),3,10))){return'few';}
if(n===0){return'zero';}
if((isBetween((n%100),11,99))){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'2':function(n){if(n!==0&&(n%10)===0){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'3':function(n){if(n===1){return'one';}
return'other';},'4':function(n){if((isBetween(n,0,1))){return'one';}
return'other';},'5':function(n){if((isBetween(n,0,2))&&n!==2){return'one';}
return'other';},'6':function(n){if(n===0){return'zero';}
if((n%10)===1&&(n%100)!==11){return'one';}
return'other';},'7':function(n){if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'8':function(n){if((isBetween(n,3,6))){return'few';}
if((isBetween(n,7,10))){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'9':function(n){if(n===0||n!==1&&(isBetween((n%100),1,19))){return'few';}
if(n===1){return'one';}
return'other';},'10':function(n){if((isBetween((n%10),2,9))&&!(isBetween((n%100),11,19))){return'few';}
if((n%10)===1&&!(isBetween((n%100),11,19))){return'one';}
return'other';},'11':function(n){if((isBetween((n%10),2,4))&&!(isBetween((n%100),12,14))){return'few';}
if((n%10)===0||(isBetween((n%10),5,9))||(isBetween((n%100),11,14))){return'many';}
if((n%10)===1&&(n%100)!==11){return'one';}
return'other';},'12':function(n){if((isBetween(n,2,4))){return'few';}
if(n===1){return'one';}
return'other';},'13':function(n){if((isBetween((n%10),2,4))&&!(isBetween((n%100),12,14))){return'few';}
if(n!==1&&(isBetween((n%10),0,1))||(isBetween((n%10),5,9))||(isBetween((n%100),12,14))){return'many';}
if(n===1){return'one';}
return'other';},'14':function(n){if((isBetween((n%100),3,4))){return'few';}
if((n%100)===2){return'two';}
if((n%100)===1){return'one';}
return'other';},'15':function(n){if(n===0||(isBetween((n%100),2,10))){return'few';}
if((isBetween((n%100),11,19))){return'many';}
if(n===1){return'one';}
return'other';},'16':function(n){if((n%10)===1&&n!==11){return'one';}
return'other';},'17':function(n){if(n===3){return'few';}
if(n===0){return'zero';}
if(n===6){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'18':function(n){if(n===0){return'zero';}
if((isBetween(n,0,2))&&n!==0&&n!==2){return'one';}
return'other';},'19':function(n){if((isBetween(n,2,10))){return'few';}
if((isBetween(n,0,1))){return'one';}
return'other';},'20':function(n){if((isBetween((n%10),3,4)||((n%10)===9))&&!(isBetween((n%100),10,19)||isBetween((n%100),70,79)||isBetween((n%100),90,99))){return'few';}
if((n%1000000)===0&&n!==0){return'many';}
if((n%10)===2&&!isIn((n%100),[12,72,92])){return'two';}
if((n%10)===1&&!isIn((n%100),[11,71,91])){return'one';}
return'other';},'21':function(n){if(n===0){return'zero';}
if(n===1){return'one';}
return'other';},'22':function(n){if((isBetween(n,0,1))||(isBetween(n,11,99))){return'one';}
return'other';},'23':function(n){if((isBetween((n%10),1,2))||(n%20)===0){return'one';}
return'other';},'24':function(n){if((isBetween(n,3,10)||isBetween(n,13,19))){return'few';}
if(isIn(n,[2,12])){return'two';}
if(isIn(n,[1,11])){return'one';}
return'other';}};var index=locales2rules[lang.replace(/-.*$/,'')];if(!(index in pluralRules)){return function(){return'other';};}
return pluralRules[index];}
var MAX_PLACEABLES=100;var PropertiesParser={patterns:null,entryIds:null,init:function(){this.patterns={comment:/^\s*#|^\s*$/,entity:/^([^=\s]+)\s*=\s*(.*)$/,multiline:/[^\\]\\$/,index:/\{\[\s*(\w+)(?:\(([^\)]*)\))?\s*\]\}/i,unicode:/\\u([0-9a-fA-F]{1,4})/g,entries:/[^\r\n]+/g,controlChars:/\\([\\\n\r\t\b\f\{\}\"\'])/g,placeables:/\{\{\s*([^\s]*?)\s*\}\}/,};},parse:function(ctx,source){if(!this.patterns){this.init();}
var ast=[];this.entryIds=Object.create(null);var entries=source.match(this.patterns.entries);if(!entries){return ast;}
for(var i=0;i<entries.length;i++){var line=entries[i];if(this.patterns.comment.test(line)){continue;}
while(this.patterns.multiline.test(line)&&i<entries.length){line=line.slice(0,-1)+entries[++i].trim();}
var entityMatch=line.match(this.patterns.entity);if(entityMatch){try{this.parseEntity(entityMatch[1],entityMatch[2],ast);}catch(e){if(ctx){ctx._emitter.emit('parseerror',e);}else{throw e;}}}}
return ast;},parseEntity:function(id,value,ast){var name,key;var pos=id.indexOf('[');if(pos!==-1){name=id.substr(0,pos);key=id.substring(pos+1,id.length-1);}else{name=id;key=null;}
var nameElements=name.split('.');if(nameElements.length>2){throw new L10nError('Error in ID: "'+name+'".'+' Nested attributes are not supported.');}
var attr;if(nameElements.length>1){name=nameElements[0];attr=nameElements[1];if(attr[0]==='$'){throw new L10nError('Attribute can\'t start with "$"',id);}}else{attr=null;}
this.setEntityValue(name,attr,key,this.unescapeString(value),ast);},setEntityValue:function(id,attr,key,rawValue,ast){var pos,v;var value=rawValue.indexOf('{{')>-1?this.parseString(rawValue):rawValue;if(attr){pos=this.entryIds[id];if(pos===undefined){v={$i:id};if(key){v[attr]={};v[attr][key]=value;}else{v[attr]=value;}
ast.push(v);this.entryIds[id]=ast.length-1;return;}
if(key){if(typeof(ast[pos][attr])==='string'){ast[pos][attr]={$x:this.parseIndex(ast[pos][attr]),$v:{}};}
ast[pos][attr].$v[key]=value;return;}
ast[pos][attr]=value;return;}
if(key){pos=this.entryIds[id];if(pos===undefined){v={};v[key]=value;ast.push({$i:id,$v:v});this.entryIds[id]=ast.length-1;return;}
if(typeof(ast[pos].$v)==='string'){ast[pos].$x=this.parseIndex(ast[pos].$v);ast[pos].$v={};}
ast[pos].$v[key]=value;return;}
ast.push({$i:id,$v:value});this.entryIds[id]=ast.length-1;},parseString:function(str){var chunks=str.split(this.patterns.placeables);var complexStr=[];var len=chunks.length;var placeablesCount=(len-1)/2;if(placeablesCount>=MAX_PLACEABLES){throw new L10nError('Too many placeables ('+placeablesCount+', max allowed is '+MAX_PLACEABLES+')');}
for(var i=0;i<chunks.length;i++){if(chunks[i].length===0){continue;}
if(i%2===1){complexStr.push({t:'idOrVar',v:chunks[i]});}else{complexStr.push(chunks[i]);}}
return complexStr;},unescapeString:function(str){if(str.lastIndexOf('\\')!==-1){str=str.replace(this.patterns.controlChars,'$1');}
return str.replace(this.patterns.unicode,function(match,token){return unescape('%u'+'0000'.slice(token.length)+token);});},parseIndex:function(str){var match=str.match(this.patterns.index);if(!match){throw new L10nError('Malformed index');}
if(match[2]){return[{t:'idOrVar',v:match[1]},match[2]];}else{return[{t:'idOrVar',v:match[1]}];}}};var KNOWN_MACROS=['plural'];var MAX_PLACEABLE_LENGTH=2500;var rePlaceables=/\{\{\s*(.+?)\s*\}\}/g;var nonLatin1=/[^\x01-\xFF]/;var FSI='\u2068';var PDI='\u2069';function createEntry(node,env){var keys=Object.keys(node);if(typeof node.$v==='string'&&keys.length===2){return node.$v;}
var attrs;for(var i=0,key;key=keys[i];i++){if(key[0]==='$'){continue;}
if(!attrs){attrs=Object.create(null);}
attrs[key]=createAttribute(node[key],env,node.$i+'.'+key);}
return{id:node.$i,value:node.$v!==undefined?node.$v:null,index:node.$x||null,attrs:attrs||null,env:env,dirty:false};}
function createAttribute(node,env,id){if(typeof node==='string'){return node;}
return{id:id,value:node.$v||(node!==undefined?node:null),index:node.$x||null,env:env,dirty:false};}
function format(args,entity){if(typeof entity==='string'){return[{},entity];}
if(entity.dirty){throw new L10nError('Cyclic reference detected: '+entity.id);}
entity.dirty=true;var rv;try{rv=resolveValue({},args,entity.env,entity.value,entity.index);}finally{entity.dirty=false;}
return rv;}
function resolveIdentifier(args,env,id){if(KNOWN_MACROS.indexOf(id)>-1){return[{},env['__'+id]];}
if(args&&args.hasOwnProperty(id)){if(typeof args[id]==='string'||(typeof args[id]==='number'&&!isNaN(args[id]))){return[{},args[id]];}else{throw new L10nError('Arg must be a string or a number: '+id);}}
if(id in env&&id!=='__proto__'){return format(args,env[id]);}
throw new L10nError('Unknown reference: '+id);}
function subPlaceable(locals,args,env,id){var res;try{res=resolveIdentifier(args,env,id);}catch(err){return[{error:err},'{{ '+id+' }}'];}
var value=res[1];if(typeof value==='number'){return res;}
if(typeof value==='string'){if(value.length>=MAX_PLACEABLE_LENGTH){throw new L10nError('Too many characters in placeable ('+
value.length+', max allowed is '+
MAX_PLACEABLE_LENGTH+')');}
if(locals.contextIsNonLatin1||value.match(nonLatin1)){res[1]=FSI+value+PDI;}
return res;}
return[{},'{{ '+id+' }}'];}
function interpolate(locals,args,env,arr){return arr.reduce(function(prev,cur){if(typeof cur==='string'){return[prev[0],prev[1]+cur];}else if(cur.t==='idOrVar'){var placeable=subPlaceable(locals,args,env,cur.v);return[prev[0],prev[1]+placeable[1]];}},[locals,'']);}
function resolveSelector(args,env,expr,index){var selectorName=index[0].v;var selector=resolveIdentifier(args,env,selectorName)[1];if(typeof selector!=='function'){return selector;}
var argValue=index[1]?resolveIdentifier(args,env,index[1])[1]:undefined;if(selector===env.__plural){if(argValue===0&&'zero'in expr){return'zero';}
if(argValue===1&&'one'in expr){return'one';}
if(argValue===2&&'two'in expr){return'two';}}
return selector(argValue);}
function resolveValue(locals,args,env,expr,index){if(!expr){return[locals,expr];}
if(typeof expr==='string'||typeof expr==='boolean'||typeof expr==='number'){return[locals,expr];}
if(Array.isArray(expr)){locals.contextIsNonLatin1=expr.some(function($_){return typeof($_)==='string'&&$_.match(nonLatin1);});return interpolate(locals,args,env,expr);}
if(index){var selector=resolveSelector(args,env,expr,index);if(expr.hasOwnProperty(selector)){return resolveValue(locals,args,env,expr[selector]);}}
if('other'in expr){return resolveValue(locals,args,env,expr.other);}
throw new L10nError('Unresolvable value');}
var Resolver={createEntry:createEntry,format:format,rePlaceables:rePlaceables};function walkContent(node,fn){if(typeof node==='string'){return fn(node);}
if(node.t==='idOrVar'){return node;}
var rv=Array.isArray(node)?[]:{};var keys=Object.keys(node);for(var i=0,key;(key=keys[i]);i++){if(key==='$i'||key==='$x'){rv[key]=node[key];}else{rv[key]=walkContent(node[key],fn);}}
return rv;}
var reAlphas=/[a-zA-Z]/g;var reVowels=/[aeiouAEIOU]/g;var ACCENTED_MAP='\u0226\u0181\u0187\u1E12\u1E16\u0191\u0193\u0126\u012A'+'\u0134\u0136\u013F\u1E3E\u0220\u01FE\u01A4\u024A\u0158'+'\u015E\u0166\u016C\u1E7C\u1E86\u1E8A\u1E8E\u1E90'+'[\\]^_`'+'\u0227\u0180\u0188\u1E13\u1E17\u0192\u0260\u0127\u012B'+'\u0135\u0137\u0140\u1E3F\u019E\u01FF\u01A5\u024B\u0159'+'\u015F\u0167\u016D\u1E7D\u1E87\u1E8B\u1E8F\u1E91';var FLIPPED_MAP='\u2200\u0510\u2183p\u018E\u025F\u05E4HI\u017F'+'\u04FC\u02E5WNO\u0500\xD2\u1D1AS\u22A5\u2229\u0245'+'\uFF2DX\u028EZ'+'[\\]\u1D65_,'+'\u0250q\u0254p\u01DD\u025F\u0183\u0265\u0131\u027E'+'\u029E\u0285\u026Fuodb\u0279s\u0287n\u028C\u028Dx\u028Ez';function makeLonger(val){return val.replace(reVowels,function(match){return match+match.toLowerCase();});}
function replaceChars(map,val){return val.replace(reAlphas,function(match){return map.charAt(match.charCodeAt(0)-65);});}
var reWords=/[^\W0-9_]+/g;function makeRTL(val){return val.replace(reWords,function(match){return'\u202e'+match+'\u202c';});}
var reExcluded=/(%[EO]?\w|\{\s*.+?\s*\}|&[#\w]+;|<\s*.+?\s*>)/;function mapContent(fn,val){if(!val){return val;}
var parts=val.split(reExcluded);var modified=parts.map(function(part){if(reExcluded.test(part)){return part;}
return fn(part);});return modified.join('');}
function Pseudo(id,name,charMap,modFn){this.id=id;this.translate=mapContent.bind(null,function(val){return replaceChars(charMap,modFn(val));});this.name=this.translate(name);}
var PSEUDO={'fr-x-psaccent':new Pseudo('fr-x-psaccent','Runtime Accented',ACCENTED_MAP,makeLonger),'ar-x-psbidi':new Pseudo('ar-x-psbidi','Runtime Bidi',FLIPPED_MAP,makeRTL)};function Locale(id,ctx){this.id=id;this.ctx=ctx;this.isReady=false;this.entries=Object.create(null);this.entries.__plural=getPluralRule(this.isPseudo()?this.ctx.defaultLocale:id);}
Locale.prototype.isPseudo=function(){return this.ctx.qps.indexOf(this.id)!==-1;};var bindingsIO={extra:function(id,ver,path,type,callback,errback){if(type==='properties'){type='text';}
navigator.mozApps.getLocalizationResource(id,ver,path,type).then(callback.bind(null,null),errback);},app:function(id,ver,path,type,callback,errback,sync){switch(type){case'properties':io.load(path,callback,sync);break;case'json':io.loadJSON(path,callback,sync);break;}},};Locale.prototype.build=function L_build(callback){var sync=!callback;var ctx=this.ctx;var self=this;var l10nLoads=ctx.resLinks.length;function onL10nLoaded(err){if(err){ctx._emitter.emit('fetcherror',err);}
if(--l10nLoads<=0){self.isReady=true;if(callback){callback();}}}
if(l10nLoads===0){onL10nLoaded();return;}
function onJSONLoaded(err,json){if(!err&&json){self.addAST(json);}
onL10nLoaded(err);}
function onPropLoaded(err,source){if(!err&&source){var ast=PropertiesParser.parse(ctx,source);self.addAST(ast);}
onL10nLoaded(err);}
var idToFetch=this.isPseudo()?ctx.defaultLocale:this.id;var appVersion=null;var source='app';if(typeof(navigator)!=='undefined'){source=navigator.mozL10n._config.localeSources[this.id]||'app';appVersion=navigator.mozL10n._config.appVersion;}
for(var i=0;i<ctx.resLinks.length;i++){var resLink=decodeURI(ctx.resLinks[i]);var path=resLink.replace('{locale}',idToFetch);var type=path.substr(path.lastIndexOf('.')+1);var cb;switch(type){case'json':cb=onJSONLoaded;break;case'properties':cb=onPropLoaded;break;}
bindingsIO[source](this.id,appVersion,path,type,cb,onL10nLoaded,sync);}};function createPseudoEntry(node,entries){return Resolver.createEntry(walkContent(node,PSEUDO[this.id].translate),entries);}
Locale.prototype.addAST=function(ast){var createEntry=this.isPseudo()?createPseudoEntry.bind(this):Resolver.createEntry;for(var i=0;i<ast.length;i++){this.entries[ast[i].$i]=createEntry(ast[i],this.entries);}};function Context(id){this.id=id;this.isReady=false;this.isLoading=false;this.defaultLocale='en-US';this.availableLocales=[];this.supportedLocales=[];this.qps=[];this.resLinks=[];this.locales={};this._emitter=new EventEmitter();this._ready=new Promise(this.once.bind(this));}
function reportMissing(id,err){this._emitter.emit('notfounderror',err);return id;}
function getWithFallback(id){var cur=0;var loc;var locale;while(loc=this.supportedLocales[cur]){locale=this.getLocale(loc);if(!locale.isReady){locale.build(null);}
var entry=locale.entries[id];if(entry===undefined){cur++;reportMissing.call(this,id,new L10nError('"'+id+'"'+' not found in '+loc+' in '+this.id,id,loc));continue;}
return entry;}
throw new L10nError('"'+id+'"'+' missing from all supported locales in '+this.id,id);}
function formatTuple(args,entity){try{return Resolver.format(args,entity);}catch(err){this._emitter.emit('resolveerror',err);var locals={error:err};return[locals,entity.id];}}
function formatValue(args,entity){if(typeof entity==='string'){return entity;}
return formatTuple.call(this,args,entity)[1];}
function formatEntity(args,entity){var entityTuple=formatTuple.call(this,args,entity);var value=entityTuple[1];var formatted={value:value,attrs:null,};if(entity.attrs){formatted.attrs=Object.create(null);}
for(var key in entity.attrs){var attrTuple=formatTuple.call(this,args,entity.attrs[key]);formatted.attrs[key]=attrTuple[1];}
return formatted;}
function formatAsync(fn,id,args){return this._ready.then(getWithFallback.bind(this,id)).then(fn.bind(this,args),reportMissing.bind(this,id));}
Context.prototype.formatValue=function(id,args){return formatAsync.call(this,formatValue,id,args);};Context.prototype.formatEntity=function(id,args){return formatAsync.call(this,formatEntity,id,args);};function legacyGet(fn,id,args){if(!this.isReady){throw new L10nError('Context not ready');}
var entry;try{entry=getWithFallback.call(this,id);}catch(err){if(err.loc){throw err;}
reportMissing.call(this,id,err);return'';}
return fn.call(this,args,entry);}
Context.prototype.get=function(id,args){return legacyGet.call(this,formatValue,id,args);};Context.prototype.getEntity=function(id,args){return legacyGet.call(this,formatEntity,id,args);};Context.prototype.getLocale=function getLocale(code){var locales=this.locales;if(locales[code]){return locales[code];}
return locales[code]=new Locale(code,this);};function negotiate(available,requested,defaultLocale){var supportedLocale;for(var i=0;i<requested.length;i++){var locale=requested[i];if(available.indexOf(locale)!==-1){supportedLocale=locale;break;}}
if(!supportedLocale||supportedLocale===defaultLocale){return[defaultLocale];}
return[supportedLocale,defaultLocale];}
function freeze(supported){var locale=this.getLocale(supported[0]);if(locale.isReady){setReady.call(this,supported);}else{locale.build(setReady.bind(this,supported));}}
function setReady(supported){this.supportedLocales=supported;this.isReady=true;this._emitter.emit('ready');}
Context.prototype.registerLocales=function(defLocale,available){if(defLocale){this.defaultLocale=defLocale;}
this.availableLocales=[this.defaultLocale];this.qps=Object.keys(PSEUDO);if(available){for(var i=0,loc;loc=available[i];i++){if(this.availableLocales.indexOf(loc)===-1){this.availableLocales.push(loc);var pos=this.qps.indexOf(loc);if(pos!==-1){this.qps.splice(pos,1);}}}}};Context.prototype.requestLocales=function requestLocales(){if(this.isLoading&&!this.isReady){throw new L10nError('Context not ready');}
this.isLoading=true;var requested=Array.prototype.slice.call(arguments);if(requested.length===0){throw new L10nError('No locales requested');}
var supported=negotiate(this.availableLocales.concat(this.qps),requested,this.defaultLocale);if(this.supportedLocales[0]!==supported[0]){freeze.call(this,supported);}};Context.prototype.addEventListener=function(type,listener){this._emitter.addEventListener(type,listener);};Context.prototype.removeEventListener=function(type,listener){this._emitter.removeEventListener(type,listener);};Context.prototype.ready=function(callback){if(this.isReady){setTimeout(callback);}
this.addEventListener('ready',callback);};Context.prototype.once=function(callback){if(this.isReady){setTimeout(callback);return;}
var callAndRemove=(function(){this.removeEventListener('ready',callAndRemove);callback();}).bind(this);this.addEventListener('ready',callAndRemove);};var allowed={elements:['a','em','strong','small','s','cite','q','dfn','abbr','data','time','code','var','samp','kbd','sub','sup','i','b','u','mark','ruby','rt','rp','bdi','bdo','span','br','wbr'],attributes:{global:['title','aria-label','aria-valuetext','aria-moz-hint'],a:['download'],area:['download','alt'],input:['alt','placeholder'],menuitem:['label'],menu:['label'],optgroup:['label'],option:['label'],track:['label'],img:['alt'],textarea:['placeholder'],th:['abbr']}};var rtlList=['ar','he','fa','ps','ar-x-psbidi','ur'];var nodeObserver=null;var pendingElements=null;var moConfig={attributes:true,characterData:false,childList:true,subtree:true,attributeFilter:['data-l10n-id','data-l10n-args']};navigator.mozL10n={ctx:null,get:function get(id,ctxdata){return navigator.mozL10n.ctx.get(id,ctxdata);},formatValue:function(id,ctxdata){return navigator.mozL10n.ctx.formatValue(id,ctxdata);},formatEntity:function(id,ctxdata){return navigator.mozL10n.ctx.formatEntity(id,ctxdata);},translateFragment:function(fragment){return translateFragment.call(navigator.mozL10n,fragment);},setAttributes:setL10nAttributes,getAttributes:getL10nAttributes,ready:function ready(callback){return navigator.mozL10n.ctx.ready(callback);},once:function once(callback){return navigator.mozL10n.ctx.once(callback);},get readyState(){return navigator.mozL10n.ctx.isReady?'complete':'loading';},language:{set code(lang){navigator.mozL10n.ctx.requestLocales(lang);},get code(){return navigator.mozL10n.ctx.supportedLocales[0];},get direction(){return getDirection(navigator.mozL10n.ctx.supportedLocales[0]);}},qps:PSEUDO,_config:{appVersion:null,localeSources:Object.create(null),isPretranslated:false,},_getInternalAPI:function(){return{Error:L10nError,Context:Context,Locale:Locale,Resolver:Resolver,getPluralRule:getPluralRule,rePlaceables:rePlaceables,translateDocument:translateDocument,onMetaInjected:onMetaInjected,PropertiesParser:PropertiesParser,walkContent:walkContent,buildLocaleList:buildLocaleList};}};function getDirection(lang){return(rtlList.indexOf(lang)>=0)?'rtl':'ltr';}
var readyStates={loading:0,interactive:1,complete:2};function whenInteractive(callback){if(readyStates[document.readyState]>=readyStates.interactive){callback();return;}
document.addEventListener('readystatechange',function l10n_onrsc(){if(readyStates[document.readyState]>=readyStates.interactive){document.removeEventListener('readystatechange',l10n_onrsc);callback();}});}
function initObserver(){nodeObserver=new MutationObserver(onMutations.bind(navigator.mozL10n));nodeObserver.observe(document,moConfig);}
function init(pretranslate){if(!pretranslate){initObserver();}
initResources.call(navigator.mozL10n);}
function initResources(){var meta={};var nodes=document.head.querySelectorAll('link[rel="localization"],'+'meta[name="availableLanguages"],'+'meta[name="defaultLanguage"],'+'meta[name="appVersion"],'+'script[type="application/l10n"]');for(var i=0,node;node=nodes[i];i++){var type=node.getAttribute('rel')||node.nodeName.toLowerCase();switch(type){case'localization':this.ctx.resLinks.push(node.getAttribute('href'));break;case'meta':onMetaInjected.call(this,node,meta);break;case'script':onScriptInjected.call(this,node);break;}}
var additionalLanguagesPromise;if(navigator.mozApps&&navigator.mozApps.getAdditionalLanguages){additionalLanguagesPromise=navigator.mozApps.getAdditionalLanguages().catch(function(e){console.error('Error while loading getAdditionalLanguages',e);});document.addEventListener('additionallanguageschange',function(evt){registerLocales.call(this,meta,evt.detail);this.ctx.requestLocales.apply(this.ctx,navigator.languages||[navigator.language]);}.bind(this));}else{additionalLanguagesPromise=Promise.resolve();}
additionalLanguagesPromise.then(function(extraLangs){registerLocales.call(this,meta,extraLangs);initLocale.call(this);}.bind(this));}
function registerLocales(meta,extraLangs){var locales=buildLocaleList.call(this,meta,extraLangs);navigator.mozL10n._config.localeSources=locales[1];this.ctx.registerLocales(locales[0],Object.keys(locales[1]));}
function getMatchingLangpack(appVersion,langpacks){for(var i=0,langpack;(langpack=langpacks[i]);i++){if(langpack.target===appVersion){return langpack;}}
return null;}
function buildLocaleList(meta,extraLangs){var loc,lp;var localeSources=Object.create(null);var defaultLocale=meta.defaultLanguage||this.ctx.defaultLocale;if(meta.availableLanguages){for(loc in meta.availableLanguages){localeSources[loc]='app';}}
if(extraLangs){for(loc in extraLangs){lp=getMatchingLangpack(this._config.appVersion,extraLangs[loc]);if(!lp){continue;}
if(!(loc in localeSources)||!meta.availableLanguages[loc]||parseInt(lp.revision)>meta.availableLanguages[loc]){localeSources[loc]='extra';}}}
if(!(defaultLocale in localeSources)){localeSources[defaultLocale]='app';}
return[defaultLocale,localeSources];}
function splitAvailableLanguagesString(str){var langs={};str.split(',').forEach(function(lang){lang=lang.trim().split(':');langs[lang[0]]=parseInt(lang[1]);});return langs;}
function onMetaInjected(node,meta){switch(node.getAttribute('name')){case'availableLanguages':meta.availableLanguages=splitAvailableLanguagesString(node.getAttribute('content'));break;case'defaultLanguage':meta.defaultLanguage=node.getAttribute('content');break;case'appVersion':navigator.mozL10n._config.appVersion=node.getAttribute('content');break;}}
function onScriptInjected(node){var lang=node.getAttribute('lang');var locale=this.ctx.getLocale(lang);locale.addAST(JSON.parse(node.textContent));}
function initLocale(){this.ctx.requestLocales.apply(this.ctx,navigator.languages||[navigator.language]);window.addEventListener('languagechange',function l10n_langchange(){this.ctx.requestLocales.apply(this.ctx,navigator.languages||[navigator.language]);}.bind(this));}
function localizeMutations(mutations){var mutation;var targets=new Set();for(var i=0;i<mutations.length;i++){mutation=mutations[i];if(mutation.type==='childList'){var addedNode;for(var j=0;j<mutation.addedNodes.length;j++){addedNode=mutation.addedNodes[j];if(addedNode.nodeType!==Node.ELEMENT_NODE){continue;}
targets.add(addedNode);}}
if(mutation.type==='attributes'){targets.add(mutation.target);}}
targets.forEach(function(target){if(target.childElementCount){translateFragment.call(this,target);}else if(target.hasAttribute('data-l10n-id')){translateElement.call(this,target);}},this);}
function onMutations(mutations,self){self.disconnect();localizeMutations.call(this,mutations);self.observe(document,moConfig);}
function onReady(){if(!navigator.mozL10n._config.isPretranslated){translateDocument.call(this);}
navigator.mozL10n._config.isPretranslated=false;if(pendingElements){for(var i=0,element;element=pendingElements[i];i++){translateElement.call(this,element);}
pendingElements=null;}
if(!nodeObserver){initObserver();}
fireLocalizedEvent.call(this);}
function fireLocalizedEvent(){var event=new CustomEvent('localized',{'bubbles':false,'cancelable':false,'detail':{'language':this.ctx.supportedLocales[0]}});window.dispatchEvent(event);}
var reOverlay=/<|&#?\w+;/;var reHtml=/[&<>]/g;var htmlEntities={'&':'&amp;','<':'&lt;','>':'&gt;',};function translateDocument(){document.documentElement.lang=this.language.code;document.documentElement.dir=this.language.direction;translateFragment.call(this,document.documentElement);}
function translateFragment(element){if(typeof element.hasAttribute==='function'&&element.hasAttribute('data-l10n-id')){translateElement.call(this,element);}
var nodes=getTranslatableChildren(element);for(var i=0;i<nodes.length;i++){translateElement.call(this,nodes[i]);}}
function setL10nAttributes(element,id,args){element.setAttribute('data-l10n-id',id);if(args){element.setAttribute('data-l10n-args',JSON.stringify(args));}}
function getL10nAttributes(element){return{id:element.getAttribute('data-l10n-id'),args:JSON.parse(element.getAttribute('data-l10n-args'))};}
function getTranslatableChildren(element){return element?element.querySelectorAll('*[data-l10n-id]'):[];}
function camelCaseToDashed(string){if(string==='ariaValueText'){return'aria-valuetext';}
return string.replace(/[A-Z]/g,function(match){return'-'+match.toLowerCase();}).replace(/^-/,'');}
function escapeL10nArgs(match){return htmlEntities[match];}
function translateElement(element){if(!this.ctx.isReady){if(!pendingElements){pendingElements=[];}
pendingElements.push(element);return;}
var l10nId=element.getAttribute('data-l10n-id');if(!l10nId){return false;}
var l10nArgs=element.getAttribute('data-l10n-args');var entity=this.ctx.getEntity(l10nId,l10nArgs?JSON.parse(l10nArgs.replace(reHtml,escapeL10nArgs)):undefined);var value=entity.value;if(typeof value==='string'){if(!reOverlay.test(value)){element.textContent=value;}else{var translation=element.ownerDocument.createElement('template');translation.innerHTML=value;overlayElement(element,translation.content);}}
for(var key in entity.attrs){var attrName=camelCaseToDashed(key);if(isAttrAllowed({name:attrName},element)){element.setAttribute(attrName,entity.attrs[key]);}}}
function overlayElement(sourceElement,translationElement){var result=translationElement.ownerDocument.createDocumentFragment();var k,attr;var childElement;while((childElement=translationElement.childNodes[0])){translationElement.removeChild(childElement);if(childElement.nodeType===Node.TEXT_NODE){result.appendChild(childElement);continue;}
var index=getIndexOfType(childElement);var sourceChild=getNthElementOfType(sourceElement,childElement,index);if(sourceChild){overlayElement(sourceChild,childElement);result.appendChild(sourceChild);continue;}
if(isElementAllowed(childElement)){var sanitizedChild=childElement.ownerDocument.createElement(childElement.nodeName);overlayElement(sanitizedChild,childElement);result.appendChild(sanitizedChild);continue;}
result.appendChild(document.createTextNode(childElement.textContent));}
sourceElement.textContent='';sourceElement.appendChild(result);if(translationElement.attributes){for(k=0,attr;(attr=translationElement.attributes[k]);k++){if(isAttrAllowed(attr,sourceElement)){sourceElement.setAttribute(attr.name,attr.value);}}}}
function isElementAllowed(element){return allowed.elements.indexOf(element.tagName.toLowerCase())!==-1;}
function isAttrAllowed(attr,element){var attrName=attr.name.toLowerCase();var tagName=element.tagName.toLowerCase();if(allowed.attributes.global.indexOf(attrName)!==-1){return true;}
if(!allowed.attributes[tagName]){return false;}
if(allowed.attributes[tagName].indexOf(attrName)!==-1){return true;}
if(tagName==='input'&&attrName==='value'){var type=element.type.toLowerCase();if(type==='submit'||type==='button'||type==='reset'){return true;}}
return false;}
function getNthElementOfType(context,element,index){var nthOfType=0;for(var i=0,child;child=context.children[i];i++){if(child.nodeType===Node.ELEMENT_NODE&&child.tagName===element.tagName){if(nthOfType===index){return child;}
nthOfType++;}}
return null;}
function getIndexOfType(element){var index=0;var child;while((child=element.previousElementSibling)){if(child.tagName===element.tagName){index++;}}
return index;}
var DEBUG=false;navigator.mozL10n.ctx=new Context(window.document?document.URL:null);navigator.mozL10n.ctx.ready(onReady.bind(navigator.mozL10n));navigator.mozL10n.ctx.addEventListener('notfounderror',function reportMissingEntity(e){if(DEBUG||e.loc==='en-US'){console.warn(e.toString());}});if(DEBUG){navigator.mozL10n.ctx.addEventListener('fetcherror',console.error.bind(console));navigator.mozL10n.ctx.addEventListener('parseerror',console.error.bind(console));navigator.mozL10n.ctx.addEventListener('resolveerror',console.error.bind(console));}
if(window.document){navigator.mozL10n._config.isPretranslated=document.documentElement.lang===navigator.language;var forcePretranslate=!navigator.mozL10n._config.isPretranslated;whenInteractive(init.bind(navigator.mozL10n,forcePretranslate));}
document.l10n={setAttributes:navigator.mozL10n.setAttributes,getAttributes:navigator.mozL10n.getAttributes,formatValue:function(id,args){return navigator.mozL10n.formatValue(id,args);},translateFragment:function(frag){return Promise.resolve(navigator.mozL10n.translateFragment(frag));},ready:new Promise(function(resolve){navigator.mozL10n.once(resolve);}),formatValues:function(){var keys=arguments;var resp=keys.map(function(key){if(Array.isArray(key)){return navigator.mozL10n.formatValue(key[0],key[1]);}
return navigator.mozL10n.formatValue(key);});return Promise.all(resp);},requestLanguages:function(langs){navigator.mozL10n.ctx.requestLocales.apply(navigator.mozL10n.ctx,langs);},pseudo:{'fr-x-psaccent':{getName:function(){return Promise.resolve(navigator.mozL10n.qps['fr-x-psaccent'].name);},processString:function(s){return Promise.resolve(navigator.mozL10n.qps['fr-x-psaccent'].translate(s));}},'ar-x-psbidi':{getName:function(){return Promise.resolve(navigator.mozL10n.qps['ar-x-psbidi'].name);},processString:function(s){return Promise.resolve(navigator.mozL10n.qps['ar-x-psbidi'].translate(s));}}},};navigator.mozL10n.ready(function(){document.documentElement.setAttribute('langs',navigator.mozL10n.ctx.supportedLocales.join(' '));});navigator.mozL10n.once(function(){window.addEventListener('localized',function(){document.dispatchEvent(new CustomEvent('DOMRetranslated',{bubbles:false,cancelable:false}));});});})(this);;'use strict';var LazyLoader=(function(){function LazyLoader(){this._loaded={};this._isLoading={};}
LazyLoader.prototype={_js:function(file,callback){var script=document.createElement('script');script.src=file;script.async=false;script.addEventListener('load',callback);document.head.appendChild(script);this._isLoading[file]=script;},_css:function(file,callback){var style=document.createElement('link');style.type='text/css';style.rel='stylesheet';style.href=file;document.head.appendChild(style);callback();},_html:function(domNode,callback){if(domNode.getAttribute('is')){this.load(['/shared/js/html_imports.js'],function(){HtmlImports.populate(callback);}.bind(this));return;}
for(var i=0;i<domNode.childNodes.length;i++){if(domNode.childNodes[i].nodeType==document.COMMENT_NODE){domNode.innerHTML=domNode.childNodes[i].nodeValue;break;}}
window.dispatchEvent(new CustomEvent('lazyload',{detail:domNode}));callback();},getJSON:function(file,mozSystem){return new Promise(function(resolve,reject){var xhr;if(mozSystem){xhr=new XMLHttpRequest({mozSystem:true});}else{xhr=new XMLHttpRequest();}
xhr.open('GET',file,true);xhr.responseType='json';xhr.onerror=function(error){reject(error);};xhr.onload=function(){if(xhr.response!==null){resolve(xhr.response);}else{reject(new Error('No valid JSON object was found ('+
xhr.status+' '+xhr.statusText+')'));}};xhr.send();});},load:function(files,callback){var deferred={};deferred.promise=new Promise(resolve=>{deferred.resolve=resolve;});if(!Array.isArray(files)){files=[files];}
var loadsRemaining=files.length,self=this;function perFileCallback(file){if(self._isLoading[file]){delete self._isLoading[file];}
self._loaded[file]=true;if(--loadsRemaining===0){deferred.resolve();if(callback){callback();}}}
for(var i=0;i<files.length;i++){var file=files[i];if(this._loaded[file.id||file]){perFileCallback(file);}else if(this._isLoading[file]){this._isLoading[file].addEventListener('load',perFileCallback.bind(null,file));}else{var method,idx;if(typeof file==='string'){method=file.match(/\.([^.]+)$/)[1];idx=file;}else{method='html';idx=file.id;}
this['_'+method](file,perFileCallback.bind(null,idx));}}
return deferred.promise;}};return new LazyLoader();}());;'use strict';var SettingsListener={_lock:null,_observers:[],getSettingsLock:function sl_getSettingsLock(){if(this._lock&&!this._lock.closed){return this._lock;}
var settings=window.navigator.mozSettings;return(this._lock=settings.createLock());},observe:function sl_observe(name,defaultValue,callback){var settings=window.navigator.mozSettings;if(!settings){window.setTimeout(function(){callback(defaultValue);});return;}
var req;try{req=this.getSettingsLock().get(name);}catch(e){console.warn('Stale lock in settings_listener.js.','See https://bugzilla.mozilla.org/show_bug.cgi?id=793239');this._lock=null;req=this.getSettingsLock().get(name);}
req.addEventListener('success',(function onsuccess(){callback(typeof(req.result[name])!='undefined'?req.result[name]:defaultValue);}));var settingChanged=function settingChanged(evt){callback(evt.settingValue);};settings.addObserver(name,settingChanged);this._observers.push({name:name,callback:callback,observer:settingChanged});},unobserve:function sl_unobserve(name,callback){var settings=window.navigator.mozSettings;var that=this;this._observers.forEach(function(value,index){if(value.name===name&&value.callback===callback){settings.removeObserver(name,value.observer);that._observers.splice(index,1);}});}};;'use strict';(function(exports){var iceContactsDetails=[],iceContactsBar,contactListOverlay,contactInOverlay,contactList,contactListCancel;function init(){if(ICEContacts._initialized){return;}
iceContactsBar=document.getElementById('ice-contacts-bar');contactListOverlay=document.getElementById('contact-list-overlay');contactInOverlay=document.getElementById('contact-in-overlay');LazyLoader.load([contactListOverlay],function(){var contactListOverlayHeader=contactListOverlay.querySelector('header');contactListOverlayHeader.dataset.l10nId='ice-contacts-overlay-title';contactList=document.getElementById('contact-list');contactListCancel=document.getElementById('contact-list-overlay-cancel');iceContactsBar.addEventListener('click',showICEContactOverlay);contactListCancel.addEventListener('click',hideICEContactOverlay);ICEContacts._initialized=true;});}
function showICEContactsBar(){iceContactsBar.removeAttribute('hidden');}
function showICEContactOverlay(){contactListOverlay.classList.add('display');}
function hideICEContactOverlay(){contactListOverlay.classList.remove('display');}
function callICEContact(number){hideICEContactOverlay();CallHandler.call(number);}
function findContact(iceContact){return new Promise(function(resolve){var contactFilter={filterBy:['id'],filterValue:iceContact,filterOp:'equals',filterLimit:1};var contactRequest=navigator.mozContacts.find(contactFilter);contactRequest.onsuccess=function(){var contact=this.result[0];if(contact&&contact.tel){iceContactsDetails.push(contact);}
resolve(contact);};});}
function addContactToOverlay(contact){return new Promise(function(resolve){if(!contact||!contact.tel){resolve();return;}
contact.tel.forEach(function(tel){var iceContactOverlayEntry=contactInOverlay.cloneNode(true);iceContactOverlayEntry.removeAttribute('id');iceContactOverlayEntry.removeAttribute('hidden');iceContactOverlayEntry.querySelector('.js-name').textContent=contact.name[0];iceContactOverlayEntry.querySelector('.js-tel-type').dataset.l10nId=tel.type[0];iceContactOverlayEntry.querySelector('.js-tel').textContent=tel.value;contactList.insertBefore(iceContactOverlayEntry,contactListCancel);iceContactOverlayEntry.addEventListener('click',callICEContact.bind(null,tel.value));showICEContactsBar();});resolve();});}
function updateICEContacts(){init();return new Promise(function(resolve){LazyLoader.load([contactInOverlay],function(){ICEStore.getContacts().then(function(iceContacts){if(!iceContacts||!iceContacts.length){resolve();}else{var promises=[];iceContacts.forEach(function(iceContact){promises.push(findContact(iceContact).then(addContactToOverlay));});Promise.all(promises).then(resolve);}});});});}
function isFromICEContact(number){return iceContactsDetails.some(function(iceContact){return iceContact.tel.some(function(tel){return number==tel.value;});});}
var ICEContacts={_initialized:false,updateICEContacts:updateICEContacts,isFromICEContact:isFromICEContact};exports.ICEContacts=ICEContacts;})(window);;'use strict';var kFontStep=4;var minFontSize=12;var gTonesFrequencies={'1':[697,1209],'2':[697,1336],'3':[697,1477],'4':[770,1209],'5':[770,1336],'6':[770,1477],'7':[852,1209],'8':[852,1336],'9':[852,1477],'*':[941,1209],'0':[941,1336],'#':[941,1477]};var KeypadManager={_phoneNumber:'',_onCall:false,_keypadSoundIsEnabled:false,_shortTone:false,_vibrationEnabled:false,kVibrationDuration:50,_insertPosition:null,get phoneNumberView(){delete this.phoneNumberView;this.phoneNumberView=document.getElementById('phone-number-view');return this.phoneNumberView;},get fakePhoneNumberView(){delete this.fakePhoneNumberView;this.fakePhoneNumberView=document.getElementById('fake-phone-number-view');return this.fakePhoneNumberView;},get phoneNumberViewContainer(){delete this.phoneNumberViewContainer;this.phoneNumberViewContainer=document.getElementById('phone-number-view-container');return this.phoneNumberViewContainer;},get keypad(){delete this.keypad;this.keypad=document.getElementById('keypad');return this.keypad;},get callBar(){delete this.callBar;this.callBar=document.getElementById('keypad-callbar');return this.callBar;},get hideBar(){delete this.hideBar;this.hideBar=document.getElementById('keypad-hidebar');return this.hideBar;},get callBarAddContact(){delete this.callBarAddContact;this.callBarAddContact=document.getElementById('keypad-callbar-add-contact');return this.callBarAddContact;},get callBarCallAction(){delete this.callBarCallAction;this.callBarCallAction=document.getElementById('keypad-callbar-call-action');return this.callBarCallAction;},get callBarCancelAction(){delete this.callBarCancelAction;this.callBarCancelAction=document.getElementById('keypad-callbar-cancel');return this.callBarCancelAction;},get deleteButton(){delete this.deleteButton;this.deleteButton=document.getElementById('keypad-delete');return this.deleteButton;},get hideBarHangUpAction(){delete this.hideBarHangUpAction;this.hideBarHangUpAction=document.getElementById('keypad-hidebar-hang-up-action-wrapper');return this.hideBarHangUpAction;},get hideBarHideAction(){delete this.hideBarHideAction;this.hideBarHideAction=document.getElementById('keypad-hidebar-hide-keypad-action');return this.hideBarHangAction;},init:function kh_init(oncall){this._onCall=!!oncall;this._lastPressedKey=null;var defaultFontSize=window.getComputedStyle(document.body,null).getPropertyValue('font-size');minFontSize=parseInt(parseInt(defaultFontSize)*10*0.226);this.phoneNumberView.value='';this.phoneNumberView.addEventListener('click',this._updateInsertPosition.bind(this));this._phoneNumber='';var keyHandler=this.keyHandler.bind(this);this.keypad.addEventListener('touchstart',keyHandler,true);this.keypad.addEventListener('touchmove',keyHandler,true);this.keypad.addEventListener('touchend',keyHandler,true);this.keypad.addEventListener('touchcancel',keyHandler,true);this.deleteButton.addEventListener('touchstart',keyHandler);this.deleteButton.addEventListener('touchend',keyHandler);if(this.callBarAddContact){this.callBarAddContact.addEventListener('mouseup',this.addContact.bind(this));}
if(this.callBarCallAction){this.callBarCallAction.addEventListener('mouseup',this.makeCall.bind(this));}
if(this.callBarCancelAction){this.callBarCancelAction.addEventListener('mouseup',function(){window.close();});}
if(this.hideBarHideAction){this.hideBarHideAction.addEventListener('mouseup',this.callbarBackAction);}
if(this.hideBarHangUpAction){this.hideBarHangUpAction.addEventListener('mouseup',this.hangUpCallFromKeypad);}
TonePlayer.init('system');this.render();this._observePreferences();},render:function hk_render(layoutType){if(layoutType=='oncall'){this._onCall=true;var numberNode=window.CallScreen.activeCall.querySelector('.number');this._phoneNumber=numberNode.textContent;this._isKeypadClicked=false;this.phoneNumberViewContainer.classList.add('keypad-visible');if(this.callBar){this.callBar.classList.add('hide');}
if(this.hideBar){this.hideBar.classList.remove('hide');}
this.deleteButton.classList.add('hide');}else{this.phoneNumberViewContainer.classList.remove('keypad-visible');if(this.callBar){this.callBar.classList.remove('hide');}
if(this.hideBar){this.hideBar.classList.add('hide');}
this.deleteButton.classList.remove('hide');}},phoneNumber:function hk_phoneNumber(){return this._phoneNumber;},makeCall:function hk_makeCall(event){event.stopPropagation();if(this._phoneNumber!==''){window.CallHandler.call(KeypadManager._phoneNumber);}},addContact:function hk_addContact(event){var number=this._phoneNumber;if(!number){return;}
try{var activity=new window.MozActivity({name:'new',data:{type:'webcontacts/contact',params:{'tel':number}}});activity.onsuccess=function(){};activity.onerror=function(){};}catch(e){console.log('WebActivities unavailable? : '+e);}},callbarBackAction:function hk_callbarBackAction(event){window.CallScreen.hideKeypad();},hangUpCallFromKeypad:function hk_hangUpCallFromKeypad(event){window.CallScreen.views.classList.remove('show');window.OnCallHandler.end();},formatPhoneNumber:function kh_formatPhoneNumber(mode){var fakeView=null,view=null;switch(mode){case'dialpad':fakeView=this.fakePhoneNumberView;view=this.phoneNumberView;if(view.value===''){view.style.fontSize=view.dataset.size;return;}
break;case'on-call':fakeView=window.CallScreen.activeCall.querySelector('.fake-number');view=window.CallScreen.activeCall.querySelector('.number');break;}
var computedStyle=window.getComputedStyle(view,null);var currentFontSize=computedStyle.getPropertyValue('font-size');if(!('size'in view.dataset)){view.dataset.size=currentFontSize;}
var newFontSize=this.getNextFontSize(view,fakeView,parseInt(view.dataset.size),parseInt(currentFontSize));view.style.fontSize=newFontSize+'px';this.addEllipsis(view,fakeView,newFontSize);},addEllipsis:function kh_addEllipsis(view,fakeView,currentFontSize){var viewWidth=view.getBoundingClientRect().width;fakeView.style.fontSize=currentFontSize+'px';fakeView.textContent=view.value;var counter=1;var value=view.value;var newPhoneNumber;while(fakeView.getBoundingClientRect().width>viewWidth){newPhoneNumber='\u2026'+value.substr(-value.length+counter);fakeView.textContent=newPhoneNumber;counter++;}
if(newPhoneNumber){view.value=newPhoneNumber;}},getNextFontSize:function kh_getNextFontSize(view,fakeView,fontSize,initialFontSize){var viewWidth=view.getBoundingClientRect().width;fakeView.style.fontSize=fontSize+'px';fakeView.textContent=view.value;var rect=fakeView.getBoundingClientRect();while((rect.width>viewWidth)&&(fontSize>minFontSize)){fontSize=Math.max(fontSize-kFontStep,minFontSize);fakeView.style.fontSize=fontSize+'px';rect=fakeView.getBoundingClientRect();}
if((rect.width<viewWidth)&&(fontSize<initialFontSize)){fakeView.style.fontSize=(fontSize+kFontStep)+'px';rect=fakeView.getBoundingClientRect();if(rect.width<=viewWidth){fontSize+=kFontStep;}}
return fontSize;},_lastPressedKey:null,_dtmfTone:null,_playDtmfTone:function kh_playDtmfTone(key){var serviceId=0;if(!this._onCall){return;}
if(telephony.active){serviceId=telephony.active.serviceId;}
if(this._dtmfTone){this._dtmfTone.stop();this._dtmfTone=null;}
this._dtmfTone=new DtmfTone(key,this._shortTone,serviceId);this._dtmfTone.play();},_stopDtmfTone:function kh_stopDtmfTone(){if(!this._dtmfTone){return;}
this._dtmfTone.stop();this._dtmfTone=null;},_touchStart:function kh_touchStart(key){this._longPress=false;this._lastPressedKey=key;if(key!='delete'){if(this._keypadSoundIsEnabled){TonePlayer.start(gTonesFrequencies[key],!this._onCall||this._shortTone);}
if(this._vibrationEnabled){navigator.vibrate(this.kVibrationDuration);}
this._playDtmfTone(key);}
if((key=='0'&&!this._onCall)||key=='delete'){this._holdTimer=setTimeout(function(self){self.restoreCaretPosition();if(key=='delete'){self._clearPhoneNumber();}else if(key==='0'){self._replaceLastKey('+');}else if(key==='*'){var isAtTheEnd=self._insertPosition===null;var isFirst=self._insertPosition===1||(isAtTheEnd&&self._phoneNumber.length===1);if(!isFirst){self._replaceLastKey(',');}else{self._deleteAtInsertPosition();}}
self._longPress=true;self._updatePhoneNumberView();},400,this);}
if(key=='delete'){this._deleteAtInsertPosition();}else if(this.phoneNumberViewContainer.classList.contains('keypad-visible')){if(!this._isKeypadClicked){this._isKeypadClicked=true;this._phoneNumber=key;}else{this._insertAtCaret(key);}}else{this._insertAtCaret(key);}
setTimeout(function(self){self._updatePhoneNumberView();},0,this);},_touchMove:function kh_touchMove(touch){var target=document.elementFromPoint(touch.pageX,touch.pageY);var key=target.dataset?target.dataset.value:null;if(key!==this._lastPressedKey||key==='delete'){this._stopDtmfTone();this._lastPressedKey=null;}},_touchEnd:function kh_touchEnd(key){this._lastPressedKey=null;if(key!=='delete'){this._stopDtmfTone();}
if(this._keypadSoundIsEnabled){TonePlayer.stop();}
this.restoreCaretPosition();if(this._longPress){this._longPress=false;this._holdTimer=null;this.restoreCaretPosition();return;}
if(this._holdTimer){clearTimeout(this._holdTimer);}},keyHandler:function kh_keyHandler(event){event.preventDefault();var key=event.target.dataset.value;if(!key){return;}
event.stopPropagation();switch(event.type){case'touchstart':if(this._lastPressedKey){return;}
event.target.classList.add('active');this._touchStart(key);break;case'touchmove':this._touchMove(event.touches[0]);break;case'touchend':case'touchcancel':if(key!==this._lastPressedKey){return;}
event.target.classList.remove('active');this._touchEnd(key);break;}},updatePhoneNumber:function kh_updatePhoneNumber(number){this._phoneNumber=number;this._updatePhoneNumberView();},_updatePhoneNumberView:function kh_updatePhoneNumberview(){var phoneNumber=this._phoneNumber;var visibility=(phoneNumber.length>0)?'visible':'hidden';this.deleteButton.style.visibility=visibility;this.phoneNumberView.blur();if(this._onCall){var view=window.CallScreen.activeCall.querySelector('.number');view.textContent=phoneNumber;this.formatPhoneNumber('on-call');}else{this.phoneNumberView.value=phoneNumber;this.formatPhoneNumber('dialpad');}},_observePreferences:function kh_observePreferences(){var self=this;LazyLoader.load('/shared/js/settings_listener.js',function(){SettingsListener.observe('phone.ring.keypad',false,function(value){self._keypadSoundIsEnabled=!!value;});SettingsListener.observe('phone.dtmf.type','long',function(value){self._shortTone=(value==='short');});SettingsListener.observe('keyboard.vibration',false,function(value){self._vibrationEnabled=!!value;});});},_updateInsertPosition:function kh_updateInsertPosition(){this._insertPosition=this._realStartPosition();},_deleteAtInsertPosition:function kh_deleteAtInsertPosition(){if(this._insertPosition===null){this._phoneNumber=this._phoneNumber.slice(0,-1);}else{var start=this._realStartPosition();var end=this._realEndPosition();if(start>0&&start===end){start=end-1;}
this._phoneNumber=this._phoneNumber.substring(0,start)+
this._phoneNumber.substring(end);this._insertPosition=this._phoneNumber?start:null;}},_clearPhoneNumber:function kh_clearPhoneNumber(){if(this._insertPosition===null){this._phoneNumber='';}else{var start=this._realStartPosition();this._phoneNumber=this._phoneNumber.substring(start);this._insertPosition=this._phoneNumber?0:null;}},restoreCaretPosition:function kh_restoreCaretPosition(){if(this._insertPosition!==null){var caretPosition=this._caretPosition(this._insertPosition);this.phoneNumberView.selectionStart=caretPosition;this.phoneNumberView.selectionEnd=caretPosition;this.phoneNumberView.focus();}else{this.phoneNumberView.blur();}},_realStartPosition:function kh_realStartPosition(){var start=this.phoneNumberView.selectionStart;return this._realPosition(this.phoneNumberView,start);},_realEndPosition:function kh_realEndPosition(){var end=this.phoneNumberView.selectionEnd;return this._realPosition(this.phoneNumberView,end);},_caretPosition:function kh_caretPosition(realPosition){return realPosition-this._ellipsisOffset(this.phoneNumberView);},_realPosition:function kh_realPosition(input,position){return position+this._ellipsisOffset(this.phoneNumberView);},_ellipsisOffset:function kh_ellipsisOffset(input){var ellipsedCharacters=+input.dataset.ellipsedCharacters;return ellipsedCharacters?(ellipsedCharacters-1):0;},_replaceLastKey:function kh_replaceLastKey(newKey){this._deleteAtInsertPosition();this.restoreCaretPosition();this._insertAtCaret(newKey);},_insertAtCaret:function kh_insertAtCaret(key){if(this._insertPosition===null){this._phoneNumber+=key;}else{var start=this._realStartPosition();var end=this._realEndPosition();this._phoneNumber=this._phoneNumber.substring(0,start)+key+
this._phoneNumber.substring(end);this._insertPosition=start+1;}}};navigator.mozL10n&&navigator.mozL10n.once(function onL10nInit(){document.body.classList.remove('hidden');});;'use strict';var CallHandler={_telephony:window.navigator.mozTelephony,call:function(number){var sanitizedNumber=number.replace(/-/g,''),self=this;if(ICEContacts.isFromICEContact(number)){LazyLoader.load(['/shared/js/sim_settings_helper.js'],function(){SimSettingsHelper.getCardIndexFrom('outgoingCall',function(defaultCardIndex){if(defaultCardIndex===SimSettingsHelper.ALWAYS_ASK_OPTION_VALUE){LazyLoader.load(['/shared/js/component_utils.js','/shared/elements/gaia_sim_picker/script.js'],function(){var simPicker=document.getElementById('sim-picker');simPicker.getOrPick(defaultCardIndex,number,function(ci){var callPromise=self._telephony.dial(number,ci);self._handleCallPromise(callPromise,sanitizedNumber);});});}else{var callPromise=self._telephony.dial(number,defaultCardIndex);self._handleCallPromise(callPromise,sanitizedNumber);}});});}else{var callPromise=self._telephony.dialEmergency(sanitizedNumber);self._handleCallPromise(callPromise,sanitizedNumber);}},_handleCallPromise:function(callPromise,sanitizedNumber){var self=this;callPromise.then(function(call){self._installHandlers(call,sanitizedNumber);}).catch(function(errorName){LazyLoader.load(['/shared/js/dialer/telephony_messages.js'],function(){TelephonyMessages.handleError(errorName,sanitizedNumber,TelephonyMessages.EMERGENCY_ONLY);});});},_installHandlers:function(call,number){function clearPhoneView(){KeypadManager.updatePhoneNumber('');}
if(call){call.onconnected=clearPhoneView;call.ondisconnected=function callEnded(evt){LazyLoader.load(['/shared/js/dialer/telephony_messages.js'],function(){TelephonyMessages.handleDisconnect(evt.call.disconnectedReason,number,TelephonyMessages.EMERGENCY_ONLY);});clearPhoneView();};}},};window.CallHandler=CallHandler;window.addEventListener('load',function onload(){if(navigator.mozAudioChannelManager){navigator.mozAudioChannelManager.volumeControlChannel='notification';}
window.removeEventListener('load',onload);window.ICEContacts.updateICEContacts();window.KeypadManager.init(false);});;window.COMPONENTS_BASE_URL='/shared/elements/';

View file

@ -0,0 +1,177 @@
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
<meta charset="utf-8">
<meta name="theme-group" content="theme-communications">
<meta name="theme-color" content="var(--header-background)">
<title>Emergency Call Dialer</title>
<!-- Localization -->
<meta name="defaultLanguage" content="en-US">
<meta name="availableLanguages" content="ar:201601260729, bg:201601260729, bn-BD:201601260729, ca:201601260729, cs:201601260729, da:201601260729, de:201601260729, el:201601260729, en-US:201601260729, es:201601260729, eu:201601260729, fr:201601260729, gl:201601260729, hr:201601260729, hu:201601260729, it:201601260729, ja:201601260729, km:201601260729, ko:201601260729, lt:201601260729, mk:201601260729, ms:201601260729, ne-NP:201601260729, nl:201601260729, pa:201601260729, pl:201601260729, pt-BR:201601260729, ro:201601260729, ru:201601260729, sk:201601260729, sq:201601260729, sr-Cyrl:201601260729, sr-Latn:201601260729, sv-SE:201601260729, tr:201601260729, zh-CN:201601260729, zh-TW:201601260729">
<link rel="localization" href="/locales-obj/index.{locale}.json">
<!-- CSS -->
<link rel="stylesheet" type="text/css" href="/shared/style/animations.css">
<link rel="stylesheet" type="text/css" href="/shared/style/dialer/dialer.css">
<link rel="stylesheet" type="text/css" href="/shared/style/dialer/keypad.css">
<link rel="stylesheet" type="text/css" href="/shared/style/action_menu.css">
<link rel="stylesheet" type="text/css" href="/shared/style/contacts/contact_in_overlay.css">
<link rel="stylesheet" type="text/css" href="/shared/style/dialer/overlay.css">
<link rel="stylesheet" type="text/css" href="style/ice_contacts.css">
<link rel="stylesheet" type="text/css" href="app://theme.gaiamobile.org/shared/elements/gaia-theme/gaia-theme.css">
<link rel="stylesheet" type="text/css" href="/shared/elements/gaia-icons/gaia-icons.css">
<!-- JS -->
<!-- <script defer="" type="application/javascript" src="/shared/js/contacts/utilities/ice_store.js"></script> -->
<!-- <script defer="" type="application/javascript" src="/shared/js/dialer/utils.js"></script> -->
<!-- <script defer="" type="application/javascript" src="/shared/js/dialer/dtmf_tone.js"></script> -->
<!-- <script defer="" type="application/javascript" src="/shared/js/dialer/tone_player.js"></script> -->
<!-- <script defer="" type="application/javascript" src="/shared/js/l10n.js"></script> -->
<!-- <script defer="" type="application/javascript" src="/shared/js/lazy_loader.js"></script> -->
<!-- <script defer="" type="application/javascript" src="/shared/js/settings_listener.js"></script> -->
<!-- <script defer="" type="application/javascript" src="js/ice_contacts.js"></script> -->
<!-- <script defer="" type="application/javascript" src="js/keypad.js"></script> -->
<!-- <script defer="" type="application/javascript" src="js/dialer.js"></script> -->
<!-- <script defer="" src="/shared/elements/config.js"></script> --><script src="./gaia_build_defer_index.js" defer="" type="text/javascript"></script>
<!-- Lazy load all the things:
<link rel="stylesheet" type="text/css" href="/shared/style/confirm.css">
<link rel="stylesheet" type="text/css" href="/shared/elements/gaia_menu/style.css">
<link rel="stylesheet" type="text/css" href="/shared/elements/gaia_sim_picker/style.css">
<script defer src="/shared/js/confirm.js"></script>
<script defer src="/shared/js/sim_settings_helper.js"></script>
<script defer src="/shared/js/dialer/telephony_messages.js"></script>
<script defer src="/shared/js/component_utils.js"></script>
<script defer src="/shared/elements/gaia_sim_picker/script.js"></script>
<script defer src="/shared/elements/gaia_menu/script.js"></script>
-->
<meta content="2.5" name="appVersion"></head>
<body class="skin-comms theme-communications">
<article id="views" class="full-height">
<section id="keyboard-view" class="full-height">
<div id="phone-number-view-container" dir="ltr">
<div class="phone-number-view-wrapper-input">
<input aria-label="Phone number" id="phone-number-view" class="phone-number-font font-light textfield" readonly="readonly" data-l10n-id="phoneNumberInput" type="text">
<div id="fake-phone-number-view"></div>
</div>
<button aria-label="Delete" role="key" id="keypad-delete" class="reset-button" data-value="delete" data-l10n-id="keypadDelete">
</button>
</div>
<section id="ice-contacts-bar" class="ice-contacts-bar" data-l10n-id="ice-contacts-bar-text" hidden="">ICE Contacts - In Case of Emergency</section>
<article id="keyboard-container" dir="ltr">
<section id="keypad">
<div class="keypad-row">
<div class="keypad-key" role="key" data-value="1">
<span>1</span>
<em class="keypad-subicon"></em>
</div>
<div class="keypad-key" role="key" data-value="2">
<span>2</span>
<em>ABC</em>
</div>
<div class="keypad-key" role="key" data-value="3">
<span>3</span>
<em>DEF</em>
</div>
</div>
<div class="keypad-row">
<div class="keypad-key" role="key" data-value="4">
<span>4</span>
<em>GHI</em>
</div>
<div class="keypad-key" role="key" data-value="5">
<span>5</span>
<em>JKL</em>
</div>
<div class="keypad-key" role="key" data-value="6">
<span>6</span>
<em>MNO</em>
</div>
</div>
<div class="keypad-row">
<div class="keypad-key" role="key" data-value="7">
<span>7</span>
<em>PQRS</em>
</div>
<div class="keypad-key" role="key" data-value="8">
<span>8</span>
<em>TUV</em>
</div>
<div class="keypad-key" role="key" data-value="9">
<span>9</span>
<em>WXYZ</em>
</div>
</div>
<div class="keypad-row">
<div aria-label="Asterisk" class="keypad-key" role="key" data-value="*" data-l10n-id="asterisk">
<div class="asterisk">*</div>
</div>
<div class="keypad-key" role="key" data-value="0">
<span>0</span>
<em class="font-size-plus">+</em>
</div>
<div aria-label="Hash sign" class="keypad-key" role="key" data-type="dial" data-value="#" data-l10n-id="hashSign">
<div class="sharp">#</div>
</div>
</div>
</section>
<section id="keypad-callbar">
<span role="button" id="keypad-callbar-cancel" class="keypad-callbar-button cancel" data-type="action" data-value="cancel">
<div data-l10n-id="keypadCancel">Cancel</div>
</span>
<span role="button" id="keypad-callbar-call-action" data-type="action" data-value="make-call">
<div>
</div>
</span>
</section>
</article>
</section>
</article>
<form id="contact-list-overlay" role="dialog" data-type="action" class="overlay"><!--
<header></header>
<menu id="contact-list">
<button id="contact-list-overlay-cancel" data-l10n-id="cancel">Cancel</button>
</menu>
--></form>
<button id="contact-in-overlay" class="contact-item ci--action-menu" hidden=""><!--
<div class="js-name ci__name ellipsis" dir="auto"></div>
<div class="ci__details">
<span class="js-tel-type ci__tel-type ellipsis" dir="auto"></span>
<span class="js-separator"></span>
<span class="js-tel ellipsis" dir="ltr"></span>
</div>
--></button>
<form id="confirmation-message" class="hide no-opacity" role="dialog" data-type="confirm"><!--
<section>
<h1>Confirmation title</h1>
<p>Confirmation message</p>
</section>
<menu>
<button>Action 1</button>
<button>Action 2</button>
</menu>
--></form>
<gaia-sim-picker id="sim-picker" tabindex="-1"></gaia-sim-picker>
</body>
</html>

View file

@ -0,0 +1,3 @@
;'use strict';var CallHandler={_telephony:window.navigator.mozTelephony,call:function(number){var sanitizedNumber=number.replace(/-/g,''),self=this;if(ICEContacts.isFromICEContact(number)){LazyLoader.load(['/shared/js/sim_settings_helper.js'],function(){SimSettingsHelper.getCardIndexFrom('outgoingCall',function(defaultCardIndex){if(defaultCardIndex===SimSettingsHelper.ALWAYS_ASK_OPTION_VALUE){LazyLoader.load(['/shared/js/component_utils.js','/shared/elements/gaia_sim_picker/script.js'],function(){var simPicker=document.getElementById('sim-picker');simPicker.getOrPick(defaultCardIndex,number,function(ci){var callPromise=self._telephony.dial(number,ci);self._handleCallPromise(callPromise,sanitizedNumber);});});}else{var callPromise=self._telephony.dial(number,defaultCardIndex);self._handleCallPromise(callPromise,sanitizedNumber);}});});}else{var callPromise=self._telephony.dialEmergency(sanitizedNumber);self._handleCallPromise(callPromise,sanitizedNumber);}},_handleCallPromise:function(callPromise,sanitizedNumber){var self=this;callPromise.then(function(call){self._installHandlers(call,sanitizedNumber);}).catch(function(errorName){LazyLoader.load(['/shared/js/dialer/telephony_messages.js'],function(){TelephonyMessages.handleError(errorName,sanitizedNumber,TelephonyMessages.EMERGENCY_ONLY);});});},_installHandlers:function(call,number){function clearPhoneView(){KeypadManager.updatePhoneNumber('');}
if(call){call.onconnected=clearPhoneView;call.ondisconnected=function callEnded(evt){LazyLoader.load(['/shared/js/dialer/telephony_messages.js'],function(){TelephonyMessages.handleDisconnect(evt.call.disconnectedReason,number,TelephonyMessages.EMERGENCY_ONLY);});clearPhoneView();};}},};window.CallHandler=CallHandler;window.addEventListener('load',function onload(){if(navigator.mozAudioChannelManager){navigator.mozAudioChannelManager.volumeControlChannel='notification';}
window.removeEventListener('load',onload);window.ICEContacts.updateICEContacts();window.KeypadManager.init(false);});

View file

@ -0,0 +1,13 @@
;'use strict';(function(exports){var iceContactsDetails=[],iceContactsBar,contactListOverlay,contactInOverlay,contactList,contactListCancel;function init(){if(ICEContacts._initialized){return;}
iceContactsBar=document.getElementById('ice-contacts-bar');contactListOverlay=document.getElementById('contact-list-overlay');contactInOverlay=document.getElementById('contact-in-overlay');LazyLoader.load([contactListOverlay],function(){var contactListOverlayHeader=contactListOverlay.querySelector('header');contactListOverlayHeader.dataset.l10nId='ice-contacts-overlay-title';contactList=document.getElementById('contact-list');contactListCancel=document.getElementById('contact-list-overlay-cancel');iceContactsBar.addEventListener('click',showICEContactOverlay);contactListCancel.addEventListener('click',hideICEContactOverlay);ICEContacts._initialized=true;});}
function showICEContactsBar(){iceContactsBar.removeAttribute('hidden');}
function showICEContactOverlay(){contactListOverlay.classList.add('display');}
function hideICEContactOverlay(){contactListOverlay.classList.remove('display');}
function callICEContact(number){hideICEContactOverlay();CallHandler.call(number);}
function findContact(iceContact){return new Promise(function(resolve){var contactFilter={filterBy:['id'],filterValue:iceContact,filterOp:'equals',filterLimit:1};var contactRequest=navigator.mozContacts.find(contactFilter);contactRequest.onsuccess=function(){var contact=this.result[0];if(contact&&contact.tel){iceContactsDetails.push(contact);}
resolve(contact);};});}
function addContactToOverlay(contact){return new Promise(function(resolve){if(!contact||!contact.tel){resolve();return;}
contact.tel.forEach(function(tel){var iceContactOverlayEntry=contactInOverlay.cloneNode(true);iceContactOverlayEntry.removeAttribute('id');iceContactOverlayEntry.removeAttribute('hidden');iceContactOverlayEntry.querySelector('.js-name').textContent=contact.name[0];iceContactOverlayEntry.querySelector('.js-tel-type').dataset.l10nId=tel.type[0];iceContactOverlayEntry.querySelector('.js-tel').textContent=tel.value;contactList.insertBefore(iceContactOverlayEntry,contactListCancel);iceContactOverlayEntry.addEventListener('click',callICEContact.bind(null,tel.value));showICEContactsBar();});resolve();});}
function updateICEContacts(){init();return new Promise(function(resolve){LazyLoader.load([contactInOverlay],function(){ICEStore.getContacts().then(function(iceContacts){if(!iceContacts||!iceContacts.length){resolve();}else{var promises=[];iceContacts.forEach(function(iceContact){promises.push(findContact(iceContact).then(addContactToOverlay));});Promise.all(promises).then(resolve);}});});});}
function isFromICEContact(number){return iceContactsDetails.some(function(iceContact){return iceContact.tel.some(function(tel){return number==tel.value;});});}
var ICEContacts={_initialized:false,updateICEContacts:updateICEContacts,isFromICEContact:isFromICEContact};exports.ICEContacts=ICEContacts;})(window);

View file

@ -0,0 +1,36 @@
;'use strict';var kFontStep=4;var minFontSize=12;var gTonesFrequencies={'1':[697,1209],'2':[697,1336],'3':[697,1477],'4':[770,1209],'5':[770,1336],'6':[770,1477],'7':[852,1209],'8':[852,1336],'9':[852,1477],'*':[941,1209],'0':[941,1336],'#':[941,1477]};var KeypadManager={_phoneNumber:'',_onCall:false,_keypadSoundIsEnabled:false,_shortTone:false,_vibrationEnabled:false,kVibrationDuration:50,_insertPosition:null,get phoneNumberView(){delete this.phoneNumberView;this.phoneNumberView=document.getElementById('phone-number-view');return this.phoneNumberView;},get fakePhoneNumberView(){delete this.fakePhoneNumberView;this.fakePhoneNumberView=document.getElementById('fake-phone-number-view');return this.fakePhoneNumberView;},get phoneNumberViewContainer(){delete this.phoneNumberViewContainer;this.phoneNumberViewContainer=document.getElementById('phone-number-view-container');return this.phoneNumberViewContainer;},get keypad(){delete this.keypad;this.keypad=document.getElementById('keypad');return this.keypad;},get callBar(){delete this.callBar;this.callBar=document.getElementById('keypad-callbar');return this.callBar;},get hideBar(){delete this.hideBar;this.hideBar=document.getElementById('keypad-hidebar');return this.hideBar;},get callBarAddContact(){delete this.callBarAddContact;this.callBarAddContact=document.getElementById('keypad-callbar-add-contact');return this.callBarAddContact;},get callBarCallAction(){delete this.callBarCallAction;this.callBarCallAction=document.getElementById('keypad-callbar-call-action');return this.callBarCallAction;},get callBarCancelAction(){delete this.callBarCancelAction;this.callBarCancelAction=document.getElementById('keypad-callbar-cancel');return this.callBarCancelAction;},get deleteButton(){delete this.deleteButton;this.deleteButton=document.getElementById('keypad-delete');return this.deleteButton;},get hideBarHangUpAction(){delete this.hideBarHangUpAction;this.hideBarHangUpAction=document.getElementById('keypad-hidebar-hang-up-action-wrapper');return this.hideBarHangUpAction;},get hideBarHideAction(){delete this.hideBarHideAction;this.hideBarHideAction=document.getElementById('keypad-hidebar-hide-keypad-action');return this.hideBarHangAction;},init:function kh_init(oncall){this._onCall=!!oncall;this._lastPressedKey=null;var defaultFontSize=window.getComputedStyle(document.body,null).getPropertyValue('font-size');minFontSize=parseInt(parseInt(defaultFontSize)*10*0.226);this.phoneNumberView.value='';this.phoneNumberView.addEventListener('click',this._updateInsertPosition.bind(this));this._phoneNumber='';var keyHandler=this.keyHandler.bind(this);this.keypad.addEventListener('touchstart',keyHandler,true);this.keypad.addEventListener('touchmove',keyHandler,true);this.keypad.addEventListener('touchend',keyHandler,true);this.keypad.addEventListener('touchcancel',keyHandler,true);this.deleteButton.addEventListener('touchstart',keyHandler);this.deleteButton.addEventListener('touchend',keyHandler);if(this.callBarAddContact){this.callBarAddContact.addEventListener('mouseup',this.addContact.bind(this));}
if(this.callBarCallAction){this.callBarCallAction.addEventListener('mouseup',this.makeCall.bind(this));}
if(this.callBarCancelAction){this.callBarCancelAction.addEventListener('mouseup',function(){window.close();});}
if(this.hideBarHideAction){this.hideBarHideAction.addEventListener('mouseup',this.callbarBackAction);}
if(this.hideBarHangUpAction){this.hideBarHangUpAction.addEventListener('mouseup',this.hangUpCallFromKeypad);}
TonePlayer.init('system');this.render();this._observePreferences();},render:function hk_render(layoutType){if(layoutType=='oncall'){this._onCall=true;var numberNode=window.CallScreen.activeCall.querySelector('.number');this._phoneNumber=numberNode.textContent;this._isKeypadClicked=false;this.phoneNumberViewContainer.classList.add('keypad-visible');if(this.callBar){this.callBar.classList.add('hide');}
if(this.hideBar){this.hideBar.classList.remove('hide');}
this.deleteButton.classList.add('hide');}else{this.phoneNumberViewContainer.classList.remove('keypad-visible');if(this.callBar){this.callBar.classList.remove('hide');}
if(this.hideBar){this.hideBar.classList.add('hide');}
this.deleteButton.classList.remove('hide');}},phoneNumber:function hk_phoneNumber(){return this._phoneNumber;},makeCall:function hk_makeCall(event){event.stopPropagation();if(this._phoneNumber!==''){window.CallHandler.call(KeypadManager._phoneNumber);}},addContact:function hk_addContact(event){var number=this._phoneNumber;if(!number){return;}
try{var activity=new window.MozActivity({name:'new',data:{type:'webcontacts/contact',params:{'tel':number}}});activity.onsuccess=function(){};activity.onerror=function(){};}catch(e){console.log('WebActivities unavailable? : '+e);}},callbarBackAction:function hk_callbarBackAction(event){window.CallScreen.hideKeypad();},hangUpCallFromKeypad:function hk_hangUpCallFromKeypad(event){window.CallScreen.views.classList.remove('show');window.OnCallHandler.end();},formatPhoneNumber:function kh_formatPhoneNumber(mode){var fakeView=null,view=null;switch(mode){case'dialpad':fakeView=this.fakePhoneNumberView;view=this.phoneNumberView;if(view.value===''){view.style.fontSize=view.dataset.size;return;}
break;case'on-call':fakeView=window.CallScreen.activeCall.querySelector('.fake-number');view=window.CallScreen.activeCall.querySelector('.number');break;}
var computedStyle=window.getComputedStyle(view,null);var currentFontSize=computedStyle.getPropertyValue('font-size');if(!('size'in view.dataset)){view.dataset.size=currentFontSize;}
var newFontSize=this.getNextFontSize(view,fakeView,parseInt(view.dataset.size),parseInt(currentFontSize));view.style.fontSize=newFontSize+'px';this.addEllipsis(view,fakeView,newFontSize);},addEllipsis:function kh_addEllipsis(view,fakeView,currentFontSize){var viewWidth=view.getBoundingClientRect().width;fakeView.style.fontSize=currentFontSize+'px';fakeView.textContent=view.value;var counter=1;var value=view.value;var newPhoneNumber;while(fakeView.getBoundingClientRect().width>viewWidth){newPhoneNumber='\u2026'+value.substr(-value.length+counter);fakeView.textContent=newPhoneNumber;counter++;}
if(newPhoneNumber){view.value=newPhoneNumber;}},getNextFontSize:function kh_getNextFontSize(view,fakeView,fontSize,initialFontSize){var viewWidth=view.getBoundingClientRect().width;fakeView.style.fontSize=fontSize+'px';fakeView.textContent=view.value;var rect=fakeView.getBoundingClientRect();while((rect.width>viewWidth)&&(fontSize>minFontSize)){fontSize=Math.max(fontSize-kFontStep,minFontSize);fakeView.style.fontSize=fontSize+'px';rect=fakeView.getBoundingClientRect();}
if((rect.width<viewWidth)&&(fontSize<initialFontSize)){fakeView.style.fontSize=(fontSize+kFontStep)+'px';rect=fakeView.getBoundingClientRect();if(rect.width<=viewWidth){fontSize+=kFontStep;}}
return fontSize;},_lastPressedKey:null,_dtmfTone:null,_playDtmfTone:function kh_playDtmfTone(key){var serviceId=0;if(!this._onCall){return;}
if(telephony.active){serviceId=telephony.active.serviceId;}
if(this._dtmfTone){this._dtmfTone.stop();this._dtmfTone=null;}
this._dtmfTone=new DtmfTone(key,this._shortTone,serviceId);this._dtmfTone.play();},_stopDtmfTone:function kh_stopDtmfTone(){if(!this._dtmfTone){return;}
this._dtmfTone.stop();this._dtmfTone=null;},_touchStart:function kh_touchStart(key){this._longPress=false;this._lastPressedKey=key;if(key!='delete'){if(this._keypadSoundIsEnabled){TonePlayer.start(gTonesFrequencies[key],!this._onCall||this._shortTone);}
if(this._vibrationEnabled){navigator.vibrate(this.kVibrationDuration);}
this._playDtmfTone(key);}
if((key=='0'&&!this._onCall)||key=='delete'){this._holdTimer=setTimeout(function(self){self.restoreCaretPosition();if(key=='delete'){self._clearPhoneNumber();}else if(key==='0'){self._replaceLastKey('+');}else if(key==='*'){var isAtTheEnd=self._insertPosition===null;var isFirst=self._insertPosition===1||(isAtTheEnd&&self._phoneNumber.length===1);if(!isFirst){self._replaceLastKey(',');}else{self._deleteAtInsertPosition();}}
self._longPress=true;self._updatePhoneNumberView();},400,this);}
if(key=='delete'){this._deleteAtInsertPosition();}else if(this.phoneNumberViewContainer.classList.contains('keypad-visible')){if(!this._isKeypadClicked){this._isKeypadClicked=true;this._phoneNumber=key;}else{this._insertAtCaret(key);}}else{this._insertAtCaret(key);}
setTimeout(function(self){self._updatePhoneNumberView();},0,this);},_touchMove:function kh_touchMove(touch){var target=document.elementFromPoint(touch.pageX,touch.pageY);var key=target.dataset?target.dataset.value:null;if(key!==this._lastPressedKey||key==='delete'){this._stopDtmfTone();this._lastPressedKey=null;}},_touchEnd:function kh_touchEnd(key){this._lastPressedKey=null;if(key!=='delete'){this._stopDtmfTone();}
if(this._keypadSoundIsEnabled){TonePlayer.stop();}
this.restoreCaretPosition();if(this._longPress){this._longPress=false;this._holdTimer=null;this.restoreCaretPosition();return;}
if(this._holdTimer){clearTimeout(this._holdTimer);}},keyHandler:function kh_keyHandler(event){event.preventDefault();var key=event.target.dataset.value;if(!key){return;}
event.stopPropagation();switch(event.type){case'touchstart':if(this._lastPressedKey){return;}
event.target.classList.add('active');this._touchStart(key);break;case'touchmove':this._touchMove(event.touches[0]);break;case'touchend':case'touchcancel':if(key!==this._lastPressedKey){return;}
event.target.classList.remove('active');this._touchEnd(key);break;}},updatePhoneNumber:function kh_updatePhoneNumber(number){this._phoneNumber=number;this._updatePhoneNumberView();},_updatePhoneNumberView:function kh_updatePhoneNumberview(){var phoneNumber=this._phoneNumber;var visibility=(phoneNumber.length>0)?'visible':'hidden';this.deleteButton.style.visibility=visibility;this.phoneNumberView.blur();if(this._onCall){var view=window.CallScreen.activeCall.querySelector('.number');view.textContent=phoneNumber;this.formatPhoneNumber('on-call');}else{this.phoneNumberView.value=phoneNumber;this.formatPhoneNumber('dialpad');}},_observePreferences:function kh_observePreferences(){var self=this;LazyLoader.load('/shared/js/settings_listener.js',function(){SettingsListener.observe('phone.ring.keypad',false,function(value){self._keypadSoundIsEnabled=!!value;});SettingsListener.observe('phone.dtmf.type','long',function(value){self._shortTone=(value==='short');});SettingsListener.observe('keyboard.vibration',false,function(value){self._vibrationEnabled=!!value;});});},_updateInsertPosition:function kh_updateInsertPosition(){this._insertPosition=this._realStartPosition();},_deleteAtInsertPosition:function kh_deleteAtInsertPosition(){if(this._insertPosition===null){this._phoneNumber=this._phoneNumber.slice(0,-1);}else{var start=this._realStartPosition();var end=this._realEndPosition();if(start>0&&start===end){start=end-1;}
this._phoneNumber=this._phoneNumber.substring(0,start)+
this._phoneNumber.substring(end);this._insertPosition=this._phoneNumber?start:null;}},_clearPhoneNumber:function kh_clearPhoneNumber(){if(this._insertPosition===null){this._phoneNumber='';}else{var start=this._realStartPosition();this._phoneNumber=this._phoneNumber.substring(start);this._insertPosition=this._phoneNumber?0:null;}},restoreCaretPosition:function kh_restoreCaretPosition(){if(this._insertPosition!==null){var caretPosition=this._caretPosition(this._insertPosition);this.phoneNumberView.selectionStart=caretPosition;this.phoneNumberView.selectionEnd=caretPosition;this.phoneNumberView.focus();}else{this.phoneNumberView.blur();}},_realStartPosition:function kh_realStartPosition(){var start=this.phoneNumberView.selectionStart;return this._realPosition(this.phoneNumberView,start);},_realEndPosition:function kh_realEndPosition(){var end=this.phoneNumberView.selectionEnd;return this._realPosition(this.phoneNumberView,end);},_caretPosition:function kh_caretPosition(realPosition){return realPosition-this._ellipsisOffset(this.phoneNumberView);},_realPosition:function kh_realPosition(input,position){return position+this._ellipsisOffset(this.phoneNumberView);},_ellipsisOffset:function kh_ellipsisOffset(input){var ellipsedCharacters=+input.dataset.ellipsedCharacters;return ellipsedCharacters?(ellipsedCharacters-1):0;},_replaceLastKey:function kh_replaceLastKey(newKey){this._deleteAtInsertPosition();this.restoreCaretPosition();this._insertAtCaret(newKey);},_insertAtCaret:function kh_insertAtCaret(key){if(this._insertPosition===null){this._phoneNumber+=key;}else{var start=this._realStartPosition();var end=this._realEndPosition();this._phoneNumber=this._phoneNumber.substring(0,start)+key+
this._phoneNumber.substring(end);this._insertPosition=start+1;}}};navigator.mozL10n&&navigator.mozL10n.once(function onL10nInit(){document.body.classList.remove('hidden');});

View file

@ -0,0 +1,18 @@
{
"name": "emergency-call",
"tags": {
"dictionaries": ["jsdoc"]
},
"source": {
"include": ["apps/emergency-call/js/**/*.js"]
},
"plugins": [
"plugins/markdown",
"plugins/summarize"
],
"opts": {
"private": true,
"recurse": true,
"destination": "docs/emergency-call"
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiqueta"},{"$i":"mobile","$v":"Mòbil"},{"$i":"home","$v":"Casa"},{"$i":"work","$v":"Feina"},{"$i":"personal","$v":"Particular"},{"$i":"faxHome","$v":"Fax (casa)"},{"$i":"faxOffice","$v":"Fax (oficina)"},{"$i":"faxOther","$v":"Fax (altre)"},{"$i":"another","$v":"Altres"},{"$i":"other","$v":"Altres"},{"$i":"customTag","placeholder":"Etiqueta personalitzada"},{"$i":"current","$v":"Actual"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Error"},{"$i":"ok","$v":"D'acord"},{"$i":"cancel","$v":"Cancel·la"},{"$i":"emergency-call-only","$v":"Només trucada d'emergència"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," no és cap número d'emergència."]},{"$i":"ice-contacts-bar-text","$v":"Contactes ICE - En cas d'emergència"},{"$i":"ice-contacts-overlay-title","$v":"Contactes ICE"},{"$i":"phoneNumberInput","ariaLabel":"Número de telèfon"},{"$i":"keypadDelete","ariaLabel":"Elimina"},{"$i":"voiceMailKey","ariaLabel":"Bústia de veu"},{"$i":"asterisk","ariaLabel":"Asterisc"},{"$i":"hashSign","ariaLabel":"Símbol de coixinet"},{"$i":"keypadCancel","$v":"Cancel·la"},{"$i":"loadingSimContacts","$v":"S'estan carregant els contactes de la targeta SIM…"},{"$i":"noContactsWereFound","$v":"No s'ha trobat cap contacte"},{"$i":"noContactsFoundDialogOk","$v":"D'acord"},{"$i":"noSimCardToLoadContactsFrom","$v":"No s'ha trobat cap SIM per importar-ne els contactes"},{"$i":"emergencyNumber","$v":"Número d'emergència"},{"$i":"callAirplaneModeMessage","$v":"Per fer una trucada cal que desactiveu el mode d'avió als paràmetres."},{"$i":"callAirplaneModeBtnOk","$v":"D'acord"},{"$i":"callAirplaneModeTitle","$v":"Mode d'avió activat"},{"$i":"numberIsBusyTitle","$v":"Número ocupat"},{"$i":"numberIsBusyMessage","$v":"El número ara està ocupat. Proveu-ho més tard."},{"$i":"fdnIsActiveTitle","$v":"Números prefixats activats"},{"$i":"fdnIsActiveMessage","$v":["La funció FDN (números prefixats) està activada i el següent número no és a la vostra llista FDN: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Per fer una trucada, cal que el telèfon estigui connectat a una xarxa."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"La xarxa no permet fer trucades d'emergència."},{"$i":"emergencyDialogBtnOk","$v":"D'acord"},{"$i":"emergencyDialogTitle","$v":"No hi ha connexió a la xarxa"},{"$i":"invalidNumberToDialTitle","$v":"Número de telèfon no vàlid"},{"$i":"invalidNumberToDialMessage","$v":"El número de telèfon al qual esteu trucant no és vàlid."},{"$i":"unableToCallTitle","$v":"No es pot fer una trucada ara mateix"},{"$i":"unableToCallMessage","$v":"No es pot fer una trucada. Si ja esteu marcant, primer pengeu."},{"$i":"otherConnectionInUseTitle","$v":"Connexió existent en ús"},{"$i":"otherConnectionInUseMessage","$v":"Teniu una trucada activa en una altra connexió. Podeu només utilitzar una connexió alhora."},{"$i":"callBarredByTheOperatorMessage","$v":"L'operador ha blocat la trucada"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mòbil"},{"$i":"phone_type_home","$v":"Casa"},{"$i":"phone_type_work","$v":"Feina"},{"$i":"phone_type_personal","$v":"Particular"},{"$i":"phone_type_fax_home","$v":"Fax (casa)"},{"$i":"phone_type_fax_office","$v":"Fax (oficina)"},{"$i":"phone_type_fax_other","$v":"Fax (altre)"},{"$i":"phone_type_other","$v":"Altres"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mòbil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Feina, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Particular, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax (casa), ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax (oficina), ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax (altre), ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Altres, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancel·la"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Marca ",{"t":"idOrVar","v":"phoneNumber"}," amb"]},{"$i":"gaia-sim-picker-select-sim","$v":"Trieu la SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(per defecte)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Označení"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Domů"},{"$i":"work","$v":"Práce"},{"$i":"personal","$v":"Osobní"},{"$i":"faxHome","$v":"Fax domů"},{"$i":"faxOffice","$v":"Fax práce"},{"$i":"faxOther","$v":"Fax ostatní"},{"$i":"another","$v":"Další"},{"$i":"other","$v":"Ostatní"},{"$i":"customTag","placeholder":"Vlastní značka"},{"$i":"current","$v":"Aktuální"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Chyba"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Zrušit"},{"$i":"emergency-call-only","$v":"Pouze tísňové volání"},{"$i":"emergency-call-error","$v":["Číslo ",{"t":"idOrVar","v":"number"}," nespadá pod tísňové volání."]},{"$i":"ice-contacts-bar-text","$v":"ICE kontakty - v případě mimořádné okolnosti"},{"$i":"ice-contacts-overlay-title","$v":"ICE kontakty"},{"$i":"phoneNumberInput","ariaLabel":"Telefonní číslo"},{"$i":"keypadDelete","ariaLabel":"Smazat"},{"$i":"voiceMailKey","ariaLabel":"Hlasová schránka"},{"$i":"asterisk","ariaLabel":"Hvězdička"},{"$i":"hashSign","ariaLabel":"Mřížka"},{"$i":"keypadCancel","$v":"Zrušit"},{"$i":"loadingSimContacts","$v":"Načítání kontaktů ze SIM karty..."},{"$i":"noContactsWereFound","$v":"Nebyly nalezeny žádné kontakty"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Žádná SIM karta pro načtení kontaktů"},{"$i":"emergencyNumber","$v":"Tísňové volání"},{"$i":"callAirplaneModeMessage","$v":"Pro uskutečnění hovoru je třeba v nastavení ukončit režim V letadle."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Režim V letadle aktivován"},{"$i":"numberIsBusyTitle","$v":"Číslo je zaneprázdněno"},{"$i":"numberIsBusyMessage","$v":"Číslo je momentálně obsazeno. Zkuste to později."},{"$i":"fdnIsActiveTitle","$v":"FDN aktivní"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) je zapnuto a následující číslo není na vašem seznamu FDN: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Pro uskutečnění hovoru musí být telefon připojen k mobilní síti."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Tísňová volání nejsou v této mobilní síti povolena."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Žádné připojení k síti"},{"$i":"invalidNumberToDialTitle","$v":"Chybné telefonní číslo"},{"$i":"invalidNumberToDialMessage","$v":"Telefonní číslo, které se pokoušíte vytočit, není platné."},{"$i":"unableToCallTitle","$v":"Momentálně nelze uskutečnit telefonní hovor."},{"$i":"unableToCallMessage","$v":"Nelze uskutečnit telefonní hovor. Pokud momentálně vytáčíte jiné číslo, tak ho nejdříve ukončete."},{"$i":"otherConnectionInUseTitle","$v":"Používáno jiné připojení"},{"$i":"otherConnectionInUseMessage","$v":"Momentálně uskutečňujete hovor na jiné síti. Lze používat jen jednu síť současně."},{"$i":"callBarredByTheOperatorMessage","$v":"Hovor byl ukončen operátorem"},{"$i":"connectingEllipsis","$v":"Připojování…"},{"$i":"phone_type_mobile","$v":"Mobil"},{"$i":"phone_type_home","$v":"Domů"},{"$i":"phone_type_work","$v":"Práce"},{"$i":"phone_type_personal","$v":"Osobní"},{"$i":"phone_type_fax_home","$v":"Fax domů"},{"$i":"phone_type_fax_office","$v":"Fax práce"},{"$i":"phone_type_fax_other","$v":"Fax ostatní"},{"$i":"phone_type_other","$v":"Jiné"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Domů, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Práce, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Osobní, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax domů, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax práce, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax ostatní, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Jiné, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Zrušit"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Vytočit ",{"t":"idOrVar","v":"phoneNumber"}," pomocí"]},{"$i":"gaia-sim-picker-select-sim","$v":"Zvolit SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiket"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Hjem"},{"$i":"work","$v":"Arbejde"},{"$i":"personal","$v":"Personlig"},{"$i":"faxHome","$v":"Fax, hjem"},{"$i":"faxOffice","$v":"Fax, kontor"},{"$i":"faxOther","$v":"Fax, anden"},{"$i":"another","$v":"Anden"},{"$i":"other","$v":"Andet"},{"$i":"customTag","placeholder":"Brugerdefineret etiket"},{"$i":"current","$v":"Nuværende"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Fejl"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Annuller"},{"$i":"emergency-call-only","$v":"Kun nødopkald"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," er ikke et nødopkaldsnummer."]},{"$i":"ice-contacts-bar-text","$v":"Kontakter til nødsituation"},{"$i":"ice-contacts-overlay-title","$v":"Kontakter til nødsituation"},{"$i":"phoneNumberInput","ariaLabel":"Telefonnummer"},{"$i":"keypadDelete","ariaLabel":"Slet"},{"$i":"voiceMailKey","ariaLabel":"Telefonbesked"},{"$i":"asterisk","ariaLabel":"Stjerne"},{"$i":"hashSign","ariaLabel":"Firkant"},{"$i":"keypadCancel","$v":"Annuller"},{"$i":"loadingSimContacts","$v":"Henter kontakter fra simkort…"},{"$i":"noContactsWereFound","$v":"Ingen kontakter fundet"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Intet simkort at indlæse kontakter fra"},{"$i":"emergencyNumber","$v":"Nødopkaldsnummer"},{"$i":"callAirplaneModeMessage","$v":"Du skal deaktivere flytilstand i indstillingerne for at kunne foretage et opkald."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Flytilstand er aktiveret"},{"$i":"numberIsBusyTitle","$v":"Nummeret er optaget"},{"$i":"numberIsBusyMessage","$v":"Nummeret er optaget. Prøv igen senere."},{"$i":"fdnIsActiveTitle","$v":"FON er aktiv"},{"$i":"fdnIsActiveMessage","$v":["FON (faste opkaldsnumre) er aktiveret, og det følgende nummer er ikke på din FON-liste: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Telefonen skal være tilsluttet et netværk, for at du kan foretage opkald."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Nødopkald tillades ikke af netværket."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Ingen netværksforbindelse"},{"$i":"invalidNumberToDialTitle","$v":"Ugyldigt telefonnummer"},{"$i":"invalidNumberToDialMessage","$v":"Det angivne telefonnummer er ugyldigt."},{"$i":"unableToCallTitle","$v":"Kan ikke foretage opkald i øjeblikket"},{"$i":"unableToCallMessage","$v":"Kan ikke foretage opkald. Hvis du er i færd med at ringe op, så afbryd først."},{"$i":"otherConnectionInUseTitle","$v":"Anden forbindelse er i brug"},{"$i":"otherConnectionInUseMessage","$v":"Du har et aktivt opkald på en anden forbindelse. Du kan kun bruge én forbindelse ad gangen."},{"$i":"callBarredByTheOperatorMessage","$v":"Opkaldet blev blokeret af operatøren"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobil"},{"$i":"phone_type_home","$v":"Hjem"},{"$i":"phone_type_work","$v":"Arbejde"},{"$i":"phone_type_personal","$v":"Privat"},{"$i":"phone_type_fax_home","$v":"Fax, hjemme"},{"$i":"phone_type_fax_office","$v":"Fax, kontor"},{"$i":"phone_type_fax_other","$v":"Fax, anden"},{"$i":"phone_type_other","$v":"Andet"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Hjem, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Arbejde, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Privat, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax, hjemme, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax, kontor, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax, anden, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Andet, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Annuller"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Ring til ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Vælg simkort"},{"$i":"gaia-sim-picker-button","$v":["Simkort",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(standard)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Kategorie"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Zuhause"},{"$i":"work","$v":"Dienstlich"},{"$i":"personal","$v":"Privat"},{"$i":"faxHome","$v":"Fax Zuhause"},{"$i":"faxOffice","$v":"Fax Dienstlich"},{"$i":"faxOther","$v":"Anderes Fax"},{"$i":"another","$v":"Weitere"},{"$i":"other","$v":"Sonstiges"},{"$i":"customTag","placeholder":"Eigene Kategorie"},{"$i":"current","$v":"Aktuell"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},": ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Fehler"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Abbrechen"},{"$i":"emergency-call-only","$v":"Nur Notrufe"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," ist keine Notrufnummer."]},{"$i":"ice-contacts-bar-text","$v":"Notfallkontakte"},{"$i":"ice-contacts-overlay-title","$v":"Notfallkontakte"},{"$i":"phoneNumberInput","ariaLabel":"Telefonnummer"},{"$i":"keypadDelete","ariaLabel":"Löschen"},{"$i":"voiceMailKey","ariaLabel":"Mailbox"},{"$i":"asterisk","ariaLabel":"Sternsymbol"},{"$i":"hashSign","ariaLabel":"Rautezeichen"},{"$i":"keypadCancel","$v":"Abbrechen"},{"$i":"loadingSimContacts","$v":"Kontakte auf der SIM-Karte werden geladen…"},{"$i":"noContactsWereFound","$v":"Keine Kontakte gefunden"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Keine SIM-Karte zum Importieren von Kontakten"},{"$i":"emergencyNumber","$v":"Notrufnummer"},{"$i":"callAirplaneModeMessage","$v":"Um einen Anruf zu tätigen, müssen Sie den Flugmodus in den Einstellungen deaktivieren."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Flugmodus aktiv"},{"$i":"numberIsBusyTitle","$v":"Nummer ist besetzt"},{"$i":"numberIsBusyMessage","$v":"Die Nummer ist derzeit besetzt. Bitte versuchen Sie es später erneut."},{"$i":"fdnIsActiveTitle","$v":"FDN aktiv"},{"$i":"fdnIsActiveMessage","$v":["Die Einschränkung anrufbarer Nummern ist aktiv und die folgende Nummer befindet sich nicht in Ihrer Freigabe: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Um einen Anruf tätigen zu können, müssen Sie zunächst eine Netzverbindung aufbauen."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Notrufe werden von diesem Netz nicht zugelassen."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Keine Netzverbindung"},{"$i":"invalidNumberToDialTitle","$v":"Ungültige Telefonnummer"},{"$i":"invalidNumberToDialMessage","$v":"Die von Ihnen gewählte Nummer ist keine gültige Telefonnummer."},{"$i":"unableToCallTitle","$v":"Derzeit können keine Telefonanrufe getätigt werden."},{"$i":"unableToCallMessage","$v":"Derzeit können keine Telefonanrufe getätigt werden. Falls Sie bereits wählen, so legen Sie bitte vor dem erneuten Wählen erst noch einmal auf."},{"$i":"otherConnectionInUseTitle","$v":"Andere Verbindung wird verwendet"},{"$i":"otherConnectionInUseMessage","$v":"Auf einer anderen Verbindung läuft derzeit ein Gespräch. Es kann maximal eine Verbindung verwendet werden."},{"$i":"callBarredByTheOperatorMessage","$v":"Anruf wurde durch Mobilfunknetzbetreiber blockiert"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobil"},{"$i":"phone_type_home","$v":"Zuhause"},{"$i":"phone_type_work","$v":"Dienstlich"},{"$i":"phone_type_personal","$v":"Privat"},{"$i":"phone_type_fax_home","$v":"Fax Zuhause"},{"$i":"phone_type_fax_office","$v":"Fax Dienstlich"},{"$i":"phone_type_fax_other","$v":"Anderes Fax"},{"$i":"phone_type_other","$v":"Sonstiges"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Zuhause, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Dienstlich, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Privat, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax Zuhause, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax Dienstlich, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Anderes Fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Sonstiges, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Abbrechen"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":[{"t":"idOrVar","v":"phoneNumber"}," anrufen mit"]},{"$i":"gaia-sim-picker-select-sim","$v":"SIM auswählen"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(Standard)"}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Label"},{"$i":"mobile","$v":"Mobile"},{"$i":"home","$v":"Home"},{"$i":"work","$v":"Work"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Fax home"},{"$i":"faxOffice","$v":"Fax office"},{"$i":"faxOther","$v":"Fax other"},{"$i":"another","$v":"Another"},{"$i":"other","$v":"Other"},{"$i":"customTag","placeholder":"Custom tag"},{"$i":"current","$v":"Current"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Error"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Cancel"},{"$i":"emergency-call-only","$v":"Emergency Call Only"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," is not an emergency number."]},{"$i":"ice-contacts-bar-text","$v":"ICE Contacts - In Case of Emergency"},{"$i":"ice-contacts-overlay-title","$v":"ICE Contacts"},{"$i":"phoneNumberInput","ariaLabel":"Phone number"},{"$i":"keypadDelete","ariaLabel":"Delete"},{"$i":"voiceMailKey","ariaLabel":"Voicemail"},{"$i":"asterisk","ariaLabel":"Asterisk"},{"$i":"hashSign","ariaLabel":"Hash sign"},{"$i":"keypadCancel","$v":"Cancel"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancel"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiqueta"},{"$i":"mobile","$v":"Móvil"},{"$i":"home","$v":"Casa"},{"$i":"work","$v":"Trabajo"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Fax casa"},{"$i":"faxOffice","$v":"Fax oficina"},{"$i":"faxOther","$v":"Fax otros"},{"$i":"another","$v":"Otro"},{"$i":"other","$v":"Otros"},{"$i":"customTag","placeholder":"Etiqueta personalizada"},{"$i":"current","$v":"Actual"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Error"},{"$i":"ok","$v":"Aceptar"},{"$i":"cancel","$v":"Cancelar"},{"$i":"emergency-call-only","$v":"Sólo llamada de emergencia"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," no es un número de emergencia."]},{"$i":"ice-contacts-bar-text","$v":"Contactos ICE: En caso de emergencia"},{"$i":"ice-contacts-overlay-title","$v":"Contactos ICE"},{"$i":"phoneNumberInput","ariaLabel":"Núm. de teléfono"},{"$i":"keypadDelete","ariaLabel":"Borrar"},{"$i":"voiceMailKey","ariaLabel":"Mensaje de voz"},{"$i":"asterisk","ariaLabel":"Asterisco"},{"$i":"hashSign","ariaLabel":"Símbolo #"},{"$i":"keypadCancel","$v":"Cancelar"},{"$i":"loadingSimContacts","$v":"Cargando contactos de tarjeta SIM..."},{"$i":"noContactsWereFound","$v":"No se encontró ningún contacto"},{"$i":"noContactsFoundDialogOk","$v":"Aceptar"},{"$i":"noSimCardToLoadContactsFrom","$v":"Ninguna SIM desde la que cargar contactos"},{"$i":"emergencyNumber","$v":"Número de emergencia"},{"$i":"callAirplaneModeMessage","$v":"Para hacer una llamada, es necesario desactivar el modo avión en ajustes."},{"$i":"callAirplaneModeBtnOk","$v":"Aceptar"},{"$i":"callAirplaneModeTitle","$v":"Modo avión activado"},{"$i":"numberIsBusyTitle","$v":"El número está ocupado"},{"$i":"numberIsBusyMessage","$v":"El número está ocupado en este momento. Inténtelo más tarde."},{"$i":"fdnIsActiveTitle","$v":"NMF activo"},{"$i":"fdnIsActiveMessage","$v":["NMF (números de marcación fija) está activado y el siguiente número no está en la lista: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Para hacer una llamada, el teléfono debe estar conectado a una red."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"La red no permite llamadas de emergencia."},{"$i":"emergencyDialogBtnOk","$v":"Aceptar"},{"$i":"emergencyDialogTitle","$v":"Sin conexión de red"},{"$i":"invalidNumberToDialTitle","$v":"Núm. de teléfono no válido"},{"$i":"invalidNumberToDialMessage","$v":"El número al que llama no es válido."},{"$i":"unableToCallTitle","$v":"Imposible hacer una llamada ahora"},{"$i":"unableToCallMessage","$v":"No puede hacerse ninguna llamada. Si está marcando un número, cuelgue primero."},{"$i":"otherConnectionInUseTitle","$v":"Otra conexión en uso"},{"$i":"otherConnectionInUseMessage","$v":"Tiene una llamada activa en otra conexión. Sólo puede usarse una conexión a la vez."},{"$i":"callBarredByTheOperatorMessage","$v":"La llamada fue bloqueada por el operador"},{"$i":"connectingEllipsis","$v":"Conectando…"},{"$i":"phone_type_mobile","$v":"Móvil"},{"$i":"phone_type_home","$v":"Casa"},{"$i":"phone_type_work","$v":"Trabajo"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax casa"},{"$i":"phone_type_fax_office","$v":"Fax oficina"},{"$i":"phone_type_fax_other","$v":"Fax otros"},{"$i":"phone_type_other","$v":"Otro"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Móvil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Trabajo, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax oficina, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Otro fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Otro, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancelar"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Marcar ",{"t":"idOrVar","v":"phoneNumber"}," vía"]},{"$i":"gaia-sim-picker-select-sim","$v":"Seleccionar SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(predet.)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiketa"},{"$i":"mobile","$v":"Mugikorra"},{"$i":"home","$v":"Etxea"},{"$i":"work","$v":"Lana"},{"$i":"personal","$v":"Pertsonala"},{"$i":"faxHome","$v":"Etxeko faxa"},{"$i":"faxOffice","$v":"Bulegoko faxa"},{"$i":"faxOther","$v":"Beste fax bat"},{"$i":"another","$v":"Beste bat"},{"$i":"other","$v":"Beste bat"},{"$i":"customTag","placeholder":"Etiketa pertsonalizatua"},{"$i":"current","$v":"Unekoa"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Errorea"},{"$i":"ok","$v":"Ados"},{"$i":"cancel","$v":"Utzi"},{"$i":"emergency-call-only","$v":"Larrialdi-deia soilik"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," ez da larrialdi-zenbakia."]},{"$i":"ice-contacts-bar-text","$v":"Larrialdi-kontaktuak"},{"$i":"ice-contacts-overlay-title","$v":"Larrialdi-kontaktuak "},{"$i":"phoneNumberInput","ariaLabel":"Telefono-zenbakia"},{"$i":"keypadDelete","ariaLabel":"Ezabatu"},{"$i":"voiceMailKey","ariaLabel":"Ahots-posta"},{"$i":"asterisk","ariaLabel":"Izartxoa"},{"$i":"hashSign","ariaLabel":"Traola"},{"$i":"keypadCancel","$v":"Utzi"},{"$i":"loadingSimContacts","$v":"Kargatzen SIM txarteleko kontaktuak..."},{"$i":"noContactsWereFound","$v":"Ez da kontakturik aurkitu"},{"$i":"noContactsFoundDialogOk","$v":"Ados"},{"$i":"noSimCardToLoadContactsFrom","$v":"Kontaktuak kargatzeko SIM txartelik ez"},{"$i":"emergencyNumber","$v":"Larrialdi-zenbakia"},{"$i":"callAirplaneModeMessage","$v":"Dei bat egiteko, hegazkin modua desgaitu behar duzu ezarpenetan."},{"$i":"callAirplaneModeBtnOk","$v":"Ados"},{"$i":"callAirplaneModeTitle","$v":"Hegazkin modua aktibatuta"},{"$i":"numberIsBusyTitle","$v":"Zenbakia okupatuta dago"},{"$i":"numberIsBusyMessage","$v":"Zenbakia okupatuta dago. Saiatu berriro geroago."},{"$i":"fdnIsActiveTitle","$v":"FDN aktibo"},{"$i":"fdnIsActiveMessage","$v":["FDN (markatze-zenbaki finkoak) aktibatuta dago eta honako zenbakia ez dago zure FDN zerrendan: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Dei bat egiteko, telefonoak sare batekin konektatuta egon behar du."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Sareak ez ditu larrialdi-deiak onartzen."},{"$i":"emergencyDialogBtnOk","$v":"Ados"},{"$i":"emergencyDialogTitle","$v":"Ez dago sareko konexiorik"},{"$i":"invalidNumberToDialTitle","$v":"Telefono-zenbaki baliogabea"},{"$i":"invalidNumberToDialMessage","$v":"Deitzen ari zaren telefono-zenbakia baliogabea da."},{"$i":"unableToCallTitle","$v":"Ezin da telefono-deirik egin orain"},{"$i":"unableToCallMessage","$v":"Ezin da deirik egin. Markatzen ari bazara, eseki lehenengo."},{"$i":"otherConnectionInUseTitle","$v":"Beste konexio bat erabiltzen ari da"},{"$i":"otherConnectionInUseMessage","$v":"Dei aktibo bat duzu beste konexio batean. Konexio bakarra erabil dezakezu aldi berean."},{"$i":"callBarredByTheOperatorMessage","$v":"Operadoreak trabatu du deia"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mugikorra"},{"$i":"phone_type_home","$v":"Etxekoa"},{"$i":"phone_type_work","$v":"Lanekoa"},{"$i":"phone_type_personal","$v":"Pertsonala"},{"$i":"phone_type_fax_home","$v":"Faxa (etxekoa)"},{"$i":"phone_type_fax_office","$v":"Faxa (bulegokoa)"},{"$i":"phone_type_fax_other","$v":"Faxa (bestelakoa)"},{"$i":"phone_type_other","$v":"Bestelakoa"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mugikorra, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Etxekoa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Lanekoa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Pertsonala, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Faxa (etxekoa), ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Faxa (bulegokoa), ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Faxa (bestelakoa), ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Bestelakoa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Utzi"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Markatu ",{"t":"idOrVar","v":"phoneNumber"}," honen bidez:"]},{"$i":"gaia-sim-picker-select-sim","$v":"Hautatu SIMa"},{"$i":"gaia-sim-picker-button","$v":[{"t":"idOrVar","v":"n"},". SIMa"]},{"$i":"gaia-sim-picker-button-default","$v":"(lehenetsia)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Étiquette"},{"$i":"mobile","$v":"Mobile"},{"$i":"home","$v":"Domicile"},{"$i":"work","$v":"Bureau"},{"$i":"personal","$v":"Personnel"},{"$i":"faxHome","$v":"Fax domicile"},{"$i":"faxOffice","$v":"Fax bureau"},{"$i":"faxOther","$v":"Autre fax"},{"$i":"another","$v":"Autre"},{"$i":"other","$v":"Autre"},{"$i":"customTag","placeholder":"Personnalisée"},{"$i":"current","$v":"Actuelle"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Erreur"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Annuler"},{"$i":"emergency-call-only","$v":"Appels d’urgence uniquement"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," n’est pas un numéro d’urgence."]},{"$i":"ice-contacts-bar-text","$v":"Contacts ICE — En cas d’urgence"},{"$i":"ice-contacts-overlay-title","$v":"Contacts ICE"},{"$i":"phoneNumberInput","ariaLabel":"Numéro de téléphone"},{"$i":"keypadDelete","ariaLabel":"Supprimer"},{"$i":"voiceMailKey","ariaLabel":"Messagerie vocale"},{"$i":"asterisk","ariaLabel":"Astérisque"},{"$i":"hashSign","ariaLabel":"Dièse"},{"$i":"keypadCancel","$v":"Annuler"},{"$i":"loadingSimContacts","$v":"Chargement des contacts de la carte SIM…"},{"$i":"noContactsWereFound","$v":"Aucun contact n’a été trouvé"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Aucune carte SIM depuis laquelle charger des contacts"},{"$i":"emergencyNumber","$v":"Numéro d’urgence"},{"$i":"callAirplaneModeMessage","$v":"Afin de passer un appel vous devez désactiver le mode avion dans les paramètres."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Mode avion activé"},{"$i":"numberIsBusyTitle","$v":"Numéro occupé"},{"$i":"numberIsBusyMessage","$v":"Le numéro est actuellement occupé. Veuillez réessayer plus tard."},{"$i":"fdnIsActiveTitle","$v":"Numérotation fixe activée"},{"$i":"fdnIsActiveMessage","$v":["La numérotation fixe (Fixed Dialing Numbers) est activée et le numéro suivant n’est pas présent dans votre liste de numéros autorisés : ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Afin d’appeler, vous devez d’abord avoir une couverture réseau."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Appels d’urgence non autorisés par le réseau."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Pas de réseau"},{"$i":"invalidNumberToDialTitle","$v":"Numéro de téléphone non valide"},{"$i":"invalidNumberToDialMessage","$v":"Le numéro de téléphone que vous essayez de joindre n’est pas valide."},{"$i":"unableToCallTitle","$v":"Impossible de passer un appel maintenant"},{"$i":"unableToCallMessage","$v":"Impossible de passer un appel. Si vous êtes déjà en communication, veuillez d’abord raccrocher."},{"$i":"otherConnectionInUseTitle","$v":"Autre ligne active"},{"$i":"otherConnectionInUseMessage","$v":"Un appel est déjà en cours sur une autre ligne. Vous ne pouvez utiliser qu’une ligne à la fois."},{"$i":"callBarredByTheOperatorMessage","$v":"Appel bloqué par l’opérateur"},{"$i":"connectingEllipsis","$v":"Appel…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Domicile"},{"$i":"phone_type_work","$v":"Bureau"},{"$i":"phone_type_personal","$v":"Personnel"},{"$i":"phone_type_fax_home","$v":"Fax domicile"},{"$i":"phone_type_fax_office","$v":"Fax bureau"},{"$i":"phone_type_fax_other","$v":"Autre fax"},{"$i":"phone_type_other","$v":"Autre"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Domicile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Bureau, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personnel, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax domicile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax bureau, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Autre fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Autre, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Annuler"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Appeler ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Sélectionner la SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM ",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(par défaut)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiqueta"},{"$i":"mobile","$v":"Mobile"},{"$i":"home","$v":"Casa"},{"$i":"work","$v":"Traballo"},{"$i":"personal","$v":"Persoal"},{"$i":"faxHome","$v":"Fax casa"},{"$i":"faxOffice","$v":"Fax oficina"},{"$i":"faxOther","$v":"Outro fax"},{"$i":"another","$v":"Outro"},{"$i":"other","$v":"Outros"},{"$i":"customTag","placeholder":"Personalizar etiqueta"},{"$i":"current","$v":"Actual"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Erro"},{"$i":"ok","$v":"Aceptar"},{"$i":"cancel","$v":"Cancelar"},{"$i":"emergency-call-only","$v":"Só chamadas de emerxencia"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," non é un número de emerxencia."]},{"$i":"ice-contacts-bar-text","$v":"Contactos ICE - En caso de emerxencia"},{"$i":"ice-contacts-overlay-title","$v":"Contactos ICE"},{"$i":"phoneNumberInput","ariaLabel":"Número de teléfono"},{"$i":"keypadDelete","ariaLabel":"Eliminar"},{"$i":"voiceMailKey","ariaLabel":"Mensaxes de voz"},{"$i":"asterisk","ariaLabel":"Asterisco"},{"$i":"hashSign","ariaLabel":"Símbolo #"},{"$i":"keypadCancel","$v":"Cancelar"},{"$i":"loadingSimContacts","$v":"Cargando contactos da tarxeta SIM…"},{"$i":"noContactsWereFound","$v":"Non se atoparon contactos"},{"$i":"noContactsFoundDialogOk","$v":"Aceptar"},{"$i":"noSimCardToLoadContactsFrom","$v":"Ningunha tarxeta SIM dende a que cargar contactos"},{"$i":"emergencyNumber","$v":"Número de emerxencia"},{"$i":"callAirplaneModeMessage","$v":"Para facer unha chamada ten que desactivar o modo avión nos axustes."},{"$i":"callAirplaneModeBtnOk","$v":"Aceptar"},{"$i":"callAirplaneModeTitle","$v":"Activouse o modo avión"},{"$i":"numberIsBusyTitle","$v":"O número está ocupado"},{"$i":"numberIsBusyMessage","$v":"Neste momento o número está ocupado. Tente de novo máis tarde."},{"$i":"fdnIsActiveTitle","$v":"FDN activo"},{"$i":"fdnIsActiveMessage","$v":["FDN (Numeración fixa) está activado e o seguinte número non está na súa lista FDN: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Para facer unha chamada, o teléfono ten que ter rede."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"A rede non permite chamadas de emerxencia."},{"$i":"emergencyDialogBtnOk","$v":"Aceptar"},{"$i":"emergencyDialogTitle","$v":"Sen conexión de rede"},{"$i":"invalidNumberToDialTitle","$v":"Número de teléfono incorrecto"},{"$i":"invalidNumberToDialMessage","$v":"O número de teléfono ao que está chamando é incorrecto."},{"$i":"unableToCallTitle","$v":"Non é posíbel facer chamadas agora"},{"$i":"unableToCallMessage","$v":"Non é posíbel facer unha chamada. Se xa está marcando, primeiro colgue."},{"$i":"otherConnectionInUseTitle","$v":"Outras conexións en uso"},{"$i":"otherConnectionInUseMessage","$v":"Ten unha chamada activa noutra conexión. Só pode usar unha conexión ao mesmo tempo."},{"$i":"callBarredByTheOperatorMessage","$v":"A operadora bloqueou a chamada"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancelar"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Marcar ",{"t":"idOrVar","v":"phoneNumber"}," con"]},{"$i":"gaia-sim-picker-select-sim","$v":"Seleccionar SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(predeterminado)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Label"},{"$i":"mobile","$v":"Mobile"},{"$i":"home","$v":"Home"},{"$i":"work","$v":"Work"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Fax home"},{"$i":"faxOffice","$v":"Fax office"},{"$i":"faxOther","$v":"Fax other"},{"$i":"another","$v":"Another"},{"$i":"other","$v":"Other"},{"$i":"customTag","placeholder":"Custom tag"},{"$i":"current","$v":"Current"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Error"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Cancel"},{"$i":"emergency-call-only","$v":"Emergency Call Only"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," is not an emergency number."]},{"$i":"ice-contacts-bar-text","$v":"ICE Contacts - In Case of Emergency"},{"$i":"ice-contacts-overlay-title","$v":"ICE Contacts"},{"$i":"phoneNumberInput","ariaLabel":"Phone number"},{"$i":"keypadDelete","ariaLabel":"Delete"},{"$i":"voiceMailKey","ariaLabel":"Voicemail"},{"$i":"asterisk","ariaLabel":"Asterisk"},{"$i":"hashSign","ariaLabel":"Hash sign"},{"$i":"keypadCancel","$v":"Cancel"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancel"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Címke"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Otthoni"},{"$i":"work","$v":"Munka"},{"$i":"personal","$v":"Saját"},{"$i":"faxHome","$v":"Ott. fax"},{"$i":"faxOffice","$v":"Mh. fax"},{"$i":"faxOther","$v":"Más fax"},{"$i":"another","$v":"Másik"},{"$i":"other","$v":"Egyéb"},{"$i":"customTag","placeholder":"Egyéni címke"},{"$i":"current","$v":"Aktuális"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Hiba"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Mégse"},{"$i":"emergency-call-only","$v":"Csak segélyhívás"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," nem egy segélyhívószám."]},{"$i":"ice-contacts-bar-text","$v":"ICE névjegyek - segélykérő névjegyek"},{"$i":"ice-contacts-overlay-title","$v":"ICE névjegyek"},{"$i":"phoneNumberInput","ariaLabel":"Telefonszám"},{"$i":"keypadDelete","ariaLabel":"Törlés"},{"$i":"voiceMailKey","ariaLabel":"Hangposta"},{"$i":"asterisk","ariaLabel":"Csillag"},{"$i":"hashSign","ariaLabel":"Kettőskereszt"},{"$i":"keypadCancel","$v":"Mégse"},{"$i":"loadingSimContacts","$v":"Névjegyek betöltése a SIM-kártyáról…"},{"$i":"noContactsWereFound","$v":"Nincsenek névjegyek"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Nincs SIM kártya a névjegyek betöltéséhez"},{"$i":"emergencyNumber","$v":"Segélyhívó szám"},{"$i":"callAirplaneModeMessage","$v":"Híváshoz ki kell kapcsolni a repülő módot a beállításokban."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"A repülő mód be van kapcsolva"},{"$i":"numberIsBusyTitle","$v":"A szám foglalt"},{"$i":"numberIsBusyMessage","$v":"A szám jelenleg foglalt. Próbálja újra később."},{"$i":"fdnIsActiveTitle","$v":"FDN aktív"},{"$i":"fdnIsActiveMessage","$v":["Az FDN engedélyezve van, de a szám nincs rajta az FDN listán: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Hívás indításához a telefonnak csatlakoznia kell egy hálózathoz."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"A hálózat nem engedélyezi a segélyhívásokat."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Nincs hálózati kapcsolat"},{"$i":"invalidNumberToDialTitle","$v":"A szám érvénytelen"},{"$i":"invalidNumberToDialMessage","$v":"A hívott szám nem érvényes."},{"$i":"unableToCallTitle","$v":"Nem indítható telefonhívás"},{"$i":"unableToCallMessage","$v":"Nem indítható hívás. Ha már tárcsázott, előbb tegye le."},{"$i":"otherConnectionInUseTitle","$v":"Másik vonal használatban"},{"$i":"otherConnectionInUseMessage","$v":"A másik vonalon már van egy aktív hívása. Egyszerre csak egy vonal használható."},{"$i":"callBarredByTheOperatorMessage","$v":"A hívást a szolgáltató megtagadta"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobil"},{"$i":"phone_type_home","$v":"Otthoni"},{"$i":"phone_type_work","$v":"Munka"},{"$i":"phone_type_personal","$v":"Saját"},{"$i":"phone_type_fax_home","$v":"Ott. fax"},{"$i":"phone_type_fax_office","$v":"Mh. fax"},{"$i":"phone_type_fax_other","$v":"Más fax"},{"$i":"phone_type_other","$v":"Egyéb"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Otthoni, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Munka, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Saját, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Ott. fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Mh. fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Más fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Egyéb, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Mégse"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":[{"t":"idOrVar","v":"phoneNumber"}," tárcsázása a következőn:"]},{"$i":"gaia-sim-picker-select-sim","$v":"Válasszon egy SIM kártyát"},{"$i":"gaia-sim-picker-button","$v":[{"t":"idOrVar","v":"n"},". SIM"]},{"$i":"gaia-sim-picker-button-default","$v":"(alapértelmezett)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etichetta"},{"$i":"mobile","$v":"Cellulare"},{"$i":"home","$v":"Casa"},{"$i":"work","$v":"Lavoro"},{"$i":"personal","$v":"Personale"},{"$i":"faxHome","$v":"Fax casa"},{"$i":"faxOffice","$v":"Fax ufficio"},{"$i":"faxOther","$v":"Altro fax"},{"$i":"another","$v":"Altro"},{"$i":"other","$v":"Altro"},{"$i":"customTag","placeholder":"Personalizzato"},{"$i":"current","$v":"Corrente"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},": ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Errore"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Annulla"},{"$i":"emergency-call-only","$v":"Solo chiamate d’emergenza"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," non è un numero di emergenza."]},{"$i":"ice-contacts-bar-text","$v":"Contatti ICE - In caso di emergenza"},{"$i":"ice-contacts-overlay-title","$v":"Contatti ICE"},{"$i":"phoneNumberInput","ariaLabel":"Numero di telefono"},{"$i":"keypadDelete","ariaLabel":"Elimina"},{"$i":"voiceMailKey","ariaLabel":"Segreteria"},{"$i":"asterisk","ariaLabel":"Asterisco"},{"$i":"hashSign","ariaLabel":"Cancelletto"},{"$i":"keypadCancel","$v":"Annulla"},{"$i":"loadingSimContacts","$v":"Caricamento contatti SIM…"},{"$i":"noContactsWereFound","$v":"Nessun contatto trovato"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Nessun SIM disponibile da cui caricare i contatti"},{"$i":"emergencyNumber","$v":"Numero di emergenza"},{"$i":"callAirplaneModeMessage","$v":"Per chiamare disattivare la modalità aereo nelle impostazioni."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Modalità aereo attiva"},{"$i":"numberIsBusyTitle","$v":"Il numero è occupato"},{"$i":"numberIsBusyMessage","$v":"Il numero è occupato. Riprovare più tardi."},{"$i":"fdnIsActiveTitle","$v":"FDN attivo"},{"$i":"fdnIsActiveMessage","$v":["FDN (Numeri selezione fissa) è attivo e il seguente numero non è incluso nell’elenco FDN: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Per chiamare è necessario essere collegati a una rete."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Le chiamate d’emergenza non sono consentite dalla rete."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Nessuna connessione di rete"},{"$i":"invalidNumberToDialTitle","$v":"Numero di telefono non valido"},{"$i":"invalidNumberToDialMessage","$v":"Il numero che si sta cercando di chiamare non è valido."},{"$i":"unableToCallTitle","$v":"Impossibile effettuare una chiamata in questo momento"},{"$i":"unableToCallMessage","$v":"Impossibile effettuare una chiamata. Se è già in corso una chiamata, interromperla e riprovare."},{"$i":"otherConnectionInUseTitle","$v":"Connessione già in uso"},{"$i":"otherConnectionInUseMessage","$v":"È in corso una chiamata su un’altra connessione. Non è possibile utilizzare più connessioni contemporaneamente."},{"$i":"callBarredByTheOperatorMessage","$v":"La chiamata è stata bloccata dall’operatore."},{"$i":"connectingEllipsis","$v":"Connessione…"},{"$i":"phone_type_mobile","$v":"Cellulare"},{"$i":"phone_type_home","$v":"Casa"},{"$i":"phone_type_work","$v":"Lavoro"},{"$i":"phone_type_personal","$v":"Personale"},{"$i":"phone_type_fax_home","$v":"Fax casa"},{"$i":"phone_type_fax_office","$v":"Fax ufficio"},{"$i":"phone_type_fax_other","$v":"Fax altro"},{"$i":"phone_type_other","$v":"Altro"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Cellulare, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Lavoro, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personale, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax ufficio, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax altro, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Altro, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Annulla"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Componi ",{"t":"idOrVar","v":"phoneNumber"}," con"]},{"$i":"gaia-sim-picker-select-sim","$v":"Seleziona SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM ",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(predefinita)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"ラベル"},{"$i":"mobile","$v":"携帯"},{"$i":"home","$v":"自宅"},{"$i":"work","$v":"勤務先"},{"$i":"personal","$v":"個人"},{"$i":"faxHome","$v":"自宅の Fax"},{"$i":"faxOffice","$v":"勤務先 Fax"},{"$i":"faxOther","$v":"その他 Fax"},{"$i":"another","$v":"別の連絡先"},{"$i":"other","$v":"その他"},{"$i":"customTag","placeholder":"カスタムタグ"},{"$i":"current","$v":"現住所"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"エラー"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"キャンセル"},{"$i":"emergency-call-only","$v":"緊急通報のみ"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," は緊急通報用の電話番号ではありません。"]},{"$i":"ice-contacts-bar-text","$v":"ICE 連絡先 - 緊急時"},{"$i":"ice-contacts-overlay-title","$v":"ICE 連絡先"},{"$i":"phoneNumberInput","ariaLabel":"電話番号"},{"$i":"keypadDelete","ariaLabel":"削除"},{"$i":"voiceMailKey","ariaLabel":"ボイスメール"},{"$i":"asterisk","ariaLabel":"アスタリスク"},{"$i":"hashSign","ariaLabel":"ハッシュ記号"},{"$i":"keypadCancel","$v":"キャンセル"},{"$i":"loadingSimContacts","$v":"SIM カードの連絡先を読み込み中..."},{"$i":"noContactsWereFound","$v":"連絡先が見つかりませんでした"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"連絡先を読み込む SIM カードがありません"},{"$i":"emergencyNumber","$v":"緊急通報用電話番号"},{"$i":"callAirplaneModeMessage","$v":"発信するには環境設定で機内モードを OFF にする必要があります。"},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"機内モードが ON です"},{"$i":"numberIsBusyTitle","$v":"発信先が話し中です"},{"$i":"numberIsBusyMessage","$v":"電話番号の相手が現在話し中です。後でおかけ直しください。"},{"$i":"fdnIsActiveTitle","$v":"FDN モードが ON です"},{"$i":"fdnIsActiveMessage","$v":["FDN (固定ダイヤル番号) モードが ON です。次の番号は FDN リストにありません: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"発信するにはネットワーク設定を行う必要があります。"},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"緊急通報はネットワークにより許可されていません。"},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"ネットワーク未接続"},{"$i":"invalidNumberToDialTitle","$v":"電話番号が正しくありません"},{"$i":"invalidNumberToDialMessage","$v":"おかけになった電話番号は正しくありません。"},{"$i":"unableToCallTitle","$v":"電話の発信ができません"},{"$i":"unableToCallMessage","$v":"発信できません。ダイヤル中の場合は先に発信ボタンを押してください。"},{"$i":"otherConnectionInUseTitle","$v":"他の回線が使用中です"},{"$i":"otherConnectionInUseMessage","$v":"別の回線で通話中です。同時に使用できる回線は 1本までです。"},{"$i":"callBarredByTheOperatorMessage","$v":"通信事業者により発信が禁止されました。"},{"$i":"connectingEllipsis","$v":"接続中…"},{"$i":"phone_type_mobile","$v":"モバイル"},{"$i":"phone_type_home","$v":"自宅"},{"$i":"phone_type_work","$v":"仕事"},{"$i":"phone_type_personal","$v":"個人"},{"$i":"phone_type_fax_home","$v":"Fax 自宅"},{"$i":"phone_type_fax_office","$v":"Fax オフィス"},{"$i":"phone_type_fax_other","$v":"Fax その他"},{"$i":"phone_type_other","$v":"その他"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["モバイル、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["自宅、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["仕事、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["個人、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax 自宅、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax オフィス、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax その他、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["その他、",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},"、",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"キャンセル"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["ダイヤル先 ",{"t":"idOrVar","v":"phoneNumber"}," への使用回線"]},{"$i":"gaia-sim-picker-select-sim","$v":"SIM カードを選択してください"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(既定)"}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"라벨"},{"$i":"mobile","$v":"모바일"},{"$i":"home","$v":"자택"},{"$i":"work","$v":"직장"},{"$i":"personal","$v":"개인"},{"$i":"faxHome","$v":"자택 팩스"},{"$i":"faxOffice","$v":"사무실 팩스"},{"$i":"faxOther","$v":"기타 팩스"},{"$i":"another","$v":"기타"},{"$i":"other","$v":"기타"},{"$i":"customTag","placeholder":"사용자 정의 태그"},{"$i":"current","$v":"현주소"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"오류"},{"$i":"ok","$v":"확인"},{"$i":"cancel","$v":"취소"},{"$i":"emergency-call-only","$v":"긴급 전화만 가능"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," 번호는 긴급 전화 번호가 아닙니다."]},{"$i":"ice-contacts-bar-text","$v":"ICE 연락처 - 긴급 상황"},{"$i":"ice-contacts-overlay-title","$v":"ICE 연락처"},{"$i":"phoneNumberInput","ariaLabel":"전화번호"},{"$i":"keypadDelete","ariaLabel":"삭제"},{"$i":"voiceMailKey","ariaLabel":"음성사서함"},{"$i":"asterisk","ariaLabel":"별표"},{"$i":"hashSign","ariaLabel":"해시 기호"},{"$i":"keypadCancel","$v":"취소"},{"$i":"loadingSimContacts","$v":"SIM 카드 연락처 읽는 중…"},{"$i":"noContactsWereFound","$v":"연락처가 없습니다."},{"$i":"noContactsFoundDialogOk","$v":"확인"},{"$i":"noSimCardToLoadContactsFrom","$v":"연락처를 읽어들일 SIM 카드 없음"},{"$i":"emergencyNumber","$v":"비상 전화번호"},{"$i":"callAirplaneModeMessage","$v":"전화를 걸기 위해서 설정에서 비행기 모드를 꺼 주세요."},{"$i":"callAirplaneModeBtnOk","$v":"확인"},{"$i":"callAirplaneModeTitle","$v":"비행기 모드가 활성화 됨"},{"$i":"numberIsBusyTitle","$v":"통화중"},{"$i":"numberIsBusyMessage","$v":"상대방이 통화중입니다. 잠시 후에 다시 시도해 주세요."},{"$i":"fdnIsActiveTitle","$v":"FDN 활성화"},{"$i":"fdnIsActiveMessage","$v":["FDN(고정 다이어링 번호)이 활성화되어 있고 다음 번호는 FDN 목록에 없습니다: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"전화를 걸기 위해서는 전화기가 네트워크에 연결되어있어야 합니다."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"비상전화가 망에서 허용되어 있지 않습니다."},{"$i":"emergencyDialogBtnOk","$v":"확인"},{"$i":"emergencyDialogTitle","$v":"네트워크 연결 없음"},{"$i":"invalidNumberToDialTitle","$v":"유효하지 않은 전화번호"},{"$i":"invalidNumberToDialMessage","$v":"통화하려는 전화번호가 유효하지 않습니다."},{"$i":"unableToCallTitle","$v":"지금 전화를 걸 수 없음"},{"$i":"unableToCallMessage","$v":"전화를 걸 수 없습니다. 이미 전화를 걸고 있다면 먼저 끊어주세요."},{"$i":"otherConnectionInUseTitle","$v":"다른 연결이 사용중임"},{"$i":"otherConnectionInUseMessage","$v":"다른 연결로 현재 통화중입니다. 한번에 하나의 연결만 사용할 수 있습니다."},{"$i":"callBarredByTheOperatorMessage","$v":"통신사에 의해서 통화사 제한됨"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"핸드폰"},{"$i":"phone_type_home","$v":"집"},{"$i":"phone_type_work","$v":"직장"},{"$i":"phone_type_personal","$v":"개인"},{"$i":"phone_type_fax_home","$v":"집 팩스"},{"$i":"phone_type_fax_office","$v":"회사 팩스"},{"$i":"phone_type_fax_other","$v":"기타 팩스"},{"$i":"phone_type_other","$v":"기타"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["핸드폰, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["집, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["회사, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["개인, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["집 팩스, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["회사 팩스, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["기타 팩스, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["기타, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"취소"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["다음으로 ",{"t":"idOrVar","v":"phoneNumber"},"에 전화"]},{"$i":"gaia-sim-picker-select-sim","$v":"SIM 선택"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(기본)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Tipas"},{"$i":"mobile","$v":"Mobilusis"},{"$i":"home","$v":"Namų"},{"$i":"work","$v":"Darbo"},{"$i":"personal","$v":"Asmeninis"},{"$i":"faxHome","$v":"Namų faksas"},{"$i":"faxOffice","$v":"Darbo faksas"},{"$i":"faxOther","$v":"Kitas faksas"},{"$i":"another","$v":"Kitas"},{"$i":"other","$v":"Kitas"},{"$i":"customTag","placeholder":"Kitoks tipas"},{"$i":"current","$v":"Dabartinis adr."},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Klaida"},{"$i":"ok","$v":"Gerai"},{"$i":"cancel","$v":"Atsisakyti"},{"$i":"emergency-call-only","$v":"Tik pagalbos skambutis"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," nėra pagalbos numeris."]},{"$i":"ice-contacts-bar-text","$v":"SOS adresatai – nelaimės atvejui"},{"$i":"ice-contacts-overlay-title","$v":"SOS adresatai"},{"$i":"phoneNumberInput","ariaLabel":"Telefono numeris"},{"$i":"keypadDelete","ariaLabel":"Naikinti"},{"$i":"voiceMailKey","ariaLabel":"Balso paštas"},{"$i":"asterisk","ariaLabel":"Žvaigždutė"},{"$i":"hashSign","ariaLabel":"Grotelės"},{"$i":"keypadCancel","$v":"Cancel"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Atsisakyti"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Label"},{"$i":"mobile","$v":"Mobile"},{"$i":"home","$v":"Home"},{"$i":"work","$v":"Work"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Fax home"},{"$i":"faxOffice","$v":"Fax office"},{"$i":"faxOther","$v":"Fax other"},{"$i":"another","$v":"Another"},{"$i":"other","$v":"Other"},{"$i":"customTag","placeholder":"Custom tag"},{"$i":"current","$v":"Current"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Error"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Cancel"},{"$i":"emergency-call-only","$v":"Emergency Call Only"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," is not an emergency number."]},{"$i":"ice-contacts-bar-text","$v":"ICE Contacts - In Case of Emergency"},{"$i":"ice-contacts-overlay-title","$v":"ICE Contacts"},{"$i":"phoneNumberInput","ariaLabel":"Phone number"},{"$i":"keypadDelete","ariaLabel":"Delete"},{"$i":"voiceMailKey","ariaLabel":"Voicemail"},{"$i":"asterisk","ariaLabel":"Asterisk"},{"$i":"hashSign","ariaLabel":"Hash sign"},{"$i":"keypadCancel","$v":"Cancel"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancel"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Label"},{"$i":"mobile","$v":"Mudah Alih"},{"$i":"home","$v":"Laman Utama"},{"$i":"work","$v":"Kerja"},{"$i":"personal","$v":"Peribadi"},{"$i":"faxHome","$v":"Faks rumah"},{"$i":"faxOffice","$v":"Faks pejabat"},{"$i":"faxOther","$v":"Faks lain"},{"$i":"another","$v":"Lain lagi"},{"$i":"other","$v":"Lain-lain"},{"$i":"customTag","placeholder":"Tag suaian"},{"$i":"current","$v":"Semasa"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Ralat"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Batal"},{"$i":"emergency-call-only","$v":"Panggilan Kecemasan Sahaja"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," bukanlah nombor kecemasan."]},{"$i":"ice-contacts-bar-text","$v":"Kenalan ICE - Jika Berlaku Kecemasan"},{"$i":"ice-contacts-overlay-title","$v":"Kenalan ICE"},{"$i":"phoneNumberInput","ariaLabel":"Nombor telefon"},{"$i":"keypadDelete","ariaLabel":"Hapus"},{"$i":"voiceMailKey","ariaLabel":"Mel suara"},{"$i":"asterisk","ariaLabel":"Asterisk"},{"$i":"hashSign","ariaLabel":"Tanda cincang"},{"$i":"keypadCancel","$v":"Batal"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Batal"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Label"},{"$i":"mobile","$v":"Mobile"},{"$i":"home","$v":"Home"},{"$i":"work","$v":"Work"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Fax home"},{"$i":"faxOffice","$v":"Fax office"},{"$i":"faxOther","$v":"Fax other"},{"$i":"another","$v":"Another"},{"$i":"other","$v":"Other"},{"$i":"customTag","placeholder":"Custom tag"},{"$i":"current","$v":"Current"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"त्रुटि"},{"$i":"ok","$v":"ठीक छ"},{"$i":"cancel","$v":"रद्द गर्नुहोस्"},{"$i":"emergency-call-only","$v":"आकस्मिक कल मात्र"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," आकस्मिक नम्बर होइन।"]},{"$i":"ice-contacts-bar-text","$v":"ICE सम्पर्कहरु- इमरजेन्सी को केस मा"},{"$i":"ice-contacts-overlay-title","$v":"ICE सम्पर्कहरू"},{"$i":"phoneNumberInput","ariaLabel":"सम्पर्क नम्बर"},{"$i":"keypadDelete","ariaLabel":"मेटाउनुहोस्"},{"$i":"voiceMailKey","ariaLabel":"आवाजमेल"},{"$i":"asterisk","ariaLabel":"ताराङ्कन"},{"$i":"hashSign","ariaLabel":"Hash sign"},{"$i":"keypadCancel","$v":"Cancel"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"रद्द गर्नुहोस्"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Label"},{"$i":"mobile","$v":"Mobiel"},{"$i":"home","$v":"Thuis"},{"$i":"work","$v":"Werk"},{"$i":"personal","$v":"Privé"},{"$i":"faxHome","$v":"Fax thuis"},{"$i":"faxOffice","$v":"Fax kantoor"},{"$i":"faxOther","$v":"Fax overig"},{"$i":"another","$v":"Anders"},{"$i":"other","$v":"Anders"},{"$i":"customTag","placeholder":"Aangepast label"},{"$i":"current","$v":"Huidig"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Fout"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Annuleren"},{"$i":"emergency-call-only","$v":"Alleen noodoproep"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," is geen noodnummer."]},{"$i":"ice-contacts-bar-text","$v":"ICE-contacten - In Case of Emergency"},{"$i":"ice-contacts-overlay-title","$v":"ICE-contacten"},{"$i":"phoneNumberInput","ariaLabel":"Telefoonnummer"},{"$i":"keypadDelete","ariaLabel":"Verwijderen"},{"$i":"voiceMailKey","ariaLabel":"Voicemail"},{"$i":"asterisk","ariaLabel":"Sterretje"},{"$i":"hashSign","ariaLabel":"Hashteken"},{"$i":"keypadCancel","$v":"Annuleren"},{"$i":"loadingSimContacts","$v":"Simkaartcontacten laden…"},{"$i":"noContactsWereFound","$v":"Geen contacten gevonden"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Geen simkaart om contacten van te laden"},{"$i":"emergencyNumber","$v":"Noodnummer"},{"$i":"callAirplaneModeMessage","$v":"Om te bellen dient u de vliegtuigmodus uit te schakelen in Instellingen."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Vliegtuigmodus geactiveerd"},{"$i":"numberIsBusyTitle","$v":"Nummer in gesprek"},{"$i":"numberIsBusyMessage","$v":"Het nummer is momenteel in gesprek. Probeer het later nog eens."},{"$i":"fdnIsActiveTitle","$v":"FDN actief"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is geactiveerd en het volgende nummer staat niet in uw FDN-lijst: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Om te bellen moet de telefoon met een netwerk zijn verbonden."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Noodoproepen zijn niet toegestaan door het netwerk."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Geen netwerkverbinding"},{"$i":"invalidNumberToDialTitle","$v":"Ongeldig telefoonnummer"},{"$i":"invalidNumberToDialMessage","$v":"Het telefoonnummer dat u belt is niet geldig."},{"$i":"unableToCallTitle","$v":"Kan nu niet bellen"},{"$i":"unableToCallMessage","$v":"Kan niet bellen. Als u al bezig bent met kiezen, hang dan eerst op."},{"$i":"otherConnectionInUseTitle","$v":"Andere verbinding in gebruik"},{"$i":"otherConnectionInUseMessage","$v":"U hebt een actief gesprek op een andere verbinding. U kunt maar één verbinding tegelijk gebruiken."},{"$i":"callBarredByTheOperatorMessage","$v":"Oproep is geblokkeerd door de operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobiel"},{"$i":"phone_type_home","$v":"Thuis"},{"$i":"phone_type_work","$v":"Werk"},{"$i":"phone_type_personal","$v":"Privé"},{"$i":"phone_type_fax_home","$v":"Fax thuis"},{"$i":"phone_type_fax_office","$v":"Fax kantoor"},{"$i":"phone_type_fax_other","$v":"Fax overig"},{"$i":"phone_type_other","$v":"Overig"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobiel, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Thuis, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Werk, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Privé, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax thuis, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax kantoor, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax overig, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Overig, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Annuleren"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":[{"t":"idOrVar","v":"phoneNumber"}," kiezen via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Simkaart selecteren"},{"$i":"gaia-sim-picker-button","$v":["Simkaart",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(standaard)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"ਲੇਬਲ"},{"$i":"mobile","$v":"ਮੋਬਾਇਲ"},{"$i":"home","$v":"ਘਰ"},{"$i":"work","$v":"ਕੰਮ"},{"$i":"personal","$v":"ਨਿੱਜੀ"},{"$i":"faxHome","$v":"ਫੈਕਸ ਘਰ"},{"$i":"faxOffice","$v":"ਫੈਕਸ ਦਫ਼ਤਰ"},{"$i":"faxOther","$v":"ਫੈਕਸ ਹੋਰ"},{"$i":"another","$v":"ਹੋਰ"},{"$i":"other","$v":"ਹੋਰ"},{"$i":"customTag","placeholder":"ਪਸੰਦੀਦਾ ਟੈਗ"},{"$i":"current","$v":"ਮੌਜੂਦਾ"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"ਗਲਤੀ"},{"$i":"ok","$v":"ਠੀਕ ਹੈ"},{"$i":"cancel","$v":"ਰੱਦ ਕਰੋ"},{"$i":"emergency-call-only","$v":"ਕੇਵਲ ਐਮਰਜੈਂਸੀ ਕਾਲ ਹੀ"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," ਐਮਰਜੈਂਸੀ ਨੰਬਰ ਨਹੀਂ ਹੈ।"]},{"$i":"ice-contacts-bar-text","$v":"ICE ਸੰਪਰਕ - ਐਮਰਜੈਂਸੀ ਦੇ ਕੇਸ ਵਿੱਚ"},{"$i":"ice-contacts-overlay-title","$v":"ICE ਸੰਪਰਕ"},{"$i":"phoneNumberInput","ariaLabel":"ਫੋਨ ਨੰਬਰ"},{"$i":"keypadDelete","ariaLabel":"ਹਟਾਓ"},{"$i":"voiceMailKey","ariaLabel":"ਵੋਆਇਸਮੇਲ"},{"$i":"asterisk","ariaLabel":"ਤਾਰਾ"},{"$i":"hashSign","ariaLabel":"ਹੈਸ਼"},{"$i":"keypadCancel","$v":"Cancel"},{"$i":"loadingSimContacts","$v":"Loading SIM card contacts…"},{"$i":"noContactsWereFound","$v":"No contacts were found"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Emergency number"},{"$i":"callAirplaneModeMessage","$v":"To make a call you need to disable airplane mode in settings."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Airplane mode activated"},{"$i":"numberIsBusyTitle","$v":"Number is busy"},{"$i":"numberIsBusyMessage","$v":"The number is currently busy. Please try again later."},{"$i":"fdnIsActiveTitle","$v":"FDN active"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) is activated and the following number is not in your FDN list: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"To make a call, the phone must be connected to a network."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Emergency calls are not allowed by the network."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"No network connection"},{"$i":"invalidNumberToDialTitle","$v":"Invalid phone number"},{"$i":"invalidNumberToDialMessage","$v":"The phone number you are calling is not valid."},{"$i":"unableToCallTitle","$v":"Unable to make a phone call now"},{"$i":"unableToCallMessage","$v":"Cannot make a call. If you are already dialing, please hang up first."},{"$i":"otherConnectionInUseTitle","$v":"Other connection in use"},{"$i":"otherConnectionInUseMessage","$v":"You have an active call on another connection. You can only use one connection at a time."},{"$i":"callBarredByTheOperatorMessage","$v":"Call was barred by the operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"ਰੱਦ ਕਰੋ"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Dial ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Select SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(default)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etykieta"},{"$i":"mobile","$v":"Komórka"},{"$i":"home","$v":"Dom"},{"$i":"work","$v":"Praca"},{"$i":"personal","$v":"Prywatny"},{"$i":"faxHome","$v":"Domowy faks"},{"$i":"faxOffice","$v":"Służbowy faks"},{"$i":"faxOther","$v":"Inny faks"},{"$i":"another","$v":"Inna etykieta"},{"$i":"other","$v":"Inny"},{"$i":"customTag","placeholder":"Własna etykieta"},{"$i":"current","$v":"Obecny"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"item"}," (",{"t":"idOrVar","v":"label"},")"]},{"$i":"error","$v":"Błąd"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Cancel"},{"$i":"emergency-call-only","$v":"Tylko połączenia alarmowe"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," nie jest numerem alarmowym."]},{"$i":"ice-contacts-bar-text","$v":"Kontakty alarmowe (ICE)"},{"$i":"ice-contacts-overlay-title","$v":"Kontakty alarmowe (ICE)"},{"$i":"phoneNumberInput","ariaLabel":"Numer telefonu"},{"$i":"keypadDelete","ariaLabel":"Usuń"},{"$i":"voiceMailKey","ariaLabel":"Poczta głosowa"},{"$i":"asterisk","ariaLabel":"Asterysk"},{"$i":"hashSign","ariaLabel":"Symbol kratki"},{"$i":"keypadCancel","$v":"Anuluj"},{"$i":"loadingSimContacts","$v":"Wczytywanie kontaktów z karty SIM…"},{"$i":"noContactsWereFound","$v":"Nie znaleziono kontaktów"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"No SIM card to load contacts from"},{"$i":"emergencyNumber","$v":"Numer alarmowy"},{"$i":"callAirplaneModeMessage","$v":"Aby wykonać połączenie, należy wyłączyć tryb lotu w ustawieniach."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Aktywny tryb lotu"},{"$i":"numberIsBusyTitle","$v":"Numer zajęty"},{"$i":"numberIsBusyMessage","$v":"Numer jest aktualnie zajęty. Proszę spróbować później."},{"$i":"fdnIsActiveTitle","$v":"Wybieranie ustalone aktywne"},{"$i":"fdnIsActiveMessage","$v":["Wybieranie ustalone jest włączone, a następujący numer ",{"t":"idOrVar","v":"number"}," nie znajduje się na liście dozwolonych"]},{"$i":"emergencyDialogBodyBadNumber","$v":"Aby wykonać połączenie, telefon musi być połączony z siecią."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Sieć nie umożliwia wykonywania połączeń alarmowych."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Brak połączenia z siecią"},{"$i":"invalidNumberToDialTitle","$v":"Nieprawidłowy numer"},{"$i":"invalidNumberToDialMessage","$v":"Wybrany numer telefonu jest nieprawidłowy."},{"$i":"unableToCallTitle","$v":"Nie można wykonać połączenia"},{"$i":"unableToCallMessage","$v":"Wykonanie połączenia jest niemożliwe. Jeśli już dzwonisz, zakończ najpierw istniejące połączenie."},{"$i":"otherConnectionInUseTitle","$v":"Aktywne inne połączenie"},{"$i":"otherConnectionInUseMessage","$v":"Inne połączenie jest aktywne. Można używać tylko jednego połączenia na raz."},{"$i":"callBarredByTheOperatorMessage","$v":"Rozmowa została zablokowana przez operatora"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Anuluj"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Połącz z ",{"t":"idOrVar","v":"phoneNumber"}," używając:"]},{"$i":"gaia-sim-picker-select-sim","$v":"Wybierz kartę SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM ",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(domyślna)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiqueta"},{"$i":"mobile","$v":"Celular"},{"$i":"home","$v":"Início"},{"$i":"work","$v":"Trabalho"},{"$i":"personal","$v":"Pessoal"},{"$i":"faxHome","$v":"Fax Casa"},{"$i":"faxOffice","$v":"Fax escritório"},{"$i":"faxOther","$v":"Outro fax"},{"$i":"another","$v":"Outro"},{"$i":"other","$v":"Outro"},{"$i":"customTag","placeholder":"Tag personalizada"},{"$i":"current","$v":"Atual"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Erro"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Cancelar"},{"$i":"emergency-call-only","$v":"Apenas Chamadas de Emergência"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," não é um número de emergência."]},{"$i":"ice-contacts-bar-text","$v":"Contatos ECE - Em Caso de Emergência"},{"$i":"ice-contacts-overlay-title","$v":"Contatos ECE"},{"$i":"phoneNumberInput","ariaLabel":"Número de telefone"},{"$i":"keypadDelete","ariaLabel":"Apagar"},{"$i":"voiceMailKey","ariaLabel":"Correio de voz"},{"$i":"asterisk","ariaLabel":"Asterisco"},{"$i":"hashSign","ariaLabel":"Cerquilha"},{"$i":"keypadCancel","$v":"Cancelar"},{"$i":"loadingSimContacts","$v":"Carregando contatos do SIM…"},{"$i":"noContactsWereFound","$v":"Nenhum contato encontrado"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Nenhum cartão SIM para carregar os contatos"},{"$i":"emergencyNumber","$v":"Número de emergência"},{"$i":"callAirplaneModeMessage","$v":"Para fazer uma ligação é necessário desativar o modo avião nas configurações."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Modo avião ativado"},{"$i":"numberIsBusyTitle","$v":"O número está ocupado"},{"$i":"numberIsBusyMessage","$v":"O número está ocupado. Tente novamente mais tarde."},{"$i":"fdnIsActiveTitle","$v":"NDF ativo"},{"$i":"fdnIsActiveMessage","$v":["NDF (Números de discagem fixa) está ativo e o seguinte número não está na sua lista NDF: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Para fazer uma chamada, o telefone deve estar conectado a uma rede."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Chamadas de emergência não são permitidas pela rede."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Nenhuma conexão de rede"},{"$i":"invalidNumberToDialTitle","$v":"Número de telefone inválido"},{"$i":"invalidNumberToDialMessage","$v":"O número de telefone para o qual você está ligando é inválido."},{"$i":"unableToCallTitle","$v":"Impossível realizar uma chamada agora"},{"$i":"unableToCallMessage","$v":"Não é possível realizar a chamada. Se você já está ligando, por favor desligue primeiro."},{"$i":"otherConnectionInUseTitle","$v":"Outra conexão está em uso"},{"$i":"otherConnectionInUseMessage","$v":"Você tem uma chamada ativa em outra linha. Você só pode usar uma linha por vez."},{"$i":"callBarredByTheOperatorMessage","$v":"A chamada foi barrada pela operadora"},{"$i":"connectingEllipsis","$v":"Conectando…"},{"$i":"phone_type_mobile","$v":"Celular"},{"$i":"phone_type_home","$v":"Casa"},{"$i":"phone_type_work","$v":"Trabalho"},{"$i":"phone_type_personal","$v":"Pessoal"},{"$i":"phone_type_fax_home","$v":"Fax casa"},{"$i":"phone_type_fax_office","$v":"Fax trabalho"},{"$i":"phone_type_fax_other","$v":"Outro fax"},{"$i":"phone_type_other","$v":"Outros"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Celular, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Trabalho, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Pessoal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax casa, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax trabalho, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Outro fax, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Outros, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Cancelar"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Discar ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Selecionar SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(padrão)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etichetă"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Acasă"},{"$i":"work","$v":"Serviciu"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Acasă fax"},{"$i":"faxOffice","$v":"Birou fax"},{"$i":"faxOther","$v":"Alt fax"},{"$i":"another","$v":"Altul"},{"$i":"other","$v":"Altul"},{"$i":"customTag","placeholder":"Etichetă personalizată"},{"$i":"current","$v":"În prezent"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Eroare"},{"$i":"ok","$v":"Ok"},{"$i":"cancel","$v":"Renunță"},{"$i":"emergency-call-only","$v":"Doar apel de urgență"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," nu este un număr de urgență."]},{"$i":"ice-contacts-bar-text","$v":"Contacte ICE - În caz de urgență"},{"$i":"ice-contacts-overlay-title","$v":"Contacte ICE"},{"$i":"phoneNumberInput","ariaLabel":"Număr de telefon"},{"$i":"keypadDelete","ariaLabel":"Șterge"},{"$i":"voiceMailKey","ariaLabel":"Căsuță vocală"},{"$i":"asterisk","ariaLabel":"Asterisc"},{"$i":"hashSign","ariaLabel":"Diez"},{"$i":"keypadCancel","$v":"Renunță"},{"$i":"loadingSimContacts","$v":"Se încarcă contactele cardului SIM…"},{"$i":"noContactsWereFound","$v":"Nu s-a găsit niciun contact"},{"$i":"noContactsFoundDialogOk","$v":"Ok"},{"$i":"noSimCardToLoadContactsFrom","$v":"Niciun card SIM de pe care să se încarce contactele"},{"$i":"emergencyNumber","$v":"Număr de urgență"},{"$i":"callAirplaneModeMessage","$v":"Pentru a efectua un apel, trebuie să dezactivezi modul avion din Setări."},{"$i":"callAirplaneModeBtnOk","$v":"Ok"},{"$i":"callAirplaneModeTitle","$v":"Mod avion activat"},{"$i":"numberIsBusyTitle","$v":"Numărul este ocupat"},{"$i":"numberIsBusyMessage","$v":"Numărul este în prezent ocupat. Te rugăm să reîncerci mai târziu."},{"$i":"fdnIsActiveTitle","$v":"FDN activ"},{"$i":"fdnIsActiveMessage","$v":["FDN (Numere de apelare fixă) este activat iar următorul număr nu este în lista FDN: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Pentru a efectua un apel, telefonul trebuie să fie conectat la o rețea."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Apelurile de urgență nu sunt permise de rețea."},{"$i":"emergencyDialogBtnOk","$v":"Ok"},{"$i":"emergencyDialogTitle","$v":"Fără conexiune la rețea"},{"$i":"invalidNumberToDialTitle","$v":"Număr de telefon invalid"},{"$i":"invalidNumberToDialMessage","$v":"Numărul de telefon pe care îl apelezi nu este valabil."},{"$i":"unableToCallTitle","$v":"Nu se poate efectua un apel telefonic acum"},{"$i":"unableToCallMessage","$v":"Nu se poate efectua un apel. Dacă apelezi deja, te rugăm să închizi mai întâi."},{"$i":"otherConnectionInUseTitle","$v":"Altă conexiune în uz"},{"$i":"otherConnectionInUseMessage","$v":"Ai un apel activ pe altă conexiune. Poți folosi doar o conexiune în același timp."},{"$i":"callBarredByTheOperatorMessage","$v":"Apelul a fost blocat de operator"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Renunță"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Apelează ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Selectează SIM-ul"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(implicit)"}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Označenie"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Domov"},{"$i":"work","$v":"Práca"},{"$i":"personal","$v":"Osobné"},{"$i":"faxHome","$v":"Fax domov"},{"$i":"faxOffice","$v":"Fax kancelária"},{"$i":"faxOther","$v":"Fax ostatné"},{"$i":"another","$v":"Ďalšie"},{"$i":"other","$v":"Iné"},{"$i":"customTag","placeholder":"Vlastná značka"},{"$i":"current","$v":"Aktuálna"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Chyba"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Zrušiť"},{"$i":"emergency-call-only","$v":"Len tiesňové volania"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," nie je tiesňové číslo."]},{"$i":"ice-contacts-bar-text","$v":"Kontakty ICE - V prípade núdze"},{"$i":"ice-contacts-overlay-title","$v":"Kontakty ICE"},{"$i":"phoneNumberInput","ariaLabel":"Telefónne číslo"},{"$i":"keypadDelete","ariaLabel":"Odstrániť"},{"$i":"voiceMailKey","ariaLabel":"Hlasová schránka"},{"$i":"asterisk","ariaLabel":"Hviezdička"},{"$i":"hashSign","ariaLabel":"Znak mriežka"},{"$i":"keypadCancel","$v":"Zrušiť"},{"$i":"loadingSimContacts","$v":"Načítavajú sa kontakty z karty SIM…"},{"$i":"noContactsWereFound","$v":"Neboli nájdené žiadne kontakty"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Nie je dostupná karta SIM, z ktorej by bolo možné načítať kontakty"},{"$i":"emergencyNumber","$v":"Tiesňové číslo"},{"$i":"callAirplaneModeMessage","$v":"Ak chcete uskutočniť hovor, musíte vypnúť režim V lietadle."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Aktivovaný režim V lietadle"},{"$i":"numberIsBusyTitle","$v":"Číslo je zaneprázdnené"},{"$i":"numberIsBusyMessage","$v":"Číslo je momentálne zaneprázdnené. Skúste to neskôr."},{"$i":"fdnIsActiveTitle","$v":"FDN je aktívne"},{"$i":"fdnIsActiveMessage","$v":["Pevný zoznam príjemcov (FDN) je aktivovaný a nasledovné číslo sa nenachádza vo vašom zozname povolených čísiel: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Ak chcete uskutočniť hovor, telefón musí byť pripojený do siete."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Tiesňové volania nie sú v tejto sieti podporované."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Bez pripojenia k sieti"},{"$i":"invalidNumberToDialTitle","$v":"Neplatné telefónne číslo"},{"$i":"invalidNumberToDialMessage","$v":"Volané číslo nie je platné."},{"$i":"unableToCallTitle","$v":"Momentálne nie je možné uskutočniť hovor"},{"$i":"unableToCallMessage","$v":"Nie je možné uskutočniť hovor. Ak už vytáčate číslo, prosím, najskôr zaveste."},{"$i":"otherConnectionInUseTitle","$v":"Práve sa používa iné spojenie"},{"$i":"otherConnectionInUseMessage","$v":"Práve prebieha hovor v ďalšom vašom spojení. Naraz je možné využívať len jedno spojenie."},{"$i":"callBarredByTheOperatorMessage","$v":"Hovor bol zablokovaný operátorom"},{"$i":"connectingEllipsis","$v":"Pripája sa…"},{"$i":"phone_type_mobile","$v":"Mobil"},{"$i":"phone_type_home","$v":"Domov"},{"$i":"phone_type_work","$v":"Práca"},{"$i":"phone_type_personal","$v":"Osobné"},{"$i":"phone_type_fax_home","$v":"Fax domov"},{"$i":"phone_type_fax_office","$v":"Fax do práce"},{"$i":"phone_type_fax_other","$v":"Fax iný"},{"$i":"phone_type_other","$v":"Iné"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Domov, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Práca, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Osobné, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax domov, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax do práce, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax iný, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Iné, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Zrušiť"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Volať ",{"t":"idOrVar","v":"phoneNumber"}," cez"]},{"$i":"gaia-sim-picker-select-sim","$v":"Zvoľte kartu SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(predvolená)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiketë"},{"$i":"mobile","$v":"Celular"},{"$i":"home","$v":"Shtëpie"},{"$i":"work","$v":"Pune"},{"$i":"personal","$v":"Personal"},{"$i":"faxHome","$v":"Faks shtëpie"},{"$i":"faxOffice","$v":"Faks zyre"},{"$i":"faxOther","$v":"Faks tjetër"},{"$i":"another","$v":"Një tjetër"},{"$i":"other","$v":"Tjetër"},{"$i":"customTag","placeholder":"Etiketë vetjake"},{"$i":"current","$v":"E tanishmja"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Gabim"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Anulojeni"},{"$i":"emergency-call-only","$v":"Vetëm Thirrje Urgjencash"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," s’është numër urgjence."]},{"$i":"ice-contacts-bar-text","$v":"Kontakte NRU (ICE) - Në Rast Urgjence"},{"$i":"ice-contacts-overlay-title","$v":"Kontakte NRU (ICE)"},{"$i":"phoneNumberInput","ariaLabel":"Numër telefoni"},{"$i":"keypadDelete","ariaLabel":"Delete"},{"$i":"voiceMailKey","ariaLabel":"Mesazh zanor"},{"$i":"asterisk","ariaLabel":"Yllth"},{"$i":"hashSign","ariaLabel":"Shenja dieziz"},{"$i":"keypadCancel","$v":"Anulojeni"},{"$i":"loadingSimContacts","$v":"Po ngarkohen kontakte të kartës SIM…"},{"$i":"noContactsWereFound","$v":"S’u gjetën kontakte"},{"$i":"noContactsFoundDialogOk","$v":"OK"},{"$i":"noSimCardToLoadContactsFrom","$v":"Pa kartë SIM nga ku të ngarkohen kontakte"},{"$i":"emergencyNumber","$v":"Numër urgjence"},{"$i":"callAirplaneModeMessage","$v":"Që të bëni një thirrje lypset të çaktivizoni mënyrën aeroplan te rregullimet."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Mënyra aeroplan është aktive"},{"$i":"numberIsBusyTitle","$v":"Numri është i zënë"},{"$i":"numberIsBusyMessage","$v":"Numri hëpërhë është i zënë. Ju lutemi, riprovoni më vonë."},{"$i":"fdnIsActiveTitle","$v":"NFTh aktive"},{"$i":"fdnIsActiveMessage","$v":["NFTh (Numra Fiks Thirrjesh) është i aktivizuar dhe numri vijues s’gjendet te lista juaj NFTh: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Që të bëni një thirrje, telefoni duhet të jetë i lidhur në një rrjet."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Thirrjet e urgjencës s’anë të lejuara nga rrjeti."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Pa lidhje në rrjet"},{"$i":"invalidNumberToDialTitle","$v":"Numër telefoni i pavlefshëm"},{"$i":"invalidNumberToDialMessage","$v":"Numri i telefonit që po thërrisni s’është i vlefshëm."},{"$i":"unableToCallTitle","$v":"S’është në gjendje të bëjë thirrje telefonike tani"},{"$i":"unableToCallMessage","$v":"S’bën dot thirrje. Nëse jeni duke i rënë numrit, ju lutemi, fillimisht mbylleni."},{"$i":"otherConnectionInUseTitle","$v":"Tjetër lidhje në përdorim"},{"$i":"otherConnectionInUseMessage","$v":"Keni një thirrje aktive në një tjetër lidhje. Mund të përdorni vetëm një lidhje në herë."},{"$i":"callBarredByTheOperatorMessage","$v":"Thirrja qe ndaluar nga operatori"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Celular"},{"$i":"phone_type_home","$v":"Shtëpie"},{"$i":"phone_type_work","$v":"Pune"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Faks shtëpie"},{"$i":"phone_type_fax_office","$v":"Faks zyre"},{"$i":"phone_type_fax_other","$v":"Faks tjetër"},{"$i":"phone_type_other","$v":"Tjetër"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Celular, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Shtëpie, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Pune, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Faks shtëpie, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Faks zyre, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Faks tjetër, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Tjetër, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Anulojeni"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Bjeri ",{"t":"idOrVar","v":"phoneNumber"}," përmes"]},{"$i":"gaia-sim-picker-select-sim","$v":"Përzgjidhni SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(parazgjedhje)"}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Naslov"},{"$i":"mobile","$v":"Mobilni"},{"$i":"home","$v":"Kućni"},{"$i":"work","$v":"Poslovni"},{"$i":"personal","$v":"Lični"},{"$i":"faxHome","$v":"Kućni faks"},{"$i":"faxOffice","$v":"Kancelarijski faks"},{"$i":"faxOther","$v":"Drugi faks"},{"$i":"another","$v":"Drugo"},{"$i":"other","$v":"Ostalo"},{"$i":"customTag","placeholder":"Posebna oznaka"},{"$i":"current","$v":"Trenutna"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Greška"},{"$i":"ok","$v":"U redu"},{"$i":"cancel","$v":"Otkaži"},{"$i":"emergency-call-only","$v":"Poziv samo za hitne slučajeve"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," nije broj za hitne slučajeve."]},{"$i":"ice-contacts-bar-text","$v":"ICE kontakti - Za hitne slučajeve"},{"$i":"ice-contacts-overlay-title","$v":"ICE kontakti"},{"$i":"phoneNumberInput","ariaLabel":"Broj telefona"},{"$i":"keypadDelete","ariaLabel":"Obriši"},{"$i":"voiceMailKey","ariaLabel":"Govorna pošta"},{"$i":"asterisk","ariaLabel":"Zvezdica"},{"$i":"hashSign","ariaLabel":"Taraba"},{"$i":"keypadCancel","$v":"Otkaži"},{"$i":"loadingSimContacts","$v":"Učitavanje kontakata sa SIM kartice…"},{"$i":"noContactsWereFound","$v":"Kontakti nisu pronađeni"},{"$i":"noContactsFoundDialogOk","$v":"U redu"},{"$i":"noSimCardToLoadContactsFrom","$v":"Nema SIM kartice da se učitaju kontakti"},{"$i":"emergencyNumber","$v":"Broj za hitne slučajeve"},{"$i":"callAirplaneModeMessage","$v":"Da biste uspostavili poziv morate onemogućiti režim u avionu."},{"$i":"callAirplaneModeBtnOk","$v":"U redu"},{"$i":"callAirplaneModeTitle","$v":"Režim u avionu je aktiviran"},{"$i":"numberIsBusyTitle","$v":"Broj je zauzet"},{"$i":"numberIsBusyMessage","$v":"Broj je trenutno zauzet. Pokušajte kasnije."},{"$i":"fdnIsActiveTitle","$v":"FDN je aktivan"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fixed Dialing Numbers) je aktiviran i sledeći broj nije u Vašoj FDN listi: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Da biste uspostavili poziv, telefon mora biti povezan na mrežu."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Hitni pozivi nisi omogućeni u ovoj mreži."},{"$i":"emergencyDialogBtnOk","$v":"U redu"},{"$i":"emergencyDialogTitle","$v":"Nema mrežne veze"},{"$i":"invalidNumberToDialTitle","$v":"Neispravan broj telefona"},{"$i":"invalidNumberToDialMessage","$v":"Broj telefona koji pozivate nije validan."},{"$i":"unableToCallTitle","$v":"Ne mogu da uspostavim poziv"},{"$i":"unableToCallMessage","$v":"Ne mogu da uspostavim poziv. Ako već pozivate, prekinite poziv."},{"$i":"otherConnectionInUseTitle","$v":"Druga veza se koristi"},{"$i":"otherConnectionInUseMessage","$v":"Imate aktivan poziv na drugoj vezi. Možete da koristite samo jednu vezu istovremeno."},{"$i":"callBarredByTheOperatorMessage","$v":"Poziv je blokiran od strane operatera"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobilni"},{"$i":"phone_type_home","$v":"Kućni"},{"$i":"phone_type_work","$v":"Poslovni"},{"$i":"phone_type_personal","$v":"Lični"},{"$i":"phone_type_fax_home","$v":"Kućni faks"},{"$i":"phone_type_fax_office","$v":"Kancelarijski faks"},{"$i":"phone_type_fax_other","$v":"Drugi faks"},{"$i":"phone_type_other","$v":"Ostalo"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobilni, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Kućni, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Poslovni, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Lični, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Kućni faks, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Kancelarijski faks, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Drugi faks, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Ostalo, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Otkaži"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Pozovi ",{"t":"idOrVar","v":"phoneNumber"}," preko"]},{"$i":"gaia-sim-picker-select-sim","$v":"Izaberi SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(podrazumevan)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Namn"},{"$i":"mobile","$v":"Mobil"},{"$i":"home","$v":"Hem"},{"$i":"work","$v":"Arbete"},{"$i":"personal","$v":"Privat"},{"$i":"faxHome","$v":"Fax hem"},{"$i":"faxOffice","$v":"Fax kontor"},{"$i":"faxOther","$v":"Fax övrig"},{"$i":"another","$v":"Ytterligare"},{"$i":"other","$v":"Övrigt"},{"$i":"customTag","placeholder":"Anpassad"},{"$i":"current","$v":"Aktuell"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Fel"},{"$i":"ok","$v":"OK"},{"$i":"cancel","$v":"Avbryt"},{"$i":"emergency-call-only","$v":"Endast nödsamtal"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," är inte ett nödsamtalsnummer."]},{"$i":"ice-contacts-bar-text","$v":"ICE kontakter - I en nödsituation"},{"$i":"ice-contacts-overlay-title","$v":"ICE kontakter"},{"$i":"phoneNumberInput","ariaLabel":"Telefonnummer"},{"$i":"keypadDelete","ariaLabel":"Ta bort"},{"$i":"voiceMailKey","ariaLabel":"Röstbrevlåda"},{"$i":"asterisk","ariaLabel":"Asterisk"},{"$i":"hashSign","ariaLabel":"Hash-tecken"},{"$i":"keypadCancel","$v":"Avbryt"},{"$i":"loadingSimContacts","$v":"Laddar kontakter från SIM-kort…"},{"$i":"noContactsWereFound","$v":"Inga kontakter hittades"},{"$i":"noContactsFoundDialogOk","$v":"Ok"},{"$i":"noSimCardToLoadContactsFrom","$v":"Inget SIM-kort att ladda kontakter från"},{"$i":"emergencyNumber","$v":"Nödnummer"},{"$i":"callAirplaneModeMessage","$v":"För att ringa ett samtal måste du inaktivera flygplansläge i inställningar."},{"$i":"callAirplaneModeBtnOk","$v":"OK"},{"$i":"callAirplaneModeTitle","$v":"Flygplansläge aktiverat"},{"$i":"numberIsBusyTitle","$v":"Numret är upptaget"},{"$i":"numberIsBusyMessage","$v":"Numret är upptaget. Försök igen senare."},{"$i":"fdnIsActiveTitle","$v":"FDN aktiv"},{"$i":"fdnIsActiveMessage","$v":["FDN (Fasta nummer) är aktiverad och följande nummer finns inte i din FDN lista: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"För att ringa ett samtal, måste telefonen vara ansluten till ett mobilnät."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Nödsamtal är inte tillåtna i nätet."},{"$i":"emergencyDialogBtnOk","$v":"OK"},{"$i":"emergencyDialogTitle","$v":"Ingen nätverksanslutning"},{"$i":"invalidNumberToDialTitle","$v":"Ogiltigt telefonnummer"},{"$i":"invalidNumberToDialMessage","$v":"Telefonnumret du ringer är inte giltigt."},{"$i":"unableToCallTitle","$v":"Kan inte ringa ett samtal nu"},{"$i":"unableToCallMessage","$v":"Det går inte att ringa. Om du redan ringer, vänligen lägg på först."},{"$i":"otherConnectionInUseTitle","$v":"Annan anslutning används"},{"$i":"otherConnectionInUseMessage","$v":"Du har ett pågående samtal på en annan anslutning. Du kan bara använda en anslutning i taget."},{"$i":"callBarredByTheOperatorMessage","$v":"Samtal hindrades av operatören"},{"$i":"connectingEllipsis","$v":"Ansluter…"},{"$i":"phone_type_mobile","$v":"Mobil"},{"$i":"phone_type_home","$v":"Hem"},{"$i":"phone_type_work","$v":"Arbete"},{"$i":"phone_type_personal","$v":"Personlig"},{"$i":"phone_type_fax_home","$v":"Fax hem"},{"$i":"phone_type_fax_office","$v":"Fax kontor"},{"$i":"phone_type_fax_other","$v":"Fax övrigt"},{"$i":"phone_type_other","$v":"Övrigt"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobil, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Hem, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Arbete, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personlig, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax hem, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax kontor, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax övrigt, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Övrigt, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"Avbryt"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["Ring ",{"t":"idOrVar","v":"phoneNumber"}," via"]},{"$i":"gaia-sim-picker-select-sim","$v":"Välj SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(standard)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"Etiket"},{"$i":"mobile","$v":"Cep"},{"$i":"home","$v":"Ev"},{"$i":"work","$v":"İş"},{"$i":"personal","$v":"Kişisel"},{"$i":"faxHome","$v":"Faks ev"},{"$i":"faxOffice","$v":"Faks iş"},{"$i":"faxOther","$v":"Faks diğer"},{"$i":"another","$v":"Diğer"},{"$i":"other","$v":"Diğer"},{"$i":"customTag","placeholder":"Özel etiket"},{"$i":"current","$v":"Adres"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"Hata"},{"$i":"ok","$v":"Tamam"},{"$i":"cancel","$v":"İptal"},{"$i":"emergency-call-only","$v":"Yalnızca acil arama"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," bir acil durum numarası değil."]},{"$i":"ice-contacts-bar-text","$v":"ICE kişileri - Acil durumda ulaşılacak"},{"$i":"ice-contacts-overlay-title","$v":"ICE kişileri"},{"$i":"phoneNumberInput","ariaLabel":"Telefon numarası"},{"$i":"keypadDelete","ariaLabel":"Sil"},{"$i":"voiceMailKey","ariaLabel":"Telesekreter"},{"$i":"asterisk","ariaLabel":"Yıldız"},{"$i":"hashSign","ariaLabel":"Kare işareti"},{"$i":"keypadCancel","$v":"İptal"},{"$i":"loadingSimContacts","$v":"SIM kart kişileri yükleniyor…"},{"$i":"noContactsWereFound","$v":"Kişi bulunamadı"},{"$i":"noContactsFoundDialogOk","$v":"Tamam"},{"$i":"noSimCardToLoadContactsFrom","$v":"Kişilerin yüklenebileceği bir SIM kart yok"},{"$i":"emergencyNumber","$v":"Acil durum numarası"},{"$i":"callAirplaneModeMessage","$v":"Arama yapmak için ayarlardan uçak modunu kapatmalısınız."},{"$i":"callAirplaneModeBtnOk","$v":"Tamam"},{"$i":"callAirplaneModeTitle","$v":"Uçak modu etkin"},{"$i":"numberIsBusyTitle","$v":"Numara meşgul"},{"$i":"numberIsBusyMessage","$v":"Numara şu anda meşgul. Lütfen daha sonra yeniden deneyin."},{"$i":"fdnIsActiveTitle","$v":"FDN etkin"},{"$i":"fdnIsActiveMessage","$v":["FDN (Sabit Arama Numaraları) etkinleştirilmiş ve bu numara FDN listenizde yer almıyor: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"Arama yapmak için telefon bir şebekeye bağlı olmalıdır."},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"Şebeke, acil durum aramalarına izin vermiyor."},{"$i":"emergencyDialogBtnOk","$v":"Tamam"},{"$i":"emergencyDialogTitle","$v":"Şebeke bağlantısı yok"},{"$i":"invalidNumberToDialTitle","$v":"Geçersiz telefon numarası"},{"$i":"invalidNumberToDialMessage","$v":"Aradığınız telefon numarası geçerli değil."},{"$i":"unableToCallTitle","$v":"Şu anda telefon araması yapılamıyor"},{"$i":"unableToCallMessage","$v":"Arama yapılamıyor. Zaten konuşuyorsanız önce telefonu kapatın."},{"$i":"otherConnectionInUseTitle","$v":"Diğer bağlantı kullanımda"},{"$i":"otherConnectionInUseMessage","$v":"Diğer bağlantıda etkin bir aramanız var. Bir seferde tek bir bağlantıyı kullanabilirsiniz."},{"$i":"callBarredByTheOperatorMessage","$v":"Arama, operatör tarafından engellendi"},{"$i":"connectingEllipsis","$v":"Connecting…"},{"$i":"phone_type_mobile","$v":"Mobile"},{"$i":"phone_type_home","$v":"Home"},{"$i":"phone_type_work","$v":"Work"},{"$i":"phone_type_personal","$v":"Personal"},{"$i":"phone_type_fax_home","$v":"Fax home"},{"$i":"phone_type_fax_office","$v":"Fax office"},{"$i":"phone_type_fax_other","$v":"Fax other"},{"$i":"phone_type_other","$v":"Other"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["Mobile, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["Home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["Work, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["Personal, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["Fax home, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["Fax office, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["Fax other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["Other, ",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},", ",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"İptal"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":[{"t":"idOrVar","v":"phoneNumber"}," numarasını şununla ara"]},{"$i":"gaia-sim-picker-select-sim","$v":"SIM seçin"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(varsayılan)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"标签"},{"$i":"mobile","$v":"移动"},{"$i":"home","$v":"住宅"},{"$i":"work","$v":"工作"},{"$i":"personal","$v":"个人"},{"$i":"faxHome","$v":"住宅传真"},{"$i":"faxOffice","$v":"单位传真"},{"$i":"faxOther","$v":"其他传真"},{"$i":"another","$v":"其他"},{"$i":"other","$v":"其他"},{"$i":"customTag","placeholder":"自定义标签"},{"$i":"current","$v":"当前"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},", ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"错误"},{"$i":"ok","$v":"确定"},{"$i":"cancel","$v":"取消"},{"$i":"emergency-call-only","$v":"仅限紧急呼叫"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," 不是一个紧急号码。"]},{"$i":"ice-contacts-bar-text","$v":"紧急联系人 - 用于紧急情况"},{"$i":"ice-contacts-overlay-title","$v":"紧急联系人"},{"$i":"phoneNumberInput","ariaLabel":"电话号码"},{"$i":"keypadDelete","ariaLabel":"删除"},{"$i":"voiceMailKey","ariaLabel":"语音信箱"},{"$i":"asterisk","ariaLabel":"星号"},{"$i":"hashSign","ariaLabel":"井号"},{"$i":"keypadCancel","$v":"取消"},{"$i":"loadingSimContacts","$v":"正在载入 SIM 卡联系人…"},{"$i":"noContactsWereFound","$v":"未找到联系人"},{"$i":"noContactsFoundDialogOk","$v":"确定"},{"$i":"noSimCardToLoadContactsFrom","$v":"没有 SIM 卡用以加载联系人"},{"$i":"emergencyNumber","$v":"紧急号码"},{"$i":"callAirplaneModeMessage","$v":"您必须在设置中禁用飞行模式才能拨打电话。"},{"$i":"callAirplaneModeBtnOk","$v":"确定"},{"$i":"callAirplaneModeTitle","$v":"飞行模式已开启"},{"$i":"numberIsBusyTitle","$v":"号码正忙"},{"$i":"numberIsBusyMessage","$v":"您拨打的电话正忙。请稍后再拨。"},{"$i":"fdnIsActiveTitle","$v":"固定拨号已启用"},{"$i":"fdnIsActiveMessage","$v":["FDN(固定拨号)已激活,下面的号码不在您的 FDN 列表中:",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"此手机必须已连接到网络才能拨打电话。"},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"当前网络不允许紧急呼叫。"},{"$i":"emergencyDialogBtnOk","$v":"确定"},{"$i":"emergencyDialogTitle","$v":"没有网络连接"},{"$i":"invalidNumberToDialTitle","$v":"无效的电话号码"},{"$i":"invalidNumberToDialMessage","$v":"您所呼叫的电话号码无效。"},{"$i":"unableToCallTitle","$v":"现在无法拨叫电话"},{"$i":"unableToCallMessage","$v":"无法呼叫电话。如果您已经在拨号,请先挂断。"},{"$i":"otherConnectionInUseTitle","$v":"其他正在使用的连接"},{"$i":"otherConnectionInUseMessage","$v":"您的另一个连接正在进行通话。您在同一时间只能使用一个连接。"},{"$i":"callBarredByTheOperatorMessage","$v":"呼叫已被运营商阻止"},{"$i":"connectingEllipsis","$v":"正在连接…"},{"$i":"phone_type_mobile","$v":"手机"},{"$i":"phone_type_home","$v":"家庭"},{"$i":"phone_type_work","$v":"工作"},{"$i":"phone_type_personal","$v":"个人"},{"$i":"phone_type_fax_home","$v":"家庭传真"},{"$i":"phone_type_fax_office","$v":"办公传真"},{"$i":"phone_type_fax_other","$v":"其他传真"},{"$i":"phone_type_other","$v":"其他"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["手机,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["家庭,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["工作,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["个人,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["家庭传真,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["办公传真,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["其他传真,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["其他,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},",",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"取消"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["拨叫 ",{"t":"idOrVar","v":"phoneNumber"}," 通过"]},{"$i":"gaia-sim-picker-select-sim","$v":"选择 SIM 卡"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(默认)"}]

View file

@ -0,0 +1 @@
[{"$i":"label","$v":"標籤"},{"$i":"mobile","$v":"行動電話"},{"$i":"home","$v":"住家"},{"$i":"work","$v":"商務"},{"$i":"personal","$v":"私人"},{"$i":"faxHome","$v":"家用傳真"},{"$i":"faxOffice","$v":"公司傳真"},{"$i":"faxOther","$v":"其他傳真"},{"$i":"another","$v":"另一個"},{"$i":"other","$v":"其他"},{"$i":"customTag","placeholder":"自訂標籤"},{"$i":"current","$v":"目前"},{"$i":"itemWithLabel","$v":[{"t":"idOrVar","v":"label"},": ",{"t":"idOrVar","v":"item"}]},{"$i":"error","$v":"錯誤"},{"$i":"ok","$v":"確定"},{"$i":"cancel","$v":"取消"},{"$i":"emergency-call-only","$v":"僅能撥打緊急號碼"},{"$i":"emergency-call-error","$v":[{"t":"idOrVar","v":"number"}," 不是緊急號碼。"]},{"$i":"ice-contacts-bar-text","$v":"緊急聯絡人"},{"$i":"ice-contacts-overlay-title","$v":"緊急聯絡人"},{"$i":"phoneNumberInput","ariaLabel":"電話號碼"},{"$i":"keypadDelete","ariaLabel":"刪除"},{"$i":"voiceMailKey","ariaLabel":"語音信箱"},{"$i":"asterisk","ariaLabel":"星號"},{"$i":"hashSign","ariaLabel":"井號"},{"$i":"keypadCancel","$v":"取消"},{"$i":"loadingSimContacts","$v":"正在載入 SIM 卡上的聯絡人…"},{"$i":"noContactsWereFound","$v":"找不到聯絡人"},{"$i":"noContactsFoundDialogOk","$v":"確定"},{"$i":"noSimCardToLoadContactsFrom","$v":"無可讀取聯絡人的 SIM 卡"},{"$i":"emergencyNumber","$v":"緊急號碼"},{"$i":"callAirplaneModeMessage","$v":"若要撥打電話,您需要在設定畫面停用飛航模式。"},{"$i":"callAirplaneModeBtnOk","$v":"確定"},{"$i":"callAirplaneModeTitle","$v":"已啟用飛航模式"},{"$i":"numberIsBusyTitle","$v":"號碼忙線中"},{"$i":"numberIsBusyMessage","$v":"您所撥的號碼忙線中,請稍候再撥。"},{"$i":"fdnIsActiveTitle","$v":"固定撥號已啟用"},{"$i":"fdnIsActiveMessage","$v":["已啟用 FDN(固定撥號),下列號碼不在您的固定撥號清單中: ",{"t":"idOrVar","v":"number"}]},{"$i":"emergencyDialogBodyBadNumber","$v":"手機必須連線到通訊網路才能撥打電話。"},{"$i":"emergencyDialogBodyDeviceNotAccepted","$v":"通訊網路不允許撥打緊急電話。"},{"$i":"emergencyDialogBtnOk","$v":"確定"},{"$i":"emergencyDialogTitle","$v":"無網路連線"},{"$i":"invalidNumberToDialTitle","$v":"無效的電話號碼"},{"$i":"invalidNumberToDialMessage","$v":"您撥打的電話號碼無效。"},{"$i":"unableToCallTitle","$v":"目前無法撥號"},{"$i":"unableToCallMessage","$v":"無法撥號,若您正在撥號請先掛斷。"},{"$i":"otherConnectionInUseTitle","$v":"其他使用中的連線"},{"$i":"otherConnectionInUseMessage","$v":"您還有通話進行中,您同時只能使用一個連線。"},{"$i":"callBarredByTheOperatorMessage","$v":"通話被電信業者封鎖"},{"$i":"connectingEllipsis","$v":"撥號中…"},{"$i":"phone_type_mobile","$v":"行動電話"},{"$i":"phone_type_home","$v":"住家"},{"$i":"phone_type_work","$v":"商務"},{"$i":"phone_type_personal","$v":"私人"},{"$i":"phone_type_fax_home","$v":"家用傳真"},{"$i":"phone_type_fax_office","$v":"公司傳真"},{"$i":"phone_type_fax_other","$v":"其他傳真"},{"$i":"phone_type_other","$v":"其他"},{"$i":"phone_type_custom","$v":[{"t":"idOrVar","v":"type"}]},{"$i":"phone_type_mobile_and_carrier","$v":["行動,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_home_and_carrier","$v":["住家,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_work_and_carrier","$v":["工作,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_personal_and_carrier","$v":["個人,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_home_and_carrier","$v":["住家傳真,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_office_and_carrier","$v":["公司傳真,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_fax_other_and_carrier","$v":["其他傳真,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_other_and_carrier","$v":["其他,",{"t":"idOrVar","v":"carrier"}]},{"$i":"phone_type_custom_and_carrier","$v":[{"t":"idOrVar","v":"type"},",",{"t":"idOrVar","v":"carrier"}]},{"$i":"gaia-menu-cancel","$v":"取消"},{"$i":"gaia-sim-picker-dial-via-with-number","$v":["撥打 ",{"t":"idOrVar","v":"phoneNumber"}," 經由"]},{"$i":"gaia-sim-picker-select-sim","$v":"選擇 SIM"},{"$i":"gaia-sim-picker-button","$v":["SIM",{"t":"idOrVar","v":"n"}]},{"$i":"gaia-sim-picker-button-default","$v":"(預設)"}]

View file

@ -0,0 +1 @@
{"name":"EmergencyCall","description":"The emergency call pad","type":"certified","role":"system","launch_path":"/index.html","developer":{"name":"The Gaia Team","url":"https://github.com/mozilla-b2g/gaia"},"orientation":"default","fullscreen":true,"permissions":{"audio-channel-notification":{},"audio-channel-system":{},"themeable":{},"telephony":{},"mobileconnection":{},"phonenumberservice":{},"settings":{"access":"readonly"},"contacts":{"access":"readonly"},"moz-extremely-unstable-and-will-change-webcomponents":{}},"datastores-access":{"ice_contacts":{"readonly":true,"description":"Contains references to in case of emergency contacts"}},"locales":{"ar":{"name":"EmergencyCall","description":"قالب تطبيق انترنت"},"bg":{"name":"Спешно обаждане","description":"Шаблон за уеб приложение"},"bn-BD":{"name":"জরুরী কল","description":"ওয়েব অ্যাপ টেমপ্লেট"},"ca":{"name":"Trucada d'emergència","description":"Plantilla d'aplicació web"},"cs":{"name":"EmergencyCall","description":"Šablona webové aplikace"},"da":{"name":"Nødopkald","description":"Web-app-skabelon"},"de":{"name":"Notruf","description":"Notruf"},"el":{"name":"Κλήση Έκτακτης Ανάγκης","description":"Πρότυπο Web εφαρμογής"},"en-US":{"name":"EmergencyCall","description":"Web app template"},"es":{"name":"Llamada de emergencia","description":"Plantilla web app"},"eu":{"name":"LarrialdiDeia","description":"Web aplikazioaren txantiloia"},"fr":{"name":"Appel d’urgence","description":"Modèle d’application web"},"gl":{"name":"Chamada de emerxencia","description":"Modelo de aplicativo web"},"hr":{"name":"EmergencyCall","description":"Web app template"},"hu":{"name":"Vészhívás","description":"Webapp sablon"},"it":{"name":"Chiamata di emergenza","description":"Modello web app"},"ja":{"name":"緊急通報","description":"Web アプリのテンプレート"},"km":{"name":"ការ​ហៅ​ពេល​អាសន្ន","description":"ពុម្ព​កម្មវិធី​បណ្ដាញ"},"ko":{"name":"긴급통화","description":"웹 앱 템플릿"},"lt":{"name":"Pagalbos skambutis","description":"Pagalbos skambutis"},"mk":{"name":"EmergencyCall","description":"Web app template"},"ms":{"name":"EmergencyCall","description":"Templat app web"},"ne-NP":{"name":"आकस्मिक कल","description":"वेब एप टेम्पलेट"},"nl":{"name":"Noodoproep","description":"Webappsjabloon"},"pa":{"name":"EmergencyCall","description":"ਵੈੱਬ ਐਪ ਨਮੂਨਾ"},"pl":{"name":"Połączenie alarmowe","description":"The emergency call pad"},"pt-BR":{"name":"Chamada de emergência","description":"Template de aplicativo web"},"ro":{"name":"Apel de urgență","description":"Șablon pentru aplicație web"},"ru":{"name":"ЭкстренныйВызов","description":"Шаблон веб-приложения"},"sk":{"name":"Tiesňové volanie","description":"Šablóna webovej aplikácie"},"sq":{"name":"EmergencyCall","description":"Gjedhe aplikacioni Web"},"sr-Cyrl":{"name":"Хитан позив","description":"Шаблон веб апликације"},"sr-Latn":{"name":"Hitan poziv","description":"Šablon veb aplikacije"},"sv-SE":{"name":"Nödsamtal","description":"Webb app mall"},"tr":{"name":"AcilDurumÇağrısı","description":"Web uygulaması şablonu"},"zh-CN":{"name":"紧急呼叫","description":"Web 应用模板"},"zh-TW":{"name":"EmergencyCall","description":"Web app 範本"}},"default_locale":"en-US","icons":{"126":"/style/icons/dialer_126.png"},"origin":"app://emergency-call.gaiamobile.org","version":"2.5"}

View file

@ -0,0 +1 @@
;window.COMPONENTS_BASE_URL='/shared/elements/';

View file

@ -0,0 +1,14 @@
<element name="confirmation-message" extends="form">
<template>
<section>
<h1>Confirmation title</h1>
<p>Confirmation message</p>
</section>
<menu>
<button>Action 1</button>
<button>Action 2</button>
</menu>
</template>
</element>

View file

@ -0,0 +1,12 @@
<element name="contact-in-overlay" extends="button">
<template>
<div class="js-name ci__name ellipsis" dir="auto"></div>
<div class="ci__details">
<span class="js-tel-type ci__tel-type ellipsis" dir="auto"></span>
<span class="js-separator"></span>
<span class="js-tel ellipsis" dir="ltr"></span>
</div>
</template>
</element>

View file

@ -0,0 +1,10 @@
<element name="contact-list-overlay" extends="form">
<template>
<header></header>
<menu id="contact-list">
<button id="contact-list-overlay-cancel" data-l10n-id="cancel">Cancel</button>
</menu>
</template>
</element>

View file

@ -0,0 +1,40 @@
/* Generated by grunt-webfont */
/* Based on https://github.com/endtwist/fontcustom/blob/master/lib/fontcustom/templates/fontcustom.css */
@font-face {
font-family: "gaia-icons";
src: url("fonts/gaia-icons.ttf") format("truetype");
font-weight: 500;
font-style: normal;
}
[data-icon]:before,
.ligature-icons {
font-family: "gaia-icons";
content: attr(data-icon);
display: inline-block;
font-weight: 500;
font-style: normal;
text-decoration: inherit;
text-transform: none;
text-rendering: optimizeLegibility;
font-size: 30px;
-webkit-font-smoothing: antialiased;
}
[data-icon]:not([data-l10n-id]):not([aria-label]):not([aria-hidden="true"]):before {
/* Highlight cases where icons are not localized and still visible to screen
reader */
background: rgba(255, 0, 0, 0.4);
}
[data-icon]:not([data-l10n-id]):not([aria-label]):not([aria-hidden="true"]):after {
background: #333;
color: #fff;
position: absolute;
width: 20rem;
border-radius: 0.5rem;
padding: 0.5rem;
content: "Icon is not localized and is still visible to screen reader. Please add data-l10n-id or aria-label for localization or use aria-hidden to hide the icon from screen reader.";
z-index: 9999;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

View file

@ -0,0 +1,62 @@
'use strict';
/* global ComponentUtils */
window.GaiaMenu = (function(win) {
// Extend from HTMLElement prototype
var proto = Object.create(HTMLElement.prototype);
// Allow baseurl to be overridden (used for demo page)
var baseurl = window.GaiaMenuBaseurl ||
'/shared/elements/gaia_menu/';
proto.createdCallback = function () {
var shadow = this.createShadowRoot();
this._template = template.content.cloneNode(true);
var cancelButton = this._template.querySelector('.gaia-menu-cancel button');
cancelButton.addEventListener('click', function () {
this.hide();
this.dispatchEvent(new CustomEvent('gaiamenu-cancel'));
}.bind(this));
shadow.appendChild(this._template);
ComponentUtils.style.call(this, baseurl);
document.l10n.ready.then(this.localize.bind(this));
document.addEventListener('DOMRetranslated', this.localize.bind(this));
};
proto.localize = function() {
document.l10n.formatValue('gaia-menu-cancel').then(value => {
this.shadowRoot.querySelector('button').textContent = value;
});
};
proto.show = function() {
this.removeAttribute('hidden');
};
proto.hide = function() {
this.setAttribute('hidden', 'hidden');
};
var template = document.createElement('template');
template.innerHTML =
`<form role="dialog" data-type="action">
<content select="header"></content>
<menu>
<content select="button"></content>
<span class="gaia-menu-cancel">
<button>Cancel</button>
</span>
</menu>
</form>`;
// Register and return the constructor
return document.registerElement('gaia-menu', { prototype: proto });
})(window);

View file

@ -0,0 +1,314 @@
/* ----------------------------------
* gaia_menu
* ---------------------------------- */
/* default alignment follows the UI direction, not the content direction */
:-moz-dir(ltr) [dir] { text-align: left; }
:-moz-dir(rtl) [dir] { text-align: right; }
/* Main dialog setup */
gaia-menu {
background-color: #2d2d2d;
overflow: hidden;
position: fixed;
z-index: 100;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 0 0 7rem;
/**
* Using "font-size: 0" to avoid the unwanted visual space (about 3px) created
* by white spaces and line breaks in the code between inline-block elements.
*/
font-size: 0;
color: #fff;
display: block;
transition: transform ease-in-out var(--transition-duration),
visibility var(--transition-duration);
}
gaia-menu[hidden] {
transform: translateY(100%);
visibility: hidden;
}
gaia-menu:before {
content: '';
display: inline-block;
vertical-align: top;
width: 0.1rem;
height: 100%;
margin-inline-start: -0.1rem;
}
header {
-moz-box-sizing: border-box;
font-size: 1.6rem;
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 10;
height: 5rem;
line-height: 4.9rem;
color: #fff;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
overflow: hidden;
font-weight: normal;
padding: 0 3rem;
border-bottom: 0.1rem solid #616262;
}
header h1 {
font-size: 1.6rem;
line-height: 4.9rem;
color: #fff;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
overflow: hidden;
margin: 0;
height: 100%;
font-weight: normal;
}
/* Generic set of actions in toolbar */
header menu.toolbar {
height: 100%;
margin: 0 -3rem;
margin-inline-start: 1rem;
padding: 0;
}
header:-moz-dir(ltr) menu.toolbar { float: right; }
header:-moz-dir(rtl) menu.toolbar { float: left; }
header menu.toolbar a,
header menu.toolbar button {
-moz-box-sizing: border-box;
position: relative;
width: auto;
min-width: 5rem;
height: 4.9rem;
margin-bottom: 0;
padding: 0 1rem;
border-radius: 0;
line-height: 4.9rem;
background: none;
text-align: center;
text-shadow: none;
z-index: 5;
}
header:-moz-dir(ltr) menu.toolbar a,
header:-moz-dir(ltr) menu.toolbar button {
float: left;
}
header:-moz-dir(rtl) menu.toolbar a,
header:-moz-dir(rtl) menu.toolbar button {
float: right;
}
header a,
header button {
border: none;
padding: 0;
overflow: hidden;
font-weight: 400;
font-size: 1.5rem;
line-height: 1.1em;
color: #fff;
border-radius: 0;
text-decoration: none;
}
button::-moz-focus-inner {
outline: none;
border: none;
}
/* Pressed state */
header a:active .icon:after,
header button:active .icon:after,
header menu.toolbar a:active,
header menu.toolbar button:active {
background: #008aaa;
}
/* Disabled state */
header menu.toolbar a[aria-disabled="true"],
header menu.toolbar button[disabled] {
opacity: 0.5;
pointer-events: none;
}
/* Icon definitions */
header .icon {
position: relative;
float: none;
display: inline-block;
vertical-align: top;
width: 4rem;
height: 4.9rem;
margin: 0 -1rem;
background: transparent no-repeat center center / 3rem auto;
font-size: 0;
overflow: hidden;
}
header .icon.icon-close {
background-image: url(images/icons/close.png);
}
header .icon.icon-back {
background-image: url(images/icons/back.png);
}
/* Navigation links (back, cancel, etc) */
header > button,
header > a {
width: 5rem;
height: 4.9rem;
background: none;
overflow: visible;
margin: 0 -1rem;
margin-inline-start: -3rem;
position: relative;
}
header:-moz-dir(ltr) > button,
header:-moz-dir(ltr) > a {
float: left;
}
header:-moz-dir(rtl) > button,
header:-moz-dir(rtl) > a {
float: right;
}
header > button::-moz-focus-inner {
border: 0;
padding: 0;
}
header > button .icon,
header > a .icon {
position: static;
display: block;
width: 3rem;
height: 4.9rem;
margin: 0;
overflow: visible;
font-size: 0;
}
header > button .icon:after,
header > a .icon:after {
content: "";
position: absolute;
offset-inline-start: 0;
top: 0;
z-index: -1;
width: 3rem;
height: 4.9rem;
}
/* Content */
section {
color: #fff;
position: absolute;
top: 7rem;
left: 1.5rem;
right: 1.5rem;
bottom: 2rem;
font-size: 1.6rem;
overflow: scroll;
}
/* Specific component code */
menu {
margin: 0;
padding: 0;
max-height: calc(100% - 13.5rem); /*header(5rem) + footer(7rem) + padding(1.5rem)*/
height: auto;
padding-top: 1.5rem;
overflow: auto;
width: auto;
border: none;
background: none;
position: absolute;
left: 0;
right: 0;
bottom: 7rem;
}
button {
width: calc(100% - 3rem);
height: 4rem;
-moz-box-sizing: border-box;
vertical-align: middle;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
font-weight: normal;
line-height: 4rem;
outline: none;
font-size: 1.6rem;
text-shadow: none;
padding: 0 1.2rem;
margin: 0 1.5rem 1rem;
background: rgba(87, 87, 87, 0.8);
border: none;
border-radius: 0;
position: relative;
color: #fff;
font-family: sans-serif;
font-style: italic;
}
button:-moz-dir(ltr) { text-align: left; }
button:-moz-dir(rtl) { text-align: right; }
span.gaia-menu-cancel {
position: fixed;
width: 100%;
background: #4d4d4d;
height: 7rem;
offset-inline-start: 0;
bottom: 0;
}
span.gaia-menu-cancel button {
position: fixed;
bottom: 0;
offset-inline-start: 0;
color: #333;
background: #d8d8d8;
text-align: center;
border: none;
margin-bottom: 1.5rem;
border-radius: 2rem;
}
button:nth-last-child(2) {
margin-bottom: 1.5rem;
}
/* Press state */
button:active,
span.gaia-menu-cancel button:active {
background: #00aacc;
color: #fff;
}
/* Disabled */
button[disabled] {
background-color: rgba(87, 87, 87, 0.8);
color: rgba(255, 255, 255, 0.4);
opacity: 0.5;
pointer-events: none;
}
button[disabled]:last-child {
background-color: #e7e7e7;
color: #a6a6a6;
opacity: 1;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 B

View file

@ -0,0 +1,185 @@
'use strict';
/* global ComponentUtils, LazyLoader */
/**
* GaiaSimPicker is a helper for dynamically generating menus for selecting SIM
* cards when making calls, sending SMS, etc. It also returns any currently
* in-use SIMs if there is an active call, but only when an app has mozTelephony
* permissions.
*
* Dependencies: gaia-menu web component.
*/
window.GaiaSimPicker = (function(win) {
// Extend from HTMLElement prototype
var proto = Object.create(HTMLElement.prototype);
// Allow baseurl to be overridden (used for demo page)
var baseurl = window.GaiaSimPickerBaseurl ||
'/shared/elements/gaia_sim_picker/';
proto.createdCallback = function() {
var shadow = this.createShadowRoot();
shadow.innerHTML = template;
this._menu = this.shadowRoot.querySelector('gaia-menu');
/**
* Workaround for bug 1100912, to be removed when bug is fixed:
* set internal gaia-menu dir, that's enough for directional-specific
* CSS to kick in.
*/
var updateDir = () => {
this._menu.dir = document.dir || 'ltr';
};
updateDir();
window.addEventListener('localized', updateDir);
LazyLoader.load(['/shared/js/component_utils.js'], function() {
ComponentUtils.style.call(this, baseurl);
}.bind(this));
navigator.mozL10n.ready(this._localizeShadowDom.bind(this));
};
proto._domBuilt = false;
proto._simSelectedCallbacks = [];
proto._dispatchSimSelected = function(cardIndex) {
var simSelectedEvent = new CustomEvent('gaiasimpicker-simselected', {
canBubble: true,
cancelable: true,
detail: {
cardIndex: cardIndex
}
});
if (this.dispatchEvent(simSelectedEvent)) {
// Only call the stored callbacks if the event wasn't preventDefaulted.
proto._simSelectedCallbacks.forEach(function(callback) {
callback(cardIndex);
});
proto._simSelectedCallbacks = [];
}
};
/**
* Localize the component manually as l10n attributes are not supported
* within the shadow dom. See also: bug 1026236.
*/
proto._localizeShadowDom = function() {
navigator.mozL10n.translateFragment(this.shadowRoot);
};
proto.getOrPick = function(defaultCardIndex,
phoneNumber,
simSelectedCallback) {
if (simSelectedCallback) {
this._simSelectedCallbacks.push(simSelectedCallback);
}
if (window.TelephonyHelper) {
var inUseSim = window.TelephonyHelper.getInUseSim();
if (inUseSim !== null) {
this._dispatchSimSelected(inUseSim);
return;
}
}
var dialViaElt = this.shadowRoot.querySelector('#sim-picker-dial-via');
if (phoneNumber) {
navigator.mozL10n.setAttributes(dialViaElt,
'gaia-sim-picker-dial-via-with-number',
{phoneNumber: phoneNumber});
} else {
dialViaElt.setAttribute('data-l10n-id', 'gaia-sim-picker-select-sim');
}
this._buildDom();
this._localizeShadowDom();
var simButtons = this.shadowRoot.querySelectorAll(
'button[data-card-index]');
for (var i = 0; i < simButtons.length; i++) {
if (simButtons[i].dataset.cardIndex == defaultCardIndex) {
simButtons[i].classList.add('is-default');
} else {
simButtons[i].classList.remove('is-default');
}
}
// we want to wait for l10n to happen before we display the UI
LazyLoader.load(['/shared/elements/gaia_menu/script.js'], function() {
navigator.mozL10n.once(function() {
this._menu.show();
this.focus();
}.bind(this));
}.bind(this));
};
proto._buildDom = function() {
if (this._domBuilt) {
return;
}
this._domBuilt = true;
var templateNode = this.shadowRoot.querySelector(
'#sim-picker-button-template');
for (var i = 0; i < navigator.mozIccManager.iccIds.length; i++) {
var clonedNode = templateNode.cloneNode(true);
clonedNode.dataset.cardIndex = i;
clonedNode.addEventListener('click', this);
var button = clonedNode.querySelector('.js-sim-picker-button');
// For example only; l10n will overwrite this.
button.textContent = 'SIM' + (i+1);
navigator.mozL10n.setAttributes(
button, 'gaia-sim-picker-button', {n: i + 1});
templateNode.parentNode.insertBefore(clonedNode, templateNode);
}
templateNode.remove();
};
proto.handleEvent = function(e) {
if (e) {
e.preventDefault();
}
if (e.target.nodeName !== 'BUTTON') {
return;
}
if (e.target.dataset.cardIndex) {
this._dispatchSimSelected(parseInt(e.target.dataset.cardIndex));
} else {
// Clear the stored callbacks anyways since the user must have hit cancel.
this._simSelectedCallbacks = [];
}
this._menu.hide();
};
var stylesheet = baseurl + '../gaia_menu/style.css';
// TODO: We should make this a template node and use template.cloneNode, but
// nested web components don't work yet using this method.
var template = '<style scoped>' +
'@import url(' + stylesheet + ');</style>' +
`<gaia-menu hidden>
<header id="sim-picker-dial-via">Dial 12345 via</header>
<button id="sim-picker-button-template">
<span class="js-sim-picker-button">
SIMX
</span>
<span class="sim-default" data-l10n-id="gaia-sim-picker-button-default">
(default)
</span>
</button>
</gaia-menu>`;
// Register and return the constructor
return document.registerElement('gaia-sim-picker', { prototype: proto });
})(window);

View file

@ -0,0 +1,9 @@
.sim-default {
display: none;
margin-inline-start: 0.15rem;
font-style: italic;
}
.is-default .sim-default {
display: initial;
}

View file

@ -0,0 +1,45 @@
(function(exports) {
'use strict';
/**
* ComponentUtils is a utility which allows us to use web components earlier
* than we should be able to by polyfilling and fixing platform deficiencies.
*/
exports.ComponentUtils = {
/**
* Injects a style.css into both the shadow root and outside the shadow
* root so we can style projected content. Bug 992249.
*/
style: function(baseUrl) { if (window.VulpesCompat) { window.VulpesCompat.componentStyle(this, baseUrl).catch(console.error); return; }
var style = document.createElement('style');
var url = baseUrl + 'style.css';
var self = this;
style.setAttribute('scoped', '');
style.innerHTML = '@import url(' + url + ');';
this.appendChild(style);
this.style.visibility = 'hidden';
// Wait for the stylesheet to load before injecting
// it into the shadow-dom. This is to work around
// bug 1003294, let's review once landed.
style.addEventListener('load', function() {
// Put a clone of the stylesheet into the shadow-dom.
// We have to use two <style> nodes, to work around
// the lack of `:host` (bug 992245) and `:content`
// (bug 992249) selectors. Once we have those we
// can do all our styling from a single style-sheet
// within the shadow-dom.
if (self.shadowRoot) {
self.shadowRoot.appendChild(style.cloneNode(true));
}
self.style.visibility = '';
});
}
};
}(window));

View file

@ -0,0 +1,200 @@
/* exported ConfirmDialog */
'use strict';
var ConfirmDialog = (function() {
var isAnimationPlaying = false;
var isShown = false;
var doc = document; try { if (!document.getElementById("confirmation-message")) doc = parent.document; } catch (_) {}
var screen = doc.getElementById('confirmation-message');
var titleNode = screen.querySelector('h1');
var messageNode = screen.querySelector('p');
var action1Node = screen.querySelector('button:nth-of-type(1)');
var action1Callback;
var action2Node = screen.querySelector('button:nth-of-type(2)');
var action2Callback;
var oldzIndex;
var callBackAndPreventDefault = function callBackAndPreventDefault(ev) {
if (ev.target === action1Node) {
action1Callback();
ev.preventDefault();
return false;
} else if (ev.target === action2Node) {
action2Callback();
ev.preventDefault();
return false;
}
};
var _hide = function _hide() {
// Reset the 'confirmation-message' element and its children to their
// initial values and hide it.
if (!isShown) {
return;
}
titleNode.removeAttribute('data-l10n-id');
titleNode.className = '';
messageNode.removeAttribute('data-l10n-id');
messageNode.className = '';
action1Node.removeAttribute('data-l10n-id');
action1Node.onclick = null;
action2Node.removeAttribute('data-l10n-id');
action2Node.onclick = null;
screen.classList.remove('fade-in');
screen.classList.add('fade-out');
isAnimationPlaying = true;
// Custom event that can be used to apply (screen reader) visibility
// changes.
window.dispatchEvent(new CustomEvent('confirmdialoghiding'));
screen.addEventListener('animationend', function cd_fadeOut(ev) {
action1Node.className = '';
action2Node.className = '';
isAnimationPlaying = false;
screen.removeEventListener('animationend', cd_fadeOut);
screen.classList.add('no-opacity');
screen.classList.add('hide');
isShown = false;
});
};
/**
* Method that shows the dialog
* @param {String} title the title of the dialog. null or empty for
* no title.
* @param {String} msg message for the dialog.
* @param {Object} action1 {title, isDanger, callback} object.
* @param {Object} action2 {title, isDanger, callback} object.
*/
var _show = function _show(title, msg, action1, action2, options) {
var setL10nAttributes = function (element, options){
if ('string' === typeof options) {
document.l10n.setAttributes(element, options);
}
if(options.id) {
document.l10n.setAttributes(element, options.id, options.args);
}
};
if (options && options.zIndex) {
oldzIndex = screen.style.zIndex;
screen.style.zIndex = options.zIndex;
}
else {
oldzIndex = null;
}
if (title) {
setL10nAttributes(titleNode, title);
} else {
titleNode.classList.add('hide');
}
if (msg) {
setL10nAttributes(messageNode, msg);
} else {
messageNode.classList.add('hide');
}
if (action1) {
if (action1.title) {
setL10nAttributes(action1Node, action1.title);
}
if (action1.isDanger) {
action1Node.classList.add('danger');
}
if (action1.isRecommend) {
action1Node.classList.add('recommend');
}
if (action1.callback) {
action1Callback = action1.callback;
action1Node.onclick = callBackAndPreventDefault;
}
if (!action2) {
action2Node.classList.add('hide');
action1Node.classList.add('full');
}
}
if (action2) {
if (action2.title) {
setL10nAttributes(action2Node, action2.title);
}
if (action2.isDanger) {
action2Node.classList.add('danger');
}
if (action2.isRecommend) {
action2Node.classList.add('recommend');
}
if (action2.callback) {
action2Callback = action2.callback;
action2Node.onclick = callBackAndPreventDefault;
}
if (!action1) {
action1Node.classList.add('hide');
action2Node.classList.add('full');
}
}
if (isShown) {
return;
}
screen.classList.remove('hide');
screen.classList.remove('fade-out');
screen.classList.add('fade-in');
isAnimationPlaying = true;
// Custom event that can be used to apply (screen reader) visibility
// changes.
window.dispatchEvent(new CustomEvent('confirmdialogshowing'));
screen.addEventListener('animationend', function cd_fadeIn(ev) {
isAnimationPlaying = false;
screen.removeEventListener('animationend', cd_fadeIn);
screen.classList.remove('no-opacity');
isShown = true;
});
};
return {
hide: function dialog_hide() {
// Reset the 'confirmation-message' element and its children to their
// initial values and hide it.
if (oldzIndex) {
screen.style.zIndex = oldzIndex;
oldzIndex = null;
}
if (!isAnimationPlaying) {
_hide();
return;
}
screen.addEventListener('animationend',
function cd_hideWhenFinished(ev) {
screen.removeEventListener('animationend', cd_hideWhenFinished);
_hide();
}
);
},
/**
* Method that shows the dialog
* @param {String} title the title of the dialog. null or empty for
* no title.
* @param {String} msg message for the dialog.
* @param {Object} action1 {title, isDanger, callback} object.
* @param {Object} action2 {title, isDanger, callback} object.
*/
show: function dialog_show(title, msg, action1, action2, options) {
if (!isAnimationPlaying) {
_show(title, msg, action1, action2, options);
return;
}
screen.addEventListener('animationend',
function cd_showWhenFinished(ev) {
screen.removeEventListener('animationend', cd_showWhenFinished);
_show(title, msg, action1, action2, options);
}
);
}
};
}());

View file

@ -0,0 +1,5 @@
;'use strict';(function(exports){var STORE_NAME='ice_contacts';var store=null;var status='not_initialized';var FIELD='ICE_CONTACTS';function init(){if(store!==null){return Promise.resolve(store);}
if(!navigator.getDataStores){return Promise.reject('No DS supported');}
if(status==='initialising'){document.addEventListener('ice_ready',function ready(){document.removeEventListener('ice_ready',ready);if(store===null){return Promise.reject('Error getting store');}else{return Promise.resolve(store);}});}
status='initialising';return new Promise(function(resolve,reject){navigator.getDataStores(STORE_NAME).then(function(stores){if(!stores||stores.length<0){document.dispatchEvent(new Event('on_ice_ready'));return reject('No DS found');}else{store=stores[0];status='initialised';document.dispatchEvent(new Event('ice_ready'));return resolve(store);}});});}
var ICEStore={setContacts:function(iceContacts){return init().then(function(){return store.put(iceContacts,FIELD).then(function(){return Promise.resolve(iceContacts);});});},getContacts:function(){return init().then(function(){return store.get(FIELD);});},onChange:function(cb){return init().then(function(){store.addEventListener('change',function(){store.get(FIELD).then(cb);});});}};exports.ICEStore=ICEStore;})(window);

View file

@ -0,0 +1,2 @@
;'use strict';function DtmfTone(tone,short,serviceId){this.tone=tone;this.short=short;this.serviceId=serviceId;this.timer=0;}
DtmfTone.kShortToneLength=120;DtmfTone.prototype={play:function dt_play(){clearTimeout(this.timer);navigator.mozTelephony.stopTone(this.serviceId);navigator.mozTelephony.startTone(this.tone,this.serviceId);if(this.short){this.timer=window.setTimeout(function dt_stopTone(serviceId){navigator.mozTelephony.stopTone(serviceId);},DtmfTone.kShortToneLength,this.serviceId);}},stop:function dt_stop(){clearTimeout(this.timer);navigator.mozTelephony.stopTone(this.serviceId);}};

View file

@ -0,0 +1,134 @@
'use strict';
/* globals ConfirmDialog, LazyLoader */
/* exported TelephonyMessages */
var TelephonyMessages = {
/**
* Constants for what message to display when we get a bad number error.
* Depends on the situation.
*/
// Display the regular "invalid number" message, as this is a regular call.
REGULAR_CALL: 0,
// We have no network and/or no SIM, so we can only make emergency calls.
// Display the "no network" message.
NO_NETWORK: 1,
// We are making a call from an emergency call view, so calls can only be
// placed to emergency and ICE numbers. Display the "not an emergency number"
// message.
EMERGENCY_ONLY: 2,
displayMessage: function(message, number) {
var dialogTitle, dialogBody;
switch (message) {
case 'BadNumber':
dialogTitle = 'invalidNumberToDialTitle';
dialogBody = 'invalidNumberToDialMessage';
break;
case 'FlightMode':
dialogTitle = 'callAirplaneModeTitle';
dialogBody = 'callAirplaneModeMessage';
break;
case 'NoNetwork':
dialogTitle = 'emergencyDialogTitle';
dialogBody = 'emergencyDialogBodyBadNumber';
break;
case 'DeviceNotAccepted':
dialogTitle = 'emergencyDialogTitle';
dialogBody = 'emergencyDialogBodyDeviceNotAccepted';
break;
case 'UnableToCall':
dialogTitle = 'unableToCallTitle';
dialogBody = 'unableToCallMessage';
break;
case 'NumberIsBusy':
dialogTitle = 'numberIsBusyTitle';
dialogBody = 'numberIsBusyMessage';
break;
case 'FixedDialingNumbers':
dialogTitle = 'fdnIsActiveTitle';
dialogBody = 'fdnIsActiveMessage';
break;
case 'OtherConnectionInUse':
dialogTitle = 'otherConnectionInUseTitle';
dialogBody = 'otherConnectionInUseMessage';
break;
case 'OperatorDeterminedBarring':
dialogTitle = 'unableToCallTitle';
dialogBody = 'callBarredByTheOperatorMessage';
break;
case 'EmergencyCallOnly':
dialogTitle = 'emergency-call-only';
dialogBody = 'emergency-call-error';
break;
default:
console.error('Invalid message argument'); // Should never happen
return;
}
LazyLoader.load(['/shared/style/confirm.css',
'/shared/js/confirm.js',
document.getElementById('confirmation-message')],
function() {
ConfirmDialog.show(
dialogTitle,
{id: dialogBody, args: {number: number}},
{
title: 'emergencyDialogBtnOk', // Just 'ok' would be better.
callback: function() {
ConfirmDialog.hide();
}
}
);
}
);
},
handleDisconnect: function(reason, number, emergencyOptions) {
if (reason === 'NormalCallClearing') {
return;
}
this.handleError(reason + 'Error', number, emergencyOptions);
},
handleError: function(errorName, number, emergencyOptions) {
// We ignore this error because some networks generate this with
// STK CallControl when calling Voicemail pilots (e.g. TMobile)
if (errorName === 'ModifiedDialError') {
console.log('ModifiedDialError');
return;
}
if (errorName === 'BadNumberError') {
if (emergencyOptions === this.REGULAR_CALL) {
this.displayMessage('BadNumber');
} else if (emergencyOptions === this.NO_NETWORK) {
this.displayMessage('NoNetwork');
} else if (emergencyOptions === this.EMERGENCY_ONLY) {
this.displayMessage('EmergencyCallOnly', number);
} else {
console.error('Unexpected emergency options: ' + emergencyOptions);
}
} else if (errorName === 'DeviceNotAcceptedError') {
this.displayMessage('DeviceNotAccepted');
} else if (errorName === 'RadioNotAvailable') {
this.displayMessage('FlightMode');
} else if (errorName === 'BusyError') {
this.displayMessage('NumberIsBusy');
} else if (errorName === 'FDNBlockedError' ||
errorName === 'FdnCheckFailure') {
this.displayMessage('FixedDialingNumbers', number);
} else if (errorName === 'OtherConnectionInUse') {
this.displayMessage('OtherConnectionInUse');
} else if (errorName === 'OperatorDeterminedBarringError') {
this.displayMessage('OperatorDeterminedBarring');
} else {
// If the call failed for some other reason we should still
// display something to the user. See bug 846403.
console.error('Unexpected error: ', errorName);
this.displayMessage('UnableToCall');
}
},
};

View file

@ -0,0 +1,9 @@
;'use strict';const kMasterVolume=0.5;const kToneVolume=0.7;const kShortPressDuration=0.15;const kAttackDuration=0.025;const kDecayDuration=0.025;const kReleaseDuration=0.05;var TonePlayer={_audioContext:null,_channel:null,_gainNode:null,_playingNodes:[],_maybeTrashAudio:null,_initialized:false,init:function tp_init(channel){var telephony=navigator.mozTelephony;this._reset();this._channel=channel;this._maybeTrashAudio=(function tp_maybeTrashAudio(){var callIsActive=telephony&&(telephony.calls.length||telephony.conferenceGroup.calls.length);if(document.hidden&&!((this._channel==='telephony')&&callIsActive)){this._trashAudio();}}).bind(this);window.addEventListener('visibilitychange',this._maybeTrashAudio);telephony&&telephony.addEventListener('callschanged',this._maybeTrashAudio);this._initialized=true;},teardown:function tp_teardown(){var telephony=navigator.mozTelephony;telephony&&telephony.removeEventListener('callschanged',this._maybeTrashAudio);window.removeEventListener('visibilitychange',this._maybeTrashAudio);this._reset();this._initialized=false;},_reset:function tp_reset(){this._audioContext=null;this._channel=null;this._gainNode=null;this._playingNodes=[];this._maybeTrashAudio=null;},_ensureAudio:function tp_ensureAudio(){if(this._audioContext||!this._initialized){return;}
this._audioContext=new AudioContext();},_trashAudio:function tp_trashAudio(){this.stop();this._audioContext=null;},_startAt:function tp_startAt(frequencies,when,duration){var context=this._audioContext;var sampleRate=context.sampleRate;var envelope=context.createBuffer(1,(duration?duration:0.05)*sampleRate,sampleRate);for(var i=0;i<envelope.length;i++){var factor=kToneVolume;var t=i/sampleRate;if(t<=kAttackDuration){factor=t/kAttackDuration;}else if(t-kAttackDuration<=kDecayDuration){factor=1.0-(1.0-kToneVolume)*(t-kAttackDuration)/kDecayDuration;}
if(!duration){factor-=kToneVolume;}else if(t>duration-kReleaseDuration){factor*=(duration-t)/kReleaseDuration;}
envelope.getChannelData(0)[i]=factor*kMasterVolume;}
var gainNode=context.createGain();gainNode.connect(context.destination);if(!duration){this._gainNode=gainNode;}
var envelopeNode=context.createBufferSource();envelopeNode.buffer=envelope;envelopeNode.start(when);envelopeNode.connect(gainNode.gain);gainNode.gain.setValueAtTime(duration?0.0:kToneVolume*kMasterVolume,0.0);for(i=0;i<frequencies.length;++i){var oscNode=this._audioContext.createOscillator();oscNode.type='sine';oscNode.frequency.value=frequencies[i];oscNode.start(when);if(duration){oscNode.stop(Math.max(when,context.currentTime+0.5)+duration);}else{this._playingNodes.push(oscNode);}
oscNode.connect(gainNode);}},start:function tp_start(frequencies,shortPress){this._ensureAudio();this._startAt(frequencies,0,shortPress?kShortPressDuration:0);},stop:function tp_stop(){if(!this._gainNode){return;}
var context=this._audioContext;var sampleRate=context.sampleRate;var gain=this._gainNode.gain;this._gainNode=null;var ramp=context.createBuffer(1,kReleaseDuration*sampleRate,sampleRate);for(var i=0;i<ramp.length;i++){ramp.getChannelData(0)[i]=(ramp.length-i-1)/ramp.length*kToneVolume*kMasterVolume;}
var rampNode=context.createBufferSource();rampNode.buffer=ramp;rampNode.start();rampNode.connect(gain);gain.setValueAtTime(0.0,0.0);while(this._playingNodes.length){this._playingNodes.pop().stop(context.currentTime+kReleaseDuration+0.5);}},playSequence:function tp_playSequence(sequence){this._ensureAudio();var when=this._audioContext.currentTime+0.2;for(var index=0;index<sequence.length;++index){var step=sequence[index];var frequencies=step.slice(0,2);var duration=step[2]/1000;this._startAt(frequencies,when,duration);when+=duration;}}};

View file

@ -0,0 +1,9 @@
;'use strict';var Utils={prettyDate:function ut_prettyDate(time){var f=Intl.DateTimeFormat(navigator.languages,{hour12:navigator.mozHour12,hour:'numeric',minute:'numeric'});return f.format(new Date(time));},prettyDuration:function(node,duration,l10nPrefix){var elapsed=new Date(duration);var h=elapsed.getUTCHours();var m=elapsed.getUTCMinutes();var s=elapsed.getUTCSeconds();var l10nId=l10nPrefix||'callDuration';var durationL10n={h:h+'',m:m+'',s:s+''};if(l10nId==='callDuration'){durationL10n={h:(h>9?'':'0')+h,m:(m>9?'':'0')+m,s:(s>9?'':'0')+s};}
if(l10nPrefix==='callDurationTextFormat'&&h===0&&m===0){l10nId+='Seconds';}else{l10nId+=h>0?'Hours':'Minutes';}
navigator.mozL10n.setAttributes(node,l10nId,durationL10n);},setHeaderDate:function ut_setHeaderDate(elem,time){var diff=(Date.now()-time)/1000;var day_diff=Math.floor(diff/86400);var formattedTime;if(isNaN(day_diff)){elem.setAttribute('data-l10n-id','incorrectDate');return;}else if(day_diff===0){elem.setAttribute('data-l10n-id','today');return;}else if(day_diff===1){elem.setAttribute('data-l10n-id','yesterday');return;}else if(day_diff<6){formattedTime=(new Date(time)).toLocaleString(navigator.languages,{weekday:'long',});}else{formattedTime=(new Date(time)).toLocaleString(navigator.languages,{year:'2-digit',month:'2-digit',day:'2-digit'});}
elem.removeAttribute('data-l10n-id');elem.textContent=formattedTime;},getPhoneNumberPrimaryInfo:function ut_getPhoneNumberPrimaryInfo(matchingTel,contact){if(contact){if(contact.name&&contact.name.length&&contact.name[0]!==''){return contact.name;}else if(contact.org&&contact.org.length&&contact.org[0]!==''){return contact.org;}}
if(matchingTel){return matchingTel.value;}
return null;},toCamelCase:function ut_toCamelCase(str){return str.replace(/\-(.)/g,function replacer(str,p1){return p1.toUpperCase();});},_phoneTypesL10n:{'mobile':'phone_type_mobile','home':'phone_type_home','work':'phone_type_work','personal':'phone_type_personal','faxHome':'phone_type_fax_home','faxOffice':'phone_type_fax_office','faxOther':'phone_type_fax_other','other':'phone_type_other'},getPhoneNumberAdditionalInfo:function ut_getPhoneNumberAdditionalInfo(matchingTel){var type=matchingTel.type||'mobile';var carrier=matchingTel.carrier;if(Array.isArray(type)){type=type[0];}
var id;var args={};if(this._phoneTypesL10n.hasOwnProperty(type)){id=this._phoneTypesL10n[type];}else{id='phone_type_custom';args.type=type;}
if(carrier){id+='_and_carrier';args.carrier=carrier;}
return{id:id,args:Object.keys(args).length?args:null};},isPhoneType:function ut_isPhoneType(type){return this._phoneTypesL10n.hasOwnProperty(type);}};

View file

@ -0,0 +1,245 @@
;(function(window,undefined){'use strict';function L10nError(message,id,loc){this.name='L10nError';this.message=message;this.id=id;this.loc=loc;}
L10nError.prototype=Object.create(Error.prototype);L10nError.prototype.constructor=L10nError;var io={_load:function(type,url,callback,sync){var xhr=new XMLHttpRequest();var needParse;if(xhr.overrideMimeType){xhr.overrideMimeType(type);}
xhr.open('GET',url,!sync);if(type==='application/json'){if(sync){needParse=true;}else{xhr.responseType='json';}}
xhr.addEventListener('load',function io_onload(e){if(e.target.status===200||e.target.status===0){var res=e.target.response||e.target.responseText;callback(null,needParse?JSON.parse(res):res);}else{callback(new L10nError('Not found: '+url));}});xhr.addEventListener('error',callback);xhr.addEventListener('timeout',callback);try{xhr.send(null);}catch(e){if(e.name==='NS_ERROR_FILE_NOT_FOUND'){callback(new L10nError('Not found: '+url));}else{throw e;}}},load:function(url,callback,sync){return io._load('text/plain',url,callback,sync);},loadJSON:function(url,callback,sync){return io._load('application/json',url,callback,sync);}};function EventEmitter(){}
EventEmitter.prototype.emit=function ee_emit(){if(!this._listeners){return;}
var args=Array.prototype.slice.call(arguments);var type=args.shift();if(!this._listeners[type]){return;}
var typeListeners=this._listeners[type].slice();for(var i=0;i<typeListeners.length;i++){typeListeners[i].apply(this,args);}};EventEmitter.prototype.addEventListener=function ee_add(type,listener){if(!this._listeners){this._listeners={};}
if(!(type in this._listeners)){this._listeners[type]=[];}
this._listeners[type].push(listener);};EventEmitter.prototype.removeEventListener=function ee_rm(type,listener){if(!this._listeners){return;}
var typeListeners=this._listeners[type];var pos=typeListeners.indexOf(listener);if(pos===-1){return;}
typeListeners.splice(pos,1);};function getPluralRule(lang){var locales2rules={'af':3,'ak':4,'am':4,'ar':1,'asa':3,'az':0,'be':11,'bem':3,'bez':3,'bg':3,'bh':4,'bm':0,'bn':3,'bo':0,'br':20,'brx':3,'bs':11,'ca':3,'cgg':3,'chr':3,'cs':12,'cy':17,'da':3,'de':3,'dv':3,'dz':0,'ee':3,'el':3,'en':3,'eo':3,'es':3,'et':3,'eu':3,'fa':0,'ff':5,'fi':3,'fil':4,'fo':3,'fr':5,'fur':3,'fy':3,'ga':8,'gd':24,'gl':3,'gsw':3,'gu':3,'guw':4,'gv':23,'ha':3,'haw':3,'he':2,'hi':4,'hr':11,'hu':0,'id':0,'ig':0,'ii':0,'is':3,'it':3,'iu':7,'ja':0,'jmc':3,'jv':0,'ka':0,'kab':5,'kaj':3,'kcg':3,'kde':0,'kea':0,'kk':3,'kl':3,'km':0,'kn':0,'ko':0,'ksb':3,'ksh':21,'ku':3,'kw':7,'lag':18,'lb':3,'lg':3,'ln':4,'lo':0,'lt':10,'lv':6,'mas':3,'mg':4,'mk':16,'ml':3,'mn':3,'mo':9,'mr':3,'ms':0,'mt':15,'my':0,'nah':3,'naq':7,'nb':3,'nd':3,'ne':3,'nl':3,'nn':3,'no':3,'nr':3,'nso':4,'ny':3,'nyn':3,'om':3,'or':3,'pa':3,'pap':3,'pl':13,'ps':3,'pt':3,'rm':3,'ro':9,'rof':3,'ru':11,'rwk':3,'sah':0,'saq':3,'se':7,'seh':3,'ses':0,'sg':0,'sh':11,'shi':19,'sk':12,'sl':14,'sma':7,'smi':7,'smj':7,'smn':7,'sms':7,'sn':3,'so':3,'sq':3,'sr':11,'ss':3,'ssy':3,'st':3,'sv':3,'sw':3,'syr':3,'ta':3,'te':3,'teo':3,'th':0,'ti':4,'tig':3,'tk':3,'tl':4,'tn':3,'to':0,'tr':0,'ts':3,'tzm':22,'uk':11,'ur':3,'ve':3,'vi':0,'vun':3,'wa':4,'wae':3,'wo':0,'xh':3,'xog':3,'yo':0,'zh':0,'zu':3};function isIn(n,list){return list.indexOf(n)!==-1;}
function isBetween(n,start,end){return typeof n===typeof start&&start<=n&&n<=end;}
var pluralRules={'0':function(){return'other';},'1':function(n){if((isBetween((n%100),3,10))){return'few';}
if(n===0){return'zero';}
if((isBetween((n%100),11,99))){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'2':function(n){if(n!==0&&(n%10)===0){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'3':function(n){if(n===1){return'one';}
return'other';},'4':function(n){if((isBetween(n,0,1))){return'one';}
return'other';},'5':function(n){if((isBetween(n,0,2))&&n!==2){return'one';}
return'other';},'6':function(n){if(n===0){return'zero';}
if((n%10)===1&&(n%100)!==11){return'one';}
return'other';},'7':function(n){if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'8':function(n){if((isBetween(n,3,6))){return'few';}
if((isBetween(n,7,10))){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'9':function(n){if(n===0||n!==1&&(isBetween((n%100),1,19))){return'few';}
if(n===1){return'one';}
return'other';},'10':function(n){if((isBetween((n%10),2,9))&&!(isBetween((n%100),11,19))){return'few';}
if((n%10)===1&&!(isBetween((n%100),11,19))){return'one';}
return'other';},'11':function(n){if((isBetween((n%10),2,4))&&!(isBetween((n%100),12,14))){return'few';}
if((n%10)===0||(isBetween((n%10),5,9))||(isBetween((n%100),11,14))){return'many';}
if((n%10)===1&&(n%100)!==11){return'one';}
return'other';},'12':function(n){if((isBetween(n,2,4))){return'few';}
if(n===1){return'one';}
return'other';},'13':function(n){if((isBetween((n%10),2,4))&&!(isBetween((n%100),12,14))){return'few';}
if(n!==1&&(isBetween((n%10),0,1))||(isBetween((n%10),5,9))||(isBetween((n%100),12,14))){return'many';}
if(n===1){return'one';}
return'other';},'14':function(n){if((isBetween((n%100),3,4))){return'few';}
if((n%100)===2){return'two';}
if((n%100)===1){return'one';}
return'other';},'15':function(n){if(n===0||(isBetween((n%100),2,10))){return'few';}
if((isBetween((n%100),11,19))){return'many';}
if(n===1){return'one';}
return'other';},'16':function(n){if((n%10)===1&&n!==11){return'one';}
return'other';},'17':function(n){if(n===3){return'few';}
if(n===0){return'zero';}
if(n===6){return'many';}
if(n===2){return'two';}
if(n===1){return'one';}
return'other';},'18':function(n){if(n===0){return'zero';}
if((isBetween(n,0,2))&&n!==0&&n!==2){return'one';}
return'other';},'19':function(n){if((isBetween(n,2,10))){return'few';}
if((isBetween(n,0,1))){return'one';}
return'other';},'20':function(n){if((isBetween((n%10),3,4)||((n%10)===9))&&!(isBetween((n%100),10,19)||isBetween((n%100),70,79)||isBetween((n%100),90,99))){return'few';}
if((n%1000000)===0&&n!==0){return'many';}
if((n%10)===2&&!isIn((n%100),[12,72,92])){return'two';}
if((n%10)===1&&!isIn((n%100),[11,71,91])){return'one';}
return'other';},'21':function(n){if(n===0){return'zero';}
if(n===1){return'one';}
return'other';},'22':function(n){if((isBetween(n,0,1))||(isBetween(n,11,99))){return'one';}
return'other';},'23':function(n){if((isBetween((n%10),1,2))||(n%20)===0){return'one';}
return'other';},'24':function(n){if((isBetween(n,3,10)||isBetween(n,13,19))){return'few';}
if(isIn(n,[2,12])){return'two';}
if(isIn(n,[1,11])){return'one';}
return'other';}};var index=locales2rules[lang.replace(/-.*$/,'')];if(!(index in pluralRules)){return function(){return'other';};}
return pluralRules[index];}
var MAX_PLACEABLES=100;var PropertiesParser={patterns:null,entryIds:null,init:function(){this.patterns={comment:/^\s*#|^\s*$/,entity:/^([^=\s]+)\s*=\s*(.*)$/,multiline:/[^\\]\\$/,index:/\{\[\s*(\w+)(?:\(([^\)]*)\))?\s*\]\}/i,unicode:/\\u([0-9a-fA-F]{1,4})/g,entries:/[^\r\n]+/g,controlChars:/\\([\\\n\r\t\b\f\{\}\"\'])/g,placeables:/\{\{\s*([^\s]*?)\s*\}\}/,};},parse:function(ctx,source){if(!this.patterns){this.init();}
var ast=[];this.entryIds=Object.create(null);var entries=source.match(this.patterns.entries);if(!entries){return ast;}
for(var i=0;i<entries.length;i++){var line=entries[i];if(this.patterns.comment.test(line)){continue;}
while(this.patterns.multiline.test(line)&&i<entries.length){line=line.slice(0,-1)+entries[++i].trim();}
var entityMatch=line.match(this.patterns.entity);if(entityMatch){try{this.parseEntity(entityMatch[1],entityMatch[2],ast);}catch(e){if(ctx){ctx._emitter.emit('parseerror',e);}else{throw e;}}}}
return ast;},parseEntity:function(id,value,ast){var name,key;var pos=id.indexOf('[');if(pos!==-1){name=id.substr(0,pos);key=id.substring(pos+1,id.length-1);}else{name=id;key=null;}
var nameElements=name.split('.');if(nameElements.length>2){throw new L10nError('Error in ID: "'+name+'".'+' Nested attributes are not supported.');}
var attr;if(nameElements.length>1){name=nameElements[0];attr=nameElements[1];if(attr[0]==='$'){throw new L10nError('Attribute can\'t start with "$"',id);}}else{attr=null;}
this.setEntityValue(name,attr,key,this.unescapeString(value),ast);},setEntityValue:function(id,attr,key,rawValue,ast){var pos,v;var value=rawValue.indexOf('{{')>-1?this.parseString(rawValue):rawValue;if(attr){pos=this.entryIds[id];if(pos===undefined){v={$i:id};if(key){v[attr]={};v[attr][key]=value;}else{v[attr]=value;}
ast.push(v);this.entryIds[id]=ast.length-1;return;}
if(key){if(typeof(ast[pos][attr])==='string'){ast[pos][attr]={$x:this.parseIndex(ast[pos][attr]),$v:{}};}
ast[pos][attr].$v[key]=value;return;}
ast[pos][attr]=value;return;}
if(key){pos=this.entryIds[id];if(pos===undefined){v={};v[key]=value;ast.push({$i:id,$v:v});this.entryIds[id]=ast.length-1;return;}
if(typeof(ast[pos].$v)==='string'){ast[pos].$x=this.parseIndex(ast[pos].$v);ast[pos].$v={};}
ast[pos].$v[key]=value;return;}
ast.push({$i:id,$v:value});this.entryIds[id]=ast.length-1;},parseString:function(str){var chunks=str.split(this.patterns.placeables);var complexStr=[];var len=chunks.length;var placeablesCount=(len-1)/2;if(placeablesCount>=MAX_PLACEABLES){throw new L10nError('Too many placeables ('+placeablesCount+', max allowed is '+MAX_PLACEABLES+')');}
for(var i=0;i<chunks.length;i++){if(chunks[i].length===0){continue;}
if(i%2===1){complexStr.push({t:'idOrVar',v:chunks[i]});}else{complexStr.push(chunks[i]);}}
return complexStr;},unescapeString:function(str){if(str.lastIndexOf('\\')!==-1){str=str.replace(this.patterns.controlChars,'$1');}
return str.replace(this.patterns.unicode,function(match,token){return unescape('%u'+'0000'.slice(token.length)+token);});},parseIndex:function(str){var match=str.match(this.patterns.index);if(!match){throw new L10nError('Malformed index');}
if(match[2]){return[{t:'idOrVar',v:match[1]},match[2]];}else{return[{t:'idOrVar',v:match[1]}];}}};var KNOWN_MACROS=['plural'];var MAX_PLACEABLE_LENGTH=2500;var rePlaceables=/\{\{\s*(.+?)\s*\}\}/g;var nonLatin1=/[^\x01-\xFF]/;var FSI='\u2068';var PDI='\u2069';function createEntry(node,env){var keys=Object.keys(node);if(typeof node.$v==='string'&&keys.length===2){return node.$v;}
var attrs;for(var i=0,key;key=keys[i];i++){if(key[0]==='$'){continue;}
if(!attrs){attrs=Object.create(null);}
attrs[key]=createAttribute(node[key],env,node.$i+'.'+key);}
return{id:node.$i,value:node.$v!==undefined?node.$v:null,index:node.$x||null,attrs:attrs||null,env:env,dirty:false};}
function createAttribute(node,env,id){if(typeof node==='string'){return node;}
return{id:id,value:node.$v||(node!==undefined?node:null),index:node.$x||null,env:env,dirty:false};}
function format(args,entity){if(typeof entity==='string'){return[{},entity];}
if(entity.dirty){throw new L10nError('Cyclic reference detected: '+entity.id);}
entity.dirty=true;var rv;try{rv=resolveValue({},args,entity.env,entity.value,entity.index);}finally{entity.dirty=false;}
return rv;}
function resolveIdentifier(args,env,id){if(KNOWN_MACROS.indexOf(id)>-1){return[{},env['__'+id]];}
if(args&&args.hasOwnProperty(id)){if(typeof args[id]==='string'||(typeof args[id]==='number'&&!isNaN(args[id]))){return[{},args[id]];}else{throw new L10nError('Arg must be a string or a number: '+id);}}
if(id in env&&id!=='__proto__'){return format(args,env[id]);}
throw new L10nError('Unknown reference: '+id);}
function subPlaceable(locals,args,env,id){var res;try{res=resolveIdentifier(args,env,id);}catch(err){return[{error:err},'{{ '+id+' }}'];}
var value=res[1];if(typeof value==='number'){return res;}
if(typeof value==='string'){if(value.length>=MAX_PLACEABLE_LENGTH){throw new L10nError('Too many characters in placeable ('+
value.length+', max allowed is '+
MAX_PLACEABLE_LENGTH+')');}
if(locals.contextIsNonLatin1||value.match(nonLatin1)){res[1]=FSI+value+PDI;}
return res;}
return[{},'{{ '+id+' }}'];}
function interpolate(locals,args,env,arr){return arr.reduce(function(prev,cur){if(typeof cur==='string'){return[prev[0],prev[1]+cur];}else if(cur.t==='idOrVar'){var placeable=subPlaceable(locals,args,env,cur.v);return[prev[0],prev[1]+placeable[1]];}},[locals,'']);}
function resolveSelector(args,env,expr,index){var selectorName=index[0].v;var selector=resolveIdentifier(args,env,selectorName)[1];if(typeof selector!=='function'){return selector;}
var argValue=index[1]?resolveIdentifier(args,env,index[1])[1]:undefined;if(selector===env.__plural){if(argValue===0&&'zero'in expr){return'zero';}
if(argValue===1&&'one'in expr){return'one';}
if(argValue===2&&'two'in expr){return'two';}}
return selector(argValue);}
function resolveValue(locals,args,env,expr,index){if(!expr){return[locals,expr];}
if(typeof expr==='string'||typeof expr==='boolean'||typeof expr==='number'){return[locals,expr];}
if(Array.isArray(expr)){locals.contextIsNonLatin1=expr.some(function($_){return typeof($_)==='string'&&$_.match(nonLatin1);});return interpolate(locals,args,env,expr);}
if(index){var selector=resolveSelector(args,env,expr,index);if(expr.hasOwnProperty(selector)){return resolveValue(locals,args,env,expr[selector]);}}
if('other'in expr){return resolveValue(locals,args,env,expr.other);}
throw new L10nError('Unresolvable value');}
var Resolver={createEntry:createEntry,format:format,rePlaceables:rePlaceables};function walkContent(node,fn){if(typeof node==='string'){return fn(node);}
if(node.t==='idOrVar'){return node;}
var rv=Array.isArray(node)?[]:{};var keys=Object.keys(node);for(var i=0,key;(key=keys[i]);i++){if(key==='$i'||key==='$x'){rv[key]=node[key];}else{rv[key]=walkContent(node[key],fn);}}
return rv;}
var reAlphas=/[a-zA-Z]/g;var reVowels=/[aeiouAEIOU]/g;var ACCENTED_MAP='\u0226\u0181\u0187\u1E12\u1E16\u0191\u0193\u0126\u012A'+'\u0134\u0136\u013F\u1E3E\u0220\u01FE\u01A4\u024A\u0158'+'\u015E\u0166\u016C\u1E7C\u1E86\u1E8A\u1E8E\u1E90'+'[\\]^_`'+'\u0227\u0180\u0188\u1E13\u1E17\u0192\u0260\u0127\u012B'+'\u0135\u0137\u0140\u1E3F\u019E\u01FF\u01A5\u024B\u0159'+'\u015F\u0167\u016D\u1E7D\u1E87\u1E8B\u1E8F\u1E91';var FLIPPED_MAP='\u2200\u0510\u2183p\u018E\u025F\u05E4HI\u017F'+'\u04FC\u02E5WNO\u0500\xD2\u1D1AS\u22A5\u2229\u0245'+'\uFF2DX\u028EZ'+'[\\]\u1D65_,'+'\u0250q\u0254p\u01DD\u025F\u0183\u0265\u0131\u027E'+'\u029E\u0285\u026Fuodb\u0279s\u0287n\u028C\u028Dx\u028Ez';function makeLonger(val){return val.replace(reVowels,function(match){return match+match.toLowerCase();});}
function replaceChars(map,val){return val.replace(reAlphas,function(match){return map.charAt(match.charCodeAt(0)-65);});}
var reWords=/[^\W0-9_]+/g;function makeRTL(val){return val.replace(reWords,function(match){return'\u202e'+match+'\u202c';});}
var reExcluded=/(%[EO]?\w|\{\s*.+?\s*\}|&[#\w]+;|<\s*.+?\s*>)/;function mapContent(fn,val){if(!val){return val;}
var parts=val.split(reExcluded);var modified=parts.map(function(part){if(reExcluded.test(part)){return part;}
return fn(part);});return modified.join('');}
function Pseudo(id,name,charMap,modFn){this.id=id;this.translate=mapContent.bind(null,function(val){return replaceChars(charMap,modFn(val));});this.name=this.translate(name);}
var PSEUDO={'fr-x-psaccent':new Pseudo('fr-x-psaccent','Runtime Accented',ACCENTED_MAP,makeLonger),'ar-x-psbidi':new Pseudo('ar-x-psbidi','Runtime Bidi',FLIPPED_MAP,makeRTL)};function Locale(id,ctx){this.id=id;this.ctx=ctx;this.isReady=false;this.entries=Object.create(null);this.entries.__plural=getPluralRule(this.isPseudo()?this.ctx.defaultLocale:id);}
Locale.prototype.isPseudo=function(){return this.ctx.qps.indexOf(this.id)!==-1;};var bindingsIO={extra:function(id,ver,path,type,callback,errback){if(type==='properties'){type='text';}
navigator.mozApps.getLocalizationResource(id,ver,path,type).then(callback.bind(null,null),errback);},app:function(id,ver,path,type,callback,errback,sync){switch(type){case'properties':io.load(path,callback,sync);break;case'json':io.loadJSON(path,callback,sync);break;}},};Locale.prototype.build=function L_build(callback){var sync=!callback;var ctx=this.ctx;var self=this;var l10nLoads=ctx.resLinks.length;function onL10nLoaded(err){if(err){ctx._emitter.emit('fetcherror',err);}
if(--l10nLoads<=0){self.isReady=true;if(callback){callback();}}}
if(l10nLoads===0){onL10nLoaded();return;}
function onJSONLoaded(err,json){if(!err&&json){self.addAST(json);}
onL10nLoaded(err);}
function onPropLoaded(err,source){if(!err&&source){var ast=PropertiesParser.parse(ctx,source);self.addAST(ast);}
onL10nLoaded(err);}
var idToFetch=this.isPseudo()?ctx.defaultLocale:this.id;var appVersion=null;var source='app';if(typeof(navigator)!=='undefined'){source=navigator.mozL10n._config.localeSources[this.id]||'app';appVersion=navigator.mozL10n._config.appVersion;}
for(var i=0;i<ctx.resLinks.length;i++){var resLink=decodeURI(ctx.resLinks[i]);var path=resLink.replace('{locale}',idToFetch);var type=path.substr(path.lastIndexOf('.')+1);var cb;switch(type){case'json':cb=onJSONLoaded;break;case'properties':cb=onPropLoaded;break;}
bindingsIO[source](this.id,appVersion,path,type,cb,onL10nLoaded,sync);}};function createPseudoEntry(node,entries){return Resolver.createEntry(walkContent(node,PSEUDO[this.id].translate),entries);}
Locale.prototype.addAST=function(ast){var createEntry=this.isPseudo()?createPseudoEntry.bind(this):Resolver.createEntry;for(var i=0;i<ast.length;i++){this.entries[ast[i].$i]=createEntry(ast[i],this.entries);}};function Context(id){this.id=id;this.isReady=false;this.isLoading=false;this.defaultLocale='en-US';this.availableLocales=[];this.supportedLocales=[];this.qps=[];this.resLinks=[];this.locales={};this._emitter=new EventEmitter();this._ready=new Promise(this.once.bind(this));}
function reportMissing(id,err){this._emitter.emit('notfounderror',err);return id;}
function getWithFallback(id){var cur=0;var loc;var locale;while(loc=this.supportedLocales[cur]){locale=this.getLocale(loc);if(!locale.isReady){locale.build(null);}
var entry=locale.entries[id];if(entry===undefined){cur++;reportMissing.call(this,id,new L10nError('"'+id+'"'+' not found in '+loc+' in '+this.id,id,loc));continue;}
return entry;}
throw new L10nError('"'+id+'"'+' missing from all supported locales in '+this.id,id);}
function formatTuple(args,entity){try{return Resolver.format(args,entity);}catch(err){this._emitter.emit('resolveerror',err);var locals={error:err};return[locals,entity.id];}}
function formatValue(args,entity){if(typeof entity==='string'){return entity;}
return formatTuple.call(this,args,entity)[1];}
function formatEntity(args,entity){var entityTuple=formatTuple.call(this,args,entity);var value=entityTuple[1];var formatted={value:value,attrs:null,};if(entity.attrs){formatted.attrs=Object.create(null);}
for(var key in entity.attrs){var attrTuple=formatTuple.call(this,args,entity.attrs[key]);formatted.attrs[key]=attrTuple[1];}
return formatted;}
function formatAsync(fn,id,args){return this._ready.then(getWithFallback.bind(this,id)).then(fn.bind(this,args),reportMissing.bind(this,id));}
Context.prototype.formatValue=function(id,args){return formatAsync.call(this,formatValue,id,args);};Context.prototype.formatEntity=function(id,args){return formatAsync.call(this,formatEntity,id,args);};function legacyGet(fn,id,args){if(!this.isReady){throw new L10nError('Context not ready');}
var entry;try{entry=getWithFallback.call(this,id);}catch(err){if(err.loc){throw err;}
reportMissing.call(this,id,err);return'';}
return fn.call(this,args,entry);}
Context.prototype.get=function(id,args){return legacyGet.call(this,formatValue,id,args);};Context.prototype.getEntity=function(id,args){return legacyGet.call(this,formatEntity,id,args);};Context.prototype.getLocale=function getLocale(code){var locales=this.locales;if(locales[code]){return locales[code];}
return locales[code]=new Locale(code,this);};function negotiate(available,requested,defaultLocale){var supportedLocale;for(var i=0;i<requested.length;i++){var locale=requested[i];if(available.indexOf(locale)!==-1){supportedLocale=locale;break;}}
if(!supportedLocale||supportedLocale===defaultLocale){return[defaultLocale];}
return[supportedLocale,defaultLocale];}
function freeze(supported){var locale=this.getLocale(supported[0]);if(locale.isReady){setReady.call(this,supported);}else{locale.build(setReady.bind(this,supported));}}
function setReady(supported){this.supportedLocales=supported;this.isReady=true;this._emitter.emit('ready');}
Context.prototype.registerLocales=function(defLocale,available){if(defLocale){this.defaultLocale=defLocale;}
this.availableLocales=[this.defaultLocale];this.qps=Object.keys(PSEUDO);if(available){for(var i=0,loc;loc=available[i];i++){if(this.availableLocales.indexOf(loc)===-1){this.availableLocales.push(loc);var pos=this.qps.indexOf(loc);if(pos!==-1){this.qps.splice(pos,1);}}}}};Context.prototype.requestLocales=function requestLocales(){if(this.isLoading&&!this.isReady){throw new L10nError('Context not ready');}
this.isLoading=true;var requested=Array.prototype.slice.call(arguments);if(requested.length===0){throw new L10nError('No locales requested');}
var supported=negotiate(this.availableLocales.concat(this.qps),requested,this.defaultLocale);if(this.supportedLocales[0]!==supported[0]){freeze.call(this,supported);}};Context.prototype.addEventListener=function(type,listener){this._emitter.addEventListener(type,listener);};Context.prototype.removeEventListener=function(type,listener){this._emitter.removeEventListener(type,listener);};Context.prototype.ready=function(callback){if(this.isReady){setTimeout(callback);}
this.addEventListener('ready',callback);};Context.prototype.once=function(callback){if(this.isReady){setTimeout(callback);return;}
var callAndRemove=(function(){this.removeEventListener('ready',callAndRemove);callback();}).bind(this);this.addEventListener('ready',callAndRemove);};var allowed={elements:['a','em','strong','small','s','cite','q','dfn','abbr','data','time','code','var','samp','kbd','sub','sup','i','b','u','mark','ruby','rt','rp','bdi','bdo','span','br','wbr'],attributes:{global:['title','aria-label','aria-valuetext','aria-moz-hint'],a:['download'],area:['download','alt'],input:['alt','placeholder'],menuitem:['label'],menu:['label'],optgroup:['label'],option:['label'],track:['label'],img:['alt'],textarea:['placeholder'],th:['abbr']}};var rtlList=['ar','he','fa','ps','ar-x-psbidi','ur'];var nodeObserver=null;var pendingElements=null;var moConfig={attributes:true,characterData:false,childList:true,subtree:true,attributeFilter:['data-l10n-id','data-l10n-args']};navigator.mozL10n={ctx:null,get:function get(id,ctxdata){return navigator.mozL10n.ctx.get(id,ctxdata);},formatValue:function(id,ctxdata){return navigator.mozL10n.ctx.formatValue(id,ctxdata);},formatEntity:function(id,ctxdata){return navigator.mozL10n.ctx.formatEntity(id,ctxdata);},translateFragment:function(fragment){return translateFragment.call(navigator.mozL10n,fragment);},setAttributes:setL10nAttributes,getAttributes:getL10nAttributes,ready:function ready(callback){return navigator.mozL10n.ctx.ready(callback);},once:function once(callback){return navigator.mozL10n.ctx.once(callback);},get readyState(){return navigator.mozL10n.ctx.isReady?'complete':'loading';},language:{set code(lang){navigator.mozL10n.ctx.requestLocales(lang);},get code(){return navigator.mozL10n.ctx.supportedLocales[0];},get direction(){return getDirection(navigator.mozL10n.ctx.supportedLocales[0]);}},qps:PSEUDO,_config:{appVersion:null,localeSources:Object.create(null),isPretranslated:false,},_getInternalAPI:function(){return{Error:L10nError,Context:Context,Locale:Locale,Resolver:Resolver,getPluralRule:getPluralRule,rePlaceables:rePlaceables,translateDocument:translateDocument,onMetaInjected:onMetaInjected,PropertiesParser:PropertiesParser,walkContent:walkContent,buildLocaleList:buildLocaleList};}};function getDirection(lang){return(rtlList.indexOf(lang)>=0)?'rtl':'ltr';}
var readyStates={loading:0,interactive:1,complete:2};function whenInteractive(callback){if(readyStates[document.readyState]>=readyStates.interactive){callback();return;}
document.addEventListener('readystatechange',function l10n_onrsc(){if(readyStates[document.readyState]>=readyStates.interactive){document.removeEventListener('readystatechange',l10n_onrsc);callback();}});}
function initObserver(){nodeObserver=new MutationObserver(onMutations.bind(navigator.mozL10n));nodeObserver.observe(document,moConfig);}
function init(pretranslate){if(!pretranslate){initObserver();}
initResources.call(navigator.mozL10n);}
function initResources(){var meta={};var nodes=document.head.querySelectorAll('link[rel="localization"],'+'meta[name="availableLanguages"],'+'meta[name="defaultLanguage"],'+'meta[name="appVersion"],'+'script[type="application/l10n"]');for(var i=0,node;node=nodes[i];i++){var type=node.getAttribute('rel')||node.nodeName.toLowerCase();switch(type){case'localization':this.ctx.resLinks.push(node.getAttribute('href'));break;case'meta':onMetaInjected.call(this,node,meta);break;case'script':onScriptInjected.call(this,node);break;}}
var additionalLanguagesPromise;if(navigator.mozApps&&navigator.mozApps.getAdditionalLanguages){additionalLanguagesPromise=navigator.mozApps.getAdditionalLanguages().catch(function(e){console.error('Error while loading getAdditionalLanguages',e);});document.addEventListener('additionallanguageschange',function(evt){registerLocales.call(this,meta,evt.detail);this.ctx.requestLocales.apply(this.ctx,navigator.languages||[navigator.language]);}.bind(this));}else{additionalLanguagesPromise=Promise.resolve();}
additionalLanguagesPromise.then(function(extraLangs){registerLocales.call(this,meta,extraLangs);initLocale.call(this);}.bind(this));}
function registerLocales(meta,extraLangs){var locales=buildLocaleList.call(this,meta,extraLangs);navigator.mozL10n._config.localeSources=locales[1];this.ctx.registerLocales(locales[0],Object.keys(locales[1]));}
function getMatchingLangpack(appVersion,langpacks){for(var i=0,langpack;(langpack=langpacks[i]);i++){if(langpack.target===appVersion){return langpack;}}
return null;}
function buildLocaleList(meta,extraLangs){var loc,lp;var localeSources=Object.create(null);var defaultLocale=meta.defaultLanguage||this.ctx.defaultLocale;if(meta.availableLanguages){for(loc in meta.availableLanguages){localeSources[loc]='app';}}
if(extraLangs){for(loc in extraLangs){lp=getMatchingLangpack(this._config.appVersion,extraLangs[loc]);if(!lp){continue;}
if(!(loc in localeSources)||!meta.availableLanguages[loc]||parseInt(lp.revision)>meta.availableLanguages[loc]){localeSources[loc]='extra';}}}
if(!(defaultLocale in localeSources)){localeSources[defaultLocale]='app';}
return[defaultLocale,localeSources];}
function splitAvailableLanguagesString(str){var langs={};str.split(',').forEach(function(lang){lang=lang.trim().split(':');langs[lang[0]]=parseInt(lang[1]);});return langs;}
function onMetaInjected(node,meta){switch(node.getAttribute('name')){case'availableLanguages':meta.availableLanguages=splitAvailableLanguagesString(node.getAttribute('content'));break;case'defaultLanguage':meta.defaultLanguage=node.getAttribute('content');break;case'appVersion':navigator.mozL10n._config.appVersion=node.getAttribute('content');break;}}
function onScriptInjected(node){var lang=node.getAttribute('lang');var locale=this.ctx.getLocale(lang);locale.addAST(JSON.parse(node.textContent));}
function initLocale(){this.ctx.requestLocales.apply(this.ctx,navigator.languages||[navigator.language]);window.addEventListener('languagechange',function l10n_langchange(){this.ctx.requestLocales.apply(this.ctx,navigator.languages||[navigator.language]);}.bind(this));}
function localizeMutations(mutations){var mutation;var targets=new Set();for(var i=0;i<mutations.length;i++){mutation=mutations[i];if(mutation.type==='childList'){var addedNode;for(var j=0;j<mutation.addedNodes.length;j++){addedNode=mutation.addedNodes[j];if(addedNode.nodeType!==Node.ELEMENT_NODE){continue;}
targets.add(addedNode);}}
if(mutation.type==='attributes'){targets.add(mutation.target);}}
targets.forEach(function(target){if(target.childElementCount){translateFragment.call(this,target);}else if(target.hasAttribute('data-l10n-id')){translateElement.call(this,target);}},this);}
function onMutations(mutations,self){self.disconnect();localizeMutations.call(this,mutations);self.observe(document,moConfig);}
function onReady(){if(!navigator.mozL10n._config.isPretranslated){translateDocument.call(this);}
navigator.mozL10n._config.isPretranslated=false;if(pendingElements){for(var i=0,element;element=pendingElements[i];i++){translateElement.call(this,element);}
pendingElements=null;}
if(!nodeObserver){initObserver();}
fireLocalizedEvent.call(this);}
function fireLocalizedEvent(){var event=new CustomEvent('localized',{'bubbles':false,'cancelable':false,'detail':{'language':this.ctx.supportedLocales[0]}});window.dispatchEvent(event);}
var reOverlay=/<|&#?\w+;/;var reHtml=/[&<>]/g;var htmlEntities={'&':'&amp;','<':'&lt;','>':'&gt;',};function translateDocument(){document.documentElement.lang=this.language.code;document.documentElement.dir=this.language.direction;translateFragment.call(this,document.documentElement);}
function translateFragment(element){if(typeof element.hasAttribute==='function'&&element.hasAttribute('data-l10n-id')){translateElement.call(this,element);}
var nodes=getTranslatableChildren(element);for(var i=0;i<nodes.length;i++){translateElement.call(this,nodes[i]);}}
function setL10nAttributes(element,id,args){element.setAttribute('data-l10n-id',id);if(args){element.setAttribute('data-l10n-args',JSON.stringify(args));}}
function getL10nAttributes(element){return{id:element.getAttribute('data-l10n-id'),args:JSON.parse(element.getAttribute('data-l10n-args'))};}
function getTranslatableChildren(element){return element?element.querySelectorAll('*[data-l10n-id]'):[];}
function camelCaseToDashed(string){if(string==='ariaValueText'){return'aria-valuetext';}
return string.replace(/[A-Z]/g,function(match){return'-'+match.toLowerCase();}).replace(/^-/,'');}
function escapeL10nArgs(match){return htmlEntities[match];}
function translateElement(element){if(!this.ctx.isReady){if(!pendingElements){pendingElements=[];}
pendingElements.push(element);return;}
var l10nId=element.getAttribute('data-l10n-id');if(!l10nId){return false;}
var l10nArgs=element.getAttribute('data-l10n-args');var entity=this.ctx.getEntity(l10nId,l10nArgs?JSON.parse(l10nArgs.replace(reHtml,escapeL10nArgs)):undefined);var value=entity.value;if(typeof value==='string'){if(!reOverlay.test(value)){element.textContent=value;}else{var translation=element.ownerDocument.createElement('template');translation.innerHTML=value;overlayElement(element,translation.content);}}
for(var key in entity.attrs){var attrName=camelCaseToDashed(key);if(isAttrAllowed({name:attrName},element)){element.setAttribute(attrName,entity.attrs[key]);}}}
function overlayElement(sourceElement,translationElement){var result=translationElement.ownerDocument.createDocumentFragment();var k,attr;var childElement;while((childElement=translationElement.childNodes[0])){translationElement.removeChild(childElement);if(childElement.nodeType===Node.TEXT_NODE){result.appendChild(childElement);continue;}
var index=getIndexOfType(childElement);var sourceChild=getNthElementOfType(sourceElement,childElement,index);if(sourceChild){overlayElement(sourceChild,childElement);result.appendChild(sourceChild);continue;}
if(isElementAllowed(childElement)){var sanitizedChild=childElement.ownerDocument.createElement(childElement.nodeName);overlayElement(sanitizedChild,childElement);result.appendChild(sanitizedChild);continue;}
result.appendChild(document.createTextNode(childElement.textContent));}
sourceElement.textContent='';sourceElement.appendChild(result);if(translationElement.attributes){for(k=0,attr;(attr=translationElement.attributes[k]);k++){if(isAttrAllowed(attr,sourceElement)){sourceElement.setAttribute(attr.name,attr.value);}}}}
function isElementAllowed(element){return allowed.elements.indexOf(element.tagName.toLowerCase())!==-1;}
function isAttrAllowed(attr,element){var attrName=attr.name.toLowerCase();var tagName=element.tagName.toLowerCase();if(allowed.attributes.global.indexOf(attrName)!==-1){return true;}
if(!allowed.attributes[tagName]){return false;}
if(allowed.attributes[tagName].indexOf(attrName)!==-1){return true;}
if(tagName==='input'&&attrName==='value'){var type=element.type.toLowerCase();if(type==='submit'||type==='button'||type==='reset'){return true;}}
return false;}
function getNthElementOfType(context,element,index){var nthOfType=0;for(var i=0,child;child=context.children[i];i++){if(child.nodeType===Node.ELEMENT_NODE&&child.tagName===element.tagName){if(nthOfType===index){return child;}
nthOfType++;}}
return null;}
function getIndexOfType(element){var index=0;var child;while((child=element.previousElementSibling)){if(child.tagName===element.tagName){index++;}}
return index;}
var DEBUG=false;navigator.mozL10n.ctx=new Context(window.document?document.URL:null);navigator.mozL10n.ctx.ready(onReady.bind(navigator.mozL10n));navigator.mozL10n.ctx.addEventListener('notfounderror',function reportMissingEntity(e){if(DEBUG||e.loc==='en-US'){console.warn(e.toString());}});if(DEBUG){navigator.mozL10n.ctx.addEventListener('fetcherror',console.error.bind(console));navigator.mozL10n.ctx.addEventListener('parseerror',console.error.bind(console));navigator.mozL10n.ctx.addEventListener('resolveerror',console.error.bind(console));}
if(window.document){navigator.mozL10n._config.isPretranslated=document.documentElement.lang===navigator.language;var forcePretranslate=!navigator.mozL10n._config.isPretranslated;whenInteractive(init.bind(navigator.mozL10n,forcePretranslate));}
document.l10n={setAttributes:navigator.mozL10n.setAttributes,getAttributes:navigator.mozL10n.getAttributes,formatValue:function(id,args){return navigator.mozL10n.formatValue(id,args);},translateFragment:function(frag){return Promise.resolve(navigator.mozL10n.translateFragment(frag));},ready:new Promise(function(resolve){navigator.mozL10n.once(resolve);}),formatValues:function(){var keys=arguments;var resp=keys.map(function(key){if(Array.isArray(key)){return navigator.mozL10n.formatValue(key[0],key[1]);}
return navigator.mozL10n.formatValue(key);});return Promise.all(resp);},requestLanguages:function(langs){navigator.mozL10n.ctx.requestLocales.apply(navigator.mozL10n.ctx,langs);},pseudo:{'fr-x-psaccent':{getName:function(){return Promise.resolve(navigator.mozL10n.qps['fr-x-psaccent'].name);},processString:function(s){return Promise.resolve(navigator.mozL10n.qps['fr-x-psaccent'].translate(s));}},'ar-x-psbidi':{getName:function(){return Promise.resolve(navigator.mozL10n.qps['ar-x-psbidi'].name);},processString:function(s){return Promise.resolve(navigator.mozL10n.qps['ar-x-psbidi'].translate(s));}}},};navigator.mozL10n.ready(function(){document.documentElement.setAttribute('langs',navigator.mozL10n.ctx.supportedLocales.join(' '));});navigator.mozL10n.once(function(){window.addEventListener('localized',function(){document.dispatchEvent(new CustomEvent('DOMRetranslated',{bubbles:false,cancelable:false}));});});})(this);

View file

@ -0,0 +1,11 @@
;'use strict';var LazyLoader=(function(){function LazyLoader(){this._loaded={};this._isLoading={};}
LazyLoader.prototype={_js:function(file,callback){var script=document.createElement('script');script.src=file;script.async=false;script.addEventListener('load',callback);document.head.appendChild(script);this._isLoading[file]=script;},_css:function(file,callback){var style=document.createElement('link');style.type='text/css';style.rel='stylesheet';style.href=file;document.head.appendChild(style);callback();},_html:function(domNode,callback){if(domNode.getAttribute('is')){this.load(['/shared/js/html_imports.js'],function(){HtmlImports.populate(callback);}.bind(this));return;}
for(var i=0;i<domNode.childNodes.length;i++){if(domNode.childNodes[i].nodeType==document.COMMENT_NODE){domNode.innerHTML=domNode.childNodes[i].nodeValue;break;}}
window.dispatchEvent(new CustomEvent('lazyload',{detail:domNode}));callback();},getJSON:function(file,mozSystem){return new Promise(function(resolve,reject){var xhr;if(mozSystem){xhr=new XMLHttpRequest({mozSystem:true});}else{xhr=new XMLHttpRequest();}
xhr.open('GET',file,true);xhr.responseType='json';xhr.onerror=function(error){reject(error);};xhr.onload=function(){if(xhr.response!==null){resolve(xhr.response);}else{reject(new Error('No valid JSON object was found ('+
xhr.status+' '+xhr.statusText+')'));}};xhr.send();});},load:function(files,callback){var deferred={};deferred.promise=new Promise(resolve=>{deferred.resolve=resolve;});if(!Array.isArray(files)){files=[files];}
var loadsRemaining=files.length,self=this;function perFileCallback(file){if(self._isLoading[file]){delete self._isLoading[file];}
self._loaded[file]=true;if(--loadsRemaining===0){deferred.resolve();if(callback){callback();}}}
for(var i=0;i<files.length;i++){var file=files[i];if(this._loaded[file.id||file]){perFileCallback(file);}else if(this._isLoading[file]){this._isLoading[file].addEventListener('load',perFileCallback.bind(null,file));}else{var method,idx;if(typeof file==='string'){method=file.match(/\.([^.]+)$/)[1];idx=file;}else{method='html';idx=file.id;}
this['_'+method](file,perFileCallback.bind(null,idx));}}
return deferred.promise;}};return new LazyLoader();}());

View file

@ -0,0 +1,4 @@
;'use strict';var SettingsListener={_lock:null,_observers:[],getSettingsLock:function sl_getSettingsLock(){if(this._lock&&!this._lock.closed){return this._lock;}
var settings=window.navigator.mozSettings;return(this._lock=settings.createLock());},observe:function sl_observe(name,defaultValue,callback){var settings=window.navigator.mozSettings;if(!settings){window.setTimeout(function(){callback(defaultValue);});return;}
var req;try{req=this.getSettingsLock().get(name);}catch(e){console.warn('Stale lock in settings_listener.js.','See https://bugzilla.mozilla.org/show_bug.cgi?id=793239');this._lock=null;req=this.getSettingsLock().get(name);}
req.addEventListener('success',(function onsuccess(){callback(typeof(req.result[name])!='undefined'?req.result[name]:defaultValue);}));var settingChanged=function settingChanged(evt){callback(evt.settingValue);};settings.addObserver(name,settingChanged);this._observers.push({name:name,callback:callback,observer:settingChanged});},unobserve:function sl_unobserve(name,callback){var settings=window.navigator.mozSettings;var that=this;this._observers.forEach(function(value,index){if(value.name===name&&value.callback===callback){settings.removeObserver(name,value.observer);that._observers.splice(index,1);}});}};

View file

@ -0,0 +1,164 @@
/* exported SimSettingsHelper */
'use strict';
(function(exports) {
/*
* SimSettingsHelper is a helper to provide semantic ways set / get
* mozSettings. It is used by SimCardManager.
*/
var SimSettingsHelper = {
EMPTY_OPTION_TEXT: '--',
EMPTY_OPTION_VALUE: -2,
ALWAYS_ASK_OPTION_VALUE: -1,
_callbacks: {
outgoingCall: [],
outgoingMessages: [],
outgoingData: []
},
observe: function(serviceName, callback) {
var serviceCallbacks = this._callbacks[serviceName];
if (serviceCallbacks) {
serviceCallbacks.push(callback);
}
},
unobserve: function(serviceName, callback) {
var serviceCallbacks = this._callbacks[serviceName];
if (serviceCallbacks) {
var index = serviceCallbacks.indexOf(callback);
if (index > -1) {
serviceCallbacks.splice(index, 1);
}
}
},
getCardIndexFrom: function(serviceName, callback) {
// _get(), _onWhichCard() and _getFromSettingsDB() are internal methods
// and should be used together, so I wrap them inside this method
// and expose them outside the world to make sure developers
// will not call them separately.
this._get(serviceName)._onWhichCard(callback);
},
_get: function(serviceName) {
this.settingKeys = [];
switch (serviceName) {
case 'outgoingCall':
this.settingKeys.push('ril.telephony.defaultServiceId');
break;
case 'outgoingMessages':
this.settingKeys.push('ril.sms.defaultServiceId');
break;
case 'outgoingData':
this.settingKeys.push('ril.data.defaultServiceId');
break;
}
return this;
},
_onWhichCard: function(callback) {
this.settingKeys.forEach(function(key) {
this._getFromSettingsDB(key, callback);
}.bind(this));
},
_getFromSettingsDB: function(key, callback) {
var settings = window.navigator.mozSettings;
var getReq = settings.createLock().get(key);
var done = function done() {
if (callback) {
// if there is no card set on the service,
// we will just use the first card
var previousCardIndex = getReq.result[key] || 0;
callback(previousCardIndex);
}
};
getReq.onsuccess = done;
getReq.onerror = done;
},
setServiceOnCard: function(serviceName, cardIndex) {
// _set(), _on() and _setToSettingsDB() are internal methods
// and should be used together, so I wrap them inside this
// method and expose them outside the world to make sure
// developers will not call them separately.
this._set(serviceName)._on(+cardIndex);
},
_set: function(serviceName) {
// cleanup old keys first
this.settingKeys = [];
switch (serviceName) {
case 'outgoingCall':
this.settingKeys.push('ril.telephony.defaultServiceId');
this.settingKeys.push('ril.voicemail.defaultServiceId');
break;
case 'outgoingMessages':
this.settingKeys.push('ril.sms.defaultServiceId');
break;
case 'outgoingData':
this.settingKeys.push('ril.mms.defaultServiceId');
this.settingKeys.push('ril.data.defaultServiceId');
break;
}
return this;
},
_on: function(cardIndex) {
this.settingKeys.forEach(function(key) {
this._setToSettingsDB(key, cardIndex);
}.bind(this));
},
_setToSettingsDB: function(key, newValue, callback) {
var done = function done() {
if (callback) {
callback();
}
};
var settings = window.navigator.mozSettings;
var getReq = settings.createLock().get(key);
getReq.onsuccess = function() {
var oldValue = getReq.result[key];
if (oldValue !== newValue) {
var setObject = {};
setObject[key] = newValue;
var setReq = settings.createLock().set(setObject);
setReq.onsuccess = done;
setReq.onerror = done;
} else {
done();
}
};
getReq.onerror = done;
},
_addSettingsObservers: function() {
var self = this;
navigator.mozSettings.addObserver('ril.telephony.defaultServiceId',
function(event) {
self._callbacks.outgoingCall.forEach(function(cb) {
cb(event.settingValue);
});
});
navigator.mozSettings.addObserver('ril.sms.defaultServiceId',
function(event) {
self._callbacks.outgoingMessages.forEach(function(cb) {
cb(event.settingValue);
});
});
navigator.mozSettings.addObserver('ril.data.defaultServiceId',
function(event) {
self._callbacks.outgoingData.forEach(function(cb) {
cb(event.settingValue);
});
});
}
};
// add obsersvers
SimSettingsHelper._addSettingsObservers();
exports.SimSettingsHelper = SimSettingsHelper;
})(window);

View file

@ -0,0 +1,321 @@
/* ----------------------------------
* Action menu
* ---------------------------------- */
html[dir="ltr"] [role="dialog"][data-type="action"] [dir],
html[dir="ltr"] [role="dialog"][data-type="action"] button {
text-align: left;
}
html[dir="rtl"] [role="dialog"][data-type="action"] [dir],
html[dir="rtl"] [role="dialog"][data-type="action"] button {
text-align: right;
}
/* Main dialog setup */
[role="dialog"][data-type="action"] {
background: #2d2d2d;
overflow: hidden;
position: fixed;
z-index: 100;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 0 0 7rem;
/**
* Using "font-size: 0" to avoid the unwanted visual space (about 3px) created
* by white spaces and line breaks in the code between inline-block elements.
*/
font-size: 0;
color: #fff;
}
[role="dialog"][data-type="action"]:before {
content: '';
display: inline-block;
vertical-align: top;
width: 0.1rem;
height: 100%;
margin-inline-start: -0.1rem;
}
[role="dialog"][data-type="action"] > header {
box-sizing: border-box;
font-size: 1.6rem;
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 10;
height: 5rem;
line-height: 4.9rem;
color: #fff;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
overflow: hidden;
font-weight: normal;
padding: 0 3rem;
border-bottom: 0.1rem solid #616262;
}
[role="dialog"][data-type="action"] > header * {
overflow: hidden;
text-overflow: ellipsis;
}
[role="dialog"][data-type="action"] > header h1 {
font-size: 1.6rem;
line-height: 4.9rem;
color: #fff;
white-space: nowrap;
text-overflow: ellipsis;
display: block;
overflow: hidden;
margin: 0;
height: 100%;
font-weight: normal;
}
/* Generic set of actions in toolbar */
[role="dialog"][data-type="action"] > header menu[type="toolbar"] {
height: 100%;
margin: 0 -3rem;
margin-inline-start: 1rem;
padding: 0;
}
html[dir="ltr"] [role="dialog"][data-type="action"] > header menu[type="toolbar"] { float: right; }
html[dir="rtl"] [role="dialog"][data-type="action"] > header menu[type="toolbar"] { float: left; }
[role="dialog"][data-type="action"] > header menu[type="toolbar"] a,
[role="dialog"][data-type="action"] > header menu[type="toolbar"] button {
box-sizing: border-box;
position: relative;
width: auto;
min-width: 5rem;
height: 4.9rem;
margin-bottom: 0;
padding: 0 1rem;
border-radius: 0;
line-height: 4.9rem;
background: none;
text-align: center;
text-shadow: none;
z-index: 5;
}
html[dir="ltr"] [role="dialog"][data-type="action"] > header menu[type="toolbar"] a,
html[dir="ltr"] [role="dialog"][data-type="action"] > header menu[type="toolbar"] button {
float: left;
}
html[dir="rtl"] [role="dialog"][data-type="action"] > header menu[type="toolbar"] a,
html[dir="rtl"] [role="dialog"][data-type="action"] > header menu[type="toolbar"] button {
float: right;
}
[role="dialog"][data-type="action"] > header a,
[role="dialog"][data-type="action"] > header button {
border: none;
padding: 0;
overflow: hidden;
font-weight: 400;
font-size: 1.5rem;
line-height: 1.1em;
color: #fff;
border-radius: 0;
text-decoration: none;
}
[role="dialog"][data-type="action"] button::-moz-focus-inner {
outline: none;
border: none;
}
/* Pressed state */
[role="dialog"][data-type="action"] > header a:active .icon:after,
[role="dialog"][data-type="action"] > header button:active .icon:after,
[role="dialog"][data-type="action"] > header menu[type="toolbar"] a:active,
[role="dialog"][data-type="action"] > header menu[type="toolbar"] button:active {
background: #008aaa !important;
}
/* Disabled state */
[role="dialog"][data-type="action"] > header menu[type="toolbar"] a[aria-disabled="true"],
[role="dialog"][data-type="action"] > header menu[type="toolbar"] button[disabled] {
opacity: 0.5;
pointer-events: none;
}
/* Icon definitions */
[role="dialog"][data-type="action"] > header .icon {
position: relative;
float: none;
display: inline-block;
vertical-align: top;
width: 4rem;
height: 4.9rem;
margin: 0 -1rem;
background: transparent no-repeat center center / 3rem auto;
font-size: 0;
overflow: hidden;
}
[role="dialog"][data-type="action"] > header .icon.icon-close {
background-image: url(action_menu/images/icons/close.png);
}
html[dir="ltr"] [role="dialog"][data-type="action"] > header .icon.icon-back {
background-image: url(action_menu/images/icons/left.png);
}
html[dir="rtl"] [role="dialog"][data-type="action"] > header .icon.icon-back {
background-image: url(action_menu/images/icons/right.png);
}
/* Navigation links (back, cancel, etc) */
[role="dialog"][data-type="action"] > header > button,
[role="dialog"][data-type="action"] > header > a {
width: 5rem;
height: 4.9rem;
background: none;
overflow: visible;
margin: 0 -1rem;
margin-inline-start: -3rem;
position: relative;
}
html[dir="ltr"] [role="dialog"][data-type="action"] > header > button,
html[dir="ltr"] [role="dialog"][data-type="action"] > header > a {
float: left;
}
html[dir="rtl"] [role="dialog"][data-type="action"] > header > button,
html[dir="rtl"] [role="dialog"][data-type="action"] > header > a {
float: right;
}
[role="dialog"][data-type="action"] > header > button::-moz-focus-inner {
border: 0;
padding: 0;
}
[role="dialog"][data-type="action"] > header > button .icon,
[role="dialog"][data-type="action"] > header > a .icon {
position: static;
display: block;
width: 3rem;
height: 4.9rem;
margin: 0;
overflow: visible;
font-size: 0;
}
[role="dialog"][data-type="action"] > header > button .icon:after,
[role="dialog"][data-type="action"] > header > a .icon:after {
content: "";
position: absolute;
offset-inline-start: 0;
top: 0;
z-index: -1;
width: 3rem;
height: 4.9rem;
}
/* Content */
[role="dialog"][data-type="action"] > section {
color: #fff;
position: absolute;
top: 7rem;
left: 1.5rem;
right: 1.5rem;
bottom: 2rem;
font-size: 1.6rem;
overflow: scroll;
}
/* Specific component code */
[role="dialog"][data-type="action"] > menu {
margin: 0;
padding: 0;
max-height: calc(100% - 13.5rem); /*header(5rem) + footer(7rem) + padding(1.5rem)*/
height: auto;
padding-top: 1.5rem;
overflow: auto;
width: auto;
border: none;
background: none;
position: absolute;
left: 0;
right: 0;
bottom: 7rem;
}
[role="dialog"][data-type="action"] > menu > button {
width: calc(100% - 3rem);
height: 4rem;
box-sizing: border-box;
vertical-align: middle;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
font-weight: normal;
line-height: 4rem;
outline: none;
font-size: 1.6rem;
text-shadow: none;
padding: 0 1.2rem;
margin: 0 1.5rem 1rem;
background: rgba(87, 87, 87, 0.8);
border: none;
border-radius: 0;
position: relative;
color: #fff;
font-family: sans-serif;
font-style: italic;
}
[role="dialog"][data-type="action"] > menu > .last-button-container {
position: fixed;
width: 100%;
background-color: #4d4d4d;
height: 7rem;
offset-inline-start: 0;
bottom: 0;
}
[role="dialog"][data-type="action"] > menu > .last-button-container button {
width: calc(100% - 3rem);
position: fixed;
bottom: 0;
margin: 0 1.5rem 1.5rem;
offset-inline-start: 0;
color: #333;
background: #d8d8d8;
text-align: center;
border: none;
border-radius: 2rem;
line-height: 4rem;
font-size: 1.6rem;
height: 4rem;
font-family: sans-serif;
font-style: italic;
}
[role="dialog"][data-type="action"] > menu > button:nth-last-child(2) {
margin-bottom: 1.5rem;
}
/* Press state */
[role="dialog"][data-type="action"] > menu button:active {
background: #00aacc;
color: #fff;
}
/* Disabled */
[role="dialog"][data-type="action"] > menu > button[disabled] {
background-color: rgba(87, 87, 87, 0.8);
color: rgba(255, 255, 255, 0.4);
opacity: 0.5;
pointer-events: none;
}
[role="dialog"][data-type="action"] > menu > .last-button-container button[disabled] {
background-color: #e7e7e7;
color: #a6a6a6;
opacity: 1;
}

View file

@ -0,0 +1,48 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Action menu</title>
<meta name="description" content="Presenting a list of actions related to the App content">
<link rel="stylesheet" href="../action_menu.css">
<!--
- This <style> element is only used for the example code;
- it is not required for the real use case.
-->
<style type="text/css">
html, body {
font-family: sans-serif;
margin: 0;
padding: 0;
font-size: 10px;
background-color: #fff;
}
body {
background: none;
}
</style>
</head>
<body role="application">
<p dir="ltr">
<label>
<input type="checkbox"
onchange="document.documentElement.dir = this.checked ? 'rtl' : 'ltr'">
RTL mode
</label>
</p>
<form role="dialog" data-type="action">
<header>
<button><span class="icon icon-close">close</span></button>
<menu type="toolbar">
<button>done</button>
</menu>
<h1>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h1>
</header>
<section>
<p>Curabitur condimentum diam mollis lacus hendrerit congue. Phasellus porttitor orci elit, ac consequat est mollis ut. Ut consequat ipsum a ullamcorper aliquam.</p>
</section>
</form>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 B

View file

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html dir="ltr">
<head>
<meta charset="utf-8">
<title>Action menu</title>
<meta name="description" content="Presenting a list of actions related to the App content">
<link rel="stylesheet" href="../action_menu.css">
<!--
- These <style> and <script> elements are only used for the example code;
- they are not required for the real use case.
-->
<style type="text/css">
html, body {
font-family: sans-serif;
margin: 0;
padding: 0;
font-size: 10px;
background-color: #fff;
}
body {
background: none;
}
</style>
<script>
window.onkeypress = event => {
var dir = document.documentElement.dir;
document.documentElement.dir = (dir === 'ltr') ? 'rtl' : 'ltr';
};
</script>
</head>
<body role="application">
<form role="dialog" data-type="action">
<header><span class="icon icon-back"></span>Title</header> <!-- this header is optional -->
<menu type="toolbar">
<button>Action 1</button>
<button disabled> Action 2 (disabled) </button>
<button> Action 3. </button>
<button> الولايات 4</button>
<button disabled> Action 5 (disabled) </button>
<button> Action 6 </button>
<button> Action 7 </button>
<button disabled> Action 8 (disabled) </button>
<button> Action 9 </button>
<button> Cancel </button>
</menu>
</form>
</body>
</html>

View file

@ -0,0 +1,167 @@
.fade-in {
animation: fade-in 0.2s forwards;
}
.fade-out {
animation: fade-out 0.2s forwards;
}
@keyframes fade-in {
0% { opacity: 0; }
100% { opacity: 1; }
}
@keyframes fade-out {
0% { opacity: 1; }
100% { opacity: 0; }
}
html[dir="ltr"] .app-go-deeper-out {
animation: current-to-left var(--transition-duration) forwards;
}
html[dir="rtl"] .app-go-deeper-out {
animation: current-to-right var(--transition-duration) forwards;
}
html[dir="ltr"] .app-go-deeper-in {
animation: right-to-current var(--transition-duration) forwards;
}
html[dir="rtl"] .app-go-deeper-in {
animation: left-to-current var(--transition-duration) forwards;
}
html[dir="ltr"] .app-go-deeper-back-in {
animation: left-to-current var(--transition-duration) forwards;
}
html[dir="rtl"] .app-go-deeper-back-in {
animation: right-to-current var(--transition-duration) forwards;
}
html[dir="ltr"] .app-go-deeper-back-out {
animation: current-to-right var(--transition-duration) forwards;
}
html[dir="rtl"] .app-go-deeper-back-out {
animation: current-to-left var(--transition-duration) forwards;
}
@keyframes show {
0% { opacity: 0; }
100% { opacity: 1; }
}
@keyframes hide {
0% { opacity: 1; }
100% { opacity: 0; }
}
@keyframes right-to-current {
0% { transform: translateX(100%); }
100% { transform: translateX(0); }
}
@keyframes current-to-left {
0% { transform: translateX(0); }
100% { transform: translateX(-100%); }
}
@keyframes current-to-right {
0% { transform: translateX(0); }
100% { transform: translateX(100%); }
}
@keyframes left-to-current {
/* To pre-render the incoming screen and avoid a flick we are getting if
setting it to 100%. */
0% { transform: translateX(-99.99%); }
100% { transform: translateX(0); }
}
@keyframes header-current-to-left {
0% { transform: translateX(0); }
100% { transform: translateX(-30%); }
}
@keyframes header-left-to-current {
0% { transform: translateX(-30%); }
100% { transform: translateX(0); }
}
.app-go-up-in {
animation: app-go-up-in var(--transition-duration) forwards ease-in;
}
.app-go-up-back-out {
animation: app-go-up-back-out var(--transition-duration) forwards ease-in;
}
@keyframes app-go-up-in {
0% { transform: translateY(100%); }
100% { transform: translateY(0); }
}
@keyframes app-go-up-back-out {
0% { transform: translateY(0); }
100% { transform: translateY(100%); }
}
html[dir="ltr"] .app-go-in {
animation: right-to-current var(--transition-duration) forwards ease-in;
}
html[dir="rtl"] .app-go-in {
animation: left-to-current var(--transition-duration) forwards ease-in;
}
html[dir="ltr"] .app-go-back-out {
animation: current-to-right var(--transition-duration) forwards ease-in;
}
html[dir="rtl"] .app-go-back-out {
animation: current-to-left var(--transition-duration) forwards ease-in;
}
html[dir="ltr"] .move-in-from-forward {
animation: move-left-in var(--transition-duration) forwards;
}
html[dir="rtl"] .move-in-from-forward {
animation: move-right-in var(--transition-duration) forwards;
}
html[dir="ltr"] .move-out-from-forward {
animation: move-left-out var(--transition-duration) forwards;
}
html[dir="rtl"] .move-out-from-forward {
animation: move-right-out var(--transition-duration) forwards;
}
html[dir="ltr"] .move-in-from-backward {
animation: move-right-in var(--transition-duration) forwards;
}
html[dir="rtl"] .move-in-from-backward {
animation: move-left-in var(--transition-duration) forwards;
}
html[dir="ltr"] .move-out-from-backward {
animation: move-right-out var(--transition-duration) forwards;
}
html[dir="rtl"] .move-out-from-backward {
animation: move-left-out var(--transition-duration) forwards;
}
@keyframes move-left-in {
0% { transform: translateX(100%);}
100% { transform: translateX(0);}
}
@keyframes move-left-out {
0% { transform: translateX(0);}
100% { transform: translateX(-100%);}
}
@keyframes move-right-in {
0% { transform: translateX(-100%);}
100% { transform: translateX(0%);}
}
@keyframes move-right-out {
0% { transform: translateX(0%);}
100% { transform: translateX(100%);}
}

View file

@ -0,0 +1,265 @@
/* ----------------------------------
* Confirm
* ---------------------------------- */
/* Main dialog setup */
form[role="dialog"][data-type="confirm"] {
background: #2d2d2d;
overflow: hidden;
position: absolute;
z-index: 100;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding-bottom: 7rem;
font-size: 0;
/* Using font-size: 0; we avoid the unwanted visual space (about 3px)
created by white-spaces and break lines in the code betewen inline-block elements */
color: #fff;
}
html[dir="ltr"] form[role="dialog"][data-type="confirm"] { text-align: left; }
html[dir="rtl"] form[role="dialog"][data-type="confirm"] { text-align: right; }
form[role="dialog"][data-type="confirm"]:before {
content: "";
display: inline-block;
vertical-align: middle;
width: 0.1rem;
height: 100%;
margin-inline-start: -0.1rem;
}
form[role="dialog"][data-type="confirm"] > section {
font-weight: 300;
font-size: 2.2rem;
color: #FAFAFA;
padding: 0 1.5rem;
box-sizing: padding-box;
width: 100%;
display: inline-block;
overflow-y: scroll;
max-height: 100%;
vertical-align: middle;
white-space: normal;
}
form[role="dialog"][data-type="confirm"] h1 {
font-weight: normal;
font-size: 1.6rem;
line-height: 1.5em;
color: #fff;
margin: 0;
padding: 1rem 1.5rem 0;
word-wrap: break-word;
}
/* Menu & buttons setup */
form[role="dialog"][data-type="confirm"] menu {
white-space: nowrap;
margin: 0;
padding: 1.5rem;
background: #4d4d4d;
display: flex;
overflow: hidden;
position: absolute;
left: 0;
right: 0;
bottom: 0;
}
form[role="dialog"][data-type="confirm"] menu button::-moz-focus-inner {
border: none;
outline: none;
margin-top: -0.2rem; /* To fix line-height bug (697451) */
}
form[role="dialog"][data-type="confirm"] menu button {
font-family: sans-serif;
font-style: italic;
width: 100%;
height: 4rem;
margin: 0 0 1rem;
padding: 0 0.2rem;
box-sizing: border-box;
display: inline-block;
vertical-align: middle;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
background: #d8d8d8;
border: none;
border-radius: 2rem;
font-weight: normal;
font-size: 1.6rem;
line-height: 4rem;
color: #333;
text-align: center;
text-shadow: none;
text-decoration: none;
outline: none;
}
/* Recommend */
form[role="dialog"][data-type="confirm"] menu button.recommend {
background-color: #00caf2;
color: #fff;
}
/* Danger */
form[role="dialog"][data-type="confirm"] menu button.danger {
background-color: #e51e1e;
color: #fff;
}
/* Pressed */
form[role="dialog"][data-type="confirm"] menu button:active {
background: #00aacc;
color: #fff;
}
/* Disabled */
form[role="dialog"][data-type="confirm"] > menu > button[disabled] {
background-color: #565656;
color: rgba(255,255,255,0.4);
pointer-events: none;
}
form[role="dialog"][data-type="confirm"] > menu > button[disabled].recommend {
background-color: #006579;
}
form[role="dialog"][data-type="confirm"] > menu > button[disabled].danger {
background-color: #730f0f;
}
button[disabled]::-moz-selection {
-moz-user-select: none;
}
form[role="dialog"][data-type="confirm"] menu button {
margin: 0;
margin-inline-end: 1rem;
}
form[role="dialog"][data-type="confirm"] menu button:last-child {
margin-inline-end: 0;
}
/*
** Specific component code
**
** 1. Text in confirm dialog should not be selectable.
*/
form[role="dialog"][data-type="confirm"] p:nth-child(2) {
margin: 1rem 0 0;
overflow: hidden;
}
form[role="dialog"][data-type="confirm"] p {
word-wrap: break-word;
margin: 0;
padding: 1rem 1.5rem;
border-top: 0.1rem solid #686868;
line-height: 3rem;
-moz-user-select: none; /* 1 */
}
form[role="dialog"][data-type="confirm"] p > span {
font-size: 1.5rem;
display: block;
line-height: 1.7rem;
color: rgba(255,255,255,0.6);
}
form[role="dialog"][data-type="confirm"] p img {
margin-inline-end: 2rem;
}
html[dir="ltr"] form[role="dialog"][data-type="confirm"] p img { float: left; }
html[dir="rtl"] form[role="dialog"][data-type="confirm"] p img { float: right; }
form[role="dialog"][data-type="confirm"] p strong {
display: block;
margin-top: 0.2rem;
font-weight: 300;
}
form[role="dialog"][data-type="confirm"] p small {
font-size: 1.4rem;
font-weight: normal;
color: #cbcbcb;
display: block;
}
form[role="dialog"][data-type="confirm"] dl {
border-top: 0.1rem solid #686868;
margin: 1rem 0 0;
overflow: hidden;
padding-top: 1rem;
font-size: 1.6rem;
line-height: 2.2rem;
}
form[role="dialog"][data-type="confirm"] dl > dt {
clear: both;
width: 7rem;
padding-inline-start: 1.5rem;
font-weight: 500;
text-align: left;
}
html[dir="ltr"] form[role="dialog"][data-type="confirm"] dl > dt { float: left; }
html[dir="rtl"] form[role="dialog"][data-type="confirm"] dl > dt { float: right; text-align: right; }
form[role="dialog"][data-type="confirm"] dl > dd {
padding-inline-end: 1.5rem;
font-weight: 300;
text-overflow: ellipsis;
vertical-align: top;
overflow: hidden;
}
form[role="dialog"][data-type="confirm"] dl > dd > div {
text-overflow: ellipsis;
overflow: hidden;
}
form[role="dialog"][data-type="confirm"] figure {
margin: 1.5rem;
display: flex;
align-items: center;
}
form[role="dialog"][data-type="confirm"] figure img {
padding-inline-end: 1.5rem;
flex-shrink: 0;
}
form[role="dialog"][data-type="confirm"] figure figcaption {
font-size: 2.1rem;
font-weight: 300;
}
form[role="dialog"][data-type="confirm"] ul {
margin: 0;
padding: 2rem 1.5rem;
border-top: 0.1rem solid #686868;
list-style: none;
font-size: 1.6rem;
font-weight: normal;
}
form[role="dialog"][data-type="confirm"] ul li {
word-wrap: break-word;
line-height: 2rem;
padding-bottom: 1.5rem;
}
form[role="dialog"][data-type="confirm"] ul li:last-child {
padding-bottom: 0;
}
form[role="dialog"][data-type="confirm"] ul li ul {
border: none;
margin: 0;
padding: 0;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View file

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html dir="ltr">
<head>
<meta charset="utf-8">
<title>Confirm</title>
<meta name="description" content="Prompts user to take action">
<link rel="stylesheet" href="../confirm.css">
<!--
- These <style> and <script> elements are only used for the example code;
- they are not required for the real use case.
-->
<style type="text/css">
html, body {
font-family: sans-serif;
margin: 0;
padding: 0;
font-size: 10px;
background-color: #fff;
}
body {
background: none;
}
#dir {
position: relative;
z-index: 999;
display: block;
direction: ltr;
background-color: white;
}
#dir input {
vertical-align: middle;
}
</style>
<script>
window.onload = function(){
var input = document.querySelector('#dir input');
input.checked = false;
input.onchange = function() {
document.documentElement.dir = this.checked ? 'rtl' : 'ltr';
};
};
</script>
</head>
<body role="application">
<label id="dir">
<input type="checkbox"> RTL mode
</label>
<form role="dialog" data-type="confirm">
<section>
<h1>Confirmation</h1>
<p>Are you sure you want to delete this contact?</p>
</section>
<menu>
<button>Cancel</button>
<button class="danger">Delete</button>
</menu>
</form>
</body>
</html>

View file

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html dir="ltr">
<head>
<meta charset="utf-8">
<title>Confirm</title>
<meta name="description" content="Prompts user to take action">
<link rel="stylesheet" href="../confirm.css">
<!--
- These <style> and <script> elements are only used for the example code;
- they are not required for the real use case.
-->
<style type="text/css">
html, body {
font-family: sans-serif;
margin: 0;
padding: 0;
font-size: 10px;
background-color: #fff;
}
body {
background: none;
}
#dir {
position: relative;
z-index: 999;
display: block;
direction: ltr;
background-color: white;
}
#dir input {
vertical-align: middle;
}
</style>
<script>
window.onload = function(){
var input = document.querySelector('#dir input');
input.checked = false;
input.onchange = function() {
document.documentElement.dir = this.checked ? 'rtl' : 'ltr';
};
};
</script>
</head>
<body role="application">
<label id="dir">
<input type="checkbox"> RTL mode
</label>
<form role="dialog" data-type="confirm">
<section>
<h1>Confirmation</h1>
<p dir="auto">Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
</section>
<menu>
<button>Cancel</button>
<button class="danger">Delete</button>
</menu>
</form>
</body>
</html>

View file

@ -0,0 +1,64 @@
<!DOCTYPE html>
<html dir="ltr">
<head>
<meta charset="utf-8">
<title>Confirm, w/o title</title>
<meta name="description" content="Prompts user to take action">
<link rel="stylesheet" href="../confirm.css">
<!--
- These <style> and <script> elements are only used for the example code;
- they are not required for the real use case.
-->
<style type="text/css">
html, body {
font-family: sans-serif;
margin: 0;
padding: 0;
font-size: 10px;
background-color: #fff;
}
body {
background: none;
}
#dir {
position: relative;
z-index: 999;
display: block;
direction: ltr;
background-color: white;
}
#dir input {
vertical-align: middle;
}
</style>
<script>
window.onload = function(){
var input = document.querySelector('#dir input');
input.checked = false;
input.onchange = function() {
document.documentElement.dir = this.checked ? 'rtl' : 'ltr';
};
};
</script>
</head>
<body role="application">
<label id="dir">
<input type="checkbox"> RTL mode
</label>
<form role="dialog" data-type="confirm">
<section>
<p dir="auto">Are you sure you want to delete this contact?</p>
</section>
<menu>
<button>Cancel</button>
<button class="danger">Delete</button>
</menu>
</form>
</body>
</html>

View file

@ -0,0 +1,80 @@
/* Overrides building blocks */
#contact-list .contact-item {
height: auto;
padding-top: 1rem;
padding-bottom: 1rem;
}
/* End overrides building blocks */
.contact-item {
flex: 1;
padding: 0 2rem;
min-width: 0;
text-align: left;
}
.contact-item .ci__tel-type:not(:empty) ~ .js-separator::before {
content: ',';
-moz-margin-end: 5px;
}
.contact-item .ci__tel-type:not(:empty) {
min-width: 4rem;
max-width: 10rem;
}
.ci__name {
line-height: 1.9rem;
pointer-events: none;
}
.ci--action-menu .ci__name {
font-size: 1.7rem;
line-height: 2.1rem;
font-weight: 500;
}
.ci__details {
display: flex;
font-size: 1.7rem;
line-height: 2.3rem;
pointer-events: none;
margin-bottom: -0.4rem;
}
.ci--action-menu .ci__details {
font-size: 1.5rem;
}
.ci__mark {
background-color: #94EEE9;
color: unset;
}
.ci--action-menu .ci__mark {
background: #333;
color: #94eee9;
}
.js-tel {
flex-grow: 1;
}
/* FIXME Move to some kind of "building blocks" file? */
.ellipsis {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
margin: 0 auto;
}
/* Override BB styles for LTR */
[role="dialog"][data-type="action"] > menu > button.contact-item {
text-align: left;
}
/* Override BB styles for RTL */
html[dir="rtl"] [role="dialog"][data-type="action"] > menu > button.contact-item,
html[dir="rtl"] .contact-item {
text-align: right;
}

View file

@ -0,0 +1,62 @@
* {
/* By default do not allow any user text selection, only enable for certain
parts on a per-element/region area. We are enabling this at the * level
as opposed to the body level as the -moz-user-select attribute is not
inherited by absolute positioned elements and dialer has several
elements that are absolute positioned that should be non-selectable. */
-moz-user-select: none;
}
html {
font-size: 10px;
}
html,body {
width: 100%;
height: 100%;
overflow: hidden;
margin: 0;
color: white;
background-color: white;
}
#call-log-view > div {
background-color: white;
z-index: 1;
}
.font-light {
font-weight: 300;
}
a {
outline: 0;
}
a:hover, a:active, a:focus {
outline: 0;
}
.hide {
display: none !important;
}
.contact-primary-info {
font-size: calc(15 * 0.226rem);
color: black;
}
.contact-secondary-info {
font-size: calc(6 * 0.226rem);
color: white;
}
.grid-wrapper {
width: 100%;
height: 100%;
}
body.hidden *[data-l10n-id] {
visibility: hidden;
}

View file

@ -0,0 +1,370 @@
/*
* The code is being shared between system/emergency-call/js/keypad.js
* and dialer/js/keypad.js. Be sure to update both files when you commit!
*
* BiDi note: keypads are always displayed in LTR (hardware legacy).
* This stylesheet must *NOT* be mirrored for RTL.
*/
.reset-button {
border: 0;
background: none;
}
.reset-button::-moz-focus-inner {
border: 0;
outline: none;
}
#phone-number-view-container {
width: 100%;
height: 28%;
background: var(--header-background);
text-align: center;
display: flex;
font-weight: 300;
overflow: hidden;
}
#phone-number-view-container .phone-number-view-wrapper-input {
width: 100%;
margin-bottom: 4.5rem;
display: flex;
align-items: center;
padding: 0 1rem 0 2rem;
}
#phone-number-view-container.keypad-visible {
height: calc(100% - 34.5rem);
visibility: hidden;
}
#phone-number-view {
font-size: 4.1rem;
width: 100%;
border: 0;
margin: 0;
background: transparent;
color: var(--header-color);
text-align: left;
cursor: none;
padding: 0;
pointer-events: auto;
-moz-user-select: text;
}
#fake-phone-number-view {
position: absolute;
left: 2rem;
line-height: 0;
visibility: hidden;
}
#keypad-delete {
margin-bottom: 4.5rem;
padding: 0 2.5rem 0 0;
visibility: hidden;
text-align: right;
}
#keypad-delete::before {
content: "";
background: url('keypad/images/keypad/actionicon_dialer_delete.png') no-repeat;
width: 3rem;
height: 2rem;
display: inline-block;
background-size: 100%;
}
#keypad-delete:active {
opacity: 0.6;
}
#keyboard-container {
height: 72%;
padding: 0 1rem;
}
#keypad {
width: 100%;
height: 80%;
display: table;
table-layout: fixed;
}
.keypad-row {
display: table-row;
}
.keypad-key {
display: table-cell;
padding: 1.3rem 0 0 2rem;
box-sizing: border-box;
height: 20%;
vertical-align: middle;
color: #333;
font-weight: 300;
font-size: 5rem;
line-height: 1rem;
overflow: hidden;
text-align: left;
}
.keypad-key span {
width: 1.5rem;
display: inline-block;
overflow: visible;
}
.keypad-key em {
display: inline-block;
font-weight: 300;
font-size: 1.5rem;
color: #038282;
font-style: normal;
width: 4.5rem;
overflow: visible;
text-align: left;
}
.keypad-key.active {
background: #94eee9;
color: #fff;
}
.keypad-key * {
pointer-events: none;
}
#keypad-delete * {
pointer-events: none;
}
.keypad-key .font-size-plus {
font-size: 2rem;
}
.keypad-subicon {
background-repeat: no-repeat;
background-position: center bottom;
-moz-user-select: none;
pointer-events: none;
display: inline-block;
width: 3rem;
height: 2rem;
}
.voicemail {
background-image: url('keypad/images/keypad/actionicon_dialer_voicemail.png');
background-size: 3rem;
background-position: -0.4rem -0.1rem;
}
.asterisk {
width: 4rem;
margin-top: 1rem;
margin-left: 0.2rem;
overflow: visible;
}
.sharp {
font-size: 4.5rem;
width: 4rem;
line-height: 0;
margin-top: -0.5rem;
margin-left: 0.2rem;
overflow: visible;
}
#keypad-callbar {
height: 20%;
display: flex;
flex-direction: row;
align-items: center;
width: 100%;
border-bottom: 0;
border-left: 0;
box-sizing: border-box;
}
.keypad-callbar-button {
position: relative;
width: 9rem;
background: #e7e7e7;
background-size: auto 100%;
border-radius: 2rem;
overflow: hidden;
height: 4rem;
text-align: center;
}
.keypad-callbar-button.cancel {
background: #575757;
line-height: 4rem;
font-size: 1.8rem;
font-style: italic;
}
.keypad-callbar-button.cancel:active {
background: #9ef2e7;
}
#keypad-callbar-call-action {
display: flex;
position: relative;
flex-grow: 1;
align-items: center;
flex-direction: row-reverse;
background-image: url("keypad/images/keypad/actionicon_activecall_pickup.png");
background-color: #00adad;
background-repeat: no-repeat;
background-position: center;
background-size: 4rem 4rem;
border-radius: 2rem;
margin-inline-start: 1rem;
height: 4rem;
}
#keypad-callbar-call-action:active {
background-color: #94eee9;
}
.icon-add-contact::before {
content: "";
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-image: url("keypad/images/keypad/actionicon_activecall_addcontact_40x80.png");
background-repeat: no-repeat;
background-position: top center;
background-size: 4rem 8rem;
}
/* we won't do anything on click but this prevents fluffing/rendering issues */
.icon-add-contact:disabled {
pointer-events: all;
}
.icon-add-contact:disabled::before {
opacity: 0.4;
}
.icon-add-contact:not(:disabled):active::before {
background-position: center -4rem;
}
.js-sim-indication {
display: none;
font-size: 1.3rem;
text-align: right;
margin-right: 0.6rem;
color: #fff;
}
.has-preferred-sim .js-sim-indication {
display: initial;
}
.has-preferred-sim #keypad-callbar-call-action:after {
content: "";
position: absolute;
width: 1.4rem;
height: 1rem;
bottom: 0;
right: 1.7rem;
background-image: url("/shared/elements/gaia_sim_picker/images/long-tap-indicator.png");
background-repeat: no-repeat;
background-size: 1.4rem 1rem;
}
#keypad-hidebar {
border: 0;
box-sizing: border-box;
display: flex;
justify-content: space-around;
height: 7.5rem;
}
.kh__button {
width: 5rem;
height: 5rem;
background: #ded9d6;
border: none;
border-radius: 100%;
margin-top: 1rem;
position: relative;
}
.kh__button::before {
content: "";
position: absolute;
top: .5rem;
left: .5rem;
width: 4rem;
height: 4rem;
background-repeat: no-repeat;
background-position: 0 0;
background-size: cover;
}
.kh__button:active::before {
background-position: 0 -4rem;
}
.kh__button:active {
background-color: #9ef2e7;
}
.kh__button.active-state::before {
background-position: 0 -8rem;
}
.kh__button--mute::before {
background-image: url('keypad/images/keypad/actionicon_activecall_mute.png');
}
.kh__button--hide::before {
background-image: url('keypad/images/keypad/actionicon_activecall_dismisskeyboard.png');
}
.kh__call-end-button {
width: 6.5rem;
height: 6.5rem;
background: #e00;
border: none;
border-radius: 100%;
position: relative;
}
.kh__call-end-button::before {
content: "";
position: absolute;
top: 1.1rem;
left: 1.2rem;
width: 4rem;
height: 4rem;
background-image: url('keypad/images/actionicon_activecall_hangup.png');
background-repeat: no-repeat;
background-position: 0 0;
background-size: cover;
}
.kh__call-end-button:active::before {
background-position: 1.2rem 6rem;
}
.phone-number-font {
color: #fff;
}
.full-height {
height: 100%;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

View file

@ -0,0 +1,59 @@
/*
* Extend action menu as an overlay
*/
form.overlay {
font-size: 1.5rem;
opacity: 1;
visibility: hidden;
transform: translateY(-100%);
transition: transform var(--transition-duration) ease-in-out,
visibility var(--transition-duration);
}
form.overlay > menu {
height: 100%;
}
form.overlay.display {
transform: translateY(0%);
visibility: visible;
}
form.overlay menu ul {
height: calc(100% - 13rem);
overflow: auto;
margin-top: 5rem;
padding: 0;
line-height: 2.4rem;
list-style: none outside none;
}
form.overlay menu ul > li,
form.overlay menu ul > section {
height: 4.5rem;
padding: 1rem 2rem;
font-size: 1.7rem;
position: relative;
}
form.overlay menu ul > li:after,
form.overlay menu ul > section:after {
content: ' ';
border-bottom: 0.1rem solid #666;
display: block;
position: absolute;
left: 1rem;
bottom: 0;
right: 1rem;
}
form.overlay menu ul > li:last-child:after,
form.overlay menu ul > section:last-child:after {
display: none;
}
form.overlay menu ul > li:active,
form.overlay menu ul > section:active {
background-color: #00ABCC;
transition: background-color 0.2s ease;
}

View file

@ -0,0 +1,30 @@
.hide {
display: none;
}
.no-opacity {
opacity: 0;
}
.ice-contacts-bar {
margin-top: -4.5rem;
height: 4.5rem;
font-size: 1.6rem;
font-style: italic;
width: 100%;
background-color: #e2443a;
color: #FFF;
line-height: 4.5rem;
padding: 0 1.6rem 0 1.5rem;
}
.ice-contacts-bar:after {
font-family: 'gaia-icons';
font-style: normal;
font-size: 3.7rem;
line-height: 4.5rem;
position: absolute;
offset-inline-end: 0.2rem;
}
html[dir="ltr"] .ice-contacts-bar:after { content: 'right-light'; }
html[dir="rtl"] .ice-contacts-bar:after { content: 'left-light'; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB