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.
|
|
@ -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');}});
|
||||
471
assets/webapps/bookmark.gaiamobile.org/gaia_build_defer_save.js
Normal 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');}});
|
||||
245
assets/webapps/bookmark.gaiamobile.org/gaia_build_remove.js
Normal 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={'&':'&','<':'<','>':'>',};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);
|
||||
245
assets/webapps/bookmark.gaiamobile.org/gaia_build_save.js
Normal 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={'&':'&','<':'<','>':'>',};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);
|
||||
|
|
@ -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');}});
|
||||
|
|
@ -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));}};
|
||||
|
|
@ -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);}};
|
||||
|
|
@ -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%)
|
||||
}
|
||||
}
|
||||
|
|
@ -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;}};})();
|
||||
18
assets/webapps/bookmark.gaiamobile.org/jsdoc.json
Normal 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"
|
||||
}
|
||||
}
|
||||
|
|
@ -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":"احذف"}]
|
||||
|
|
@ -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":"Премахване"}]
|
||||
|
|
@ -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":"অপসারণ"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"Αφαίρεση"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"削除"}]
|
||||
|
|
@ -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":"យកចេញ"}]
|
||||
|
|
@ -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":"삭제"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"हटाउनुहोस्"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"ਹਟਾਓ"}]
|
||||
|
|
@ -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ń"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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ă"}]
|
||||
|
|
@ -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":"Удалить"}]
|
||||
|
|
@ -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ť"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"Уклони"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"删除"}]
|
||||
|
|
@ -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":"移除"}]
|
||||
|
|
@ -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":"احذف"}]
|
||||
|
|
@ -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":"Премахване"}]
|
||||
|
|
@ -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":"অপসারণ"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"Αφαίρεση"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"削除"}]
|
||||
|
|
@ -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":"យកចេញ"}]
|
||||
|
|
@ -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":"삭제"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"हटाउनुहोस्"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"ਹਟਾਓ"}]
|
||||
|
|
@ -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ń"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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ă"}]
|
||||
|
|
@ -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":"Удалить"}]
|
||||
|
|
@ -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ť"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"Уклони"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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"}]
|
||||
|
|
@ -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":"删除"}]
|
||||
|
|
@ -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":"移除"}]
|
||||
1
assets/webapps/bookmark.gaiamobile.org/manifest.webapp
Executable 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"}
|
||||
33
assets/webapps/bookmark.gaiamobile.org/remove.html
Normal 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>
|
||||
65
assets/webapps/bookmark.gaiamobile.org/save.html
Normal 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>
|
||||
373
assets/webapps/bookmark.gaiamobile.org/shared/elements/gaia-header/dist/gaia-header.js
vendored
Normal 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)});
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
After Width: | Height: | Size: 312 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.1 KiB |