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,26 @@
;;'use strict';(function(exports){var datastore;var DATASTORE_NAME='bookmarks_store';var readyState;var listeners=Object.create(null);function init(){return new Promise(function doInit(resolve,reject){if(readyState==='initialized'){resolve();return;}
if(readyState==='initializing'){document.addEventListener('ds-initialized',function oninitalized(){document.removeEventListener('ds-initialized',oninitalized);resolve();});return;}
readyState='initializing';if(!navigator.getDataStores){console.error('Bookmark store: DataStore API is not working');reject({name:'NO_DATASTORE'});readyState='failed';return;}
navigator.getDataStores(DATASTORE_NAME).then(function(ds){if(ds.length<1){console.error('Bookmark store: Cannot get access to the Store');reject({name:'NO_ACCESS_TO_DATASTORE'});readyState='failed';return;}
datastore=ds[0];datastore.addEventListener('change',onchangeHandler);readyState='initialized';document.dispatchEvent(new CustomEvent('ds-initialized'));resolve();},reject);});}
function doGetAll(resolve,reject){var result=Object.create(null);var cursor=datastore.sync();function cursorResolve(task){switch(task.operation){case'update':case'add':result[task.data.id]=task.data;break;case'remove':delete result[task.data.id];break;case'clear':result=Object.create(null);break;case'done':resolve(result);return;}
cursor.next().then(cursorResolve,reject);}
cursor.next().then(cursorResolve,reject);}
function get(id){return new Promise(function doGet(resolve,reject){init().then(function onInitialized(){datastore.get(id).then(resolve,reject);},reject);});}
function getAll(){return new Promise(function doGet(resolve,reject){init().then(doGetAll.bind(null,resolve,reject),reject);});}
function onchangeHandler(event){var operation=event.operation;var callbacks=listeners[operation];callbacks&&callbacks.forEach(function iterCallback(callback){datastore.get(event.id).then(function got(result){callback.method.call(callback.context||this,{type:operation,target:result||event});});});}
function addEventListener(type,callback){var context;if(!(type in listeners)){listeners[type]=[];}
var cb=callback;if(typeof cb==='object'){context=cb;cb=cb.handleEvent;}
if(cb){listeners[type].push({method:cb,context:context});init();}}
function removeEventListener(type,callback){if(!(type in listeners)){return false;}
var callbacks=listeners[type];var length=callbacks.length;for(var i=0;i<length;i++){var thisCallback=callback;if(typeof thisCallback==='object'){thisCallback=callback.handleEvent;}
if(callbacks[i]&&callbacks[i].method===thisCallback){callbacks.splice(i,1);return true;}}
return false;}
function add(data){return new Promise(function doAdd(resolve,reject){init().then(function onInitialized(){var id=data.url;Object.defineProperty(data,'id',{enumerable:true,configurable:false,writable:false,value:id});datastore.add(data,id).then(function add_success(){resolve(true);},function add_error(){datastore.put(data,id).then(function put_success(){resolve();},reject);});},reject);});}
function getRevisionId(){return new Promise(function doGet(resolve,reject){init().then(function onInitialized(){resolve(datastore.revisionId);},reject);});}
function put(data){return new Promise(function doAdd(resolve,reject){init().then(function onInitialized(){datastore.put(data,data.id).then(function success(){resolve();},reject);},reject);});}
function remove(id){return new Promise(function doRemove(resolve,reject){init().then(function onInitialized(){datastore.remove(id).then(resolve,reject);},reject);});}
function clear(){return new Promise(function doClear(resolve,reject){init().then(function onInitialized(){datastore.clear().then(resolve,reject);},reject);});}
exports.BookmarksDatabase={get:get,getAll:getAll,getRevisionId:getRevisionId,addEventListener:addEventListener,removeEventListener:removeEventListener,add:add,put:put,remove:remove,clear:clear};}(window));;'use strict';var BookmarkRemover={init:function bookmarkRemover_init(data){var id=data.id;BookmarksDatabase.get(id).then(function got(bookmark){if(!bookmark){data.oncancelled('bookmark does not exist');return;}
var ttl=document.getElementById('title');var msg=document.getElementById('message');ttl.setAttribute('data-l10n-id','remove-title');ttl.setAttribute('data-l10n-args',JSON.stringify({name:bookmark.name}));msg.setAttribute('data-l10n-id','remove-message');msg.setAttribute('data-l10n-args',JSON.stringify({name:bookmark.name}));document.getElementById('cancel-action').addEventListener('click',function onCancel(){data.oncancelled('cancelled');});document.getElementById('remove-action').addEventListener('click',function onConfirm(evt){evt.target.removeEventListener('click',onConfirm);BookmarksDatabase.remove(id).then(data.onremoved,data.oncancelled);});},data.oncancelled);}};;;'use strict';var ActivityHandler={'save-bookmark':function ah_save(activity){BookmarkEditor.init({data:activity.source.data,onsaved:function onsaved(saved){window.addEventListener('status-hidden',function hidden(){window.removeEventListener('status-hidden',hidden);activity.postResult(saved?'saved':'updated');});var msg=saved?'added-to-home-screen-message':'updated-pinned-site';navigator.mozL10n.formatValue(msg).then(msg=>utils.status.show(msg));},oncancelled:function oncancelled(){activity.postError('cancelled');}});},'remove-bookmark':function ah_remove(activity){BookmarkRemover.init({id:activity.source.data.url,onremoved:function onremoved(){activity.postResult('removed');},oncancelled:function oncancelled(e){activity.postError(e);}});}};navigator.mozSetMessageHandler('activity',function onActivity(activity){var name=activity.source.name;switch(name){case'save-bookmark':case'remove-bookmark':if(activity.source.data.type==='url'){ActivityHandler[name](activity);}else{activity.postError('type not supported');}
break;default:activity.postError('name not supported');}});

View file

@ -0,0 +1,471 @@
;'use strict';var rscheme=/^(?:[a-z\u00a1-\uffff0-9-+]+)(?::(?:\/\/)?)/i;var UrlHelper={a:null,getUrlFromInput:function urlHelper_getUrlFromInput(input){this.a=this.a||document.createElement('a');this.a.href=input;return this.a.href;},_getScheme:function(input){return(rscheme.exec(input)||[])[0];},hasScheme:function(input){return!!this._getScheme(input);},isURL:function urlHelper_isURL(input){return!UrlHelper.isNotURL(input);},isNotURL:function urlHelper_isNotURL(input){var case1Reg=/^(\?)|(\?.+\s)/;var case2Reg=/[\?\.\s\:]/;var case3Reg=/^(data|view-source)\:/;var str=input.trim();if(case1Reg.test(str)||!case2Reg.test(str)||this._getScheme(str)===str){return true;}
if(case3Reg.test(str)){return false;}
if(!this.hasScheme(str)){str='http://'+str;}
if(!this.urlValidate){this.urlValidate=document.createElement('input');this.urlValidate.setAttribute('type','url');}
this.urlValidate.setAttribute('value',str);return!this.urlValidate.validity.valid;},resolveUrl:function urlHelper_resolveURL(url,baseUrl){if(!url){return null;}
try{return new URL(url,baseUrl).href;}catch(e){return null;}},getHostname:function urlHelper_getHostname(url){try{return new URL(url).hostname;}catch(e){return null;}}};;'use strict';(function(exports){var datastore;var DATASTORE_NAME='bookmarks_store';var readyState;var listeners=Object.create(null);function init(){return new Promise(function doInit(resolve,reject){if(readyState==='initialized'){resolve();return;}
if(readyState==='initializing'){document.addEventListener('ds-initialized',function oninitalized(){document.removeEventListener('ds-initialized',oninitalized);resolve();});return;}
readyState='initializing';if(!navigator.getDataStores){console.error('Bookmark store: DataStore API is not working');reject({name:'NO_DATASTORE'});readyState='failed';return;}
navigator.getDataStores(DATASTORE_NAME).then(function(ds){if(ds.length<1){console.error('Bookmark store: Cannot get access to the Store');reject({name:'NO_ACCESS_TO_DATASTORE'});readyState='failed';return;}
datastore=ds[0];datastore.addEventListener('change',onchangeHandler);readyState='initialized';document.dispatchEvent(new CustomEvent('ds-initialized'));resolve();},reject);});}
function doGetAll(resolve,reject){var result=Object.create(null);var cursor=datastore.sync();function cursorResolve(task){switch(task.operation){case'update':case'add':result[task.data.id]=task.data;break;case'remove':delete result[task.data.id];break;case'clear':result=Object.create(null);break;case'done':resolve(result);return;}
cursor.next().then(cursorResolve,reject);}
cursor.next().then(cursorResolve,reject);}
function get(id){return new Promise(function doGet(resolve,reject){init().then(function onInitialized(){datastore.get(id).then(resolve,reject);},reject);});}
function getAll(){return new Promise(function doGet(resolve,reject){init().then(doGetAll.bind(null,resolve,reject),reject);});}
function onchangeHandler(event){var operation=event.operation;var callbacks=listeners[operation];callbacks&&callbacks.forEach(function iterCallback(callback){datastore.get(event.id).then(function got(result){callback.method.call(callback.context||this,{type:operation,target:result||event});});});}
function addEventListener(type,callback){var context;if(!(type in listeners)){listeners[type]=[];}
var cb=callback;if(typeof cb==='object'){context=cb;cb=cb.handleEvent;}
if(cb){listeners[type].push({method:cb,context:context});init();}}
function removeEventListener(type,callback){if(!(type in listeners)){return false;}
var callbacks=listeners[type];var length=callbacks.length;for(var i=0;i<length;i++){var thisCallback=callback;if(typeof thisCallback==='object'){thisCallback=callback.handleEvent;}
if(callbacks[i]&&callbacks[i].method===thisCallback){callbacks.splice(i,1);return true;}}
return false;}
function add(data){return new Promise(function doAdd(resolve,reject){init().then(function onInitialized(){var id=data.url;Object.defineProperty(data,'id',{enumerable:true,configurable:false,writable:false,value:id});datastore.add(data,id).then(function add_success(){resolve(true);},function add_error(){datastore.put(data,id).then(function put_success(){resolve();},reject);});},reject);});}
function getRevisionId(){return new Promise(function doGet(resolve,reject){init().then(function onInitialized(){resolve(datastore.revisionId);},reject);});}
function put(data){return new Promise(function doAdd(resolve,reject){init().then(function onInitialized(){datastore.put(data,data.id).then(function success(){resolve();},reject);},reject);});}
function remove(id){return new Promise(function doRemove(resolve,reject){init().then(function onInitialized(){datastore.remove(id).then(resolve,reject);},reject);});}
function clear(){return new Promise(function doClear(resolve,reject){init().then(function onInitialized(){datastore.clear().then(resolve,reject);},reject);});}
exports.BookmarksDatabase={get:get,getAll:getAll,getRevisionId:getRevisionId,addEventListener:addEventListener,removeEventListener:removeEventListener,add:add,put:put,remove:remove,clear:clear};}(window));;'use strict';(function WebManifestHelper(exports){var getManifest=function(url){return new Promise(function(resolve,reject){var xhr=new XMLHttpRequest({mozSystem:true});xhr.open('get',url,true);xhr.responseType='json';xhr.setRequestHeader('Accept','application/manifest+json');xhr.onload=function(){var status=xhr.status;var webManifest;if(status==200){if(!xhr.response){reject(new Error('Empty JSON response to '+url+', '+'possibly syntax error'));}
webManifest=processRawManifest(xhr.response||{},url);resolve(webManifest);}else{reject(status);}};xhr.onerror=function(e){console.error('Unable to get web manifest');reject(e.target.status);};xhr.send();});};var processRawManifest=function(webManifest,manifestURL){if(!manifestURL){throw new Error('WebManifestHelper.processRawManifest:'+' no manifestURL given');}
if('icons'in webManifest){webManifest.icons=processIcons(webManifest,manifestURL||'');}
return webManifest;};const onlyDecimals=/^\d+$/,anyRegEx=new RegExp('any','i');var processIcons=function(manifest,baseURL){const obj={objectName:'manifest',object:manifest,property:'icons',expectedType:'array'},icons=[];var value=extractValue(obj);if(Array.isArray(value)){var processableIcons=value.filter(icon=>icon&&Object.prototype.hasOwnProperty.call(icon,'src')&&icon.src!=='');for(var potentialIcon of processableIcons){var src=processSrcMember(potentialIcon,baseURL);if(src!==undefined){var icon={src:src,type:processTypeMember(potentialIcon),sizes:processSizesMember(potentialIcon),density:processDensityMember(potentialIcon)};icons.push(icon);}}}
return icons;function processTypeMember(icon){const obj={objectName:'icon',object:icon,property:'type',expectedType:'string'};var value=extractValue(obj),isParsable=(typeof value==='string'&&value.length>0);return(value===''||!isParsable)?undefined:value;}
function processDensityMember(icon){const hasDensity=Object.prototype.hasOwnProperty.call(icon,'density'),rawValue=(hasDensity)?icon.density:undefined,value=parseFloat(rawValue),result=(Number.isNaN(value)||value===+Infinity||value<=0)?1.0:value;return result;}
function processSrcMember(icon,baseURL){const obj={objectName:'icon',object:icon,property:'src',expectedType:'string'},value=extractValue(obj);var url;if(typeof value==='string'&&value.trim()!==''){try{url=new URL(value,baseURL).href;}catch(e){}}
return url;}
function processSizesMember(icon){const sizes=[],obj={objectName:'icon',object:icon,property:'sizes',expectedType:'string'};var value=extractValue(obj);value=(value)?value.trim():value;if(value){var validSizes=value.split(/\s+/).filter(isValidSizeValue);validSizes.forEach((size)=>sizes.push(size));}
return sizes;function isValidSizeValue(size){if(anyRegEx.test(size)){return true;}
size=size.toLowerCase();if(!size.contains('x')||size.indexOf('x')!==size.lastIndexOf('x')){return false;}
const width=size.substring(0,size.indexOf('x'));const height=size.substring(size.indexOf('x')+1,size.length);const isValid=!(height.startsWith('0')||width.startsWith('0')||!onlyDecimals.test(width+height));return isValid;}}};function extractValue(obj){var value=obj.object[obj.property];const type=(Array.isArray(value))?'array':typeof value;if(type!==obj.expectedType){if(type!=='undefined'){var msg='Expected the '+obj.objectName+'s '+obj.property+' member to be a '+obj.expectedType;console.warn(msg);}
value=undefined;}
return value;}
exports.WebManifestHelper={getManifest:getManifest,processRawManifest:processRawManifest};})(window);;'use strict';(function IconsHelper(exports){const ICON_CACHE_PERIOD=24*60*60*1000;const FETCH_XHR_TIMEOUT=10000;const DEBUG=false;var dataStore=null;function getDefaultIconSize(){var dpr=window.devicePixelRatio;return(dpr&&dpr>1)?142:84;}
function sizeIsNearer(size1,size2,targetSize){var delta1=Math.abs(targetSize-size1);var delta2=Math.abs(targetSize-size2);return(delta1<=delta2);}
function getIcon(uri,iconTargetSize,placeObj={},siteObj={}){var iconUrl=null;iconTargetSize=iconTargetSize*window.devicePixelRatio;if(siteObj.webManifestUrl&&siteObj.webManifest){iconUrl=getBestIconFromWebManifest(siteObj.webManifest,iconTargetSize);if(DEBUG&&iconUrl){console.log('Icon from Web Manifest');}}
if(!iconUrl&&siteObj.manifest&&siteObj.manifest.icons){iconUrl=getBestIconFromWebManifest({icons:_convertToWebManifestIcons(siteObj.manifest,siteObj.origin||siteObj.manifest.origin)},iconTargetSize);if(DEBUG&&iconUrl){console.log('Icon from Firefox App Manifest');}}
if(!iconUrl&&placeObj&&placeObj.icons){iconUrl=getBestIconFromMetaTags(placeObj.icons,iconTargetSize);if(DEBUG&&iconUrl){console.log('Icon from Meta tags');}}
if(!iconUrl){var a=document.createElement('a');a.href=uri;iconUrl=a.origin+'/favicon.ico';if(iconTargetSize){iconUrl+='#-moz-resolution='+iconTargetSize+','+iconTargetSize;}
DEBUG&&console.log('Icon from favicon.ico');}
return new Promise(resolve=>{resolve(iconUrl);});}
function getIconBlob(uri,iconTargetSize,placeObj={},siteObj={}){return new Promise((resolve,reject)=>{getIcon(uri,iconTargetSize,placeObj,siteObj).then(iconUrl=>{getStore().then(iconStore=>{iconStore.get(iconUrl).then(iconObj=>{if(!iconObj||!iconObj.timestamp||Date.now()-iconObj.timestamp>=ICON_CACHE_PERIOD){return fetchIconBlob(iconUrl).then(iconBlob=>{var img=document.createElement('img');var icon=new Icon(img,uri);icon.renderBlob(iconBlob,{size:iconTargetSize,onLoad:function(blob){var iconObj={blob:blob,originalUrl:iconUrl.toString(),timestamp:Date.now()};resolve(iconObj);iconStore.add(iconObj,iconUrl);},onerror:function(e){reject(`Failed to fetch icon ${iconUrl}`);}});}).catch(err=>{reject(`Failed to fetch icon ${iconUrl}: ${err}`);});}
return resolve(iconObj);}).catch(err=>{reject(`Failed to get icon from dataStore: ${err}`);});}).catch(err=>{reject(`Error opening the dataStore: ${err}`);});});});}
function setElementIcon(icon,targetSize){return getIconBlob(icon.bookmark.url,targetSize,icon.bookmark,icon.bookmark).then(iconObj=>{if(iconObj.blob){icon.icon=iconObj.blob;return Promise.resolve();}else if(icon.bookmark.icon){return fetchIconBlob(icon.bookmark.icon).then(iconBlob=>{icon.icon=iconBlob;return Promise.resolve();},Promise.reject.bind(Promise));}
return Promise.reject('No icon data found');},Promise.reject.bind(Promise));}
function getBestIconFromWebManifest(webManifest,iconSize){var icons=webManifest.icons;if(!icons){return null;}
var maxSize=10000;var bestSize=maxSize;var iconURL=null;iconSize=iconSize||getDefaultIconSize();icons.forEach((potentialIcon)=>{if(!iconURL){iconURL=potentialIcon.src;}
var sizes=Array.from(potentialIcon.sizes);var nearestSize=getNearestSize(sizes,iconSize,bestSize);if(nearestSize!==bestSize&&sizeIsNearer(nearestSize,bestSize,iconSize)){iconURL=potentialIcon.src;bestSize=nearestSize;}});return iconURL?iconURL:null;}
function _convertToWebManifestIcons(manifest,origin){return Object.keys(manifest.icons).map(function(size){var url=manifest.icons[size];var sizes=[size+'x'+size];url=url.indexOf('http')>-1?url:origin+url;return{src:new URL(url),sizes:sizes};});}
function getBestIconFromMetaTags(icons,iconSize){if(!icons){return null;}
iconSize=iconSize||getDefaultIconSize();var iconURL=null;var bestSize=10000;Object.keys(icons).forEach((uri)=>{var potentialIcon=icons[uri];if(!iconURL){iconURL=uri;}
var sizes=Array.from(potentialIcon.sizes);var nearestSize=getNearestSize(sizes,iconSize,bestSize);if(nearestSize!==bestSize&&sizeIsNearer(nearestSize,bestSize,iconSize)){iconURL=uri;bestSize=nearestSize;}
if(potentialIcon.rel==='apple-touch-icon'||potentialIcon.rel==='apple-touch-icon-precomposed'){var moreInfoUrl='https://developer.mozilla.org/en-US/'+'Apps/Build/Icon_implementation_for_apps#General_icons_for_web_apps';console.warn('Warning: The apple-touch icons are being used '+'as a fallback only. They will be deprecated in '+'the future. See '+moreInfoUrl);}});return iconURL||null;}
function getNearestSize(sizes,iconSize,bestSize){var bogusSize=10000;if(!bestSize){bestSize=bogusSize;}
var nearestSize=sizes.reduce(function(nearestSize,sizeString,idx){var size=widthFromSizeString(sizeString);if(isNaN(size)){return nearestSize;}
if(sizeIsNearer(size,nearestSize,iconSize)){return size;}else{return nearestSize;}},bestSize);return nearestSize===bogusSize?-1:nearestSize;}
function widthFromSizeString(size){size=size||'';var xIndex=size.indexOf('x');if(!xIndex){return NaN;}
return parseInt(size.substr(0,xIndex));}
function getStore(){return new Promise(resolve=>{if(dataStore){return resolve(dataStore);}
navigator.getDataStores('icons').then(stores=>{dataStore=stores[0];return resolve(dataStore);});});}
function clear(){return getStore().then(iconStore=>{iconStore.clear();});}
function fetchIcon(iconUrl){return new Promise((resolve,reject)=>{fetchIconBlob(iconUrl).then((iconBlob)=>{var img=document.createElement('img');img.src=URL.createObjectURL(iconBlob);img.onload=()=>{var iconSize=Math.max(img.naturalWidth,img.naturalHeight);resolve({blob:iconBlob,url:iconUrl,size:iconSize,timestamp:Date.now()});};img.onerror=()=>{reject(new Error(`Error while loading image.`));};}).catch((e)=>{reject(new Error(`Error while loading image: ${e}`));});});}
function fetchIconBlob(iconUrl){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest({mozAnon:true,mozSystem:true});xhr.open('GET',iconUrl,true);xhr.responseType='blob';xhr.timeout=FETCH_XHR_TIMEOUT;xhr.send();xhr.onload=()=>{if(xhr.readyState===XMLHttpRequest.DONE&&xhr.status===200){var iconBlob=xhr.response;resolve(iconBlob);return;}
reject(new Error(`Got HTTP status ${xhr.status} trying to load ${iconUrl}.`));};xhr.onerror=xhr.ontimeout=()=>{reject(new Error(`Error while getting ${iconUrl}.`));};});}
exports.IconsHelper={getIcon:getIcon,getIconBlob:getIconBlob,setElementIcon:setElementIcon,getBestIconFromWebManifest:getBestIconFromWebManifest,getBestIconFromMetaTags:getBestIconFromMetaTags,fetchIcon:fetchIcon,fetchIconBlob:fetchIconBlob,get defaultIconSize(){return getDefaultIconSize();},clear:clear,getNearestSize:getNearestSize,};})(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';(function(exports){const SHADOW_BLUR=1;const SHADOW_OFFSET_Y=1;const SHADOW_OFFSET_X=1;const SHADOW_COLOR='rgba(0, 0, 0, 0.2)';const DEFAULT_BACKGROUND_COLOR='rgb(228, 234, 238)';const UNSCALED_CANVAS_PADDING=2;const CANVAS_PADDING=UNSCALED_CANVAS_PADDING*devicePixelRatio;function IconRenderer(icon){this._icon=icon;}
IconRenderer.TYPE={CLIP:'clip',FAVICON:'favicon',STANDARD:'standard',};IconRenderer.prototype={unscaledCanvasPadding:UNSCALED_CANVAS_PADDING*2,get _maxSize(){return this._icon.grid.layout.gridMaxIconSize;},_createCanvas:function(){const CANVAS_PADDING_BOTTOM=1*devicePixelRatio;var canvas=document.createElement('canvas');canvas.width=this._maxSize+(CANVAS_PADDING*2);canvas.height=this._maxSize+CANVAS_PADDING+CANVAS_PADDING_BOTTOM;return canvas;},_createClipCanvas:function(){var canvas=document.createElement('canvas');canvas.width=this._maxSize+(CANVAS_PADDING*2);canvas.height=this._maxSize+(CANVAS_PADDING*2);return canvas;},_decorateShadowCanvas:function(canvas){var ctx=canvas.getContext('2d',{willReadFrequently:true});ctx.shadowColor=SHADOW_COLOR;ctx.shadowBlur=SHADOW_BLUR;ctx.shadowOffsetY=SHADOW_OFFSET_Y;ctx.shadowOffsetX=SHADOW_OFFSET_X;return ctx;},clip:function(img){return new Promise((resolve)=>{var shadowCanvas=this._createCanvas();var shadowCtx=this._decorateShadowCanvas(shadowCanvas);var clipCanvas=this._createClipCanvas();var clipCtx=clipCanvas.getContext('2d',{willReadFrequently:true});clipCtx.beginPath();clipCtx.arc(clipCanvas.width/2,clipCanvas.height/2,clipCanvas.height/2,0,2*Math.PI);clipCtx.clip();clipCtx.drawImage(img,0,0,clipCanvas.width,clipCanvas.height);shadowCtx.drawImage(clipCanvas,CANVAS_PADDING,CANVAS_PADDING,this._maxSize,this._maxSize);shadowCanvas.toBlob(resolve);});},favicon:function(img){if(img.width>this._icon.grid.layout.gridIconSize/2){return this.clip(img);}
return new Promise((resolve)=>{var shadowCanvas=this._createCanvas();var shadowCtx=this._decorateShadowCanvas(shadowCanvas);var iconWidth;var iconHeight;shadowCtx.beginPath();shadowCtx.arc(shadowCanvas.width/2,shadowCanvas.height/2,shadowCanvas.height/2-CANVAS_PADDING,0,2*Math.PI,false);shadowCtx.fillStyle=DEFAULT_BACKGROUND_COLOR;shadowCtx.fill();iconWidth=iconHeight=this._maxSize*0.55;shadowCtx.shadowBlur=0;shadowCtx.shadowOffsetY=0;shadowCtx.mozImageSmoothingEnabled=false;shadowCtx.drawImage(img,(shadowCanvas.width-iconWidth)/2,(shadowCanvas.height-iconHeight)/2,iconWidth,iconHeight);shadowCanvas.toBlob(resolve);});},standard:function(img){return new Promise((resolve)=>{var shadowCanvas=this._createCanvas();var shadowCtx=this._decorateShadowCanvas(shadowCanvas);shadowCtx.drawImage(img,CANVAS_PADDING,CANVAS_PADDING,this._maxSize,this._maxSize);shadowCanvas.toBlob(resolve);});}};exports.GridIconRenderer=IconRenderer;}(window));;'use strict';(function(exports){const FETCH_XHR_TIMEOUT=10000;function fetchBlob(uri){return new Promise(function(accept,reject){var xhr=new XMLHttpRequest({mozAnon:true,mozSystem:true});xhr.open('GET',uri,true);xhr.responseType='blob';xhr.timeout=FETCH_XHR_TIMEOUT;xhr.send();xhr.onload=function(){var status=xhr.status;if(status!==0&&status!==200){reject(new Error('Got HTTP status '+status+' trying to load '+uri));return;}
accept(xhr.response);};xhr.onerror=xhr.ontimeout=function(){reject(new Error('Error while HTTP GET: ',uri));};});}
function Icon(elem,uri){this.elem=elem;this.uri=uri;}
Icon.prototype={get size(){return this._size||40;},set size(size){this._size=size||this.size;var style=this.elem.style;var sizeInRems=(this._size/10)+'rem';style.backgroundSize=style.width=style.height=sizeInRems;},render:function render(options){options=options||{};var uri=this.uri;this.size=options.size;if(!uri){return;}
fetchBlob(uri).then(function(blob){this.renderBlob(blob,options);}.bind(this));},renderBlob:function renderBlob(blob,options){options=options||{};var style=this.elem.style;this.size=options.size;var img=new Image();img.src=URL.createObjectURL(blob);var size=this.size;img.onload=()=>{var renderer=new GridIconRenderer({grid:{layout:{get gridIconSize(){return size;},get gridMaxIconSize(){return size*devicePixelRatio;}}}});var type=options.type||GridIconRenderer.TYPE.FAVICON;renderer[type](img).then((blob)=>{var url=URL.createObjectURL(blob);var imageUrl='url('+url+')';style.backgroundImage=imageUrl;if(options.onLoad){options.onLoad(blob);}});URL.revokeObjectURL(img.src);};img.onerror=()=>{if(options.onerror){options.onerror();}};}};exports.Icon=Icon;}(window));;'use strict';var BookmarkEditor={BOOKMARK_ICON_SIZE:60,APP_ICON_SIZE:60,init:function bookmarkEditor_show(options){this.data=options.data;this.onsaved=options.onsaved;this.oncancelled=options.oncancelled;var mode='add';BookmarksDatabase.get(this.data.url).then((function got(bookmark){if(bookmark){this.data=bookmark;mode='put';}
this._init(mode);}).bind(this),this._init.bind(this,mode));},_init:function bookmarkEditor_init(mode){this.mode=document.body.dataset.mode=mode;this.bookmarkTitle=document.getElementById('bookmark-title');this.bookmarkURL=document.getElementById('bookmark-url');this.bookmarkIcon=document.getElementById('bookmark-icon');this.header=document.getElementById('header');this.saveButton=document.getElementById('done-button');this.appInstallationSection=document.getElementById('app-installation');this.appIcon=document.getElementById('app-icon');this.appIconPlaceholder=document.getElementById('app-icon-placeholder');this.appNameText=document.getElementById('app-name');this.installAppButton=document.getElementById('install-app-button');this.header.addEventListener('action',this.close.bind(this));this.saveListener=this.save.bind(this);this.saveButton.addEventListener('click',this.saveListener);this.bookmarkTitle.value=this.data.name||'';this.bookmarkURL.textContent=this.data.url;this._renderIcon();if(this.data.manifestURL){this.manifestURL=this.data.manifestURL;this._fetchManifest(this.manifestURL);}
this._checkDoneButton();this.form=document.getElementById('bookmark-form');this.form.addEventListener('input',this._checkDoneButton.bind(this));this.form.addEventListener('submit',this._submit.bind(this));var touchstart='ontouchstart'in window?'touchstart':'mousedown';this.clearButton=document.getElementById('bookmark-title-clear');this.clearButton.addEventListener(touchstart,this._clearTitle.bind(this));if(mode==='put'){this._onEditMode();this.saveButton.setAttribute('data-l10n-id','done-action');}else{this.saveButton.setAttribute('data-l10n-id','add-action');}
window.dispatchEvent(new CustomEvent('lazyload',{detail:document.body}));},_renderIcon:function renderIcon(){var icon=new Icon(this.bookmarkIcon,this.data.icon);icon.render({'size':this.BOOKMARK_ICON_SIZE});},_renderAppIcon:function renderAppIcon(manifest,size){var iconURL=window.IconsHelper.getBestIconFromWebManifest(manifest,size);if(!iconURL){return;}
this.appIconListener=this._handleAppIconLoad.bind(this);this.appIcon.addEventListener('load',this.appIconListener);this.appIcon.setAttribute('src',iconURL);},_handleAppIconLoad:function _handleAppIconLoad(){this.appIconPlaceholder.classList.add('hidden');this.appIcon.classList.remove('hidden');this.appIcon.removeEventListener('load',this.appIconListener);},_fetchManifest:function bookmarkEditor_fetchManifest(manifestURL){var manifestPromise=window.WebManifestHelper.getManifest(manifestURL);manifestPromise.then((function(manifestData){if(manifestData){this.installAppButtonListener=this._installApp.bind(this);this.installAppButton.addEventListener('click',this.installAppButtonListener);this.appNameText.textContent=manifestData.short_name||manifestData.name;this.appInstallationSection.classList.remove('hidden');this._renderAppIcon(manifestData,manifestURL,this.APP_ICON_SIZE);}}).bind(this)).catch(function(error){console.error('Unable to get web manifest: '+error);});return manifestPromise;},_onEditMode:function bookmarkEditor_onEditMode(){this.saveButton.disabled=true;},close:function bookmarkEditor_close(){this.oncancelled();},_submit:function(event){event.preventDefault();if(!this.saveButton.disabled){this.save();}},_clearTitle:function bookmarkEditor_clearTitle(event){event.preventDefault();this.bookmarkTitle.value='';this._checkDoneButton();},_checkDoneButton:function bookmarkEditor_checkDoneButton(){var title=this.bookmarkTitle.value.trim();this.saveButton.disabled=title==='';},_installApp:function bookmarkEditor_installApp(){window.navigator.mozApps.install(this.manifestURL);},save:function bookmarkEditor_save(evt){this.saveButton.removeEventListener('click',this.saveListener);if(this.installAppButtonListener){this.installAppButton.removeEventListener('click',this.installAppButtonListener);}
var url=this.data.url.trim();if(UrlHelper.isNotURL(url)){this.oncancelled();return;}
this.data.name=this.bookmarkTitle.value;this.data.url=url;BookmarksDatabase[this.mode](this.data).then(this.onsaved.bind(this),this.close.bind(this));}};;'use strict';window.utils=window.utils||{};window.utils.status=(function(){var DISPLAYED_TIME=1500;var section,content;var timeoutID;function clearHideTimeout(){if(timeoutID===null){return;}
window.clearTimeout(timeoutID);timeoutID=null;}
function show(message,duration){clearHideTimeout();content.innerHTML='';if(typeof message==='string'){content.textContent=message;}else{try{content.appendChild(message);}catch(ex){console.error('DOMException: '+ex.message);}}
section.classList.remove('hidden');section.classList.add('onviewport');timeoutID=window.setTimeout(hide,duration||DISPLAYED_TIME);}
function animationEnd(evt){var eventName='status-showed';if(evt.animationName==='hide'){clearHideTimeout();section.classList.add('hidden');eventName='status-hidden';}
window.dispatchEvent(new CustomEvent(eventName));}
function hide(){section.classList.remove('onviewport');}
function destroy(){section.removeEventListener('animationend',animationEnd);document.body.removeChild(section);clearHideTimeout();section=content=null;}
function getPath(){return'/js/components/';}
function initialize(){if(section){return;}
section=document.createElement('section');var link=document.createElement('link');link.type='text/css';link.rel='stylesheet';link.href=getPath()+'status-behavior.css';document.head.appendChild(link);section.setAttribute('role','status');section.classList.add('hidden');content=document.createElement('p');section.appendChild(content);section.addEventListener('animationend',animationEnd);setTimeout(function append(){document.body.appendChild(section);});}
if(document.readyState==='complete'){initialize();}else{document.addEventListener('DOMContentLoaded',function loaded(){document.removeEventListener('DOMContentLoaded',loaded);initialize();});}
return{init:initialize,show:show,hide:hide,destroy:destroy,setDuration:function setDuration(time){DISPLAYED_TIME=time||DISPLAYED_TIME;}};})();;'use strict';var ActivityHandler={'save-bookmark':function ah_save(activity){BookmarkEditor.init({data:activity.source.data,onsaved:function onsaved(saved){window.addEventListener('status-hidden',function hidden(){window.removeEventListener('status-hidden',hidden);activity.postResult(saved?'saved':'updated');});var msg=saved?'added-to-home-screen-message':'updated-pinned-site';navigator.mozL10n.formatValue(msg).then(msg=>utils.status.show(msg));},oncancelled:function oncancelled(){activity.postError('cancelled');}});},'remove-bookmark':function ah_remove(activity){BookmarkRemover.init({id:activity.source.data.url,onremoved:function onremoved(){activity.postResult('removed');},oncancelled:function oncancelled(e){activity.postError(e);}});}};navigator.mozSetMessageHandler('activity',function onActivity(activity){var name=activity.source.name;switch(name){case'save-bookmark':case'remove-bookmark':if(activity.source.data.type==='url'){ActivityHandler[name](activity);}else{activity.postError('type not supported');}
break;default:activity.postError('name not supported');}});

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,2 @@
;;'use strict';var ActivityHandler={'save-bookmark':function ah_save(activity){BookmarkEditor.init({data:activity.source.data,onsaved:function onsaved(saved){window.addEventListener('status-hidden',function hidden(){window.removeEventListener('status-hidden',hidden);activity.postResult(saved?'saved':'updated');});var msg=saved?'added-to-home-screen-message':'updated-pinned-site';navigator.mozL10n.formatValue(msg).then(msg=>utils.status.show(msg));},oncancelled:function oncancelled(){activity.postError('cancelled');}});},'remove-bookmark':function ah_remove(activity){BookmarkRemover.init({id:activity.source.data.url,onremoved:function onremoved(){activity.postResult('removed');},oncancelled:function oncancelled(e){activity.postError(e);}});}};navigator.mozSetMessageHandler('activity',function onActivity(activity){var name=activity.source.name;switch(name){case'save-bookmark':case'remove-bookmark':if(activity.source.data.type==='url'){ActivityHandler[name](activity);}else{activity.postError('type not supported');}
break;default:activity.postError('name not supported');}});

View file

@ -0,0 +1,7 @@
;'use strict';var BookmarkEditor={BOOKMARK_ICON_SIZE:60,APP_ICON_SIZE:60,init:function bookmarkEditor_show(options){this.data=options.data;this.onsaved=options.onsaved;this.oncancelled=options.oncancelled;var mode='add';BookmarksDatabase.get(this.data.url).then((function got(bookmark){if(bookmark){this.data=bookmark;mode='put';}
this._init(mode);}).bind(this),this._init.bind(this,mode));},_init:function bookmarkEditor_init(mode){this.mode=document.body.dataset.mode=mode;this.bookmarkTitle=document.getElementById('bookmark-title');this.bookmarkURL=document.getElementById('bookmark-url');this.bookmarkIcon=document.getElementById('bookmark-icon');this.header=document.getElementById('header');this.saveButton=document.getElementById('done-button');this.appInstallationSection=document.getElementById('app-installation');this.appIcon=document.getElementById('app-icon');this.appIconPlaceholder=document.getElementById('app-icon-placeholder');this.appNameText=document.getElementById('app-name');this.installAppButton=document.getElementById('install-app-button');this.header.addEventListener('action',this.close.bind(this));this.saveListener=this.save.bind(this);this.saveButton.addEventListener('click',this.saveListener);this.bookmarkTitle.value=this.data.name||'';this.bookmarkURL.textContent=this.data.url;this._renderIcon();if(this.data.manifestURL){this.manifestURL=this.data.manifestURL;this._fetchManifest(this.manifestURL);}
this._checkDoneButton();this.form=document.getElementById('bookmark-form');this.form.addEventListener('input',this._checkDoneButton.bind(this));this.form.addEventListener('submit',this._submit.bind(this));var touchstart='ontouchstart'in window?'touchstart':'mousedown';this.clearButton=document.getElementById('bookmark-title-clear');this.clearButton.addEventListener(touchstart,this._clearTitle.bind(this));if(mode==='put'){this._onEditMode();this.saveButton.setAttribute('data-l10n-id','done-action');}else{this.saveButton.setAttribute('data-l10n-id','add-action');}
window.dispatchEvent(new CustomEvent('lazyload',{detail:document.body}));},_renderIcon:function renderIcon(){var icon=new Icon(this.bookmarkIcon,this.data.icon);icon.render({'size':this.BOOKMARK_ICON_SIZE});},_renderAppIcon:function renderAppIcon(manifest,size){var iconURL=window.IconsHelper.getBestIconFromWebManifest(manifest,size);if(!iconURL){return;}
this.appIconListener=this._handleAppIconLoad.bind(this);this.appIcon.addEventListener('load',this.appIconListener);this.appIcon.setAttribute('src',iconURL);},_handleAppIconLoad:function _handleAppIconLoad(){this.appIconPlaceholder.classList.add('hidden');this.appIcon.classList.remove('hidden');this.appIcon.removeEventListener('load',this.appIconListener);},_fetchManifest:function bookmarkEditor_fetchManifest(manifestURL){var manifestPromise=window.WebManifestHelper.getManifest(manifestURL);manifestPromise.then((function(manifestData){if(manifestData){this.installAppButtonListener=this._installApp.bind(this);this.installAppButton.addEventListener('click',this.installAppButtonListener);this.appNameText.textContent=manifestData.short_name||manifestData.name;this.appInstallationSection.classList.remove('hidden');this._renderAppIcon(manifestData,manifestURL,this.APP_ICON_SIZE);}}).bind(this)).catch(function(error){console.error('Unable to get web manifest: '+error);});return manifestPromise;},_onEditMode:function bookmarkEditor_onEditMode(){this.saveButton.disabled=true;},close:function bookmarkEditor_close(){this.oncancelled();},_submit:function(event){event.preventDefault();if(!this.saveButton.disabled){this.save();}},_clearTitle:function bookmarkEditor_clearTitle(event){event.preventDefault();this.bookmarkTitle.value='';this._checkDoneButton();},_checkDoneButton:function bookmarkEditor_checkDoneButton(){var title=this.bookmarkTitle.value.trim();this.saveButton.disabled=title==='';},_installApp:function bookmarkEditor_installApp(){window.navigator.mozApps.install(this.manifestURL);},save:function bookmarkEditor_save(evt){this.saveButton.removeEventListener('click',this.saveListener);if(this.installAppButtonListener){this.installAppButton.removeEventListener('click',this.installAppButtonListener);}
var url=this.data.url.trim();if(UrlHelper.isNotURL(url)){this.oncancelled();return;}
this.data.name=this.bookmarkTitle.value;this.data.url=url;BookmarksDatabase[this.mode](this.data).then(this.onsaved.bind(this),this.close.bind(this));}};

View file

@ -0,0 +1,2 @@
;'use strict';var BookmarkRemover={init:function bookmarkRemover_init(data){var id=data.id;BookmarksDatabase.get(id).then(function got(bookmark){if(!bookmark){data.oncancelled('bookmark does not exist');return;}
var ttl=document.getElementById('title');var msg=document.getElementById('message');ttl.setAttribute('data-l10n-id','remove-title');ttl.setAttribute('data-l10n-args',JSON.stringify({name:bookmark.name}));msg.setAttribute('data-l10n-id','remove-message');msg.setAttribute('data-l10n-args',JSON.stringify({name:bookmark.name}));document.getElementById('cancel-action').addEventListener('click',function onCancel(){data.oncancelled('cancelled');});document.getElementById('remove-action').addEventListener('click',function onConfirm(evt){evt.target.removeEventListener('click',onConfirm);BookmarksDatabase.remove(id).then(data.onremoved,data.oncancelled);});},data.oncancelled);}};

View file

@ -0,0 +1,32 @@
section[role="status"] {
animation-name: hide;
animation-duration: .3s;
animation-fill-mode: forwards;
}
section[role="status"].onviewport {
animation-name: show;
}
section[role="status"].hidden {
display: none;
}
@keyframes show {
from {
transform: translateY(100%)
}
to {
transform: translateY(0)
}
}
@keyframes hide {
from {
transform: translateY(0)
}
to {
transform: translateY(100%)
}
}

View file

@ -0,0 +1,13 @@
;'use strict';window.utils=window.utils||{};window.utils.status=(function(){var DISPLAYED_TIME=1500;var section,content;var timeoutID;function clearHideTimeout(){if(timeoutID===null){return;}
window.clearTimeout(timeoutID);timeoutID=null;}
function show(message,duration){clearHideTimeout();content.innerHTML='';if(typeof message==='string'){content.textContent=message;}else{try{content.appendChild(message);}catch(ex){console.error('DOMException: '+ex.message);}}
section.classList.remove('hidden');section.classList.add('onviewport');timeoutID=window.setTimeout(hide,duration||DISPLAYED_TIME);}
function animationEnd(evt){var eventName='status-showed';if(evt.animationName==='hide'){clearHideTimeout();section.classList.add('hidden');eventName='status-hidden';}
window.dispatchEvent(new CustomEvent(eventName));}
function hide(){section.classList.remove('onviewport');}
function destroy(){section.removeEventListener('animationend',animationEnd);document.body.removeChild(section);clearHideTimeout();section=content=null;}
function getPath(){return'/js/components/';}
function initialize(){if(section){return;}
section=document.createElement('section');var link=document.createElement('link');link.type='text/css';link.rel='stylesheet';link.href=getPath()+'status-behavior.css';document.head.appendChild(link);section.setAttribute('role','status');section.classList.add('hidden');content=document.createElement('p');section.appendChild(content);section.addEventListener('animationend',animationEnd);setTimeout(function append(){document.body.appendChild(section);});}
if(document.readyState==='complete'){initialize();}else{document.addEventListener('DOMContentLoaded',function loaded(){document.removeEventListener('DOMContentLoaded',loaded);initialize();});}
return{init:initialize,show:show,hide:hide,destroy:destroy,setDuration:function setDuration(time){DISPLAYED_TIME=time||DISPLAYED_TIME;}};})();

View file

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

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"أضف إلى الشاشة الرئيسية"},{"$i":"edit-pinned-site-title","$v":"تعديل الموقع المثبت"},{"$i":"added-to-home-screen-message","$v":"أُضيفَ إلى الشاشة الرئيسية"},{"$i":"updated-pinned-site","$v":"الموقع المثبت المحدث"},{"$i":"done-action","$v":"تمّ"},{"$i":"add-action","$v":"إضافة"},{"$i":"cancel-action","$v":"ألغِ"},{"$i":"add-application","$v":"إضافة تطبيق"},{"$i":"add","$v":"إضافة"},{"$i":"application-available","$v":"هناك تطبيق متاح لهذا الموقع."},{"$i":"remove-title","$v":["احذف ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["أأحذف ",{"t":"idOrVar","v":"name"}," من النظام؟"]},{"$i":"remove-action","$v":"احذف"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Добавена към началния екран"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Готово"},{"$i":"add-action","$v":"Добавяне"},{"$i":"cancel-action","$v":"Отказ"},{"$i":"add-application","$v":"Добавяне на приложение"},{"$i":"add","$v":"Добавяне"},{"$i":"application-available","$v":"Налично е приложение за този уеб сайт."},{"$i":"remove-title","$v":["Премахване на ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Премахване на ",{"t":"idOrVar","v":"name"}," от системата?"]},{"$i":"remove-action","$v":"Премахване"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"হোম স্ক্রিনে যুক্ত করুন"},{"$i":"edit-pinned-site-title","$v":"পিন করা পাতা সম্পাদনা করুন"},{"$i":"added-to-home-screen-message","$v":"প্রধান স্ক্রিনে যুক্ত হয়েছে"},{"$i":"updated-pinned-site","$v":"পিন করা পাতা হালনাগাদ করুন"},{"$i":"done-action","$v":"সম্পন্ন"},{"$i":"add-action","$v":"যোগ"},{"$i":"cancel-action","$v":"বাতিল"},{"$i":"add-application","$v":"অ্যাপ্লিকেশন যোগ"},{"$i":"add","$v":"যোগ"},{"$i":"application-available","$v":"এই ওয়েবসাইটের জন্য একটি অ্যাপ্লিকেশন রয়েছে।"},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," অপসারণ"]},{"$i":"remove-message","$v":["সিস্টেম থেকে ",{"t":"idOrVar","v":"name"}," অপসারণ করবেন?"]},{"$i":"remove-action","$v":"অপসারণ"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Afegeix a la pantalla d'inici"},{"$i":"edit-pinned-site-title","$v":"Edita el lloc fix"},{"$i":"added-to-home-screen-message","$v":"S'ha afegit a la pantalla d'inici"},{"$i":"updated-pinned-site","$v":"S'ha actualitzat el lloc fix"},{"$i":"done-action","$v":"Fet"},{"$i":"add-action","$v":"Afegeix"},{"$i":"cancel-action","$v":"Cancel·la"},{"$i":"add-application","$v":"Afegeix l'aplicació"},{"$i":"add","$v":"Afegeix"},{"$i":"application-available","$v":"Hi ha una aplicació disponible per aquest lloc web."},{"$i":"remove-title","$v":["Elimina ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Voleu eliminar «",{"t":"idOrVar","v":"name"},"» del sistema?"]},{"$i":"remove-action","$v":"Elimina"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Přidat na domovskou obrazovku"},{"$i":"edit-pinned-site-title","$v":"Upravit připnutou stránku"},{"$i":"added-to-home-screen-message","$v":"Přidáno na domovskou obrazovku"},{"$i":"updated-pinned-site","$v":"Aktualizovaná připnutá stránka"},{"$i":"done-action","$v":"Hotovo"},{"$i":"add-action","$v":"Přidat"},{"$i":"cancel-action","$v":"Zrušit"},{"$i":"add-application","$v":"Přidat aplikaci"},{"$i":"add","$v":"Přidat"},{"$i":"application-available","$v":"Pro tento web je k dispozici aplikace."},{"$i":"remove-title","$v":["Odebrání ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Odebrat ",{"t":"idOrVar","v":"name"}," ze systému?"]},{"$i":"remove-action","$v":"Odebrat"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Føj til startskærm"},{"$i":"edit-pinned-site-title","$v":"Rediger fastgjort websted"},{"$i":"added-to-home-screen-message","$v":"Føjet til startskærm"},{"$i":"updated-pinned-site","$v":"Opdaterede fastgjort websted"},{"$i":"done-action","$v":"Færdig"},{"$i":"add-action","$v":"Tilføj"},{"$i":"cancel-action","$v":"Fortryd"},{"$i":"add-application","$v":"Tilføj app"},{"$i":"add","$v":"Tilføj"},{"$i":"application-available","$v":"En app er tilgængelig for dette websted."},{"$i":"remove-title","$v":["Fjern ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Fjern ",{"t":"idOrVar","v":"name"}," frs systemet?"]},{"$i":"remove-action","$v":"Fjern"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Zum Startbildschirm hinzufügen"},{"$i":"edit-pinned-site-title","$v":"Angeheftete Seite bearbeiten"},{"$i":"added-to-home-screen-message","$v":"Zum Startbildschirm hinzugefügt"},{"$i":"updated-pinned-site","$v":"Angeheftete Seite aktualisieren"},{"$i":"done-action","$v":"Fertig"},{"$i":"add-action","$v":"Hinzufügen"},{"$i":"cancel-action","$v":"Abbrechen"},{"$i":"add-application","$v":"Anwendung hinzufügen"},{"$i":"add","$v":"Hinzufügen"},{"$i":"application-available","$v":"Für diese Webseite ist eine Anwendung verfügbar."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," entfernen"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," vom System entfernen?"]},{"$i":"remove-action","$v":"Entfernen"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Προσθήκη"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Προστέθηκε στην αρχική οθόνη"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"ΟΚ"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Ακύρωση"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Αφαίρεση ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Αφαίρεση ",{"t":"idOrVar","v":"name"}," από το σύστημα;"]},{"$i":"remove-action","$v":"Αφαίρεση"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Added to home screen"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Done"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Remove ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Remove ",{"t":"idOrVar","v":"name"}," from system?"]},{"$i":"remove-action","$v":"Remove"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Añadir a pant. inicio"},{"$i":"edit-pinned-site-title","$v":"Editar sitio fijado"},{"$i":"added-to-home-screen-message","$v":"Añadido a pantalla inicio"},{"$i":"updated-pinned-site","$v":"Sitio fijado actualizado"},{"$i":"done-action","$v":"Hecho"},{"$i":"add-action","$v":"Agregar"},{"$i":"cancel-action","$v":"Cancelar"},{"$i":"add-application","$v":"Agregar app"},{"$i":"add","$v":"Agregar"},{"$i":"application-available","$v":"Hay una aplicación disponible para este sitio web."},{"$i":"remove-title","$v":["Eliminar ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["¿Eliminar ",{"t":"idOrVar","v":"name"}," del sistema?"]},{"$i":"remove-action","$v":"Eliminar"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Gehitu hasiera-pantailari"},{"$i":"edit-pinned-site-title","$v":"Editatu ainguratutako gunea"},{"$i":"added-to-home-screen-message","$v":"Hasierako pantailara gehituta"},{"$i":"updated-pinned-site","$v":"Ainguratutako gunea eguneratuta"},{"$i":"done-action","$v":"Eginda"},{"$i":"add-action","$v":"Gehitu"},{"$i":"cancel-action","$v":"Utzi"},{"$i":"add-application","$v":"Gehitu aplikazioa"},{"$i":"add","$v":"Gehitu"},{"$i":"application-available","$v":"Webgune honetarako aplikazio bat eskuragarri dago."},{"$i":"remove-title","$v":["Kendu ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," sistematik kendu?"]},{"$i":"remove-action","$v":"Kendu"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Ajouter à l’accueil"},{"$i":"edit-pinned-site-title","$v":"Modifier site épinglé"},{"$i":"added-to-home-screen-message","$v":"Ajouté à l’écran d’accueil"},{"$i":"updated-pinned-site","$v":"Site épinglé mis à jour"},{"$i":"done-action","$v":"Terminé"},{"$i":"add-action","$v":"Ajouter"},{"$i":"cancel-action","$v":"Annuler"},{"$i":"add-application","$v":"Ajouter l’application"},{"$i":"add","$v":"Ajouter"},{"$i":"application-available","$v":"Une application est disponible pour ce site web."},{"$i":"remove-title","$v":["Supprimer ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Supprimer ",{"t":"idOrVar","v":"name"}," du système ?"]},{"$i":"remove-action","$v":"Supprimer"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Engadiuse á pantalla inicial"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Feito"},{"$i":"add-action","$v":"Engadir"},{"$i":"cancel-action","$v":"Cancelar"},{"$i":"add-application","$v":"Engadir aplicativo"},{"$i":"add","$v":"Engadir"},{"$i":"application-available","$v":"Un aplicativo está dispoñíbel para este sitio web."},{"$i":"remove-title","$v":["Retirar ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Retirar ",{"t":"idOrVar","v":"name"}," do sistema?"]},{"$i":"remove-action","$v":"Retirar"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Dodano na početnu stranicu"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Završeno"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Ukloni ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Ukloni ",{"t":"idOrVar","v":"name"}," iz sustava?"]},{"$i":"remove-action","$v":"Ukloni"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Hozzáadva a kezdőképernyőhöz"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Kész"},{"$i":"add-action","$v":"Hozzáadás"},{"$i":"cancel-action","$v":"Mégse"},{"$i":"add-application","$v":"Alkalmazás hozzáadása"},{"$i":"add","$v":"Hozzáadás"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," eltávolítása"]},{"$i":"remove-message","$v":["Eltávolítja ezt a rendszerből: ",{"t":"idOrVar","v":"name"},"?"]},{"$i":"remove-action","$v":"Eltávolítás"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Schermata principale"},{"$i":"edit-pinned-site-title","$v":"Modifica sito"},{"$i":"added-to-home-screen-message","$v":"Aggiunto alla schermata principale"},{"$i":"updated-pinned-site","$v":"Segnalibro aggiornato"},{"$i":"done-action","$v":"Fine"},{"$i":"add-action","$v":"Aggiungi"},{"$i":"cancel-action","$v":"Annulla"},{"$i":"add-application","$v":"Aggiungi applicazione"},{"$i":"add","$v":"Aggiungi"},{"$i":"application-available","$v":"È disponibile un’applicazione per questo sito web."},{"$i":"remove-title","$v":["Elimina ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Eliminare ",{"t":"idOrVar","v":"name"}," dal sistema?"]},{"$i":"remove-action","$v":"Elimina"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"ホーム画面に追加"},{"$i":"edit-pinned-site-title","$v":"ピン留めサイトの編集"},{"$i":"added-to-home-screen-message","$v":"ホーム画面に追加しました"},{"$i":"updated-pinned-site","$v":"ピン留めしたサイトを更新しました"},{"$i":"done-action","$v":"完了"},{"$i":"add-action","$v":"追加"},{"$i":"cancel-action","$v":"キャンセル"},{"$i":"add-application","$v":"アプリを追加"},{"$i":"add","$v":"追加"},{"$i":"application-available","$v":"この Web サイトのアプリケーションが利用可能です。"},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," の削除"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," をシステムから削除しますか?"]},{"$i":"remove-action","$v":"削除"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"បាន​បន្ថែម​ទៅ​អេក្រង់ដើម"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"ធ្វើរួច"},{"$i":"add-action","$v":"បន្ថែម"},{"$i":"cancel-action","$v":"បោះបង់"},{"$i":"add-application","$v":"បន្ថែម​កម្មវិធី"},{"$i":"add","$v":"បន្ថែម"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["លុប​ ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["លុប",{"t":"idOrVar","v":"name"}," ចេញ​ពី​ប្រព័ន្ធ?"]},{"$i":"remove-action","$v":"យកចេញ"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"홈 스크린에 추가"},{"$i":"edit-pinned-site-title","$v":"고정된 사이트 수정"},{"$i":"added-to-home-screen-message","$v":"홈 스크린에 추가됨"},{"$i":"updated-pinned-site","$v":"고정된 사이트 수정됨"},{"$i":"done-action","$v":"완료"},{"$i":"add-action","$v":"추가"},{"$i":"cancel-action","$v":"취소"},{"$i":"add-application","$v":"어플리케이션 추가"},{"$i":"add","$v":"추가"},{"$i":"application-available","$v":"이 웹사이트용 어플리케이션이 있습니다."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," 삭제"]},{"$i":"remove-message","$v":["시스템에서 ",{"t":"idOrVar","v":"name"}," 항목을 삭제하시겠습니까?"]},{"$i":"remove-action","$v":"삭제"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Pridėjimas į Pradžios ekraną"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Saitas pridėtas į Pradžios ekraną"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Baigta"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["„",{"t":"idOrVar","v":"name"},"“ šalinimas"]},{"$i":"remove-message","$v":["Ar pašalinti „",{"t":"idOrVar","v":"name"},"“ iš sistemos?"]},{"$i":"remove-action","$v":"Pašalinti"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Added to home screen"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Done"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Remove ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Remove ",{"t":"idOrVar","v":"name"}," from system?"]},{"$i":"remove-action","$v":"Remove"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Tambah ke skrin utama"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Ditambah ke skrin utama"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Selesai"},{"$i":"add-action","$v":"Tambah"},{"$i":"cancel-action","$v":"Batal"},{"$i":"add-application","$v":"Tambah Aplikasi"},{"$i":"add","$v":"Tambah"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Singkir ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Singkir ",{"t":"idOrVar","v":"name"}," dari sistem?"]},{"$i":"remove-action","$v":"Singkir"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"होमस्क्रिनमा थपियो"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"पूरा भयो"},{"$i":"add-action","$v":"थप्नुहोस्"},{"$i":"cancel-action","$v":"रद्द गर्नुहोस्"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"थप्नुहोस्"},{"$i":"application-available","$v":"यो वेबसाइटको लागि एउटा अनुप्रयोग उपलब्ध छ ।"},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," हटाउनुहोस्"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," लाई प्रणालीबाट हटाउने?"]},{"$i":"remove-action","$v":"हटाउनुहोस्"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Toevoegen aan startscherm"},{"$i":"edit-pinned-site-title","$v":"Vastgezette website bewerken"},{"$i":"added-to-home-screen-message","$v":"Toegevoegd aan startscherm"},{"$i":"updated-pinned-site","$v":"Vastgezette website bijgewerkt"},{"$i":"done-action","$v":"Gereed"},{"$i":"add-action","$v":"Toevoegen"},{"$i":"cancel-action","$v":"Annuleren"},{"$i":"add-application","$v":"Applicatie toevoegen"},{"$i":"add","$v":"Toevoegen"},{"$i":"application-available","$v":"Er is een applicatie voor deze website beschikbaar."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," verwijderen"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," van systeem verwijderen?"]},{"$i":"remove-action","$v":"Verwijderen"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"ਮੁੱਖ ਸਕਰੀਨ ਉੱਤੇ ਜੋੜੋ"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"ਮੁੱਖ ਸਕਰੀਨ ਉੱਤੇ ਜੋੜਿਆ"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"ਮੁਕੰਮਲ"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," ਹਟਾਓ"]},{"$i":"remove-message","$v":["ਕੀ ਸਿਸਟਮ ਤੋਂ ",{"t":"idOrVar","v":"name"}," ਨੂੰ ਹਟਾਉਣਾ ਹੈ?"]},{"$i":"remove-action","$v":"ਹਟਾਓ"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Dodano do ekranu głównego"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Gotowe"},{"$i":"add-action","$v":"Dodaj"},{"$i":"cancel-action","$v":"Anuluj"},{"$i":"add-application","$v":"Dodaj aplikację"},{"$i":"add","$v":"Dodaj"},{"$i":"application-available","$v":"Dla tej strony jest dostępna aplikacja."},{"$i":"remove-title","$v":["Usuwanie „",{"t":"idOrVar","v":"name"},"”"]},{"$i":"remove-message","$v":["Usunąć „",{"t":"idOrVar","v":"name"},"” z systemu?"]},{"$i":"remove-action","$v":"Usuń"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Adicionar a página inicial"},{"$i":"edit-pinned-site-title","$v":"Editar site fixado"},{"$i":"added-to-home-screen-message","$v":"Adicionado a tela inicial"},{"$i":"updated-pinned-site","$v":"Site fixado atualizado"},{"$i":"done-action","$v":"Pronto"},{"$i":"add-action","$v":"Adicionar"},{"$i":"cancel-action","$v":"Cancelar"},{"$i":"add-application","$v":"Adicionar aplicativo"},{"$i":"add","$v":"Adicionar"},{"$i":"application-available","$v":"Um aplicativo está disponível para este web site."},{"$i":"remove-title","$v":["Remover ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Remover ",{"t":"idOrVar","v":"name"}," do sistema?"]},{"$i":"remove-action","$v":"Remover"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Adaugă la ecranul principal"},{"$i":"edit-pinned-site-title","$v":"Editează site-ul fixat"},{"$i":"added-to-home-screen-message","$v":"Adăugat la ecranul principal"},{"$i":"updated-pinned-site","$v":"Site fixat actualizat"},{"$i":"done-action","$v":"Gata"},{"$i":"add-action","$v":"Adaugă"},{"$i":"cancel-action","$v":"Renunță"},{"$i":"add-application","$v":"Adaugă aplicație"},{"$i":"add","$v":"Adaugă"},{"$i":"application-available","$v":"O aplicație este disponibilă pentru acest site web."},{"$i":"remove-title","$v":["Elimină ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Elimini ",{"t":"idOrVar","v":"name"}," din sistem?"]},{"$i":"remove-action","$v":"Elimină"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Добавить на домашний экран"},{"$i":"edit-pinned-site-title","$v":"Изменение сайта"},{"$i":"added-to-home-screen-message","$v":"Добавлен на домашний экран"},{"$i":"updated-pinned-site","$v":"Обновлённый прикреплённый сайт"},{"$i":"done-action","$v":"Готово"},{"$i":"add-action","$v":"Добавить"},{"$i":"cancel-action","$v":"Отмена"},{"$i":"add-application","$v":"Добавить приложение"},{"$i":"add","$v":"Добавить"},{"$i":"application-available","$v":"Для этого веб-сайта доступно приложение."},{"$i":"remove-title","$v":["Удаление ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Удалить ",{"t":"idOrVar","v":"name"}," из системы?"]},{"$i":"remove-action","$v":"Удалить"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Pridať na Úvodnú obrazovku"},{"$i":"edit-pinned-site-title","$v":"Úprava pripnutej stránky"},{"$i":"added-to-home-screen-message","$v":"Pridaný na Úvodnú obrazovku"},{"$i":"updated-pinned-site","$v":"Pripnutá stránka aktualizovaná"},{"$i":"done-action","$v":"Hotovo"},{"$i":"add-action","$v":"Pridať"},{"$i":"cancel-action","$v":"Zrušiť"},{"$i":"add-application","$v":"Pridať aplikáciu"},{"$i":"add","$v":"Pridať"},{"$i":"application-available","$v":"Pre túto stránku je dostupná aplikácia."},{"$i":"remove-title","$v":["Odstrániť ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Odstrániť ",{"t":"idOrVar","v":"name"}," zo systému?"]},{"$i":"remove-action","$v":"Odstrániť"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Shtojeni te Kreu"},{"$i":"edit-pinned-site-title","$v":"Përpunoni Sajte të Fiksuar"},{"$i":"added-to-home-screen-message","$v":"U shtua te kreu"},{"$i":"updated-pinned-site","$v":"Sajtet e përditësuar u fiksuan"},{"$i":"done-action","$v":"U bë"},{"$i":"add-action","$v":"Shtoje"},{"$i":"cancel-action","$v":"Anulojeni"},{"$i":"add-application","$v":"Shtoni Aplikacion"},{"$i":"add","$v":"Shtoje"},{"$i":"application-available","$v":"Për këtë sajt ka gati një aplikacion."},{"$i":"remove-title","$v":["Hiqeni ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Të hiqet ",{"t":"idOrVar","v":"name"}," nga sistemi?"]},{"$i":"remove-action","$v":"Hiqe"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Додај на почетни екран"},{"$i":"edit-pinned-site-title","$v":"Уреди закачен сајт"},{"$i":"added-to-home-screen-message","$v":"Додато на почетни екран"},{"$i":"updated-pinned-site","$v":"Закачен сајт је ажуриран"},{"$i":"done-action","$v":"Готово"},{"$i":"add-action","$v":"Додај"},{"$i":"cancel-action","$v":"Откажи"},{"$i":"add-application","$v":"Додај апликацију"},{"$i":"add","$v":"Додај"},{"$i":"application-available","$v":"Нека апликација је доступна за овај веб сајт."},{"$i":"remove-title","$v":["Уклони ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Уклони ",{"t":"idOrVar","v":"name"}," из система?"]},{"$i":"remove-action","$v":"Уклони"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Dodaj na početni ekran"},{"$i":"edit-pinned-site-title","$v":"Uredi zakačen sajt"},{"$i":"added-to-home-screen-message","$v":"Dodato na početni ekran"},{"$i":"updated-pinned-site","$v":"Zakačen sajt je ažuriran"},{"$i":"done-action","$v":"Gotovo"},{"$i":"add-action","$v":"Dodaj"},{"$i":"cancel-action","$v":"Otkaži"},{"$i":"add-application","$v":"Dodaj aplikaciju"},{"$i":"add","$v":"Dodaj"},{"$i":"application-available","$v":"Neka aplikacija je dostupna za ovaj veb sajt."},{"$i":"remove-title","$v":["Ukloni ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Ukloni ",{"t":"idOrVar","v":"name"}," iz sistema?"]},{"$i":"remove-action","$v":"Ukloni"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Lägg till på hemskärmen"},{"$i":"edit-pinned-site-title","$v":"Redigera fäst webbsida"},{"$i":"added-to-home-screen-message","$v":"Lades till på hemskärmen"},{"$i":"updated-pinned-site","$v":"Uppdatera fäst webbsida"},{"$i":"done-action","$v":"Klar"},{"$i":"add-action","$v":"Lägg till"},{"$i":"cancel-action","$v":"Avbryt"},{"$i":"add-application","$v":"Lägg till applikation"},{"$i":"add","$v":"Lägg till"},{"$i":"application-available","$v":"En applikation är tillgängliga för denna webbplats."},{"$i":"remove-title","$v":["Ta bort ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Ta bort ",{"t":"idOrVar","v":"name"}," från systemet?"]},{"$i":"remove-action","$v":"Ta bort"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Sabitlenmiş siteyi düzenle"},{"$i":"added-to-home-screen-message","$v":"Ana ekrana eklendi"},{"$i":"updated-pinned-site","$v":"Sabitlenmiş siteyi güncelle"},{"$i":"done-action","$v":"Bitti"},{"$i":"add-action","$v":"Ekle"},{"$i":"cancel-action","$v":"İptal"},{"$i":"add-application","$v":"Uygulamayı ekle"},{"$i":"add","$v":"Ekle"},{"$i":"application-available","$v":"Bu web sitesinin uygulaması var."},{"$i":"remove-title","$v":["Kaldır: ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," sistemden kaldırılsın mı?"]},{"$i":"remove-action","$v":"Kaldır"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"添加到主屏幕"},{"$i":"edit-pinned-site-title","$v":"编辑已固定的站点"},{"$i":"added-to-home-screen-message","$v":"已添加到主屏幕"},{"$i":"updated-pinned-site","$v":"已更新固定的站点"},{"$i":"done-action","$v":"完成"},{"$i":"add-action","$v":"添加"},{"$i":"cancel-action","$v":"取消"},{"$i":"add-application","$v":"添加应用程序"},{"$i":"add","$v":"添加"},{"$i":"application-available","$v":"此网站有一个应用程序可用。"},{"$i":"remove-title","$v":["移除 ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["从系统中移除 ",{"t":"idOrVar","v":"name"},"?"]},{"$i":"remove-action","$v":"删除"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"新增至裝置主畫面"},{"$i":"edit-pinned-site-title","$v":"編輯釘選的網站"},{"$i":"added-to-home-screen-message","$v":"已新增至裝置主畫面"},{"$i":"updated-pinned-site","$v":"已更新釘選網站"},{"$i":"done-action","$v":"完成"},{"$i":"add-action","$v":"新增"},{"$i":"cancel-action","$v":"取消"},{"$i":"add-application","$v":"新增應用程式"},{"$i":"add","$v":"新增"},{"$i":"application-available","$v":"有此網站的應用程式可用。"},{"$i":"remove-title","$v":["移除 ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["自系統移除 ",{"t":"idOrVar","v":"name"},"?"]},{"$i":"remove-action","$v":"移除"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"أضف إلى الشاشة الرئيسية"},{"$i":"edit-pinned-site-title","$v":"تعديل الموقع المثبت"},{"$i":"added-to-home-screen-message","$v":"أُضيفَ إلى الشاشة الرئيسية"},{"$i":"updated-pinned-site","$v":"الموقع المثبت المحدث"},{"$i":"done-action","$v":"تمّ"},{"$i":"add-action","$v":"إضافة"},{"$i":"cancel-action","$v":"ألغِ"},{"$i":"add-application","$v":"إضافة تطبيق"},{"$i":"add","$v":"إضافة"},{"$i":"application-available","$v":"هناك تطبيق متاح لهذا الموقع."},{"$i":"remove-title","$v":["احذف ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["أأحذف ",{"t":"idOrVar","v":"name"}," من النظام؟"]},{"$i":"remove-action","$v":"احذف"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Добавена към началния екран"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Готово"},{"$i":"add-action","$v":"Добавяне"},{"$i":"cancel-action","$v":"Отказ"},{"$i":"add-application","$v":"Добавяне на приложение"},{"$i":"add","$v":"Добавяне"},{"$i":"application-available","$v":"Налично е приложение за този уеб сайт."},{"$i":"remove-title","$v":["Премахване на ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Премахване на ",{"t":"idOrVar","v":"name"}," от системата?"]},{"$i":"remove-action","$v":"Премахване"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"হোম স্ক্রিনে যুক্ত করুন"},{"$i":"edit-pinned-site-title","$v":"পিন করা পাতা সম্পাদনা করুন"},{"$i":"added-to-home-screen-message","$v":"প্রধান স্ক্রিনে যুক্ত হয়েছে"},{"$i":"updated-pinned-site","$v":"পিন করা পাতা হালনাগাদ করুন"},{"$i":"done-action","$v":"সম্পন্ন"},{"$i":"add-action","$v":"যোগ"},{"$i":"cancel-action","$v":"বাতিল"},{"$i":"add-application","$v":"অ্যাপ্লিকেশন যোগ"},{"$i":"add","$v":"যোগ"},{"$i":"application-available","$v":"এই ওয়েবসাইটের জন্য একটি অ্যাপ্লিকেশন রয়েছে।"},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," অপসারণ"]},{"$i":"remove-message","$v":["সিস্টেম থেকে ",{"t":"idOrVar","v":"name"}," অপসারণ করবেন?"]},{"$i":"remove-action","$v":"অপসারণ"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Afegeix a la pantalla d'inici"},{"$i":"edit-pinned-site-title","$v":"Edita el lloc fix"},{"$i":"added-to-home-screen-message","$v":"S'ha afegit a la pantalla d'inici"},{"$i":"updated-pinned-site","$v":"S'ha actualitzat el lloc fix"},{"$i":"done-action","$v":"Fet"},{"$i":"add-action","$v":"Afegeix"},{"$i":"cancel-action","$v":"Cancel·la"},{"$i":"add-application","$v":"Afegeix l'aplicació"},{"$i":"add","$v":"Afegeix"},{"$i":"application-available","$v":"Hi ha una aplicació disponible per aquest lloc web."},{"$i":"remove-title","$v":["Elimina ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Voleu eliminar «",{"t":"idOrVar","v":"name"},"» del sistema?"]},{"$i":"remove-action","$v":"Elimina"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Přidat na domovskou obrazovku"},{"$i":"edit-pinned-site-title","$v":"Upravit připnutou stránku"},{"$i":"added-to-home-screen-message","$v":"Přidáno na domovskou obrazovku"},{"$i":"updated-pinned-site","$v":"Aktualizovaná připnutá stránka"},{"$i":"done-action","$v":"Hotovo"},{"$i":"add-action","$v":"Přidat"},{"$i":"cancel-action","$v":"Zrušit"},{"$i":"add-application","$v":"Přidat aplikaci"},{"$i":"add","$v":"Přidat"},{"$i":"application-available","$v":"Pro tento web je k dispozici aplikace."},{"$i":"remove-title","$v":["Odebrání ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Odebrat ",{"t":"idOrVar","v":"name"}," ze systému?"]},{"$i":"remove-action","$v":"Odebrat"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Føj til startskærm"},{"$i":"edit-pinned-site-title","$v":"Rediger fastgjort websted"},{"$i":"added-to-home-screen-message","$v":"Føjet til startskærm"},{"$i":"updated-pinned-site","$v":"Opdaterede fastgjort websted"},{"$i":"done-action","$v":"Færdig"},{"$i":"add-action","$v":"Tilføj"},{"$i":"cancel-action","$v":"Fortryd"},{"$i":"add-application","$v":"Tilføj app"},{"$i":"add","$v":"Tilføj"},{"$i":"application-available","$v":"En app er tilgængelig for dette websted."},{"$i":"remove-title","$v":["Fjern ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Fjern ",{"t":"idOrVar","v":"name"}," frs systemet?"]},{"$i":"remove-action","$v":"Fjern"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Zum Startbildschirm hinzufügen"},{"$i":"edit-pinned-site-title","$v":"Angeheftete Seite bearbeiten"},{"$i":"added-to-home-screen-message","$v":"Zum Startbildschirm hinzugefügt"},{"$i":"updated-pinned-site","$v":"Angeheftete Seite aktualisieren"},{"$i":"done-action","$v":"Fertig"},{"$i":"add-action","$v":"Hinzufügen"},{"$i":"cancel-action","$v":"Abbrechen"},{"$i":"add-application","$v":"Anwendung hinzufügen"},{"$i":"add","$v":"Hinzufügen"},{"$i":"application-available","$v":"Für diese Webseite ist eine Anwendung verfügbar."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," entfernen"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," vom System entfernen?"]},{"$i":"remove-action","$v":"Entfernen"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Προσθήκη"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Προστέθηκε στην αρχική οθόνη"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"ΟΚ"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Ακύρωση"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Αφαίρεση ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Αφαίρεση ",{"t":"idOrVar","v":"name"}," από το σύστημα;"]},{"$i":"remove-action","$v":"Αφαίρεση"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Added to home screen"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Done"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Remove ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Remove ",{"t":"idOrVar","v":"name"}," from system?"]},{"$i":"remove-action","$v":"Remove"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Añadir a pant. inicio"},{"$i":"edit-pinned-site-title","$v":"Editar sitio fijado"},{"$i":"added-to-home-screen-message","$v":"Añadido a pantalla inicio"},{"$i":"updated-pinned-site","$v":"Sitio fijado actualizado"},{"$i":"done-action","$v":"Hecho"},{"$i":"add-action","$v":"Agregar"},{"$i":"cancel-action","$v":"Cancelar"},{"$i":"add-application","$v":"Agregar app"},{"$i":"add","$v":"Agregar"},{"$i":"application-available","$v":"Hay una aplicación disponible para este sitio web."},{"$i":"remove-title","$v":["Eliminar ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["¿Eliminar ",{"t":"idOrVar","v":"name"}," del sistema?"]},{"$i":"remove-action","$v":"Eliminar"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Gehitu hasiera-pantailari"},{"$i":"edit-pinned-site-title","$v":"Editatu ainguratutako gunea"},{"$i":"added-to-home-screen-message","$v":"Hasierako pantailara gehituta"},{"$i":"updated-pinned-site","$v":"Ainguratutako gunea eguneratuta"},{"$i":"done-action","$v":"Eginda"},{"$i":"add-action","$v":"Gehitu"},{"$i":"cancel-action","$v":"Utzi"},{"$i":"add-application","$v":"Gehitu aplikazioa"},{"$i":"add","$v":"Gehitu"},{"$i":"application-available","$v":"Webgune honetarako aplikazio bat eskuragarri dago."},{"$i":"remove-title","$v":["Kendu ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," sistematik kendu?"]},{"$i":"remove-action","$v":"Kendu"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Ajouter à l’accueil"},{"$i":"edit-pinned-site-title","$v":"Modifier site épinglé"},{"$i":"added-to-home-screen-message","$v":"Ajouté à l’écran d’accueil"},{"$i":"updated-pinned-site","$v":"Site épinglé mis à jour"},{"$i":"done-action","$v":"Terminé"},{"$i":"add-action","$v":"Ajouter"},{"$i":"cancel-action","$v":"Annuler"},{"$i":"add-application","$v":"Ajouter l’application"},{"$i":"add","$v":"Ajouter"},{"$i":"application-available","$v":"Une application est disponible pour ce site web."},{"$i":"remove-title","$v":["Supprimer ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Supprimer ",{"t":"idOrVar","v":"name"}," du système ?"]},{"$i":"remove-action","$v":"Supprimer"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Engadiuse á pantalla inicial"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Feito"},{"$i":"add-action","$v":"Engadir"},{"$i":"cancel-action","$v":"Cancelar"},{"$i":"add-application","$v":"Engadir aplicativo"},{"$i":"add","$v":"Engadir"},{"$i":"application-available","$v":"Un aplicativo está dispoñíbel para este sitio web."},{"$i":"remove-title","$v":["Retirar ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Retirar ",{"t":"idOrVar","v":"name"}," do sistema?"]},{"$i":"remove-action","$v":"Retirar"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Dodano na početnu stranicu"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Završeno"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Ukloni ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Ukloni ",{"t":"idOrVar","v":"name"}," iz sustava?"]},{"$i":"remove-action","$v":"Ukloni"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Hozzáadva a kezdőképernyőhöz"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Kész"},{"$i":"add-action","$v":"Hozzáadás"},{"$i":"cancel-action","$v":"Mégse"},{"$i":"add-application","$v":"Alkalmazás hozzáadása"},{"$i":"add","$v":"Hozzáadás"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," eltávolítása"]},{"$i":"remove-message","$v":["Eltávolítja ezt a rendszerből: ",{"t":"idOrVar","v":"name"},"?"]},{"$i":"remove-action","$v":"Eltávolítás"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Schermata principale"},{"$i":"edit-pinned-site-title","$v":"Modifica sito"},{"$i":"added-to-home-screen-message","$v":"Aggiunto alla schermata principale"},{"$i":"updated-pinned-site","$v":"Segnalibro aggiornato"},{"$i":"done-action","$v":"Fine"},{"$i":"add-action","$v":"Aggiungi"},{"$i":"cancel-action","$v":"Annulla"},{"$i":"add-application","$v":"Aggiungi applicazione"},{"$i":"add","$v":"Aggiungi"},{"$i":"application-available","$v":"È disponibile un’applicazione per questo sito web."},{"$i":"remove-title","$v":["Elimina ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Eliminare ",{"t":"idOrVar","v":"name"}," dal sistema?"]},{"$i":"remove-action","$v":"Elimina"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"ホーム画面に追加"},{"$i":"edit-pinned-site-title","$v":"ピン留めサイトの編集"},{"$i":"added-to-home-screen-message","$v":"ホーム画面に追加しました"},{"$i":"updated-pinned-site","$v":"ピン留めしたサイトを更新しました"},{"$i":"done-action","$v":"完了"},{"$i":"add-action","$v":"追加"},{"$i":"cancel-action","$v":"キャンセル"},{"$i":"add-application","$v":"アプリを追加"},{"$i":"add","$v":"追加"},{"$i":"application-available","$v":"この Web サイトのアプリケーションが利用可能です。"},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," の削除"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," をシステムから削除しますか?"]},{"$i":"remove-action","$v":"削除"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"បាន​បន្ថែម​ទៅ​អេក្រង់ដើម"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"ធ្វើរួច"},{"$i":"add-action","$v":"បន្ថែម"},{"$i":"cancel-action","$v":"បោះបង់"},{"$i":"add-application","$v":"បន្ថែម​កម្មវិធី"},{"$i":"add","$v":"បន្ថែម"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["លុប​ ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["លុប",{"t":"idOrVar","v":"name"}," ចេញ​ពី​ប្រព័ន្ធ?"]},{"$i":"remove-action","$v":"យកចេញ"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"홈 스크린에 추가"},{"$i":"edit-pinned-site-title","$v":"고정된 사이트 수정"},{"$i":"added-to-home-screen-message","$v":"홈 스크린에 추가됨"},{"$i":"updated-pinned-site","$v":"고정된 사이트 수정됨"},{"$i":"done-action","$v":"완료"},{"$i":"add-action","$v":"추가"},{"$i":"cancel-action","$v":"취소"},{"$i":"add-application","$v":"어플리케이션 추가"},{"$i":"add","$v":"추가"},{"$i":"application-available","$v":"이 웹사이트용 어플리케이션이 있습니다."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," 삭제"]},{"$i":"remove-message","$v":["시스템에서 ",{"t":"idOrVar","v":"name"}," 항목을 삭제하시겠습니까?"]},{"$i":"remove-action","$v":"삭제"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Pridėjimas į Pradžios ekraną"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Saitas pridėtas į Pradžios ekraną"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Baigta"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["„",{"t":"idOrVar","v":"name"},"“ šalinimas"]},{"$i":"remove-message","$v":["Ar pašalinti „",{"t":"idOrVar","v":"name"},"“ iš sistemos?"]},{"$i":"remove-action","$v":"Pašalinti"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Added to home screen"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Done"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Remove ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Remove ",{"t":"idOrVar","v":"name"}," from system?"]},{"$i":"remove-action","$v":"Remove"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Tambah ke skrin utama"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Ditambah ke skrin utama"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Selesai"},{"$i":"add-action","$v":"Tambah"},{"$i":"cancel-action","$v":"Batal"},{"$i":"add-application","$v":"Tambah Aplikasi"},{"$i":"add","$v":"Tambah"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":["Singkir ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Singkir ",{"t":"idOrVar","v":"name"}," dari sistem?"]},{"$i":"remove-action","$v":"Singkir"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"होमस्क्रिनमा थपियो"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"पूरा भयो"},{"$i":"add-action","$v":"थप्नुहोस्"},{"$i":"cancel-action","$v":"रद्द गर्नुहोस्"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"थप्नुहोस्"},{"$i":"application-available","$v":"यो वेबसाइटको लागि एउटा अनुप्रयोग उपलब्ध छ ।"},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," हटाउनुहोस्"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," लाई प्रणालीबाट हटाउने?"]},{"$i":"remove-action","$v":"हटाउनुहोस्"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Toevoegen aan startscherm"},{"$i":"edit-pinned-site-title","$v":"Vastgezette website bewerken"},{"$i":"added-to-home-screen-message","$v":"Toegevoegd aan startscherm"},{"$i":"updated-pinned-site","$v":"Vastgezette website bijgewerkt"},{"$i":"done-action","$v":"Gereed"},{"$i":"add-action","$v":"Toevoegen"},{"$i":"cancel-action","$v":"Annuleren"},{"$i":"add-application","$v":"Applicatie toevoegen"},{"$i":"add","$v":"Toevoegen"},{"$i":"application-available","$v":"Er is een applicatie voor deze website beschikbaar."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," verwijderen"]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," van systeem verwijderen?"]},{"$i":"remove-action","$v":"Verwijderen"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"ਮੁੱਖ ਸਕਰੀਨ ਉੱਤੇ ਜੋੜੋ"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"ਮੁੱਖ ਸਕਰੀਨ ਉੱਤੇ ਜੋੜਿਆ"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"ਮੁਕੰਮਲ"},{"$i":"add-action","$v":"Add"},{"$i":"cancel-action","$v":"Cancel"},{"$i":"add-application","$v":"Add Application"},{"$i":"add","$v":"Add"},{"$i":"application-available","$v":"An application is available for this web site."},{"$i":"remove-title","$v":[{"t":"idOrVar","v":"name"}," ਹਟਾਓ"]},{"$i":"remove-message","$v":["ਕੀ ਸਿਸਟਮ ਤੋਂ ",{"t":"idOrVar","v":"name"}," ਨੂੰ ਹਟਾਉਣਾ ਹੈ?"]},{"$i":"remove-action","$v":"ਹਟਾਓ"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Edit Pinned Site"},{"$i":"added-to-home-screen-message","$v":"Dodano do ekranu głównego"},{"$i":"updated-pinned-site","$v":"Updated pinned site"},{"$i":"done-action","$v":"Gotowe"},{"$i":"add-action","$v":"Dodaj"},{"$i":"cancel-action","$v":"Anuluj"},{"$i":"add-application","$v":"Dodaj aplikację"},{"$i":"add","$v":"Dodaj"},{"$i":"application-available","$v":"Dla tej strony jest dostępna aplikacja."},{"$i":"remove-title","$v":["Usuwanie „",{"t":"idOrVar","v":"name"},"”"]},{"$i":"remove-message","$v":["Usunąć „",{"t":"idOrVar","v":"name"},"” z systemu?"]},{"$i":"remove-action","$v":"Usuń"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Adicionar a página inicial"},{"$i":"edit-pinned-site-title","$v":"Editar site fixado"},{"$i":"added-to-home-screen-message","$v":"Adicionado a tela inicial"},{"$i":"updated-pinned-site","$v":"Site fixado atualizado"},{"$i":"done-action","$v":"Pronto"},{"$i":"add-action","$v":"Adicionar"},{"$i":"cancel-action","$v":"Cancelar"},{"$i":"add-application","$v":"Adicionar aplicativo"},{"$i":"add","$v":"Adicionar"},{"$i":"application-available","$v":"Um aplicativo está disponível para este web site."},{"$i":"remove-title","$v":["Remover ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Remover ",{"t":"idOrVar","v":"name"}," do sistema?"]},{"$i":"remove-action","$v":"Remover"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Adaugă la ecranul principal"},{"$i":"edit-pinned-site-title","$v":"Editează site-ul fixat"},{"$i":"added-to-home-screen-message","$v":"Adăugat la ecranul principal"},{"$i":"updated-pinned-site","$v":"Site fixat actualizat"},{"$i":"done-action","$v":"Gata"},{"$i":"add-action","$v":"Adaugă"},{"$i":"cancel-action","$v":"Renunță"},{"$i":"add-application","$v":"Adaugă aplicație"},{"$i":"add","$v":"Adaugă"},{"$i":"application-available","$v":"O aplicație este disponibilă pentru acest site web."},{"$i":"remove-title","$v":["Elimină ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Elimini ",{"t":"idOrVar","v":"name"}," din sistem?"]},{"$i":"remove-action","$v":"Elimină"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Добавить на домашний экран"},{"$i":"edit-pinned-site-title","$v":"Изменение сайта"},{"$i":"added-to-home-screen-message","$v":"Добавлен на домашний экран"},{"$i":"updated-pinned-site","$v":"Обновлённый прикреплённый сайт"},{"$i":"done-action","$v":"Готово"},{"$i":"add-action","$v":"Добавить"},{"$i":"cancel-action","$v":"Отмена"},{"$i":"add-application","$v":"Добавить приложение"},{"$i":"add","$v":"Добавить"},{"$i":"application-available","$v":"Для этого веб-сайта доступно приложение."},{"$i":"remove-title","$v":["Удаление ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Удалить ",{"t":"idOrVar","v":"name"}," из системы?"]},{"$i":"remove-action","$v":"Удалить"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Pridať na Úvodnú obrazovku"},{"$i":"edit-pinned-site-title","$v":"Úprava pripnutej stránky"},{"$i":"added-to-home-screen-message","$v":"Pridaný na Úvodnú obrazovku"},{"$i":"updated-pinned-site","$v":"Pripnutá stránka aktualizovaná"},{"$i":"done-action","$v":"Hotovo"},{"$i":"add-action","$v":"Pridať"},{"$i":"cancel-action","$v":"Zrušiť"},{"$i":"add-application","$v":"Pridať aplikáciu"},{"$i":"add","$v":"Pridať"},{"$i":"application-available","$v":"Pre túto stránku je dostupná aplikácia."},{"$i":"remove-title","$v":["Odstrániť ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Odstrániť ",{"t":"idOrVar","v":"name"}," zo systému?"]},{"$i":"remove-action","$v":"Odstrániť"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Shtojeni te Kreu"},{"$i":"edit-pinned-site-title","$v":"Përpunoni Sajte të Fiksuar"},{"$i":"added-to-home-screen-message","$v":"U shtua te kreu"},{"$i":"updated-pinned-site","$v":"Sajtet e përditësuar u fiksuan"},{"$i":"done-action","$v":"U bë"},{"$i":"add-action","$v":"Shtoje"},{"$i":"cancel-action","$v":"Anulojeni"},{"$i":"add-application","$v":"Shtoni Aplikacion"},{"$i":"add","$v":"Shtoje"},{"$i":"application-available","$v":"Për këtë sajt ka gati një aplikacion."},{"$i":"remove-title","$v":["Hiqeni ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Të hiqet ",{"t":"idOrVar","v":"name"}," nga sistemi?"]},{"$i":"remove-action","$v":"Hiqe"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Додај на почетни екран"},{"$i":"edit-pinned-site-title","$v":"Уреди закачен сајт"},{"$i":"added-to-home-screen-message","$v":"Додато на почетни екран"},{"$i":"updated-pinned-site","$v":"Закачен сајт је ажуриран"},{"$i":"done-action","$v":"Готово"},{"$i":"add-action","$v":"Додај"},{"$i":"cancel-action","$v":"Откажи"},{"$i":"add-application","$v":"Додај апликацију"},{"$i":"add","$v":"Додај"},{"$i":"application-available","$v":"Нека апликација је доступна за овај веб сајт."},{"$i":"remove-title","$v":["Уклони ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Уклони ",{"t":"idOrVar","v":"name"}," из система?"]},{"$i":"remove-action","$v":"Уклони"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Dodaj na početni ekran"},{"$i":"edit-pinned-site-title","$v":"Uredi zakačen sajt"},{"$i":"added-to-home-screen-message","$v":"Dodato na početni ekran"},{"$i":"updated-pinned-site","$v":"Zakačen sajt je ažuriran"},{"$i":"done-action","$v":"Gotovo"},{"$i":"add-action","$v":"Dodaj"},{"$i":"cancel-action","$v":"Otkaži"},{"$i":"add-application","$v":"Dodaj aplikaciju"},{"$i":"add","$v":"Dodaj"},{"$i":"application-available","$v":"Neka aplikacija je dostupna za ovaj veb sajt."},{"$i":"remove-title","$v":["Ukloni ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Ukloni ",{"t":"idOrVar","v":"name"}," iz sistema?"]},{"$i":"remove-action","$v":"Ukloni"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Lägg till på hemskärmen"},{"$i":"edit-pinned-site-title","$v":"Redigera fäst webbsida"},{"$i":"added-to-home-screen-message","$v":"Lades till på hemskärmen"},{"$i":"updated-pinned-site","$v":"Uppdatera fäst webbsida"},{"$i":"done-action","$v":"Klar"},{"$i":"add-action","$v":"Lägg till"},{"$i":"cancel-action","$v":"Avbryt"},{"$i":"add-application","$v":"Lägg till applikation"},{"$i":"add","$v":"Lägg till"},{"$i":"application-available","$v":"En applikation är tillgängliga för denna webbplats."},{"$i":"remove-title","$v":["Ta bort ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["Ta bort ",{"t":"idOrVar","v":"name"}," från systemet?"]},{"$i":"remove-action","$v":"Ta bort"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"Add to Home Screen"},{"$i":"edit-pinned-site-title","$v":"Sabitlenmiş siteyi düzenle"},{"$i":"added-to-home-screen-message","$v":"Ana ekrana eklendi"},{"$i":"updated-pinned-site","$v":"Sabitlenmiş siteyi güncelle"},{"$i":"done-action","$v":"Bitti"},{"$i":"add-action","$v":"Ekle"},{"$i":"cancel-action","$v":"İptal"},{"$i":"add-application","$v":"Uygulamayı ekle"},{"$i":"add","$v":"Ekle"},{"$i":"application-available","$v":"Bu web sitesinin uygulaması var."},{"$i":"remove-title","$v":["Kaldır: ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":[{"t":"idOrVar","v":"name"}," sistemden kaldırılsın mı?"]},{"$i":"remove-action","$v":"Kaldır"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"添加到主屏幕"},{"$i":"edit-pinned-site-title","$v":"编辑已固定的站点"},{"$i":"added-to-home-screen-message","$v":"已添加到主屏幕"},{"$i":"updated-pinned-site","$v":"已更新固定的站点"},{"$i":"done-action","$v":"完成"},{"$i":"add-action","$v":"添加"},{"$i":"cancel-action","$v":"取消"},{"$i":"add-application","$v":"添加应用程序"},{"$i":"add","$v":"添加"},{"$i":"application-available","$v":"此网站有一个应用程序可用。"},{"$i":"remove-title","$v":["移除 ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["从系统中移除 ",{"t":"idOrVar","v":"name"},"?"]},{"$i":"remove-action","$v":"删除"}]

View file

@ -0,0 +1 @@
[{"$i":"add-to-home-screen-title","$v":"新增至裝置主畫面"},{"$i":"edit-pinned-site-title","$v":"編輯釘選的網站"},{"$i":"added-to-home-screen-message","$v":"已新增至裝置主畫面"},{"$i":"updated-pinned-site","$v":"已更新釘選網站"},{"$i":"done-action","$v":"完成"},{"$i":"add-action","$v":"新增"},{"$i":"cancel-action","$v":"取消"},{"$i":"add-application","$v":"新增應用程式"},{"$i":"add","$v":"新增"},{"$i":"application-available","$v":"有此網站的應用程式可用。"},{"$i":"remove-title","$v":["移除 ",{"t":"idOrVar","v":"name"}]},{"$i":"remove-message","$v":["自系統移除 ",{"t":"idOrVar","v":"name"},"?"]},{"$i":"remove-action","$v":"移除"}]

View file

@ -0,0 +1 @@
{"name":"Bookmark","description":"Bookmark Manager","type":"certified","role":"system","developer":{"name":"The Gaia Team","url":"https://github.com/mozilla-b2g/gaia"},"permissions":{"themeable":{},"systemXHR":{},"moz-extremely-unstable-and-will-change-webcomponents":{}},"activities":{"save-bookmark":{"filters":{"type":"url","url":{"required":true,"pattern":"(https?|rtsp|data):.{1,16384}"}},"disposition":"inline","href":"/save.html","returnValue":true},"remove-bookmark":{"filters":{"type":"url","url":{"required":true,"pattern":"(https?|rtsp|data):.{1,16384}"}},"disposition":"inline","href":"/remove.html","returnValue":true}},"locales":{"ar":{"name":"العلامات المرجعيّة","description":"مدير العلامات المرجعيّة"},"bg":{"name":"Отметка","description":"Управление на отметки"},"bn-BD":{"name":"বুকমার্ক","description":"বুকমার্ক ব্যবস্থাপক"},"ca":{"name":"Adreça d'interès","description":"Gestor d'adreces d'interès"},"cs":{"name":"Záložky","description":"Správce záložek"},"da":{"name":"Bogmærke","description":"Bogmærke-manager"},"de":{"name":"Lesezeichen","description":"Lesezeichenverwaltung"},"el":{"name":"Σελιδοδείκτης","description":"Διαχείριση Σελιδοδείκτη"},"en-US":{"name":"Bookmark","description":"Bookmark Manager"},"es":{"name":"Marcadores","description":"Administrador de marcadores"},"eu":{"name":"Laster-marka","description":"Laster-marken kudeatzailea"},"fr":{"name":"Marque-pages","description":"Gestionnaire de marque-pages"},"gl":{"name":"Marcador","description":"Xestor de marcadores"},"hr":{"name":"Zabilješka","description":"Upravitelj zabilješki"},"hu":{"name":"Könyvjelző","description":"Könyvjelzőkezelő"},"it":{"name":"Segnalibro","description":"Gestione segnalibri"},"ja":{"name":"ブックマーク","description":"ブックマーク管理"},"km":{"name":"ចំណាំ","description":"កម្មវិធីគ្រប់គ្រងចំណាំ"},"ko":{"name":"북마크","description":"북마크 관리"},"lt":{"name":"Saitas","description":"Saitų tvarkytuvė"},"mk":{"name":"Bookmark","description":"Bookmark Manager"},"ms":{"name":"Penandabuku","description":"Pengurus Penandabuku"},"ne-NP":{"name":"पुस्तकचिनो","description":"पुस्तकचिनो प्रबन्धक"},"nl":{"name":"Bladwijzer","description":"Bladwijzerbeheerder"},"pa":{"name":"ਬੁੱਕਮਾਰਕ","description":"ਬੁੱਕਮਾਰਕ ਮੈਨੇਜਰ"},"pl":{"name":"Zakładki","description":"Menedżer zakładek"},"pt-BR":{"name":"Favoritos","description":"Gerenciador de favoritos"},"ro":{"name":"Semn de carte","description":"Managerul semnelor de carte"},"ru":{"name":"Закладки","description":"Управление закладками"},"sk":{"name":"Záložky","description":"Správca záložiek"},"sq":{"name":"Faqerojtës","description":"Përgjegjës Faqerojtësish"},"sr-Cyrl":{"name":"Забелешка","description":"Менаџер забелешки"},"sr-Latn":{"name":"Zabeleška","description":"Menadžer zabeleški"},"sv-SE":{"name":"Bokmärke","description":"Hantera bokmärken"},"tr":{"name":"Yer imi","description":"Yer İmi Yöneticisi"},"zh-CN":{"name":"书签","description":"管理书签"},"zh-TW":{"name":"書籤","description":"書籤管理員"}},"default_locale":"en-US","datastores-owned":{"bookmarks_store":{"access":"readwrite","certified-only":false,"description":"Stores bookmarks"}},"origin":"app://bookmark.gaiamobile.org","version":"2.5"}

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
<link rel="stylesheet" type="text/css" href="style/common.css">
<link rel="stylesheet" type="text/css" href="shared/style/confirm.css">
<!-- <script type="text/javascript" src="shared/js/l10n.js"></script> --><script src="./gaia_build_remove.js" type="text/javascript"></script>
<!-- <script type="text/javascript" defer="" src="shared/js/bookmarks_database.js"></script> -->
<!-- <script type="text/javascript" defer="" src="js/bookmark_remover.js"></script> -->
<!-- <script type="text/javascript" defer="" src="js/activity_handler.js"></script> --><script src="./gaia_build_defer_remove.js" defer="" type="text/javascript"></script>
<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/remove.{locale}.json">
<meta content="2.5" name="appVersion"></head>
<body>
<form role="dialog" data-type="confirm">
<section>
<h1 id="title"></h1>
<p id="message"></p>
</section>
<menu>
<button id="cancel-action" type="button" data-l10n-id="cancel-action">Cancel</button>
<button id="remove-action" type="button" data-l10n-id="remove-action" class="danger">Remove</button>
</menu>
</form>
</body>
</html>

View file

@ -0,0 +1,65 @@
<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1">
<link rel="stylesheet" type="text/css" href="style/common.css">
<link rel="stylesheet" type="text/css" href="style/save.css">
<!-- Shared code -->
<!-- <script type="text/javascript" src="shared/js/l10n.js"></script> --><script src="./gaia_build_save.js" type="text/javascript"></script>
<!-- <script type="text/javascript" defer="" src="shared/js/url_helper.js"></script> -->
<!-- <script type="text/javascript" defer="" src="shared/js/bookmarks_database.js"></script> -->
<!-- <script type="text/javascript" defer="" src="shared/js/web_manifest_helper.js"></script> -->
<!-- <script type="text/javascript" defer="" src="shared/js/icons_helper.js"></script> -->
<!-- <script type="text/javascript" defer="" src="/shared/elements/gaia-header/dist/gaia-header.js"></script> -->
<link rel="stylesheet" type="text/css" href="shared/style/buttons.css">
<link rel="stylesheet" type="text/css" href="shared/style/headers.css">
<link rel="stylesheet" type="text/css" href="shared/style/input_areas.css">
<link rel="stylesheet" type="text/css" href="shared/style/status.css">
<link rel="stylesheet" type="text/css" href="/shared/elements/gaia-icons/gaia-icons.css">
<link rel="stylesheet" type="text/css" href="app://theme.gaiamobile.org/shared/elements/gaia-theme/gaia-theme.css">
<!-- Link to component just to copy the default_icon here -->
<!-- <script defer src="shared/elements/gaia_grid/script.js"></script> -->
<!-- <script defer="" src="shared/elements/gaia_grid/js/grid_icon_renderer.js"></script> -->
<!-- <script defer="" src="shared/js/homescreens/icon.js"></script> -->
<!-- Specific code -->
<!-- <script type="text/javascript" defer="" src="js/bookmark_editor.js"></script> -->
<!-- <script type="text/javascript" defer="" src="js/components/status.js"></script> -->
<!-- <script type="text/javascript" defer="" src="js/activity_handler.js"></script> --><script src="./gaia_build_defer_save.js" defer="" type="text/javascript"></script>
<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/save.{locale}.json">
<meta content="2.5" name="appVersion"></head>
<body class="theme-settings">
<section id="bookmark-entry-sheet" role="region" class="skin-organic">
<gaia-header id="header" action="close">
<h1 id="add-bookmark-header" data-l10n-id="add-to-home-screen-title">Add to Home Screen</h1>
<h1 id="edit-bookmark-header" data-l10n-id="edit-pinned-site-title">Edit Pinned Site</h1>
<button id="done-button" data-l10n-id="add-action">Add</button>
</gaia-header>
<form id="bookmark-form">
<div id="bookmark-icon"></div>
<p id="bookmark-url" dir="ltr"></p>
<p>
<input id="bookmark-title" dir="auto" type="text">
<button id="bookmark-title-clear" type="reset">Clear</button>
</p>
</form>
<div id="app-installation" class="hidden">
<h2><span data-l10n-id="add-application">Add Application</span></h2>
<img id="app-icon-placeholder" src="../shared/elements/gaia_grid/images/default_icon.png">
<img id="app-icon" class="hidden">
<p id="app-name"></p>
<button id="install-app-button" data-l10n-id="add">Add</button>
<p data-l10n-id="application-available">An application is available for this web site.</p>
</div>
</section>
</body>
</html>

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

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