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,90 @@
<!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">
<title>Locked Content</title>
<link rel="stylesheet" href="shared/style/confirm.css" type="text/css">
<link rel="stylesheet" href="shared/style/progress_activity.css" type="text/css">
<link rel="stylesheet" href="style/download.css" type="text/css">
<!-- 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/download.{locale}.json">
<!-- Shared code -->
<!-- <script type="text/javascript" src="shared/js/l10n.js"></script> --><script src="./gaia_build_download.js" type="text/javascript"></script>
<!-- <script defer="" src="shared/js/omadrm/fl.js"></script> -->
<!-- <script defer="" src="shared/js/device_storage/get_unused_filename.js"></script> -->
<!-- <script defer="" src="shared/js/device_storage/get_storage_if_available.js"></script> -->
<!-- <script defer="" src="shared/js/media/media_utils.js"></script> -->
<!-- Specific code -->
<!-- <script defer="" src="js/constants.js"></script> -->
<!-- <script defer="" src="js/utils.js"></script> -->
<!-- <script defer="" src="js/db.js"></script> -->
<!-- <script defer="" src="js/binary_string_view.js"></script> -->
<!-- <script defer="" src="js/download.js"></script> --><script src="./gaia_build_defer_download.js" defer="" type="text/javascript"></script>
<meta content="2.5" name="appVersion"></head>
<body>
<div id="direct-download" hidden="">
<form role="dialog" data-type="confirm">
<section>
<h1 data-l10n-id="download-progress-title">Downloading</h1>
<p style="text-align: center;">
<progress id="direct-download-progress" class="pack-activity" value="0"></progress>
</p>
</section>
</form>
</div>
<div id="download-confirmation" hidden="">
<form role="dialog" data-type="confirm">
<section>
<h1 id="download-confirmation-title">download file?</h1>
<progress id="download-progress" value="0"></progress>
<dl>
<dt data-l10n-id="download-confirmation-name">Name</dt>
<dd id="download-confirmation-name"></dd>
<dt data-l10n-id="download-confirmation-type">Type</dt>
<dd id="download-confirmation-type"></dd>
<dt data-l10n-id="download-confirmation-size">Size</dt>
<dd id="download-confirmation-size"></dd>
<dt data-l10n-id="download-confirmation-description">Info</dt>
<dd id="download-confirmation-description"></dd>
</dl>
<p>
<img id="locked-content-advisory-icon" src="style/images/actionicon_lock.png">
<small id="locked-content-advisory-text"></small>
</p>
</section>
<menu>
<button id="download-cancel" type="button" data-l10n-id="cancel-button">Cancel</button>
<button id="download-confirm" type="button" class="recommend" data-l10n-id="download-button">Download</button>
</menu>
</form>
</div>
<div id="preview-image-screen" hidden="">
<form role="dialog" data-type="confirm">
<section>
<h1 data-l10n-id="preview-image-title">Preview image</h1>
<p></p><div id="preview-image"></div><p></p>
</section>
<menu>
<button id="preview-image-cancel" type="button" data-l10n-id="cancel-button">Cancel</button>
<button id="preview-image-install" type="button" disabled="" class="recommend" data-l10n-id="install-button">Install</button>
</menu>
</form>
</div>
<div id="preview-audio-screen" hidden="">
<form role="dialog" data-type="confirm">
<section>
<h1 data-l10n-id="preview-audio-title">Preview audio</h1>
<p><audio id="preview-audio" autoplay="" controls=""></audio></p>
</section>
<menu>
<button id="preview-audio-cancel" type="button" data-l10n-id="cancel-button">Cancel</button>
<button id="preview-audio-install" type="button" disabled="" class="recommend" data-l10n-id="install-button">Install</button>
</menu>
</form>
</div>
</body>
</html>

View file

@ -0,0 +1,127 @@
;'use strict';(function(exports){if(exports.ForwardLock){return;}
const mimeSubtype='vnd.mozilla.oma.drm.fl';const SECRET_SETTINGS_ID='oma.drm.forward_lock.secret.key';var secret=null;function xor(buffer,key){var words=new Uint32Array(buffer,0,buffer.byteLength>>2);for(var i=0,n=words.length;i<n;i++){words[i]^=key;}}
function lockBuffer(secret,content,type,metadata){var header='LOCKED 1 '+escape(type)+'\n';if(metadata){for(var p in metadata){header+=escape(p)+':'+escape(metadata[p])+'\n';}}
header+='\0';var buffer=new Uint8Array(new Uint8Array(content)).buffer;xor(buffer,secret);return new Blob([header,buffer],{type:type.split('/')[0]+'/'+mimeSubtype});}
function lockBlob(secret,blob,metadata,callback){var reader=new FileReader();reader.readAsArrayBuffer(blob);reader.onload=function(){callback(lockBuffer(secret,reader.result,blob.type,metadata));};}
function unlockBlob(secret,blob,callback,errorCallback){if(!secret){return error('no secret supplied');}
var reader=new FileReader();reader.readAsArrayBuffer(blob);reader.onload=function(){var buffer=reader.result;var bytes=new Uint8Array(buffer);var header='';var contentStart;for(var i=0;i<bytes.length;i++){if(bytes[i]===0){contentStart=i+1;break;}
header+=String.fromCharCode(bytes[i]);}
if(!header.startsWith('LOCKED')){return error('Bad magic number');}
if(header.substring(6,9)!==' 1 '){return error('Unsupported version number');}
if(!contentStart){return error('No content');}
var eol=header.indexOf('\n');if(eol===-1){return error('malformed header');}
var type=unescape(header.substring(9,eol).trim());var metadata={};var lines=header.substring(eol+1).split('\n');for(var j=0;j<lines.length;j++){var line=lines[j];if(!line){continue;}
var[key,value]=line.split(':');if(!key||!value){return error('malformed metadata');}
metadata[unescape(key)]=unescape(value);}
var content=buffer.slice(contentStart);xor(content,secret);var blob=new Blob([content],{type:type});try{callback(blob,metadata);}
catch(e){console.error('Exception in content callback',e);}};function error(msg){msg='LCKA.decrypt(): '+msg;if(errorCallback){try{errorCallback(msg);}
catch(e){console.error('Exception in error callback',e);}}
else{console.error(msg);}}}
function getKey(callback){try{if(secret!==null){report(secret);return;}
var lock=navigator.mozSettings.createLock();var getreq=lock.get(SECRET_SETTINGS_ID);getreq.onsuccess=function(){secret=getreq.result[SECRET_SETTINGS_ID]||null;report(secret);};getreq.onerror=function(){console.error('Error getting ForwardLock setting',getreq.error);report(null);};}
catch(e){console.error('Exception in ForwardLock.getKey():',e);report(null);}
function report(secret){if(callback){try{callback(secret);}
catch(e){console.error('Exception in ForwardLock.getKey() callback',e);}}}}
function getOrCreateKey(callback){getKey(function(key){if(key!==null){report(key);return;}
secret=((Math.random()*0xFFFFFFFF)|0)+1;var setting={};setting[SECRET_SETTINGS_ID]=secret;var setreq=navigator.mozSettings.createLock().set(setting);setreq.onsuccess=function(){report(secret);};setreq.onerror=function(){console.error('Failed to set key in ForwardLock.getOrCreateKey()',setreq.error.name);secret=null;};});function report(secret){if(callback){try{callback(secret);}
catch(e){console.error('Exception in ForwardLock.getOrCreateKey() callback');}}}}
exports.ForwardLock={lockBuffer:lockBuffer,lockBlob:lockBlob,unlockBlob:unlockBlob,mimeSubtype:mimeSubtype,getKey:getKey,getOrCreateKey:getOrCreateKey};}(window));;'use strict';function getUnusedFilename(storage,name,callback){var getreq=storage.get(name);getreq.onerror=function(){callback(name);};getreq.onsuccess=function(){var version=0;var p=name.lastIndexOf('/');var dir=name.substring(0,p+1);var file=name.substring(p+1);p=file.lastIndexOf('.');if(p===-1){p=file.length;}
var ext=file.substring(p);var base=file.substring(0,p);var parts=base.match(/^(.*)_(\d{1,2})$/);if(parts){base=parts[1];version=parseInt(parts[2]);}
var newname=dir+base+'_'+(version+1)+ext;getUnusedFilename(storage,newname,callback);};};'use strict';function getStorageIfAvailable(kind,size,success,error){var storage=navigator.getDeviceStorage(kind);storage.available().onsuccess=function(e){if(e.target.result!=='available'){if(error){error(e.target.result);}}
else{storage.freeSpace().onsuccess=function(e){if(e.target.result<size){if(error){error(e.target.result);}}
else{success(storage);}};}};};'use strict';var MediaUtils={formatDate:function(timestamp){if(!timestamp||timestamp===undefined||isNaN(timestamp)){return;}
return new Date(timestamp).toLocaleString(navigator.languages,{'month':'numeric','year':'numeric','day':'numeric'});},getLocalizedSizeTokens:function(size){if(!size||size===undefined||isNaN(size)){return Promise.resolve('');}
var units=['B','KB','MB','GB','TB','PB','EB','ZB','YB'];var i=0;while(size>=1024&&i<(units.length-1)){size/=1024;++i;}
var sizeDecimal=i<2?Math.round(size):Math.round(size*10)/10;return document.l10n.formatValue('byteUnit-'+units[i]).then((unit)=>{return{size:sizeDecimal,unit};});},getLocalizedSize:function(size){return this.getLocalizedSizeTokens(size).then((args)=>{return document.l10n.formatValue('fileSize',args);});},formatDuration:function(duration){function padLeft(num,length){var r=String(num);while(r.length<length){r='0'+r;}
return r;}
duration=Math.round(duration);var minutes=Math.floor(duration/60);var seconds=duration%60;if(minutes<60){return padLeft(minutes,2)+':'+padLeft(seconds,2);}
var hours=Math.floor(minutes/60);minutes=Math.floor(minutes%60);return hours+':'+padLeft(minutes,2)+':'+padLeft(seconds,2);},populateMediaInfo:function(data){for(var id in data){if(data.hasOwnProperty(id)){var element=document.getElementById(id);if(element){if(typeof data[id]==='string'){element.setAttribute('data-l10n-id',data[id]);}else if(data[id].hasOwnProperty('raw')){element.removeAttribute('data-l10n-id');element.textContent=data[id].raw;}else{document.l10n.setAttributes(element,data[id].id,data[id].args);}}}}},binarySearch:function(array,element,comparator,from,to){if(comparator===undefined){comparator=function(a,b){return a-b;};}
if(from===undefined){return MediaUtils.binarySearch(array,element,comparator,0,array.length);}
if(from===to){return from;}
var mid=Math.floor((from+to)/2);var result=comparator(element,array[mid]);if(result<0){return MediaUtils.binarySearch(array,element,comparator,from,mid);}
else{return MediaUtils.binarySearch(array,element,comparator,mid+1,to);}}};;'use strict';const DEBUG=true;const OMADownloadStatus=Object.freeze({SUCCESS:'900 Success',INSUFFICIENT_MEMORY:'901 Insufficient memory',USER_CANCELLED:'902 User Cancelled',LOSS_OF_SERVICE:'903 Loss of Service',ATTRIBUTE_MISMATCH:'905 Attribute mismatch',INVALID_DESCRIPTOR:'906 Invalid descriptor',INVALID_DDVERSION:'951 Invalid DDVersion',DEVICE_ABORTED:'952 Device Aborted',NON_ACCEPTABLE_CONTENT:'953 Non-Acceptable Content',LOADER_ERROR:'954 Loader Error'});const DOWNLOAD_ERROR='download_error';const INSTALL_ERROR='install_error';const ERR_DESCRIPTOR_DOWNLOAD_FAILED='err_descriptor_download_failed';const ERR_BAD_DESCRIPTOR='err_bad_descriptor';const ERR_TOO_BIG='err_too_big';const ERR_UNSUPPORTED_TYPE='err_unsupported_type';const ERR_BAD_TYPE='err_bad_type';const ERR_CONTENT_DOWNLOAD_FAILED='err_content_download_failed';const ERR_BAD_DRM_MESSAGE='err_bad_drm_message';const ERR_BAD_IMAGE='err_bad_image';const ERR_BAD_AUDIO='err_bad_audio';const ERR_NO_SPACE='err_no_space';const ERR_NO_SDCARD='err_no_sdcard';const ERR_SDCARD_IN_USE='err_sdcard_in_use';const ERR_DB_STORE_FAILURE='err_db_store_failure';const ERR_DS_SAVE_FAILURE='err_ds_save_failure';const SUCCESS_SONG='success_song';const SUCCESS_RINGTONE='success_ringtone';const SUCCESS_WALLPAPER='success_wallpaper';const systemXHR=Object.freeze({mozSystem:true});const SupportedImageTypes=Object.freeze({'image/jpeg':true,'image/png':true,'image/gif':true,'image/bmp':true});const SupportedAudioTypes=Object.freeze({'audio/mpeg':true,'audio/mp4':true,'audio/opus':true,'audio/ogg':true});const MimeTypeAliases=Object.freeze({'audio/mp3':'audio/mpeg'});const RINGTONE_KEY='dialer.ringtone';const RINGTONE_NAME_KEY='dialer.ringtone.name';const RINGTONE_ID_KEY='dialer.ringtone.id';const WALLPAPER_KEY='wallpaper.image';const SONG='song';const RINGTONE='ringtone';const WALLPAPER='wallpaper';const MAX_DOWNLOAD_SIZE=16*1024*1024;;'use strict';function debug(...args){if(!DEBUG){return;}
if(!debug.startTime){debug.startTime=Date.now();}
args.unshift('[Locked Content]',Date.now()-debug.startTime);console.log.apply(console,args);}
function $(id){return document.getElementById(id);}
function _(id,args){return navigator.mozL10n.get(id,args);}
function showDialog(options){function close(e){document.body.removeChild(dialog);e.preventDefault();e.stopPropagation();}
var cancelButton;var okButton;var dialog=document.createElement('form');dialog.setAttribute('role','dialog');dialog.dataset.type='confirm';var section=document.createElement('section');dialog.appendChild(section);if(options.title){var title=document.createElement('h1');title.textContent=options.title;section.appendChild(title);}
var msg=document.createElement('p');msg.textContent=options.message;section.appendChild(msg);if(options.details){var details=document.createElement('p');var small=document.createElement('small');small.textContent=options.details;details.appendChild(small);section.appendChild(details);}
var menu=document.createElement('menu');dialog.appendChild(menu);if(options.cancelCallback){cancelButton=document.createElement('button');menu.appendChild(cancelButton);cancelButton.textContent=options.cancelText||_('cancel');cancelButton.onclick=function(e){close(e);options.cancelCallback();};}
if(options.okCallback){okButton=document.createElement('button');menu.appendChild(okButton);okButton.textContent=options.okText||_('ok');if(options.danger){okButton.classList.add('danger');}
else if(!options.cancelCallback){okButton.classList.add('recommend');}
okButton.onclick=function(e){close(e);options.okCallback();};}
if(okButton&&!cancelButton){okButton.classList.add('full');}
if(cancelButton&&!okButton){cancelButton.classList.add('full');}
document.body.appendChild(dialog);};'use strict';var objectStore=(function(){const DBNAME='LOCKEDCONTENT';const DBVERSION=1;const STORENAMES=['ringtones','wallpapers'];var db;function getStore(access,storeName,callback){if(STORENAMES.indexOf(storeName)===-1){throw Error('unknown object store name:',storeName);}
if(db){callback(db.transaction(storeName,access).objectStore(storeName));}
else{initDB(function(){getStore(access,storeName,callback);});}}
function initDB(callback){var open=indexedDB.open(DBNAME,DBVERSION);open.onsuccess=function(){db=open.result;callback();};open.onupgradeneeded=function(){STORENAMES.forEach(function(storeName){open.result.createObjectStore(storeName,{autoIncrement:true,keyPath:'id'});});};open.onerror=function(){console.error('can not open database:',open.error.name);};}
return{readonly:function readonly(storeName,callback){getStore('readonly',storeName,callback);},readwrite:function readwrite(storeName,callback){getStore('readwrite',storeName,callback);}};}());;'use strict';function BinaryStringView(data){if(typeof data==='string'){this.bytes=new Uint8Array(data.length);for(var i=0;i<data.length;i++){this.bytes[i]=(data.charCodeAt(i)&0xFF);}}else if(data instanceof Uint8Array){this.bytes=data;}else if(data instanceof ArrayBuffer){this.bytes=new Uint8Array(data);}else{throw TypeError();}
this.length=this.bytes.length;this.buffer=this.bytes.buffer;this.byteOffset=this.bytes.byteOffset;this.byteLength=this.bytes.byteLength;}
BinaryStringView.prototype.toString=function toString(){var s='';for(var i=0;i<this.length;i++){s+=String.fromCharCode(this.bytes[i]);}
return s;};BinaryStringView.prototype.toArrayBuffer=function toArrayBuffer(){return this.buffer.slice(this.byteOffset,this.byteOffset+this.byteLength);};BinaryStringView.prototype.charAt=function(i){return String.fromCharCode(this.bytes[i]);};BinaryStringView.prototype.slice=function slice(from,to){if(to===undefined){return new BinaryStringView(this.bytes.subarray(from));}else{return new BinaryStringView(this.bytes.subarray(from,to));}};BinaryStringView.prototype.trim=function(){var start=0,end=this.length-1;var WS=/\s/;while(start<=end&&WS.test(this.charAt(start))){start++;}
while(end>=start&&WS.test(this.charAt(end))){end--;}
return this.slice(start,end+1);};BinaryStringView.prototype.indexOf=function indexOf(target,start){if(typeof target==='string'){target=new BinaryStringView(target);}
start=Math.min(start||0,this.length);if(target.length===0){return start;}
var end=this.length-target.length;var i=start;while(i<=end){var j=0;while(this.bytes[i+j]===target.bytes[j]){if(++j===target.length){return i;}}
i++;}
return-1;};BinaryStringView.prototype.lastIndexOf=function indexOf(target,start){if(typeof target==='string'){target=new BinaryStringView(target);}
if(target.length===0){return Math.min(start||this.length,this.length);}
start=start||this.length-1;var i=start;while(i>=0){var j=0;while(this.bytes[i+j]===target.bytes[j]){if(++j===target.length){return i;}}
i--;}
return-1;};;'use strict';window.addEventListener('load',function(){navigator.mozL10n.once(function(){navigator.mozSetMessageHandler('activity',view);});});function view(activity){debug('view() invoked for activity',activity.source.name,'with data',JSON.stringify(activity.source.data));var descriptor={};var mimeType;var isImage=false;var isAudio=false;var installType;var hasDescriptor;var activityType=normalizeMimeType(activity.source.data.type);if(activityType==='application/vnd.oma.drm.message'){hasDescriptor=false;var url=(activity.source.data.url||'');descriptor.name=getFileNameFromURL(url);descriptor.size=0;descriptor.types=['application/vnd.oma.drm.message'];descriptor.objectURI=url;displayDownloadProgress();}else{hasDescriptor=true;downloadDescriptor(activity.source.data.url);}
function normalizeMimeType(type){type=type.split(';')[0];type=type.toLowerCase();if(type in MimeTypeAliases){type=MimeTypeAliases[type];}
return type;}
function askSongOrRingtone(aCallback){showDialog({message:_('ringtone-or-song-question'),okText:_('ringtone-response'),cancelText:_('song-response'),okCallback:aCallback.bind(undefined,RINGTONE),cancelCallback:aCallback.bind(undefined,SONG)});}
function getFileNameFromURL(aUri){var name='';if(aUri){name=aUri.split('/').pop();if(name.endsWith('.dm')){name=name.slice(0,-3);}
if(name.length>18){name=name.substring(0,15)+'\u2026';}}
return name;}
function getFileNameFromHeader(aHeader){var regexp=/filename="([^"]*)"/i;var match=regexp.exec(aHeader);var name=match&&match[1];if(name){name=getFileNameFromURL(name);}
return name;}
function reportError(type,errorID,downloadStatus,details){console.error(type,errorID,downloadStatus,details);if(downloadStatus){sendStatus(downloadStatus);}
details='['+(details?errorID+': '+details:errorID)+']';showDialog({title:_(type)||type,message:_(errorID),details:details,okCallback:function(){activity.postError(errorID);}});}
function reportSuccess(successID){sendStatus(OMADownloadStatus.success);showDialog({message:_(successID)||successID,okCallback:function(){activity.postResult({success:true});}});}
function sendStatus(status,callback){if(descriptor.installNotifyURI){var xhr=new XMLHttpRequest(systemXHR);xhr.open('POST',descriptor.installNotifyURI);xhr.timeout=1000;xhr.send(status);if(callback){xhr.onloadend=function(){callback();};}}else if(callback){callback();}}
function downloadDescriptor(descriptorURL){debug('Step 1: downloading descriptor from',descriptorURL);var xhr=new XMLHttpRequest(systemXHR);xhr.open('GET',descriptorURL);xhr.responseType='document';xhr.send();xhr.onerror=function(e){reportError(DOWNLOAD_ERROR,ERR_DESCRIPTOR_DOWNLOAD_FAILED,null,xhr.status+' '+xhr.statusText);};xhr.onload=function(){setTimeout(function(){parse(xhr.response);});};}
function parse(document){var types=document.getElementsByTagName('type');if(types){descriptor.types=[];for(var i=0;i<types.length;i++){descriptor.types.push(normalizeMimeType(types[i].textContent.trim()));}}
function get(tag){var elts=document.getElementsByTagName(tag);if(elts&&elts.length){descriptor[tag]=elts[0].textContent.trim();}}
get('size');get('objectURI');get('installNotifyURI');get('DDVersion');get('name');get('description');get('vendor');debug('Step 2: parse descriptor:',JSON.stringify(descriptor));if(!descriptor.types||descriptor.types.length===0||!descriptor.size||!descriptor.objectURI){reportError(DOWNLOAD_ERROR,ERR_BAD_DESCRIPTOR,OMADownloadStatus.INVALID_DESCRIPTOR);return;}
if(descriptor.size>MAX_DOWNLOAD_SIZE){MediaUtils.getLocalizedSize(descriptor.size).then((msg)=>{reportError(DOWNLOAD_ERROR,ERR_TOO_BIG,OMADownloadStatus.INSUFFICIENT_MEMORY,msg);});return;}
if(!descriptor.name){descriptor.name=getFileNameFromURL(descriptor.objectURI);}
if(descriptor.DDVersion&&parseInt(descriptor.DDVersion)>1){reportError(DOWNLOAD_ERROR,ERR_BAD_DESCRIPTOR,OMADownloadStatus.INVALID_DDVERSION);return;}
checkTypes();}
function checkTypes(){debug('Step 3: check types');var types=descriptor.types;for(var i=0;i<types.length;i++){var type=types[i];if(type==='application/vnd.oma.drm.message'){continue;}
mimeType=type;if(type in SupportedImageTypes){isImage=true;}else if(type in SupportedAudioTypes){isAudio=true;}else{mimeType=undefined;reportError(DOWNLOAD_ERROR,ERR_UNSUPPORTED_TYPE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT,type);return;}}
if(types.length<1||types.length>2||(isAudio&&isImage)||(!isAudio&&!isImage)){reportError(DOWNLOAD_ERROR,ERR_BAD_TYPE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT);return;}
if(isImage){installType=WALLPAPER;confirmDownload();}else{askSongOrRingtone(function(response){installType=response;confirmDownload();});}}
function confirmDownload(){debug('Step 4: confirm download');var titleElement=$('download-confirmation-title');titleElement.textContent=_('download-confirmation-title-'+installType);$('download-confirmation-name').textContent=descriptor.name;$('download-confirmation-type').textContent=mimeType;MediaUtils.getLocalizedSizeTokens(descriptor.size).then((args)=>{navigator.mozL10n.setAttributes($('download-confirmation-size'),'fileSize',args);});$('download-confirmation-description').textContent=descriptor.description;var lca;if(descriptor.vendor){lca=_('locked-content-advisory',{vendor:descriptor.vendor});}else{lca=_('locked-content-advisory-generic');}
$('locked-content-advisory-text').textContent=lca;$('download-confirm').onclick=function(e){e.target.disabled=true;displayDownloadProgress();};$('download-cancel').onclick=function(e){debug('download cancelled');$('download-confirmation').hidden=true;sendStatus(OMADownloadStatus.USER_CANCELLED,function(){activity.postError('cancelled');});};$('download-confirmation').hidden=false;}
function displayDownloadProgress(){debug('Step 5: download content and display progress');var bar;var contentLength;if(!hasDescriptor){$('direct-download').hidden=false;bar=$('direct-download-progress');bar.max=100;}else{var titleElement=$('download-confirmation-title');titleElement.textContent=_('downloading-'+installType);$('download-confirmation').hidden=false;bar=$('download-progress');bar.max=descriptor.size;}
bar.style.visibility='visible';bar.value=0;debug('starting download for',descriptor.objectURI);var download=new XMLHttpRequest(systemXHR);download.open('GET',descriptor.objectURI);download.responseType='arraybuffer';download.send();download.onprogress=function(e){if(contentLength===undefined){contentLength=download.getResponseHeader('Content-Length');bar.max=contentLength&&parseInt(contentLength)||bar.max;}
if(descriptor.size||contentLength){bar.value=e.loaded;}else{bar.value=(bar.value+10)%bar.max;}};download.onerror=function(){$('download-confirmation').hidden=true;reportError(DOWNLOAD_ERROR,ERR_CONTENT_DOWNLOAD_FAILED,OMADownloadStatus.LOADER_ERROR,download.status+' '+download.statusText);};download.onload=function(){$('download-cancel').disabled=true;$('download-confirmation').hidden=true;var cdHeader=download.getResponseHeader('Content-Disposition');if(cdHeader&&!hasDescriptor){descriptor.name=getFileNameFromHeader(cdHeader)||descriptor.name;}
var type=normalizeMimeType(download.getResponseHeader('Content-Type'));extractContent(type,download.response);};$('download-cancel').addEventListener('click',function(){download.abort();});}
function extractContent(type,buffer){debug('Step 6a: extractContent',type,buffer.byteLength);if(type!=='application/vnd.oma.drm.message'){previewContent(type,buffer);return;}
var dataString=new BinaryStringView(buffer);dataString=dataString.trim();function malformed(why){if(why){debug('malformed drm message:',why);}
reportError(DOWNLOAD_ERROR,ERR_BAD_DRM_MESSAGE,OMADownloadStatus.ATTRIBUTE_MISMATCH);}
if(dataString.slice(-2).toString()!=='--'){return malformed('missing trailing --');}
var end=dataString.lastIndexOf('\r\n');if(end===-1){return malformed('missing final \r\n');}
var boundaryString=dataString.slice(end+2,-2).toString()+'\r\n';dataString=dataString.slice(0,end);debug('Boundary string is',boundaryString);var headerStart=dataString.indexOf(boundaryString)+boundaryString.length;if(headerStart===-1){return malformed('missing boundary string at start');}
if(dataString.indexOf(boundaryString,headerStart)!==-1){return malformed('more than one part');}
var contentStart=dataString.indexOf('\r\n\r\n',headerStart);if(contentStart===-1){return malformed('missing header separator');}
var headers=dataString.slice(headerStart,contentStart).toString().split('\r\n');var content=dataString.slice(contentStart+4);debug('got first part headers:',JSON.stringify(headers));var contentType;for(var i=0;i<headers.length;i++){var header=headers[i].toLowerCase();if(header.startsWith('content-type:')){contentType=normalizeMimeType(header.substring(13).trim());}}
if(!contentType){return malformed('no content-type header found in first part');}
debug('Found content in drm message file',contentType,content.length);previewContent(contentType,content.toArrayBuffer());}
function previewContent(type,bytes){if(!hasDescriptor){mimeType=type;if(type in SupportedImageTypes){isImage=true;}else if(type in SupportedAudioTypes){isAudio=true;}else{mimeType=undefined;reportError(DOWNLOAD_ERROR,ERR_UNSUPPORTED_TYPE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT,type);return;}}else{if(type!==mimeType){reportError(DOWNLOAD_ERROR,ERR_BAD_DRM_MESSAGE,OMADownloadStatus.ATTRIBUTE_MISMATCH);return;}}
if(isImage){installType=WALLPAPER;previewImage(type,bytes);}else{if(!hasDescriptor){askSongOrRingtone(function(response){installType=response;previewAudio(type,bytes);});}else{previewAudio(type,bytes);}}}
function previewImage(type,bytes){$('download-confirmation').hidden=true;$('preview-image-screen').hidden=false;var blob=new Blob([bytes],{type:type});var url=URL.createObjectURL(blob);var image=new Image();image.src=url;image.onerror=function(){URL.revokeObjectURL(url);reportError(INSTALL_ERROR,ERR_BAD_IMAGE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT);return;};image.onload=function(){var preview=$('preview-image');preview.style.backgroundImage='url('+url+')';$('preview-image-install').disabled=false;};$('preview-image-install').onclick=function(){URL.revokeObjectURL(url);installContent(bytes);};$('preview-image-cancel').onclick=function(){URL.revokeObjectURL(url);sendStatus(OMADownloadStatus.USER_CANCELLED,function(){activity.postError('cancelled');});};}
function previewAudio(type,bytes){$('download-confirmation').hidden=true;$('preview-audio-screen').hidden=false;var blob=new Blob([bytes],{type:type});var url=URL.createObjectURL(blob);var player=$('preview-audio');player.src=url;player.onerror=function(){cleanup();reportError(INSTALL_ERROR,ERR_BAD_AUDIO,OMADownloadStatus.NON_ACCEPTABLE_CONTENT);return;};player.oncanplay=function(){$('preview-audio-install').disabled=false;};player.ontimeupdate=player.ondurationchange=function(){if(player.currentTime>Math.max(5,player.duration/2)){player.pause();player.currentTime=0;}};$('preview-audio-install').onclick=function(){cleanup();installContent(bytes);};$('preview-audio-cancel').onclick=function(){cleanup();sendStatus(OMADownloadStatus.USER_CANCELLED,function(){activity.postError('cancelled');});};function cleanup(){player.pause();player.removeAttribute('src');player.load();URL.revokeObjectURL(url);}}
function installContent(bytes){switch(installType){case SONG:installSong(bytes);return;case RINGTONE:case WALLPAPER:install(installType,bytes,descriptor);return;}}
function installSong(buffer){debug('installSong');ForwardLock.getOrCreateKey(function(secret){debug('got secret key');var blob=ForwardLock.lockBuffer(secret,buffer,mimeType,{vendor:descriptor.vendor,name:descriptor.name,description:descriptor.description});debug('encrypted song');getStorageIfAvailable('music',blob.size,storageSuccess,storageError);function storageError(err){debug('storageError:',err);if(err==='unavailable'){reportError(INSTALL_ERROR,ERR_NO_SDCARD,OMADownloadStatus.INSUFFICIENT_MEMORY);}else if(err==='shared'){reportError(INSTALL_ERROR,ERR_SDCARD_IN_USE,OMADownloadStatus.INSUFFICIENT_MEMORY);}else{reportError(INSTALL_ERROR,ERR_NO_SPACE,OMADownloadStatus.INSUFFICIENT_MEMORY,err);}}
function storageSuccess(storage){debug('got music storage');var filename='locked/';if(descriptor.vendor){filename+=fixPath(descriptor.vendor)+'/';}
filename+=fixPath(descriptor.name)+'.lcka';debug('trying filename',filename);function fixPath(s){return s.replace(/[\/\\\.\,\?\*\:]/g,'');}
getUnusedFilename(storage,filename,function(filename){debug('using filename',filename);var addreq=storage.addNamed(blob,filename);addreq.onerror=function(){reportError(INSTALL_ERROR,ERR_DS_SAVE_FAILURE,OMADownloadStatus.LOADER_ERROR,addreq.error.name);};addreq.onsuccess=function(){reportSuccess(SUCCESS_SONG);};});}});}
function install(installType,buffer,descriptor){ForwardLock.getOrCreateKey();var objectStoreName=installType===RINGTONE?'ringtones':'wallpapers';var blob=new Blob([buffer],{type:mimeType});objectStore.readwrite(objectStoreName,function(store){var req=store.add({blob:blob,descriptor:descriptor});req.onerror=function(){reportError(INSTALL_ERROR,ERR_DB_STORE_FAILURE,OMADownloadStatus.LOADER_ERROR,req.error.name);};req.onsuccess=function(){sendStatus(OMADownloadStatus.SUCCESS);var lock=navigator.mozSettings.createLock();var settings={};if(installType===RINGTONE){settings[RINGTONE_KEY]=blob;settings[RINGTONE_NAME_KEY]=descriptor.name;settings[RINGTONE_ID_KEY]=req.result;}
else{settings[WALLPAPER_KEY]=blob;}
lock.set(settings).onsuccess=function(){var msgid;if(installType===RINGTONE){msgid=SUCCESS_RINGTONE;}else{msgid=SUCCESS_WALLPAPER;}
showDialog({message:_(msgid),okCallback:function(){activity.postResult({success:true});}});};};});}}

View file

@ -0,0 +1,438 @@
;window.COMPONENTS_BASE_URL='/shared/elements/';;(function(exports){'use strict';exports.ComponentUtils={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';style.addEventListener('load',function(){if(self.shadowRoot){self.shadowRoot.appendChild(style.cloneNode(true));}
self.style.visibility='';});}};}(window));;(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.GaiaHeader=f()}})(function(){var define,module,exports;return(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){;(function(define){define(function(require,exports,module){'use strict';var debug=0?console.log.bind(console):function(){};var cache={};var MIN=16;var MAX=24;var BUFFER=3;module.exports=function(config){debug('font fit',config);var space=config.space-BUFFER;var min=config.min||MIN;var max=config.max||MAX;var text=trim(config.text);var fontSize=max;var textWidth;var font;do{font=config.font.replace(/\d+px/,fontSize+'px');textWidth=getTextWidth(text,font);}while(textWidth>space&&fontSize!==min&&fontSize--);return{textWidth:textWidth,fontSize:fontSize,overflowing:textWidth>space};};function getTextWidth(text,font){var ctx=getCanvasContext(font);var width=ctx.measureText(text).width;debug('got text width',width);return width;}
function getCanvasContext(font){debug('get canvas context',font);var cached=cache[font];if(cached){return cached;}
var canvas=document.createElement('canvas');canvas.setAttribute('moz-opaque','true');canvas.setAttribute('width','1px');canvas.setAttribute('height','1px');debug('created canvas',canvas);var ctx=canvas.getContext('2d',{willReadFrequently:true});ctx.font=font;return cache[font]=ctx;}
function trim(text){return text.replace(/\s+/g,' ').trim();}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('font-fit',this));},{}],2:[function(require,module,exports){;(function(define){'use strict';define(function(require,exports,module){var textContent=Object.getOwnPropertyDescriptor(Node.prototype,'textContent');var innerHTML=Object.getOwnPropertyDescriptor(Element.prototype,'innerHTML');var removeAttribute=Element.prototype.removeAttribute;var setAttribute=Element.prototype.setAttribute;var noop=function(){};exports.register=function(name,props){var baseProto=getBaseProto(props.extends);var template=props.template||baseProto.templateString;var extensible=props.extensible=props.hasOwnProperty('extensible')?props.extensible:true;delete props.extends;if(template){if(extensible&&props.template){props.templateString=props.template;}
var output=processCss(template,name);props.template=document.createElement('template');props.template.innerHTML=output.template;props.lightCss=output.lightCss;props.globalCss=props.globalCss||'';props.globalCss+=output.globalCss;}
injectGlobalCss(props.globalCss);delete props.globalCss;var descriptors=mixin(props.attrs||{},base.descriptors);props._attrs=props.attrs;delete props.attrs;var proto=createProto(baseProto,props);Object.defineProperties(proto,descriptors);try{return document.registerElement(name,{prototype:proto});}catch(e){if(e.name!=='NotSupportedError'){throw e;}}};var base={properties:{GaiaComponent:true,attributeChanged:noop,attached:noop,detached:noop,created:noop,createdCallback:function(){if(this.dirObserver){addDirObserver();}
injectLightCss(this);this.created();},attributeChangedCallback:function(name,from,to){var prop=toCamelCase(name);if(this._attrs&&this._attrs[prop]){this[prop]=to;}
this.attributeChanged(name,from,to);},attachedCallback:function(){if(this.dirObserver){this.setInnerDirAttributes=setInnerDirAttributes.bind(null,this);document.addEventListener('dirchanged',this.setInnerDirAttributes);}
this.attached();},detachedCallback:function(){if(this.dirObserver){document.removeEventListener('dirchanged',this.setInnerDirAttributes);}
this.detached();},setupShadowRoot:function(){if(!this.template){return;}
var node=document.importNode(this.template.content,true);this.createShadowRoot().appendChild(node);if(this.dirObserver){setInnerDirAttributes(this);}
return this.shadowRoot;},setAttr:function(name,value){var internal=this.shadowRoot.firstElementChild;setAttribute.call(internal,name,value);setAttribute.call(this,name,value);},removeAttr:function(name){var internal=this.shadowRoot.firstElementChild;removeAttribute.call(internal,name);removeAttribute.call(this,name);}},descriptors:{textContent:{set:function(value){textContent.set.call(this,value);if(this.lightStyle){this.appendChild(this.lightStyle);}},get:function(){return textContent.get();}},innerHTML:{set:function(value){innerHTML.set.call(this,value);if(this.lightStyle){this.appendChild(this.lightStyle);}},get:innerHTML.get}}};var defaultPrototype=createProto(HTMLElement.prototype,base.properties);function getBaseProto(proto){if(!proto){return defaultPrototype;}
proto=proto.prototype||proto;return!proto.GaiaComponent?createProto(proto,base.properties):proto;}
function createProto(proto,props){return mixin(Object.create(proto),props);}
var hasShadowCSS=(function(){var div=document.createElement('div');try{div.querySelector(':host');div.querySelector('::content');return true;}
catch(e){return false;}})();var regex={shadowCss:/(?:\:host|\:\:content)[^{]*\{[^}]*\}/g,':host':/(?:\:host)/g,':host()':/\:host\((.+)\)(?: \:\:content)?/g,':host-context':/\:host-context\((.+)\)([^{,]+)?/g,'::content':/(?:\:\:content)/g};function processCss(template,name){var globalCss='';var lightCss='';if(!hasShadowCSS){template=template.replace(regex.shadowCss,function(match){var hostContext=regex[':host-context'].exec(match);if(hostContext){globalCss+=match.replace(regex['::content'],'').replace(regex[':host-context'],'$1 '+name+'$2').replace(/ +/g,' ');}else{lightCss+=match.replace(regex[':host()'],name+'$1').replace(regex[':host'],name).replace(regex['::content'],name);}
return'';});}
return{template:template,lightCss:lightCss,globalCss:globalCss};}
function injectGlobalCss(css){if(!css){return;}
var style=document.createElement('style');style.innerHTML=css.trim();headReady().then(function(){document.head.appendChild(style);});}
function headReady(){return new Promise(function(resolve){if(document.head){return resolve();}
window.addEventListener('load',function fn(){window.removeEventListener('load',fn);resolve();});});}
function injectLightCss(el){if(hasShadowCSS){return;}
var stylesheet=el.querySelector('style');if(!stylesheet){stylesheet=document.createElement('style');stylesheet.setAttribute('scoped','');stylesheet.appendChild(document.createTextNode(el.lightCss));el.appendChild(stylesheet);}
el.lightStyle=stylesheet;}
function toCamelCase(string){return string.replace(/-(.)/g,function replacer(string,p1){return p1.toUpperCase();});}
var dirObserver;function setInnerDirAttributes(component){var dir=component.dir||document.dir;Array.from(component.shadowRoot.children).forEach(element=>{if(element.nodeName!=='STYLE'){element.dir=dir;}});}
function addDirObserver(){if(dirObserver){return;}
dirObserver=new MutationObserver(onChanged);dirObserver.observe(document.documentElement,{attributeFilter:['dir'],attributes:true});function onChanged(mutations){document.dispatchEvent(new Event('dirchanged'));}}
function mixin(target,source){for(var key in source){target[key]=source[key];}
return target;}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('gaia-component',this));},{}],3:[function(require,module,exports){(function(define){'use strict';define(function(require,exports,module){var base=window.GAIA_ICONS_BASE_URL||window.COMPONENTS_BASE_URL||'bower_components/';if(!document.documentElement){window.addEventListener('load',load);}else{load();}
function load(){if(isLoaded()){return;}
var link=document.createElement('link');link.rel='stylesheet';link.type='text/css';link.href=base+'gaia-icons/gaia-icons.css';document.head.appendChild(link);exports.loaded=true;}
function isLoaded(){return exports.loaded||document.querySelector('link[href*=gaia-icons]')||document.documentElement.classList.contains('gaia-icons-loaded');}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('gaia-icons',this));},{}],4:[function(require,module,exports){;(function(define){'use strict';define(function(require,exports,module){var component=require('gaia-component');var fontFit=require('font-fit');require('gaia-icons');var debug=0?console.log.bind(console):function(){};const KNOWN_ACTIONS={menu:'menu',back:'back',close:'close'};const TITLE_FONT='italic 300 24px FiraSans';const TITLE_PADDING=10;const MINIMUM_FONT_SIZE_CENTERED=20;const MINIMUM_FONT_SIZE_UNCENTERED=16;const MAXIMUM_FONT_SIZE=23;module.exports=component.register('gaia-header',{extensible:false,dirObserver:true,created:function(){debug('created');this.setupShadowRoot();this.els={actionButton:this.shadowRoot.querySelector('.action-button'),titles:this.getElementsByTagName('h1')};this.els.actionButton.addEventListener('click',e=>this.onActionButtonClick(e));this.observer=new MutationObserver(this.onMutation.bind(this));this.ignoreDir=this.hasAttribute('ignore-dir');this.titleEnd=this.getAttribute('title-end');this.titleStart=this.getAttribute('title-start');this.noFontFit=this.getAttribute('no-font-fit');this.notFlush=this.hasAttribute('not-flush');this.action=this.getAttribute('action');this.unresolved={};this.pending={};this._resizeThrottlingId=null;this.onResize=this.onResize.bind(this);},attached:function(){debug('attached');this.runFontFitSoon();this.observerStart();window.addEventListener('resize',this.onResize);},detached:function(){debug('detached');window.removeEventListener('resize',this.onResize);this.observerStop();this.clearPending();},clearPending:function(){for(var key in this.pending){this.pending[key].clear();delete this.pending[key];}
window.cancelAnimationFrame(this._resizeThrottlingId);this._resizeThrottlingId=null;},runFontFit:function(){debug('run font-fit');if(this.noFontFit){return Promise.resolve();}
var titles=this.els.titles;var space=this.getTitleSpace();var styles=[].map.call(titles,el=>this.getTitleStyle(el,space));return this.setTitleStylesSoon(styles);},runFontFitSoon:function(){debug('run font-fit soon');if(this.pending.runFontFitSoon){return;}
this.pending.runFontFitSoon=this.nextTick(()=>{delete this.pending.runFontFitSoon;this.runFontFit();});},getTitleStyle:function(el,space){debug('get el style',el,space);var text=el.textContent;var styleId=space.start+text+space.end+'#'+space.value;if(!text||!text.trim()){return debug('exit: no text');}
if(getStyleId(el)===styleId){return debug('exit: no change');}
var marginStart=this.getTitleMarginStart();var textSpace=space.value-Math.abs(marginStart);var fontFitResult=this.fontFit(text,textSpace,{min:MINIMUM_FONT_SIZE_CENTERED});var overflowing=fontFitResult.overflowing;var padding={start:0,end:0};if(overflowing){debug('title overflowing');padding.start=!space.start?TITLE_PADDING:0;padding.end=!space.end?TITLE_PADDING:0;textSpace=space.value-padding.start-padding.end;fontFitResult=this.fontFit(text,textSpace);marginStart=0;}
return{id:styleId,fontSize:fontFitResult.fontSize,marginStart:marginStart,overflowing:overflowing,padding:padding};},setTitleStylesSoon:function(styles){debug('set title styles soon',styles);var key='setStyleTitlesSoon';this._titleStyles=styles;if(this.unresolved[key]){return this.unresolved[key];}
this.unresolved[key]=new Promise((resolve)=>{this.pending[key]=this.nextTick(()=>{var styles=this._titleStyles;var els=this.els.titles;[].forEach.call(els,(el,i)=>{if(!styles[i]){return debug('exit');}
this.setTitleStyle(el,styles[i]);});delete this._titleStyles;delete this.unresolved[key];delete this.pending[key];resolve();});});},setTitleStyle:function(el,style){debug('set title style',style);this.observerStop();if(this.ignoreDir){el.style.marginLeft=style.marginStart+'px';el.style.paddingLeft=style.padding.start+'px';el.style.paddingRight=style.padding.end+'px';}else{el.style.marginInlineStart=style.marginStart+'px';el.style.paddingInlineStart=style.padding.start+'px';el.style.paddingInlineEnd=style.padding.end+'px';}
el.style.fontSize=style.fontSize+'px';setStyleId(el,style.id);this.observerStart();},fontFit:function(text,space,opts={}){debug('font fit:',text,space,opts);var fontFitArgs={font:TITLE_FONT,min:opts.min||MINIMUM_FONT_SIZE_UNCENTERED,max:MAXIMUM_FONT_SIZE,text:text,space:space};return fontFit(fontFitArgs);},observerStart:function(){if(this.observing){return;}
this.observer.observe(this,{childList:true,attributes:true,subtree:true});this.observing=true;debug('observer started');},observerStop:function(){if(!this.observing){return;}
this.observer.disconnect();this.observing=false;debug('observer stopped');},onResize:function(e){debug('onResize',this._resizeThrottlingId);if(this._resizeThrottlingId!==null){return;}
this._resizeThrottlingId=window.requestAnimationFrame(()=>{this._resizeThrottlingId=null;this.runFontFitSoon();});},onMutation:function(mutations){debug('on mutation',mutations);if(!this.pending.runFontFitSoon){this.runFontFit();}},getTitleSpace:function(){var start=this.titleStart;var end=this.titleEnd;var space=this.getWidth()-start-end;var result={value:space,start:start,end:end};debug('get title space',result);return result;},getWidth:function(){var value=this.notFlush?this.clientWidth:window.innerWidth;debug('get width',value);return value;},triggerAction:function(){if(this.action){this.els.actionButton.click();}},onActionButtonClick:function(){debug('action button click');var config={detail:{type:this.action}};var e=new CustomEvent('action',config);setTimeout(()=>this.dispatchEvent(e));},getTitleMarginStart:function(){var start=this.titleStart;var end=this.titleEnd;var marginStart=end-start;debug('get title margin start',marginStart);return marginStart;},getButtonsBeforeTitle:function(){var children=this.children;var l=children.length;var els=[];for(var i=0;i<l;i++){var el=children[i];if(el.tagName==='H1'){break;}
if(!contributesToLayout(el)){continue;}
els.push(el);}
if(this.action){els.push(this.els.actionButton);}
return els;},getButtonsAfterTitle:function(){var children=this.children;var els=[];for(var i=children.length-1;i>=0;i--){var el=children[i];if(el.tagName==='H1'){break;}
if(!contributesToLayout(el)){continue;}
els.push(el);}
return els;},sumButtonWidths:function(buttons){var defaultWidth=50;var sum=buttons.reduce((prev,button)=>{var isStandardButton=button===this.els.actionButton;var width=isStandardButton?defaultWidth:button.clientWidth;return prev+width;},0);debug('sum button widths',buttons,sum);return sum;},attrs:{action:{get:function(){return this._action;},set:function(value){var action=KNOWN_ACTIONS[value];if(action===this._action){return;}
this.setAttr('action',action);this._action=action;}},titleStart:{get:function(){debug('get title-start');if('_titleStart'in this){return this._titleStart;}
var buttons=this.getButtonsBeforeTitle();var value=this.sumButtonWidths(buttons);debug('get title-start',buttons,value);return value;},set:function(value){debug('set title-start',value);value=parseInt(value,10);if(value===this._titleStart||isNaN(value)){return;}
this.setAttr('title-start',value);this._titleStart=value;debug('set');}},titleEnd:{get:function(){debug('get title-end');if('_titleEnd'in this){return this._titleEnd;}
var buttons=this.getButtonsAfterTitle();return this.sumButtonWidths(buttons);},set:function(value){debug('set title-end',value);value=parseInt(value,10);if(value===this._titleEnd||isNaN(value)){return;}
this.setAttr('title-end',value);this._titleEnd=value;}},noFontFit:{get:function(){return this._noFontFit||false;},set:function(value){debug('set no-font-fit',value);value=!!(value||value==='');if(value===this.noFontFit){return;}
this._noFontFit=value;if(value){this.setAttr('no-font-fit','');}
else{this.removeAttr('no-font-fit');}}},ignoreDir:{get:function(){return this._ignoreDir||false;},set:function(value){debug('set ignore-dir',value);value=!!(value||value==='');if(value===this.ignoreDir){return;}
this._ignoreDir=value;this.dirObserver=!value;if(value){this.setAttr('ignore-dir','');}
else{this.removeAttr('ignore-dir');}}}},template:`<div class="inner">
<button class="action-button">
<content select="[l10n-action]"></content>
</button>
<content></content>
</div>
<style>
:host {
display: block;
-moz-user-select: none;
--gaia-header-button-color:
var(--header-button-color,
var(--header-color,
var(--link-color,
inherit)));
}
/**
* [hidden]
*/
:host[hidden] {
display: none;
}
/** Reset
---------------------------------------------------------*/
::-moz-focus-inner { border: 0; }
/** Inner
---------------------------------------------------------*/
.inner {
display: flex;
min-height: 50px;
-moz-user-select: none;
background:
var(--header-background,
var(--background,
#fff));
}
/** Action Button
---------------------------------------------------------*/
/**
* 1. Hidden by default
*/
.action-button {
position: relative;
display: none; /* 1 */
width: 50px;
font-size: 30px;
margin: 0;
padding: 0;
border: 0;
outline: 0;
align-items: center;
background: none;
cursor: pointer;
transition: opacity 200ms 280ms;
color:
var(--header-action-button-color,
var(--header-icon-color,
var(--gaia-header-button-color)));
}
/**
* [action=back]
* [action=menu]
* [action=close]
*
* 1. For icon vertical-alignment
*/
[action=back] .action-button,
[action=menu] .action-button,
[action=close] .action-button {
display: flex; /* 1 */
}
/**
* :active
*/
.action-button:active {
transition: none;
opacity: 0.2;
}
/** Action Button Icon
---------------------------------------------------------*/
.action-button:before {
font-family: 'gaia-icons';
font-style: normal;
text-rendering: optimizeLegibility;
font-weight: 500;
}
[action=close] .action-button:before { content: 'close' }
[action=menu] .action-button:before { content: 'menu' }
[action=back]:-moz-dir(ltr) .action-button:before { content: 'left' }
[action=back]:-moz-dir(rtl) .action-button:before { content: 'right' }
/** Action Button Icon
---------------------------------------------------------*/
/**
* 1. To enable vertical alignment.
*/
.action-button:before {
display: block;
}
/** Action Button Text
---------------------------------------------------------*/
/**
* To provide custom localized content for
* the action-button, we allow the user
* to provide an element with the class
* .l10n-action. This node is then
* pulled inside the real action-button.
*
* Example:
*
* <gaia-header action="back">
* <span l10n-action aria-label="Back">Localized text</span>
* <h1>title</h1>
* </gaia-header>
*/
::content [l10n-action] {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
font-size: 0;
}
/** Title
---------------------------------------------------------*/
/**
* 1. Vertically center text. We can't use flexbox
* here as it breaks text-overflow ellipsis
* without an inner div.
*/
::content h1 {
flex: 1;
margin: 0;
padding: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: center;
line-height: 50px; /* 1 */
font-weight: 300;
font-style: italic;
font-size: 24px;
color:
var(--header-title-color,
var(--header-color,
var(--title-color,
var(--text-color,
inherit))));
}
/**
* [ignore-dir]
*
* When the <gaia-header> component has an [ignore-dir] attribute, header
* direction is forced to LTR but we still want the <h1> text to be reversed
* so that strings like '1 selected' become 'selected 1'.
*
* When we're happy for <gaia-header> to be fully RTL responsive we won't need
* these rules anymore, but this depends on all Gaia apps being ready.
*
* This should be safe to remove when bug 1179459 lands.
*/
:host[ignore-dir] {
direction: ltr;
}
:host[ignore-dir]:-moz-dir(rtl) h1 {
direction: rtl;
}
/** Buttons
---------------------------------------------------------*/
::content a,
::content button {
position: relative;
z-index: 1;
box-sizing: border-box;
display: flex;
width: auto;
height: auto;
min-width: 50px;
margin: 0;
padding: 0 10px;
outline: 0;
border: 0;
font-size: 14px;
line-height: 1;
align-items: center;
justify-content: center;
text-decoration: none;
text-align: center;
background: none;
border-radius: 0;
font-style: italic;
cursor: pointer;
transition: opacity 200ms 280ms;
color: var(--gaia-header-button-color);
}
/**
* :active
*/
::content a:active,
::content button:active {
transition: none;
opacity: 0.2;
}
/**
* [hidden]
*/
::content a[hidden],
::content button[hidden] {
display: none;
}
/**
* [disabled]
*/
::content a[disabled],
::content button[disabled] {
pointer-events: none;
color: var(--header-disabled-button-color);
}
/** Icon Buttons
---------------------------------------------------------*/
/**
* Icons are a different color to text
*/
::content .icon,
::content [data-icon] {
color:
var(--header-icon-color,
var(--gaia-header-button-color));
}
/**
* If users want their action button
* to be in the component's light-dom
* they can add an .action class
* to make it look like the
* shadow action button.
*/
::content .action {
color:
var(--header-action-button-color,
var(--header-icon-color,
var(--gaia-header-button-color)));
}
/**
* [data-icon]:empty
*
* Icon buttons with no textContent,
* should always be 50px.
*
* This is to prevent buttons being
* larger than they should be before
* icon-font has loaded.
*/
::content [data-icon]:empty {
width: 50px;
}
</style>`,nextTick:nextTick});function contributesToLayout(el){return el.localName!=='style'&&!el.hasAttribute('l10n-action');}
function setStyleId(el,id){el._styleId=id;}
function getStyleId(el){return el._styleId;}
function nextTick(fn){var cleared;Promise.resolve().then(()=>{if(!cleared){fn();}});return{clear:function(){cleared=true;}};}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('gaia-header',this));},{"font-fit":1,"gaia-component":2,"gaia-icons":3}]},{},[4])(4)});;'use strict';window.GaiaRadio=(function(win){var proto=Object.create(HTMLElement.prototype);var baseurl=window.GaiaRadioBaseurl||'/shared/elements/gaia_radio/';proto.createdCallback=function(){var shadow=this.createShadowRoot();this._template=template.content.cloneNode(true);this._wrapper=this._template.getElementById('radio');this._wrapper.addEventListener('click',this.handleClick.bind(this));if(this.dataset.role){this._wrapper.setAttribute('role',this.dataset.role);}
if(!this.hasAttribute('role')){this.setAttribute('role','presentation');}
this.configureClass();shadow.appendChild(this._template);this.checked=this.hasAttribute('checked');this._wrapper.setAttribute('aria-checked',this.checked);setTimeout(function nextTick(){var label=this.querySelector('label, p');if(!label){return;}
label.addEventListener('click',this.handleClick.bind(this));}.bind(this));ComponentUtils.style.call(this,baseurl);var dirObserver=new MutationObserver(this.updateInternalDir.bind(this));dirObserver.observe(document.documentElement,{attributeFilter:['dir'],attributes:true});this.updateInternalDir();};proto.updateInternalDir=function(){var internal=this.shadowRoot.firstElementChild;if(document.documentElement.dir==='rtl'){internal.setAttribute('dir','rtl');}else{internal.removeAttribute('dir');}};proto.handleClick=function(e){e.stopImmediatePropagation();var event=new MouseEvent('click',{view:window,bubbles:true,cancelable:true});this.dispatchEvent(event);if(this.checked){return;}
if(!event.defaultPrevented){this.checked=!this.checked;}
this.dispatchEvent(new CustomEvent('change',{bubbles:true,cancelable:false}));};proto.configureClass=function(){this._wrapper.className=this.className;this._wrapper.classList.toggle('checked',this._checked);};proto.hideDetails=function(){this.shadowRoot.querySelector('.details').style.display='none';};proto.attributeChangedCallback=function(name,from,to){if(name==='class'){this._wrapper.className=to;}};Object.defineProperty(proto,'checked',{get:function(){return this._checked;},set:function(value){if(!this._template){return;}
if(value){var relevant=document.querySelectorAll('gaia-radio[name="'+this.getAttribute('name')+'"]');for(var i=0,iLen=relevant.length;i<iLen;i++){relevant[i].checked=false;}
this.setAttribute('checked',true);}else{this.removeAttribute('checked');}
this._wrapper.classList.toggle('checked',value);this._wrapper.setAttribute('aria-checked',value);this._checked=value;}});Object.defineProperty(proto,'name',{get:function(){return this.getAttribute('name');},set:function(value){this.setAttribute('name',value);}});Object.defineProperty(proto,'value',{get:function(){return this.getAttribute('value');},set:function(value){this.setAttribute('value',value);}});Object.defineProperty(proto,'type',{get:function(){return'gaia-radio';}});var template=document.createElement('template');template.innerHTML='<span role="radio" id="radio">'+'<span><content select="p,label"></content></span>'+'<div class="details"><content select="details"></content></div>'+'<div class="divider"></div>'+'</span>';return document.registerElement('gaia-radio',{prototype:proto});})(window);;;'use strict';(function(exports){if(exports.ForwardLock){return;}
const mimeSubtype='vnd.mozilla.oma.drm.fl';const SECRET_SETTINGS_ID='oma.drm.forward_lock.secret.key';var secret=null;function xor(buffer,key){var words=new Uint32Array(buffer,0,buffer.byteLength>>2);for(var i=0,n=words.length;i<n;i++){words[i]^=key;}}
function lockBuffer(secret,content,type,metadata){var header='LOCKED 1 '+escape(type)+'\n';if(metadata){for(var p in metadata){header+=escape(p)+':'+escape(metadata[p])+'\n';}}
header+='\0';var buffer=new Uint8Array(new Uint8Array(content)).buffer;xor(buffer,secret);return new Blob([header,buffer],{type:type.split('/')[0]+'/'+mimeSubtype});}
function lockBlob(secret,blob,metadata,callback){var reader=new FileReader();reader.readAsArrayBuffer(blob);reader.onload=function(){callback(lockBuffer(secret,reader.result,blob.type,metadata));};}
function unlockBlob(secret,blob,callback,errorCallback){if(!secret){return error('no secret supplied');}
var reader=new FileReader();reader.readAsArrayBuffer(blob);reader.onload=function(){var buffer=reader.result;var bytes=new Uint8Array(buffer);var header='';var contentStart;for(var i=0;i<bytes.length;i++){if(bytes[i]===0){contentStart=i+1;break;}
header+=String.fromCharCode(bytes[i]);}
if(!header.startsWith('LOCKED')){return error('Bad magic number');}
if(header.substring(6,9)!==' 1 '){return error('Unsupported version number');}
if(!contentStart){return error('No content');}
var eol=header.indexOf('\n');if(eol===-1){return error('malformed header');}
var type=unescape(header.substring(9,eol).trim());var metadata={};var lines=header.substring(eol+1).split('\n');for(var j=0;j<lines.length;j++){var line=lines[j];if(!line){continue;}
var[key,value]=line.split(':');if(!key||!value){return error('malformed metadata');}
metadata[unescape(key)]=unescape(value);}
var content=buffer.slice(contentStart);xor(content,secret);var blob=new Blob([content],{type:type});try{callback(blob,metadata);}
catch(e){console.error('Exception in content callback',e);}};function error(msg){msg='LCKA.decrypt(): '+msg;if(errorCallback){try{errorCallback(msg);}
catch(e){console.error('Exception in error callback',e);}}
else{console.error(msg);}}}
function getKey(callback){try{if(secret!==null){report(secret);return;}
var lock=navigator.mozSettings.createLock();var getreq=lock.get(SECRET_SETTINGS_ID);getreq.onsuccess=function(){secret=getreq.result[SECRET_SETTINGS_ID]||null;report(secret);};getreq.onerror=function(){console.error('Error getting ForwardLock setting',getreq.error);report(null);};}
catch(e){console.error('Exception in ForwardLock.getKey():',e);report(null);}
function report(secret){if(callback){try{callback(secret);}
catch(e){console.error('Exception in ForwardLock.getKey() callback',e);}}}}
function getOrCreateKey(callback){getKey(function(key){if(key!==null){report(key);return;}
secret=((Math.random()*0xFFFFFFFF)|0)+1;var setting={};setting[SECRET_SETTINGS_ID]=secret;var setreq=navigator.mozSettings.createLock().set(setting);setreq.onsuccess=function(){report(secret);};setreq.onerror=function(){console.error('Failed to set key in ForwardLock.getOrCreateKey()',setreq.error.name);secret=null;};});function report(secret){if(callback){try{callback(secret);}
catch(e){console.error('Exception in ForwardLock.getOrCreateKey() callback');}}}}
exports.ForwardLock={lockBuffer:lockBuffer,lockBlob:lockBlob,unlockBlob:unlockBlob,mimeSubtype:mimeSubtype,getKey:getKey,getOrCreateKey:getOrCreateKey};}(window));;;'use strict';const DEBUG=true;const OMADownloadStatus=Object.freeze({SUCCESS:'900 Success',INSUFFICIENT_MEMORY:'901 Insufficient memory',USER_CANCELLED:'902 User Cancelled',LOSS_OF_SERVICE:'903 Loss of Service',ATTRIBUTE_MISMATCH:'905 Attribute mismatch',INVALID_DESCRIPTOR:'906 Invalid descriptor',INVALID_DDVERSION:'951 Invalid DDVersion',DEVICE_ABORTED:'952 Device Aborted',NON_ACCEPTABLE_CONTENT:'953 Non-Acceptable Content',LOADER_ERROR:'954 Loader Error'});const DOWNLOAD_ERROR='download_error';const INSTALL_ERROR='install_error';const ERR_DESCRIPTOR_DOWNLOAD_FAILED='err_descriptor_download_failed';const ERR_BAD_DESCRIPTOR='err_bad_descriptor';const ERR_TOO_BIG='err_too_big';const ERR_UNSUPPORTED_TYPE='err_unsupported_type';const ERR_BAD_TYPE='err_bad_type';const ERR_CONTENT_DOWNLOAD_FAILED='err_content_download_failed';const ERR_BAD_DRM_MESSAGE='err_bad_drm_message';const ERR_BAD_IMAGE='err_bad_image';const ERR_BAD_AUDIO='err_bad_audio';const ERR_NO_SPACE='err_no_space';const ERR_NO_SDCARD='err_no_sdcard';const ERR_SDCARD_IN_USE='err_sdcard_in_use';const ERR_DB_STORE_FAILURE='err_db_store_failure';const ERR_DS_SAVE_FAILURE='err_ds_save_failure';const SUCCESS_SONG='success_song';const SUCCESS_RINGTONE='success_ringtone';const SUCCESS_WALLPAPER='success_wallpaper';const systemXHR=Object.freeze({mozSystem:true});const SupportedImageTypes=Object.freeze({'image/jpeg':true,'image/png':true,'image/gif':true,'image/bmp':true});const SupportedAudioTypes=Object.freeze({'audio/mpeg':true,'audio/mp4':true,'audio/opus':true,'audio/ogg':true});const MimeTypeAliases=Object.freeze({'audio/mp3':'audio/mpeg'});const RINGTONE_KEY='dialer.ringtone';const RINGTONE_NAME_KEY='dialer.ringtone.name';const RINGTONE_ID_KEY='dialer.ringtone.id';const WALLPAPER_KEY='wallpaper.image';const SONG='song';const RINGTONE='ringtone';const WALLPAPER='wallpaper';const MAX_DOWNLOAD_SIZE=16*1024*1024;;;'use strict';function debug(...args){if(!DEBUG){return;}
if(!debug.startTime){debug.startTime=Date.now();}
args.unshift('[Locked Content]',Date.now()-debug.startTime);console.log.apply(console,args);}
function $(id){return document.getElementById(id);}
function _(id,args){return navigator.mozL10n.get(id,args);}
function showDialog(options){function close(e){document.body.removeChild(dialog);e.preventDefault();e.stopPropagation();}
var cancelButton;var okButton;var dialog=document.createElement('form');dialog.setAttribute('role','dialog');dialog.dataset.type='confirm';var section=document.createElement('section');dialog.appendChild(section);if(options.title){var title=document.createElement('h1');title.textContent=options.title;section.appendChild(title);}
var msg=document.createElement('p');msg.textContent=options.message;section.appendChild(msg);if(options.details){var details=document.createElement('p');var small=document.createElement('small');small.textContent=options.details;details.appendChild(small);section.appendChild(details);}
var menu=document.createElement('menu');dialog.appendChild(menu);if(options.cancelCallback){cancelButton=document.createElement('button');menu.appendChild(cancelButton);cancelButton.textContent=options.cancelText||_('cancel');cancelButton.onclick=function(e){close(e);options.cancelCallback();};}
if(options.okCallback){okButton=document.createElement('button');menu.appendChild(okButton);okButton.textContent=options.okText||_('ok');if(options.danger){okButton.classList.add('danger');}
else if(!options.cancelCallback){okButton.classList.add('recommend');}
okButton.onclick=function(e){close(e);options.okCallback();};}
if(okButton&&!cancelButton){okButton.classList.add('full');}
if(cancelButton&&!okButton){cancelButton.classList.add('full');}
document.body.appendChild(dialog);};;'use strict';var objectStore=(function(){const DBNAME='LOCKEDCONTENT';const DBVERSION=1;const STORENAMES=['ringtones','wallpapers'];var db;function getStore(access,storeName,callback){if(STORENAMES.indexOf(storeName)===-1){throw Error('unknown object store name:',storeName);}
if(db){callback(db.transaction(storeName,access).objectStore(storeName));}
else{initDB(function(){getStore(access,storeName,callback);});}}
function initDB(callback){var open=indexedDB.open(DBNAME,DBVERSION);open.onsuccess=function(){db=open.result;callback();};open.onupgradeneeded=function(){STORENAMES.forEach(function(storeName){open.result.createObjectStore(storeName,{autoIncrement:true,keyPath:'id'});});};open.onerror=function(){console.error('can not open database:',open.error.name);};}
return{readonly:function readonly(storeName,callback){getStore('readonly',storeName,callback);},readwrite:function readwrite(storeName,callback){getStore('readwrite',storeName,callback);}};}());;'use strict';window.addEventListener('load',function(){navigator.mozL10n.once(function(){navigator.mozSetMessageHandler('activity',function(activity){var type=activity.source.data.type;if(type==='ringtone'||(Array.isArray(type)&&type.indexOf('ringtone')!==-1)){pickRingtone(activity);}
else if(type==='wallpaper'||(Array.isArray(type)&&type.indexOf('wallpaper')!==-1)){pickWallpaper(activity);}
else{console.error('unexpected activity request',activity.source.name,JSON.stringify(activity.source.data));}});});});function pickRingtone(activity){var selectedRingtone;var selectedRingtoneID;var player=new Audio();var currentRingtoneName;var numRingtones=0;var container=$('ringtones');var header=$('header');container.hidden=false;$('done').hidden=false;$('title').textContent=_('pick-ringtone');header.addEventListener('action',function(){player.pause();activity.postError('cancelled');});$('done').onclick=function(){player.pause();ForwardLock.getKey(function(secret){ForwardLock.lockBlob(secret,selectedRingtone.blob,{},function(lockedBlob){activity.postResult({blob:lockedBlob,name:selectedRingtone.descriptor.name,id:selectedRingtoneID});});});};getCurrentRingtoneName(function(name){currentRingtoneName=name;enumerateAndBuildUI();});function getCurrentRingtoneName(callback){navigator.mozSettings.createLock().get(RINGTONE_NAME_KEY).onsuccess=function(e){callback(e.target.result[RINGTONE_NAME_KEY]);};}
function enumerateAndBuildUI(){objectStore.readonly('ringtones',function(ringtoneStore){var cursor=ringtoneStore.openCursor();cursor.onsuccess=function(){if(cursor.result){addRingtone(cursor.result.value,'forwardlock:'+cursor.result.key);cursor.result.continue();}
else{if(numRingtones===0){displayError(activity,'no-installed-ringtones');}}};});}
function addRingtone(ringtone,id){numRingtones++;var name=ringtone.descriptor.name;var listItem=document.createElement('li');var radio=document.createElement('gaia-radio');radio.name='ringtone';var label=document.createElement('label');label.textContent=name;radio.appendChild(label);if(name===currentRingtoneName){selectedRingtone=ringtone;selectedRingtoneID=id;radio.checked=true;}
radio.addEventListener('change',function(){if(radio.checked){selectedRingtone=ringtone;selectedRingtoneID=id;play(ringtone);}});listItem.appendChild(radio);container.appendChild(listItem);}
function play(ringtone){if(!ringtone.url){ringtone.url=URL.createObjectURL(ringtone.blob);}
player.src=ringtone.url;player.play();}}
function pickWallpaper(activity){var numWallpapers=0;var template=$('wallpaper-template');var container=$('wallpapers');container.hidden=false;$('title').textContent=_('pick-wallpaper');$('header').addEventListener('action',function(){activity.postError('cancelled');});objectStore.readonly('wallpapers',function(wallpaperStore){var cursor=wallpaperStore.openCursor();cursor.onsuccess=function(){if(cursor.result){addWallpaper(cursor.result.value);numWallpapers++;cursor.result.continue();}
else{if(numWallpapers===0){displayError(activity,'no-installed-wallpaper');}}};});function addWallpaper(wallpaper){var blob=wallpaper.blob;var url=URL.createObjectURL(blob);var wallpaperEl=template.content.cloneNode(true).firstElementChild;container.appendChild(wallpaperEl);wallpaperEl.style.backgroundImage='url('+url+')';wallpaperEl.onclick=function(){ForwardLock.getKey(function(secret){ForwardLock.lockBlob(secret,blob,{},function(lockedBlob){activity.postResult({blob:lockedBlob});});});};}}
function displayError(activity,id){setTimeout(function(){alert(_(id));activity.postError(id);});}

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,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,14 @@
;'use strict';function BinaryStringView(data){if(typeof data==='string'){this.bytes=new Uint8Array(data.length);for(var i=0;i<data.length;i++){this.bytes[i]=(data.charCodeAt(i)&0xFF);}}else if(data instanceof Uint8Array){this.bytes=data;}else if(data instanceof ArrayBuffer){this.bytes=new Uint8Array(data);}else{throw TypeError();}
this.length=this.bytes.length;this.buffer=this.bytes.buffer;this.byteOffset=this.bytes.byteOffset;this.byteLength=this.bytes.byteLength;}
BinaryStringView.prototype.toString=function toString(){var s='';for(var i=0;i<this.length;i++){s+=String.fromCharCode(this.bytes[i]);}
return s;};BinaryStringView.prototype.toArrayBuffer=function toArrayBuffer(){return this.buffer.slice(this.byteOffset,this.byteOffset+this.byteLength);};BinaryStringView.prototype.charAt=function(i){return String.fromCharCode(this.bytes[i]);};BinaryStringView.prototype.slice=function slice(from,to){if(to===undefined){return new BinaryStringView(this.bytes.subarray(from));}else{return new BinaryStringView(this.bytes.subarray(from,to));}};BinaryStringView.prototype.trim=function(){var start=0,end=this.length-1;var WS=/\s/;while(start<=end&&WS.test(this.charAt(start))){start++;}
while(end>=start&&WS.test(this.charAt(end))){end--;}
return this.slice(start,end+1);};BinaryStringView.prototype.indexOf=function indexOf(target,start){if(typeof target==='string'){target=new BinaryStringView(target);}
start=Math.min(start||0,this.length);if(target.length===0){return start;}
var end=this.length-target.length;var i=start;while(i<=end){var j=0;while(this.bytes[i+j]===target.bytes[j]){if(++j===target.length){return i;}}
i++;}
return-1;};BinaryStringView.prototype.lastIndexOf=function indexOf(target,start){if(typeof target==='string'){target=new BinaryStringView(target);}
if(target.length===0){return Math.min(start||this.length,this.length);}
start=start||this.length-1;var i=start;while(i>=0){var j=0;while(this.bytes[i+j]===target.bytes[j]){if(++j===target.length){return i;}}
i--;}
return-1;};

View file

@ -0,0 +1 @@
;;'use strict';const DEBUG=true;const OMADownloadStatus=Object.freeze({SUCCESS:'900 Success',INSUFFICIENT_MEMORY:'901 Insufficient memory',USER_CANCELLED:'902 User Cancelled',LOSS_OF_SERVICE:'903 Loss of Service',ATTRIBUTE_MISMATCH:'905 Attribute mismatch',INVALID_DESCRIPTOR:'906 Invalid descriptor',INVALID_DDVERSION:'951 Invalid DDVersion',DEVICE_ABORTED:'952 Device Aborted',NON_ACCEPTABLE_CONTENT:'953 Non-Acceptable Content',LOADER_ERROR:'954 Loader Error'});const DOWNLOAD_ERROR='download_error';const INSTALL_ERROR='install_error';const ERR_DESCRIPTOR_DOWNLOAD_FAILED='err_descriptor_download_failed';const ERR_BAD_DESCRIPTOR='err_bad_descriptor';const ERR_TOO_BIG='err_too_big';const ERR_UNSUPPORTED_TYPE='err_unsupported_type';const ERR_BAD_TYPE='err_bad_type';const ERR_CONTENT_DOWNLOAD_FAILED='err_content_download_failed';const ERR_BAD_DRM_MESSAGE='err_bad_drm_message';const ERR_BAD_IMAGE='err_bad_image';const ERR_BAD_AUDIO='err_bad_audio';const ERR_NO_SPACE='err_no_space';const ERR_NO_SDCARD='err_no_sdcard';const ERR_SDCARD_IN_USE='err_sdcard_in_use';const ERR_DB_STORE_FAILURE='err_db_store_failure';const ERR_DS_SAVE_FAILURE='err_ds_save_failure';const SUCCESS_SONG='success_song';const SUCCESS_RINGTONE='success_ringtone';const SUCCESS_WALLPAPER='success_wallpaper';const systemXHR=Object.freeze({mozSystem:true});const SupportedImageTypes=Object.freeze({'image/jpeg':true,'image/png':true,'image/gif':true,'image/bmp':true});const SupportedAudioTypes=Object.freeze({'audio/mpeg':true,'audio/mp4':true,'audio/opus':true,'audio/ogg':true});const MimeTypeAliases=Object.freeze({'audio/mp3':'audio/mpeg'});const RINGTONE_KEY='dialer.ringtone';const RINGTONE_NAME_KEY='dialer.ringtone.name';const RINGTONE_ID_KEY='dialer.ringtone.id';const WALLPAPER_KEY='wallpaper.image';const SONG='song';const RINGTONE='ringtone';const WALLPAPER='wallpaper';const MAX_DOWNLOAD_SIZE=16*1024*1024;

View file

@ -0,0 +1,5 @@
;;'use strict';var objectStore=(function(){const DBNAME='LOCKEDCONTENT';const DBVERSION=1;const STORENAMES=['ringtones','wallpapers'];var db;function getStore(access,storeName,callback){if(STORENAMES.indexOf(storeName)===-1){throw Error('unknown object store name:',storeName);}
if(db){callback(db.transaction(storeName,access).objectStore(storeName));}
else{initDB(function(){getStore(access,storeName,callback);});}}
function initDB(callback){var open=indexedDB.open(DBNAME,DBVERSION);open.onsuccess=function(){db=open.result;callback();};open.onupgradeneeded=function(){STORENAMES.forEach(function(storeName){open.result.createObjectStore(storeName,{autoIncrement:true,keyPath:'id'});});};open.onerror=function(){console.error('can not open database:',open.error.name);};}
return{readonly:function readonly(storeName,callback){getStore('readonly',storeName,callback);},readwrite:function readwrite(storeName,callback){getStore('readwrite',storeName,callback);}};}());

View file

@ -0,0 +1,55 @@
;'use strict';window.addEventListener('load',function(){navigator.mozL10n.once(function(){navigator.mozSetMessageHandler('activity',view);});});function view(activity){debug('view() invoked for activity',activity.source.name,'with data',JSON.stringify(activity.source.data));var descriptor={};var mimeType;var isImage=false;var isAudio=false;var installType;var hasDescriptor;var activityType=normalizeMimeType(activity.source.data.type);if(activityType==='application/vnd.oma.drm.message'){hasDescriptor=false;var url=(activity.source.data.url||'');descriptor.name=getFileNameFromURL(url);descriptor.size=0;descriptor.types=['application/vnd.oma.drm.message'];descriptor.objectURI=url;displayDownloadProgress();}else{hasDescriptor=true;downloadDescriptor(activity.source.data.url);}
function normalizeMimeType(type){type=type.split(';')[0];type=type.toLowerCase();if(type in MimeTypeAliases){type=MimeTypeAliases[type];}
return type;}
function askSongOrRingtone(aCallback){showDialog({message:_('ringtone-or-song-question'),okText:_('ringtone-response'),cancelText:_('song-response'),okCallback:aCallback.bind(undefined,RINGTONE),cancelCallback:aCallback.bind(undefined,SONG)});}
function getFileNameFromURL(aUri){var name='';if(aUri){name=aUri.split('/').pop();if(name.endsWith('.dm')){name=name.slice(0,-3);}
if(name.length>18){name=name.substring(0,15)+'\u2026';}}
return name;}
function getFileNameFromHeader(aHeader){var regexp=/filename="([^"]*)"/i;var match=regexp.exec(aHeader);var name=match&&match[1];if(name){name=getFileNameFromURL(name);}
return name;}
function reportError(type,errorID,downloadStatus,details){console.error(type,errorID,downloadStatus,details);if(downloadStatus){sendStatus(downloadStatus);}
details='['+(details?errorID+': '+details:errorID)+']';showDialog({title:_(type)||type,message:_(errorID),details:details,okCallback:function(){activity.postError(errorID);}});}
function reportSuccess(successID){sendStatus(OMADownloadStatus.success);showDialog({message:_(successID)||successID,okCallback:function(){activity.postResult({success:true});}});}
function sendStatus(status,callback){if(descriptor.installNotifyURI){var xhr=new XMLHttpRequest(systemXHR);xhr.open('POST',descriptor.installNotifyURI);xhr.timeout=1000;xhr.send(status);if(callback){xhr.onloadend=function(){callback();};}}else if(callback){callback();}}
function downloadDescriptor(descriptorURL){debug('Step 1: downloading descriptor from',descriptorURL);var xhr=new XMLHttpRequest(systemXHR);xhr.open('GET',descriptorURL);xhr.responseType='document';xhr.send();xhr.onerror=function(e){reportError(DOWNLOAD_ERROR,ERR_DESCRIPTOR_DOWNLOAD_FAILED,null,xhr.status+' '+xhr.statusText);};xhr.onload=function(){setTimeout(function(){parse(xhr.response);});};}
function parse(document){var types=document.getElementsByTagName('type');if(types){descriptor.types=[];for(var i=0;i<types.length;i++){descriptor.types.push(normalizeMimeType(types[i].textContent.trim()));}}
function get(tag){var elts=document.getElementsByTagName(tag);if(elts&&elts.length){descriptor[tag]=elts[0].textContent.trim();}}
get('size');get('objectURI');get('installNotifyURI');get('DDVersion');get('name');get('description');get('vendor');debug('Step 2: parse descriptor:',JSON.stringify(descriptor));if(!descriptor.types||descriptor.types.length===0||!descriptor.size||!descriptor.objectURI){reportError(DOWNLOAD_ERROR,ERR_BAD_DESCRIPTOR,OMADownloadStatus.INVALID_DESCRIPTOR);return;}
if(descriptor.size>MAX_DOWNLOAD_SIZE){MediaUtils.getLocalizedSize(descriptor.size).then((msg)=>{reportError(DOWNLOAD_ERROR,ERR_TOO_BIG,OMADownloadStatus.INSUFFICIENT_MEMORY,msg);});return;}
if(!descriptor.name){descriptor.name=getFileNameFromURL(descriptor.objectURI);}
if(descriptor.DDVersion&&parseInt(descriptor.DDVersion)>1){reportError(DOWNLOAD_ERROR,ERR_BAD_DESCRIPTOR,OMADownloadStatus.INVALID_DDVERSION);return;}
checkTypes();}
function checkTypes(){debug('Step 3: check types');var types=descriptor.types;for(var i=0;i<types.length;i++){var type=types[i];if(type==='application/vnd.oma.drm.message'){continue;}
mimeType=type;if(type in SupportedImageTypes){isImage=true;}else if(type in SupportedAudioTypes){isAudio=true;}else{mimeType=undefined;reportError(DOWNLOAD_ERROR,ERR_UNSUPPORTED_TYPE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT,type);return;}}
if(types.length<1||types.length>2||(isAudio&&isImage)||(!isAudio&&!isImage)){reportError(DOWNLOAD_ERROR,ERR_BAD_TYPE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT);return;}
if(isImage){installType=WALLPAPER;confirmDownload();}else{askSongOrRingtone(function(response){installType=response;confirmDownload();});}}
function confirmDownload(){debug('Step 4: confirm download');var titleElement=$('download-confirmation-title');titleElement.textContent=_('download-confirmation-title-'+installType);$('download-confirmation-name').textContent=descriptor.name;$('download-confirmation-type').textContent=mimeType;MediaUtils.getLocalizedSizeTokens(descriptor.size).then((args)=>{navigator.mozL10n.setAttributes($('download-confirmation-size'),'fileSize',args);});$('download-confirmation-description').textContent=descriptor.description;var lca;if(descriptor.vendor){lca=_('locked-content-advisory',{vendor:descriptor.vendor});}else{lca=_('locked-content-advisory-generic');}
$('locked-content-advisory-text').textContent=lca;$('download-confirm').onclick=function(e){e.target.disabled=true;displayDownloadProgress();};$('download-cancel').onclick=function(e){debug('download cancelled');$('download-confirmation').hidden=true;sendStatus(OMADownloadStatus.USER_CANCELLED,function(){activity.postError('cancelled');});};$('download-confirmation').hidden=false;}
function displayDownloadProgress(){debug('Step 5: download content and display progress');var bar;var contentLength;if(!hasDescriptor){$('direct-download').hidden=false;bar=$('direct-download-progress');bar.max=100;}else{var titleElement=$('download-confirmation-title');titleElement.textContent=_('downloading-'+installType);$('download-confirmation').hidden=false;bar=$('download-progress');bar.max=descriptor.size;}
bar.style.visibility='visible';bar.value=0;debug('starting download for',descriptor.objectURI);var download=new XMLHttpRequest(systemXHR);download.open('GET',descriptor.objectURI);download.responseType='arraybuffer';download.send();download.onprogress=function(e){if(contentLength===undefined){contentLength=download.getResponseHeader('Content-Length');bar.max=contentLength&&parseInt(contentLength)||bar.max;}
if(descriptor.size||contentLength){bar.value=e.loaded;}else{bar.value=(bar.value+10)%bar.max;}};download.onerror=function(){$('download-confirmation').hidden=true;reportError(DOWNLOAD_ERROR,ERR_CONTENT_DOWNLOAD_FAILED,OMADownloadStatus.LOADER_ERROR,download.status+' '+download.statusText);};download.onload=function(){$('download-cancel').disabled=true;$('download-confirmation').hidden=true;var cdHeader=download.getResponseHeader('Content-Disposition');if(cdHeader&&!hasDescriptor){descriptor.name=getFileNameFromHeader(cdHeader)||descriptor.name;}
var type=normalizeMimeType(download.getResponseHeader('Content-Type'));extractContent(type,download.response);};$('download-cancel').addEventListener('click',function(){download.abort();});}
function extractContent(type,buffer){debug('Step 6a: extractContent',type,buffer.byteLength);if(type!=='application/vnd.oma.drm.message'){previewContent(type,buffer);return;}
var dataString=new BinaryStringView(buffer);dataString=dataString.trim();function malformed(why){if(why){debug('malformed drm message:',why);}
reportError(DOWNLOAD_ERROR,ERR_BAD_DRM_MESSAGE,OMADownloadStatus.ATTRIBUTE_MISMATCH);}
if(dataString.slice(-2).toString()!=='--'){return malformed('missing trailing --');}
var end=dataString.lastIndexOf('\r\n');if(end===-1){return malformed('missing final \r\n');}
var boundaryString=dataString.slice(end+2,-2).toString()+'\r\n';dataString=dataString.slice(0,end);debug('Boundary string is',boundaryString);var headerStart=dataString.indexOf(boundaryString)+boundaryString.length;if(headerStart===-1){return malformed('missing boundary string at start');}
if(dataString.indexOf(boundaryString,headerStart)!==-1){return malformed('more than one part');}
var contentStart=dataString.indexOf('\r\n\r\n',headerStart);if(contentStart===-1){return malformed('missing header separator');}
var headers=dataString.slice(headerStart,contentStart).toString().split('\r\n');var content=dataString.slice(contentStart+4);debug('got first part headers:',JSON.stringify(headers));var contentType;for(var i=0;i<headers.length;i++){var header=headers[i].toLowerCase();if(header.startsWith('content-type:')){contentType=normalizeMimeType(header.substring(13).trim());}}
if(!contentType){return malformed('no content-type header found in first part');}
debug('Found content in drm message file',contentType,content.length);previewContent(contentType,content.toArrayBuffer());}
function previewContent(type,bytes){if(!hasDescriptor){mimeType=type;if(type in SupportedImageTypes){isImage=true;}else if(type in SupportedAudioTypes){isAudio=true;}else{mimeType=undefined;reportError(DOWNLOAD_ERROR,ERR_UNSUPPORTED_TYPE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT,type);return;}}else{if(type!==mimeType){reportError(DOWNLOAD_ERROR,ERR_BAD_DRM_MESSAGE,OMADownloadStatus.ATTRIBUTE_MISMATCH);return;}}
if(isImage){installType=WALLPAPER;previewImage(type,bytes);}else{if(!hasDescriptor){askSongOrRingtone(function(response){installType=response;previewAudio(type,bytes);});}else{previewAudio(type,bytes);}}}
function previewImage(type,bytes){$('download-confirmation').hidden=true;$('preview-image-screen').hidden=false;var blob=new Blob([bytes],{type:type});var url=URL.createObjectURL(blob);var image=new Image();image.src=url;image.onerror=function(){URL.revokeObjectURL(url);reportError(INSTALL_ERROR,ERR_BAD_IMAGE,OMADownloadStatus.NON_ACCEPTABLE_CONTENT);return;};image.onload=function(){var preview=$('preview-image');preview.style.backgroundImage='url('+url+')';$('preview-image-install').disabled=false;};$('preview-image-install').onclick=function(){URL.revokeObjectURL(url);installContent(bytes);};$('preview-image-cancel').onclick=function(){URL.revokeObjectURL(url);sendStatus(OMADownloadStatus.USER_CANCELLED,function(){activity.postError('cancelled');});};}
function previewAudio(type,bytes){$('download-confirmation').hidden=true;$('preview-audio-screen').hidden=false;var blob=new Blob([bytes],{type:type});var url=URL.createObjectURL(blob);var player=$('preview-audio');player.src=url;player.onerror=function(){cleanup();reportError(INSTALL_ERROR,ERR_BAD_AUDIO,OMADownloadStatus.NON_ACCEPTABLE_CONTENT);return;};player.oncanplay=function(){$('preview-audio-install').disabled=false;};player.ontimeupdate=player.ondurationchange=function(){if(player.currentTime>Math.max(5,player.duration/2)){player.pause();player.currentTime=0;}};$('preview-audio-install').onclick=function(){cleanup();installContent(bytes);};$('preview-audio-cancel').onclick=function(){cleanup();sendStatus(OMADownloadStatus.USER_CANCELLED,function(){activity.postError('cancelled');});};function cleanup(){player.pause();player.removeAttribute('src');player.load();URL.revokeObjectURL(url);}}
function installContent(bytes){switch(installType){case SONG:installSong(bytes);return;case RINGTONE:case WALLPAPER:install(installType,bytes,descriptor);return;}}
function installSong(buffer){debug('installSong');ForwardLock.getOrCreateKey(function(secret){debug('got secret key');var blob=ForwardLock.lockBuffer(secret,buffer,mimeType,{vendor:descriptor.vendor,name:descriptor.name,description:descriptor.description});debug('encrypted song');getStorageIfAvailable('music',blob.size,storageSuccess,storageError);function storageError(err){debug('storageError:',err);if(err==='unavailable'){reportError(INSTALL_ERROR,ERR_NO_SDCARD,OMADownloadStatus.INSUFFICIENT_MEMORY);}else if(err==='shared'){reportError(INSTALL_ERROR,ERR_SDCARD_IN_USE,OMADownloadStatus.INSUFFICIENT_MEMORY);}else{reportError(INSTALL_ERROR,ERR_NO_SPACE,OMADownloadStatus.INSUFFICIENT_MEMORY,err);}}
function storageSuccess(storage){debug('got music storage');var filename='locked/';if(descriptor.vendor){filename+=fixPath(descriptor.vendor)+'/';}
filename+=fixPath(descriptor.name)+'.lcka';debug('trying filename',filename);function fixPath(s){return s.replace(/[\/\\\.\,\?\*\:]/g,'');}
getUnusedFilename(storage,filename,function(filename){debug('using filename',filename);var addreq=storage.addNamed(blob,filename);addreq.onerror=function(){reportError(INSTALL_ERROR,ERR_DS_SAVE_FAILURE,OMADownloadStatus.LOADER_ERROR,addreq.error.name);};addreq.onsuccess=function(){reportSuccess(SUCCESS_SONG);};});}});}
function install(installType,buffer,descriptor){ForwardLock.getOrCreateKey();var objectStoreName=installType===RINGTONE?'ringtones':'wallpapers';var blob=new Blob([buffer],{type:mimeType});objectStore.readwrite(objectStoreName,function(store){var req=store.add({blob:blob,descriptor:descriptor});req.onerror=function(){reportError(INSTALL_ERROR,ERR_DB_STORE_FAILURE,OMADownloadStatus.LOADER_ERROR,req.error.name);};req.onsuccess=function(){sendStatus(OMADownloadStatus.SUCCESS);var lock=navigator.mozSettings.createLock();var settings={};if(installType===RINGTONE){settings[RINGTONE_KEY]=blob;settings[RINGTONE_NAME_KEY]=descriptor.name;settings[RINGTONE_ID_KEY]=req.result;}
else{settings[WALLPAPER_KEY]=blob;}
lock.set(settings).onsuccess=function(){var msgid;if(installType===RINGTONE){msgid=SUCCESS_RINGTONE;}else{msgid=SUCCESS_WALLPAPER;}
showDialog({message:_(msgid),okCallback:function(){activity.postResult({success:true});}});};};});}}

View file

@ -0,0 +1,12 @@
;'use strict';window.addEventListener('load',function(){navigator.mozL10n.once(function(){navigator.mozSetMessageHandler('activity',function(activity){var type=activity.source.data.type;if(type==='ringtone'||(Array.isArray(type)&&type.indexOf('ringtone')!==-1)){pickRingtone(activity);}
else if(type==='wallpaper'||(Array.isArray(type)&&type.indexOf('wallpaper')!==-1)){pickWallpaper(activity);}
else{console.error('unexpected activity request',activity.source.name,JSON.stringify(activity.source.data));}});});});function pickRingtone(activity){var selectedRingtone;var selectedRingtoneID;var player=new Audio();var currentRingtoneName;var numRingtones=0;var container=$('ringtones');var header=$('header');container.hidden=false;$('done').hidden=false;$('title').textContent=_('pick-ringtone');header.addEventListener('action',function(){player.pause();activity.postError('cancelled');});$('done').onclick=function(){player.pause();ForwardLock.getKey(function(secret){ForwardLock.lockBlob(secret,selectedRingtone.blob,{},function(lockedBlob){activity.postResult({blob:lockedBlob,name:selectedRingtone.descriptor.name,id:selectedRingtoneID});});});};getCurrentRingtoneName(function(name){currentRingtoneName=name;enumerateAndBuildUI();});function getCurrentRingtoneName(callback){navigator.mozSettings.createLock().get(RINGTONE_NAME_KEY).onsuccess=function(e){callback(e.target.result[RINGTONE_NAME_KEY]);};}
function enumerateAndBuildUI(){objectStore.readonly('ringtones',function(ringtoneStore){var cursor=ringtoneStore.openCursor();cursor.onsuccess=function(){if(cursor.result){addRingtone(cursor.result.value,'forwardlock:'+cursor.result.key);cursor.result.continue();}
else{if(numRingtones===0){displayError(activity,'no-installed-ringtones');}}};});}
function addRingtone(ringtone,id){numRingtones++;var name=ringtone.descriptor.name;var listItem=document.createElement('li');var radio=document.createElement('gaia-radio');radio.name='ringtone';var label=document.createElement('label');label.textContent=name;radio.appendChild(label);if(name===currentRingtoneName){selectedRingtone=ringtone;selectedRingtoneID=id;radio.checked=true;}
radio.addEventListener('change',function(){if(radio.checked){selectedRingtone=ringtone;selectedRingtoneID=id;play(ringtone);}});listItem.appendChild(radio);container.appendChild(listItem);}
function play(ringtone){if(!ringtone.url){ringtone.url=URL.createObjectURL(ringtone.blob);}
player.src=ringtone.url;player.play();}}
function pickWallpaper(activity){var numWallpapers=0;var template=$('wallpaper-template');var container=$('wallpapers');container.hidden=false;$('title').textContent=_('pick-wallpaper');$('header').addEventListener('action',function(){activity.postError('cancelled');});objectStore.readonly('wallpapers',function(wallpaperStore){var cursor=wallpaperStore.openCursor();cursor.onsuccess=function(){if(cursor.result){addWallpaper(cursor.result.value);numWallpapers++;cursor.result.continue();}
else{if(numWallpapers===0){displayError(activity,'no-installed-wallpaper');}}};});function addWallpaper(wallpaper){var blob=wallpaper.blob;var url=URL.createObjectURL(blob);var wallpaperEl=template.content.cloneNode(true).firstElementChild;container.appendChild(wallpaperEl);wallpaperEl.style.backgroundImage='url('+url+')';wallpaperEl.onclick=function(){ForwardLock.getKey(function(secret){ForwardLock.lockBlob(secret,blob,{},function(lockedBlob){activity.postResult({blob:lockedBlob});});});};}}
function displayError(activity,id){setTimeout(function(){alert(_(id));activity.postError(id);});}

View file

@ -0,0 +1,15 @@
;;'use strict';function debug(...args){if(!DEBUG){return;}
if(!debug.startTime){debug.startTime=Date.now();}
args.unshift('[Locked Content]',Date.now()-debug.startTime);console.log.apply(console,args);}
function $(id){return document.getElementById(id);}
function _(id,args){return navigator.mozL10n.get(id,args);}
function showDialog(options){function close(e){document.body.removeChild(dialog);e.preventDefault();e.stopPropagation();}
var cancelButton;var okButton;var dialog=document.createElement('form');dialog.setAttribute('role','dialog');dialog.dataset.type='confirm';var section=document.createElement('section');dialog.appendChild(section);if(options.title){var title=document.createElement('h1');title.textContent=options.title;section.appendChild(title);}
var msg=document.createElement('p');msg.textContent=options.message;section.appendChild(msg);if(options.details){var details=document.createElement('p');var small=document.createElement('small');small.textContent=options.details;details.appendChild(small);section.appendChild(details);}
var menu=document.createElement('menu');dialog.appendChild(menu);if(options.cancelCallback){cancelButton=document.createElement('button');menu.appendChild(cancelButton);cancelButton.textContent=options.cancelText||_('cancel');cancelButton.onclick=function(e){close(e);options.cancelCallback();};}
if(options.okCallback){okButton=document.createElement('button');menu.appendChild(okButton);okButton.textContent=options.okText||_('ok');if(options.danger){okButton.classList.add('danger');}
else if(!options.cancelCallback){okButton.classList.add('recommend');}
okButton.onclick=function(e){close(e);options.okCallback();};}
if(okButton&&!cancelButton){okButton.classList.add('full');}
if(cancelButton&&!okButton){cancelButton.classList.add('full');}
document.body.appendChild(dialog);}

View file

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

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"موافق"},{"$i":"download-button","$v":"تنزيل"},{"$i":"install-button","$v":"تثبيت"},{"$i":"cancel-button","$v":"ألغِ"},{"$i":"download_error","$v":"خطأ في التنزيل"},{"$i":"install_error","$v":"خطأ في التثبيت"},{"$i":"err_descriptor_download_failed","$v":"فشل التنزيل بسبب خطأ في الخادم."},{"$i":"err_bad_descriptor","$v":"فشل التحميل بسبب خطأ في الخادم."},{"$i":"err_too_big","$v":"حجم الملف أكبر من أن يتم تنزيله."},{"$i":"err_unsupported_type","$v":"هذا النوع من الوسائط المشتراة غير مدعوم على هاتفك."},{"$i":"err_bad_type","$v":"فشل في التنزيل بسبب خطأ في الخادم."},{"$i":"err_content_download_failed","$v":"فشل التنزيل بسبب خطأ في الخادم."},{"$i":"err_bad_drm_message","$v":"فشل التنزيل بسبب خطأ في الخادم."},{"$i":"err_bad_image","$v":"الصورة التي حملتها لا يستطيع هذا الجهاز عرضها."},{"$i":"err_bad_audio","$v":"هذا الجهاز لن يستطيع تشغيل الملف الذي تم تحميله."},{"$i":"err_no_space","$v":"لا يوجد مساحة تخزين كافية لحفظ هذه الأغنية."},{"$i":"err_no_sdcard","$v":"غير قادر على حفظ الأغنية لأنه لايوجد بطاقة ذاكرة."},{"$i":"err_sdcard_in_use","$v":"غير قادر على حفظ الاغنية لأن بطاقة الذاكرة قيد الإستخدام. افصل هاتفك ثم حاول التحميل مجددا."},{"$i":"err_ds_save_failure","$v":"خطأ في حفظ ملف الوسائط."},{"$i":"err_db_store_failure","$v":"خطأ في حفظ ملف الوسائط."},{"$i":"success_song","$v":"تم حفظ و تنصيب الأغنية. استخدم تطبيق الموسيقى كي تشغلها."},{"$i":"success_ringtone","$v":"تم تنزيل و تنصيب نغمة الاتصال."},{"$i":"success_wallpaper","$v":"تم تنزيل و تنصيب الخلفية."},{"$i":"ringtone-or-song-question","$v":"هل ترغب في تثبيت هذا الملف الصّوتي كأغنية أو كرنّة هاتف؟"},{"$i":"ringtone-response","$v":"نغمة اتصال"},{"$i":"song-response","$v":"أغنية"},{"$i":"download-confirmation-title-song","$v":"هل تريد تنزيل الأغنية؟"},{"$i":"download-confirmation-title-ringtone","$v":"هل تريد تنزيل نغمة الاتصال؟"},{"$i":"download-confirmation-title-wallpaper","$v":"هل تريد تنزيل الخلفية؟"},{"$i":"downloading-song","$v":"جارِ تحميل الأغنية..."},{"$i":"downloading-ringtone","$v":"جارِ تحميل نغمة الاتصال..."},{"$i":"downloading-wallpaper","$v":"جارِ تنزيل الخلفية..."},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," حجب ملف الوسائط حتى لا تستطيع مشاركته مع الآخرين أو نقله الي جهاز جديد."]},{"$i":"locked-content-advisory-generic","$v":"البائع حجب ملف الوسائط هذا حتى لا تستطيع مشاركته مع الآخرين أو نقله الي جهاز جديد."},{"$i":"download-confirmation-name","$v":"الإسم"},{"$i":"download-confirmation-type","$v":"النوع"},{"$i":"download-confirmation-size","$v":"الحجم"},{"$i":"download-confirmation-vendor","$v":"البائع"},{"$i":"download-confirmation-description","$v":"معلومات"},{"$i":"download-progress-title","$v":"جارِ التحميل"},{"$i":"preview-image-title","$v":"معاينة الصورة"},{"$i":"preview-audio-title","$v":"معاينة الصوت"},{"$i":"byteUnit-B","$v":"بايت"},{"$i":"byteUnit-KB","$v":"ك.ب"},{"$i":"byteUnit-MB","$v":"ميجا بايت"},{"$i":"byteUnit-GB","$v":"جيجا بايت"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Добре"},{"$i":"download-button","$v":"Изтегляне"},{"$i":"install-button","$v":"Инсталиране"},{"$i":"cancel-button","$v":"Отказ"},{"$i":"download_error","$v":"Грешка при изтегляне"},{"$i":"install_error","$v":"Грешка при инсталиране"},{"$i":"err_descriptor_download_failed","$v":"Неуспешно изтегляне поради грешка в сървъра."},{"$i":"err_bad_descriptor","$v":"Неуспешно изтегляне поради грешка в сървъра."},{"$i":"err_too_big","$v":"Файлът е твърде голям за изтегляне."},{"$i":"err_unsupported_type","$v":"Този тип медия не е поддържан от телефона Ви."},{"$i":"err_bad_type","$v":"Неуспешно изтегляне поради грешка в сървъра."},{"$i":"err_content_download_failed","$v":"Неуспешно изтегляне поради грешка в сървъра."},{"$i":"err_bad_drm_message","$v":"Неуспешно изтегляне поради грешка в сървъра."},{"$i":"err_bad_image","$v":"Сваленото изображение не може да бъде показано на това устройство."},{"$i":"err_bad_audio","$v":"Сваленият файл не може да бъде изпълнен на това устройство."},{"$i":"err_no_space","$v":"Няма достатъчно място на устройството, за да бъде запазена тази песен."},{"$i":"err_no_sdcard","$v":"Песента не може да бъде запазена, защото липсва карта за памет."},{"$i":"err_sdcard_in_use","$v":"Песента не може да бъде запазена, защото картата за памет се използва. Изключете кабела от телефона и опитайте да я изтеглите отново."},{"$i":"err_ds_save_failure","$v":"Грешка при запазване на медиен файл."},{"$i":"err_db_store_failure","$v":"Грешка при запазване на медиен файл."},{"$i":"success_song","$v":"Песента е свалена и инсталирана. Използвайте приложението Музика, за да я чуете."},{"$i":"success_ringtone","$v":"Звукът за звънене е свален и инсталиран."},{"$i":"success_wallpaper","$v":"Тапетът е свален и инсталиран."},{"$i":"ringtone-or-song-question","$v":"Желаете ли да инсталирате този аудио файл като песен или като звук за звънене?"},{"$i":"ringtone-response","$v":"Звук за звънене"},{"$i":"song-response","$v":"Песен"},{"$i":"download-confirmation-title-song","$v":"Да бъде ли свалена песента?"},{"$i":"download-confirmation-title-ringtone","$v":"Да бъде ли свален звукът за звънене?"},{"$i":"download-confirmation-title-wallpaper","$v":"Да бъде ли свален тапетът?"},{"$i":"downloading-song","$v":"Изтегляне на песен…"},{"$i":"downloading-ringtone","$v":"Изтегляне на звук за звънене…"},{"$i":"downloading-wallpaper","$v":"Изтегляне на тапет…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," е заключил този медиен файл, така че той не може да бъде споделян или преместен на ново устройство."]},{"$i":"locked-content-advisory-generic","$v":"Продавачът е заключил този медиен файл, така че той не може да бъде споделян или преместен на ново устройство."},{"$i":"download-confirmation-name","$v":"Име"},{"$i":"download-confirmation-type","$v":"Тип"},{"$i":"download-confirmation-size","$v":"Размер"},{"$i":"download-confirmation-vendor","$v":"Продавач"},{"$i":"download-confirmation-description","$v":"Информация"},{"$i":"download-progress-title","$v":"Изтегляне"},{"$i":"preview-image-title","$v":"Прегледай изображение"},{"$i":"preview-audio-title","$v":"Прослушай аудио"},{"$i":"byteUnit-B","$v":"байта"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"D'acord"},{"$i":"download-button","$v":"Baixa"},{"$i":"install-button","$v":"Instal·la"},{"$i":"cancel-button","$v":"Cancel·la"},{"$i":"download_error","$v":"Error de baixada"},{"$i":"install_error","$v":"Error d'instal·lació"},{"$i":"err_descriptor_download_failed","$v":"La baixada ha fallat per un error del servidor."},{"$i":"err_bad_descriptor","$v":"La baixada ha fallat per un error del servidor."},{"$i":"err_too_big","$v":"El fitxer és massa gran per baixar-lo."},{"$i":"err_unsupported_type","$v":"El vostre telèfon no reconeix aquest tipus de fitxer multimèdia adquirit."},{"$i":"err_bad_type","$v":"La baixada ha fallat per un error del servidor."},{"$i":"err_content_download_failed","$v":"La baixada ha fallat per un error del servidor."},{"$i":"err_bad_drm_message","$v":"La baixada ha fallat per un error del servidor."},{"$i":"err_bad_image","$v":"La imatge baixada no es pot mostrar en el dispositiu."},{"$i":"err_bad_audio","$v":"El fitxer baixat no es pot reproduir en el dispositiu."},{"$i":"err_no_space","$v":"No hi ha suficient espai al dispositiu per desar la cançó."},{"$i":"err_no_sdcard","$v":"No es pot desar la cançó perquè no hi ha targeta de memòria."},{"$i":"err_sdcard_in_use","$v":"No es pot desar la cançó perquè la targeta de memòria és en ús. Desendolleu el vostre telèfon i proveu a baixar-la de nou."},{"$i":"err_ds_save_failure","$v":"Error en desar el fitxer multimèdia."},{"$i":"err_db_store_failure","$v":"Error en desar el fitxer multimèdia."},{"$i":"success_song","$v":"Cançó baixada i instal·lada. Utilitzeu l'aplicació Música per reproduir-la."},{"$i":"success_ringtone","$v":"S'ha baixat i instal·lat el to de trucada."},{"$i":"success_wallpaper","$v":"S'ha baixat i instal·lat el fons de pantalla."},{"$i":"ringtone-or-song-question","$v":"Voleu instal·lar aquest fitxer d'àudio com a cançó o com a to de trucada?"},{"$i":"ringtone-response","$v":"To de trucada"},{"$i":"song-response","$v":"Cançó"},{"$i":"download-confirmation-title-song","$v":"Voleu baixar la cançó?"},{"$i":"download-confirmation-title-ringtone","$v":"Voleu baixar el to de trucada?"},{"$i":"download-confirmation-title-wallpaper","$v":"Voleu baixar el fons de pantalla?"},{"$i":"downloading-song","$v":"S'està baixant la cançó…"},{"$i":"downloading-ringtone","$v":"S'està baixant el to de trucada…"},{"$i":"downloading-wallpaper","$v":"S'està baixant el fons de pantalla…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," ha bloquejat aquest fitxer multimèdia perquè no es pugui compartir amb altres o transferir-lo a un altre dispositiu."]},{"$i":"locked-content-advisory-generic","$v":"El venedor ha bloquejat aquest fitxer multimèdia perquè no es pugui compartir amb altres o transferir-lo a un altre dispositiu."},{"$i":"download-confirmation-name","$v":"Nom"},{"$i":"download-confirmation-type","$v":"Tipus"},{"$i":"download-confirmation-size","$v":"Mida"},{"$i":"download-confirmation-vendor","$v":"Proveïdor"},{"$i":"download-confirmation-description","$v":"Informació"},{"$i":"download-progress-title","$v":"S'està baixant"},{"$i":"preview-image-title","$v":"Previsualitza la imatge"},{"$i":"preview-audio-title","$v":"Previsualitza l'àudio"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"kB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Stáhnout"},{"$i":"install-button","$v":"Nainstalovat"},{"$i":"cancel-button","$v":"Zrušit"},{"$i":"download_error","$v":"Chyba stahování"},{"$i":"install_error","$v":"Chyba instalace"},{"$i":"err_descriptor_download_failed","$v":"Při stahování nastala chyba serveru."},{"$i":"err_bad_descriptor","$v":"Při stahování nastala chyba serveru."},{"$i":"err_too_big","$v":"Soubor je příliš veliký ke stažení."},{"$i":"err_unsupported_type","$v":"Tento typ zakoupeného média není na vašem telefonu podporován."},{"$i":"err_bad_type","$v":"Při stahování nastala chyba serveru."},{"$i":"err_content_download_failed","$v":"Při stahování nastala chyba serveru."},{"$i":"err_bad_drm_message","$v":"Při stahování nastala chyba serveru."},{"$i":"err_bad_image","$v":"Stažený obrázek nelze na tomto zařízení zobrazit."},{"$i":"err_bad_audio","$v":"Stažený soubor nelze na tomto zařízení přehrát."},{"$i":"err_no_space","$v":"Na vašem zařízení není dostatek volné paměti pro uložení této skladby."},{"$i":"err_no_sdcard","$v":"Skladbu nelze uložit, protože není vložena paměťová karta."},{"$i":"err_sdcard_in_use","$v":"Skladbu nelze uložit, protože paměťová karta je právě používána. Odpojte svůj telefon a zkuste ji stáhnout znovu."},{"$i":"err_ds_save_failure","$v":"Chyba při ukládání multimediálního souboru."},{"$i":"err_db_store_failure","$v":"Chyba při ukládání multimediálního souboru."},{"$i":"success_song","$v":"Skladba byla stažena a nainstalována. Pro její přehrání použijte aplikaci Hudba."},{"$i":"success_ringtone","$v":"Vyzvánění bylo staženo a nainstalováno."},{"$i":"success_wallpaper","$v":"Tapeta byla stažena a nainstalována."},{"$i":"ringtone-or-song-question","$v":"Chcete tento zvukový soubor nainstalovat jako skladbu nebo jako vyzvánění? "},{"$i":"ringtone-response","$v":"Vyzvánění"},{"$i":"song-response","$v":"Skladba"},{"$i":"download-confirmation-title-song","$v":"Stáhnout skladbu?"},{"$i":"download-confirmation-title-ringtone","$v":"Stáhnout vyzvánění?"},{"$i":"download-confirmation-title-wallpaper","$v":"Stáhnout tapetu?"},{"$i":"downloading-song","$v":"Stahování skladby…"},{"$i":"downloading-ringtone","$v":"Stahování vyzvánění…"},{"$i":"downloading-wallpaper","$v":"Stahování tapety…"},{"$i":"locked-content-advisory","$v":["Tento multimediální soubor byl uzamčen prodejcem ",{"t":"idOrVar","v":"vendor"},". Nelze jej tedy sdílet s ostatními nebo přenášet na nová zařízení."]},{"$i":"locked-content-advisory-generic","$v":"Tento multimediální soubor byl prodejcem uzamčen a nelze jej tedy sdílet s ostatními nebo přenášet na nová zařízení."},{"$i":"download-confirmation-name","$v":"Název"},{"$i":"download-confirmation-type","$v":"Typ"},{"$i":"download-confirmation-size","$v":"Velikost"},{"$i":"download-confirmation-vendor","$v":"Prodejce"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Stahování"},{"$i":"preview-image-title","$v":"Náhled obrázku"},{"$i":"preview-audio-title","$v":"Audio ukázka"},{"$i":"byteUnit-B","$v":"bytů"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Hent"},{"$i":"install-button","$v":"Installer"},{"$i":"cancel-button","$v":"Annuller"},{"$i":"download_error","$v":"Hentningsfejl"},{"$i":"install_error","$v":"Installationsfejl"},{"$i":"err_descriptor_download_failed","$v":"Hentningen mislykkedes på grund af en serverfejl."},{"$i":"err_bad_descriptor","$v":"Hentningen mislykkedes på grund af en serverfejl."},{"$i":"err_too_big","$v":"Filen er for stor til at hente."},{"$i":"err_unsupported_type","$v":"Denne type af købte medier understøttes ikke på din telefon."},{"$i":"err_bad_type","$v":"Hentningen mislykkedes på grund af en serverfejl."},{"$i":"err_content_download_failed","$v":"Hentningen mislykkedes på grund af en serverfejl."},{"$i":"err_bad_drm_message","$v":"Hentningen mislykkedes på grund af en serverfejl."},{"$i":"err_bad_image","$v":"Det hentede billede kan ikke vises på denne enhed."},{"$i":"err_bad_audio","$v":"Den hentede fil kan ikke afspilles på denne enhed."},{"$i":"err_no_space","$v":"Der er ikke lagerplads nok på din enhed til at gemme filen."},{"$i":"err_no_sdcard","$v":"Kan ikke gemme filen, da der ikke er noget hukommelseskort."},{"$i":"err_sdcard_in_use","$v":"Kan ikke gemme filen, da hukommelseskortet er i brug. Afkobl din telefon og prøv at hente igen."},{"$i":"err_ds_save_failure","$v":"Kunne ikke gemme mediefil."},{"$i":"err_db_store_failure","$v":"Kunne ikke gemme mediefil."},{"$i":"success_song","$v":"Musik hentet og installeret. Brug musik-app'en til at afspille den."},{"$i":"success_ringtone","$v":"Ringetone hentet og installeret."},{"$i":"success_wallpaper","$v":"Baggrund hentet og installeret."},{"$i":"ringtone-or-song-question","$v":"Vil du installere denne lydfil som et stykke musik eller som en ringetone?"},{"$i":"ringtone-response","$v":"Ringetone"},{"$i":"song-response","$v":"Musik"},{"$i":"download-confirmation-title-song","$v":"Hent musik?"},{"$i":"download-confirmation-title-ringtone","$v":"Hent ringetone?"},{"$i":"download-confirmation-title-wallpaper","$v":"Hent baggrund?"},{"$i":"downloading-song","$v":"Henter musik…"},{"$i":"downloading-ringtone","$v":"Henter ringetone…"},{"$i":"downloading-wallpaper","$v":"Henter baggrund…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," har låst denne mediefil, så den ikke kan deles med andre eller overføres til en anden enhed."]},{"$i":"locked-content-advisory-generic","$v":"Sælgeren har låst denne mediefil, så den ikke kan deles med andre eller overføres til en anden enhed."},{"$i":"download-confirmation-name","$v":"Navn"},{"$i":"download-confirmation-type","$v":"Type"},{"$i":"download-confirmation-size","$v":"Størrelse"},{"$i":"download-confirmation-vendor","$v":"Sælger"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Henter"},{"$i":"preview-image-title","$v":"Billedeksempel"},{"$i":"preview-audio-title","$v":"Lydeksempel"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Herunterladen"},{"$i":"install-button","$v":"Installieren"},{"$i":"cancel-button","$v":"Abbrechen"},{"$i":"download_error","$v":"Fehler beim Herunterladen"},{"$i":"install_error","$v":"Fehler bei der Installation"},{"$i":"err_descriptor_download_failed","$v":"Der Download schlug wegen eines Fehlers auf dem Server fehl."},{"$i":"err_bad_descriptor","$v":"Der Download schlug wegen eines Fehlers auf dem Server fehl."},{"$i":"err_too_big","$v":"Die Datei ist zu groß."},{"$i":"err_unsupported_type","$v":"Dieser erworbene Medientyp wird von Ihrem Telefon nicht unterstützt."},{"$i":"err_bad_type","$v":"Der Download schlug wegen eines Fehlers auf dem Server fehl."},{"$i":"err_content_download_failed","$v":"Der Download schlug wegen eines Fehlers auf dem Server fehl."},{"$i":"err_bad_drm_message","$v":"Der Download schlug wegen eines Fehlers auf dem Server fehl."},{"$i":"err_bad_image","$v":"Die heruntergeladene Grafik kann auf diesem Gerät nicht angezeigt werden."},{"$i":"err_bad_audio","$v":"Die heruntergeladene Datei kann auf diesem Gerät nicht wiedergegeben werden."},{"$i":"err_no_space","$v":"Es steht nicht genügend Speicherplatz zum Speichern dieses Musiktitels zur Verfügung."},{"$i":"err_no_sdcard","$v":"Musiktitel kann nicht gespeichert werden, da keine Speicherkarte vorhanden ist."},{"$i":"err_sdcard_in_use","$v":"Musiktitel kann nicht gespeichert werden, da die Speicherkarte verwendet wird. Ziehen Sie das Telefon ab und versuchen Sie es erneut."},{"$i":"err_ds_save_failure","$v":"Fehler beim Speichern der Mediendatei."},{"$i":"err_db_store_failure","$v":"Fehler beim Speichern der Mediendatei."},{"$i":"success_song","$v":"Musiktitel heruntergeladen und installiert. Verwenden Sie die App \"Musik\" zur Wiedergabe."},{"$i":"success_ringtone","$v":"Klingelton heruntergeladen und installiert."},{"$i":"success_wallpaper","$v":"Hintergrundbild heruntergeladen und installiert."},{"$i":"ringtone-or-song-question","$v":"Soll diese Audio-Datei als Musiktitel oder als Klingelton installiert werden?"},{"$i":"ringtone-response","$v":"Klingelton"},{"$i":"song-response","$v":"Musiktitel"},{"$i":"download-confirmation-title-song","$v":"Titel herunterladen?"},{"$i":"download-confirmation-title-ringtone","$v":"Klingelton herunterladen?"},{"$i":"download-confirmation-title-wallpaper","$v":"Hintergrundbild herunterladen?"},{"$i":"downloading-song","$v":"Titel wird heruntergeladen…"},{"$i":"downloading-ringtone","$v":"Klingelton wird heruntergeladen…"},{"$i":"downloading-wallpaper","$v":"Hintergrundbild wird heruntergeladen…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," hat die Berechtigungen an dieser Mediendatei eingeschränkt, sodass sie nicht geteilt oder auf ein neues Gerät übertragen werden kann."]},{"$i":"locked-content-advisory-generic","$v":"Der Verkäufer hat die Berechtigungen an dieser Mediendatei eingeschränkt, sodass sie nicht geteilt oder auf ein neues Gerät übertragen werden kann."},{"$i":"download-confirmation-name","$v":"Name"},{"$i":"download-confirmation-type","$v":"Typ"},{"$i":"download-confirmation-size","$v":"Größe"},{"$i":"download-confirmation-vendor","$v":"Verkäufer"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Wird heruntergeladen…"},{"$i":"preview-image-title","$v":"Grafik ansehen"},{"$i":"preview-audio-title","$v":"Audio anhören"},{"$i":"byteUnit-B","$v":"Bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"ΟΚ"},{"$i":"download-button","$v":"Λήψη"},{"$i":"install-button","$v":"Εγκατάσταση"},{"$i":"cancel-button","$v":"Ακύρωση"},{"$i":"download_error","$v":"Σφάλμα λήψης"},{"$i":"install_error","$v":"Σφάλμα εγκατάστασης"},{"$i":"err_descriptor_download_failed","$v":"Η λήψη απέτυχε λόγω σφάλματος διακομιστή."},{"$i":"err_bad_descriptor","$v":"Η λήψη απέτυχε λόγω σφάλματος διακομιστή."},{"$i":"err_too_big","$v":"Πολύ μεγάλο αρχείο για λήψη."},{"$i":"err_unsupported_type","$v":"Αυτός ο τύπος πολυμέσων δεν υποστηρίζεται από τη συσκευή σας."},{"$i":"err_bad_type","$v":"Η λήψη απέτυχε λόγω σφάλματος διακομιστή."},{"$i":"err_content_download_failed","$v":"Η λήψη απέτυχε λόγω σφάλματος διακομιστή."},{"$i":"err_bad_drm_message","$v":"Η λήψη απέτυχε λόγω σφάλματος διακομιστή."},{"$i":"err_bad_image","$v":"Η συσκευή δεν μπορεί να προβάλει την ληφθείσα εικόνα."},{"$i":"err_bad_audio","$v":"Η συσκευή δεν μπορεί να αναπαράγει το ληφθέν αρχείο."},{"$i":"err_no_space","$v":"Δεν υπάρχει αρκετός χώρος στη συσκευή για την αποθήκευση του κομματιού."},{"$i":"err_no_sdcard","$v":"Δεν είναι δυνατή η αποθήκευση του κομματιού λόγω έλλειψης κάρτας μνήμης."},{"$i":"err_sdcard_in_use","$v":"Δεν είναι δυνατή η αποθήκευση του κομματιού καθώς η κάρτα μνήμης είναι απασχολημένη. Αποσυνδέστε τη συσκευή και δοκιμάστε ξανά."},{"$i":"err_ds_save_failure","$v":"Σφάλμα κατά την αποθήκευση αρχείου πολυμέσων."},{"$i":"err_db_store_failure","$v":"Σφάλμα κατά την αποθήκευση αρχείου πολυμέσων."},{"$i":"success_song","$v":"Το μουσικό κομμάτι ελήφθη και εγκαταστάθηκε. Χρησιμοποιείστε την εφαρμογή «Μουσική» για να το αναπαράγετε."},{"$i":"success_ringtone","$v":"Ο ήχος κλήσης ελήφθη και εγκαταστάθηκε."},{"$i":"success_wallpaper","$v":"Η ταπετσαρία ελήφθη και εγκαταστάθηκε."},{"$i":"ringtone-or-song-question","$v":"Θέλετε να γίνει λήψη και εγκατάσταση του αρχείου ήχου ως μουσικό κομμάτι ή ως ήχος κλήσης;"},{"$i":"ringtone-response","$v":"Ήχος κλήσης"},{"$i":"song-response","$v":"Μουσικό κομμάτι"},{"$i":"download-confirmation-title-song","$v":"Λήψη μουσικού κομματιού;"},{"$i":"download-confirmation-title-ringtone","$v":"Λήψη ήχου κλήσης;"},{"$i":"download-confirmation-title-wallpaper","$v":"Λήψη ταπετσαρίας;"},{"$i":"downloading-song","$v":"Λήψη μουσικού κομματιού…"},{"$i":"downloading-ringtone","$v":"Λήψη ήχου κλήσης…"},{"$i":"downloading-wallpaper","$v":"Λήψη ταπετσαρίας…"},{"$i":"locked-content-advisory","$v":["Ο πάροχος ",{"t":"idOrVar","v":"vendor"}," έχει κλειδώσει αυτό τον τύπο αρχείου, έτσι δεν είναι δυνατή η μεταφορά του."]},{"$i":"locked-content-advisory-generic","$v":"Ο πωλητής έχει κλειδώσει αυτό τον τύπο αρχείου, έτσι δεν είναι δυνατή η μεταφορά του."},{"$i":"download-confirmation-name","$v":"Όνομα"},{"$i":"download-confirmation-type","$v":"Τύπος"},{"$i":"download-confirmation-size","$v":"Μέγεθος"},{"$i":"download-confirmation-vendor","$v":"Πωλητής"},{"$i":"download-confirmation-description","$v":"Πληροφορίες"},{"$i":"download-progress-title","$v":"Λήψη"},{"$i":"preview-image-title","$v":"Προεπισκόπηση εικόνας"},{"$i":"preview-audio-title","$v":"Προεπισκόπηση ήχου"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Download"},{"$i":"install-button","$v":"Install"},{"$i":"cancel-button","$v":"Cancel"},{"$i":"download_error","$v":"Download Error"},{"$i":"install_error","$v":"Installation Error"},{"$i":"err_descriptor_download_failed","$v":"The download failed because of a server error."},{"$i":"err_bad_descriptor","$v":"The download failed because of a server error."},{"$i":"err_too_big","$v":"File is too large to download."},{"$i":"err_unsupported_type","$v":"This type of purchased media is not supported on your phone."},{"$i":"err_bad_type","$v":"The download failed because of a server error."},{"$i":"err_content_download_failed","$v":"The download failed because of a server error."},{"$i":"err_bad_drm_message","$v":"The download failed because of a server error."},{"$i":"err_bad_image","$v":"The downloaded image cannot be displayed on this device."},{"$i":"err_bad_audio","$v":"The downloaded file cannot be played on this device."},{"$i":"err_no_space","$v":"There is not enough storage space on your device to save this song."},{"$i":"err_no_sdcard","$v":"Cannot save song because there is no memory card."},{"$i":"err_sdcard_in_use","$v":"Cannot save song because the memory card is in use. Unplug your phone and try downloading again."},{"$i":"err_ds_save_failure","$v":"Error saving media file."},{"$i":"err_db_store_failure","$v":"Error saving media file."},{"$i":"success_song","$v":"Song downloaded and installed. Use the Music app to play it."},{"$i":"success_ringtone","$v":"Ringtone downloaded and installed."},{"$i":"success_wallpaper","$v":"Wallpaper downloaded and installed."},{"$i":"ringtone-or-song-question","$v":"Do you want to install this audio file as a song or as a ringtone?"},{"$i":"ringtone-response","$v":"Ringtone"},{"$i":"song-response","$v":"Song"},{"$i":"download-confirmation-title-song","$v":"Download song?"},{"$i":"download-confirmation-title-ringtone","$v":"Download ringtone?"},{"$i":"download-confirmation-title-wallpaper","$v":"Download wallpaper?"},{"$i":"downloading-song","$v":"Downloading song…"},{"$i":"downloading-ringtone","$v":"Downloading ringtone…"},{"$i":"downloading-wallpaper","$v":"Downloading wallpaper…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," has locked this media file so that it cannot be shared with others or transferred to a new device."]},{"$i":"locked-content-advisory-generic","$v":"The seller has locked this media file so that it cannot be shared with others or transferred to a new device."},{"$i":"download-confirmation-name","$v":"Name"},{"$i":"download-confirmation-type","$v":"Type"},{"$i":"download-confirmation-size","$v":"Size"},{"$i":"download-confirmation-vendor","$v":"Vendor"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Downloading"},{"$i":"preview-image-title","$v":"Preview image"},{"$i":"preview-audio-title","$v":"Preview audio"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Aceptar"},{"$i":"download-button","$v":"Descargar"},{"$i":"install-button","$v":"Instalar"},{"$i":"cancel-button","$v":"Cancelar"},{"$i":"download_error","$v":"Error en descarga"},{"$i":"install_error","$v":"Error en instalación"},{"$i":"err_descriptor_download_failed","$v":"La descarga se interrumpió debido a un error del servidor."},{"$i":"err_bad_descriptor","$v":"La descarga se interrumpió debido a un error del servidor."},{"$i":"err_too_big","$v":"El archivo es demasiado grande para descargarse."},{"$i":"err_unsupported_type","$v":"El tipo de archivo multimedia adquirido no es compatible con su teléfono."},{"$i":"err_bad_type","$v":"La descarga se interrumpió debido a un error del servidor."},{"$i":"err_content_download_failed","$v":"La descarga se interrumpió debido a un error del servidor."},{"$i":"err_bad_drm_message","$v":"La descarga se interrumpió debido a un error del servidor."},{"$i":"err_bad_image","$v":"La imagen descargada no puede mostrarse en este dispositivo."},{"$i":"err_bad_audio","$v":"El archivo descargado no puede reproducirse en este dispositivo."},{"$i":"err_no_space","$v":"No hay suficiente espacio de almacenamiento en el dispositivo para guardar la canción."},{"$i":"err_no_sdcard","$v":"No podemos guardar la canción porque no hay tarjeta de memoria."},{"$i":"err_sdcard_in_use","$v":"No podemos guardar la canción porque no hay tarjeta de memoria en uso. Desconecte el teléfono y pruebe a descargarla de nuevo."},{"$i":"err_ds_save_failure","$v":"Error al guardar archivo multimedia."},{"$i":"err_db_store_failure","$v":"Error al guardar archivo multimedia."},{"$i":"success_song","$v":"Canción guardada e instalada. Use la aplicación Música para reproducirla."},{"$i":"success_ringtone","$v":"Tono de llamada descargado e instalado."},{"$i":"success_wallpaper","$v":"Fondo de pantalla descargado e instalado."},{"$i":"ringtone-or-song-question","$v":"¿Desea instalar este archivo de audio como canción o como tono?"},{"$i":"ringtone-response","$v":"Tono de llamada"},{"$i":"song-response","$v":"Canción"},{"$i":"download-confirmation-title-song","$v":"¿Descargar canción?"},{"$i":"download-confirmation-title-ringtone","$v":"¿Descargar tono de llamada?"},{"$i":"download-confirmation-title-wallpaper","$v":"¿Descargar fondo de pantalla?"},{"$i":"downloading-song","$v":"Descargando canción..."},{"$i":"downloading-ringtone","$v":"Descargando tono de llamada..."},{"$i":"downloading-wallpaper","$v":"Descargando fondo de pantalla..."},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," ha bloqueado este archivo multimedia para que no se comparta con nadie ni se transfiera a un nuevo dispositivo."]},{"$i":"locked-content-advisory-generic","$v":"El vendedor ha bloqueado este archivo multimedia para que no se comparta con nadie ni se transfiera a un nuevo dispositivo."},{"$i":"download-confirmation-name","$v":"Nombre"},{"$i":"download-confirmation-type","$v":"Tipo"},{"$i":"download-confirmation-size","$v":"Tamaño"},{"$i":"download-confirmation-vendor","$v":"Fabricante"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Descargando"},{"$i":"preview-image-title","$v":"Previsualizar imagen"},{"$i":"preview-audio-title","$v":"Escuchar muestra"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"Kb"},{"$i":"byteUnit-MB","$v":"Mb"},{"$i":"byteUnit-GB","$v":"Gb"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Ados"},{"$i":"download-button","$v":"Deskargatu"},{"$i":"install-button","$v":"Instalatu"},{"$i":"cancel-button","$v":"Utzi"},{"$i":"download_error","$v":"Deskarga-errorea"},{"$i":"install_error","$v":"Instalazio-errorea"},{"$i":"err_descriptor_download_failed","$v":"Deskargak huts egin du zerbitzariaren errore bat dela eta."},{"$i":"err_bad_descriptor","$v":"Deskargak huts egin du zerbitzariaren errore bat dela eta."},{"$i":"err_too_big","$v":"Fitxategia handiegia da deskargatzeko."},{"$i":"err_unsupported_type","$v":"Zure gailuak ez du erositako multimedia mota hau onartzen."},{"$i":"err_bad_type","$v":"Deskargak huts egin du zerbitzariaren errore bat dela eta."},{"$i":"err_content_download_failed","$v":"Deskargak huts egin du zerbitzariaren errore bat dela eta."},{"$i":"err_bad_drm_message","$v":"Deskargak huts egin du zerbitzariaren errore bat dela eta."},{"$i":"err_bad_image","$v":"Ezin da deskargatutako irudia bistaratu gailu honetan."},{"$i":"err_bad_audio","$v":"Ezin da deskargatutako fitxategia erreproduzitu gailu honetan."},{"$i":"err_no_space","$v":"Ez dago abesti hau biltegiratzeko leku libre nahikorik zure gailuan."},{"$i":"err_no_sdcard","$v":"Ezin da abestia gorde memoria-txartelik ez dagoelako."},{"$i":"err_sdcard_in_use","$v":"Ezin da abestia gorde memoria-txartela erabiltzen ari delako. Desentxufatu telefonoa eta saiatu berriro deskargatzen."},{"$i":"err_ds_save_failure","$v":"Errorea multimedia-fitxategia gordetzean."},{"$i":"err_db_store_failure","$v":"Errorea multimedia-fitxategia gordetzean."},{"$i":"success_song","$v":"Abestia deskargatuta eta instalatuta. Erreproduzitzeko, erabili Musika aplikazioa."},{"$i":"success_ringtone","$v":"Txirrin-tonua deskargatuta eta instalatuta."},{"$i":"success_wallpaper","$v":"Horma-papera deskargatuta eta instalatuta."},{"$i":"ringtone-or-song-question","$v":"Audio-fitxategia abesti edo txirrin-tonu gisa instalatu nahi duzu?"},{"$i":"ringtone-response","$v":"Txirrin-tonua"},{"$i":"song-response","$v":"Abestia"},{"$i":"download-confirmation-title-song","$v":"Deskargatu abestia?"},{"$i":"download-confirmation-title-ringtone","$v":"Deskargatu txirrin-tonua?"},{"$i":"download-confirmation-title-wallpaper","$v":"Deskargatu horma-papera?"},{"$i":"downloading-song","$v":"Abestia deskargatzen…"},{"$i":"downloading-ringtone","$v":"Txirrin-tonua deskargatzen…"},{"$i":"downloading-wallpaper","$v":"Horma-papera deskargatzen…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," hornitzaileak multimedia-fitxategia blokeatu du ezin dadin beste inorekin partekatu edo gailu berri batera transferitu."]},{"$i":"locked-content-advisory-generic","$v":"Saltzaileak multimedia-fitxategia blokeatu du ezin dadin beste inorekin partekatu edo gailu berri batera transferitu."},{"$i":"download-confirmation-name","$v":"Izena"},{"$i":"download-confirmation-type","$v":"Mota"},{"$i":"download-confirmation-size","$v":"Tamaina"},{"$i":"download-confirmation-vendor","$v":"Hornitzailea"},{"$i":"download-confirmation-description","$v":"Informazioa"},{"$i":"download-progress-title","$v":"Deskargatzen"},{"$i":"preview-image-title","$v":"Aurreikusi irudia"},{"$i":"preview-audio-title","$v":"Aurreikusi audioa"},{"$i":"byteUnit-B","$v":"byte"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Télécharger"},{"$i":"install-button","$v":"Installer"},{"$i":"cancel-button","$v":"Annuler"},{"$i":"download_error","$v":"Erreur de téléchargement"},{"$i":"install_error","$v":"Erreur d’installation"},{"$i":"err_descriptor_download_failed","$v":"Le téléchargement a échoué à cause d’une erreur du serveur."},{"$i":"err_bad_descriptor","$v":"Le téléchargement a échoué à cause d’une erreur du serveur."},{"$i":"err_too_big","$v":"Le fichier à télécharger est trop volumineux."},{"$i":"err_unsupported_type","$v":"Le type du média acheté n’est pas pris en charge par votre téléphone."},{"$i":"err_bad_type","$v":"Le téléchargement a échoué à cause d’une erreur du serveur."},{"$i":"err_content_download_failed","$v":"Le téléchargement a échoué à cause d’une erreur du serveur."},{"$i":"err_bad_drm_message","$v":"Le téléchargement a échoué à cause d’une erreur du serveur."},{"$i":"err_bad_image","$v":"L’image téléchargée ne peut pas être affichée sur cet appareil."},{"$i":"err_bad_audio","$v":"Le fichier téléchargé ne peut pas être lu sur cet appareil."},{"$i":"err_no_space","$v":"L’espace de stockage de votre appareil est insuffisant pour enregistrer cette chanson."},{"$i":"err_no_sdcard","$v":"Impossible d’enregistrer la chanson car il n’y a pas de carte mémoire."},{"$i":"err_sdcard_in_use","$v":"Impossible d’enregistrer la chanson car la carte mémoire est utilisée. Débranchez votre téléphone puis essayez de la télécharger à nouveau."},{"$i":"err_ds_save_failure","$v":"Erreur lors de l’enregistrement du fichier média."},{"$i":"err_db_store_failure","$v":"Erreur lors de l’enregistrement du fichier média."},{"$i":"success_song","$v":"Chanson téléchargée et installée. Utilisez l’application Musique pour l’écouter."},{"$i":"success_ringtone","$v":"Sonnerie téléchargée et installée."},{"$i":"success_wallpaper","$v":"Fond d’écran téléchargé et installé."},{"$i":"ringtone-or-song-question","$v":"Voulez-vous installer ce fichier audio en tant que chanson ou bien en tant que sonnerie ?"},{"$i":"ringtone-response","$v":"Sonnerie"},{"$i":"song-response","$v":"Chanson"},{"$i":"download-confirmation-title-song","$v":"Télécharger la chanson ?"},{"$i":"download-confirmation-title-ringtone","$v":"Télécharger la sonnerie ?"},{"$i":"download-confirmation-title-wallpaper","$v":"Télécharger le fond d’écran ?"},{"$i":"downloading-song","$v":"Téléchargement de la chanson…"},{"$i":"downloading-ringtone","$v":"Téléchargement de la sonnerie…"},{"$i":"downloading-wallpaper","$v":"Téléchargement du fond d’écran…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," a verrouillé ce fichier média afin qu’il ne puisse pas être partagé ou transféré sur un nouvel appareil."]},{"$i":"locked-content-advisory-generic","$v":"Le marchand a verrouillé ce fichier média afin qu’il ne puisse pas être partagé ou transféré sur un nouvel appareil."},{"$i":"download-confirmation-name","$v":"Nom"},{"$i":"download-confirmation-type","$v":"Type"},{"$i":"download-confirmation-size","$v":"Taille"},{"$i":"download-confirmation-vendor","$v":"Marchand"},{"$i":"download-confirmation-description","$v":"Informations"},{"$i":"download-progress-title","$v":"Téléchargement en cours"},{"$i":"preview-image-title","$v":"Aperçu image"},{"$i":"preview-audio-title","$v":"Aperçu audio"},{"$i":"byteUnit-B","$v":"octets"},{"$i":"byteUnit-KB","$v":"Ko"},{"$i":"byteUnit-MB","$v":"Mo"},{"$i":"byteUnit-GB","$v":"Go"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Aceptar"},{"$i":"download-button","$v":"Descargar"},{"$i":"install-button","$v":"Instalar"},{"$i":"cancel-button","$v":"Cancelar"},{"$i":"download_error","$v":"Erro na descarga"},{"$i":"install_error","$v":"Erro de instalación"},{"$i":"err_descriptor_download_failed","$v":"A descarga fallou por un erro do servidor."},{"$i":"err_bad_descriptor","$v":"A descarga fallou por un erro do servidor."},{"$i":"err_too_big","$v":"O ficheiro é demasiado grande para descargarse."},{"$i":"err_unsupported_type","$v":"O tipo de ficheiro multimedia adquirido non é compatíbel co seu teléfono."},{"$i":"err_bad_type","$v":"A descarga fallou por un erro do servidor."},{"$i":"err_content_download_failed","$v":"A descarga fallou por un erro do servidor."},{"$i":"err_bad_drm_message","$v":"A descarga fallou por un erro do servidor."},{"$i":"err_bad_image","$v":"Non é posíbel amosar a imaxe descargada neste dispositivo."},{"$i":"err_bad_audio","$v":"Non é posíbel reproducir o ficheiro descargado neste dispositivo."},{"$i":"err_no_space","$v":"Non hai suficiente espazo de almacenamento no dispositivo para gardar esta canción."},{"$i":"err_no_sdcard","$v":"Non é posíbel gardar a canción porque non hai tarxeta de memoria."},{"$i":"err_sdcard_in_use","$v":"Non é posíbel gardar a canción porque a tarxeta de memoria está en uso. Desconecte o teléfono e tente descargala de novo."},{"$i":"err_ds_save_failure","$v":"Produciuse un erro ao gardar o ficheiro multimedia."},{"$i":"err_db_store_failure","$v":"Produciuse un erro ao gardar o ficheiro multimedia."},{"$i":"success_song","$v":"Descargouse e instalouse a canción. Use o aplicativo Música para reproducila."},{"$i":"success_ringtone","$v":"Descargouse e instalouse o ton de chamada."},{"$i":"success_wallpaper","$v":"Descargouse e instalouse o fondo de pantalla."},{"$i":"ringtone-or-song-question","$v":"Quere instalar este ficheiro de son como unha canción ou como un ton de chamada?"},{"$i":"ringtone-response","$v":"Ton de chamada"},{"$i":"song-response","$v":"Canción"},{"$i":"download-confirmation-title-song","$v":"Descargar a canción?"},{"$i":"download-confirmation-title-ringtone","$v":"Descargar o ton de chamada?"},{"$i":"download-confirmation-title-wallpaper","$v":"Descargar o fondo de pantalla?"},{"$i":"downloading-song","$v":"Descargando a canción…"},{"$i":"downloading-ringtone","$v":"Descargando o ton de chamada…"},{"$i":"downloading-wallpaper","$v":"Descargando o fondo de pantalla…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," bloqueou este ficheiro multimedia para que non sexa posíbel compartilo ou transferilo a un novo dispositivo."]},{"$i":"locked-content-advisory-generic","$v":"O vendedor bloqueou este ficheiro multimedia para que non sexa posíbel compartilo ou transferilo a un novo dispositivo."},{"$i":"download-confirmation-name","$v":"Nome"},{"$i":"download-confirmation-type","$v":"Tipo"},{"$i":"download-confirmation-size","$v":"Tamaño"},{"$i":"download-confirmation-vendor","$v":"Fabricante"},{"$i":"download-confirmation-description","$v":"Información"},{"$i":"download-progress-title","$v":"Descargando"},{"$i":"preview-image-title","$v":"Previsualizar imaxe"},{"$i":"preview-audio-title","$v":"Escoitar mostra"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Preuzmi"},{"$i":"install-button","$v":"Instaliraj"},{"$i":"cancel-button","$v":"Otkaži"},{"$i":"download_error","$v":"Greška preuzimanja"},{"$i":"install_error","$v":"Greška instalacije"},{"$i":"err_descriptor_download_failed","$v":"Preuzimanje nije uspjelo zbog greške poslužitelja."},{"$i":"err_bad_descriptor","$v":"Preuzimanje nije uspjelo zbog greške poslužitelja."},{"$i":"err_too_big","$v":"Datoteka je prevelika za preuzimanje."},{"$i":"err_unsupported_type","$v":"Ova vrsta kupljenog medija nije podržana na vašem telefonu."},{"$i":"err_bad_type","$v":"Preuzimanje nije uspjelo zbog greške poslužitelja."},{"$i":"err_content_download_failed","$v":"Preuzimanje nije uspjelo zbog greške poslužitelja."},{"$i":"err_bad_drm_message","$v":"Preuzimanje nije uspjelo zbog greške poslužitelja."},{"$i":"err_bad_image","$v":"Preuzeta slika se ne može prikazati na ovom uređaju."},{"$i":"err_bad_audio","$v":"Preuzeta datoteka se ne može pokrenuti na ovom uređaju."},{"$i":"err_no_space","$v":"Na uređaju nema dovoljno prostora za spremanje ove pjesme."},{"$i":"err_no_sdcard","$v":"Pjesmu nije moguće spremiti jer nedostaje memorijska kartica."},{"$i":"err_sdcard_in_use","$v":"Pjesmu nije moguće spremiti jer je memorijska kartica u upotrebi. Odspojite svoj telefon i pokušajte ponovno preuzeti pjesmu."},{"$i":"err_ds_save_failure","$v":"Greška prilikom spremanja datoteke."},{"$i":"err_db_store_failure","$v":"Greška prilikom spremanja datoteke."},{"$i":"success_song","$v":"Pjesma je preuzeta i instalirana. Da biste je preslušali, pokrenite aplikaciju Glazba."},{"$i":"success_ringtone","$v":"Melodija zvona je preuzeta i instalirana."},{"$i":"success_wallpaper","$v":"Pozadinska slika je preuzeta i instalirana."},{"$i":"ringtone-or-song-question","$v":"Do you want to install this audio file as a song or as a ringtone?"},{"$i":"ringtone-response","$v":"Melodija zvona"},{"$i":"song-response","$v":"Pjesma"},{"$i":"download-confirmation-title-song","$v":"Preuzeti pjesmu?"},{"$i":"download-confirmation-title-ringtone","$v":"Preuzeti melodiju zvona?"},{"$i":"download-confirmation-title-wallpaper","$v":"Preuzeti pozadinsku sliku?"},{"$i":"downloading-song","$v":"Preuzimanje pjesme…"},{"$i":"downloading-ringtone","$v":"Preuzimanje melodije zvona…"},{"$i":"downloading-wallpaper","$v":"Preuzimanje pozadinske slike…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," je zaključao ovu multimedijsku datoteku, stoga se ne može dijeliti s ostalima ili transferirati na novi uređaj."]},{"$i":"locked-content-advisory-generic","$v":"Prodavač je zaključao ovu multimedijsku datoteku, stoga se ne može dijeliti s ostalima ili transferirati na novi uređaj."},{"$i":"download-confirmation-name","$v":"Naziv"},{"$i":"download-confirmation-type","$v":"Vrsta"},{"$i":"download-confirmation-size","$v":"Veličina"},{"$i":"download-confirmation-vendor","$v":"Prodavač"},{"$i":"download-confirmation-description","$v":"Informacije"},{"$i":"download-progress-title","$v":"Preuzimanje"},{"$i":"preview-image-title","$v":"Pregled slike"},{"$i":"preview-audio-title","$v":"Pregled audio datoteke"},{"$i":"byteUnit-B","$v":"bajtova"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Letöltés"},{"$i":"install-button","$v":"Telepítés"},{"$i":"cancel-button","$v":"Mégse"},{"$i":"download_error","$v":"Letöltési hiba"},{"$i":"install_error","$v":"Telepítési hiba"},{"$i":"err_descriptor_download_failed","$v":"A letöltés kiszolgáló hiba miatt hiúsult meg."},{"$i":"err_bad_descriptor","$v":"A letöltés kiszolgáló hiba miatt hiúsult meg."},{"$i":"err_too_big","$v":"A fájl túl nagy a letöltéshez."},{"$i":"err_unsupported_type","$v":"Az ilyen típusú megvásárolt médiafájlt nem támogatja a telefonja."},{"$i":"err_bad_type","$v":"A letöltés kiszolgáló hiba miatt hiúsult meg."},{"$i":"err_content_download_failed","$v":"A letöltés kiszolgáló hiba miatt hiúsult meg."},{"$i":"err_bad_drm_message","$v":"A letöltés kiszolgáló hiba miatt hiúsult meg."},{"$i":"err_bad_image","$v":"A letöltött kép nem jeleníthető meg ezen az eszközön."},{"$i":"err_bad_audio","$v":"A letöltött fájl nem játszható le ezen az eszközön."},{"$i":"err_no_space","$v":"Nincs elegendő tárolóterület az eszközön a zene mentéséhez."},{"$i":"err_no_sdcard","$v":"A zene nem menthető el, mert nincs memóriakártya a telefonban."},{"$i":"err_sdcard_in_use","$v":"A zene nem menthető el, mert használatban van a memóriakártya. Húzza ki a telefont, és próbálja meg ismét a letöltést."},{"$i":"err_ds_save_failure","$v":"Hiba lépett fel a média-fájl mentése közben."},{"$i":"err_db_store_failure","$v":"Hiba lépett fel a média-fájl mentése közben."},{"$i":"success_song","$v":"A zene le lett töltve. A Zene app segítségével lejátszhatja azt."},{"$i":"success_ringtone","$v":"Csengőhang letöltve és telepítve."},{"$i":"success_wallpaper","$v":"Háttérkép letöltve és telepítve."},{"$i":"ringtone-or-song-question","$v":"Zeneként vagy csengőhangként szeretné használni ezt a hangfájlt?"},{"$i":"ringtone-response","$v":"Csengőhang"},{"$i":"song-response","$v":"Zene"},{"$i":"download-confirmation-title-song","$v":"Letölti a zenét"},{"$i":"download-confirmation-title-ringtone","$v":"Letölti a csengőhangot"},{"$i":"download-confirmation-title-wallpaper","$v":"Letölti a háttérképet"},{"$i":"downloading-song","$v":"Zene letöltése…"},{"$i":"downloading-ringtone","$v":"Csengőhang letöltése…"},{"$i":"downloading-wallpaper","$v":"Háttérkép letöltése…"},{"$i":"locked-content-advisory","$v":["A(z) ",{"t":"idOrVar","v":"vendor"}," zárolta ezt a médiafájlt, így az nem osztható másokkal és nem lehet átvinni új eszközre sem."]},{"$i":"locked-content-advisory-generic","$v":"Az eladó zárolta ezt a médiafájlt, így az nem osztható másokkal és nem lehet átvinni új eszközre sem."},{"$i":"download-confirmation-name","$v":"Név"},{"$i":"download-confirmation-type","$v":"Típus"},{"$i":"download-confirmation-size","$v":"Méret"},{"$i":"download-confirmation-vendor","$v":"Kiadó"},{"$i":"download-confirmation-description","$v":"Információ"},{"$i":"download-progress-title","$v":"Letöltés"},{"$i":"preview-image-title","$v":"Kép előnézet"},{"$i":"preview-audio-title","$v":"Zene előhallgatás"},{"$i":"byteUnit-B","$v":"bájt"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Download"},{"$i":"install-button","$v":"Installa"},{"$i":"cancel-button","$v":"Annulla"},{"$i":"download_error","$v":"Errore download"},{"$i":"install_error","$v":"Errore installazione"},{"$i":"err_descriptor_download_failed","$v":"Download non riuscito a causa di un errore del server."},{"$i":"err_bad_descriptor","$v":"Download non riuscito a causa di un errore del server."},{"$i":"err_too_big","$v":"Dimensione file eccessiva per il download."},{"$i":"err_unsupported_type","$v":"Questo tipo di file acquistato non è supportato dal telefono in uso."},{"$i":"err_bad_type","$v":"Download non riuscito a causa di un errore del server."},{"$i":"err_content_download_failed","$v":"Download non riuscito a causa di un errore del server."},{"$i":"err_bad_drm_message","$v":"Download non riuscito a causa di un errore del server."},{"$i":"err_bad_image","$v":"L’immagine scaricata non è visualizzabile su questo dispositivo."},{"$i":"err_bad_audio","$v":"Impossibile riprodurre il download su questo dispositivo."},{"$i":"err_no_space","$v":"Spazio disponibile insufficiente per il salvataggio di questa canzone."},{"$i":"err_no_sdcard","$v":"Impossibile salvare la canzone, nessuna scheda di memoria disponibile."},{"$i":"err_sdcard_in_use","$v":"Impossibile salvare il file, la scheda di memoria è in uso. Scollegare il telefono e riprovare."},{"$i":"err_ds_save_failure","$v":"Errore durante il salvataggio del file."},{"$i":"err_db_store_failure","$v":"Errore durante il salvataggio del file."},{"$i":"success_song","$v":"Canzone scaricata e installata. Utilizzare l’app Musica per riprodurla."},{"$i":"success_ringtone","$v":"Suoneria scaricata e installata."},{"$i":"success_wallpaper","$v":"Sfondo scaricato e installato."},{"$i":"ringtone-or-song-question","$v":"Installare questo file audio come canzone o come suoneria?"},{"$i":"ringtone-response","$v":"Suoneria"},{"$i":"song-response","$v":"Canzone"},{"$i":"download-confirmation-title-song","$v":"Scaricare la canzone?"},{"$i":"download-confirmation-title-ringtone","$v":"Scaricare la suoneria?"},{"$i":"download-confirmation-title-wallpaper","$v":"Scaricare lo sfondo?"},{"$i":"downloading-song","$v":"Download canzone…"},{"$i":"downloading-ringtone","$v":"Download suoneria…"},{"$i":"downloading-wallpaper","$v":"Download sfondo…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," ha protetto questo file impedendone la condivisione con altri o il trasferimento a nuovi dispositivi."]},{"$i":"locked-content-advisory-generic","$v":"Il venditore ha protetto questo file impedendone la condivisione con altri o il trasferimento a nuovi dispositivi."},{"$i":"download-confirmation-name","$v":"Nome"},{"$i":"download-confirmation-type","$v":"Tipo"},{"$i":"download-confirmation-size","$v":"Dimensione"},{"$i":"download-confirmation-vendor","$v":"Fornitore"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Download…"},{"$i":"preview-image-title","$v":"Anteprima immagine"},{"$i":"preview-audio-title","$v":"Anteprima audio"},{"$i":"byteUnit-B","$v":"byte"},{"$i":"byteUnit-KB","$v":"kB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"ダウンロード"},{"$i":"install-button","$v":"インストール"},{"$i":"cancel-button","$v":"キャンセル"},{"$i":"download_error","$v":"ダウンロードエラー"},{"$i":"install_error","$v":"インストールエラー"},{"$i":"err_descriptor_download_failed","$v":"サーバエラーのためダウンロードに失敗しました。"},{"$i":"err_bad_descriptor","$v":"サーバエラーのためダウンロードに失敗しました。"},{"$i":"err_too_big","$v":"ファイルサイズが大きすぎるためダウンロードできません。"},{"$i":"err_unsupported_type","$v":"購入されたメディアの形式はご使用の端末でサポートされていません。"},{"$i":"err_bad_type","$v":"サーバエラーのためダウンロードに失敗しました。"},{"$i":"err_content_download_failed","$v":"サーバエラーのためダウンロードに失敗しました。"},{"$i":"err_bad_drm_message","$v":"サーバエラーのためダウンロードに失敗しました。"},{"$i":"err_bad_image","$v":"ダウンロードされた画像はこの端末で表示できません。"},{"$i":"err_bad_audio","$v":"ダウンロードされたファイルはこの端末で再生できません。"},{"$i":"err_no_space","$v":"この楽曲を保存するのに必要な空き領域が足りません。"},{"$i":"err_no_sdcard","$v":"メモリーカードが挿入されていないため楽曲を保存できません。"},{"$i":"err_sdcard_in_use","$v":"メモリーカードが使用中のため楽曲を保存できません。端末からケーブルを外して再度ダウンロードしてください。"},{"$i":"err_ds_save_failure","$v":"メディアファイルの保存中にエラーが発生しました。"},{"$i":"err_db_store_failure","$v":"メディアファイルの保存中にエラーが発生しました。"},{"$i":"success_song","$v":"楽曲のダウンロードとインストールが完了しました。音楽アプリで再生してください。"},{"$i":"success_ringtone","$v":"着信音のダウンロードとインストールが完了しました。"},{"$i":"success_wallpaper","$v":"壁紙のダウンロードとインストールが完了しました。"},{"$i":"ringtone-or-song-question","$v":"この音声ファイルを楽曲または着信音としてインストールしますか?"},{"$i":"ringtone-response","$v":"着信音"},{"$i":"song-response","$v":"楽曲"},{"$i":"download-confirmation-title-song","$v":"楽曲をダウンロードしますか?"},{"$i":"download-confirmation-title-ringtone","$v":"着信音をダウンロードしますか?"},{"$i":"download-confirmation-title-wallpaper","$v":"壁紙をダウンロードしますか?"},{"$i":"downloading-song","$v":"楽曲のダウンロード中…"},{"$i":"downloading-ringtone","$v":"着信音のダウンロード中…"},{"$i":"downloading-wallpaper","$v":"壁紙のダウンロード中…"},{"$i":"locked-content-advisory","$v":["このメディアファイルは ",{"t":"idOrVar","v":"vendor"}," によりロックされているため、他者との共有や新しい端末への転送はできません。"]},{"$i":"locked-content-advisory-generic","$v":"このメディアファイルは販売者によりロックされているため、他者との共有や新しい端末への転送はできません。"},{"$i":"download-confirmation-name","$v":"名前"},{"$i":"download-confirmation-type","$v":"種類"},{"$i":"download-confirmation-size","$v":"サイズ"},{"$i":"download-confirmation-vendor","$v":"ベンダ"},{"$i":"download-confirmation-description","$v":"情報"},{"$i":"download-progress-title","$v":"ダウンロード中"},{"$i":"preview-image-title","$v":"画像プレビュー"},{"$i":"preview-audio-title","$v":"音声プレビュー"},{"$i":"byteUnit-B","$v":"バイト"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"},{"t":"idOrVar","v":"unit"}]}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"확인"},{"$i":"download-button","$v":"다운로드"},{"$i":"install-button","$v":"설치"},{"$i":"cancel-button","$v":"취소"},{"$i":"download_error","$v":"다운로드 오류"},{"$i":"install_error","$v":"설치 오류"},{"$i":"err_descriptor_download_failed","$v":"서버 오류로 다운로드에 실패하였습니다."},{"$i":"err_bad_descriptor","$v":"서버 오류로 다운로드에 실패하였습니다."},{"$i":"err_too_big","$v":"다운로드 하게 파일이 너무 큽니다."},{"$i":"err_unsupported_type","$v":"이러한 형태의 구매한 미디어는 이 전화기에서 지원하지 않습니다."},{"$i":"err_bad_type","$v":"서버 오류로 다운로드에 실패하였습니다."},{"$i":"err_content_download_failed","$v":"서버 오류로 다운로드에 실패하였습니다."},{"$i":"err_bad_drm_message","$v":"서버 오류로 다운로드에 실패하였습니다."},{"$i":"err_bad_image","$v":"이 기기에서 다운로드한 이미지를 표시할 수 없습니다."},{"$i":"err_bad_audio","$v":"이 기기에서 다운로드한 파일을 재생할 수 없습니다."},{"$i":"err_no_space","$v":"이 기기에 노래를 저장하기 위한 충분한 공간이 없습니다."},{"$i":"err_no_sdcard","$v":"메모리 카드가 없어서 노래를 저장할 수 없습니다."},{"$i":"err_sdcard_in_use","$v":"메모리 카드가 사용중이어서 노래를 저장할 수 없습니다. 전화기 연결을 해제하고 다시 다운로드 해 주세요."},{"$i":"err_ds_save_failure","$v":"미디어를 저장하다 오류가 발생하였습니다."},{"$i":"err_db_store_failure","$v":"미디어를 저장하다 오류가 발생하였습니다."},{"$i":"success_song","$v":"노래를 다운로드하여 설치하였습니다. 음악 앱을 애용해서 재생하세요."},{"$i":"success_ringtone","$v":"벨소리를 다운로드하여 설치하였습니다."},{"$i":"success_wallpaper","$v":"배경화면을 다운로드하여 설치하였습니다."},{"$i":"ringtone-or-song-question","$v":"이 오디오 파일을 노래로 설치하시겠습니까 아니면 벨소리로 설치하시겠습니까?"},{"$i":"ringtone-response","$v":"벨소리"},{"$i":"song-response","$v":"노래"},{"$i":"download-confirmation-title-song","$v":"노래를 다운로드 하시겠습니까?"},{"$i":"download-confirmation-title-ringtone","$v":"벨소리를 다운로드 하시겠습니까?"},{"$i":"download-confirmation-title-wallpaper","$v":"배경화면을 다운로드 하시겠습니까?"},{"$i":"downloading-song","$v":"노래를 다운로드 하는 중…"},{"$i":"downloading-ringtone","$v":"벨소리를 다운로드 하는 중…"},{"$i":"downloading-wallpaper","$v":"배경화면을 다운로드 하는 중…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"},"에서 이 미디어 파일을 다른 사람과 공유하거나 새 기기로 전송하지 못하도록 제한하였습니다."]},{"$i":"locked-content-advisory-generic","$v":"판매자가 이 미디어 파일을 다른 사람과 공유하거나 새 기기로 전송하지 못하도록 제한하였습니다."},{"$i":"download-confirmation-name","$v":"이름"},{"$i":"download-confirmation-type","$v":"형식"},{"$i":"download-confirmation-size","$v":"크기"},{"$i":"download-confirmation-vendor","$v":"판매자"},{"$i":"download-confirmation-description","$v":"정보"},{"$i":"download-progress-title","$v":"다운로드중"},{"$i":"preview-image-title","$v":"미리보기 이미지"},{"$i":"preview-audio-title","$v":"미리보기 오디오"},{"$i":"byteUnit-B","$v":"바이트"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Gerai"},{"$i":"download-button","$v":"Parsiųsti"},{"$i":"install-button","$v":"Įdiegti"},{"$i":"cancel-button","$v":"Atsisakyti"},{"$i":"download_error","$v":"Parsiuntimo klaida"},{"$i":"install_error","$v":"Įdiegimo klaida"},{"$i":"err_descriptor_download_failed","$v":"Parsiuntimas nepavyko dėl serverio klaidos."},{"$i":"err_bad_descriptor","$v":"Parsiuntimas nepavyko dėl serverio klaidos."},{"$i":"err_too_big","$v":"Failas per didelis, jo parsiųsti negalima."},{"$i":"err_unsupported_type","$v":"Šio tipo pirkiniai šiame įrenginyje nepalaikomi."},{"$i":"err_bad_type","$v":"Parsiuntimas nepavyko dėl serverio klaidos."},{"$i":"err_content_download_failed","$v":"Parsiuntimas nepavyko dėl serverio klaidos."},{"$i":"err_bad_drm_message","$v":"Parsiuntimas nepavyko dėl serverio klaidos."},{"$i":"err_bad_image","$v":"Parsiųsto paveikslo šiame įrenginyje negalima parodyti."},{"$i":"err_bad_audio","$v":"Parsiųsto įrašo šiame įrenginyje negalima atkurti."},{"$i":"err_no_space","$v":"Jūsų įrenginyje nepakanka vietos šiai dainai įrašyti."},{"$i":"err_no_sdcard","$v":"Dainos įrašyti negalima, nes neįdėta atminties kortelė."},{"$i":"err_sdcard_in_use","$v":"Dainos įrašyti negalima, nes atminties kortelė naudojama. Atjunkite šį įrenginį nuo kitų ir bandykite dar kartą."},{"$i":"err_ds_save_failure","$v":"Klaida įrašant failą."},{"$i":"err_db_store_failure","$v":"Klaida įrašant failą."},{"$i":"success_song","$v":"Daina parsiųsta ir įdiegta. Jai groti naudokitės Muzikos programa."},{"$i":"success_ringtone","$v":"Skambėjimo garsas parsiųstas ir įdiegtas."},{"$i":"success_wallpaper","$v":"Ekrano fonas parsiųstas ir įdiegtas."},{"$i":"ringtone-or-song-question","$v":"Ar šį garso įrašą norite įdiegti kaip dainą, ar kaip skambėjimo garsą?"},{"$i":"ringtone-response","$v":"Kaip skambėjimo garsą"},{"$i":"song-response","$v":"Kaip dainą"},{"$i":"download-confirmation-title-song","$v":"Parsiųsti dainą?"},{"$i":"download-confirmation-title-ringtone","$v":"Parsiųsti skambėjimo garsą?"},{"$i":"download-confirmation-title-wallpaper","$v":"Parsiųsti ekrano foną?"},{"$i":"downloading-song","$v":"Daina parsiunčiama…"},{"$i":"downloading-ringtone","$v":"Skambėjimo garsas parsiunčiamas…"},{"$i":"downloading-wallpaper","$v":"Ekrano fonas parsiunčiamas…"},{"$i":"locked-content-advisory","$v":["„",{"t":"idOrVar","v":"vendor"},"“ šį failą užrakino, kad juo negalima būtų dalintis su kitais ar perkelti į kitą įrenginį."]},{"$i":"locked-content-advisory-generic","$v":"Pardavėjas šį failą užrakino, kad juo negalima būtų dalintis su kitais ar perkelti į kitą įrenginį."},{"$i":"download-confirmation-name","$v":"Pavadinimas"},{"$i":"download-confirmation-type","$v":"Tipas"},{"$i":"download-confirmation-size","$v":"Dydis"},{"$i":"download-confirmation-vendor","$v":"Pardavėjas"},{"$i":"download-confirmation-description","$v":"Informacija"},{"$i":"download-progress-title","$v":"Parsiunčiama"},{"$i":"preview-image-title","$v":"Peržiūrėti paveikslą"},{"$i":"preview-audio-title","$v":"Klausyti įrašo"},{"$i":"byteUnit-B","$v":"B"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Во ред"},{"$i":"download-button","$v":"Преземи"},{"$i":"install-button","$v":"Инсталирај"},{"$i":"cancel-button","$v":"Откажи"},{"$i":"download_error","$v":"Грешка при преземање"},{"$i":"install_error","$v":"Грешка при инсталација"},{"$i":"err_descriptor_download_failed","$v":"Преземањето не успеа заради грешка на серверот."},{"$i":"err_bad_descriptor","$v":"Преземањето не успеа заради грешка на серверот."},{"$i":"err_too_big","$v":"Датотеката за преземање е преголема."},{"$i":"err_unsupported_type","$v":"Овој тип на купени медии не е поддржан од Вашиот телефон."},{"$i":"err_bad_type","$v":"Преземањето не успеа заради грешка на серверот."},{"$i":"err_content_download_failed","$v":"Преземањето не успеа заради грешка на серверот."},{"$i":"err_bad_drm_message","$v":"Преземањето не успеа заради грешка на серверот."},{"$i":"err_bad_image","$v":"Преземената слика не може да се прикаже на овој уред."},{"$i":"err_bad_audio","$v":"Преземената датотека не може да се репродуцира на овој уред."},{"$i":"err_no_space","$v":"На Вашиот уред нема доволно простор за да се зачуваа оваа песна."},{"$i":"err_no_sdcard","$v":"Песната не може да се сними бидејќи нема мемориска картичка."},{"$i":"err_sdcard_in_use","$v":"Песната не може да се сними бидејќи мемориската картичка е зафатена. Исклучете го Вашиот телефон и обидете се да ја преземете повторно."},{"$i":"err_ds_save_failure","$v":"Грешка при снимањето на медија-датотеката."},{"$i":"err_db_store_failure","$v":"Грешка при снимањето на медија-датотеката."},{"$i":"success_song","$v":"Песната е преземена и инсталирана. Преслушајте ја во апликацијата Музика."},{"$i":"success_ringtone","$v":"Мелодијата е преземена и инсталирана."},{"$i":"success_wallpaper","$v":"Тапетот е преземен и инсталиран."},{"$i":"ringtone-or-song-question","$v":"Do you want to install this audio file as a song or as a ringtone?"},{"$i":"ringtone-response","$v":"Мелодија"},{"$i":"song-response","$v":"Песна"},{"$i":"download-confirmation-title-song","$v":"Да ја преземам песната?"},{"$i":"download-confirmation-title-ringtone","$v":"Да ја преземам мелодијата?"},{"$i":"download-confirmation-title-wallpaper","$v":"Да го преземам тапетот?"},{"$i":"downloading-song","$v":"Песната се презема…"},{"$i":"downloading-ringtone","$v":"Мелодијата се презема…"},{"$i":"downloading-wallpaper","$v":"Тапетот се презема…"},{"$i":"locked-content-advisory","$v":["Оваа медија-датотека е заклучена од ",{"t":"idOrVar","v":"vendor"}," за да не може да се споделува или пак да се пренесува на нов уред."]},{"$i":"locked-content-advisory-generic","$v":"Продавачот ја заклучил оваа медија-датотека за да не може да се споделува или пак да се пренесува на нов уред."},{"$i":"download-confirmation-name","$v":"Име"},{"$i":"download-confirmation-type","$v":"Тип"},{"$i":"download-confirmation-size","$v":"Големина"},{"$i":"download-confirmation-vendor","$v":"Добавувач"},{"$i":"download-confirmation-description","$v":"Опис"},{"$i":"download-progress-title","$v":"Преземање"},{"$i":"preview-image-title","$v":"Преглед на слика"},{"$i":"preview-audio-title","$v":"Преслушување на аудио"},{"$i":"byteUnit-B","$v":"бајти"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Muat turun"},{"$i":"install-button","$v":"Pemasangan"},{"$i":"cancel-button","$v":"Batal"},{"$i":"download_error","$v":"Muat turun Gagal"},{"$i":"install_error","$v":"Ralat Pemasangan"},{"$i":"err_descriptor_download_failed","$v":"Muat turun gagal disebabkan ralat pelayan."},{"$i":"err_bad_descriptor","$v":"Muat turun gagal disebabkan ralat pelayan."},{"$i":"err_too_big","$v":"Fail terlalu besar untuk dimuat turun."},{"$i":"err_unsupported_type","$v":"Pembelian media jenis ini tidak disokong pada telefon anda."},{"$i":"err_bad_type","$v":"Muat turun gagal disebabkan ralat pelayan."},{"$i":"err_content_download_failed","$v":"Muat turun gagal disebabkan ralat pelayan."},{"$i":"err_bad_drm_message","$v":"Muat turun gagal disebabkan ralat pelayan."},{"$i":"err_bad_image","$v":"Imej muat turun tidak dapat dipaparkan pada peranti ini."},{"$i":"err_bad_audio","$v":"Fail dimuat turun tidak dapat dipaparkan pada peranti ini."},{"$i":"err_no_space","$v":"Tidak terdapat ruang storan yang mencukupi pada peranti anda untuk menyimpan lagu ini."},{"$i":"err_no_sdcard","$v":"Tidak dapat menyimpan lagi disebabkan tiada kad memori."},{"$i":"err_sdcard_in_use","$v":"Tidak dapat menyimpan lagu disebabkan kad memori sedang digunakan. Cabut telefon anda dan cuba lagi memuat turun."},{"$i":"err_ds_save_failure","$v":"Ralat menyimpan fail media."},{"$i":"err_db_store_failure","$v":"Ralat menyimpan fail media."},{"$i":"success_song","$v":"Lagu dimut turun dan dipasang. Gunakan app Muzik dan mainkannya."},{"$i":"success_ringtone","$v":"Nada dering dimuat turun dan dipasang."},{"$i":"success_wallpaper","$v":"Kertas dinding dimuat turun dan dipasang."},{"$i":"ringtone-or-song-question","$v":"Adakah anda ingin memasang fail audio ini sebagai lagu atau nada dering?"},{"$i":"ringtone-response","$v":"Nada dering"},{"$i":"song-response","$v":"Lagu"},{"$i":"download-confirmation-title-song","$v":"Muat turun lagu?"},{"$i":"download-confirmation-title-ringtone","$v":"Muat turun nada dering?"},{"$i":"download-confirmation-title-wallpaper","$v":"Muat turun kertas dinding?"},{"$i":"downloading-song","$v":"Memuat turun lagu…"},{"$i":"downloading-ringtone","$v":"Memuat turun nada dering…"},{"$i":"downloading-wallpaper","$v":"Memuat turun kertas dinding…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," telah mengunci fail media ini supaya ianya tidak dapat dikongsi atau dipindahkan ke peranti baru yang lain."]},{"$i":"locked-content-advisory-generic","$v":"Penjual telah mengunci fail media ini supaya ianya tidak dapat dikongsi atau dipindahkan ke peranti baru yang lain."},{"$i":"download-confirmation-name","$v":"Nama"},{"$i":"download-confirmation-type","$v":"Jenis"},{"$i":"download-confirmation-size","$v":"Saiz"},{"$i":"download-confirmation-vendor","$v":"Vendor"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Memuat turun"},{"$i":"preview-image-title","$v":"Pralihat imej"},{"$i":"preview-audio-title","$v":"Pralihat audio"},{"$i":"byteUnit-B","$v":"bait"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Downloaden"},{"$i":"install-button","$v":"Installeren"},{"$i":"cancel-button","$v":"Annuleren"},{"$i":"download_error","$v":"Downloadfout"},{"$i":"install_error","$v":"Installatiefout"},{"$i":"err_descriptor_download_failed","$v":"Het downloaden is mislukt vanwege een serverfout."},{"$i":"err_bad_descriptor","$v":"Het downloaden is mislukt vanwege een serverfout."},{"$i":"err_too_big","$v":"Bestand is te groot om te downloaden."},{"$i":"err_unsupported_type","$v":"Dit type aangeschafte media wordt niet ondersteund op uw telefoon."},{"$i":"err_bad_type","$v":"Het downloaden is mislukt vanwege een serverfout."},{"$i":"err_content_download_failed","$v":"Het downloaden is mislukt vanwege een serverfout."},{"$i":"err_bad_drm_message","$v":"Het downloaden is mislukt vanwege een serverfout."},{"$i":"err_bad_image","$v":"De gedownloade afbeelding kan niet op dit apparaat worden weergegeven."},{"$i":"err_bad_audio","$v":"Het gedownloade bestand kan niet op dit apparaat worden afgespeeld."},{"$i":"err_no_space","$v":"Er is niet genoeg opslagruimte op uw apparaat om dit nummer op te slaan."},{"$i":"err_no_sdcard","$v":"Kan nummer niet opslaan, omdat er geen geheugenkaart is."},{"$i":"err_sdcard_in_use","$v":"Kan nummer niet opslaan, omdat de geheugenkaart in gebruik is. Ontkoppel uw telefoon en probeer het nogmaals te downloaden."},{"$i":"err_ds_save_failure","$v":"Fout bij opslaan van mediabestand."},{"$i":"err_db_store_failure","$v":"Fout bij opslaan van mediabestand."},{"$i":"success_song","$v":"Nummer gedownload en geïnstalleerd. Gebruik de Muziek-app om het af te spelen."},{"$i":"success_ringtone","$v":"Beltoon gedownload en geïnstalleerd."},{"$i":"success_wallpaper","$v":"Achtergrond gedownload en geïnstalleerd."},{"$i":"ringtone-or-song-question","$v":"Wilt u dit audiobestand als een nummer of als een beltoon installeren?"},{"$i":"ringtone-response","$v":"Beltoon"},{"$i":"song-response","$v":"Nummer"},{"$i":"download-confirmation-title-song","$v":"Nummer downloaden?"},{"$i":"download-confirmation-title-ringtone","$v":"Beltoon downloaden?"},{"$i":"download-confirmation-title-wallpaper","$v":"Achtergrond downloaden?"},{"$i":"downloading-song","$v":"Nummer downloaden…"},{"$i":"downloading-ringtone","$v":"Beltoon downloaden…"},{"$i":"downloading-wallpaper","$v":"Achtergrond downloaden…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," heeft dit mediabestand vergrendeld, zodat het niet met anderen kan worden gedeeld of naar een nieuw apparaat kan worden overgezet."]},{"$i":"locked-content-advisory-generic","$v":"De verkoper heeft dit mediabestand vergrendeld, zodat het niet met anderen kan worden gedeeld of naar een nieuw apparaat kan worden overgezet."},{"$i":"download-confirmation-name","$v":"Naam"},{"$i":"download-confirmation-type","$v":"Type"},{"$i":"download-confirmation-size","$v":"Grootte"},{"$i":"download-confirmation-vendor","$v":"Leverancier"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Downloaden"},{"$i":"preview-image-title","$v":"Voorbeeldafbeelding"},{"$i":"preview-audio-title","$v":"Voorbeeldweergave"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Pobierz"},{"$i":"install-button","$v":"Zainstaluj"},{"$i":"cancel-button","$v":"Anuluj"},{"$i":"download_error","$v":"Błąd pobierania"},{"$i":"install_error","$v":"Błąd instalowania"},{"$i":"err_descriptor_download_failed","$v":"Pobieranie nie powiodło się z powodu błędu serwera."},{"$i":"err_bad_descriptor","$v":"Pobieranie nie powiodło się z powodu błędu serwera."},{"$i":"err_too_big","$v":"Zbyt duży plik, aby go pobrać."},{"$i":"err_unsupported_type","$v":"Ten typ zakupionej treści nie jest obsługiwany na tym telefonie."},{"$i":"err_bad_type","$v":"Pobieranie nie powiodło się z powodu błędu serwera."},{"$i":"err_content_download_failed","$v":"Pobieranie nie powiodło się z powodu błędu serwera."},{"$i":"err_bad_drm_message","$v":"Pobieranie nie powiodło się z powodu błędu serwera."},{"$i":"err_bad_image","$v":"Pobrany obrazek nie może zostać wyświetlony na tym urządzeniu."},{"$i":"err_bad_audio","$v":"Pobrany plik nie może zostać odtworzony na tym urządzeniu."},{"$i":"err_no_space","$v":"Zbyt mało miejsca na tym urządzeniu, aby zapisać tę piosenkę."},{"$i":"err_no_sdcard","$v":"Nie można zapisać piosenki, ponieważ nie ma karty pamięci."},{"$i":"err_sdcard_in_use","$v":"Nie można zapisać piosenki, ponieważ karta pamięci jest wykorzystywana. Odepnij telefon i spróbuj pobrać ponownie."},{"$i":"err_ds_save_failure","$v":"Błąd zapisywania pliku."},{"$i":"err_db_store_failure","$v":"Błąd zapisywania pliku."},{"$i":"success_song","$v":"Piosenka pobrana i zainstalowana. Użyj aplikacji „Muzyka”, aby ją odtworzyć."},{"$i":"success_ringtone","$v":"Dzwonek pobrany i zainstalowany."},{"$i":"success_wallpaper","$v":"Tło ekranu pobrane i zainstalowane."},{"$i":"ringtone-or-song-question","$v":"Zainstalować ten plik audio jako dzwonek czy jako piosenkę?"},{"$i":"ringtone-response","$v":"Dzwonek"},{"$i":"song-response","$v":"Piosenka"},{"$i":"download-confirmation-title-song","$v":"Pobrać piosenkę?"},{"$i":"download-confirmation-title-ringtone","$v":"Pobrać dzwonek?"},{"$i":"download-confirmation-title-wallpaper","$v":"Pobrać tło ekranu?"},{"$i":"downloading-song","$v":"Pobieranie piosenki…"},{"$i":"downloading-ringtone","$v":"Pobieranie dzwonka…"},{"$i":"downloading-wallpaper","$v":"Pobieranie tła ekranu…"},{"$i":"locked-content-advisory","$v":["Udostępnianie i przenoszenie tego pliku na inne urządzenia zostało zablokowane przez ",{"t":"idOrVar","v":"vendor"},"."]},{"$i":"locked-content-advisory-generic","$v":"Udostępnianie i przenoszenie tego pliku na inne urządzenia zostało zablokowane przez sprzedawcę."},{"$i":"download-confirmation-name","$v":"Nazwa"},{"$i":"download-confirmation-type","$v":"Typ"},{"$i":"download-confirmation-size","$v":"Rozmiar"},{"$i":"download-confirmation-vendor","$v":"Dostawca"},{"$i":"download-confirmation-description","$v":"Informacja"},{"$i":"download-progress-title","$v":"Pobieranie"},{"$i":"preview-image-title","$v":"Podgląd obrazka"},{"$i":"preview-audio-title","$v":"Odtwarzanie pliku audio"},{"$i":"byteUnit-B","$v":"B"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Download"},{"$i":"install-button","$v":"Instalar"},{"$i":"cancel-button","$v":"Cancelar"},{"$i":"download_error","$v":"Erro no download"},{"$i":"install_error","$v":"Erro na instalação"},{"$i":"err_descriptor_download_failed","$v":"O download falhou devido a um erro no servidor."},{"$i":"err_bad_descriptor","$v":"O download falhou devido a um erro no servidor."},{"$i":"err_too_big","$v":"O download falhou pois o arquivo é muito grande."},{"$i":"err_unsupported_type","$v":"Esse tipo de mídia não é suportado pelo seu dispositivo."},{"$i":"err_bad_type","$v":"O download falhou devido a um erro no servidor."},{"$i":"err_content_download_failed","$v":"O download falhou devido a um erro no servidor."},{"$i":"err_bad_drm_message","$v":"O download falhou devido a um erro no servidor."},{"$i":"err_bad_image","$v":"A imagem baixada não pode ser exibida nesse dispositivo."},{"$i":"err_bad_audio","$v":"O arquivo baixado não pode ser exibido nesse dispositivo."},{"$i":"err_no_space","$v":"Não há espaço suficiente no seu dispositivo para salvar essa música."},{"$i":"err_no_sdcard","$v":"Não foi possível salvar essa música pois não há um cartão de memória presente."},{"$i":"err_sdcard_in_use","$v":"Não foi possível salvar essa música porque o cartão de memória está em uso. Desconecte seu telefone do computador e tente novamente."},{"$i":"err_ds_save_failure","$v":"Erro ao salvar arquivo."},{"$i":"err_db_store_failure","$v":"Erro ao salvar arquivo."},{"$i":"success_song","$v":"Música baixada e instalada. Use o aplicativo Música para reproduzi-la."},{"$i":"success_ringtone","$v":"Toque de chamadas baixado e instalado."},{"$i":"success_wallpaper","$v":"Papel de parede baixado e instalado."},{"$i":"ringtone-or-song-question","$v":"Você gostaria de instalar esse arquivo de áudio como música ou toque?"},{"$i":"ringtone-response","$v":"Toque de chamada"},{"$i":"song-response","$v":"Música"},{"$i":"download-confirmation-title-song","$v":"Baixar música?"},{"$i":"download-confirmation-title-ringtone","$v":"Baixar toque de chamada?"},{"$i":"download-confirmation-title-wallpaper","$v":"Baixar papel de parede?"},{"$i":"downloading-song","$v":"Baixando música…"},{"$i":"downloading-ringtone","$v":"Baixando toque de chamada…"},{"$i":"downloading-wallpaper","$v":"Baixando papel de parede…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," bloqueou esse arquivo de forma com que ele não possa ser compartilhado com outros ou transferido para outro dispositivo."]},{"$i":"locked-content-advisory-generic","$v":"O vendedor bloqueou esse arquivo de forma com que ele não possa ser compartilhado com outros ou transferido para outro dispositivo."},{"$i":"download-confirmation-name","$v":"Nome"},{"$i":"download-confirmation-type","$v":"Tipo"},{"$i":"download-confirmation-size","$v":"Tamanho"},{"$i":"download-confirmation-vendor","$v":"Vendedor"},{"$i":"download-confirmation-description","$v":"Informações"},{"$i":"download-progress-title","$v":"Baixando"},{"$i":"preview-image-title","$v":"Pré-visualizar imagem"},{"$i":"preview-audio-title","$v":"Pré-visualizar áudio"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Ok"},{"$i":"download-button","$v":"Descarcă"},{"$i":"install-button","$v":"Instalează"},{"$i":"cancel-button","$v":"Renunță"},{"$i":"download_error","$v":"Eroare la descărcare"},{"$i":"install_error","$v":"Eroare la instalare"},{"$i":"err_descriptor_download_failed","$v":"Descărcarea a eșuat din cauza unei erori a serverului."},{"$i":"err_bad_descriptor","$v":"Descărcarea a eșuat din cauza unei erori a serverului."},{"$i":"err_too_big","$v":"Fișierul este prea mare pentru descărcare."},{"$i":"err_unsupported_type","$v":"Acest tip de media achiziționat nu este suportat pe telefon."},{"$i":"err_bad_type","$v":"Descărcarea a eșuat din cauza unei erori a serverului."},{"$i":"err_content_download_failed","$v":"Descărcarea a eșuat din cauza unei erori a serverului."},{"$i":"err_bad_drm_message","$v":"Descărcarea a eșuat din cauza unei erori a serverului."},{"$i":"err_bad_image","$v":"Imaginea descărcată nu poate fi afișată pe dispozitiv."},{"$i":"err_bad_audio","$v":"Fișierul descărcat nu poate fi redat pe dispozitiv."},{"$i":"err_no_space","$v":"Nu există suficient spațiu de stocare pe dispozitiv pentru a salva această melodie."},{"$i":"err_no_sdcard","$v":"Nu se poate salva melodia deoarece nu există card de memorie."},{"$i":"err_sdcard_in_use","$v":"Nu se poate salva melodia deoarece cardul de memorie este în uz. Deconectează telefonul și încearcă descărcarea din nou."},{"$i":"err_ds_save_failure","$v":"Eroare la salvarea fișierului media."},{"$i":"err_db_store_failure","$v":"Eroare la salvarea fișierului media."},{"$i":"success_song","$v":"Melodie descărcată și instalată. Folosește aplicația Muzică pentru a o reda."},{"$i":"success_ringtone","$v":"Ton de apel descărcat și instalat."},{"$i":"success_wallpaper","$v":"Imagine de fundal descărcată și instalată."},{"$i":"ringtone-or-song-question","$v":"Dorești să descarci și să instalezi acest fișier audio ca melodie sau ca ton de apel?"},{"$i":"ringtone-response","$v":"Ton de apel"},{"$i":"song-response","$v":"Melodie"},{"$i":"download-confirmation-title-song","$v":"Descarci melodia?"},{"$i":"download-confirmation-title-ringtone","$v":"Descarci tonul de apel?"},{"$i":"download-confirmation-title-wallpaper","$v":"Descarci imaginea de fundal?"},{"$i":"downloading-song","$v":"Se descarcă melodia…"},{"$i":"downloading-ringtone","$v":"Se descarcă tonul de apel…"},{"$i":"downloading-wallpaper","$v":"Se descarcă imaginea de fundal…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," a blocat acest fișier media astfel încât să nu poată fi împărtășit cu alții sau transferat către un dispozitiv nou."]},{"$i":"locked-content-advisory-generic","$v":"Vânzătorul a blocat acest fișier media astfel încât să nu poată fi împărtășit cu alții sau transferat către un dispozitiv nou."},{"$i":"download-confirmation-name","$v":"Nume"},{"$i":"download-confirmation-type","$v":"Tip"},{"$i":"download-confirmation-size","$v":"Mărime"},{"$i":"download-confirmation-vendor","$v":"Producător"},{"$i":"download-confirmation-description","$v":"Informații"},{"$i":"download-progress-title","$v":"Se descarcă"},{"$i":"preview-image-title","$v":"Previzualizează imaginea"},{"$i":"preview-audio-title","$v":"Previzualizează audio"},{"$i":"byteUnit-B","$v":"byți"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Загрузить"},{"$i":"install-button","$v":"Установить"},{"$i":"cancel-button","$v":"Отмена"},{"$i":"download_error","$v":"Ошибка загрузки"},{"$i":"install_error","$v":"Ошибка установки"},{"$i":"err_descriptor_download_failed","$v":"Загрузка не удалась из-за ошибки сервера."},{"$i":"err_bad_descriptor","$v":"Загрузка не удалась из-за ошибки сервера."},{"$i":"err_too_big","$v":"Размер загружаемого файла превышает максимальный."},{"$i":"err_unsupported_type","$v":"Этот тип купленного медиа не поддерживается на вашем телефоне."},{"$i":"err_bad_type","$v":"Загрузка не удалась из-за ошибки сервера."},{"$i":"err_content_download_failed","$v":"Загрузка не удалась из-за ошибки сервера."},{"$i":"err_bad_drm_message","$v":"Загрузка не удалась из-за ошибки сервера."},{"$i":"err_bad_image","$v":"Загруженное изображение не может быть просмотрено на этом устройстве."},{"$i":"err_bad_audio","$v":"Загруженный файл не может быть воспроизведен на этом устройстве."},{"$i":"err_no_space","$v":"Для сохранения этой песни на вашем устройстве недостаточно свободной памяти."},{"$i":"err_no_sdcard","$v":"Не могу сохранить песню так как отсутствует карта памяти."},{"$i":"err_sdcard_in_use","$v":"Не могу сохранить песню так как карта памяти сейчас занята. Отсоедините ваш телефон и попробуйте загрузить снова."},{"$i":"err_ds_save_failure","$v":"Ошибка сохранения медиафайла."},{"$i":"err_db_store_failure","$v":"Ошибка сохранения медиафайла."},{"$i":"success_song","$v":"Песня загружена и установлена. Для её проигрывания используйте приложение Музыка."},{"$i":"success_ringtone","$v":"Мелодия загружена и установлена."},{"$i":"success_wallpaper","$v":"Обои загружены и установлены."},{"$i":"ringtone-or-song-question","$v":"Вы хотите установить этот аудиофайл в качестве песни или мелодии?"},{"$i":"ringtone-response","$v":"Мелодия"},{"$i":"song-response","$v":"Песня"},{"$i":"download-confirmation-title-song","$v":"Загрузить песню?"},{"$i":"download-confirmation-title-ringtone","$v":"Загрузить мелодию?"},{"$i":"download-confirmation-title-wallpaper","$v":"Загрузить обои?"},{"$i":"downloading-song","$v":"Загрузка песни…"},{"$i":"downloading-ringtone","$v":"Загрузка мелодии…"},{"$i":"downloading-wallpaper","$v":"Загрузка обоев…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," защитил этот медиафайл от копирования, чтобы им нельзя было поделиться с другими или перенести на новое устройство."]},{"$i":"locked-content-advisory-generic","$v":"Продавец защитил этот медиафайл от копирования, чтобы им нельзя было поделиться с другими или перенести на новое устройство."},{"$i":"download-confirmation-name","$v":"Имя"},{"$i":"download-confirmation-type","$v":"Тип"},{"$i":"download-confirmation-size","$v":"Размер"},{"$i":"download-confirmation-vendor","$v":"Поставщик"},{"$i":"download-confirmation-description","$v":"Инфо"},{"$i":"download-progress-title","$v":"Загрузка"},{"$i":"preview-image-title","$v":"Предпросмотр изображения"},{"$i":"preview-audio-title","$v":"Предпросмотр аудио"},{"$i":"byteUnit-B","$v":"байт"},{"$i":"byteUnit-KB","$v":"КБ"},{"$i":"byteUnit-MB","$v":"МБ"},{"$i":"byteUnit-GB","$v":"ГБ"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Prevziať"},{"$i":"install-button","$v":"Nainštalovať"},{"$i":"cancel-button","$v":"Zrušiť"},{"$i":"download_error","$v":"Chyba pri preberaní"},{"$i":"install_error","$v":"Chyba pri inštalácii"},{"$i":"err_descriptor_download_failed","$v":"Pri preberaní súboru sa vyskytla chyba servera."},{"$i":"err_bad_descriptor","$v":"Preberanie zlyhalo kvôli chybe servera."},{"$i":"err_too_big","$v":"Súbor je príliš veľký, nie je možné ho prevziať."},{"$i":"err_unsupported_type","$v":"Tento typ média nie je vo vašom telefóne podporovaný."},{"$i":"err_bad_type","$v":"Preberanie zlyhalo kvôli chybe servera."},{"$i":"err_content_download_failed","$v":"Preberanie zlyhalo kvôli chybe servera."},{"$i":"err_bad_drm_message","$v":"Preberanie zlyhalo kvôli chybe servera."},{"$i":"err_bad_image","$v":"Prevzatý obrázok nie je možné zobraziť na tomto zariadení."},{"$i":"err_bad_audio","$v":"Prevzatý súbor nie je možné prehrať na tomto zariadení."},{"$i":"err_no_space","$v":"Na uloženie tejto skladby nie je dostatok voľného miesta v úložisku."},{"$i":"err_no_sdcard","$v":"Skladbu nie je možné uložiť, pretože nie je dostupná žiadna pamäťová karta."},{"$i":"err_sdcard_in_use","$v":"Skladbu nie je možné uložiť, pretože pamäťová karta sa práve používa. Odpojte telefón a skúste to znova."},{"$i":"err_ds_save_failure","$v":"Chyba pri ukladaní súboru média."},{"$i":"err_db_store_failure","$v":"Chyba pri ukladaní súboru média."},{"$i":"success_song","$v":"Skladba bola prevzatá a nainštalovaná. Prehráte ju pomocou aplikácie Hudba."},{"$i":"success_ringtone","$v":"Zvonenie bolo prevzaté a nainštalované."},{"$i":"success_wallpaper","$v":"Tapeta bola prevzatá a nainštalovaná."},{"$i":"ringtone-or-song-question","$v":"Chcete tento zvukový súbor použiť ako skladbu alebo ako zvonenie?"},{"$i":"ringtone-response","$v":"Zvonenie"},{"$i":"song-response","$v":"Skladba"},{"$i":"download-confirmation-title-song","$v":"Prevziať skladbu?"},{"$i":"download-confirmation-title-ringtone","$v":"Prevziať zvonenie?"},{"$i":"download-confirmation-title-wallpaper","$v":"Prevziať tapetu?"},{"$i":"downloading-song","$v":"Preberá sa skladba…"},{"$i":"downloading-ringtone","$v":"Preberá sa zvonenie…"},{"$i":"downloading-wallpaper","$v":"Preberá sa tapeta…"},{"$i":"locked-content-advisory","$v":["Predávajúci (",{"t":"idOrVar","v":"vendor"},") uzamkol tento súbor s médiom, takže ho nie je možné zdieľať s ostatnými ani preniesť do iného zariadenia."]},{"$i":"locked-content-advisory-generic","$v":"Predávajúci uzamkol tento súbor s médiom, takže ho nie je možné zdieľať s ostatnými ani preniesť do iného zariadenia."},{"$i":"download-confirmation-name","$v":"Názov"},{"$i":"download-confirmation-type","$v":"Typ"},{"$i":"download-confirmation-size","$v":"Veľkosť"},{"$i":"download-confirmation-vendor","$v":"Spoločnosť"},{"$i":"download-confirmation-description","$v":"Informácie"},{"$i":"download-progress-title","$v":"Preberá sa"},{"$i":"preview-image-title","$v":"Ukážka obrázka"},{"$i":"preview-audio-title","$v":"Ukážka zvuku"},{"$i":"byteUnit-B","$v":"bajtov"},{"$i":"byteUnit-KB","$v":"kB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Shkarkoje"},{"$i":"install-button","$v":"Instaloje"},{"$i":"cancel-button","$v":"Anulojeni"},{"$i":"download_error","$v":"Gabim Shkarkimi"},{"$i":"install_error","$v":"Gabim Instalimi"},{"$i":"err_descriptor_download_failed","$v":"Shkarkimi dështoi për shkak të një gabimi shërbyesi."},{"$i":"err_bad_descriptor","$v":"Shkarkimi dështoi për shkak të një gabimi shërbyesi."},{"$i":"err_too_big","$v":"Kartela është shumë e madhe për shkarkim."},{"$i":"err_unsupported_type","$v":"Ky lloj media të blerë nuk mbulohet në telefonin tuaj."},{"$i":"err_bad_type","$v":"Shkarkimi dështoi për shkak të një gabimi shërbyesi."},{"$i":"err_content_download_failed","$v":"Shkarkimi dështoi për shkak të një gabimi shërbyesi."},{"$i":"err_bad_drm_message","$v":"Shkarkimi dështoi për shkak të një gabimi shërbyesi."},{"$i":"err_bad_image","$v":"Figura e shkarkuar nuk shfaqet dot në këtë pajisje."},{"$i":"err_bad_audio","$v":"Kartela e shkarkuar nuk luhet dot në këtë pajisje."},{"$i":"err_no_space","$v":"S’ka vend të mjaftueshëm depozite në pajisjen tuaj që të ruhet kjo këngë."},{"$i":"err_no_sdcard","$v":"S’ruhet dot kënga, ngaqë s’ka kartë kujtese."},{"$i":"err_sdcard_in_use","$v":"S’ruhet dot kënga, ngaqë karta e kujtesës po përdoret. Shkëputeni telefonin dhe provoni ta shkarkoni sërish."},{"$i":"err_ds_save_failure","$v":"Gabim në ruajtjen e kartelës media."},{"$i":"err_db_store_failure","$v":"Gabim në ruajtjen e kartelës media."},{"$i":"success_song","$v":"Kënga u shkarkua dhe u instalua. Përdorni aplikacionin e Muzikës që ta luani."},{"$i":"success_ringtone","$v":"Zilja u shkarkua dhe u instalua."},{"$i":"success_wallpaper","$v":"Sfondi u shkarkua dhe u instalua."},{"$i":"ringtone-or-song-question","$v":"Doni të instalohet kjo kartelë audio si këngë apo si zile?"},{"$i":"ringtone-response","$v":"Zile"},{"$i":"song-response","$v":"Këngë"},{"$i":"download-confirmation-title-song","$v":"Të shkarkohet kënga?"},{"$i":"download-confirmation-title-ringtone","$v":"Të shkarkohet zilja?"},{"$i":"download-confirmation-title-wallpaper","$v":"Të shkarkohet sfondi?"},{"$i":"downloading-song","$v":"Po shkarkohet kënga…"},{"$i":"downloading-ringtone","$v":"Po shkarkohet zilja…"},{"$i":"downloading-wallpaper","$v":"Po shkarkohet sfondi…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," e ka kyçur këtë kartelë media që ajo të mos ndahet me të tjerë apo të mbartet në një pajisje të re."]},{"$i":"locked-content-advisory-generic","$v":"Tregtuesi e ka kyçur këtë kartelë media që ajo të mos ndahet me të tjerë apo të mbartet në një pajisje të re."},{"$i":"download-confirmation-name","$v":"Emër"},{"$i":"download-confirmation-type","$v":"Lloj"},{"$i":"download-confirmation-size","$v":"Madhësi"},{"$i":"download-confirmation-vendor","$v":"Tregtues"},{"$i":"download-confirmation-description","$v":"Të dhëna"},{"$i":"download-progress-title","$v":"Shkarkim"},{"$i":"preview-image-title","$v":"Paraparje figure"},{"$i":"preview-audio-title","$v":"Paradëgjim audioje"},{"$i":"byteUnit-B","$v":"bajte"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"У реду"},{"$i":"download-button","$v":"Преузми"},{"$i":"install-button","$v":"Инсталирај"},{"$i":"cancel-button","$v":"Откажи"},{"$i":"download_error","$v":"Грешка при преузимању"},{"$i":"install_error","$v":"Грешка при инсталацији"},{"$i":"err_descriptor_download_failed","$v":"Преузимање није успело због грешке на серверу."},{"$i":"err_bad_descriptor","$v":"Преузимање није успело због грешке на серверу."},{"$i":"err_too_big","$v":"Датотека је превелика за преузимање."},{"$i":"err_unsupported_type","$v":"Ова врста купљеног медија није подржана на овом телефону."},{"$i":"err_bad_type","$v":"Преузимање није успело због грешке на серверу."},{"$i":"err_content_download_failed","$v":"Преузимање није успело због грешке на серверу."},{"$i":"err_bad_drm_message","$v":"Преузимање није успело због грешке на серверу."},{"$i":"err_bad_image","$v":"Преузета слика не може бити приказана на овом уређају."},{"$i":"err_bad_audio","$v":"Преузета датотека не може бити приказана на овом уређају."},{"$i":"err_no_space","$v":"Нема довољно места на уређају да би се могла сачувати ова песма."},{"$i":"err_no_sdcard","$v":"Песма се не може сачувати јер нема меморијске картице."},{"$i":"err_sdcard_in_use","$v":"Песма се не може сачувати јер је меморијска картица тренутно у употреби. Ископчајте телефон и покушајте поново да преузмете песму."},{"$i":"err_ds_save_failure","$v":"Грешка током чувања мултимедијалне датотеке."},{"$i":"err_db_store_failure","$v":"Грешка током чувања мултимедијалне датотеке."},{"$i":"success_song","$v":"Песма је преузета и инсталирана. Да би је преслушали, покрените апликацију Музика."},{"$i":"success_ringtone","$v":"Мелодија је преузета и инсталирана."},{"$i":"success_wallpaper","$v":"Позадинска слика је преузета и инсталирана."},{"$i":"ringtone-or-song-question","$v":"Да ли желите да инсталирате ову аудио датотеку као песму или као мелодију?"},{"$i":"ringtone-response","$v":"Мелодију"},{"$i":"song-response","$v":"Песму"},{"$i":"download-confirmation-title-song","$v":"Преузети песму?"},{"$i":"download-confirmation-title-ringtone","$v":"Преузети мелодију?"},{"$i":"download-confirmation-title-wallpaper","$v":"Преузети позадинску слику?"},{"$i":"downloading-song","$v":"Преузимање песме…"},{"$i":"downloading-ringtone","$v":"Преузимање мелодије…"},{"$i":"downloading-wallpaper","$v":"Преузимање позадинске слике…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," је закључао ову мултимедијалну датотеку да се не би могла делити са другима или пренети на нови уређај."]},{"$i":"locked-content-advisory-generic","$v":"Продавац је закључао ову мултимедијалну датотеку да се не би могла делити са другима или пренети на нови уређај."},{"$i":"download-confirmation-name","$v":"Назив"},{"$i":"download-confirmation-type","$v":"Врста"},{"$i":"download-confirmation-size","$v":"Величина"},{"$i":"download-confirmation-vendor","$v":"Продавац"},{"$i":"download-confirmation-description","$v":"Информације"},{"$i":"download-progress-title","$v":"Преузимање"},{"$i":"preview-image-title","$v":"Преглед слике"},{"$i":"preview-audio-title","$v":"Преглед аудиa"},{"$i":"byteUnit-B","$v":"B"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"U redu"},{"$i":"download-button","$v":"Preuzmi"},{"$i":"install-button","$v":"Instaliraj"},{"$i":"cancel-button","$v":"Otkaži"},{"$i":"download_error","$v":"Greška pri preuzimanju"},{"$i":"install_error","$v":"Greška pri instalaciji"},{"$i":"err_descriptor_download_failed","$v":"Preuzimanje nije uspelo zbog greške na serveru."},{"$i":"err_bad_descriptor","$v":"Preuzimanje nije uspelo zbog greške na serveru."},{"$i":"err_too_big","$v":"Datoteka je prevelika za preuzimanje."},{"$i":"err_unsupported_type","$v":"Ova vrsta kupljenog medija nije podržana na ovom telefonu."},{"$i":"err_bad_type","$v":"Preuzimanje nije uspelo zbog greške na serveru."},{"$i":"err_content_download_failed","$v":"Preuzimanje nije uspelo zbog greške na serveru."},{"$i":"err_bad_drm_message","$v":"Preuzimanje nije uspelo zbog greške na serveru."},{"$i":"err_bad_image","$v":"Preuzeta slika ne može biti prikazana na ovom uređaju."},{"$i":"err_bad_audio","$v":"Preuzeta datoteka ne može biti prikazana na ovom uređaju."},{"$i":"err_no_space","$v":"Nema dovoljno mesta na uređaju da bi se mogla sačuvati ova pesma."},{"$i":"err_no_sdcard","$v":"Pesma se ne može sačuvati jer nema memorijske kartice."},{"$i":"err_sdcard_in_use","$v":"Pesma se ne može sačuvati jer je memorijska kartica trenutno u upotrebi. Iskopčajte telefon i pokušajte ponovo da preuzmete pesmu."},{"$i":"err_ds_save_failure","$v":"Greška tokom čuvanja multimedijalne datoteke."},{"$i":"err_db_store_failure","$v":"Greška tokom čuvanja multimedijalne datoteke."},{"$i":"success_song","$v":"Pesma je preuzeta i instalirana. Da bi je preslušali, pokrenite aplikaciju Muzika."},{"$i":"success_ringtone","$v":"Melodija je preuzeta i instalirana."},{"$i":"success_wallpaper","$v":"Pozadinska slika je preuzeta i instalirana."},{"$i":"ringtone-or-song-question","$v":"Da li želite da instalirate ovu audio datoteku kao pesmu ili kao melodiju?"},{"$i":"ringtone-response","$v":"Melodiju"},{"$i":"song-response","$v":"Pesmu"},{"$i":"download-confirmation-title-song","$v":"Preuzeti pesmu?"},{"$i":"download-confirmation-title-ringtone","$v":"Preuzeti melodiju?"},{"$i":"download-confirmation-title-wallpaper","$v":"Preuzeti pozadinsku sliku?"},{"$i":"downloading-song","$v":"Preuzimanje pesme…"},{"$i":"downloading-ringtone","$v":"Preuzimanje melodije…"},{"$i":"downloading-wallpaper","$v":"Preuzimanje pozadinske slike…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," je zaključao ovu multimedijalnu datoteku da se ne bi mogla deliti sa drugima ili preneti na novi uređaj."]},{"$i":"locked-content-advisory-generic","$v":"Prodavac je zaključao ovu multimedijalnu datoteku da se ne bi mogla deliti sa drugima ili preneti na novi uređaj."},{"$i":"download-confirmation-name","$v":"Naziv"},{"$i":"download-confirmation-type","$v":"Vrsta"},{"$i":"download-confirmation-size","$v":"Veličina"},{"$i":"download-confirmation-vendor","$v":"Prodavac"},{"$i":"download-confirmation-description","$v":"Informacije"},{"$i":"download-progress-title","$v":"Preuzimanje"},{"$i":"preview-image-title","$v":"Pregled slike"},{"$i":"preview-audio-title","$v":"Pregled audia"},{"$i":"byteUnit-B","$v":"B"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"OK"},{"$i":"download-button","$v":"Hämta"},{"$i":"install-button","$v":"Installera"},{"$i":"cancel-button","$v":"Avbryt"},{"$i":"download_error","$v":"Hämtningsfel"},{"$i":"install_error","$v":"Installationsfel"},{"$i":"err_descriptor_download_failed","$v":"Hämtningen misslyckades på grund av ett serverfel."},{"$i":"err_bad_descriptor","$v":"Hämtningen misslyckades på grund av ett serverfel."},{"$i":"err_too_big","$v":"Filen är för stor för att hämta."},{"$i":"err_unsupported_type","$v":"Denna typ av köpt media stöds inte av telefonen."},{"$i":"err_bad_type","$v":"Hämtningen misslyckades på grund av ett serverfel."},{"$i":"err_content_download_failed","$v":"Hämtningen misslyckades på grund av ett serverfel."},{"$i":"err_bad_drm_message","$v":"Hämtningen misslyckades på grund av ett serverfel."},{"$i":"err_bad_image","$v":"Den nedladdade bilden kan inte visas på enheten."},{"$i":"err_bad_audio","$v":"Den nedladdade filen kan inte spelas på enheten."},{"$i":"err_no_space","$v":"Det finns inte tillräckligt med lagringsutrymme på enheten för att spara den här låten."},{"$i":"err_no_sdcard","$v":"Kan inte spara låten eftersom det inte finns något minneskort."},{"$i":"err_sdcard_in_use","$v":"Kan inte spara låten eftersom minneskortet är i bruk. Koppla ur telefonen och försök hämta igen."},{"$i":"err_ds_save_failure","$v":"Fel vid sparande av mediefil."},{"$i":"err_db_store_failure","$v":"Fel vid sparande av mediefil."},{"$i":"success_song","$v":"Låten hämtad och installerad. Använd appen Musik för att spela den."},{"$i":"success_ringtone","$v":"Ringsignal hämtad och installerad."},{"$i":"success_wallpaper","$v":"Bakgrundsbild hämtad och installerad."},{"$i":"ringtone-or-song-question","$v":"Vill du installera denna ljudfil som en låt eller som ringsignal?"},{"$i":"ringtone-response","$v":"Ringsignal"},{"$i":"song-response","$v":"Låt"},{"$i":"download-confirmation-title-song","$v":"Hämta låten?"},{"$i":"download-confirmation-title-ringtone","$v":"Hämta ringsignalen?"},{"$i":"download-confirmation-title-wallpaper","$v":"Hämta bakgrundsbild?"},{"$i":"downloading-song","$v":"Hämtar låt…"},{"$i":"downloading-ringtone","$v":"Hämtar ringsignal…"},{"$i":"downloading-wallpaper","$v":"Hämtar bakgrundsbild…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," har låst mediefilen så att den inte kan delas med andra eller överföras till en ny enhet."]},{"$i":"locked-content-advisory-generic","$v":"Säljaren har låst mediefilen så att den inte kan delas med andra eller överföras till en ny enhet."},{"$i":"download-confirmation-name","$v":"Namn"},{"$i":"download-confirmation-type","$v":"Typ"},{"$i":"download-confirmation-size","$v":"Storlek"},{"$i":"download-confirmation-vendor","$v":"Säljare"},{"$i":"download-confirmation-description","$v":"Info"},{"$i":"download-progress-title","$v":"Hämtar"},{"$i":"preview-image-title","$v":"Förhandsgranska bild"},{"$i":"preview-audio-title","$v":"Förhandsgranska ljud"},{"$i":"byteUnit-B","$v":"bytes"},{"$i":"byteUnit-KB","$v":"kB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"Tamam"},{"$i":"download-button","$v":"İndir"},{"$i":"install-button","$v":"Yükle"},{"$i":"cancel-button","$v":"İptal"},{"$i":"download_error","$v":"İndirme Hatası"},{"$i":"install_error","$v":"Kurulum Hatası"},{"$i":"err_descriptor_download_failed","$v":"Sunucu hatası sebebiyle indirme başarısız oldu."},{"$i":"err_bad_descriptor","$v":"Sunucu hatası sebebiyle indirme başarısız oldu."},{"$i":"err_too_big","$v":"Dosya indirilemeyecek kadar büyük."},{"$i":"err_unsupported_type","$v":"Satın alınabilen bu medya türü telefonunuzda desteklenmiyor."},{"$i":"err_bad_type","$v":"Sunucu hatası sebebiyle indirme başarısız oldu."},{"$i":"err_content_download_failed","$v":"Sunucu hatası sebebiyle indirme başarısız oldu."},{"$i":"err_bad_drm_message","$v":"Sunucu hatası sebebiyle indirme başarısız oldu."},{"$i":"err_bad_image","$v":"İndirilen resim bu cihazda görüntülenemiyor."},{"$i":"err_bad_audio","$v":"İndirilen dosya bu aygıtta oynatılamaz."},{"$i":"err_no_space","$v":"Aygıtınızda bu şarkıyı kaydetmeye yedecek kadar yer yok."},{"$i":"err_no_sdcard","$v":"Bellek kartı olmadığı için şarkı kaydedilemiyor."},{"$i":"err_sdcard_in_use","$v":"Bellek kartı kullanımda olduğu için şarkı kaydedilemiyor. Telefonunuzun kablosunu söküp tekrar indirmeyi deneyin."},{"$i":"err_ds_save_failure","$v":"Medya dosyası kaydetme hatası."},{"$i":"err_db_store_failure","$v":"Medya dosyası kaydetme hatası."},{"$i":"success_song","$v":"Şarkı indirildi ve yüklendi. Dinlemek için Müzik uygulamasını kullanın."},{"$i":"success_ringtone","$v":"Zil sesi indirildi ve yüklendi."},{"$i":"success_wallpaper","$v":"Duvar kâğıdı indirildi ve yüklendi."},{"$i":"ringtone-or-song-question","$v":"Bu ses dosyasını şarkı veya zil sesi olarak yüklemek istiyor musunuz?"},{"$i":"ringtone-response","$v":"Zil sesi"},{"$i":"song-response","$v":"Şarkı"},{"$i":"download-confirmation-title-song","$v":"Şarkı indirilsin mi?"},{"$i":"download-confirmation-title-ringtone","$v":"Zil sesi indirilsin mi?"},{"$i":"download-confirmation-title-wallpaper","$v":"Duvar kâğıdı indirilsin mi?"},{"$i":"downloading-song","$v":"Şarkı indiriliyor…"},{"$i":"downloading-ringtone","$v":"Zil sesi indiriliyor…"},{"$i":"downloading-wallpaper","$v":"Duvar kâğıdı indiriliyor…"},{"$i":"locked-content-advisory","$v":["Bu medya dosyası ",{"t":"idOrVar","v":"vendor"}," tarafından kilitlendiği için başkalarıyla paylaşılamaz veya başka bir aygıta aktarılamaz."]},{"$i":"locked-content-advisory-generic","$v":"Bu medya dosyası satıcı tarafından kilitlendiği için başkalarıyla paylaşılamaz veya başka bir aygıta aktarılamaz."},{"$i":"download-confirmation-name","$v":"Ad"},{"$i":"download-confirmation-type","$v":"Tür"},{"$i":"download-confirmation-size","$v":"Boyut"},{"$i":"download-confirmation-vendor","$v":"Sağlayıcı"},{"$i":"download-confirmation-description","$v":"Bilgi"},{"$i":"download-progress-title","$v":"İndiriliyor"},{"$i":"preview-image-title","$v":"Resmi ön izle"},{"$i":"preview-audio-title","$v":"Sesi ön izle"},{"$i":"byteUnit-B","$v":"bayt"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"确定"},{"$i":"download-button","$v":"下载"},{"$i":"install-button","$v":"安装"},{"$i":"cancel-button","$v":"取消"},{"$i":"download_error","$v":"下载错误"},{"$i":"install_error","$v":"安装错误"},{"$i":"err_descriptor_download_failed","$v":"因为服务器出错,下载失败。"},{"$i":"err_bad_descriptor","$v":"因为服务器出错,下载失败。"},{"$i":"err_too_big","$v":"文件太大,无法下载"},{"$i":"err_unsupported_type","$v":"您的手机不支持已购买的此类型媒体。"},{"$i":"err_bad_type","$v":"因为服务器出错,下载失败。"},{"$i":"err_content_download_failed","$v":"因为服务器出错,下载失败。"},{"$i":"err_bad_drm_message","$v":"因为服务器出错,下载失败。"},{"$i":"err_bad_image","$v":"已下载的此图片无法在此设备上显示。"},{"$i":"err_bad_audio","$v":"已下载的这个文件无法在此设备上播放。"},{"$i":"err_no_space","$v":"您的设备上没有足够的存储空间以保存此歌曲。"},{"$i":"err_no_sdcard","$v":"由于没有存储卡,无法保存歌曲。"},{"$i":"err_sdcard_in_use","$v":"存储卡正在使用因而无法保存歌曲,拔出手机后再尝试下载。"},{"$i":"err_ds_save_failure","$v":"保存媒体文件时出错。"},{"$i":"err_db_store_failure","$v":"保存媒体文件时出错。"},{"$i":"success_song","$v":"已下载并安置歌曲。使用“音乐”应用播放。"},{"$i":"success_ringtone","$v":"已下载并安装铃声。"},{"$i":"success_wallpaper","$v":"已下载并安装壁纸。"},{"$i":"ringtone-or-song-question","$v":"您想安装此音频文件为一首歌曲或铃声吗?"},{"$i":"ringtone-response","$v":"铃声"},{"$i":"song-response","$v":"歌曲"},{"$i":"download-confirmation-title-song","$v":"下载歌曲?"},{"$i":"download-confirmation-title-ringtone","$v":"下载铃声?"},{"$i":"download-confirmation-title-wallpaper","$v":"下载壁纸?"},{"$i":"downloading-song","$v":"正在下载歌曲…"},{"$i":"downloading-ringtone","$v":"正在下载铃声…"},{"$i":"downloading-wallpaper","$v":"正在下载壁纸…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," 已经锁定了这个媒体文件,因而它不能分享给其他人或者传输到新的设备上。"]},{"$i":"locked-content-advisory-generic","$v":"销售者已经锁定了这个媒体文件,因而它不能分享给其他人或者传输到新的设备上。"},{"$i":"download-confirmation-name","$v":"名称"},{"$i":"download-confirmation-type","$v":"类型"},{"$i":"download-confirmation-size","$v":"大小"},{"$i":"download-confirmation-vendor","$v":"厂商"},{"$i":"download-confirmation-description","$v":"信息"},{"$i":"download-progress-title","$v":"下载中"},{"$i":"preview-image-title","$v":"预览图片"},{"$i":"preview-audio-title","$v":"预览音频"},{"$i":"byteUnit-B","$v":"字节"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"ok","$v":"確定"},{"$i":"download-button","$v":"下載"},{"$i":"install-button","$v":"安裝"},{"$i":"cancel-button","$v":"取消"},{"$i":"download_error","$v":"下載錯誤"},{"$i":"install_error","$v":"安裝錯誤"},{"$i":"err_descriptor_download_failed","$v":"因為伺服器錯誤,下載失敗。"},{"$i":"err_bad_descriptor","$v":"因為伺服器錯誤,下載失敗。"},{"$i":"err_too_big","$v":"檔案太大,無法下載。"},{"$i":"err_unsupported_type","$v":"您的手機不支援此類型的已購買媒體。"},{"$i":"err_bad_type","$v":"因為伺服器錯誤,下載失敗。"},{"$i":"err_content_download_failed","$v":"因為伺服器錯誤,下載失敗。"},{"$i":"err_bad_drm_message","$v":"因為伺服器錯誤,下載失敗。"},{"$i":"err_bad_image","$v":"已下載的圖片無法在此裝置上顯示。"},{"$i":"err_bad_audio","$v":"已下載的檔案無法在此裝置上播放。"},{"$i":"err_no_space","$v":"您的裝置上沒有足夠的儲存空間可儲存此歌曲。"},{"$i":"err_no_sdcard","$v":"由於沒有記憶卡,無法儲存歌曲。"},{"$i":"err_sdcard_in_use","$v":"由於記憶卡正在使用中,無法儲存歌曲。請拔除手機傳輸線並重新下載。"},{"$i":"err_ds_save_failure","$v":"儲存媒體檔案時發生錯誤。"},{"$i":"err_db_store_failure","$v":"儲存媒體檔案時發生錯誤。"},{"$i":"success_song","$v":"已下載安裝歌曲。使用音樂應用程式播放。"},{"$i":"success_ringtone","$v":"已下載安裝鈴聲。"},{"$i":"success_wallpaper","$v":"已下載安裝桌面背景。"},{"$i":"ringtone-or-song-question","$v":"您將要將此音樂檔案儲存為歌曲或鈴聲?"},{"$i":"ringtone-response","$v":"鈴聲"},{"$i":"song-response","$v":"歌曲"},{"$i":"download-confirmation-title-song","$v":"下載歌曲?"},{"$i":"download-confirmation-title-ringtone","$v":"下載鈴聲?"},{"$i":"download-confirmation-title-wallpaper","$v":"下載桌面背景?"},{"$i":"downloading-song","$v":"正在下載歌曲…"},{"$i":"downloading-ringtone","$v":"正在下載鈴聲…"},{"$i":"downloading-wallpaper","$v":"正在下載桌面背景…"},{"$i":"locked-content-advisory","$v":[{"t":"idOrVar","v":"vendor"}," 已鎖定此媒體檔案,您不能與其他人分享,或將其轉移至新裝置。"]},{"$i":"locked-content-advisory-generic","$v":"您的手機廠商已鎖定此媒體檔案,您不能與其他人分享,或將其轉移至新裝置。"},{"$i":"download-confirmation-name","$v":"名稱"},{"$i":"download-confirmation-type","$v":"類型"},{"$i":"download-confirmation-size","$v":"大小"},{"$i":"download-confirmation-vendor","$v":"廠商"},{"$i":"download-confirmation-description","$v":"資訊"},{"$i":"download-progress-title","$v":"下載中"},{"$i":"preview-image-title","$v":"預覽圖片"},{"$i":"preview-audio-title","$v":"預覽音訊"},{"$i":"byteUnit-B","$v":"位元組"},{"$i":"byteUnit-KB","$v":"KB"},{"$i":"byteUnit-MB","$v":"MB"},{"$i":"byteUnit-GB","$v":"GB"},{"$i":"fileSize","$v":[{"t":"idOrVar","v":"size"}," ",{"t":"idOrVar","v":"unit"}]}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"تمّ"},{"$i":"pick-ringtone","$v":"إختيار نغمة الرنين"},{"$i":"pick-wallpaper","$v":"إختيار الخلفية"},{"$i":"no-installed-ringtones","$v":"لم يثبت نغمات رنين مقفله"},{"$i":"no-installed-wallpaper","$v":"لم يثبت خلفيات مغلقه"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Готово"},{"$i":"pick-ringtone","$v":"Избиране на звук за звънене"},{"$i":"pick-wallpaper","$v":"Избиране на тапет"},{"$i":"no-installed-ringtones","$v":"Няма инсталирани заключени звуци за звънене"},{"$i":"no-installed-wallpaper","$v":"Няма инсталиран заключен тапет"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"সম্পন্ন হয়েছে"},{"$i":"pick-ringtone","$v":"রিংটোন নির্বাচন করুন"},{"$i":"pick-wallpaper","$v":"ওয়ালপেপার নির্বাচন করুন"},{"$i":"no-installed-ringtones","$v":"কোনো লকড রিংটোন ইনস্টল হয়নি"},{"$i":"no-installed-wallpaper","$v":"কোন লক করা ওয়ালপেপার নাই"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Fet"},{"$i":"pick-ringtone","$v":"Trieu to de trucada"},{"$i":"pick-wallpaper","$v":"Trieu fons de pantalla"},{"$i":"no-installed-ringtones","$v":"No s'ha instal·lat cap to de trucada protegit"},{"$i":"no-installed-wallpaper","$v":"No s'ha instal·lat cap fons de pantalla protegit"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Hotovo"},{"$i":"pick-ringtone","$v":"Vybrat vyzvánění"},{"$i":"pick-wallpaper","$v":"Vybrat tapetu"},{"$i":"no-installed-ringtones","$v":"Nejsou nainstalována žádná uzamčená vyzvánění"},{"$i":"no-installed-wallpaper","$v":"Nejsou nainstalovány žádné uzamčené tapety"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Færdig"},{"$i":"pick-ringtone","$v":"Vælg ringetone"},{"$i":"pick-wallpaper","$v":"Vælg baggrund"},{"$i":"no-installed-ringtones","$v":"Ingen låst ringetone valgt"},{"$i":"no-installed-wallpaper","$v":"Ingen låst baggrund valgt"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Fertig"},{"$i":"pick-ringtone","$v":"Klingelton auswählen"},{"$i":"pick-wallpaper","$v":"Hintergrundbild auswählen"},{"$i":"no-installed-ringtones","$v":"Keine Klingeltöne installiert"},{"$i":"no-installed-wallpaper","$v":"Keine Hintergrundbilder installiert"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"ΟΚ"},{"$i":"pick-ringtone","$v":"Επιλογή ήχου κλήσης"},{"$i":"pick-wallpaper","$v":"Επιλογή ταπετσαρίας"},{"$i":"no-installed-ringtones","$v":"Χωρίς κλειδωμένους ήχους κλήσης"},{"$i":"no-installed-wallpaper","$v":"Χωρίς κλειδωμένες ταπετσαρίες"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Done"},{"$i":"pick-ringtone","$v":"Select Ringtone"},{"$i":"pick-wallpaper","$v":"Select Wallpaper"},{"$i":"no-installed-ringtones","$v":"No Locked Ringtones Installed"},{"$i":"no-installed-wallpaper","$v":"No Locked Wallpaper Installed"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Hecho"},{"$i":"pick-ringtone","$v":"Seleccionar tono"},{"$i":"pick-wallpaper","$v":"Seleccionar fondo"},{"$i":"no-installed-ringtones","$v":"No hay instalado ningún tono bloqueado"},{"$i":"no-installed-wallpaper","$v":"No hay instalado ningún fondo bloqueado"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Eginda"},{"$i":"pick-ringtone","$v":"Hautatu txirrin-tonua"},{"$i":"pick-wallpaper","$v":"Hautatu horma-papera"},{"$i":"no-installed-ringtones","$v":"Ez dago blokeatutako txirrin-tonurik instalatuta"},{"$i":"no-installed-wallpaper","$v":"Ez dago blokeatutako horma-paperik instalatuta"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Terminé"},{"$i":"pick-ringtone","$v":"Choisir sonnerie"},{"$i":"pick-wallpaper","$v":"Choisir fond d’écran"},{"$i":"no-installed-ringtones","$v":"Aucune sonnerie verrouillée n’est installée"},{"$i":"no-installed-wallpaper","$v":"Aucun fond d’écran verrouillé n’est installé"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Feito"},{"$i":"pick-ringtone","$v":"Seleccionar ton"},{"$i":"pick-wallpaper","$v":"Seleccionar fondo"},{"$i":"no-installed-ringtones","$v":"Ningún ton de chamada protexido instalado"},{"$i":"no-installed-wallpaper","$v":"Ningún fondo protexido instalado"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Gotovo"},{"$i":"pick-ringtone","$v":"Odaberi melodiju zvona"},{"$i":"pick-wallpaper","$v":"Odaberi pozadinsku sliku"},{"$i":"no-installed-ringtones","$v":"Nema instaliranih zaključanih melodija zvona"},{"$i":"no-installed-wallpaper","$v":"Nema instaliranih zaključanih pozadinskih slika"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Kész"},{"$i":"pick-ringtone","$v":"Válasszon csengőhangot"},{"$i":"pick-wallpaper","$v":"Válasszon háttérképet"},{"$i":"no-installed-ringtones","$v":"Nincs telepítve zárolt csengőhang"},{"$i":"no-installed-wallpaper","$v":"Nincs telepítve zárolt háttérkép"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Fine"},{"$i":"pick-ringtone","$v":"Seleziona suoneria"},{"$i":"pick-wallpaper","$v":"Seleziona sfondo"},{"$i":"no-installed-ringtones","$v":"Nessuna suoneria protetta installata"},{"$i":"no-installed-wallpaper","$v":"Nessuno sfondo protetto installato"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"完了"},{"$i":"pick-ringtone","$v":"着信音を選択してください"},{"$i":"pick-wallpaper","$v":"壁紙を選択してください"},{"$i":"no-installed-ringtones","$v":"ロックされた着信音はインストールされていません"},{"$i":"no-installed-wallpaper","$v":"ロックされた壁紙はインストールされていません"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"រួចរាល់"},{"$i":"pick-ringtone","$v":"ជ្រើស​សំឡេង​រោទ៍"},{"$i":"pick-wallpaper","$v":"ជ្រើស​ផ្ទាំង​រូបភាព"},{"$i":"no-installed-ringtones","$v":"គ្មាន​សំឡេងរោទ៍​ជាប់​សោ​បាន​ដំឡើង"},{"$i":"no-installed-wallpaper","$v":"គ្មាន​ផ្ទាំង​រូបភាព​ជាប់សោ​បាន​ដំឡើង"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"완료"},{"$i":"pick-ringtone","$v":"벨소리 선택"},{"$i":"pick-wallpaper","$v":"배경화면 선택"},{"$i":"no-installed-ringtones","$v":"설치된 잠겨있는 벨소리가 없음"},{"$i":"no-installed-wallpaper","$v":"설치된 잠겨있는 배경화면이 없음"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Atlikta"},{"$i":"pick-ringtone","$v":"Pasirinkite skambėjimo garsą"},{"$i":"pick-wallpaper","$v":"Pasirinkite ekrano foną"},{"$i":"no-installed-ringtones","$v":"Nėra įdiegtų užrakintų skambėjimo garsų"},{"$i":"no-installed-wallpaper","$v":"Nėra įdiegtų užrakintų ekrano fonų"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Готово"},{"$i":"pick-ringtone","$v":"Изберете мелодија"},{"$i":"pick-wallpaper","$v":"Изберете тапет"},{"$i":"no-installed-ringtones","$v":"Нема заклучени мелодии"},{"$i":"no-installed-wallpaper","$v":"Нема заклучен тапет"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Selesai"},{"$i":"pick-ringtone","$v":"Pilih Nada Dering"},{"$i":"pick-wallpaper","$v":"Pilih Kertas DInding"},{"$i":"no-installed-ringtones","$v":"Tiada Nada Dering Terkunci Dipasang"},{"$i":"no-installed-wallpaper","$v":"Tiada Kertas Dingding Terkunci Dipasang"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"गरियो"},{"$i":"pick-ringtone","$v":"रिङ्गटोन चयन गर्नुहोस्"},{"$i":"pick-wallpaper","$v":"वालपेपर चयन गर्नुहोस्"},{"$i":"no-installed-ringtones","$v":"ताल्चा लगाइएको रिङ्गटोनहरु स्थापना गरिएको छैन"},{"$i":"no-installed-wallpaper","$v":"ताल्चा लगाइएको वालपेपरहरु स्थापना गरिएको छैन"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Gereed"},{"$i":"pick-ringtone","$v":"Beltoon selecteren"},{"$i":"pick-wallpaper","$v":"Achtergrond selecteren"},{"$i":"no-installed-ringtones","$v":"Geen vergrendelde beltonen geïnstalleerd"},{"$i":"no-installed-wallpaper","$v":"Geen vergrendelde achtergrond geïnstalleerd"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"ਮੁਕੰਮਲ"},{"$i":"pick-ringtone","$v":"ਰਿੰਗਟੋਨ ਚੁਣੋ"},{"$i":"pick-wallpaper","$v":"ਵਾਲਪੇਪਰ ਚੁਣੋ"},{"$i":"no-installed-ringtones","$v":"ਕੋਈ ਲਾਕ ਰਿੰਗਟੋਨ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ।"},{"$i":"no-installed-wallpaper","$v":"ਕੋਈ ਲਾਕ ਵਾਲਪੇਪਰ ਇੰਸਟਾਲ ਨਹੀਂ ਹੈ।"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Gotowe"},{"$i":"pick-ringtone","$v":"Wybierz dzwonek"},{"$i":"pick-wallpaper","$v":"Wybierz tło ekranu"},{"$i":"no-installed-ringtones","$v":"Brak zainstalowanych zablokowanych dzwonków"},{"$i":"no-installed-wallpaper","$v":"Brak zainstalowanych zablokowanych teł ekranu"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Concluído"},{"$i":"pick-ringtone","$v":"Selecione um toque de chamadas"},{"$i":"pick-wallpaper","$v":"Selecione um papel de parede"},{"$i":"no-installed-ringtones","$v":"Nenhum toque de chamada bloqueado instalado"},{"$i":"no-installed-wallpaper","$v":"Nenhum papel de parede bloqueado instalado"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Gata"},{"$i":"pick-ringtone","$v":"Selectează tonul"},{"$i":"pick-wallpaper","$v":"Selectează fundalul"},{"$i":"no-installed-ringtones","$v":"Niciun ton de apel blocat instalat"},{"$i":"no-installed-wallpaper","$v":"Niciun fundal blocat instalat"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Готово"},{"$i":"pick-ringtone","$v":"Выбрать мелодию"},{"$i":"pick-wallpaper","$v":"Выбрать обои"},{"$i":"no-installed-ringtones","$v":"Защищённые от копирования мелодии не установлены"},{"$i":"no-installed-wallpaper","$v":"Защищённые от копирования обои не установлены"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Hotovo"},{"$i":"pick-ringtone","$v":"Zvoľte si zvonenie"},{"$i":"pick-wallpaper","$v":"Zvoľte si tapetu"},{"$i":"no-installed-ringtones","$v":"Nie sú nainštalované žiadne zamknuté zvonenia"},{"$i":"no-installed-wallpaper","$v":"Nie sú nainštalované žiadne zamknuté tapety"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"U bë"},{"$i":"pick-ringtone","$v":"Përzgjidhni Zile"},{"$i":"pick-wallpaper","$v":"Përzgjidhni Sfond"},{"$i":"no-installed-ringtones","$v":"Pa Zile të Kyçura të Instaluara"},{"$i":"no-installed-wallpaper","$v":"Pa Sfonde të Kyçyr të Instaluar"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Готово"},{"$i":"pick-ringtone","$v":"Изабери мелодију"},{"$i":"pick-wallpaper","$v":"Изабери позадинску слику"},{"$i":"no-installed-ringtones","$v":"Нема инсталираних закључаних мелодија"},{"$i":"no-installed-wallpaper","$v":"Нема инсталираних закључаних позадинских слика"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Gotovo"},{"$i":"pick-ringtone","$v":"Izaberi melodiju"},{"$i":"pick-wallpaper","$v":"Izaberi pozadinsku sliku"},{"$i":"no-installed-ringtones","$v":"Nema instaliranih zaključanih melodija"},{"$i":"no-installed-wallpaper","$v":"Nema instaliranih zaključanih pozadinskih slika"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Klar"},{"$i":"pick-ringtone","$v":"Välj ringsignal"},{"$i":"pick-wallpaper","$v":"Välj bakgrundsbild"},{"$i":"no-installed-ringtones","$v":"Inga låsta ringsignaler installerade"},{"$i":"no-installed-wallpaper","$v":"Inga låsta bakgrundsbilder installerade"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"Bitti"},{"$i":"pick-ringtone","$v":"Zil sesi seçin"},{"$i":"pick-wallpaper","$v":"Duvar kâğıdı seçin"},{"$i":"no-installed-ringtones","$v":"Hiç kilitli zil sesi yüklenmemiş"},{"$i":"no-installed-wallpaper","$v":"Hiç kilitli duvar kâğıdı yüklenmemiş"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"完成"},{"$i":"pick-ringtone","$v":"选择铃声"},{"$i":"pick-wallpaper","$v":"选择壁纸"},{"$i":"no-installed-ringtones","$v":"未安装锁定时的铃声"},{"$i":"no-installed-wallpaper","$v":"未安装锁定时的壁纸"}]

View file

@ -0,0 +1 @@
[{"$i":"done","$v":"完成"},{"$i":"pick-ringtone","$v":"選擇鈴聲"},{"$i":"pick-wallpaper","$v":"選擇桌面背景"},{"$i":"no-installed-ringtones","$v":"未安裝已鎖定的鈴聲"},{"$i":"no-installed-wallpaper","$v":"未安裝已鎖定的桌面背景"}]

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,47 @@
<!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">
<title>Locked Content</title>
<!-- Web Components -->
<!-- <script defer="" src="shared/elements/config.js"></script> -->
<!-- <script defer="" src="/shared/js/component_utils.js"></script> -->
<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">
<!-- <script defer="" src="shared/elements/gaia-header/dist/gaia-header.js"></script> -->
<!-- <script defer="" src="/shared/elements/gaia_radio/script.js"></script> -->
<link rel="stylesheet" href="style/pick.css" type="text/css">
<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/pick.{locale}.json">
<!-- <script type="text/javascript" src="shared/js/l10n.js"></script> --><script src="./gaia_build_pick.js" type="text/javascript"></script>
<!-- <script defer="" src="shared/js/omadrm/fl.js"></script> -->
<!-- <script defer="" src="js/constants.js"></script> -->
<!-- <script defer="" src="js/utils.js"></script> -->
<!-- <script defer="" src="js/db.js"></script> -->
<!-- <script defer="" src="js/pick.js"></script> --><script src="./gaia_build_defer_pick.js" defer="" type="text/javascript"></script>
<meta content="2.5" name="appVersion"></head>
<body class="theme-media">
<section role="region">
<gaia-header ignore-dir="" id="header" action="close">
<h1 id="title"></h1>
<button id="done" data-l10n-id="done" hidden="">Done</button>
</gaia-header>
</section>
<ul id="ringtones" hidden="">
</ul>
<div id="wallpapers" hidden="">
<template id="wallpaper-template">
<!-- Set style.backgroundImage when instantiating -->
<div class="wallpaper"></div>
</template>
</div>
</body>
</html>

View file

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

View file

@ -0,0 +1,373 @@
;(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.GaiaHeader=f()}})(function(){var define,module,exports;return(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){;(function(define){define(function(require,exports,module){'use strict';var debug=0?console.log.bind(console):function(){};var cache={};var MIN=16;var MAX=24;var BUFFER=3;module.exports=function(config){debug('font fit',config);var space=config.space-BUFFER;var min=config.min||MIN;var max=config.max||MAX;var text=trim(config.text);var fontSize=max;var textWidth;var font;do{font=config.font.replace(/\d+px/,fontSize+'px');textWidth=getTextWidth(text,font);}while(textWidth>space&&fontSize!==min&&fontSize--);return{textWidth:textWidth,fontSize:fontSize,overflowing:textWidth>space};};function getTextWidth(text,font){var ctx=getCanvasContext(font);var width=ctx.measureText(text).width;debug('got text width',width);return width;}
function getCanvasContext(font){debug('get canvas context',font);var cached=cache[font];if(cached){return cached;}
var canvas=document.createElement('canvas');canvas.setAttribute('moz-opaque','true');canvas.setAttribute('width','1px');canvas.setAttribute('height','1px');debug('created canvas',canvas);var ctx=canvas.getContext('2d',{willReadFrequently:true});ctx.font=font;return cache[font]=ctx;}
function trim(text){return text.replace(/\s+/g,' ').trim();}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('font-fit',this));},{}],2:[function(require,module,exports){;(function(define){'use strict';define(function(require,exports,module){var textContent=Object.getOwnPropertyDescriptor(Node.prototype,'textContent');var innerHTML=Object.getOwnPropertyDescriptor(Element.prototype,'innerHTML');var removeAttribute=Element.prototype.removeAttribute;var setAttribute=Element.prototype.setAttribute;var noop=function(){};exports.register=function(name,props){var baseProto=getBaseProto(props.extends);var template=props.template||baseProto.templateString;var extensible=props.extensible=props.hasOwnProperty('extensible')?props.extensible:true;delete props.extends;if(template){if(extensible&&props.template){props.templateString=props.template;}
var output=processCss(template,name);props.template=document.createElement('template');props.template.innerHTML=output.template;props.lightCss=output.lightCss;props.globalCss=props.globalCss||'';props.globalCss+=output.globalCss;}
injectGlobalCss(props.globalCss);delete props.globalCss;var descriptors=mixin(props.attrs||{},base.descriptors);props._attrs=props.attrs;delete props.attrs;var proto=createProto(baseProto,props);Object.defineProperties(proto,descriptors);try{return document.registerElement(name,{prototype:proto});}catch(e){if(e.name!=='NotSupportedError'){throw e;}}};var base={properties:{GaiaComponent:true,attributeChanged:noop,attached:noop,detached:noop,created:noop,createdCallback:function(){if(this.dirObserver){addDirObserver();}
injectLightCss(this);this.created();},attributeChangedCallback:function(name,from,to){var prop=toCamelCase(name);if(this._attrs&&this._attrs[prop]){this[prop]=to;}
this.attributeChanged(name,from,to);},attachedCallback:function(){if(this.dirObserver){this.setInnerDirAttributes=setInnerDirAttributes.bind(null,this);document.addEventListener('dirchanged',this.setInnerDirAttributes);}
this.attached();},detachedCallback:function(){if(this.dirObserver){document.removeEventListener('dirchanged',this.setInnerDirAttributes);}
this.detached();},setupShadowRoot:function(){if(!this.template){return;}
var node=document.importNode(this.template.content,true);this.createShadowRoot().appendChild(node);if(this.dirObserver){setInnerDirAttributes(this);}
return this.shadowRoot;},setAttr:function(name,value){var internal=this.shadowRoot.firstElementChild;setAttribute.call(internal,name,value);setAttribute.call(this,name,value);},removeAttr:function(name){var internal=this.shadowRoot.firstElementChild;removeAttribute.call(internal,name);removeAttribute.call(this,name);}},descriptors:{textContent:{set:function(value){textContent.set.call(this,value);if(this.lightStyle){this.appendChild(this.lightStyle);}},get:function(){return textContent.get();}},innerHTML:{set:function(value){innerHTML.set.call(this,value);if(this.lightStyle){this.appendChild(this.lightStyle);}},get:innerHTML.get}}};var defaultPrototype=createProto(HTMLElement.prototype,base.properties);function getBaseProto(proto){if(!proto){return defaultPrototype;}
proto=proto.prototype||proto;return!proto.GaiaComponent?createProto(proto,base.properties):proto;}
function createProto(proto,props){return mixin(Object.create(proto),props);}
var hasShadowCSS=(function(){var div=document.createElement('div');try{div.querySelector(':host');div.querySelector('::content');return true;}
catch(e){return false;}})();var regex={shadowCss:/(?:\:host|\:\:content)[^{]*\{[^}]*\}/g,':host':/(?:\:host)/g,':host()':/\:host\((.+)\)(?: \:\:content)?/g,':host-context':/\:host-context\((.+)\)([^{,]+)?/g,'::content':/(?:\:\:content)/g};function processCss(template,name){var globalCss='';var lightCss='';if(!hasShadowCSS){template=template.replace(regex.shadowCss,function(match){var hostContext=regex[':host-context'].exec(match);if(hostContext){globalCss+=match.replace(regex['::content'],'').replace(regex[':host-context'],'$1 '+name+'$2').replace(/ +/g,' ');}else{lightCss+=match.replace(regex[':host()'],name+'$1').replace(regex[':host'],name).replace(regex['::content'],name);}
return'';});}
return{template:template,lightCss:lightCss,globalCss:globalCss};}
function injectGlobalCss(css){if(!css){return;}
var style=document.createElement('style');style.innerHTML=css.trim();headReady().then(function(){document.head.appendChild(style);});}
function headReady(){return new Promise(function(resolve){if(document.head){return resolve();}
window.addEventListener('load',function fn(){window.removeEventListener('load',fn);resolve();});});}
function injectLightCss(el){if(hasShadowCSS){return;}
var stylesheet=el.querySelector('style');if(!stylesheet){stylesheet=document.createElement('style');stylesheet.setAttribute('scoped','');stylesheet.appendChild(document.createTextNode(el.lightCss));el.appendChild(stylesheet);}
el.lightStyle=stylesheet;}
function toCamelCase(string){return string.replace(/-(.)/g,function replacer(string,p1){return p1.toUpperCase();});}
var dirObserver;function setInnerDirAttributes(component){var dir=component.dir||document.dir;Array.from(component.shadowRoot.children).forEach(element=>{if(element.nodeName!=='STYLE'){element.dir=dir;}});}
function addDirObserver(){if(dirObserver){return;}
dirObserver=new MutationObserver(onChanged);dirObserver.observe(document.documentElement,{attributeFilter:['dir'],attributes:true});function onChanged(mutations){document.dispatchEvent(new Event('dirchanged'));}}
function mixin(target,source){for(var key in source){target[key]=source[key];}
return target;}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('gaia-component',this));},{}],3:[function(require,module,exports){(function(define){'use strict';define(function(require,exports,module){var base=window.GAIA_ICONS_BASE_URL||window.COMPONENTS_BASE_URL||'bower_components/';if(!document.documentElement){window.addEventListener('load',load);}else{load();}
function load(){if(isLoaded()){return;}
var link=document.createElement('link');link.rel='stylesheet';link.type='text/css';link.href=base+'gaia-icons/gaia-icons.css';document.head.appendChild(link);exports.loaded=true;}
function isLoaded(){return exports.loaded||document.querySelector('link[href*=gaia-icons]')||document.documentElement.classList.contains('gaia-icons-loaded');}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('gaia-icons',this));},{}],4:[function(require,module,exports){;(function(define){'use strict';define(function(require,exports,module){var component=require('gaia-component');var fontFit=require('font-fit');require('gaia-icons');var debug=0?console.log.bind(console):function(){};const KNOWN_ACTIONS={menu:'menu',back:'back',close:'close'};const TITLE_FONT='italic 300 24px FiraSans';const TITLE_PADDING=10;const MINIMUM_FONT_SIZE_CENTERED=20;const MINIMUM_FONT_SIZE_UNCENTERED=16;const MAXIMUM_FONT_SIZE=23;module.exports=component.register('gaia-header',{extensible:false,dirObserver:true,created:function(){debug('created');this.setupShadowRoot();this.els={actionButton:this.shadowRoot.querySelector('.action-button'),titles:this.getElementsByTagName('h1')};this.els.actionButton.addEventListener('click',e=>this.onActionButtonClick(e));this.observer=new MutationObserver(this.onMutation.bind(this));this.ignoreDir=this.hasAttribute('ignore-dir');this.titleEnd=this.getAttribute('title-end');this.titleStart=this.getAttribute('title-start');this.noFontFit=this.getAttribute('no-font-fit');this.notFlush=this.hasAttribute('not-flush');this.action=this.getAttribute('action');this.unresolved={};this.pending={};this._resizeThrottlingId=null;this.onResize=this.onResize.bind(this);},attached:function(){debug('attached');this.runFontFitSoon();this.observerStart();window.addEventListener('resize',this.onResize);},detached:function(){debug('detached');window.removeEventListener('resize',this.onResize);this.observerStop();this.clearPending();},clearPending:function(){for(var key in this.pending){this.pending[key].clear();delete this.pending[key];}
window.cancelAnimationFrame(this._resizeThrottlingId);this._resizeThrottlingId=null;},runFontFit:function(){debug('run font-fit');if(this.noFontFit){return Promise.resolve();}
var titles=this.els.titles;var space=this.getTitleSpace();var styles=[].map.call(titles,el=>this.getTitleStyle(el,space));return this.setTitleStylesSoon(styles);},runFontFitSoon:function(){debug('run font-fit soon');if(this.pending.runFontFitSoon){return;}
this.pending.runFontFitSoon=this.nextTick(()=>{delete this.pending.runFontFitSoon;this.runFontFit();});},getTitleStyle:function(el,space){debug('get el style',el,space);var text=el.textContent;var styleId=space.start+text+space.end+'#'+space.value;if(!text||!text.trim()){return debug('exit: no text');}
if(getStyleId(el)===styleId){return debug('exit: no change');}
var marginStart=this.getTitleMarginStart();var textSpace=space.value-Math.abs(marginStart);var fontFitResult=this.fontFit(text,textSpace,{min:MINIMUM_FONT_SIZE_CENTERED});var overflowing=fontFitResult.overflowing;var padding={start:0,end:0};if(overflowing){debug('title overflowing');padding.start=!space.start?TITLE_PADDING:0;padding.end=!space.end?TITLE_PADDING:0;textSpace=space.value-padding.start-padding.end;fontFitResult=this.fontFit(text,textSpace);marginStart=0;}
return{id:styleId,fontSize:fontFitResult.fontSize,marginStart:marginStart,overflowing:overflowing,padding:padding};},setTitleStylesSoon:function(styles){debug('set title styles soon',styles);var key='setStyleTitlesSoon';this._titleStyles=styles;if(this.unresolved[key]){return this.unresolved[key];}
this.unresolved[key]=new Promise((resolve)=>{this.pending[key]=this.nextTick(()=>{var styles=this._titleStyles;var els=this.els.titles;[].forEach.call(els,(el,i)=>{if(!styles[i]){return debug('exit');}
this.setTitleStyle(el,styles[i]);});delete this._titleStyles;delete this.unresolved[key];delete this.pending[key];resolve();});});},setTitleStyle:function(el,style){debug('set title style',style);this.observerStop();if(this.ignoreDir){el.style.marginLeft=style.marginStart+'px';el.style.paddingLeft=style.padding.start+'px';el.style.paddingRight=style.padding.end+'px';}else{el.style.marginInlineStart=style.marginStart+'px';el.style.paddingInlineStart=style.padding.start+'px';el.style.paddingInlineEnd=style.padding.end+'px';}
el.style.fontSize=style.fontSize+'px';setStyleId(el,style.id);this.observerStart();},fontFit:function(text,space,opts={}){debug('font fit:',text,space,opts);var fontFitArgs={font:TITLE_FONT,min:opts.min||MINIMUM_FONT_SIZE_UNCENTERED,max:MAXIMUM_FONT_SIZE,text:text,space:space};return fontFit(fontFitArgs);},observerStart:function(){if(this.observing){return;}
this.observer.observe(this,{childList:true,attributes:true,subtree:true});this.observing=true;debug('observer started');},observerStop:function(){if(!this.observing){return;}
this.observer.disconnect();this.observing=false;debug('observer stopped');},onResize:function(e){debug('onResize',this._resizeThrottlingId);if(this._resizeThrottlingId!==null){return;}
this._resizeThrottlingId=window.requestAnimationFrame(()=>{this._resizeThrottlingId=null;this.runFontFitSoon();});},onMutation:function(mutations){debug('on mutation',mutations);if(!this.pending.runFontFitSoon){this.runFontFit();}},getTitleSpace:function(){var start=this.titleStart;var end=this.titleEnd;var space=this.getWidth()-start-end;var result={value:space,start:start,end:end};debug('get title space',result);return result;},getWidth:function(){var value=this.notFlush?this.clientWidth:window.innerWidth;debug('get width',value);return value;},triggerAction:function(){if(this.action){this.els.actionButton.click();}},onActionButtonClick:function(){debug('action button click');var config={detail:{type:this.action}};var e=new CustomEvent('action',config);setTimeout(()=>this.dispatchEvent(e));},getTitleMarginStart:function(){var start=this.titleStart;var end=this.titleEnd;var marginStart=end-start;debug('get title margin start',marginStart);return marginStart;},getButtonsBeforeTitle:function(){var children=this.children;var l=children.length;var els=[];for(var i=0;i<l;i++){var el=children[i];if(el.tagName==='H1'){break;}
if(!contributesToLayout(el)){continue;}
els.push(el);}
if(this.action){els.push(this.els.actionButton);}
return els;},getButtonsAfterTitle:function(){var children=this.children;var els=[];for(var i=children.length-1;i>=0;i--){var el=children[i];if(el.tagName==='H1'){break;}
if(!contributesToLayout(el)){continue;}
els.push(el);}
return els;},sumButtonWidths:function(buttons){var defaultWidth=50;var sum=buttons.reduce((prev,button)=>{var isStandardButton=button===this.els.actionButton;var width=isStandardButton?defaultWidth:button.clientWidth;return prev+width;},0);debug('sum button widths',buttons,sum);return sum;},attrs:{action:{get:function(){return this._action;},set:function(value){var action=KNOWN_ACTIONS[value];if(action===this._action){return;}
this.setAttr('action',action);this._action=action;}},titleStart:{get:function(){debug('get title-start');if('_titleStart'in this){return this._titleStart;}
var buttons=this.getButtonsBeforeTitle();var value=this.sumButtonWidths(buttons);debug('get title-start',buttons,value);return value;},set:function(value){debug('set title-start',value);value=parseInt(value,10);if(value===this._titleStart||isNaN(value)){return;}
this.setAttr('title-start',value);this._titleStart=value;debug('set');}},titleEnd:{get:function(){debug('get title-end');if('_titleEnd'in this){return this._titleEnd;}
var buttons=this.getButtonsAfterTitle();return this.sumButtonWidths(buttons);},set:function(value){debug('set title-end',value);value=parseInt(value,10);if(value===this._titleEnd||isNaN(value)){return;}
this.setAttr('title-end',value);this._titleEnd=value;}},noFontFit:{get:function(){return this._noFontFit||false;},set:function(value){debug('set no-font-fit',value);value=!!(value||value==='');if(value===this.noFontFit){return;}
this._noFontFit=value;if(value){this.setAttr('no-font-fit','');}
else{this.removeAttr('no-font-fit');}}},ignoreDir:{get:function(){return this._ignoreDir||false;},set:function(value){debug('set ignore-dir',value);value=!!(value||value==='');if(value===this.ignoreDir){return;}
this._ignoreDir=value;this.dirObserver=!value;if(value){this.setAttr('ignore-dir','');}
else{this.removeAttr('ignore-dir');}}}},template:`<div class="inner">
<button class="action-button">
<content select="[l10n-action]"></content>
</button>
<content></content>
</div>
<style>
:host {
display: block;
-moz-user-select: none;
--gaia-header-button-color:
var(--header-button-color,
var(--header-color,
var(--link-color,
inherit)));
}
/**
* [hidden]
*/
:host[hidden] {
display: none;
}
/** Reset
---------------------------------------------------------*/
::-moz-focus-inner { border: 0; }
/** Inner
---------------------------------------------------------*/
.inner {
display: flex;
min-height: 50px;
-moz-user-select: none;
background:
var(--header-background,
var(--background,
#fff));
}
/** Action Button
---------------------------------------------------------*/
/**
* 1. Hidden by default
*/
.action-button {
position: relative;
display: none; /* 1 */
width: 50px;
font-size: 30px;
margin: 0;
padding: 0;
border: 0;
outline: 0;
align-items: center;
background: none;
cursor: pointer;
transition: opacity 200ms 280ms;
color:
var(--header-action-button-color,
var(--header-icon-color,
var(--gaia-header-button-color)));
}
/**
* [action=back]
* [action=menu]
* [action=close]
*
* 1. For icon vertical-alignment
*/
[action=back] .action-button,
[action=menu] .action-button,
[action=close] .action-button {
display: flex; /* 1 */
}
/**
* :active
*/
.action-button:active {
transition: none;
opacity: 0.2;
}
/** Action Button Icon
---------------------------------------------------------*/
.action-button:before {
font-family: 'gaia-icons';
font-style: normal;
text-rendering: optimizeLegibility;
font-weight: 500;
}
[action=close] .action-button:before { content: 'close' }
[action=menu] .action-button:before { content: 'menu' }
[action=back]:-moz-dir(ltr) .action-button:before { content: 'left' }
[action=back]:-moz-dir(rtl) .action-button:before { content: 'right' }
/** Action Button Icon
---------------------------------------------------------*/
/**
* 1. To enable vertical alignment.
*/
.action-button:before {
display: block;
}
/** Action Button Text
---------------------------------------------------------*/
/**
* To provide custom localized content for
* the action-button, we allow the user
* to provide an element with the class
* .l10n-action. This node is then
* pulled inside the real action-button.
*
* Example:
*
* <gaia-header action="back">
* <span l10n-action aria-label="Back">Localized text</span>
* <h1>title</h1>
* </gaia-header>
*/
::content [l10n-action] {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
font-size: 0;
}
/** Title
---------------------------------------------------------*/
/**
* 1. Vertically center text. We can't use flexbox
* here as it breaks text-overflow ellipsis
* without an inner div.
*/
::content h1 {
flex: 1;
margin: 0;
padding: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-align: center;
line-height: 50px; /* 1 */
font-weight: 300;
font-style: italic;
font-size: 24px;
color:
var(--header-title-color,
var(--header-color,
var(--title-color,
var(--text-color,
inherit))));
}
/**
* [ignore-dir]
*
* When the <gaia-header> component has an [ignore-dir] attribute, header
* direction is forced to LTR but we still want the <h1> text to be reversed
* so that strings like '1 selected' become 'selected 1'.
*
* When we're happy for <gaia-header> to be fully RTL responsive we won't need
* these rules anymore, but this depends on all Gaia apps being ready.
*
* This should be safe to remove when bug 1179459 lands.
*/
:host[ignore-dir] {
direction: ltr;
}
:host[ignore-dir]:-moz-dir(rtl) h1 {
direction: rtl;
}
/** Buttons
---------------------------------------------------------*/
::content a,
::content button {
position: relative;
z-index: 1;
box-sizing: border-box;
display: flex;
width: auto;
height: auto;
min-width: 50px;
margin: 0;
padding: 0 10px;
outline: 0;
border: 0;
font-size: 14px;
line-height: 1;
align-items: center;
justify-content: center;
text-decoration: none;
text-align: center;
background: none;
border-radius: 0;
font-style: italic;
cursor: pointer;
transition: opacity 200ms 280ms;
color: var(--gaia-header-button-color);
}
/**
* :active
*/
::content a:active,
::content button:active {
transition: none;
opacity: 0.2;
}
/**
* [hidden]
*/
::content a[hidden],
::content button[hidden] {
display: none;
}
/**
* [disabled]
*/
::content a[disabled],
::content button[disabled] {
pointer-events: none;
color: var(--header-disabled-button-color);
}
/** Icon Buttons
---------------------------------------------------------*/
/**
* Icons are a different color to text
*/
::content .icon,
::content [data-icon] {
color:
var(--header-icon-color,
var(--gaia-header-button-color));
}
/**
* If users want their action button
* to be in the component's light-dom
* they can add an .action class
* to make it look like the
* shadow action button.
*/
::content .action {
color:
var(--header-action-button-color,
var(--header-icon-color,
var(--gaia-header-button-color)));
}
/**
* [data-icon]:empty
*
* Icon buttons with no textContent,
* should always be 50px.
*
* This is to prevent buttons being
* larger than they should be before
* icon-font has loaded.
*/
::content [data-icon]:empty {
width: 50px;
}
</style>`,nextTick:nextTick});function contributesToLayout(el){return el.localName!=='style'&&!el.hasAttribute('l10n-action');}
function setStyleId(el,id){el._styleId=id;}
function getStyleId(el){return el._styleId;}
function nextTick(fn){var cleared;Promise.resolve().then(()=>{if(!cleared){fn();}});return{clear:function(){cleared=true;}};}});})(typeof define=='function'&&define.amd?define:(function(n,w){'use strict';return typeof module=='object'?function(c){c(require,exports,module);}:function(c){var m={exports:{}};c(function(n){return w[n];},m.exports,m);w[n]=m.exports;};})('gaia-header',this));},{"font-fit":1,"gaia-component":2,"gaia-icons":3}]},{},[4])(4)});

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: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 575 B

View file

@ -0,0 +1,9 @@
;'use strict';window.GaiaRadio=(function(win){var proto=Object.create(HTMLElement.prototype);var baseurl=window.GaiaRadioBaseurl||'/shared/elements/gaia_radio/';proto.createdCallback=function(){var shadow=this.createShadowRoot();this._template=template.content.cloneNode(true);this._wrapper=this._template.getElementById('radio');this._wrapper.addEventListener('click',this.handleClick.bind(this));if(this.dataset.role){this._wrapper.setAttribute('role',this.dataset.role);}
if(!this.hasAttribute('role')){this.setAttribute('role','presentation');}
this.configureClass();shadow.appendChild(this._template);this.checked=this.hasAttribute('checked');this._wrapper.setAttribute('aria-checked',this.checked);setTimeout(function nextTick(){var label=this.querySelector('label, p');if(!label){return;}
label.addEventListener('click',this.handleClick.bind(this));}.bind(this));ComponentUtils.style.call(this,baseurl);var dirObserver=new MutationObserver(this.updateInternalDir.bind(this));dirObserver.observe(document.documentElement,{attributeFilter:['dir'],attributes:true});this.updateInternalDir();};proto.updateInternalDir=function(){var internal=this.shadowRoot.firstElementChild;if(document.documentElement.dir==='rtl'){internal.setAttribute('dir','rtl');}else{internal.removeAttribute('dir');}};proto.handleClick=function(e){e.stopImmediatePropagation();var event=new MouseEvent('click',{view:window,bubbles:true,cancelable:true});this.dispatchEvent(event);if(this.checked){return;}
if(!event.defaultPrevented){this.checked=!this.checked;}
this.dispatchEvent(new CustomEvent('change',{bubbles:true,cancelable:false}));};proto.configureClass=function(){this._wrapper.className=this.className;this._wrapper.classList.toggle('checked',this._checked);};proto.hideDetails=function(){this.shadowRoot.querySelector('.details').style.display='none';};proto.attributeChangedCallback=function(name,from,to){if(name==='class'){this._wrapper.className=to;}};Object.defineProperty(proto,'checked',{get:function(){return this._checked;},set:function(value){if(!this._template){return;}
if(value){var relevant=document.querySelectorAll('gaia-radio[name="'+this.getAttribute('name')+'"]');for(var i=0,iLen=relevant.length;i<iLen;i++){relevant[i].checked=false;}
this.setAttribute('checked',true);}else{this.removeAttribute('checked');}
this._wrapper.classList.toggle('checked',value);this._wrapper.setAttribute('aria-checked',value);this._checked=value;}});Object.defineProperty(proto,'name',{get:function(){return this.getAttribute('name');},set:function(value){this.setAttribute('name',value);}});Object.defineProperty(proto,'value',{get:function(){return this.getAttribute('value');},set:function(value){this.setAttribute('value',value);}});Object.defineProperty(proto,'type',{get:function(){return'gaia-radio';}});var template=document.createElement('template');template.innerHTML='<span role="radio" id="radio">'+'<span><content select="p,label"></content></span>'+'<div class="details"><content select="details"></content></div>'+'<div class="divider"></div>'+'</span>';return document.registerElement('gaia-radio',{prototype:proto});})(window);

View file

@ -0,0 +1,107 @@
gaia-radio {
display: inline-block;
width: 100%;
}
#radio {
display: inline-block;
vertical-align: middle;
width: 100%;
position: relative;
background: none;
}
gaia-radio.inline,
#radio.inline {
width: 5rem;
height: 100%;
}
#radio span {
font-size: 1.9rem;
color: var(--label-color);
padding: 1rem 0;
padding-inline-end: 2.4rem;
line-height: 3rem;
box-sizing: border-box;
display: block;
/* Override inheriting nowrap from legacy lists building blocks. */
white-space: normal;
word-wrap: break-word;
}
/* Users may choose to truncate text instead of it wrapping by adding the "truncate" className */
#radio.truncate span {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
#radio span:after {
content: '';
position: absolute;
offset-inline-end: 0;
top: 50%;
margin: -1.1rem 0 0;
margin-inline-start: -1.1rem;
width: 2.2rem;
height: 2.2rem;
background: url(images/default.png) no-repeat center top / 2.2rem auto;
}
#radio.checked span:after {
background-position: center bottom;
}
/* 'Dangerous' radio */
#radio.danger span:after {
background-image: url(images/danger.png);
}
/* 'checkone' radio */
#radio.checkone span:after {
background: none;
}
#radio.checkone.checked span:after {
background: url(images/checked.png) no-repeat right center / 100%;
}
#radio.checkone.checked span {
font-weight: 500;
}
/* 'split' radio label */
#radio.split .divider {
content: '';
position: absolute;
background-color: #E6E6E3;
offset-inline-end: 3.5rem;
width: 0.1rem;
height: calc(100% - 1rem);
top: 0.5rem;
}
gaia-radio.split label {
display: block;
width: 100%;
}
/******************************************************************************
* A <details> slot may be specified in addition the the <label>.
* When provided, it appears under the <label> and can provide additional context.
*/
#radio div.details {
position: relative;
top: -1.5rem;
display: block;
margin: 0;
padding-top: 0.5rem;
-moz-padding-start: 0;
-moz-padding-end: 8rem;
font-size: 1.4rem;
line-height: 1.6rem;
color: #505859;
font-style: normal;
white-space: normal;
}

View file

@ -0,0 +1,2 @@
;(function(exports){'use strict';exports.ComponentUtils={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';style.addEventListener('load',function(){if(self.shadowRoot){self.shadowRoot.appendChild(style.cloneNode(true));}
self.style.visibility='';});}};}(window));

View file

@ -0,0 +1,3 @@
;'use strict';function getStorageIfAvailable(kind,size,success,error){var storage=navigator.getDeviceStorage(kind);storage.available().onsuccess=function(e){if(e.target.result!=='available'){if(error){error(e.target.result);}}
else{storage.freeSpace().onsuccess=function(e){if(e.target.result<size){if(error){error(e.target.result);}}
else{success(storage);}};}};}

View file

@ -0,0 +1,3 @@
;'use strict';function getUnusedFilename(storage,name,callback){var getreq=storage.get(name);getreq.onerror=function(){callback(name);};getreq.onsuccess=function(){var version=0;var p=name.lastIndexOf('/');var dir=name.substring(0,p+1);var file=name.substring(p+1);p=file.lastIndexOf('.');if(p===-1){p=file.length;}
var ext=file.substring(p);var base=file.substring(0,p);var parts=base.match(/^(.*)_(\d{1,2})$/);if(parts){base=parts[1];version=parseInt(parts[2]);}
var newname=dir+base+'_'+(version+1)+ext;getUnusedFilename(storage,newname,callback);};}

Some files were not shown because too many files have changed in this diff Show more