diff --git a/404.php b/404.php index d90d7df7a..9fd4270f4 100644 --- a/404.php +++ b/404.php @@ -24,18 +24,6 @@ * International Registered Trademark & Property of PrestaShop SA */ -/* Send the proper status code in HTTP headers */ -header('HTTP/1.1 404 Not Found'); -header('Status: 404 Not Found'); - -if (in_array(substr($_SERVER['REQUEST_URI'], -3), array('png', 'jpg', 'gif'))) -{ - require_once(dirname(__FILE__).'/config/settings.inc.php'); - header('Location: '.__PS_BASE_URI__.'img/404.gif'); - exit; -} -elseif (in_array(substr($_SERVER['REQUEST_URI'], -3), array('.js', 'css'))) - die(''); - require_once(dirname(__FILE__).'/config/config.inc.php'); +Tools::displayFileAsDeprecated(); Controller::getController('PageNotFoundController')->run(); diff --git a/admin-dev/ajax-tab.php b/admin-dev/ajax-tab.php index 684278d34..24c751f9d 100755 --- a/admin-dev/ajax-tab.php +++ b/admin-dev/ajax-tab.php @@ -25,8 +25,8 @@ */ define('_PS_ADMIN_DIR_', getcwd()); -require(dirname(__FILE__).'/../config/config.inc.php'); -require(dirname(__FILE__).'/functions.php'); +require(_PS_ADMIN_DIR_.'/../config/config.inc.php'); +require(_PS_ADMIN_DIR_.'/functions.php'); // For retrocompatibility with "tab" parameter if (!isset($_GET['controller']) && isset($_GET['tab'])) diff --git a/admin-dev/ajax.php b/admin-dev/ajax.php index 5ec0197ac..8f41e44cb 100644 --- a/admin-dev/ajax.php +++ b/admin-dev/ajax.php @@ -27,7 +27,7 @@ define('_PS_ADMIN_DIR_', getcwd()); include(_PS_ADMIN_DIR_.'/../config/config.inc.php'); /* Getting cookie or logout */ -require_once(dirname(__FILE__).'/init.php'); +require_once(_PS_ADMIN_DIR_.'/init.php'); $context = Context::getContext(); diff --git a/admin-dev/ajax_products_list.php b/admin-dev/ajax_products_list.php index 64ee54211..f14a9a8c8 100644 --- a/admin-dev/ajax_products_list.php +++ b/admin-dev/ajax_products_list.php @@ -27,7 +27,7 @@ define('_PS_ADMIN_DIR_', getcwd()); include(_PS_ADMIN_DIR_.'/../config/config.inc.php'); /* Getting cookie or logout */ -require_once(dirname(__FILE__).'/init.php'); +require_once(_PS_ADMIN_DIR_.'/init.php'); $query = Tools::getValue('q', false); if (!$query OR $query == '' OR strlen($query) < 1) diff --git a/admin-dev/backup.php b/admin-dev/backup.php index e4b451f43..8a4f66fef 100644 --- a/admin-dev/backup.php +++ b/admin-dev/backup.php @@ -33,15 +33,15 @@ if (!Context::getContext()->employee->isLoggedBack()) $tabAccess = Profile::getProfileAccess(Context::getContext()->employee->id_profile, Tab::getIdFromClassName('AdminBackup')); if ($tabAccess['view'] !== '1') - die (Tools::displayError('You do not have permission to view here')); + die (Tools::displayError('You do not have permission to view this.')); $backupdir = realpath(_PS_ADMIN_DIR_ . '/backups/'); if ($backupdir === false) - die (Tools::displayError('"Backup" directory does not exist.')); + die (Tools::displayError('A "Backup" directory does not exist.')); if (!$backupfile = Tools::getValue('filename')) - die (Tools::displayError('No file specified')); + die (Tools::displayError('No file has been specified.')); // Check the realpath so we can validate the backup file is under the backup directory $backupfile = realpath($backupdir.'/'.$backupfile); @@ -58,7 +58,7 @@ else $fp = @fopen($backupfile, 'r'); if ($fp === false) - die (Tools::displayError('Unable to open backup file').' "'.addslashes($backupfile).'"'); + die (Tools::displayError('Unable to open backup file(s).').' "'.addslashes($backupfile).'"'); // Add the correct headers, this forces the file is saved header('Content-Type: '.$contentType); @@ -70,4 +70,4 @@ $ret = @fpassthru($fp); fclose($fp); if ($ret === false) - die (Tools::displayError('Unable to display backup file').' "'.addslashes($backupfile).'"'); \ No newline at end of file + die (Tools::displayError('Unable to display backup file(s).').' "'.addslashes($backupfile).'"'); \ No newline at end of file diff --git a/admin-dev/displayImage.php b/admin-dev/displayImage.php index e48f4f290..f873fdb22 100644 --- a/admin-dev/displayImage.php +++ b/admin-dev/displayImage.php @@ -25,8 +25,8 @@ */ define('_PS_ADMIN_DIR_', getcwd()); -require_once(dirname(__FILE__).'/../config/config.inc.php'); -require_once(dirname(__FILE__).'/init.php'); +require_once(_PS_ADMIN_DIR_.'/../config/config.inc.php'); +require_once(_PS_ADMIN_DIR_.'/init.php'); if (isset($_GET['img']) AND Validate::isMd5($_GET['img']) AND isset($_GET['name']) AND Validate::isGenericName($_GET['name']) AND file_exists(_PS_UPLOAD_DIR_.$_GET['img'])) { diff --git a/admin-dev/drawer.php b/admin-dev/drawer.php index d155d25c5..c52ea4547 100644 --- a/admin-dev/drawer.php +++ b/admin-dev/drawer.php @@ -25,7 +25,7 @@ */ define('_PS_ADMIN_DIR_', getcwd()); -include_once(dirname(__FILE__).'/../config/config.inc.php'); +include_once(_PS_ADMIN_DIR_.'/../config/config.inc.php'); $module = Tools::getValue('module'); $render = Tools::getValue('render'); diff --git a/admin-dev/functions.php b/admin-dev/functions.php index 888f9bb24..351670003 100644 --- a/admin-dev/functions.php +++ b/admin-dev/functions.php @@ -250,7 +250,7 @@ function checkingTab($tab) { if (isset(AdminTab::$tabParenting[$tab])) Tools::redirectAdmin('?tab='.AdminTab::$tabParenting[$tab].'&token='.Tools::getAdminTokenLite(AdminTab::$tabParenting[$tab])); - echo sprintf(Tools::displayError('Page %s cannot be found.'),$tab); + echo sprintf(Tools::displayError('Page %s cannot be found..'),$tab); return false; } diff --git a/admin-dev/get-file-admin.php b/admin-dev/get-file-admin.php index 1a6c855db..b37f691e5 100644 --- a/admin-dev/get-file-admin.php +++ b/admin-dev/get-file-admin.php @@ -25,5 +25,5 @@ */ define('_PS_ADMIN_DIR_', getcwd()); -require(dirname(dirname(__FILE__)).'/config/config.inc.php'); +require(_PS_ADMIN_DIR_.'/config/config.inc.php'); Controller::getController('GetFileController')->run(); \ No newline at end of file diff --git a/admin-dev/grider.php b/admin-dev/grider.php index 0ba54a8a6..6e97baf68 100644 --- a/admin-dev/grider.php +++ b/admin-dev/grider.php @@ -25,7 +25,7 @@ */ define('_PS_ADMIN_DIR_', getcwd()); -include_once(dirname(__FILE__).'/../config/config.inc.php'); +include_once(_PS_ADMIN_DIR_.'/../config/config.inc.php'); $module = Tools::getValue('module'); $render = Tools::getValue('render'); diff --git a/admin-dev/index.php b/admin-dev/index.php index 6da63272e..f5fcc246d 100644 --- a/admin-dev/index.php +++ b/admin-dev/index.php @@ -27,8 +27,8 @@ $timer_start = microtime(true); define('_PS_ADMIN_DIR_', getcwd()); -require(dirname(__FILE__).'/../config/config.inc.php'); -require(dirname(__FILE__).'/functions.php'); +require(_PS_ADMIN_DIR_.'/../config/config.inc.php'); +require(_PS_ADMIN_DIR_.'/functions.php'); //small test to clear cache after upgrade if (Configuration::get('PS_UPGRADE_CLEAR_CACHE')) diff --git a/admin-dev/searchcron.php b/admin-dev/searchcron.php index d3f75c9b4..c6a772464 100644 --- a/admin-dev/searchcron.php +++ b/admin-dev/searchcron.php @@ -25,7 +25,7 @@ */ define('_PS_ADMIN_DIR_', getcwd()); -include(dirname(__FILE__).'/../config/config.inc.php'); +include(_PS_ADMIN_DIR_.'/../config/config.inc.php'); Context::getContext()->shop->setContext(Shop::CONTEXT_ALL); if (substr(_COOKIE_KEY_, 34, 8) != Tools::getValue('token')) diff --git a/admin-dev/themes/default/css/admin.css b/admin-dev/themes/default/css/admin.css index b057f2c6e..349f6e998 100644 --- a/admin-dev/themes/default/css/admin.css +++ b/admin-dev/themes/default/css/admin.css @@ -199,7 +199,7 @@ a.module_toggle_all{color: #268CCD;} /*toolbarBox*/ .toolbar-placeholder {position:relative} -.toolbarBox {background-color: #F8F8F8; border: 1px solid #CCCCCC; margin-bottom:10px; padding: 5px 0; border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px;-o-border-radius:3px;position:relative;width: auto !important;} +.toolbarBox {background-color: #F8F8F8; border: 1px solid #CCCCCC; margin-bottom:10px; padding: 5px 0; border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px;-o-border-radius:3px;position:relative} .toolbarBox .pageTitle { margin-left:10px; line-height:48px} .toolbarBox .pageTitle h3 {font-size: 1.6em; font-weight: normal; line-height: 52px; margin: 0; padding: 0; text-shadow:0 1px 0 #fff;} .toolbarBox ul.cc_button {float:right;margin:0 5px 0 0;padding:0;} @@ -243,7 +243,7 @@ a.module_toggle_all{color: #268CCD;} .toolbarReduced {margin-right:221px} #modules_list_button {width:211px;height:63px;border:none;position:absolute;top:0;right:0;background-image:url('../img/modules_list_button.png');font-size: 1.6em;cursor:pointer;padding-left:45px} -#modules_list_container { +.toolbarBox #modules_list_container { background: none repeat scroll 0 0 #FFF; border: solid 1px #CCC; display: block; @@ -252,7 +252,7 @@ a.module_toggle_all{color: #268CCD;} width: 300px; position: absolute; right: 13px; - top: 83px; + top: 63px; z-index: 100; padding: 10px; box-shadow: 1px 5px 5px #CCCCCC; @@ -261,29 +261,29 @@ a.module_toggle_all{color: #268CCD;} opacity: 1; } -#modules_list_container #modules_list_container_content +.toolbarBox #modules_list_container #modules_list_container_content { max-height: 500px; overflow: auto; } -#modules_list_container #modules_list_container_tab {margin-top: 10px;width: auto;height: auto; } -#modules_list_container #modules_list_container_tab table {width: 100%;border-spacing: 0px; } -#modules_list_container #modules_list_container_tab tr { height: auto} -#modules_list_container #modules_list_container_tab tr.rowalt {background-color: #EEE} -#modules_list_container #modules_list_container_tab #tab_module_switch {margin-bottom: 10px;} -#modules_list_container #modules_list_loader {margin-top: 10px} -#modules_list_container .nav-tabs-modules:after {clear:both} -#modules_list_container .nav-tabs-modules > li {height: 19px;float:left} -#modules_list_container .nav-tabs-modules > li > a { +.toolbarBox #modules_list_container #modules_list_container_tab {margin-top: 10px;width: auto;height: auto; } +.toolbarBox #modules_list_container #modules_list_container_tab table {width: 100%;border-spacing: 0px; } +.toolbarBox #modules_list_container #modules_list_container_tab tr { height: auto} +.toolbarBox #modules_list_container #modules_list_container_tab tr.rowalt {background-color: #EEE} +.toolbarBox #modules_list_container #modules_list_container_tab #tab_module_switch {margin-bottom: 10px;} +.toolbarBox #modules_list_container #modules_list_loader {margin-top: 10px} +.toolbarBox #modules_list_container .nav-tabs-modules:after {clear: both;} +.toolbarBox #modules_list_container .nav-tabs-modules > li {height: 19px;} +.toolbarBox #modules_list_container .nav-tabs-modules > li > a { padding-right: 12px; padding-left: 12px; margin-right: 2px; line-height: 14px; } -#modules_list_container .nav-tabs-modules > li > a { +.toolbarBox #modules_list_container .nav-tabs-modules > li > a { padding-top: 8px; padding-bottom: 7px; border: 1px solid transparent; @@ -293,15 +293,15 @@ a.module_toggle_all{color: #268CCD;} border-radius: 4px 4px 0 0; } -#modules_list_container .nav-tabs-modules > li > a:hover { +.toolbarBox #modules_list_container .nav-tabs-modules > li > a:hover { border-color: #C0C0C0; background-color: #ffffff; } -#modules_list_container .nav-tabs-modules > li > a {border: 1px solid #ddd;border-bottom:none;} +.toolbarBox #modules_list_container .nav-tabs-modules > li > a {border: 1px solid #ddd;border-bottom:none;} -#modules_list_container .nav-tabs-modules > .active > a, -#modules_list_container .nav-tabs-modules > .active > a:hover { +.toolbarBox #modules_list_container .nav-tabs-modules > .active > a, +.toolbarBox #modules_list_container .nav-tabs-modules > .active > a:hover { color: #555555; cursor: default; background-color: #EEE; @@ -312,7 +312,7 @@ a.module_toggle_all{color: #268CCD;} -div.fix-toolbar {border-bottom: 1px solid #E0E0E0;position:fixed;top:0;opacity:0.9;z-index:500;width:90% !important;margin:auto} +div.fix-toolbar {border-bottom: 1px solid #E0E0E0;position:fixed;top:0;opacity:0.9;z-index:500;margin:auto} /*button upload files*/ #content .qq-upload-button { diff --git a/admin-dev/themes/default/template/controllers/backup/download/view.tpl b/admin-dev/themes/default/template/controllers/backup/download/view.tpl index d5ecb1bac..3a3fe6fbb 100644 --- a/admin-dev/themes/default/template/controllers/backup/download/view.tpl +++ b/admin-dev/themes/default/template/controllers/backup/download/view.tpl @@ -51,7 +51,7 @@
-

{l s='How to restore a database Backup in 10 easy steps:'}

+

{l s='How to restore a database backup in 10 easy steps:'}

  1. {l s='Set "Enable Shop" to "No" in the "Maintenance" page under the "Preferences" menu.'}
  2. {l s='Download the backup from the list below or from your FTP server (in the folder "admin/backups").'}
  3. @@ -61,7 +61,7 @@
  4. {l s='Unless you enabled the "Drop existing tables" option, you must delete all tables from your current database.'}
  5. {l s='At the top of the screen, please select the "Import" tab'}
  6. {l s='Click on the "Browse" button and select the backup file from your hard drive.'}
  7. -
  8. {l s='Check the max. allowed filesize (e.g. Max: 16MB)'}
    {l s='If your backup file exceeds this limit, contact your hosting provider for assistence. '}
  9. +
  10. {l s='Check the maximum filesize allowed (e.g. Max: 16MB)'}
    {l s='If your backup file exceeds this limit, contact your hosting provider for assistence. '}
  11. {l s='Click on the "Go" button and please wait patiently for the import process to conclude. This may take several minutes.'}
diff --git a/admin-dev/themes/default/template/controllers/backup/helpers/list/list_header.tpl b/admin-dev/themes/default/template/controllers/backup/helpers/list/list_header.tpl index 450e76cc7..ac3579c75 100644 --- a/admin-dev/themes/default/template/controllers/backup/helpers/list/list_header.tpl +++ b/admin-dev/themes/default/template/controllers/backup/helpers/list/list_header.tpl @@ -59,7 +59,7 @@
-

{l s='How to restore a database Backup in 10 easy steps:'}

+

{l s='How to restore a database backup in 10 easy steps:'}

  1. {l s='Set "Enable Shop" to "No" in the "Maintenance" page under the "Preferences" menu.'}
  2. {l s='Download the backup from the list below or from your FTP server (in the folder "admin/backups").'}
  3. @@ -69,7 +69,7 @@
  4. {l s='Unless you enabled the "Drop existing tables" option, you must delete all tables from your current database.'}
  5. {l s='At the top of the screen, please select the "Import" tab'}
  6. {l s='Click on the "Browse" button and select the backup file from your hard drive.'}
  7. -
  8. {l s='Check the max. allowed filesize (e.g. Max: 16MB)'}
    {l s='If your backup file exceeds this limit, contact your hosting provider for assistence. '}
  9. +
  10. {l s='Check the maximum filesize allowed (e.g. Max: 16MB)'}
    {l s='If your backup file exceeds this limit, contact your hosting provider for assistence. '}
  11. {l s='Click on the "Go" button and please wait patiently for the import process to conclude. This may take several minutes.'}
diff --git a/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl b/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl index 1fd8e4f7f..e8fecdbf5 100644 --- a/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl +++ b/admin-dev/themes/default/template/controllers/cart_rules/conditions.tpl @@ -42,12 +42,12 @@
-

{l s='The cart rule will be applied to the first X customers only.'}

+

{l s='The cart rule will be applied to the first "X" customers only.'}

-

{l s='A customer will only be able to use the cart rule X time(s).'}

+

{l s='A customer will only be able to use the cart rule "X" time(s).'}

{if $countries.unselected|@count + $countries.selected|@count > 1}
@@ -98,7 +98,7 @@

{l s='Unselected carriers'}



{l s='Selected carriers'}



id}{/if}
-

{l s='Cart rule information'}

+

{l s='Cart-rule information'}

{include file='controllers/cart_rules/informations.tpl'}
-

{l s='Cart rule conditions'}

+

{l s='Cart-rule conditions'}

{include file='controllers/cart_rules/conditions.tpl'}
-

{l s='Cart rule actions'}

+

{l s='Cart-rule actions'}

{include file='controllers/cart_rules/actions.tpl'}
diff --git a/admin-dev/themes/default/template/controllers/cart_rules/informations.tpl b/admin-dev/themes/default/template/controllers/cart_rules/informations.tpl index 86d97f771..ba957e11d 100644 --- a/admin-dev/themes/default/template/controllers/cart_rules/informations.tpl +++ b/admin-dev/themes/default/template/controllers/cart_rules/informations.tpl @@ -33,7 +33,7 @@ getFieldValue($currentObject, 'highlight')|intval}checked="checked"{/if} />

- {l s='If the voucher is not yet in the cart, it will be displayed under the cart in the cart summary.'} + {l s='If the voucher is not yet in the cart, it will be displayed in the cart summary.'}

diff --git a/admin-dev/themes/default/template/controllers/cart_rules/product_rule.tpl b/admin-dev/themes/default/template/controllers/cart_rules/product_rule.tpl index 0ff7e7f70..9c5d80438 100644 --- a/admin-dev/themes/default/template/controllers/cart_rules/product_rule.tpl +++ b/admin-dev/themes/default/template/controllers/cart_rules/product_rule.tpl @@ -8,7 +8,7 @@ {* Everything is on a single line in order to avoid a empty space between the [ ] and the word *} - [{if $product_rule_type == 'products'}{l s='Products:'}{elseif $product_rule_type == 'categories'}{l s='Categories:'}{elseif $product_rule_type == 'manufacturers'}{l s='Manufacturers:'}{elseif $product_rule_type == 'suppliers'}{l s='Suppliers:'}{elseif $product_rule_type == 'attributes'}{l s='Attributes'}{/if}] + [{if $product_rule_type == 'products'}{l s='Products:'}{elseif $product_rule_type == 'categories'}{l s='Categories:'}{elseif $product_rule_type == 'manufacturers'}{l s='Manufacturers:'}{elseif $product_rule_type == 'suppliers'}{l s='Suppliers'}{elseif $product_rule_type == 'attributes'}{l s='Attributes'}{/if}] {l s='The product(s) are matching on of these'} diff --git a/admin-dev/themes/default/template/controllers/cart_rules/product_rule_group.tpl b/admin-dev/themes/default/template/controllers/cart_rules/product_rule_group.tpl index 7ae68420d..8e9fad2dd 100644 --- a/admin-dev/themes/default/template/controllers/cart_rules/product_rule_group.tpl +++ b/admin-dev/themes/default/template/controllers/cart_rules/product_rule_group.tpl @@ -20,7 +20,7 @@ - +
diff --git a/admin-dev/themes/default/template/controllers/carts/helpers/view/view.tpl b/admin-dev/themes/default/template/controllers/carts/helpers/view/view.tpl index 5d94a7ae9..514dcaa75 100755 --- a/admin-dev/themes/default/template/controllers/carts/helpers/view/view.tpl +++ b/admin-dev/themes/default/template/controllers/carts/helpers/view/view.tpl @@ -138,13 +138,13 @@ {/if} {/foreach} - {l s='Total products:'} + {l s='Total cost of products:'} {displayWtPriceWithCurrency price=$total_products currency=$currency} {if $total_discounts != 0} - {l s='Total vouchers:'} + {l s='Total value of vouchers:'} {displayWtPriceWithCurrency price=$total_discounts currency=$currency} {/if} @@ -156,7 +156,7 @@ {/if} {if $cart->getOrderTotal(true, Cart::ONLY_SHIPPING) > 0} - {l s='Total shipping:'} + {l s='Total cost of shipping:'} {displayWtPriceWithCurrency price=$total_shipping currency=$currency} {/if} diff --git a/admin-dev/themes/default/template/controllers/customer_threads/helpers/list/list_header.tpl b/admin-dev/themes/default/template/controllers/customer_threads/helpers/list/list_header.tpl index 4df557c6e..9d6f43e32 100644 --- a/admin-dev/themes/default/template/controllers/customer_threads/helpers/list/list_header.tpl +++ b/admin-dev/themes/default/template/controllers/customer_threads/helpers/list/list_header.tpl @@ -58,7 +58,7 @@ {else} {$total_thread} - {if $total_thread > 1}{l s='new messages'}{else}{l s='new message'}{/if} + {if $total_thread > 1}{l s='New messages'}{else}{l s='New message'}{/if} {/if} diff --git a/admin-dev/themes/default/template/controllers/customer_threads/helpers/view/view.tpl b/admin-dev/themes/default/template/controllers/customer_threads/helpers/view/view.tpl index f581d8222..059e304e1 100644 --- a/admin-dev/themes/default/template/controllers/customer_threads/helpers/view/view.tpl +++ b/admin-dev/themes/default/template/controllers/customer_threads/helpers/view/view.tpl @@ -51,7 +51,7 @@

@@ -84,17 +84,17 @@ {l s='Language:'} {if isset($customerLanguage)}{$customerLanguage->name}{else}{l s='undefined'}{/if}
{l s='Newsletter:'} {if $customer->newsletter}{else}{/if}
{l s='Opt in:'} {if $customer->optin}{else}{/if}
- {l s='Age:'} {$customer_stats['age']} {if isset($customer->birthday['age'])}({$customer_birthday}){else}{l s='unknown'}{/if}

+ {l s='Age:'} {$customer_stats['age']} {if isset($customer->birthday['age'])}({$customer_birthday}){else}{l s='Unknown'}{/if}

{l s='Last update:'} {$last_update}
{l s='Status:'} {if $customer->active}{else}{/if} {if $customer->isGuest()}
- {l s='This customer is registered as.'} {l s='guest'} + {l s='This customer is registered as.'} {l s='Guest'} {if !$customer_exists}
-

+

{l s='This feature generates a random password before sending an email to your customer.'}
{else} diff --git a/admin-dev/themes/default/template/controllers/images/content.tpl b/admin-dev/themes/default/template/controllers/images/content.tpl index 3ac24b695..fbe4ac3cb 100644 --- a/admin-dev/themes/default/template/controllers/images/content.tpl +++ b/admin-dev/themes/default/template/controllers/images/content.tpl @@ -37,7 +37,7 @@
{l s='Regenerate thumbnails'}
- +
@@ -82,7 +82,7 @@
{if $safe_mode}
- {l s='PrestaShop has detected that your server configuration is not compatible with the new storage system (directive "safe_mode" is activated). You should continue to use the existing system.'} + {l s='PrestaShop has detected that your server configuration is not compatible with the new storage system (directive "safe_mode" is activated). You should therefore continue to use the existing system.'}
{else} diff --git a/admin-dev/themes/default/template/controllers/import/helpers/form/form.tpl b/admin-dev/themes/default/template/controllers/import/helpers/form/form.tpl index f83fea4dd..7f270fa20 100644 --- a/admin-dev/themes/default/template/controllers/import/helpers/form/form.tpl +++ b/admin-dev/themes/default/template/controllers/import/helpers/form/form.tpl @@ -50,7 +50,7 @@ console.log(truncateAuthorized); if (truncateAuthorized) { - if (!confirm('{l s='Are you sure you want to delete' js=1}' + ' ' + $.trim($('#entity > option:selected').text().toLowerCase()) + '{l s='?' js=1}')) + if (!confirm('{l s='Are you sure that you would like to delete this' js=1}' + ' ' + $.trim($('#entity > option:selected').text().toLowerCase()) + '{l s='?' js=1}')) { e.preventDefault(); } @@ -126,7 +126,7 @@ Uplaod{l s='Upload'}
- {l s='Click to see our samples import csv files.'} + {l s='Click to view our sample import csv files.'}
- {if empty($files_to_import)}{l s='You must upload a file for go to the next step.'}{/if} + {if empty($files_to_import)}{l s='You must upload a file in order to proceed to the next step'}{/if}

{l s='Note that the category import does not support categories of the same name.'}

{l s='Note that you can have several products with the same reference.'}

{if !count($files_to_import)}
@@ -222,7 +222,7 @@
-

{l s='*Required field'} +

{l s='* Required field'}
diff --git a/admin-dev/themes/default/template/controllers/information/helpers/view/view.tpl b/admin-dev/themes/default/template/controllers/information/helpers/view/view.tpl index 31732b562..782c4b834 100644 --- a/admin-dev/themes/default/template/controllers/information/helpers/view/view.tpl +++ b/admin-dev/themes/default/template/controllers/information/helpers/view/view.tpl @@ -70,7 +70,7 @@
- {l s='Configuration Information'} + {l s='Configuration information'}

{l s='This information must be provided when you report an issue on our bug tracker or forum.'}


@@ -113,7 +113,7 @@

{l s='Store information'}

- {l s='Prestashop version'}: {$shop.ps|escape:'htmlall':'UTF-8'} + {l s='PrestaShop version'}: {$shop.ps|escape:'htmlall':'UTF-8'}

{l s='Shop URL'}: {$shop.url|escape:'htmlall':'UTF-8'} diff --git a/admin-dev/themes/default/template/controllers/languages/helpers/form/form.tpl b/admin-dev/themes/default/template/controllers/languages/helpers/form/form.tpl index f91c24e11..d8b551b02 100644 --- a/admin-dev/themes/default/template/controllers/languages/helpers/form/form.tpl +++ b/admin-dev/themes/default/template/controllers/languages/helpers/form/form.tpl @@ -39,7 +39,7 @@ var langPackOk = "\"\" {l s='A language pack is available for this ISO.'}"; var langPackVersion = "{l s='The Prestashop version compatible with this language and your system is:'}"; var langPackInfo = "{l s='After creating the language, you can import the content of the language pack, which you can download under "Localization -- Translations."'}"; - var noLangPack = "\"\" {l s='No language pack available on prestashop.com for this ISO code'}"; + var noLangPack = "\"\" {l s='No language pack is available on prestashop.com for this ISO code'}"; var download = "{l s='Download'}"; $(document).ready(function() { diff --git a/admin-dev/themes/default/template/controllers/manufacturers/helpers/view/view.tpl b/admin-dev/themes/default/template/controllers/manufacturers/helpers/view/view.tpl index a28c52c20..7fe5e96b3 100644 --- a/admin-dev/themes/default/template/controllers/manufacturers/helpers/view/view.tpl +++ b/admin-dev/themes/default/template/controllers/manufacturers/helpers/view/view.tpl @@ -29,7 +29,7 @@

{$manufacturer->name}

-

{l s='Total addresses:'} {count($addresses)}

+

{l s='Total addresses'} {count($addresses)}


{if !count($addresses)} @@ -60,7 +60,7 @@ {/foreach} {/if} -

{l s='Total products:'} {count($products)}

+

{l s='Total products'} {count($products)}

{foreach $products AS $product}
{if !$product->hasAttributes()} diff --git a/admin-dev/themes/default/template/controllers/modules/favorites.tpl b/admin-dev/themes/default/template/controllers/modules/favorites.tpl index 3df17a423..13efe0e73 100755 --- a/admin-dev/themes/default/template/controllers/modules/favorites.tpl +++ b/admin-dev/themes/default/template/controllers/modules/favorites.tpl @@ -27,7 +27,7 @@ {l s='Description'} {l s='Status'} {l s='Tab'} - {l s='Categories:'} + {l s='Categories'} {l s='Interest'} {l s='Favorite'}   diff --git a/admin-dev/themes/default/template/controllers/modules/filters.tpl b/admin-dev/themes/default/template/controllers/modules/filters.tpl index dae64da67..2120dd7be 100644 --- a/admin-dev/themes/default/template/controllers/modules/filters.tpl +++ b/admin-dev/themes/default/template/controllers/modules/filters.tpl @@ -47,7 +47,7 @@

{l s='Do you have a %s account?' sprintf='PrestaShop Addons'}

- +
@@ -64,7 +64,7 @@
- +
diff --git a/admin-dev/themes/default/template/controllers/modules/page.tpl b/admin-dev/themes/default/template/controllers/modules/page.tpl index 9eaa78feb..f1e49c1d9 100644 --- a/admin-dev/themes/default/template/controllers/modules/page.tpl +++ b/admin-dev/themes/default/template/controllers/modules/page.tpl @@ -36,7 +36,7 @@

'.$this->l('Guide').'

-

'.$this->l('What is a referrer website?').'

+

'.$this->l('What is a referral website?').'

'.$this->l('When visiting a webpage, the referrer is the URL of the previous webpage from which a link was followed.').'
- '.$this->l('A referrer enables you to know which keywords are entered by visitors in search engines when getting to your shop and allows you to optimize web promotion.').'

+ '.$this->l('A referrer enables you to know which keywords visitors use in search engines when browsing for your online store.').'

'.$this->l('A referrer can be:').'

    -
  • '.$this->l('Someone who put a link on their website for your shop').'
  • -
  • '.$this->l('A partner with whom you made a link exchange in order to bring in sales or attract new customers').'
  • +
  • '.$this->l('Someone who posts a link to your shop.').'
  • +
  • '.$this->l('A partner who has agreed to a link exchange in order to attract new customers.').'

'; @@ -122,7 +122,7 @@ class StatsOrigin extends ModuleGraph protected function getData($layers) { - $this->_titles['main'] = $this->l('First 10 websites'); + $this->_titles['main'] = $this->l('Top ten referral websites'); $websites = $this->getOrigins($this->getDate()); $total = 0; $total2 = 0; diff --git a/modules/statsorigin/translations/de.php b/modules/statsorigin/translations/de.php index 972fb77e1..f79dc0f9e 100644 --- a/modules/statsorigin/translations/de.php +++ b/modules/statsorigin/translations/de.php @@ -4,18 +4,18 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsorigin}prestashop>statsorigin_998e4c5c80f27dec552e99dfed34889a'] = 'CSV-Export'; -$_MODULE['<{statsorigin}prestashop>statsorigin_a3dec1a06e19a810a9a4884293f666d0'] = 'Jemand, der einen Link zu Ihrem Shop auf seiner Webseite hat'; -$_MODULE['<{statsorigin}prestashop>statsorigin_7a82cc29e910ea0c07501d5fe809fd75'] = '10 erste Webseiten'; +$_MODULE['<{statsorigin}prestashop>statsorigin_c227be237c874ba6b2f8771d7b66b90e'] = 'Jemand, der einen Link zu Ihrem Shop auf seiner Webseite hat'; +$_MODULE['<{statsorigin}prestashop>statsorigin_450a7e38e636dd49f5dfb356f96d3996'] = '10 erste Webseiten'; $_MODULE['<{statsorigin}prestashop>statsorigin_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Andere'; -$_MODULE['<{statsorigin}prestashop>statsorigin_ada7786973910e9c8cb95f0450bf55c3'] = 'Anzeige der Webseiten, von denen Ihre Besucher kommen'; -$_MODULE['<{statsorigin}prestashop>statsorigin_64ae584c62d0992a911d52122ebefc9a'] = 'Was ist eine Referrer-Webseite?'; +$_MODULE['<{statsorigin}prestashop>statsorigin_009c731e158a4235be55aaeea5c05e49'] = 'Anzeige der Webseiten, von denen Ihre Besucher kommen'; +$_MODULE['<{statsorigin}prestashop>statsorigin_cec998cc46cd200fa97490137de2cc7f'] = 'Was ist eine Referrer-Webseite?'; $_MODULE['<{statsorigin}prestashop>statsorigin_77de261cf4c31a96146bcf1b52fd9856'] = 'Beim Besuch einer Webseite ist der Referrer die URL der vorherigen Webseite, von der ein Link folgte.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_d8d034b6911b1ce74bdb2158a14cd287'] = 'Ein Referrer informiert Sie darüber, welche Keywords Besucher in Suchmaschinen eingeben, wenn sie zu ihrem Shop kommen wollen, und optimiert damit auch Ihre Werbung im Web.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_95b90f58e843b56885beabf4802676a9'] = 'Ein Partner, mit dem Sie Links getauscht haben, um die Verkäufe zu erhöhen oder Neukunden anzuziehen'; +$_MODULE['<{statsorigin}prestashop>statsorigin_bb49f80b601ed472d433b934244b0afd'] = 'Ein Referrer informiert Sie darüber, welche Keywords Besucher in Suchmaschinen eingeben, wenn sie zu ihrem Shop kommen wollen, und optimiert damit auch Ihre Werbung im Web.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_ea87a2280d5cdb638a2727147a3dd85c'] = 'Ein Partner, mit dem Sie Links getauscht haben, um die Verkäufe zu erhöhen oder Neukunden anzuziehen'; $_MODULE['<{statsorigin}prestashop>statsorigin_f0b1507c6bdcdefb60a0e6f9b89d4ae8'] = 'Herkunft des Besuchers'; $_MODULE['<{statsorigin}prestashop>statsorigin_14542f5997c4a02d4276da364657f501'] = 'Direkt-Link'; $_MODULE['<{statsorigin}prestashop>statsorigin_3edf8ca26a1ec14dd6e91dd277ae1de6'] = 'Herkunft'; -$_MODULE['<{statsorigin}prestashop>statsorigin_b5c1b8a326be0d2fb25b3cf6da677d0e'] = 'Hier ist der Prozentsatz der 10 beliebtesten Referrer-Webseiten, über die Besucher zu Ihrem Shop gekommen sind.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_d7b5bac28f53a30e9d831b6a7fa2f484'] = 'Hier ist der Prozentsatz der 10 beliebtesten Referrer-Webseiten, über die Besucher zu Ihrem Shop gekommen sind.'; $_MODULE['<{statsorigin}prestashop>statsorigin_96b0141273eabab320119c467cdcaf17'] = 'Insgesamt'; $_MODULE['<{statsorigin}prestashop>statsorigin_0bebf95ee829c33f34fde535ed4ed100'] = 'Nur direkte Links'; $_MODULE['<{statsorigin}prestashop>statsorigin_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; diff --git a/modules/statsorigin/translations/es.php b/modules/statsorigin/translations/es.php index bae6aaa3b..1e49f3f73 100644 --- a/modules/statsorigin/translations/es.php +++ b/modules/statsorigin/translations/es.php @@ -4,17 +4,17 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsorigin}prestashop>statsorigin_998e4c5c80f27dec552e99dfed34889a'] = 'CSV Export'; -$_MODULE['<{statsorigin}prestashop>statsorigin_a3dec1a06e19a810a9a4884293f666d0'] = 'Alguien ha puesto un link de su tienda en su sitio Web'; -$_MODULE['<{statsorigin}prestashop>statsorigin_7a82cc29e910ea0c07501d5fe809fd75'] = '10 primeros sitios web'; +$_MODULE['<{statsorigin}prestashop>statsorigin_c227be237c874ba6b2f8771d7b66b90e'] = 'Alguien ha puesto un link de su tienda en su sitio Web'; +$_MODULE['<{statsorigin}prestashop>statsorigin_450a7e38e636dd49f5dfb356f96d3996'] = '10 primeros sitios web'; $_MODULE['<{statsorigin}prestashop>statsorigin_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Otros'; -$_MODULE['<{statsorigin}prestashop>statsorigin_ada7786973910e9c8cb95f0450bf55c3'] = 'Muestra los sitios Web de los que proceden sus visitantes'; -$_MODULE['<{statsorigin}prestashop>statsorigin_64ae584c62d0992a911d52122ebefc9a'] = '¿Cuál es el sitio web referente?'; +$_MODULE['<{statsorigin}prestashop>statsorigin_009c731e158a4235be55aaeea5c05e49'] = 'Muestra los sitios Web de los que proceden sus visitantes'; +$_MODULE['<{statsorigin}prestashop>statsorigin_cec998cc46cd200fa97490137de2cc7f'] = '¿Cuál es el sitio web referente?'; $_MODULE['<{statsorigin}prestashop>statsorigin_77de261cf4c31a96146bcf1b52fd9856'] = 'Cuando se visita una página web, el referente es la URL de la página web anterior desde la cual se siguió el enlace.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_d8d034b6911b1ce74bdb2158a14cd287'] = 'Un referente le permite saber qué palabras claves incorporan los visitantes en motores de búsqueda cuando intentan acceder a su tienda; y también optimizar su promoción en la Webrnrn'; -$_MODULE['<{statsorigin}prestashop>statsorigin_95b90f58e843b56885beabf4802676a9'] = 'Un colaborador con quien intercambió enlaces para aumentar las ventas o para atraer nueva clientela.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_bb49f80b601ed472d433b934244b0afd'] = 'Un referente le permite saber qué palabras claves incorporan los visitantes en motores de búsqueda cuando intentan acceder a su tienda; y también optimizar su promoción en la Webrnrn'; +$_MODULE['<{statsorigin}prestashop>statsorigin_ea87a2280d5cdb638a2727147a3dd85c'] = 'Un colaborador con quien intercambió enlaces para aumentar las ventas o para atraer nueva clientela.'; $_MODULE['<{statsorigin}prestashop>statsorigin_f0b1507c6bdcdefb60a0e6f9b89d4ae8'] = 'Procedencia de los visitantes'; $_MODULE['<{statsorigin}prestashop>statsorigin_3edf8ca26a1ec14dd6e91dd277ae1de6'] = 'Origen'; -$_MODULE['<{statsorigin}prestashop>statsorigin_b5c1b8a326be0d2fb25b3cf6da677d0e'] = 'Porcentaje de los diez mejores sitios referentes por los que pasan los visitantes para acceder a su tienda.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_d7b5bac28f53a30e9d831b6a7fa2f484'] = 'Porcentaje de los diez mejores sitios referentes por los que pasan los visitantes para acceder a su tienda.'; $_MODULE['<{statsorigin}prestashop>statsorigin_96b0141273eabab320119c467cdcaf17'] = 'Total'; $_MODULE['<{statsorigin}prestashop>statsorigin_0bebf95ee829c33f34fde535ed4ed100'] = 'Enlaces directos solamente'; $_MODULE['<{statsorigin}prestashop>statsorigin_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guía'; diff --git a/modules/statsorigin/translations/fr.php b/modules/statsorigin/translations/fr.php index 5f00bbe90..3c0ea6b51 100644 --- a/modules/statsorigin/translations/fr.php +++ b/modules/statsorigin/translations/fr.php @@ -4,18 +4,18 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsorigin}prestashop>statsorigin_998e4c5c80f27dec552e99dfed34889a'] = 'Export CSV'; -$_MODULE['<{statsorigin}prestashop>statsorigin_a3dec1a06e19a810a9a4884293f666d0'] = 'quelqu\'un qui a mis un lien de votre boutique sur son site'; -$_MODULE['<{statsorigin}prestashop>statsorigin_7a82cc29e910ea0c07501d5fe809fd75'] = '10 premiers sites'; +$_MODULE['<{statsorigin}prestashop>statsorigin_c227be237c874ba6b2f8771d7b66b90e'] = 'quelqu\'un qui a mis un lien de votre boutique sur son site'; +$_MODULE['<{statsorigin}prestashop>statsorigin_450a7e38e636dd49f5dfb356f96d3996'] = '10 premiers sites'; $_MODULE['<{statsorigin}prestashop>statsorigin_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Autres'; -$_MODULE['<{statsorigin}prestashop>statsorigin_ada7786973910e9c8cb95f0450bf55c3'] = 'Affiche les sites d\'origine de vos visiteurs'; +$_MODULE['<{statsorigin}prestashop>statsorigin_009c731e158a4235be55aaeea5c05e49'] = 'Affiche les sites d\'origine de vos visiteurs'; $_MODULE['<{statsorigin}prestashop>statsorigin_77de261cf4c31a96146bcf1b52fd9856'] = 'Lorsqu\'un internaute visite une page web, le site affluent est l\'URL du lien qu\'a suivi le visiteur pour accéder à sa page web actuelle.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_d8d034b6911b1ce74bdb2158a14cd287'] = 'Un référant vous permet de savoir quels sont les mots-clés tapés par les visiteurs dans les moteurs de recherche quand ils tentent d\'aller sur votre boutique ; et ainsi d\'optimiser le référencement de votre boutique.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_64ae584c62d0992a911d52122ebefc9a'] = 'Qu\'est-ce qu\'un site affluent (référant) ?'; -$_MODULE['<{statsorigin}prestashop>statsorigin_95b90f58e843b56885beabf4802676a9'] = 'un partenaire avec lequel vous avez fait un échange de lien visant à rapporter des ventes ou attirer de nouveaux clients'; +$_MODULE['<{statsorigin}prestashop>statsorigin_bb49f80b601ed472d433b934244b0afd'] = 'Un référant vous permet de savoir quels sont les mots-clés tapés par les visiteurs dans les moteurs de recherche quand ils tentent d\'aller sur votre boutique ; et ainsi d\'optimiser le référencement de votre boutique.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_cec998cc46cd200fa97490137de2cc7f'] = 'Qu\'est-ce qu\'un site affluent (référant) ?'; +$_MODULE['<{statsorigin}prestashop>statsorigin_ea87a2280d5cdb638a2727147a3dd85c'] = 'un partenaire avec lequel vous avez fait un échange de lien visant à rapporter des ventes ou attirer de nouveaux clients'; $_MODULE['<{statsorigin}prestashop>statsorigin_f0b1507c6bdcdefb60a0e6f9b89d4ae8'] = 'Sites affluents'; $_MODULE['<{statsorigin}prestashop>statsorigin_14542f5997c4a02d4276da364657f501'] = 'Lien direct'; $_MODULE['<{statsorigin}prestashop>statsorigin_3edf8ca26a1ec14dd6e91dd277ae1de6'] = 'Origine'; -$_MODULE['<{statsorigin}prestashop>statsorigin_b5c1b8a326be0d2fb25b3cf6da677d0e'] = 'Pourcentage des 10 meilleurs sites affluents par lesquels les visiteurs passent pour accéder à votre boutique.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_d7b5bac28f53a30e9d831b6a7fa2f484'] = 'Pourcentage des 10 meilleurs sites affluents par lesquels les visiteurs passent pour accéder à votre boutique.'; $_MODULE['<{statsorigin}prestashop>statsorigin_96b0141273eabab320119c467cdcaf17'] = 'Total'; $_MODULE['<{statsorigin}prestashop>statsorigin_0bebf95ee829c33f34fde535ed4ed100'] = 'Liens directs uniquement'; $_MODULE['<{statsorigin}prestashop>statsorigin_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; diff --git a/modules/statsorigin/translations/it.php b/modules/statsorigin/translations/it.php index 503f05ce3..8a13438cf 100644 --- a/modules/statsorigin/translations/it.php +++ b/modules/statsorigin/translations/it.php @@ -4,18 +4,18 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsorigin}prestashop>statsorigin_998e4c5c80f27dec552e99dfed34889a'] = 'Esporta CSV'; -$_MODULE['<{statsorigin}prestashop>statsorigin_a3dec1a06e19a810a9a4884293f666d0'] = 'Qualcuno che mettere un link sul suo sito web verso il tuo negozio'; -$_MODULE['<{statsorigin}prestashop>statsorigin_7a82cc29e910ea0c07501d5fe809fd75'] = 'I primi 10 siti web'; +$_MODULE['<{statsorigin}prestashop>statsorigin_c227be237c874ba6b2f8771d7b66b90e'] = 'Qualcuno che mettere un link sul suo sito web verso il tuo negozio'; +$_MODULE['<{statsorigin}prestashop>statsorigin_450a7e38e636dd49f5dfb356f96d3996'] = 'I primi 10 siti web'; $_MODULE['<{statsorigin}prestashop>statsorigin_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Altri'; -$_MODULE['<{statsorigin}prestashop>statsorigin_ada7786973910e9c8cb95f0450bf55c3'] = 'Visualizzare i siti web da cui provengono i tuoi visitatori'; -$_MODULE['<{statsorigin}prestashop>statsorigin_64ae584c62d0992a911d52122ebefc9a'] = 'Che cosa è un sito web di riferimento?'; +$_MODULE['<{statsorigin}prestashop>statsorigin_009c731e158a4235be55aaeea5c05e49'] = 'Visualizzare i siti web da cui provengono i tuoi visitatori'; +$_MODULE['<{statsorigin}prestashop>statsorigin_cec998cc46cd200fa97490137de2cc7f'] = 'Che cosa è un sito web di riferimento?'; $_MODULE['<{statsorigin}prestashop>statsorigin_77de261cf4c31a96146bcf1b52fd9856'] = 'Quando si visita una pagina web, il riferimento è l\'URL della pagina web precedente da cui è stato seguito un link.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_d8d034b6911b1ce74bdb2158a14cd287'] = 'Un riferimento consente di sapere quali parole chiave sono state inserite dai visitatori nei motori di ricerca quando hanno cercato di raggiungere il tuo negozio, e anche per ottimizzare la promozione sul web.'; -$_MODULE['<{statsorigin}prestashop>statsorigin_95b90f58e843b56885beabf4802676a9'] = 'Un partner con cui hai fatto uno scambio di link al fine di aumentare le vendite o attirare nuovi clienti'; +$_MODULE['<{statsorigin}prestashop>statsorigin_bb49f80b601ed472d433b934244b0afd'] = 'Un riferimento consente di sapere quali parole chiave sono state inserite dai visitatori nei motori di ricerca quando hanno cercato di raggiungere il tuo negozio, e anche per ottimizzare la promozione sul web.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_ea87a2280d5cdb638a2727147a3dd85c'] = 'Un partner con cui hai fatto uno scambio di link al fine di aumentare le vendite o attirare nuovi clienti'; $_MODULE['<{statsorigin}prestashop>statsorigin_f0b1507c6bdcdefb60a0e6f9b89d4ae8'] = 'Origine visitatori'; $_MODULE['<{statsorigin}prestashop>statsorigin_14542f5997c4a02d4276da364657f501'] = 'Link diretto'; $_MODULE['<{statsorigin}prestashop>statsorigin_3edf8ca26a1ec14dd6e91dd277ae1de6'] = 'Origine'; -$_MODULE['<{statsorigin}prestashop>statsorigin_b5c1b8a326be0d2fb25b3cf6da677d0e'] = 'Ecco la percentuale dei 10 siti più popolari di riferimento dai quali i visitatori hanno raggiunto il tuo negozio.'; +$_MODULE['<{statsorigin}prestashop>statsorigin_d7b5bac28f53a30e9d831b6a7fa2f484'] = 'Ecco la percentuale dei 10 siti più popolari di riferimento dai quali i visitatori hanno raggiunto il tuo negozio.'; $_MODULE['<{statsorigin}prestashop>statsorigin_96b0141273eabab320119c467cdcaf17'] = 'Totale'; $_MODULE['<{statsorigin}prestashop>statsorigin_0bebf95ee829c33f34fde535ed4ed100'] = 'Solo link diretti'; $_MODULE['<{statsorigin}prestashop>statsorigin_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guida'; diff --git a/modules/statspersonalinfos/config.xml b/modules/statspersonalinfos/config.xml index ff6f50b4b..657a73179 100755 --- a/modules/statspersonalinfos/config.xml +++ b/modules/statspersonalinfos/config.xml @@ -1,7 +1,7 @@ statspersonalinfos - + diff --git a/modules/statspersonalinfos/statspersonalinfos.php b/modules/statspersonalinfos/statspersonalinfos.php index 46b39c66c..70de7f1e3 100644 --- a/modules/statspersonalinfos/statspersonalinfos.php +++ b/modules/statspersonalinfos/statspersonalinfos.php @@ -43,7 +43,7 @@ class StatsPersonalInfos extends ModuleGraph parent::__construct(); - $this->displayName = $this->l('Registered Customer Info'); + $this->displayName = $this->l('Registered customer information'); $this->description = $this->l('Display characteristics such as gender and age.'); } @@ -70,41 +70,41 @@ class StatsPersonalInfos extends ModuleGraph $this->csvExport(array('type' => 'pie', 'option' => 'language')); $this->html .= ' -

'.$this->l('Gender distribution allows you to determine the percentage of men and women among your customers.').'

+

'.$this->l('Gender distribution allows you to determine the percentage of men and women shoppers in your store. ').'

'.$this->engine(array('type' => 'pie', 'option' => 'gender')).'

'.$this->l('CSV Export').'



-

'.$this->l('Age ranges allows you to determine in which age range your customers are.').'

+

'.$this->l('Age ranges allow you to better understand target demographics. ').'

'.$this->engine(array('type' => 'pie', 'option' => 'age')).'

'.$this->l('CSV Export').'



-

'.$this->l('Country distribution allows you to determine in which part of the world your customers are shopping from.').'

+

'.$this->l('Country distribution allows you to analyze which part of the world your customers are shopping from.').'

'.$this->engine(array('type' => 'pie', 'option' => 'country')).'

'.$this->l('CSV Export').'



-

'.$this->l('Currency ranges allows you to determine which currencies your customers are using.').'

+

'.$this->l('Currency range allows you to determine which currency your customers are using.').'

'.$this->engine(array('type' => 'pie', 'option' => 'currency')).'

'.$this->l('CSV Export').'



-

'.$this->l('Language distribution allows you to determine the general languages your customers are using on your shop.').'

+

'.$this->l('Language distribution allows you to analyze the browsing language used by your customers. ').'

'.$this->engine(array('type' => 'pie', 'option' => 'language')).'

'.$this->l('CSV Export').'

'; } else - $this->html .= '

'.$this->l('No customers registered yet.').'

'; + $this->html .= '

'.$this->l('No customers have registered yet.').'

'; $this->html .= '

'.$this->l('Guide').'

-

'.$this->l('Target your audience').'

+

'.$this->l('Target your audience.').'

- '.$this->l('In order for each message to have an impact, you need to know to whom it should be addressed.').' - '.$this->l('Addressing the right audience is essential for choosing the right tools to win them over.').' - '.$this->l('It is best to limit action to a group or groups of clients.').' - '.$this->l('Registered customer information allows you to accurately define the typical customer profile so that you can adapt your specials to various criteria.').' + '.$this->l('In order for each message to have an impact, you need to know who it is being addressed to. ').' + '.$this->l('Defining your target audience is essential when choosing the right tools to win them over.').' + '.$this->l('It is best to limit action to a group -- or groups -- of clients.').' + '.$this->l('Storing registered customer information allows you to accurately define customer profile so you can adapt your special deals and promotions.').'


- '.$this->l('You should use this information to increase your sales by').' + '.$this->l('Increase your sales by').'

    -
  • '.$this->l('launching ad campaigns addressed to specific customers who might be interested in a particular offer at specific dates and times.').'
  • -
  • '.$this->l('Contacting a group of clients by e-mail / newsletter.').'
  • +
  • '.$this->l('launching targeted advertisement campaigns.').'
  • +
  • '.$this->l('Contact a group of clients by email or newsletter.').'


'; @@ -153,7 +153,7 @@ class StatsPersonalInfos extends ModuleGraph break; case 'age': - $this->_titles['main'] = $this->l('Age ranges'); + $this->_titles['main'] = $this->l('Age Range'); // 0 - 18 years $sql = 'SELECT COUNT(`id_customer`) as total @@ -165,7 +165,7 @@ class StatsPersonalInfos extends ModuleGraph if (isset($result['total']) && $result['total']) { $this->_values[] = $result['total']; - $this->_legend[] = $this->l('0-18 years old'); + $this->_legend[] = $this->l('0-18'); } // 18 - 24 years @@ -179,7 +179,7 @@ class StatsPersonalInfos extends ModuleGraph if (isset($result['total']) && $result['total']) { $this->_values[] = $result['total']; - $this->_legend[] = $this->l('18-24 years old'); + $this->_legend[] = $this->l('18-24'); } // 25 - 34 years @@ -193,7 +193,7 @@ class StatsPersonalInfos extends ModuleGraph if (isset($result['total']) && $result['total']) { $this->_values[] = $result['total']; - $this->_legend[] = $this->l('25-34 years old'); + $this->_legend[] = $this->l('25-34'); } // 35 - 49 years @@ -207,7 +207,7 @@ class StatsPersonalInfos extends ModuleGraph if (isset($result['total']) && $result['total']) { $this->_values[] = $result['total']; - $this->_legend[] = $this->l('35-49 years old'); + $this->_legend[] = $this->l('35-49'); } // 50 - 59 years @@ -221,7 +221,7 @@ class StatsPersonalInfos extends ModuleGraph if (isset($result['total']) && $result['total']) { $this->_values[] = $result['total']; - $this->_legend[] = $this->l('50-59 years old'); + $this->_legend[] = $this->l('50-59'); } // More than 60 years @@ -234,7 +234,7 @@ class StatsPersonalInfos extends ModuleGraph if (isset($result['total']) && $result['total']) { $this->_values[] = $result['total']; - $this->_legend[] = $this->l('60 years old and more'); + $this->_legend[] = $this->l('60+'); } // Total unknown diff --git a/modules/statspersonalinfos/translations/de.php b/modules/statspersonalinfos/translations/de.php index cf081275c..0e2a04f0d 100644 --- a/modules/statspersonalinfos/translations/de.php +++ b/modules/statspersonalinfos/translations/de.php @@ -3,35 +3,35 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_bcfebaf66fa6f885171c63997e2613d5'] = 'Mit den Währungsbereichen können Sie erkennen, mit welcher Währung Ihre Kunden bezahlen.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_72d2596650eeec0e4f630dd8841eb21e'] = 'Sie sollten diese Informationen zur Steigerung Ihrer Umsätze nutzen, indem Sie:'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_306fb378f025305fd17ec219fb193797'] = '0-18 Jahre alt'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_268750725a2f1cba57267447006d22ef'] = '35-49 Jahre alt'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_31974086ef82d676924acbb48fc3de1e'] = '50-59 Jahre alt'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f407fa37f8cd8c5900329882ad4529'] = '60 Jahre alt und älter'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0fcbbd416a4872ec8f91fefa823debe'] = 'Mit den Währungsbereichen können Sie erkennen, mit welcher Währung Ihre Kunden bezahlen.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b97d8091d4b383e8316b5bf85b2194c'] = 'Sie sollten diese Informationen zur Steigerung Ihrer Umsätze nutzen, indem Sie:'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6e69fbf88d84db874f365542b0284a95'] = '0-18 Jahre alt'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62ce9f61153b331eabe9efc2fc7eb5c2'] = '35-49 Jahre alt'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_a7724f78dcdf2179c5ca651d15ed5b2c'] = '50-59 Jahre alt'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6a239f88f1aeb0561e7786b6120d1d5e'] = '60 Jahre alt und älter'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ff9c34d2829b95a0936b22b409640143'] = 'Zeigt Merkmale wie Geschlecht und Alter an'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0c88fe08ea4e9b77760ed2429628dea'] = 'Mit der Sprachenverteilung können Sie die allgemeine Sprache, die Ihre Kunden in Ihrem Shop verwenden, erkennen.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3ca26e413e485538a7f3e610c0324636'] = 'Visieren Sie Ihre Zielgruppe an'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f94ccd67cb072f87473491d409fe4c'] = 'Am besten ist es, Maßnahmen auf eine Gruppe oder Gruppen von Kunden zu begrenzen.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7878438ad0cb68d43646e19bf8cda504'] = 'eine KundenGruppe per E-Mail / Newsletter kontaktieren.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7cede292ed06f274bb9e8702738c058e'] = 'Mit der Sprachenverteilung können Sie die allgemeine Sprache, die Ihre Kunden in Ihrem Shop verwenden, erkennen.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ce2dd26ca39bdbc6444f4dad3fa5d5fe'] = 'Visieren Sie Ihre Zielgruppe an'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4f7fe9e063af69bcd7f73d2011722c00'] = 'Am besten ist es, Maßnahmen auf eine Gruppe oder Gruppen von Kunden zu begrenzen.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_416e130b744a7becbe84de8e251135bb'] = 'eine KundenGruppe per E-Mail / Newsletter kontaktieren.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b719ce180ec7bd9641fece2f920f4817'] = 'Weiblich'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_95ad6a8434399a1020f496ae093394a1'] = '18-24 Jahre alt'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b20e0ed6158978a3a23d092060b5dbab'] = '18-24 Jahre alt'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_73b0130037e21b76351aebfd29d0b9aa'] = 'Länderverteilung'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_28e81c8343702f6c813cc31a7f90616a'] = 'Währungsverteilung'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8063f7c341dbe2cadc294a530cb1cad2'] = 'Information zu registrierten Kunden'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b94af23fd8ea879910a6307460ebba4'] = 'Information zu registrierten Kunden'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_998e4c5c80f27dec552e99dfed34889a'] = 'CSV-Export'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_66ea53c179f966ec08fc4710c60a85be'] = 'Mit den Altersklassen können Sie bestimmen, in welcher Altersklasse sich Ihre Kunden befinden.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7a7012cc5c52802b45aed45d1f616f1e'] = 'Noch keine Kunden registriert.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4c5625b65180ffa4f4ad215c2d5ef7d7'] = 'Mit den Altersklassen können Sie bestimmen, in welcher Altersklasse sich Ihre Kunden befinden.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_9fde3510abe63111086fd4288a19e1be'] = 'Noch keine Kunden registriert.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_c8eb1ba430d9ae8fe45fe2d990a481f5'] = 'Damit jede Nachricht ihre Wirkung erzielt, müssen Sie wissen,an wen sie gerichtet werden sollte.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_5beafb6329f9718aa46293a7433697e5'] = 'Auf die richtige Zielgruppe zu antworten ist entscheidend für die Wahl der richtigen Werkzeuge, um sie zu überzeugen.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f94c9050d83dfc68894175207b330785'] = 'Informationen zu registrierten Kunden helfen Ihnen dabei, das typische Kundenprofil genauer zu bestimmen, so dass Sie Ihre Specials verschiedenen Kriterien anpassen können.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_74036f0101d2f3f9b082b8de981c18dc'] = 'Damit jede Nachricht ihre Wirkung erzielt, müssen Sie wissen,an wen sie gerichtet werden sollte.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_daa0ad6a8b07a64f18b26e0f5e1255bd'] = 'Auf die richtige Zielgruppe zu antworten ist entscheidend für die Wahl der richtigen Werkzeuge, um sie zu überzeugen.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_04cac0902d33f8d779111bddde436f03'] = 'Informationen zu registrierten Kunden helfen Ihnen dabei, das typische Kundenprofil genauer zu bestimmen, so dass Sie Ihre Specials verschiedenen Kriterien anpassen können.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_63889cfb9d3cbe05d1bd2be5cc9953fd'] = 'Männlich'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Unbekannt'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f1dd68fb6a00d3e4d7f751deacde995d'] = 'Sprachenverteilung'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0df28a79b0b6ee5f2a91da83bb07117c'] = 'Mit der Geschlechterverteilung können Sie den Prozentsatz von Männern und Frauen unter Ihren Kunden zu bestimmen.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_d053730180bf7c54024068ab2a2edf5c'] = 'Mit der Länderverteilung können Sie erkennen, in welchem Teil der Welt Ihre Kunden sind.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_325004e2f6f72a36519c6a79bd59de74'] = 'Werbekampagnen starten, die an bestimmte Kunden gerichtet sind, welche an einem bestimmten Angebot interessiert sein könnten, zu bestimmten Daten und Zeiten'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62a9b5081b2dab89113e94a0b4cb4be0'] = 'Mit der Geschlechterverteilung können Sie den Prozentsatz von Männern und Frauen unter Ihren Kunden zu bestimmen.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3a5c52ba51fe8f566a222da649c5e1f1'] = 'Mit der Länderverteilung können Sie erkennen, in welchem Teil der Welt Ihre Kunden sind.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_aaf4306af7449d0b6b99e8df15f422a2'] = 'Werbekampagnen starten, die an bestimmte Kunden gerichtet sind, welche an einem bestimmten Angebot interessiert sein könnten, zu bestimmten Daten und Zeiten'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8dc514f6da8c696c4a522efc145ad28a'] = 'Geschlechterverteilung'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0e8cb607499d7862540d5736f6ab84e3'] = 'Altersklassen'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_fb0d334f12a24f10715baef863e20db7'] = '25-34 Jahre alt'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_2d0f27acbb474dff9aba76851970618a'] = 'Altersklassen'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e5884ca49180d38295ee426c624d936c'] = '25-34 Jahre alt'; diff --git a/modules/statspersonalinfos/translations/es.php b/modules/statspersonalinfos/translations/es.php index 17cdcef12..e34372557 100644 --- a/modules/statspersonalinfos/translations/es.php +++ b/modules/statspersonalinfos/translations/es.php @@ -3,35 +3,35 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_bcfebaf66fa6f885171c63997e2613d5'] = 'Las gamas de monedas le permiten determinar con que moneda pagan sus clientes.rnrn'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_72d2596650eeec0e4f630dd8841eb21e'] = 'Usted debe utilizar esta información para aumentar sus ventas:'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_306fb378f025305fd17ec219fb193797'] = '0-18 años'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_268750725a2f1cba57267447006d22ef'] = '35-49 años'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_31974086ef82d676924acbb48fc3de1e'] = '50-59 años'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f407fa37f8cd8c5900329882ad4529'] = '60 años y más'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0fcbbd416a4872ec8f91fefa823debe'] = 'Las gamas de monedas le permiten determinar con que moneda pagan sus clientes.rnrn'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b97d8091d4b383e8316b5bf85b2194c'] = 'Usted debe utilizar esta información para aumentar sus ventas:'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6e69fbf88d84db874f365542b0284a95'] = '0-18 años'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62ce9f61153b331eabe9efc2fc7eb5c2'] = '35-49 años'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_a7724f78dcdf2179c5ca651d15ed5b2c'] = '50-59 años'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6a239f88f1aeb0561e7786b6120d1d5e'] = '60 años y más'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ff9c34d2829b95a0936b22b409640143'] = 'Mostrar características como género y edad'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0c88fe08ea4e9b77760ed2429628dea'] = 'La distribución por idiomas le permite determinar el idioma general que hablan los clientes de su tienda.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3ca26e413e485538a7f3e610c0324636'] = 'Seleccione su audiencia'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f94ccd67cb072f87473491d409fe4c'] = 'Es preferible limitar la acción a un grupo o grupos de clientes.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7878438ad0cb68d43646e19bf8cda504'] = 'Ponerse en contacto con un grupo de clientes por email o a través de la newsletter.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7cede292ed06f274bb9e8702738c058e'] = 'La distribución por idiomas le permite determinar el idioma general que hablan los clientes de su tienda.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ce2dd26ca39bdbc6444f4dad3fa5d5fe'] = 'Seleccione su audiencia'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4f7fe9e063af69bcd7f73d2011722c00'] = 'Es preferible limitar la acción a un grupo o grupos de clientes.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_416e130b744a7becbe84de8e251135bb'] = 'Ponerse en contacto con un grupo de clientes por email o a través de la newsletter.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b719ce180ec7bd9641fece2f920f4817'] = 'Mujer'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_95ad6a8434399a1020f496ae093394a1'] = '18-24 años'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b20e0ed6158978a3a23d092060b5dbab'] = '18-24 años'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_73b0130037e21b76351aebfd29d0b9aa'] = 'distribución del país'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_28e81c8343702f6c813cc31a7f90616a'] = 'Distribución de la moneda'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8063f7c341dbe2cadc294a530cb1cad2'] = 'Información de clientes registrados'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b94af23fd8ea879910a6307460ebba4'] = 'Información de clientes registrados'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_998e4c5c80f27dec552e99dfed34889a'] = 'CSV Export'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_66ea53c179f966ec08fc4710c60a85be'] = 'El rango de edades le permite determinar en qué gama de edades se encuentran sus clientes.rnrn'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7a7012cc5c52802b45aed45d1f616f1e'] = 'Aún no hay clientes registrados'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4c5625b65180ffa4f4ad215c2d5ef7d7'] = 'El rango de edades le permite determinar en qué gama de edades se encuentran sus clientes.rnrn'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_9fde3510abe63111086fd4288a19e1be'] = 'Aún no hay clientes registrados'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guía'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_c8eb1ba430d9ae8fe45fe2d990a481f5'] = 'Para que cada mensaje tenga un impacto, necesita saber a quien va dirigido.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_5beafb6329f9718aa46293a7433697e5'] = 'Dirigirse al público adecuado es primordial para elegir las herramientas correctas para convencer a cada uno de los públicos perseguidos'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f94c9050d83dfc68894175207b330785'] = 'La información de clientes registrados le permite definir con mas exactitud el perfil de cliente típico de modo que usted pueda adaptar sus ofertas a los diferentes criterios.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_74036f0101d2f3f9b082b8de981c18dc'] = 'Para que cada mensaje tenga un impacto, necesita saber a quien va dirigido.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_daa0ad6a8b07a64f18b26e0f5e1255bd'] = 'Dirigirse al público adecuado es primordial para elegir las herramientas correctas para convencer a cada uno de los públicos perseguidos'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_04cac0902d33f8d779111bddde436f03'] = 'La información de clientes registrados le permite definir con mas exactitud el perfil de cliente típico de modo que usted pueda adaptar sus ofertas a los diferentes criterios.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_63889cfb9d3cbe05d1bd2be5cc9953fd'] = 'Hombre'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Desconocido'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f1dd68fb6a00d3e4d7f751deacde995d'] = 'Distribución del idioma'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0df28a79b0b6ee5f2a91da83bb07117c'] = 'La distribución del género le permite determinar el porcentaje de hombres y de mujeres entre sus clientes.rnrn'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_d053730180bf7c54024068ab2a2edf5c'] = 'La distribución por países le permite determinar en qué parte del mundo se encuentran sus clientes.rnrn'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_325004e2f6f72a36519c6a79bd59de74'] = 'Lanzando campañas publicitarias dirigidas a clientes específicos que pudieran estar interesados en una oferta particular, en las fechas y horas específicas'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62a9b5081b2dab89113e94a0b4cb4be0'] = 'La distribución del género le permite determinar el porcentaje de hombres y de mujeres entre sus clientes.rnrn'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3a5c52ba51fe8f566a222da649c5e1f1'] = 'La distribución por países le permite determinar en qué parte del mundo se encuentran sus clientes.rnrn'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_aaf4306af7449d0b6b99e8df15f422a2'] = 'Lanzando campañas publicitarias dirigidas a clientes específicos que pudieran estar interesados en una oferta particular, en las fechas y horas específicas'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8dc514f6da8c696c4a522efc145ad28a'] = 'Distribución del género'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0e8cb607499d7862540d5736f6ab84e3'] = 'Rango de edades'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_fb0d334f12a24f10715baef863e20db7'] = '25-34 años'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_2d0f27acbb474dff9aba76851970618a'] = 'Rango de edades'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e5884ca49180d38295ee426c624d936c'] = '25-34 años'; diff --git a/modules/statspersonalinfos/translations/fr.php b/modules/statspersonalinfos/translations/fr.php index 25ddd2262..8e99933f9 100644 --- a/modules/statspersonalinfos/translations/fr.php +++ b/modules/statspersonalinfos/translations/fr.php @@ -3,35 +3,35 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_bcfebaf66fa6f885171c63997e2613d5'] = 'Les tranches de devise vous permettent de déterminer avec quelle devise vos clients payent.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_72d2596650eeec0e4f630dd8841eb21e'] = 'Nous vous conseillons d\'utiliser cette information pour faire accroitre vos ventes : '; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_306fb378f025305fd17ec219fb193797'] = '0-18 ans'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_268750725a2f1cba57267447006d22ef'] = '35-49 ans'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_31974086ef82d676924acbb48fc3de1e'] = '50-59 ans'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f407fa37f8cd8c5900329882ad4529'] = '60 ans'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0fcbbd416a4872ec8f91fefa823debe'] = 'Les tranches de devise vous permettent de déterminer avec quelle devise vos clients payent.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b97d8091d4b383e8316b5bf85b2194c'] = 'Nous vous conseillons d\'utiliser cette information pour faire accroitre vos ventes : '; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6e69fbf88d84db874f365542b0284a95'] = '0-18 ans'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62ce9f61153b331eabe9efc2fc7eb5c2'] = '35-49 ans'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_a7724f78dcdf2179c5ca651d15ed5b2c'] = '50-59 ans'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6a239f88f1aeb0561e7786b6120d1d5e'] = '60 ans'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ff9c34d2829b95a0936b22b409640143'] = 'Affiche la répartition de vos clients par âge, sexe ou pays'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0c88fe08ea4e9b77760ed2429628dea'] = 'La répartition par langues vous permet de déterminer la langue qu\'utilisent généralement vos clients dans votre boutique.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3ca26e413e485538a7f3e610c0324636'] = 'Ciblez votre public'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f94ccd67cb072f87473491d409fe4c'] = 'Il est préférable de limiter son action à un ou plusieurs groupes de clients.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7878438ad0cb68d43646e19bf8cda504'] = 'Contactez ces groupes de clients par e-mail ou avec une liste de diffusion.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7cede292ed06f274bb9e8702738c058e'] = 'La répartition par langues vous permet de déterminer la langue qu\'utilisent généralement vos clients dans votre boutique.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ce2dd26ca39bdbc6444f4dad3fa5d5fe'] = 'Ciblez votre public'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4f7fe9e063af69bcd7f73d2011722c00'] = 'Il est préférable de limiter son action à un ou plusieurs groupes de clients.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_416e130b744a7becbe84de8e251135bb'] = 'Contactez ces groupes de clients par e-mail ou avec une liste de diffusion.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b719ce180ec7bd9641fece2f920f4817'] = 'Femme'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_95ad6a8434399a1020f496ae093394a1'] = '18-24 ans'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b20e0ed6158978a3a23d092060b5dbab'] = '18-24 ans'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_73b0130037e21b76351aebfd29d0b9aa'] = 'Répartition par pays'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_28e81c8343702f6c813cc31a7f90616a'] = 'Répartition par devise'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8063f7c341dbe2cadc294a530cb1cad2'] = 'Informations clients'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b94af23fd8ea879910a6307460ebba4'] = 'Informations clients'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_998e4c5c80f27dec552e99dfed34889a'] = 'Export CSV'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_66ea53c179f966ec08fc4710c60a85be'] = 'Les tranches d\'âges vous permettent de déterminer dans quelle tranche d\'âge se positionne votre clientèle.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7a7012cc5c52802b45aed45d1f616f1e'] = 'Aucun client enregistré pour le moment.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4c5625b65180ffa4f4ad215c2d5ef7d7'] = 'Les tranches d\'âges vous permettent de déterminer dans quelle tranche d\'âge se positionne votre clientèle.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_9fde3510abe63111086fd4288a19e1be'] = 'Aucun client enregistré pour le moment.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_c8eb1ba430d9ae8fe45fe2d990a481f5'] = 'Pour que chacun de vos messages ait de l\'impact, il faut savoir à quelle clientèle vous vous adressez.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_5beafb6329f9718aa46293a7433697e5'] = 'S\'adresser au bon public est primordial afin de choisir les bons outils pour convaincre chacun des publics cibles.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f94c9050d83dfc68894175207b330785'] = 'Les informations personnelles relatives aux clients vous permettent de mieux définir le profil du client type afin d\'adapter les promotions sur votre site en fonction des différents critères.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_74036f0101d2f3f9b082b8de981c18dc'] = 'Pour que chacun de vos messages ait de l\'impact, il faut savoir à quelle clientèle vous vous adressez.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_daa0ad6a8b07a64f18b26e0f5e1255bd'] = 'S\'adresser au bon public est primordial afin de choisir les bons outils pour convaincre chacun des publics cibles.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_04cac0902d33f8d779111bddde436f03'] = 'Les informations personnelles relatives aux clients vous permettent de mieux définir le profil du client type afin d\'adapter les promotions sur votre site en fonction des différents critères.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_63889cfb9d3cbe05d1bd2be5cc9953fd'] = 'Homme'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Inconnu'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f1dd68fb6a00d3e4d7f751deacde995d'] = 'Répartition par langue'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0df28a79b0b6ee5f2a91da83bb07117c'] = 'La répartition par sexe vous permet de déterminer le pourcentage d\'hommes et de femmes parmi vos clients.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_d053730180bf7c54024068ab2a2edf5c'] = 'La répartition par pays vous permet de déterminer dans quelle partie du monde sont vos clients.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_325004e2f6f72a36519c6a79bd59de74'] = 'préparez une campagne de publicité destinée à un groupe de clients susceptible d\'être intéressé par une offre en particulier, puis diffusez-la à des heures précises.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62a9b5081b2dab89113e94a0b4cb4be0'] = 'La répartition par sexe vous permet de déterminer le pourcentage d\'hommes et de femmes parmi vos clients.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3a5c52ba51fe8f566a222da649c5e1f1'] = 'La répartition par pays vous permet de déterminer dans quelle partie du monde sont vos clients.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_aaf4306af7449d0b6b99e8df15f422a2'] = 'préparez une campagne de publicité destinée à un groupe de clients susceptible d\'être intéressé par une offre en particulier, puis diffusez-la à des heures précises.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8dc514f6da8c696c4a522efc145ad28a'] = 'Répartition par sexe'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0e8cb607499d7862540d5736f6ab84e3'] = 'Tranches d\'âges'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_fb0d334f12a24f10715baef863e20db7'] = '25-34 ans'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_2d0f27acbb474dff9aba76851970618a'] = 'Tranches d\'âges'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e5884ca49180d38295ee426c624d936c'] = '25-34 ans'; diff --git a/modules/statspersonalinfos/translations/it.php b/modules/statspersonalinfos/translations/it.php index 89a56b910..16b2f3e6c 100644 --- a/modules/statspersonalinfos/translations/it.php +++ b/modules/statspersonalinfos/translations/it.php @@ -3,35 +3,35 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_bcfebaf66fa6f885171c63997e2613d5'] = 'Le fasce di valuta ti permettono di determinare con quale valuta i tuoi clienti effettuano i pagamenti.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_72d2596650eeec0e4f630dd8841eb21e'] = 'Dovresti utilizzare queste informazioni per incrementare le vendite di:'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_306fb378f025305fd17ec219fb193797'] = '0-18 anni'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_268750725a2f1cba57267447006d22ef'] = '35-49 anni'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_31974086ef82d676924acbb48fc3de1e'] = '50-59 anni'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f407fa37f8cd8c5900329882ad4529'] = '60 anni e più'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0fcbbd416a4872ec8f91fefa823debe'] = 'Le fasce di valuta ti permettono di determinare con quale valuta i tuoi clienti effettuano i pagamenti.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b97d8091d4b383e8316b5bf85b2194c'] = 'Dovresti utilizzare queste informazioni per incrementare le vendite di:'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6e69fbf88d84db874f365542b0284a95'] = '0-18 anni'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62ce9f61153b331eabe9efc2fc7eb5c2'] = '35-49 anni'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_a7724f78dcdf2179c5ca651d15ed5b2c'] = '50-59 anni'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6a239f88f1aeb0561e7786b6120d1d5e'] = '60 anni e più'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ff9c34d2829b95a0936b22b409640143'] = 'Mostra caratteristiche come sesso ed età'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e0c88fe08ea4e9b77760ed2429628dea'] = 'La distribuzione delle lingue ti permette di determinare la lingua chei clienti usano nel tuo negozio.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3ca26e413e485538a7f3e610c0324636'] = 'Raggiungi il tuo pubblico'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e7f94ccd67cb072f87473491d409fe4c'] = 'E\' meglio limitare l\'azione ad un gruppo o gruppi di clienti.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7878438ad0cb68d43646e19bf8cda504'] = 'Contattare un gruppo di clienti via e-mail / newsletter.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7cede292ed06f274bb9e8702738c058e'] = 'La distribuzione delle lingue ti permette di determinare la lingua chei clienti usano nel tuo negozio.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_ce2dd26ca39bdbc6444f4dad3fa5d5fe'] = 'Raggiungi il tuo pubblico'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4f7fe9e063af69bcd7f73d2011722c00'] = 'E\' meglio limitare l\'azione ad un gruppo o gruppi di clienti.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_416e130b744a7becbe84de8e251135bb'] = 'Contattare un gruppo di clienti via e-mail / newsletter.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b719ce180ec7bd9641fece2f920f4817'] = 'Femmina'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_95ad6a8434399a1020f496ae093394a1'] = '18-24 anni'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_b20e0ed6158978a3a23d092060b5dbab'] = '18-24 anni'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_73b0130037e21b76351aebfd29d0b9aa'] = 'Distribuzione per paese'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_28e81c8343702f6c813cc31a7f90616a'] = 'Distribuzione per valuta'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8063f7c341dbe2cadc294a530cb1cad2'] = 'Info cliente registrato'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_1b94af23fd8ea879910a6307460ebba4'] = 'Info cliente registrato'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_998e4c5c80f27dec552e99dfed34889a'] = 'Esporta CSV'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_66ea53c179f966ec08fc4710c60a85be'] = 'Le fasce di età ti permettono di determinare in quale fascia di età si trovano i tuoi clienti.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_7a7012cc5c52802b45aed45d1f616f1e'] = 'Nessun cliente ancora registrato.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_4c5625b65180ffa4f4ad215c2d5ef7d7'] = 'Le fasce di età ti permettono di determinare in quale fascia di età si trovano i tuoi clienti.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_9fde3510abe63111086fd4288a19e1be'] = 'Nessun cliente ancora registrato.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guida'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_c8eb1ba430d9ae8fe45fe2d990a481f5'] = 'Affinché ogni messaggio abbia un impatto, bisogna sapere a chi dovrebbe essere rivolto.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_5beafb6329f9718aa46293a7433697e5'] = 'Rivolgersi al pubblico giusto è fondamentale per poter scegliere gli strumenti giusti per conquistarlo.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f94c9050d83dfc68894175207b330785'] = 'Le informazioni sui clienti registrati consente di definire con maggiore precisione il profilo tipico del cliente in modo da poter adattare le tue caratteristiche a diversi criteri.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_74036f0101d2f3f9b082b8de981c18dc'] = 'Affinché ogni messaggio abbia un impatto, bisogna sapere a chi dovrebbe essere rivolto.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_daa0ad6a8b07a64f18b26e0f5e1255bd'] = 'Rivolgersi al pubblico giusto è fondamentale per poter scegliere gli strumenti giusti per conquistarlo.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_04cac0902d33f8d779111bddde436f03'] = 'Le informazioni sui clienti registrati consente di definire con maggiore precisione il profilo tipico del cliente in modo da poter adattare le tue caratteristiche a diversi criteri.'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_63889cfb9d3cbe05d1bd2be5cc9953fd'] = 'Maschio'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_88183b946cc5f0e8c96b2e66e1c74a7e'] = 'Sconosciuto'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_f1dd68fb6a00d3e4d7f751deacde995d'] = 'Distribuzione per lingua'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0df28a79b0b6ee5f2a91da83bb07117c'] = 'La distribuzione di sesso ti permette di determinare la percentuale di uomini e donne tra i tuoi clienti.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_d053730180bf7c54024068ab2a2edf5c'] = 'La distribuzione del paese ti permette di determinare da quale parte del mondo provengono i tuoi clienti.'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_325004e2f6f72a36519c6a79bd59de74'] = 'Avvio di campagne pubblicitarie rivolte a clienti specifici che potrebbero essere interessati a un\'offerta particolare, in date e orari specifici'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_62a9b5081b2dab89113e94a0b4cb4be0'] = 'La distribuzione di sesso ti permette di determinare la percentuale di uomini e donne tra i tuoi clienti.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_3a5c52ba51fe8f566a222da649c5e1f1'] = 'La distribuzione del paese ti permette di determinare da quale parte del mondo provengono i tuoi clienti.'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_aaf4306af7449d0b6b99e8df15f422a2'] = 'Avvio di campagne pubblicitarie rivolte a clienti specifici che potrebbero essere interessati a un\'offerta particolare, in date e orari specifici'; $_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_8dc514f6da8c696c4a522efc145ad28a'] = 'Distribuzione di sesso'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_0e8cb607499d7862540d5736f6ab84e3'] = 'Fasce di età'; -$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_fb0d334f12a24f10715baef863e20db7'] = '25-34 anni'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_2d0f27acbb474dff9aba76851970618a'] = 'Fasce di età'; +$_MODULE['<{statspersonalinfos}prestashop>statspersonalinfos_e5884ca49180d38295ee426c624d936c'] = '25-34 anni'; diff --git a/modules/statsproduct/statsproduct.php b/modules/statsproduct/statsproduct.php index b39d30f45..9b1d26893 100644 --- a/modules/statsproduct/statsproduct.php +++ b/modules/statsproduct/statsproduct.php @@ -169,7 +169,7 @@ class StatsProduct extends ModuleGraph $totalViewed = $this->getTotalViewed($product->id); $this->html .= '

'.$product->name.' - '.$this->l('Details').'

'.$this->l('Total bought:').' '.$totalBought.'

-

'.$this->l('Sales (-Tx):').' '.Tools::displayprice($totalSales, $currency).'

+

'.$this->l('Sales ( Figure does not include tax):').' '.Tools::displayprice($totalSales, $currency).'

'.$this->l('Total viewed:').' '.$totalViewed.'

'.$this->l('Conversion rate:').' '.number_format($totalViewed ? $totalBought / $totalViewed : 0, 2).'

'.$this->engine(array('layers' => 2, 'type' => 'line', 'option' => '1-'.$id_product)).'
@@ -191,7 +191,7 @@ class StatsProduct extends ModuleGraph '.$this->l('Order').' '.$this->l('Customer').' '.($hasAttribute ? ''.$this->l('Attribute').'' : '').' - '.$this->l('Qty').' + '.$this->l('Quantity').' '.$this->l('Price').' '; @@ -213,7 +213,7 @@ class StatsProduct extends ModuleGraph if (count($crossSelling)) { $this->html .= '
-

'.$this->l('Cross Selling').'

+

'.$this->l('Cross selling').'

@@ -250,7 +250,7 @@ class StatsProduct extends ModuleGraph -

'.$this->l('Click on a product to access its statistics.').'

+

'.$this->l('Click on a product to access its statistics!').'

'.$this->l('Products available').'

@@ -279,11 +279,11 @@ class StatsProduct extends ModuleGraph $this->html .= '

'.$this->l('Guide').'

-

'.$this->l('Number of purchases compared to number of viewings').'

+

'.$this->l('Number of purchases compared to number of views.').'

- '.$this->l('After choosing a category and selecting a product, informational graphs will appear. Then, you will be able to analyze them.').' + '.$this->l('After choosing a category and selecting a product, informational graphs will appear.').'

    -
  • '.$this->l('If you notice that a product is successful and often purchased, but viewed infrequently, you should put it more prominently on your webshop front-office.').'
  • +
  • '.$this->l('If you notice that a product is often purchased but viewed infrequently, you should display it more prominently in your Front Office. ').'
  • '.$this->l('On the other hand, if a product has many viewings but is not often purchased, we advise you to check or modify this product\'s information, description and photography again.').'
  • diff --git a/modules/statsproduct/translations/de.php b/modules/statsproduct/translations/de.php index 59ddda8db..8c05c7f86 100644 --- a/modules/statsproduct/translations/de.php +++ b/modules/statsproduct/translations/de.php @@ -4,7 +4,7 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsproduct}prestashop>statsproduct_bebbab2c1ac732ccef4181f51ed52967'] = 'Umwandlungsrate:'; -$_MODULE['<{statsproduct}prestashop>statsproduct_a1892c39b2598b4f30f9cc92c59f1aa5'] = 'Cross-Selling'; +$_MODULE['<{statsproduct}prestashop>statsproduct_87017c9259838bb0918a2ab4f96016c0'] = 'Cross-Selling'; $_MODULE['<{statsproduct}prestashop>statsproduct_2a0440eec72540c5b30d9199c01f348c'] = 'Verkaufte Menge'; $_MODULE['<{statsproduct}prestashop>statsproduct_844c29394eea07066bb2efefc35784ec'] = 'Durchschnittlicher Preis'; $_MODULE['<{statsproduct}prestashop>statsproduct_6ccf03bc05e4b749b74b5d577c7e7d3a'] = 'Produkte verfügbar'; @@ -12,23 +12,23 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_12d3c7a4296542c62474856ec452c04 $_MODULE['<{statsproduct}prestashop>statsproduct_49ee3087348e8d44e1feda1917443987'] = 'Name'; $_MODULE['<{statsproduct}prestashop>statsproduct_7bd5825a187064017975513b95d7f7de'] = 'Vorhandene Menge für Verkauf'; $_MODULE['<{statsproduct}prestashop>statsproduct_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; -$_MODULE['<{statsproduct}prestashop>statsproduct_03ab340b3f99e03cff9e84314ead38c0'] = 'Anz'; -$_MODULE['<{statsproduct}prestashop>statsproduct_3303da9d5241177588a06ad60d7edaba'] = 'Klicken Sie auf ein Produkt, um auf seine Statistiken zugreifen.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_694e8d1f2ee056f98ee488bdc4982d73'] = 'Anz'; +$_MODULE['<{statsproduct}prestashop>statsproduct_818f7defe18dbc97da82d054831df2ad'] = 'Klicken Sie auf ein Produkt, um auf seine Statistiken zugreifen.'; $_MODULE['<{statsproduct}prestashop>statsproduct_285201dab507840d082d58dc13602b00'] = 'Holen Sie sich detaillierte Statistiken für jedes Produkt'; $_MODULE['<{statsproduct}prestashop>statsproduct_3ec365dd533ddb7ef3d1c111186ce872'] = 'Details'; $_MODULE['<{statsproduct}prestashop>statsproduct_44749712dbec183e983dcd78a7736c41'] = 'Datum'; $_MODULE['<{statsproduct}prestashop>statsproduct_0173374ac20f5843d58b553d5b226ef6'] = 'Wählen Sie eine Kategorie'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6c1a8292e4da90e1ef19ae9444226d8f'] = 'Anzahl der Käufe im Vergleich zur Anzahl der Aufrufe'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af6de9b8b390e324cd90cc17779783ba'] = 'Anzahl der Käufe im Vergleich zur Anzahl der Aufrufe'; $_MODULE['<{statsproduct}prestashop>statsproduct_78e454064a7d3a7755a011a3b79f31a7'] = 'Produktdetails'; $_MODULE['<{statsproduct}prestashop>statsproduct_981a6013008c8f4b75836b0f415b05b8'] = 'Insgesamt gekauft:'; $_MODULE['<{statsproduct}prestashop>statsproduct_c90b9dca2d3f5bb6e0d0bdceac8a631d'] = 'Attribute Umsatzverteilung'; $_MODULE['<{statsproduct}prestashop>statsproduct_f2bbdf9f72c085adc4d0404e370f0f4c'] = 'Attribut'; $_MODULE['<{statsproduct}prestashop>statsproduct_3601146c4e948c32b6424d2c0a7f0118'] = 'Preis'; -$_MODULE['<{statsproduct}prestashop>statsproduct_1d0ba341c7847cbff109276485417a1c'] = 'Nach Auswahl einer Kategorie sowie eines verfügbaren Produkts in dieser Kategorie erscheinen einige Schaubilder. Diese können Sie analysieren.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_6e13e61b8535a66feb27d285f5c42855'] = 'Nach Auswahl einer Kategorie sowie eines verfügbaren Produkts in dieser Kategorie erscheinen einige Schaubilder. Diese können Sie analysieren.'; $_MODULE['<{statsproduct}prestashop>statsproduct_e22269bb51f9f2394e148716babbafbb'] = 'Beliebtheit'; $_MODULE['<{statsproduct}prestashop>statsproduct_5e9613e58f3bdbc89b1fef07274c0877'] = 'Besuche (x100)'; $_MODULE['<{statsproduct}prestashop>statsproduct_287234a1ff35a314b5b6bc4e5828e745'] = 'Attribute'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6780a9268e38d2ddd4f6c4a8ccf83d24'] = 'Verkäufe (-Tx):'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af7cba0f47dac2ad181cc0471979a746'] = 'Verkäufe (-Tx):'; $_MODULE['<{statsproduct}prestashop>statsproduct_b262bbde88b3b8dca3b27d730aca69bf'] = 'Insgesamt angesehen:'; $_MODULE['<{statsproduct}prestashop>statsproduct_998e4c5c80f27dec552e99dfed34889a'] = 'CSV-Export'; $_MODULE['<{statsproduct}prestashop>statsproduct_11ff9f68afb6b8b5b8eda218d7c83a65'] = 'Verkäufe'; @@ -36,5 +36,5 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_a240fa27925a635b08dc28c9e4f9216 $_MODULE['<{statsproduct}prestashop>statsproduct_ce26601dac0dea138b7295f02b7620a7'] = 'Kunde'; $_MODULE['<{statsproduct}prestashop>statsproduct_df644ae155e79abf54175bd15d75f363'] = 'Produktname'; $_MODULE['<{statsproduct}prestashop>statsproduct_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Alle'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6559cc601f073740b825a4fc9b76149b'] = 'Wenn Sie merken, dass ein Produkt erfolgreich ist, oft gekauft wird, aber auch selten angesehen wird, sollten Sie es weiter nach vorne in Ihren Webshop Front-Office setzen.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_ff7008d8daed8cf92213ca8955a42d92'] = 'Wenn Sie merken, dass ein Produkt erfolgreich ist, oft gekauft wird, aber auch selten angesehen wird, sollten Sie es weiter nach vorne in Ihren Webshop Front-Office setzen.'; $_MODULE['<{statsproduct}prestashop>statsproduct_27ce7f8b5623b2e2df568d64cf051607'] = 'Lager'; diff --git a/modules/statsproduct/translations/es.php b/modules/statsproduct/translations/es.php index 16df35893..def88e2e3 100644 --- a/modules/statsproduct/translations/es.php +++ b/modules/statsproduct/translations/es.php @@ -4,11 +4,11 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsproduct}prestashop>statsproduct_bebbab2c1ac732ccef4181f51ed52967'] = 'Índice de conversión'; -$_MODULE['<{statsproduct}prestashop>statsproduct_03ab340b3f99e03cff9e84314ead38c0'] = 'Cant.'; -$_MODULE['<{statsproduct}prestashop>statsproduct_a1892c39b2598b4f30f9cc92c59f1aa5'] = 'Ventas cruzadas'; +$_MODULE['<{statsproduct}prestashop>statsproduct_694e8d1f2ee056f98ee488bdc4982d73'] = 'Cant.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_87017c9259838bb0918a2ab4f96016c0'] = 'Ventas cruzadas'; $_MODULE['<{statsproduct}prestashop>statsproduct_2a0440eec72540c5b30d9199c01f348c'] = 'Cantidad vendida'; $_MODULE['<{statsproduct}prestashop>statsproduct_844c29394eea07066bb2efefc35784ec'] = 'Precio medio'; -$_MODULE['<{statsproduct}prestashop>statsproduct_3303da9d5241177588a06ad60d7edaba'] = 'Haga clic en un producto para acceder a sus estadísticas.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_818f7defe18dbc97da82d054831df2ad'] = 'Haga clic en un producto para acceder a sus estadísticas.'; $_MODULE['<{statsproduct}prestashop>statsproduct_6ccf03bc05e4b749b74b5d577c7e7d3a'] = 'Disponibilidad de los productos'; $_MODULE['<{statsproduct}prestashop>statsproduct_12d3c7a4296542c62474856ec452c045'] = 'Ref.'; $_MODULE['<{statsproduct}prestashop>statsproduct_49ee3087348e8d44e1feda1917443987'] = 'Nombre'; @@ -18,17 +18,17 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_285201dab507840d082d58dc13602b0 $_MODULE['<{statsproduct}prestashop>statsproduct_3ec365dd533ddb7ef3d1c111186ce872'] = 'Detalles'; $_MODULE['<{statsproduct}prestashop>statsproduct_44749712dbec183e983dcd78a7736c41'] = 'Fecha'; $_MODULE['<{statsproduct}prestashop>statsproduct_0173374ac20f5843d58b553d5b226ef6'] = 'Elegir una categoría'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6c1a8292e4da90e1ef19ae9444226d8f'] = 'Número de compras en relación con el número de visitas'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af6de9b8b390e324cd90cc17779783ba'] = 'Número de compras en relación con el número de visitas'; $_MODULE['<{statsproduct}prestashop>statsproduct_78e454064a7d3a7755a011a3b79f31a7'] = 'Detalles del producto'; $_MODULE['<{statsproduct}prestashop>statsproduct_981a6013008c8f4b75836b0f415b05b8'] = 'Total de compras:'; $_MODULE['<{statsproduct}prestashop>statsproduct_c90b9dca2d3f5bb6e0d0bdceac8a631d'] = 'Distribuir las ventas por cualidades'; $_MODULE['<{statsproduct}prestashop>statsproduct_f2bbdf9f72c085adc4d0404e370f0f4c'] = 'Atributo'; $_MODULE['<{statsproduct}prestashop>statsproduct_3601146c4e948c32b6424d2c0a7f0118'] = 'Precio'; -$_MODULE['<{statsproduct}prestashop>statsproduct_1d0ba341c7847cbff109276485417a1c'] = 'Tras elegir una categoría y seleccionar un producto disponible de la categoría, aparecen algunos gráficos. Entonces, usted puede analizarlos.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_6e13e61b8535a66feb27d285f5c42855'] = 'Tras elegir una categoría y seleccionar un producto disponible de la categoría, aparecen algunos gráficos. Entonces, usted puede analizarlos.'; $_MODULE['<{statsproduct}prestashop>statsproduct_e22269bb51f9f2394e148716babbafbb'] = 'Popularidad'; $_MODULE['<{statsproduct}prestashop>statsproduct_5e9613e58f3bdbc89b1fef07274c0877'] = 'Visitas (x100)'; $_MODULE['<{statsproduct}prestashop>statsproduct_287234a1ff35a314b5b6bc4e5828e745'] = 'Atributos'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6780a9268e38d2ddd4f6c4a8ccf83d24'] = 'Volumen de ventas (sin IVA)'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af7cba0f47dac2ad181cc0471979a746'] = 'Volumen de ventas (sin IVA)'; $_MODULE['<{statsproduct}prestashop>statsproduct_b262bbde88b3b8dca3b27d730aca69bf'] = 'total visto:'; $_MODULE['<{statsproduct}prestashop>statsproduct_998e4c5c80f27dec552e99dfed34889a'] = 'CSV Export'; $_MODULE['<{statsproduct}prestashop>statsproduct_11ff9f68afb6b8b5b8eda218d7c83a65'] = 'Ventas'; @@ -36,5 +36,5 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_a240fa27925a635b08dc28c9e4f9216 $_MODULE['<{statsproduct}prestashop>statsproduct_ce26601dac0dea138b7295f02b7620a7'] = 'Cliente'; $_MODULE['<{statsproduct}prestashop>statsproduct_df644ae155e79abf54175bd15d75f363'] = 'Artículo'; $_MODULE['<{statsproduct}prestashop>statsproduct_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Todas'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6559cc601f073740b825a4fc9b76149b'] = 'Si observa que un producto tiene éxito, que se compra mucho pero que se consulta poco, debería hacerlo resaltar más en el escaparate de su tienda.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_ff7008d8daed8cf92213ca8955a42d92'] = 'Si observa que un producto tiene éxito, que se compra mucho pero que se consulta poco, debería hacerlo resaltar más en el escaparate de su tienda.'; $_MODULE['<{statsproduct}prestashop>statsproduct_27ce7f8b5623b2e2df568d64cf051607'] = 'Stock'; diff --git a/modules/statsproduct/translations/fr.php b/modules/statsproduct/translations/fr.php index c697ad07d..143d25813 100644 --- a/modules/statsproduct/translations/fr.php +++ b/modules/statsproduct/translations/fr.php @@ -4,10 +4,10 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsproduct}prestashop>statsproduct_844c29394eea07066bb2efefc35784ec'] = 'Prix moyen'; -$_MODULE['<{statsproduct}prestashop>statsproduct_03ab340b3f99e03cff9e84314ead38c0'] = 'Qté'; -$_MODULE['<{statsproduct}prestashop>statsproduct_a1892c39b2598b4f30f9cc92c59f1aa5'] = 'Ventes croisées'; +$_MODULE['<{statsproduct}prestashop>statsproduct_694e8d1f2ee056f98ee488bdc4982d73'] = 'Qté'; +$_MODULE['<{statsproduct}prestashop>statsproduct_87017c9259838bb0918a2ab4f96016c0'] = 'Ventes croisées'; $_MODULE['<{statsproduct}prestashop>statsproduct_2a0440eec72540c5b30d9199c01f348c'] = 'Quantité vendue'; -$_MODULE['<{statsproduct}prestashop>statsproduct_3303da9d5241177588a06ad60d7edaba'] = 'Cliquez sur un produit pour accéder à ses statistiques.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_818f7defe18dbc97da82d054831df2ad'] = 'Cliquez sur un produit pour accéder à ses statistiques.'; $_MODULE['<{statsproduct}prestashop>statsproduct_6ccf03bc05e4b749b74b5d577c7e7d3a'] = 'Produits disponibles'; $_MODULE['<{statsproduct}prestashop>statsproduct_7bd5825a187064017975513b95d7f7de'] = 'Quantité disponible à la vente'; $_MODULE['<{statsproduct}prestashop>statsproduct_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; @@ -18,17 +18,17 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_3ec365dd533ddb7ef3d1c111186ce87 $_MODULE['<{statsproduct}prestashop>statsproduct_285201dab507840d082d58dc13602b00'] = 'Propose des statistiques détaillées pour chaque produit'; $_MODULE['<{statsproduct}prestashop>statsproduct_44749712dbec183e983dcd78a7736c41'] = 'Date'; $_MODULE['<{statsproduct}prestashop>statsproduct_0173374ac20f5843d58b553d5b226ef6'] = 'Choisissez une catégorie'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6c1a8292e4da90e1ef19ae9444226d8f'] = 'Comparaison du nombre d\'achat et du nombre de consultations'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af6de9b8b390e324cd90cc17779783ba'] = 'Comparaison du nombre d\'achat et du nombre de consultations'; $_MODULE['<{statsproduct}prestashop>statsproduct_78e454064a7d3a7755a011a3b79f31a7'] = 'Détail produit'; $_MODULE['<{statsproduct}prestashop>statsproduct_981a6013008c8f4b75836b0f415b05b8'] = 'Total des achats :'; $_MODULE['<{statsproduct}prestashop>statsproduct_c90b9dca2d3f5bb6e0d0bdceac8a631d'] = 'Répartition des ventes par attributs'; $_MODULE['<{statsproduct}prestashop>statsproduct_f2bbdf9f72c085adc4d0404e370f0f4c'] = 'Attribut'; $_MODULE['<{statsproduct}prestashop>statsproduct_3601146c4e948c32b6424d2c0a7f0118'] = 'Prix'; -$_MODULE['<{statsproduct}prestashop>statsproduct_1d0ba341c7847cbff109276485417a1c'] = 'Après avoir choisi une catégorie et sélectionné un produit disponible dans celle-ci, des graphiques apparaissent. Vous pouvez ensuite les analyser.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_6e13e61b8535a66feb27d285f5c42855'] = 'Après avoir choisi une catégorie et sélectionné un produit disponible dans celle-ci, des graphiques apparaissent. Vous pouvez ensuite les analyser.'; $_MODULE['<{statsproduct}prestashop>statsproduct_e22269bb51f9f2394e148716babbafbb'] = 'Popularité'; $_MODULE['<{statsproduct}prestashop>statsproduct_5e9613e58f3bdbc89b1fef07274c0877'] = 'Visites (x100)'; $_MODULE['<{statsproduct}prestashop>statsproduct_287234a1ff35a314b5b6bc4e5828e745'] = 'Attributs'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6780a9268e38d2ddd4f6c4a8ccf83d24'] = 'CA (hors taxes) :'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af7cba0f47dac2ad181cc0471979a746'] = 'CA (hors taxes) :'; $_MODULE['<{statsproduct}prestashop>statsproduct_b262bbde88b3b8dca3b27d730aca69bf'] = 'Total des consultations'; $_MODULE['<{statsproduct}prestashop>statsproduct_998e4c5c80f27dec552e99dfed34889a'] = 'Export CSV'; $_MODULE['<{statsproduct}prestashop>statsproduct_11ff9f68afb6b8b5b8eda218d7c83a65'] = 'CA'; @@ -36,5 +36,5 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_a240fa27925a635b08dc28c9e4f9216 $_MODULE['<{statsproduct}prestashop>statsproduct_ce26601dac0dea138b7295f02b7620a7'] = 'Client'; $_MODULE['<{statsproduct}prestashop>statsproduct_df644ae155e79abf54175bd15d75f363'] = 'Article'; $_MODULE['<{statsproduct}prestashop>statsproduct_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Toutes'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6559cc601f073740b825a4fc9b76149b'] = 'Si vous constatez qu\'un produit a du succès et qu\'il est beaucoup acheté mais reste très peu consulté, vous devriez le mettre davantage en évidence dans la vitrine de votre boutique.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_ff7008d8daed8cf92213ca8955a42d92'] = 'Si vous constatez qu\'un produit a du succès et qu\'il est beaucoup acheté mais reste très peu consulté, vous devriez le mettre davantage en évidence dans la vitrine de votre boutique.'; $_MODULE['<{statsproduct}prestashop>statsproduct_27ce7f8b5623b2e2df568d64cf051607'] = 'Stock'; diff --git a/modules/statsproduct/translations/it.php b/modules/statsproduct/translations/it.php index 970c19138..01d0a63f5 100644 --- a/modules/statsproduct/translations/it.php +++ b/modules/statsproduct/translations/it.php @@ -4,11 +4,11 @@ global $_MODULE; $_MODULE = array(); $_MODULE['<{statsproduct}prestashop>statsproduct_bebbab2c1ac732ccef4181f51ed52967'] = 'Tasso di conversione:'; -$_MODULE['<{statsproduct}prestashop>statsproduct_03ab340b3f99e03cff9e84314ead38c0'] = 'Qtà'; -$_MODULE['<{statsproduct}prestashop>statsproduct_a1892c39b2598b4f30f9cc92c59f1aa5'] = 'Vendita incrociata'; +$_MODULE['<{statsproduct}prestashop>statsproduct_694e8d1f2ee056f98ee488bdc4982d73'] = 'Qtà'; +$_MODULE['<{statsproduct}prestashop>statsproduct_87017c9259838bb0918a2ab4f96016c0'] = 'Vendita incrociata'; $_MODULE['<{statsproduct}prestashop>statsproduct_2a0440eec72540c5b30d9199c01f348c'] = 'Quantità venduta'; $_MODULE['<{statsproduct}prestashop>statsproduct_844c29394eea07066bb2efefc35784ec'] = 'Prezzo medio'; -$_MODULE['<{statsproduct}prestashop>statsproduct_3303da9d5241177588a06ad60d7edaba'] = 'Clicca su un prodotto per accedere alle statistiche.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_818f7defe18dbc97da82d054831df2ad'] = 'Clicca su un prodotto per accedere alle statistiche.'; $_MODULE['<{statsproduct}prestashop>statsproduct_6ccf03bc05e4b749b74b5d577c7e7d3a'] = 'Prodotti disponibili'; $_MODULE['<{statsproduct}prestashop>statsproduct_12d3c7a4296542c62474856ec452c045'] = 'Rif.'; $_MODULE['<{statsproduct}prestashop>statsproduct_49ee3087348e8d44e1feda1917443987'] = 'Nome'; @@ -18,17 +18,17 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_285201dab507840d082d58dc13602b0 $_MODULE['<{statsproduct}prestashop>statsproduct_3ec365dd533ddb7ef3d1c111186ce872'] = 'Dettagli'; $_MODULE['<{statsproduct}prestashop>statsproduct_44749712dbec183e983dcd78a7736c41'] = 'Data'; $_MODULE['<{statsproduct}prestashop>statsproduct_0173374ac20f5843d58b553d5b226ef6'] = 'Scegli una categoria'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6c1a8292e4da90e1ef19ae9444226d8f'] = 'Numero di acquisti rispetto al numero di visualizzazioni'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af6de9b8b390e324cd90cc17779783ba'] = 'Numero di acquisti rispetto al numero di visualizzazioni'; $_MODULE['<{statsproduct}prestashop>statsproduct_78e454064a7d3a7755a011a3b79f31a7'] = 'Dettagli del prodotto'; $_MODULE['<{statsproduct}prestashop>statsproduct_981a6013008c8f4b75836b0f415b05b8'] = 'Totale comprato:'; $_MODULE['<{statsproduct}prestashop>statsproduct_c90b9dca2d3f5bb6e0d0bdceac8a631d'] = 'Distribuzione vendite attributo'; $_MODULE['<{statsproduct}prestashop>statsproduct_f2bbdf9f72c085adc4d0404e370f0f4c'] = 'Attributo'; $_MODULE['<{statsproduct}prestashop>statsproduct_3601146c4e948c32b6424d2c0a7f0118'] = 'Prezzo'; -$_MODULE['<{statsproduct}prestashop>statsproduct_1d0ba341c7847cbff109276485417a1c'] = 'Dopo aver scelto una categoria e selezionato un prodotto disponibile in questa categoria, appariranno dei grafici. Poi, potrai analizzarli.'; +$_MODULE['<{statsproduct}prestashop>statsproduct_6e13e61b8535a66feb27d285f5c42855'] = 'Dopo aver scelto una categoria e selezionato un prodotto disponibile in questa categoria, appariranno dei grafici. Poi, potrai analizzarli.'; $_MODULE['<{statsproduct}prestashop>statsproduct_e22269bb51f9f2394e148716babbafbb'] = 'Popolarità'; $_MODULE['<{statsproduct}prestashop>statsproduct_5e9613e58f3bdbc89b1fef07274c0877'] = 'Visite (x100)'; $_MODULE['<{statsproduct}prestashop>statsproduct_287234a1ff35a314b5b6bc4e5828e745'] = 'Attributi'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6780a9268e38d2ddd4f6c4a8ccf83d24'] = 'Vendite (-Tasse):'; +$_MODULE['<{statsproduct}prestashop>statsproduct_af7cba0f47dac2ad181cc0471979a746'] = 'Vendite (-Tasse):'; $_MODULE['<{statsproduct}prestashop>statsproduct_b262bbde88b3b8dca3b27d730aca69bf'] = 'Totale visite:'; $_MODULE['<{statsproduct}prestashop>statsproduct_998e4c5c80f27dec552e99dfed34889a'] = 'Esporta CSV'; $_MODULE['<{statsproduct}prestashop>statsproduct_11ff9f68afb6b8b5b8eda218d7c83a65'] = 'Vendite'; @@ -36,5 +36,5 @@ $_MODULE['<{statsproduct}prestashop>statsproduct_a240fa27925a635b08dc28c9e4f9216 $_MODULE['<{statsproduct}prestashop>statsproduct_ce26601dac0dea138b7295f02b7620a7'] = 'Cliente'; $_MODULE['<{statsproduct}prestashop>statsproduct_df644ae155e79abf54175bd15d75f363'] = 'Nome del prodotto'; $_MODULE['<{statsproduct}prestashop>statsproduct_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Tutti'; -$_MODULE['<{statsproduct}prestashop>statsproduct_6559cc601f073740b825a4fc9b76149b'] = 'Se noti che un prodotto ha successo, viene spesso acquistato ma visualizzato raramente, dovresti collocarlo in maniera più visibile nel tuo negozio'; +$_MODULE['<{statsproduct}prestashop>statsproduct_ff7008d8daed8cf92213ca8955a42d92'] = 'Se noti che un prodotto ha successo, viene spesso acquistato ma visualizzato raramente, dovresti collocarlo in maniera più visibile nel tuo negozio'; $_MODULE['<{statsproduct}prestashop>statsproduct_27ce7f8b5623b2e2df568d64cf051607'] = 'Magazzino'; diff --git a/modules/statsregistrations/config.xml b/modules/statsregistrations/config.xml index 041a1bb3b..f3a0650da 100755 --- a/modules/statsregistrations/config.xml +++ b/modules/statsregistrations/config.xml @@ -3,7 +3,7 @@ statsregistrations - + 0 diff --git a/modules/statsregistrations/statsregistrations.php b/modules/statsregistrations/statsregistrations.php index 750c93b4d..bcdbd7f0d 100644 --- a/modules/statsregistrations/statsregistrations.php +++ b/modules/statsregistrations/statsregistrations.php @@ -43,7 +43,7 @@ class StatsRegistrations extends ModuleGraph parent::__construct(); $this->displayName = $this->l('Customer accounts'); - $this->description = $this->l('Display the progress of customer registration.'); + $this->description = $this->l('Display registration progress.'); } /** @@ -111,8 +111,8 @@ class StatsRegistrations extends ModuleGraph

    '.$this->displayName.'

    • - '.$this->l('Visitors who have stopped at the registering step:').' '.(int)($totalBlocked).($totalRegistrations ? ' ('.number_format(100*$totalBlocked/($totalRegistrations+$totalBlocked), 2).'%)' : '').'
    • - '.$this->l('Visitors who have placed an order directly after registration:').' '.(int)($totalBuyers).($totalRegistrations ? ' ('.number_format(100*$totalBuyers/($totalRegistrations), 2).'%)' : '').' + '.$this->l('Number of visitors who stopped at the registering step:').' '.(int)($totalBlocked).($totalRegistrations ? ' ('.number_format(100*$totalBlocked/($totalRegistrations+$totalBlocked), 2).'%)' : '').'
    • + '.$this->l('Number of visitors who placed an order directly after registration:').' '.(int)($totalBuyers).($totalRegistrations ? ' ('.number_format(100*$totalBuyers/($totalRegistrations), 2).'%)' : '').'
    • '.$this->l('Total customer accounts:').' '.$totalRegistrations.'
    '.$this->engine(array('type' => 'line')).'
    @@ -120,16 +120,16 @@ class StatsRegistrations extends ModuleGraph

    '.$this->l('Guide').'

    '.$this->l('Number of customer accounts created').'

    -

    '.$this->l('The total number of accounts created is not in itself important information. However, it is beneficial to analyze the number created over time. This will indicate whether or not things are on the right track.').'

    +

    '.$this->l('The total number of accounts created is not in itself important information. However, it is beneficial to analyze the number created over time. This will indicate whether or not things are on the right track. You feel me?').'


    '.$this->l('How to act on the registrations\' evolution?').'

    - '.$this->l('If you let your shop run without changing anything, the number of customer registrations should stay stable or may slightly decline.').' - '.$this->l('A significant increase or decrease shows that there has probably been a change to your shop.Therefore, you have to identify it in order to backtrack if this change makes the number of registrations decrease, or continue with it if it increases registration.').'
    - '.$this->l('Here is summary of what may affect the creation of customer accounts:').' + '.$this->l('If you let your shop run without changing anything, the number of customer registrations should stay stable or slightly decline.').' + '.$this->l('A significant increase or decrease in customer registration shows that there has probably been a change to your shop.With that in mind, we suggest that you identify the cause, correct the issue and get back in the business of making money!').'
    + '.$this->l('Here is a summary of what may affect the creation of customer accounts:').'

      -
    • '.$this->l('An advertising campaign can attract a greater number of visitors. An increase in customer accounts will ensue, which will depend on their "quality". Well-targeted advertising can be more effective than large-scale advertising.').'
    • -
    • '.$this->l('Specials, sales, or contests draw greater attention and curiosity, not only keeping your shop lively but also increasing its traffic. This way, you can push impulsive buyers to take the plunge.').'
    • -
    • '.$this->l('Design and user-friendliness are more important than ever: an ill-chosen or hard-to-follow graphical theme can turn off visitors. You should strike the right balance between an innovative design and letting visitors move around easily. Proper spelling and clarity also inspire more customer confidence in your shop.').'
    • +
    • '.$this->l('An advertising campaign can attract an increased number of visitors to your online store. This will likely be followed by an increase in customer accounts, and profit margins, which will depend on customer "quality." Well-targeted advertising is typically more effective than large-scale advertising... and it\'s cheaper too!').'
    • +
    • '.$this->l('Specials, sales, promotions and/or contests typically demand a shoppers\' attentions. Offering such things will not only keep your business lively, it will also increase traffic, build customer loyalty and genuine change your current e-commerce philosophy.').'
    • +
    • '.$this->l('Design and user-friendliness are more important than ever in the world of online sales. An ill-chosen or hard-to-follow graphical theme can keep shoppers at bay. This means that you should aspire to find the right balance between beauty and functionality for your online store.').'


    '; diff --git a/modules/statsregistrations/translations/de.php b/modules/statsregistrations/translations/de.php index 5cc3ddb4d..0d095fd6e 100644 --- a/modules/statsregistrations/translations/de.php +++ b/modules/statsregistrations/translations/de.php @@ -3,19 +3,19 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statsregistrations}prestashop>statsregistrations_75abad0b891bc086fd4837e81a8c488a'] = 'Besucher, die bei der Registrierung aufgehört haben:'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_a286f4eaef73a0b4f955c42b84472444'] = 'Die Gesamtzahl der erstellten Konten ist an sich keine wichtige Information. Es ist allerdings interessant, die Zahl der Eröffnungen über die Zeit gesehen zu analysieren. Dies sagt aus, ob die Dinge auf dem richtigen Weg sind.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f123e4522d188fba4cbe1dc58034f95c'] = 'Wenn Sie Ihren Shop laufen lassen, ohne etwas zu ändern, sollte die Anzahl der Kunden-Registrierungen stabil bleiben oder leicht rückläufig sein.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_48ad285c9749cc74821048c49aea6a50'] = 'Hier ist eine Zusammenfassung dessen, was die Eröffnung von Kundenkonten beeinflusst:'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_cd0d9770ca8ee818040fa3453fbaa1ae'] = 'Eine Werbekampagne kann eine größere Anzahl von Besuchern anziehen. Eine sich daraus ergebende Zunahme von Kundenkonten, hängt von der \\"Qualität\\" der Kampagne ab: gezielte Werbung kann effektiver sein als breit angelegte Werbung.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_247b3bdef50a59d5a83f23c4f1c8fa47'] = 'Besucher, die bei der Registrierung aufgehört haben:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_76dcf557776c2b40d47b72ebcd9ac6b7'] = 'Die Gesamtzahl der erstellten Konten ist an sich keine wichtige Information. Es ist allerdings interessant, die Zahl der Eröffnungen über die Zeit gesehen zu analysieren. Dies sagt aus, ob die Dinge auf dem richtigen Weg sind.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_2d8c349a97131b417bf7da166afb17bd'] = 'Wenn Sie Ihren Shop laufen lassen, ohne etwas zu ändern, sollte die Anzahl der Kunden-Registrierungen stabil bleiben oder leicht rückläufig sein.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ded9c8756dc14fd26e3150c4718cd9d0'] = 'Hier ist eine Zusammenfassung dessen, was die Eröffnung von Kundenkonten beeinflusst:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_3493de9f70480000ac99a1d5fc021dcb'] = 'Eine Werbekampagne kann eine größere Anzahl von Besuchern anziehen. Eine sich daraus ergebende Zunahme von Kundenkonten, hängt von der \\"Qualität\\" der Kampagne ab: gezielte Werbung kann effektiver sein als breit angelegte Werbung.'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_8b15fc6468c919d299f9a601b61b95fc'] = 'Kundenkonten'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_57a6f41a27c9baa5b402d30e97d4c1e8'] = 'Die richtige Reaktion auf die Entwicklung der Registrierungen'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f8426f15c536f4341dbeb4d806f76167'] = 'Ein signifikanter Anstieg oder Rückgang zeigt, dass es wahrscheinlich eine Änderung in Ihrem Shop gegeben hat, Sie müssensie identifizieren, um herauszufinden, ob diese Änderung die Zahl der Anmeldungen zurückgehen lässt oder fortfahren, wenn dies vorteilhaft ist.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_52a6042899eefb32fcd219672c0c7179'] = 'Design und Benutzerfreundlichkeit sind heute wichtiger denn je: ein schlecht gewähltes oder schwer verständliches grafisches Thema kann Besuchern die Lust zum Kaufen nehmen. Sie müssen die richtige Balance zwischen einem innovativen Design und einer leichten Surfbarkeit für Besucher finden. Korrekte Rechtschreibung und Klarheit wecken ebenso mehr das Kundenvertrauen in Ihren Shop.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_089c9061407fd978366e78b6ad1d0111'] = 'Anzeige des Fortschritts der Kundenregistrierung'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_4e4f3af3fb18136b8eec4b77f25095ce'] = 'Besucher, die direkt nach der Anmeldung eine Bestellung vorgenommen haben:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ac379194b8c2ea6c2e26be3672fdf7f7'] = 'Ein signifikanter Anstieg oder Rückgang zeigt, dass es wahrscheinlich eine Änderung in Ihrem Shop gegeben hat, Sie müssensie identifizieren, um herauszufinden, ob diese Änderung die Zahl der Anmeldungen zurückgehen lässt oder fortfahren, wenn dies vorteilhaft ist.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_8cb5605d77d1d2f9eab6191c0e027747'] = 'Design und Benutzerfreundlichkeit sind heute wichtiger denn je: ein schlecht gewähltes oder schwer verständliches grafisches Thema kann Besuchern die Lust zum Kaufen nehmen. Sie müssen die richtige Balance zwischen einem innovativen Design und einer leichten Surfbarkeit für Besucher finden. Korrekte Rechtschreibung und Klarheit wecken ebenso mehr das Kundenvertrauen in Ihren Shop.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_5eaafc713c2425b16202065927ea0220'] = 'Anzeige des Fortschritts der Kundenregistrierung'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_479c1246d97709e234574e1d2921994d'] = 'Besucher, die direkt nach der Anmeldung eine Bestellung vorgenommen haben:'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_998e4c5c80f27dec552e99dfed34889a'] = 'CSV-Export'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_fba0e64541196123bbf8e3737bf9287b'] = 'Anzahl der erstellten Kundenkonten'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_b2eceb617c0a86e0dbe5d844f0ec353e'] = 'Sonderangebote, Verkäufe, oder Wettbewerbe schaffen mehr Aufmerksamkeit und Neugier, und halten Ihren Shop nicht nur lebendig, sondern erhöhen auch die Besucherzahl. Auf diese Weise können Sie impulsive Käufer zum Kaufen animieren.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_c53d1447202b4d629cf3b96dc4b1056d'] = 'Sonderangebote, Verkäufe, oder Wettbewerbe schaffen mehr Aufmerksamkeit und Neugier, und halten Ihren Shop nicht nur lebendig, sondern erhöhen auch die Besucherzahl. Auf diese Weise können Sie impulsive Käufer zum Kaufen animieren.'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_a751e9cc4ed4c7585ecc0d97781cb48a'] = 'Kundenkonten insgesamt:'; diff --git a/modules/statsregistrations/translations/es.php b/modules/statsregistrations/translations/es.php index 6b69266c5..4a29629da 100644 --- a/modules/statsregistrations/translations/es.php +++ b/modules/statsregistrations/translations/es.php @@ -3,19 +3,19 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statsregistrations}prestashop>statsregistrations_75abad0b891bc086fd4837e81a8c488a'] = 'Visitantes que no han pasado de la suscripción:'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f123e4522d188fba4cbe1dc58034f95c'] = 'i usted deja su tienda funcionar sin realizar cambios, el número de suscripciones de cliente puede permanecer estable o declinar levemente.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_48ad285c9749cc74821048c49aea6a50'] = 'Aquí se muestra un sumario de lo que puede afectar a la hora de crear cuentas de clientes.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_cd0d9770ca8ee818040fa3453fbaa1ae'] = 'Una campaña publicitaria puede atraer un mayor número de visitantes.Un incremento de clientes registrados le dará cierta seguridad, pero depende de su \\"calidad\\": una publicidad bien dirigida puede resultar más efectiva que un campaña a gran escala.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_a286f4eaef73a0b4f955c42b84472444'] = 'El número total de cuentas creadas no es en sí misma información importante. Sin embargo, es interesante analizar la cantidad creada en un cierto plazo. Esto indicará de una manera u otra si las cosas van por buen camino.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_247b3bdef50a59d5a83f23c4f1c8fa47'] = 'Visitantes que no han pasado de la suscripción:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_2d8c349a97131b417bf7da166afb17bd'] = 'i usted deja su tienda funcionar sin realizar cambios, el número de suscripciones de cliente puede permanecer estable o declinar levemente.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ded9c8756dc14fd26e3150c4718cd9d0'] = 'Aquí se muestra un sumario de lo que puede afectar a la hora de crear cuentas de clientes.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_3493de9f70480000ac99a1d5fc021dcb'] = 'Una campaña publicitaria puede atraer un mayor número de visitantes.Un incremento de clientes registrados le dará cierta seguridad, pero depende de su \\"calidad\\": una publicidad bien dirigida puede resultar más efectiva que un campaña a gran escala.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_76dcf557776c2b40d47b72ebcd9ac6b7'] = 'El número total de cuentas creadas no es en sí misma información importante. Sin embargo, es interesante analizar la cantidad creada en un cierto plazo. Esto indicará de una manera u otra si las cosas van por buen camino.'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_8b15fc6468c919d299f9a601b61b95fc'] = 'Cuentas cliente'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guía'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_57a6f41a27c9baa5b402d30e97d4c1e8'] = '¿Cómo intervenir en la evolución de las suscripciones?'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f8426f15c536f4341dbeb4d806f76167'] = 'Un aumento significativo o una disminución demuestra que ha habido probablemente un cambio en su tienda; por lo tanto, usted debe identificarlo y dar marcha atrás si ha habido una disminución de suscripciones o continuar con él si es ventajoso.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_52a6042899eefb32fcd219672c0c7179'] = 'El diseño y la accesibilidad son más importantes que nunca: una mala accesibilidad o una mala presentación gráfica puede hacer que sus visitantes se vayan. Tiene que crear un balance entre un diseño innovador que permita al visitante moverse por la red con comodidad. Un escritura clara y correcta también inspirarán más confianza para el cliente hacia su comercio.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_089c9061407fd978366e78b6ad1d0111'] = 'Mostrar la progresión de la suscripción de clientes'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_4e4f3af3fb18136b8eec4b77f25095ce'] = 'Visitantes que han efectuado un pedido directamente después de suscribirse:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ac379194b8c2ea6c2e26be3672fdf7f7'] = 'Un aumento significativo o una disminución demuestra que ha habido probablemente un cambio en su tienda; por lo tanto, usted debe identificarlo y dar marcha atrás si ha habido una disminución de suscripciones o continuar con él si es ventajoso.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_8cb5605d77d1d2f9eab6191c0e027747'] = 'El diseño y la accesibilidad son más importantes que nunca: una mala accesibilidad o una mala presentación gráfica puede hacer que sus visitantes se vayan. Tiene que crear un balance entre un diseño innovador que permita al visitante moverse por la red con comodidad. Un escritura clara y correcta también inspirarán más confianza para el cliente hacia su comercio.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_5eaafc713c2425b16202065927ea0220'] = 'Mostrar la progresión de la suscripción de clientes'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_479c1246d97709e234574e1d2921994d'] = 'Visitantes que han efectuado un pedido directamente después de suscribirse:'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_998e4c5c80f27dec552e99dfed34889a'] = 'CSV Export'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_fba0e64541196123bbf8e3737bf9287b'] = 'Número de clientes que han creado una cuenta'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_b2eceb617c0a86e0dbe5d844f0ec353e'] = 'Ofertas especiales, rebajas o contenidos crean grandes espectativas y curiosidad, así no sólo se mantiene activo su comercio activo sino que además aumenta el tráfico. De esta manera, puede captar clientes impulsivos.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_c53d1447202b4d629cf3b96dc4b1056d'] = 'Ofertas especiales, rebajas o contenidos crean grandes espectativas y curiosidad, así no sólo se mantiene activo su comercio activo sino que además aumenta el tráfico. De esta manera, puede captar clientes impulsivos.'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_a751e9cc4ed4c7585ecc0d97781cb48a'] = 'Total cuentas cliente:'; diff --git a/modules/statsregistrations/translations/fr.php b/modules/statsregistrations/translations/fr.php index 45841e2fb..68e5030e4 100644 --- a/modules/statsregistrations/translations/fr.php +++ b/modules/statsregistrations/translations/fr.php @@ -3,19 +3,19 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statsregistrations}prestashop>statsregistrations_48ad285c9749cc74821048c49aea6a50'] = 'Différents modificateurs sont possibles : '; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_cd0d9770ca8ee818040fa3453fbaa1ae'] = 'Une campagne de publicité peut attirer un grand nombre de visiteurs. De plus, une campagne de pub bien ciblée peut s\'avérer plus efficace qu\'une publicité à grande échelle.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_75abad0b891bc086fd4837e81a8c488a'] = 'Visiteurs bloqués à la phase d\'inscription :'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_a286f4eaef73a0b4f955c42b84472444'] = 'Le nombre d\'inscrits en lui-même n\'est pas important. Il vous permet surtout d\'apprécier son évolution sur une période plus ou moins longue. '; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f123e4522d188fba4cbe1dc58034f95c'] = 'Si vous laissez votre boutique tourner sans rien changer, le nombre d\'inscriptions devrait être stable ou baisser légèrement. '; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f8426f15c536f4341dbeb4d806f76167'] = 'Une forte croissance ou une forte baisse montre donc probablement un changement sur votre boutique. C\'est pourquoi vous devez l\'identifier de manière à pouvoir revenir sur vos pas au cas où ce changement fait décroître le nombre d\'inscriptions, ou au contraire continuer dans cette voie si celui-ci se trouve avantageux.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_52a6042899eefb32fcd219672c0c7179'] = 'Esthétique : un changement de thème peut rebuter les visiteurs. L\'orthographe et la clarté sont également à soigner. '; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ded9c8756dc14fd26e3150c4718cd9d0'] = 'Différents modificateurs sont possibles : '; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_3493de9f70480000ac99a1d5fc021dcb'] = 'Une campagne de publicité peut attirer un grand nombre de visiteurs. De plus, une campagne de pub bien ciblée peut s\'avérer plus efficace qu\'une publicité à grande échelle.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_247b3bdef50a59d5a83f23c4f1c8fa47'] = 'Visiteurs bloqués à la phase d\'inscription :'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_76dcf557776c2b40d47b72ebcd9ac6b7'] = 'Le nombre d\'inscrits en lui-même n\'est pas important. Il vous permet surtout d\'apprécier son évolution sur une période plus ou moins longue. '; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_2d8c349a97131b417bf7da166afb17bd'] = 'Si vous laissez votre boutique tourner sans rien changer, le nombre d\'inscriptions devrait être stable ou baisser légèrement. '; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ac379194b8c2ea6c2e26be3672fdf7f7'] = 'Une forte croissance ou une forte baisse montre donc probablement un changement sur votre boutique. C\'est pourquoi vous devez l\'identifier de manière à pouvoir revenir sur vos pas au cas où ce changement fait décroître le nombre d\'inscriptions, ou au contraire continuer dans cette voie si celui-ci se trouve avantageux.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_8cb5605d77d1d2f9eab6191c0e027747'] = 'Esthétique : un changement de thème peut rebuter les visiteurs. L\'orthographe et la clarté sont également à soigner. '; $_MODULE['<{statsregistrations}prestashop>statsregistrations_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_57a6f41a27c9baa5b402d30e97d4c1e8'] = 'Comment agir sur l\'évolution des inscriptions ?'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_8b15fc6468c919d299f9a601b61b95fc'] = 'Comptes clients'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_089c9061407fd978366e78b6ad1d0111'] = 'Affiche l\'évolution des créations de compte'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_b2eceb617c0a86e0dbe5d844f0ec353e'] = 'Les promotions, soldes ou jeux-concours attirent fortement l\'attention et la curiosité des visiteurs ; permettant non seulement d\'animer votre boutique, mais aussi d\'en augmenter son trafic. De cette manière, vous pouvez pousser un acheteur \\"spontané\\" à se lancer.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_4e4f3af3fb18136b8eec4b77f25095ce'] = 'Visiteurs ayant passé une commande dès leur inscription :'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_5eaafc713c2425b16202065927ea0220'] = 'Affiche l\'évolution des créations de compte'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_c53d1447202b4d629cf3b96dc4b1056d'] = 'Les promotions, soldes ou jeux-concours attirent fortement l\'attention et la curiosité des visiteurs ; permettant non seulement d\'animer votre boutique, mais aussi d\'en augmenter son trafic. De cette manière, vous pouvez pousser un acheteur \\"spontané\\" à se lancer.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_479c1246d97709e234574e1d2921994d'] = 'Visiteurs ayant passé une commande dès leur inscription :'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_998e4c5c80f27dec552e99dfed34889a'] = 'Export CSV'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_fba0e64541196123bbf8e3737bf9287b'] = 'Nombre de comptes créés'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_a751e9cc4ed4c7585ecc0d97781cb48a'] = 'Total de comptes créés :'; diff --git a/modules/statsregistrations/translations/it.php b/modules/statsregistrations/translations/it.php index a7e3d18f2..b580691e7 100644 --- a/modules/statsregistrations/translations/it.php +++ b/modules/statsregistrations/translations/it.php @@ -3,19 +3,19 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statsregistrations}prestashop>statsregistrations_75abad0b891bc086fd4837e81a8c488a'] = 'I visitatori che si sono fermati alla fase di registrazione:'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_a286f4eaef73a0b4f955c42b84472444'] = 'Il numero totale di account creati non è di per sé un\'informazione importante. Tuttavia, è interessante analizzare il numero creato nel tempo. Questo indica se le cose sono sulla strada giusta.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f123e4522d188fba4cbe1dc58034f95c'] = 'Se lasci che il tuo negozio vada avanti senza cambiare nulla, il numero di iscrizioni dei clienti dovrebbe rimanere stabile o diminuire leggermente.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_48ad285c9749cc74821048c49aea6a50'] = 'Ecco un riassunto di ciò che può influenzare la creazione di account cliente:'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_cd0d9770ca8ee818040fa3453fbaa1ae'] = 'Una campagna pubblicitaria può attrarre un numero maggiore di visitatori. Un aumento di account dei clienti che ne seguirà, che dipenderà dalla loro \\"qualità\\": le pubblicità ben mirate possono essere più efficaci di una pubblicità su larga scala.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_247b3bdef50a59d5a83f23c4f1c8fa47'] = 'I visitatori che si sono fermati alla fase di registrazione:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_76dcf557776c2b40d47b72ebcd9ac6b7'] = 'Il numero totale di account creati non è di per sé un\'informazione importante. Tuttavia, è interessante analizzare il numero creato nel tempo. Questo indica se le cose sono sulla strada giusta.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_2d8c349a97131b417bf7da166afb17bd'] = 'Se lasci che il tuo negozio vada avanti senza cambiare nulla, il numero di iscrizioni dei clienti dovrebbe rimanere stabile o diminuire leggermente.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ded9c8756dc14fd26e3150c4718cd9d0'] = 'Ecco un riassunto di ciò che può influenzare la creazione di account cliente:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_3493de9f70480000ac99a1d5fc021dcb'] = 'Una campagna pubblicitaria può attrarre un numero maggiore di visitatori. Un aumento di account dei clienti che ne seguirà, che dipenderà dalla loro \\"qualità\\": le pubblicità ben mirate possono essere più efficaci di una pubblicità su larga scala.'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_8b15fc6468c919d299f9a601b61b95fc'] = 'Account clienti'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guida'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_57a6f41a27c9baa5b402d30e97d4c1e8'] = 'Come agire sull\'evoluzione delle iscrizioni?'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_f8426f15c536f4341dbeb4d806f76167'] = 'Un significativo aumento o diminuzione dimostra che vi è stato probabilmente un cambiamento nel tuo negozio; pertanto, è necessario identificarlo in modo da effettuare degli aggiustamenti laddove questa modifica faccia diminuire il numero di registrazioni, o invece proseguire se il risultato è positivo.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_52a6042899eefb32fcd219672c0c7179'] = 'Design e semplicità d\'uso sono più importanti che mai: una grafica complicata o difficile da seguire può allontanare i visitatori. Devi trovare il giusto equilibrio tra un design innovativo e lasciare che i visitatori si muovano facilmente. Anche una corretta ortografia e una grande chiarezza ispireranno maggiore fiducia nel tuo negozio.'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_089c9061407fd978366e78b6ad1d0111'] = 'Visualizzare lo stato di registrazione del cliente'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_4e4f3af3fb18136b8eec4b77f25095ce'] = 'I visitatori che hanno effettuato un ordine direttamente dopo la registrazione:'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_ac379194b8c2ea6c2e26be3672fdf7f7'] = 'Un significativo aumento o diminuzione dimostra che vi è stato probabilmente un cambiamento nel tuo negozio; pertanto, è necessario identificarlo in modo da effettuare degli aggiustamenti laddove questa modifica faccia diminuire il numero di registrazioni, o invece proseguire se il risultato è positivo.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_8cb5605d77d1d2f9eab6191c0e027747'] = 'Design e semplicità d\'uso sono più importanti che mai: una grafica complicata o difficile da seguire può allontanare i visitatori. Devi trovare il giusto equilibrio tra un design innovativo e lasciare che i visitatori si muovano facilmente. Anche una corretta ortografia e una grande chiarezza ispireranno maggiore fiducia nel tuo negozio.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_5eaafc713c2425b16202065927ea0220'] = 'Visualizzare lo stato di registrazione del cliente'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_479c1246d97709e234574e1d2921994d'] = 'I visitatori che hanno effettuato un ordine direttamente dopo la registrazione:'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_998e4c5c80f27dec552e99dfed34889a'] = 'Esporta CSV'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_fba0e64541196123bbf8e3737bf9287b'] = 'Numero di account clienti creati'; -$_MODULE['<{statsregistrations}prestashop>statsregistrations_b2eceb617c0a86e0dbe5d844f0ec353e'] = 'Le promozioni, le vendite, o concorsi creano una maggiore attenzione e curiosità, non solo mantengono vivace il tuo negozio, ma ne aumentano il traffico. In questo modo, puoi spingere gli acquirenti impulsivi a fare il grande passo.'; +$_MODULE['<{statsregistrations}prestashop>statsregistrations_c53d1447202b4d629cf3b96dc4b1056d'] = 'Le promozioni, le vendite, o concorsi creano una maggiore attenzione e curiosità, non solo mantengono vivace il tuo negozio, ma ne aumentano il traffico. In questo modo, puoi spingere gli acquirenti impulsivi a fare il grande passo.'; $_MODULE['<{statsregistrations}prestashop>statsregistrations_a751e9cc4ed4c7585ecc0d97781cb48a'] = 'Totale account dei clienti:'; diff --git a/modules/statssales/config.xml b/modules/statssales/config.xml index f0ee70025..4c92bbcab 100644 --- a/modules/statssales/config.xml +++ b/modules/statssales/config.xml @@ -3,7 +3,7 @@ statssales - + 0 diff --git a/modules/statssales/statssales.php b/modules/statssales/statssales.php index 4805eaf3d..cf2baee49 100644 --- a/modules/statssales/statssales.php +++ b/modules/statssales/statssales.php @@ -46,7 +46,7 @@ class StatsSales extends ModuleGraph parent::__construct(); $this->displayName = $this->l('Sales and orders'); - $this->description = $this->l('Display the sales evolution and orders by statuses'); + $this->description = $this->l('Display sales evolution and orders by status.'); } public function install() @@ -76,7 +76,7 @@ class StatsSales extends ModuleGraph

    - '.$this->l('These graphs represent the evolution of your orders and sales turnover for a given period. This tool allows for quick overview of the viability of your shop. You can also keep watch on the difference between time periods (like the holiday season). Only valid orders are included in these two graphs.').' + '.$this->l('The following graphs represent the evolution of your e-store\'s orders and sales turnover for a selected period. This tool is one that you should use often as it allows you to quickly monitor your store\'s viability. This feature also allows you to monitor multiple time periods, and only valid orders are graphically represented.').'

    '.$this->l('Orders placed:').' '.(int)($totals['orderCount']).'

    '.$this->l('Products bought:').' '.(int)($totals['products']).'

    @@ -86,7 +86,7 @@ class StatsSales extends ModuleGraph
    '.$this->engine(array('type' => 'line', 'option' => '2-'.(int)Tools::getValue('id_country'))).'

    '.$this->l('CSV Export').'

    - '.$this->l('You can see the order state distribution below.').' + '.$this->l('You can view order distribution below.').'


    '.($totals['orderCount'] ? $this->engine(array('type' => 'pie', 'option' => '3-'.(int)Tools::getValue('id_country'))) : $this->l('No orders for this period.')).'

    '.$this->l('CSV Export').'

    @@ -95,8 +95,8 @@ class StatsSales extends ModuleGraph

    '.$this->l('Guide').'

    '.$this->l('Various order statuses').'

    - '.$this->l('In your back-office, you can find the following order statuses : Awaiting check payment, Payment accepted, Preparation in progress, Shipping, Delivered, Cancelled, Refund, Payment error, Out of stock, and Awaiting bank wire payment.').'
    - '.$this->l('Statuses cannot be removed from the back-office, but you have the option to add more.').' + '.$this->l('In your Back Office, you can modify the following order statuses: Awaiting Check Payment, Payment Accepted, Preparation in Progress, Shipping, Delivered, Cancelled, Refund, Payment Error, Out of Stock, and Awaiting Bank Wire Payment.').'
    + '.$this->l('These order statuses cannot be removed from the Back Office, however you have the option to add more.').'

    '; return $this->_html; @@ -141,7 +141,7 @@ class StatsSales extends ModuleGraph $this->_titles['main'] = $this->l('Sales in').' '.$currency->iso_code; break; case 3: - $this->_titles['main'] = $this->l('Percentage of orders by status'); + $this->_titles['main'] = $this->l('Percentage of orders by status.'); break; } } diff --git a/modules/statssales/translations/de.php b/modules/statssales/translations/de.php index 006363b5a..6286996af 100644 --- a/modules/statssales/translations/de.php +++ b/modules/statssales/translations/de.php @@ -12,14 +12,14 @@ $_MODULE['<{statssales}prestashop>statssales_14f1c54626d722168ee62dff05ed811e'] $_MODULE['<{statssales}prestashop>statssales_45c4b3e103155326596d6ccd2fea0f25'] = 'Verkäufe und Bestellungen'; $_MODULE['<{statssales}prestashop>statssales_9ccb8353e945f1389a9585e7f21b5a0d'] = 'Erfolgte Bestellungen:'; $_MODULE['<{statssales}prestashop>statssales_da80af4de99df74dd59e665adf1fac8f'] = 'Keine Bestellung für diesen Zeitraum'; -$_MODULE['<{statssales}prestashop>statssales_33eee7690a8cd62490ed9eeadd47d163'] = 'Prozente der Bestellungen nach Status'; -$_MODULE['<{statssales}prestashop>statssales_052d402bac5d6be562de993113d3108b'] = 'Diese Grafiken stellen die Entwicklung Ihrer Bestellungen und Verkaufsumsätze für einen bestimmten Zeitraum dar. Es ist kein fortgeschrittenes Analyse-Tool, aber Sie können die Rentabilität Ihres Shops mit einem Blick erfassen. Sie Könne auch Unterschiede im Vergleich zu anderen Zeiträumen überwachen, z.B. Weihnachten. Nur bestätigte Bestellungen werden in diesen beiden Grafiken berücksichtigt.'; -$_MODULE['<{statssales}prestashop>statssales_94272e39a7493ab1baf7600d78926024'] = 'In Ihrem Back Office finden Sie viele andere Bestellstatus: Scheckzahlung in Bearbeitung, Zahlung akzeptiert, Vorbereitung im Gang, Versand, Geliefert, Abgebrochen, Rückzahlung, Fehler bei Zahlung, Lagerfehlbestand sowie Zahlung durch Banküberweisung in Bearbeitung.'; -$_MODULE['<{statssales}prestashop>statssales_d3ca3781ea021039c95d2830dd6db169'] = 'Dieses Satatus können nicht aus dem Back Office entfernt werden, neue können jedoch hinzugefügt werden.'; -$_MODULE['<{statssales}prestashop>statssales_09a6e97d1ccb13182c8fd316450dbebf'] = 'Anzeige der Umsatzentwicklung und Bestellungen nach Status'; +$_MODULE['<{statssales}prestashop>statssales_b63d7e91b286748a447bf3573dbc9bfb'] = 'Prozente der Bestellungen nach Status'; +$_MODULE['<{statssales}prestashop>statssales_35214bc44485bc7161f9d1bdbacad5b8'] = 'Diese Grafiken stellen die Entwicklung Ihrer Bestellungen und Verkaufsumsätze für einen bestimmten Zeitraum dar. Es ist kein fortgeschrittenes Analyse-Tool, aber Sie können die Rentabilität Ihres Shops mit einem Blick erfassen. Sie Könne auch Unterschiede im Vergleich zu anderen Zeiträumen überwachen, z.B. Weihnachten. Nur bestätigte Bestellungen werden in diesen beiden Grafiken berücksichtigt.'; +$_MODULE['<{statssales}prestashop>statssales_ecfa88580e342ade21a8403765c0dde6'] = 'In Ihrem Back Office finden Sie viele andere Bestellstatus: Scheckzahlung in Bearbeitung, Zahlung akzeptiert, Vorbereitung im Gang, Versand, Geliefert, Abgebrochen, Rückzahlung, Fehler bei Zahlung, Lagerfehlbestand sowie Zahlung durch Banküberweisung in Bearbeitung.'; +$_MODULE['<{statssales}prestashop>statssales_d60bf28bef003143f1b95edbbc08cd68'] = 'Dieses Satatus können nicht aus dem Back Office entfernt werden, neue können jedoch hinzugefügt werden.'; +$_MODULE['<{statssales}prestashop>statssales_f57f893f9fbc11843fd4c9997ec41824'] = 'Anzeige der Umsatzentwicklung und Bestellungen nach Status'; $_MODULE['<{statssales}prestashop>statssales_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Alle'; $_MODULE['<{statssales}prestashop>statssales_156e5c5872c9af24a5c982da07a883c2'] = 'Gekaufte Produkte:'; -$_MODULE['<{statssales}prestashop>statssales_0718e1ec4754e199aa9cb4bc43a6ff53'] = 'Hier können Sie die Bestellstatusverteilung sehen.'; +$_MODULE['<{statssales}prestashop>statssales_14b2ae2d824b5dfd798a8caf35732136'] = 'Hier können Sie die Bestellstatusverteilung sehen.'; $_MODULE['<{statssales}prestashop>statssales_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; $_MODULE['<{statssales}prestashop>statssales_bb7ad89807bf69ddca986c142311f936'] = 'Produkte und Bestellungen'; $_MODULE['<{statssales}prestashop>statssales_12c500ed0b7879105fb46af0f246be87'] = 'Bestellungen'; diff --git a/modules/statssales/translations/es.php b/modules/statssales/translations/es.php index b34e5076b..6a7c8116a 100644 --- a/modules/statssales/translations/es.php +++ b/modules/statssales/translations/es.php @@ -12,14 +12,14 @@ $_MODULE['<{statssales}prestashop>statssales_14f1c54626d722168ee62dff05ed811e'] $_MODULE['<{statssales}prestashop>statssales_45c4b3e103155326596d6ccd2fea0f25'] = 'Ventas y pedidos'; $_MODULE['<{statssales}prestashop>statssales_9ccb8353e945f1389a9585e7f21b5a0d'] = 'Pedidos realizados:'; $_MODULE['<{statssales}prestashop>statssales_da80af4de99df74dd59e665adf1fac8f'] = 'No hay pedidos para este periodo'; -$_MODULE['<{statssales}prestashop>statssales_33eee7690a8cd62490ed9eeadd47d163'] = 'Porcentaje de pedidos por estado'; -$_MODULE['<{statssales}prestashop>statssales_052d402bac5d6be562de993113d3108b'] = 'Estos gráficos representan la evolución de los pedidos y del volumen de ventas en un periodo dado. No son herramientas de análisis avanzadas pero le permiten ver la rentabilidad de su tienda inmediatamente. También puede observar variaciones en periodos concretos, como Navidad. Sólo los pedidos válidos se incluyen en estos gráficos.'; -$_MODULE['<{statssales}prestashop>statssales_94272e39a7493ab1baf7600d78926024'] = 'En su Back-Office, hay varios estados de pedido disponibles: En espera de pago por cheque, Pago aceptado, Preparación en curso, En espera de entraga, Entregado, Anulado, Reembolsado, Error de pago, Productos no disponibles y en espera de pago por transferencia bancaria.'; -$_MODULE['<{statssales}prestashop>statssales_d3ca3781ea021039c95d2830dd6db169'] = 'Estos estados no pueden suprimirse a partir del Back-Office, sin embargo puede añadir otros nuevos.'; -$_MODULE['<{statssales}prestashop>statssales_09a6e97d1ccb13182c8fd316450dbebf'] = 'Mostrar la evolución de las ventas y de los pedidos por estados'; +$_MODULE['<{statssales}prestashop>statssales_b63d7e91b286748a447bf3573dbc9bfb'] = 'Porcentaje de pedidos por estado'; +$_MODULE['<{statssales}prestashop>statssales_35214bc44485bc7161f9d1bdbacad5b8'] = 'Estos gráficos representan la evolución de los pedidos y del volumen de ventas en un periodo dado. No son herramientas de análisis avanzadas pero le permiten ver la rentabilidad de su tienda inmediatamente. También puede observar variaciones en periodos concretos, como Navidad. Sólo los pedidos válidos se incluyen en estos gráficos.'; +$_MODULE['<{statssales}prestashop>statssales_ecfa88580e342ade21a8403765c0dde6'] = 'En su Back-Office, hay varios estados de pedido disponibles: En espera de pago por cheque, Pago aceptado, Preparación en curso, En espera de entraga, Entregado, Anulado, Reembolsado, Error de pago, Productos no disponibles y en espera de pago por transferencia bancaria.'; +$_MODULE['<{statssales}prestashop>statssales_d60bf28bef003143f1b95edbbc08cd68'] = 'Estos estados no pueden suprimirse a partir del Back-Office, sin embargo puede añadir otros nuevos.'; +$_MODULE['<{statssales}prestashop>statssales_f57f893f9fbc11843fd4c9997ec41824'] = 'Mostrar la evolución de las ventas y de los pedidos por estados'; $_MODULE['<{statssales}prestashop>statssales_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Todas'; $_MODULE['<{statssales}prestashop>statssales_156e5c5872c9af24a5c982da07a883c2'] = 'Productos pedidos:'; -$_MODULE['<{statssales}prestashop>statssales_0718e1ec4754e199aa9cb4bc43a6ff53'] = 'Puede ver la distribución del estado del pedido a continuación.'; +$_MODULE['<{statssales}prestashop>statssales_14b2ae2d824b5dfd798a8caf35732136'] = 'Puede ver la distribución del estado del pedido a continuación.'; $_MODULE['<{statssales}prestashop>statssales_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guía'; $_MODULE['<{statssales}prestashop>statssales_bb7ad89807bf69ddca986c142311f936'] = 'Productos y pedidos'; $_MODULE['<{statssales}prestashop>statssales_12c500ed0b7879105fb46af0f246be87'] = 'Pedidos'; diff --git a/modules/statssales/translations/fr.php b/modules/statssales/translations/fr.php index 6fcd8ba6c..36782cc2b 100644 --- a/modules/statssales/translations/fr.php +++ b/modules/statssales/translations/fr.php @@ -12,14 +12,14 @@ $_MODULE['<{statssales}prestashop>statssales_ec3e48bb9aa902ba2ad608547fdcbfdc'] $_MODULE['<{statssales}prestashop>statssales_45c4b3e103155326596d6ccd2fea0f25'] = 'Commandes et CA'; $_MODULE['<{statssales}prestashop>statssales_9ccb8353e945f1389a9585e7f21b5a0d'] = 'Commandes passées :'; $_MODULE['<{statssales}prestashop>statssales_da80af4de99df74dd59e665adf1fac8f'] = 'Aucune commande pour cette période.'; -$_MODULE['<{statssales}prestashop>statssales_33eee7690a8cd62490ed9eeadd47d163'] = 'Pourcentage de commandes par état'; -$_MODULE['<{statssales}prestashop>statssales_052d402bac5d6be562de993113d3108b'] = 'Ces graphiques représentent l\'évolution de vos commandes et chiffre d\'affaires pour une période donnée. Ce n\'est pas un outil d\'analyse avancé mais il vous permet toutefois de visualiser la rentabilité de votre boutique en un clin d’œil. Vous pouvez également comparer les ventes entre différentes périodes (Noël, ...). Seules les commandes valides sont inclues dans ces deux graphes.'; -$_MODULE['<{statssales}prestashop>statssales_94272e39a7493ab1baf7600d78926024'] = 'Au sein de votre back-office, plusieurs états de commande sont disponibles : En attente du paiement par chèque, Paiement accepté, Préparation en cours, En cours de livraison, Livré, Annulé, Remboursé, Erreur de paiement, Produits indisponibles et En attente du paiement par virement bancaire.'; -$_MODULE['<{statssales}prestashop>statssales_d3ca3781ea021039c95d2830dd6db169'] = 'Ces états ne peuvent être supprimés depuis le back-office, cependant vous pouvez en ajouter de nouveaux.'; -$_MODULE['<{statssales}prestashop>statssales_09a6e97d1ccb13182c8fd316450dbebf'] = 'Affiche l\'évolution du chiffre d\'affaires et la répartition des commandes par leurs états.'; +$_MODULE['<{statssales}prestashop>statssales_b63d7e91b286748a447bf3573dbc9bfb'] = 'Pourcentage de commandes par état'; +$_MODULE['<{statssales}prestashop>statssales_35214bc44485bc7161f9d1bdbacad5b8'] = 'Ces graphiques représentent l\'évolution de vos commandes et chiffre d\'affaires pour une période donnée. Ce n\'est pas un outil d\'analyse avancé mais il vous permet toutefois de visualiser la rentabilité de votre boutique en un clin d’œil. Vous pouvez également comparer les ventes entre différentes périodes (Noël, ...). Seules les commandes valides sont inclues dans ces deux graphes.'; +$_MODULE['<{statssales}prestashop>statssales_ecfa88580e342ade21a8403765c0dde6'] = 'Au sein de votre back-office, plusieurs états de commande sont disponibles : En attente du paiement par chèque, Paiement accepté, Préparation en cours, En cours de livraison, Livré, Annulé, Remboursé, Erreur de paiement, Produits indisponibles et En attente du paiement par virement bancaire.'; +$_MODULE['<{statssales}prestashop>statssales_d60bf28bef003143f1b95edbbc08cd68'] = 'Ces états ne peuvent être supprimés depuis le back-office, cependant vous pouvez en ajouter de nouveaux.'; +$_MODULE['<{statssales}prestashop>statssales_f57f893f9fbc11843fd4c9997ec41824'] = 'Affiche l\'évolution du chiffre d\'affaires et la répartition des commandes par leurs états.'; $_MODULE['<{statssales}prestashop>statssales_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Tout afficher'; $_MODULE['<{statssales}prestashop>statssales_156e5c5872c9af24a5c982da07a883c2'] = 'Produits commandés :'; -$_MODULE['<{statssales}prestashop>statssales_0718e1ec4754e199aa9cb4bc43a6ff53'] = 'La répartition des états de commande est représentée ci-dessous.'; +$_MODULE['<{statssales}prestashop>statssales_14b2ae2d824b5dfd798a8caf35732136'] = 'La répartition des états de commande est représentée ci-dessous.'; $_MODULE['<{statssales}prestashop>statssales_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; $_MODULE['<{statssales}prestashop>statssales_bb7ad89807bf69ddca986c142311f936'] = 'Commandes et produits'; $_MODULE['<{statssales}prestashop>statssales_12c500ed0b7879105fb46af0f246be87'] = 'Commandes'; diff --git a/modules/statssales/translations/it.php b/modules/statssales/translations/it.php index 6f808691b..1b8b56f31 100644 --- a/modules/statssales/translations/it.php +++ b/modules/statssales/translations/it.php @@ -12,14 +12,14 @@ $_MODULE['<{statssales}prestashop>statssales_14f1c54626d722168ee62dff05ed811e'] $_MODULE['<{statssales}prestashop>statssales_45c4b3e103155326596d6ccd2fea0f25'] = 'Le vendite e gli ordini'; $_MODULE['<{statssales}prestashop>statssales_9ccb8353e945f1389a9585e7f21b5a0d'] = 'Gli ordini effettuati:'; $_MODULE['<{statssales}prestashop>statssales_da80af4de99df74dd59e665adf1fac8f'] = 'Nessun ordine per questo periodo'; -$_MODULE['<{statssales}prestashop>statssales_33eee7690a8cd62490ed9eeadd47d163'] = 'Percentuale degli ordini in base allo stato'; -$_MODULE['<{statssales}prestashop>statssales_052d402bac5d6be562de993113d3108b'] = 'Questi grafici rappresentano l\'evoluzione dei tuoi ordini e del fatturato per un determinato periodo. Non è uno strumento di analisi avanzata, ma almeno puoi controllare la redditività del tuo negozio in un lampo. È inoltre possibile tenere sotto controllo la differenza rispetto ad alcuni periodi come Natale. Solo gli ordini validi sono compresi in questi due grafici.'; -$_MODULE['<{statssales}prestashop>statssales_d3ca3781ea021039c95d2830dd6db169'] = 'Questi stati non possono essere rimossi dal back-office, ma si ha la possibilità di aggiungerne altri'; -$_MODULE['<{statssales}prestashop>statssales_94272e39a7493ab1baf7600d78926024'] = 'Nel tuo back-office, è possibile trovare molti stati dell\'ordine: In attesa di pagamento con assegno, Pagamento accettato, Preparazione in corso, Spedizione, Consegnato, Annullato, Rimborso, Errore di pagamento, Esaurito, e In attesa di pagamento con bonifico bancario.'; -$_MODULE['<{statssales}prestashop>statssales_09a6e97d1ccb13182c8fd316450dbebf'] = 'Visualizza l\'andamento delle vendite e degli ordini per status'; +$_MODULE['<{statssales}prestashop>statssales_b63d7e91b286748a447bf3573dbc9bfb'] = 'Percentuale degli ordini in base allo stato'; +$_MODULE['<{statssales}prestashop>statssales_35214bc44485bc7161f9d1bdbacad5b8'] = 'Questi grafici rappresentano l\'evoluzione dei tuoi ordini e del fatturato per un determinato periodo. Non è uno strumento di analisi avanzata, ma almeno puoi controllare la redditività del tuo negozio in un lampo. È inoltre possibile tenere sotto controllo la differenza rispetto ad alcuni periodi come Natale. Solo gli ordini validi sono compresi in questi due grafici.'; +$_MODULE['<{statssales}prestashop>statssales_d60bf28bef003143f1b95edbbc08cd68'] = 'Questi stati non possono essere rimossi dal back-office, ma si ha la possibilità di aggiungerne altri'; +$_MODULE['<{statssales}prestashop>statssales_ecfa88580e342ade21a8403765c0dde6'] = 'Nel tuo back-office, è possibile trovare molti stati dell\'ordine: In attesa di pagamento con assegno, Pagamento accettato, Preparazione in corso, Spedizione, Consegnato, Annullato, Rimborso, Errore di pagamento, Esaurito, e In attesa di pagamento con bonifico bancario.'; +$_MODULE['<{statssales}prestashop>statssales_f57f893f9fbc11843fd4c9997ec41824'] = 'Visualizza l\'andamento delle vendite e degli ordini per status'; $_MODULE['<{statssales}prestashop>statssales_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Tutti'; $_MODULE['<{statssales}prestashop>statssales_156e5c5872c9af24a5c982da07a883c2'] = 'I prodotti acquistati:'; $_MODULE['<{statssales}prestashop>statssales_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guida'; $_MODULE['<{statssales}prestashop>statssales_bb7ad89807bf69ddca986c142311f936'] = 'Prodotti e ordini'; $_MODULE['<{statssales}prestashop>statssales_12c500ed0b7879105fb46af0f246be87'] = 'Ordini'; -$_MODULE['<{statssales}prestashop>statssales_0718e1ec4754e199aa9cb4bc43a6ff53'] = 'È possibile visualizzare la distribuzione dello stato dell\'ordine di seguito.'; +$_MODULE['<{statssales}prestashop>statssales_14b2ae2d824b5dfd798a8caf35732136'] = 'È possibile visualizzare la distribuzione dello stato dell\'ordine di seguito.'; diff --git a/modules/statssearch/config.xml b/modules/statssearch/config.xml index 659cd86ea..019a8ea52 100755 --- a/modules/statssearch/config.xml +++ b/modules/statssearch/config.xml @@ -3,7 +3,7 @@ statssearch - + 0 diff --git a/modules/statssearch/statssearch.php b/modules/statssearch/statssearch.php index 64089cdbb..93a5b0288 100644 --- a/modules/statssearch/statssearch.php +++ b/modules/statssearch/statssearch.php @@ -54,7 +54,7 @@ class StatsSearch extends ModuleGraph ORDER BY occurences DESC'; $this->displayName = $this->l('Shop search'); - $this->description = $this->l('Display which keywords have been searched by your visitors.'); + $this->description = $this->l('Display which keywords have been searched by your store\'s visitors.'); } public function install() @@ -124,14 +124,14 @@ class StatsSearch extends ModuleGraph

    '.$this->l('CSV Export').'


    '.$table; else - $this->_html .= '

    '.$this->l('No keywords searched more than once found.').'

    '; + $this->_html .= '

    '.$this->l('No keywords searched more than once have been found.').'

    '; $this->_html .= '
'; return $this->_html; } protected function getData($layers) { - $this->_titles['main'] = $this->l('First 10 keywords'); + $this->_titles['main'] = $this->l('Top 10 keywords'); $totalResult = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($this->_query.$this->getDate().$this->_query2); $total = 0; $total2 = 0; diff --git a/modules/statssearch/translations/de.php b/modules/statssearch/translations/de.php index 881ce7af8..d58ac496c 100644 --- a/modules/statssearch/translations/de.php +++ b/modules/statssearch/translations/de.php @@ -3,12 +3,12 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statssearch}prestashop>statssearch_5393c969e2fb0e630e03b993fee091e7'] = 'Anzeigen, welche Keywords von Ihren Besuchern gesucht worden sind'; +$_MODULE['<{statssearch}prestashop>statssearch_a29d1afff7134121b6e55590e038caa8'] = 'Anzeigen, welche Keywords von Ihren Besuchern gesucht worden sind'; $_MODULE['<{statssearch}prestashop>statssearch_e52e6aa1a43a0187e44f048f658db5f9'] = 'Vorkommen'; $_MODULE['<{statssearch}prestashop>statssearch_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Andere'; $_MODULE['<{statssearch}prestashop>statssearch_8c3c245232744602822902b97e65d6f9'] = 'Shop-Suche'; $_MODULE['<{statssearch}prestashop>statssearch_867343577fa1f33caa632a19543bd252'] = 'Keywords'; $_MODULE['<{statssearch}prestashop>statssearch_fd69c5cf902969e6fb71d043085ddee6'] = 'Ergebnisse'; -$_MODULE['<{statssearch}prestashop>statssearch_df7e8db30f72561b6c3f3941ce88722a'] = 'Keine Keywords gesucht, die mehr als einmal gefunden wurden.'; +$_MODULE['<{statssearch}prestashop>statssearch_eebd23d2b8567d0d92496ac99dcd343e'] = 'Keine Keywords gesucht, die mehr als einmal gefunden wurden.'; $_MODULE['<{statssearch}prestashop>statssearch_998e4c5c80f27dec552e99dfed34889a'] = 'CSV-Export'; -$_MODULE['<{statssearch}prestashop>statssearch_6b4d88dce7077cd4181a692a1678b60a'] = '10 erste Keywords'; +$_MODULE['<{statssearch}prestashop>statssearch_e15832aa200f342e8f4ab580b43a72a8'] = '10 erste Keywords'; diff --git a/modules/statssearch/translations/es.php b/modules/statssearch/translations/es.php index 584d061de..e2917758a 100644 --- a/modules/statssearch/translations/es.php +++ b/modules/statssearch/translations/es.php @@ -3,12 +3,12 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statssearch}prestashop>statssearch_5393c969e2fb0e630e03b993fee091e7'] = 'Mostrar las palabras clave que han sido utilizadas por sus visitantes'; +$_MODULE['<{statssearch}prestashop>statssearch_a29d1afff7134121b6e55590e038caa8'] = 'Mostrar las palabras clave que han sido utilizadas por sus visitantes'; $_MODULE['<{statssearch}prestashop>statssearch_e52e6aa1a43a0187e44f048f658db5f9'] = 'Frecuencia'; $_MODULE['<{statssearch}prestashop>statssearch_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Otros'; $_MODULE['<{statssearch}prestashop>statssearch_8c3c245232744602822902b97e65d6f9'] = 'Búsqueda de la tienda'; $_MODULE['<{statssearch}prestashop>statssearch_867343577fa1f33caa632a19543bd252'] = 'Palabras clave'; $_MODULE['<{statssearch}prestashop>statssearch_fd69c5cf902969e6fb71d043085ddee6'] = 'Resultados'; -$_MODULE['<{statssearch}prestashop>statssearch_df7e8db30f72561b6c3f3941ce88722a'] = 'ninguna palabra clave buscada más de una vez'; +$_MODULE['<{statssearch}prestashop>statssearch_eebd23d2b8567d0d92496ac99dcd343e'] = 'ninguna palabra clave buscada más de una vez'; $_MODULE['<{statssearch}prestashop>statssearch_998e4c5c80f27dec552e99dfed34889a'] = 'CSV Export'; -$_MODULE['<{statssearch}prestashop>statssearch_6b4d88dce7077cd4181a692a1678b60a'] = '10 primeras palabras clave'; +$_MODULE['<{statssearch}prestashop>statssearch_e15832aa200f342e8f4ab580b43a72a8'] = '10 primeras palabras clave'; diff --git a/modules/statssearch/translations/fr.php b/modules/statssearch/translations/fr.php index add2d8c93..4f00789cc 100644 --- a/modules/statssearch/translations/fr.php +++ b/modules/statssearch/translations/fr.php @@ -3,12 +3,12 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statssearch}prestashop>statssearch_5393c969e2fb0e630e03b993fee091e7'] = 'Affiche les mots-clés recherchés par vos visiteurs'; +$_MODULE['<{statssearch}prestashop>statssearch_a29d1afff7134121b6e55590e038caa8'] = 'Affiche les mots-clés recherchés par vos visiteurs'; $_MODULE['<{statssearch}prestashop>statssearch_e52e6aa1a43a0187e44f048f658db5f9'] = 'Occurrences'; $_MODULE['<{statssearch}prestashop>statssearch_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Autres'; $_MODULE['<{statssearch}prestashop>statssearch_8c3c245232744602822902b97e65d6f9'] = 'Recherches de la boutique'; $_MODULE['<{statssearch}prestashop>statssearch_867343577fa1f33caa632a19543bd252'] = 'Mots-clés'; $_MODULE['<{statssearch}prestashop>statssearch_fd69c5cf902969e6fb71d043085ddee6'] = 'Résultats'; -$_MODULE['<{statssearch}prestashop>statssearch_df7e8db30f72561b6c3f3941ce88722a'] = 'Aucun mot-clé recherché plus d\'une fois.'; -$_MODULE['<{statssearch}prestashop>statssearch_6b4d88dce7077cd4181a692a1678b60a'] = '10 premiers mots-clés'; +$_MODULE['<{statssearch}prestashop>statssearch_eebd23d2b8567d0d92496ac99dcd343e'] = 'Aucun mot-clé recherché plus d\'une fois.'; +$_MODULE['<{statssearch}prestashop>statssearch_e15832aa200f342e8f4ab580b43a72a8'] = '10 premiers mots-clés'; $_MODULE['<{statssearch}prestashop>statssearch_998e4c5c80f27dec552e99dfed34889a'] = 'Export CSV'; diff --git a/modules/statssearch/translations/it.php b/modules/statssearch/translations/it.php index 6fbf34524..f75160cdc 100644 --- a/modules/statssearch/translations/it.php +++ b/modules/statssearch/translations/it.php @@ -3,12 +3,12 @@ global $_MODULE; $_MODULE = array(); -$_MODULE['<{statssearch}prestashop>statssearch_5393c969e2fb0e630e03b993fee091e7'] = 'Mostra quali parole chiave sono state ricercate dai tuoi visitatori'; +$_MODULE['<{statssearch}prestashop>statssearch_a29d1afff7134121b6e55590e038caa8'] = 'Mostra quali parole chiave sono state ricercate dai tuoi visitatori'; $_MODULE['<{statssearch}prestashop>statssearch_e52e6aa1a43a0187e44f048f658db5f9'] = 'Occorrenze'; $_MODULE['<{statssearch}prestashop>statssearch_52ef9633d88a7480b3a938ff9eaa2a25'] = 'Altri'; $_MODULE['<{statssearch}prestashop>statssearch_8c3c245232744602822902b97e65d6f9'] = 'Ricerca negozio'; $_MODULE['<{statssearch}prestashop>statssearch_867343577fa1f33caa632a19543bd252'] = 'parole chiave'; $_MODULE['<{statssearch}prestashop>statssearch_fd69c5cf902969e6fb71d043085ddee6'] = 'Risultati'; -$_MODULE['<{statssearch}prestashop>statssearch_df7e8db30f72561b6c3f3941ce88722a'] = 'Nessuna parola chiave cercata più di una volta.'; +$_MODULE['<{statssearch}prestashop>statssearch_eebd23d2b8567d0d92496ac99dcd343e'] = 'Nessuna parola chiave cercata più di una volta.'; $_MODULE['<{statssearch}prestashop>statssearch_998e4c5c80f27dec552e99dfed34889a'] = 'Esporta CSV'; -$_MODULE['<{statssearch}prestashop>statssearch_6b4d88dce7077cd4181a692a1678b60a'] = 'Le prime 10 parole chiave'; +$_MODULE['<{statssearch}prestashop>statssearch_e15832aa200f342e8f4ab580b43a72a8'] = 'Le prime 10 parole chiave'; diff --git a/modules/statsstock/config.xml b/modules/statsstock/config.xml index 651cd08d3..6a6667a7e 100755 --- a/modules/statsstock/config.xml +++ b/modules/statsstock/config.xml @@ -1,7 +1,7 @@ statsstock - + diff --git a/modules/statsstock/statsstock.php b/modules/statsstock/statsstock.php index ac6d0674d..8bb57b2ea 100644 --- a/modules/statsstock/statsstock.php +++ b/modules/statsstock/statsstock.php @@ -41,7 +41,7 @@ class StatsStock extends Module parent::__construct(); - $this->displayName = $this->l('Available quantities stats'); + $this->displayName = $this->l('Stats on available quantities.'); $this->description = ''; } @@ -84,7 +84,7 @@ class StatsStock extends Module $this->html .= ' -

'.$this->l('Available quantities for sale valuation').'

+

'.$this->l('Evaluation of available quantities for sale.').'

'.$this->l('Category').' :
'.Tools::displayPrice($rollup['stockvalue'], $currency).'
-

* '.$this->l('Correspond to the default wholesale price according to the default supplier for the product. An average price is used when the product has attributes.').'

'; +

* '.$this->l('This section corresponds to the default wholesale price according to the default supplier for the product. An average price is used when the product has attributes.').'

'; return $this->html; } diff --git a/modules/statsstock/translations/de.php b/modules/statsstock/translations/de.php index 152bcca3f..03c1ad69c 100644 --- a/modules/statsstock/translations/de.php +++ b/modules/statsstock/translations/de.php @@ -13,8 +13,8 @@ $_MODULE['<{statsstock}prestashop>statsstock_689202409e48743b914713f96d93947c'] $_MODULE['<{statsstock}prestashop>statsstock_1b2379801de373b6b563c347014fb34b'] = 'Ihr Katalog ist leer.'; $_MODULE['<{statsstock}prestashop>statsstock_7d74f3b92b19da5e606d737d339a9679'] = 'Artikel'; $_MODULE['<{statsstock}prestashop>statsstock_88940d60e75cf4ff38ce27db4efc83b2'] = 'Preis *'; -$_MODULE['<{statsstock}prestashop>statsstock_40cfe6142794ce67fbee8431434905e2'] = 'Entsprechend des standard Gesamtpreises gemäß des standard Zulieferers für das Produkt. Sollte das Produkt Attribute verwenden, wird ein Durchschnittspreis verwendet.'; -$_MODULE['<{statsstock}prestashop>statsstock_f1c1f40589b2e7f12e0333b8f725fc0f'] = 'Vorhandene Menge Statistiken'; -$_MODULE['<{statsstock}prestashop>statsstock_b840d120e539d6d41af11c6d00df8e8d'] = 'Vorhandene Menge für Verkaufsbewertung'; +$_MODULE['<{statsstock}prestashop>statsstock_a9873f90f06f9e2cfa3d048298ecca8c'] = 'Entsprechend des standard Gesamtpreises gemäß des standard Zulieferers für das Produkt. Sollte das Produkt Attribute verwenden, wird ein Durchschnittspreis verwendet.'; +$_MODULE['<{statsstock}prestashop>statsstock_4416eb048e458e909c65b5210cee2b83'] = 'Vorhandene Menge Statistiken'; +$_MODULE['<{statsstock}prestashop>statsstock_f27f89ed1aeb8108c091677cf7b99c28'] = 'Vorhandene Menge für Verkaufsbewertung'; $_MODULE['<{statsstock}prestashop>statsstock_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Alle'; $_MODULE['<{statsstock}prestashop>statsstock_4364f8c09d7bf97996a20840900e7b30'] = 'Durchschnittl. Preis'; diff --git a/modules/statsstock/translations/es.php b/modules/statsstock/translations/es.php index 437ab3d82..aed594b44 100644 --- a/modules/statsstock/translations/es.php +++ b/modules/statsstock/translations/es.php @@ -13,8 +13,8 @@ $_MODULE['<{statsstock}prestashop>statsstock_689202409e48743b914713f96d93947c'] $_MODULE['<{statsstock}prestashop>statsstock_1b2379801de373b6b563c347014fb34b'] = 'Su catálogo está vacío'; $_MODULE['<{statsstock}prestashop>statsstock_7d74f3b92b19da5e606d737d339a9679'] = 'Artículo'; $_MODULE['<{statsstock}prestashop>statsstock_88940d60e75cf4ff38ce27db4efc83b2'] = 'Precio*'; -$_MODULE['<{statsstock}prestashop>statsstock_40cfe6142794ce67fbee8431434905e2'] = 'Corresponde al precio de venta al por mayor defecto de acuerdo con el proveedor por defecto para el producto. Un precio medio se utiliza cuando el producto tiene atributos.'; -$_MODULE['<{statsstock}prestashop>statsstock_f1c1f40589b2e7f12e0333b8f725fc0f'] = 'Estadísticas de las cantidades disponibles'; -$_MODULE['<{statsstock}prestashop>statsstock_b840d120e539d6d41af11c6d00df8e8d'] = 'Cantidades disponibles para la valoración de la venta'; +$_MODULE['<{statsstock}prestashop>statsstock_a9873f90f06f9e2cfa3d048298ecca8c'] = 'Corresponde al precio de venta al por mayor defecto de acuerdo con el proveedor por defecto para el producto. Un precio medio se utiliza cuando el producto tiene atributos.'; +$_MODULE['<{statsstock}prestashop>statsstock_4416eb048e458e909c65b5210cee2b83'] = 'Estadísticas de las cantidades disponibles'; +$_MODULE['<{statsstock}prestashop>statsstock_f27f89ed1aeb8108c091677cf7b99c28'] = 'Cantidades disponibles para la valoración de la venta'; $_MODULE['<{statsstock}prestashop>statsstock_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Todas'; $_MODULE['<{statsstock}prestashop>statsstock_4364f8c09d7bf97996a20840900e7b30'] = 'Precio medio'; diff --git a/modules/statsstock/translations/fr.php b/modules/statsstock/translations/fr.php index d6c587021..de504c26c 100644 --- a/modules/statsstock/translations/fr.php +++ b/modules/statsstock/translations/fr.php @@ -13,8 +13,8 @@ $_MODULE['<{statsstock}prestashop>statsstock_689202409e48743b914713f96d93947c'] $_MODULE['<{statsstock}prestashop>statsstock_1b2379801de373b6b563c347014fb34b'] = 'Votre catalogue est vide.'; $_MODULE['<{statsstock}prestashop>statsstock_7d74f3b92b19da5e606d737d339a9679'] = 'Article'; $_MODULE['<{statsstock}prestashop>statsstock_88940d60e75cf4ff38ce27db4efc83b2'] = 'Prix*'; -$_MODULE['<{statsstock}prestashop>statsstock_40cfe6142794ce67fbee8431434905e2'] = 'Correspond au prix de vente par défaut selon le fournisseur par défaut du produit. Un prix moyen est utilisé quand le produit possède des déclinaisons.'; -$_MODULE['<{statsstock}prestashop>statsstock_f1c1f40589b2e7f12e0333b8f725fc0f'] = 'Quantités statistiques disponibles'; -$_MODULE['<{statsstock}prestashop>statsstock_b840d120e539d6d41af11c6d00df8e8d'] = 'Quantités disponibles pour la valorisation de la vente'; +$_MODULE['<{statsstock}prestashop>statsstock_a9873f90f06f9e2cfa3d048298ecca8c'] = 'Correspond au prix de vente par défaut selon le fournisseur par défaut du produit. Un prix moyen est utilisé quand le produit possède des déclinaisons.'; +$_MODULE['<{statsstock}prestashop>statsstock_4416eb048e458e909c65b5210cee2b83'] = 'Quantités statistiques disponibles'; +$_MODULE['<{statsstock}prestashop>statsstock_f27f89ed1aeb8108c091677cf7b99c28'] = 'Quantités disponibles pour la valorisation de la vente'; $_MODULE['<{statsstock}prestashop>statsstock_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Toutes'; $_MODULE['<{statsstock}prestashop>statsstock_4364f8c09d7bf97996a20840900e7b30'] = 'Prix moyen'; diff --git a/modules/statsstock/translations/it.php b/modules/statsstock/translations/it.php index 09e7b1ee6..3123c2710 100644 --- a/modules/statsstock/translations/it.php +++ b/modules/statsstock/translations/it.php @@ -13,8 +13,8 @@ $_MODULE['<{statsstock}prestashop>statsstock_689202409e48743b914713f96d93947c'] $_MODULE['<{statsstock}prestashop>statsstock_1b2379801de373b6b563c347014fb34b'] = 'Il tuo catalogo è vuoto.'; $_MODULE['<{statsstock}prestashop>statsstock_7d74f3b92b19da5e606d737d339a9679'] = 'Articolo'; $_MODULE['<{statsstock}prestashop>statsstock_88940d60e75cf4ff38ce27db4efc83b2'] = 'Prezzo *'; -$_MODULE['<{statsstock}prestashop>statsstock_40cfe6142794ce67fbee8431434905e2'] = 'Corrisponde al prezzo predefinito all\'ingrosso in base al fornitore di default per il prodotto. Un prezzo medio viene utilizzato quando il prodotto ha attributi.'; -$_MODULE['<{statsstock}prestashop>statsstock_f1c1f40589b2e7f12e0333b8f725fc0f'] = 'Quantità disponibili per le statistiche'; -$_MODULE['<{statsstock}prestashop>statsstock_b840d120e539d6d41af11c6d00df8e8d'] = 'Quantitativi disponibili per la valutazione delle vendite'; +$_MODULE['<{statsstock}prestashop>statsstock_a9873f90f06f9e2cfa3d048298ecca8c'] = 'Corrisponde al prezzo predefinito all\'ingrosso in base al fornitore di default per il prodotto. Un prezzo medio viene utilizzato quando il prodotto ha attributi.'; +$_MODULE['<{statsstock}prestashop>statsstock_4416eb048e458e909c65b5210cee2b83'] = 'Quantità disponibili per le statistiche'; +$_MODULE['<{statsstock}prestashop>statsstock_f27f89ed1aeb8108c091677cf7b99c28'] = 'Quantitativi disponibili per la valutazione delle vendite'; $_MODULE['<{statsstock}prestashop>statsstock_b1c94ca2fbc3e78fc30069c8d0f01680'] = 'Tutti'; $_MODULE['<{statsstock}prestashop>statsstock_4364f8c09d7bf97996a20840900e7b30'] = 'Prezzo medio'; diff --git a/modules/statsvisits/config.xml b/modules/statsvisits/config.xml index 5b71e88cf..4bb162d79 100755 --- a/modules/statsvisits/config.xml +++ b/modules/statsvisits/config.xml @@ -3,7 +3,7 @@ statsvisits - + 0 diff --git a/modules/statsvisits/statsvisits.php b/modules/statsvisits/statsvisits.php index d9f67e039..c9f7d244f 100644 --- a/modules/statsvisits/statsvisits.php +++ b/modules/statsvisits/statsvisits.php @@ -45,7 +45,7 @@ class StatsVisits extends ModuleGraph parent::__construct(); $this->displayName = $this->l('Visits and Visitors'); - $this->description = $this->l('Display statistics about your visits and visitors.'); + $this->description = $this->l('Displays statistics about your visits and visitors.'); } public function install() @@ -86,8 +86,8 @@ class StatsVisits extends ModuleGraph $this->html = '

'.$this->displayName.'

- '.$this->l('A visit corresponds to an internet user coming to your shop. Until the end of their session, only one visit is counted.').' - '.$this->l('A visitor is an unknown person, who has not registered or logged on, surfing on your shop. A visitor can come and visit your shop many times.').' + '.$this->l('A visit corresponds to an internet user coming to your shop, and until the end of their session, only one visit is counted.').' + '.$this->l('A visitor is an unknown person who has not registered or logged into your store. A visitor can also be considered a person who has visited your shop multiple times.').'

'.$this->l('Total visits:').' '.$totalVisits.'

@@ -96,13 +96,13 @@ class StatsVisits extends ModuleGraph

'.$this->l('Guide').'

-

'.$this->l('Determine the interest of a visit').'

+

'.$this->l('Determine the interest of a visit.').'

'.$this->l('The visitors\' evolution graph strongly resembles the visits\' graph, but provides additional information:').'
    -
  • '.$this->l('If this is the case, congratulations, your website is well planned and pleasing.').'
  • -
  • '.$this->l('Otherwise, the conclusion is not so simple. The problem can be aesthetic or ergonomic, or else the offer is not sufficient. It is also possible that these visitors mistakenly came here without particular interest for your shop; this phenomenon often happens with the search engines.').'
  • +
  • '.$this->l('If this is the case, congratulations, your website is well planned and pleasing. Glad to see that you\'ve been paying attention.').'
  • +
  • '.$this->l('Otherwise, the conclusion is not so simple. The problem can be aesthetic or ergonomic. It is also possible that many visitors have mistakenly visited your URL without possessing a particular interest in your shop. This strange and ever-confusing phenomenon is most likely cause by search engines. If this is the case, you should consider revising your SEO structure.').'
- '.$this->l('This information is mostly qualitative: you have to determine the interest of a disjointed visit.').'
+ '.$this->l('This information is mostly qualitative. It is up to you to determine the interest of a disjointed visit.').'
'; return $this->html; diff --git a/modules/statsvisits/translations/de.php b/modules/statsvisits/translations/de.php index 8be402273..f0d5b0502 100644 --- a/modules/statsvisits/translations/de.php +++ b/modules/statsvisits/translations/de.php @@ -5,17 +5,17 @@ $_MODULE = array(); $_MODULE['<{statsvisits}prestashop>statsvisits_998e4c5c80f27dec552e99dfed34889a'] = 'CSV-Export'; $_MODULE['<{statsvisits}prestashop>statsvisits_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; -$_MODULE['<{statsvisits}prestashop>statsvisits_4793db9717cc512af1406b09766a0a1f'] = 'Diese Information ist hauptsächlich qualitativer Art: Sie müssen die Ursache eines zufälligen Besuchs erkennen.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_9bf5a493522a65d550f096505874873b'] = 'Diese Information ist hauptsächlich qualitativer Art: Sie müssen die Ursache eines zufälligen Besuchs erkennen.'; $_MODULE['<{statsvisits}prestashop>statsvisits_504c16c26a96283f91fb46a69b7c8153'] = 'Besuche und Besucher'; $_MODULE['<{statsvisits}prestashop>statsvisits_e90d50ca1e68dc66c97bd62929dcbaf1'] = 'Die Besucherentwicklungsgrafik sieht der Besuchsgrafik sehr ähnlich, liefert aber zusätzliche Informationen:'; -$_MODULE['<{statsvisits}prestashop>statsvisits_0ec292c17c7dded03bee9b3a6528cb9c'] = 'Anderenfalls ist die Bilanz nicht so einfach. Es kann sich um ein ÄSthetisches oder ergonomisches Problem handeln, oder das Angebot ist unzureichend. Es kann auch sein, dass diese Besucher rein zufällig auf diese Webseite gekommen sind, ohne spezielles Interesse an Ihrem Shop; dieses Phänomen tritt häufig auf bei Suchmaschinen.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_c745121a98cf1d5b26bc5299d9880d5c'] = 'Anderenfalls ist die Bilanz nicht so einfach. Es kann sich um ein ÄSthetisches oder ergonomisches Problem handeln, oder das Angebot ist unzureichend. Es kann auch sein, dass diese Besucher rein zufällig auf diese Webseite gekommen sind, ohne spezielles Interesse an Ihrem Shop; dieses Phänomen tritt häufig auf bei Suchmaschinen.'; $_MODULE['<{statsvisits}prestashop>statsvisits_ae5d01b6efa819cc7a7c05a8c57fcc2c'] = 'Besucher'; -$_MODULE['<{statsvisits}prestashop>statsvisits_2d9101f085dd2114768a88ec53a4d338'] = 'Zeigt Statistiken über Ihre Besuche und Besucher an'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9cc2d19df71705e62e5ae8ec152ef78f'] = 'Ein Besucher ist eine unbekannte Person - die nicht registriert oder angemeldet ist - und in Ihrem Shop surft. Ein Besucher kann Ihren Shop mehrmals besuchen.'; -$_MODULE['<{statsvisits}prestashop>statsvisits_ffbee337f031c2282b311bac40bc8bb9'] = 'Bestimmen Sie das Ziel eines Besuchs'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9efcb563b932863f45ab70cbf1647a61'] = 'Ein Besuch entspricht einem Internet-Benutzer, der Ihren Shop besucht. Bis zum Ende ihres Besuchs auf dieser Webseite wird nur ein Besuch gezählt.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_5d2b93d36c456f9dc204de59d789b777'] = 'Zeigt Statistiken über Ihre Besuche und Besucher an'; +$_MODULE['<{statsvisits}prestashop>statsvisits_f43a4cf6dcc4ec617d2296d03d26c90f'] = 'Ein Besucher ist eine unbekannte Person - die nicht registriert oder angemeldet ist - und in Ihrem Shop surft. Ein Besucher kann Ihren Shop mehrmals besuchen.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_0dc434050b01c74f7a64820f84b9f464'] = 'Bestimmen Sie das Ziel eines Besuchs'; +$_MODULE['<{statsvisits}prestashop>statsvisits_b8901fb7bbfaf9b0c4724343c7cd1f90'] = 'Ein Besuch entspricht einem Internet-Benutzer, der Ihren Shop besucht. Bis zum Ende ihres Besuchs auf dieser Webseite wird nur ein Besuch gezählt.'; $_MODULE['<{statsvisits}prestashop>statsvisits_54067074d24489ddb5654bf46642cb85'] = 'Besuche gesamt:'; $_MODULE['<{statsvisits}prestashop>statsvisits_23e640d55e56db79971918936e95bf9d'] = 'Besucher gesamt:'; -$_MODULE['<{statsvisits}prestashop>statsvisits_cb3ba5c56a0115bd92d888c89e759745'] = 'Falls dies der Fall ist: Gratulation, Ihre Webseite ist gut durchdacht und gefällt.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_e9849ece0b2ecf1eea74d92d492a47f2'] = 'Falls dies der Fall ist: Gratulation, Ihre Webseite ist gut durchdacht und gefällt.'; $_MODULE['<{statsvisits}prestashop>statsvisits_39b960b0a5e2ebaaa638d946f1892050'] = 'Anzahl der Besuche und einmalige Besucher'; $_MODULE['<{statsvisits}prestashop>statsvisits_d7e637a6e9ff116de2fa89551240a94d'] = 'Besuche'; diff --git a/modules/statsvisits/translations/es.php b/modules/statsvisits/translations/es.php index 1cf410419..ac95e6552 100644 --- a/modules/statsvisits/translations/es.php +++ b/modules/statsvisits/translations/es.php @@ -5,17 +5,17 @@ $_MODULE = array(); $_MODULE['<{statsvisits}prestashop>statsvisits_998e4c5c80f27dec552e99dfed34889a'] = 'CSV Export'; $_MODULE['<{statsvisits}prestashop>statsvisits_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guía'; -$_MODULE['<{statsvisits}prestashop>statsvisits_4793db9717cc512af1406b09766a0a1f'] = 'Esta información es sobre todo cualitativa. Usted deberá determinar el interés de este tipo de visitas.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_9bf5a493522a65d550f096505874873b'] = 'Esta información es sobre todo cualitativa. Usted deberá determinar el interés de este tipo de visitas.'; $_MODULE['<{statsvisits}prestashop>statsvisits_504c16c26a96283f91fb46a69b7c8153'] = 'Visitas y Visitantes'; -$_MODULE['<{statsvisits}prestashop>statsvisits_2d9101f085dd2114768a88ec53a4d338'] = 'Mostrar estadísticas sobre visitas y visitantes'; +$_MODULE['<{statsvisits}prestashop>statsvisits_5d2b93d36c456f9dc204de59d789b777'] = 'Mostrar estadísticas sobre visitas y visitantes'; $_MODULE['<{statsvisits}prestashop>statsvisits_e90d50ca1e68dc66c97bd62929dcbaf1'] = 'El gráfico de evolución visitantes es muy similar al gráfico de las visitas pero da información suplementaria'; -$_MODULE['<{statsvisits}prestashop>statsvisits_0ec292c17c7dded03bee9b3a6528cb9c'] = 'En el caso contrario, la conclusión no es simple. El problema puede ser estético o ergonómico, o quizás la oferta sea insuficiente. También es posible que dichos visitantes hayan llegado a su sitio por error, sin interés particular por su tienda; este fenómeno ocurre con frecuencia con los motores de búsqueda.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_c745121a98cf1d5b26bc5299d9880d5c'] = 'En el caso contrario, la conclusión no es simple. El problema puede ser estético o ergonómico, o quizás la oferta sea insuficiente. También es posible que dichos visitantes hayan llegado a su sitio por error, sin interés particular por su tienda; este fenómeno ocurre con frecuencia con los motores de búsqueda.'; $_MODULE['<{statsvisits}prestashop>statsvisits_ae5d01b6efa819cc7a7c05a8c57fcc2c'] = 'Visitantes'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9cc2d19df71705e62e5ae8ec152ef78f'] = 'Un visitante es una persona desconocida, que no se ha registrado ni abierto una sesión- que visita su tienda. Un visitante puede visitar su tienda varias veces.'; -$_MODULE['<{statsvisits}prestashop>statsvisits_ffbee337f031c2282b311bac40bc8bb9'] = 'Determinar el interés de las visitas'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9efcb563b932863f45ab70cbf1647a61'] = 'Una visita corresponde a un usuario que visita su tienda. Hasta el final de la sesión se contabiliza una única visita.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_f43a4cf6dcc4ec617d2296d03d26c90f'] = 'Un visitante es una persona desconocida, que no se ha registrado ni abierto una sesión- que visita su tienda. Un visitante puede visitar su tienda varias veces.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_0dc434050b01c74f7a64820f84b9f464'] = 'Determinar el interés de las visitas'; +$_MODULE['<{statsvisits}prestashop>statsvisits_b8901fb7bbfaf9b0c4724343c7cd1f90'] = 'Una visita corresponde a un usuario que visita su tienda. Hasta el final de la sesión se contabiliza una única visita.'; $_MODULE['<{statsvisits}prestashop>statsvisits_54067074d24489ddb5654bf46642cb85'] = 'Total de visitas:'; $_MODULE['<{statsvisits}prestashop>statsvisits_23e640d55e56db79971918936e95bf9d'] = 'Total de visitantes:'; -$_MODULE['<{statsvisits}prestashop>statsvisits_cb3ba5c56a0115bd92d888c89e759745'] = 'Si es el caso, enhorabuena, su sitio está bien pensado y resulta agradable.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_e9849ece0b2ecf1eea74d92d492a47f2'] = 'Si es el caso, enhorabuena, su sitio está bien pensado y resulta agradable.'; $_MODULE['<{statsvisits}prestashop>statsvisits_39b960b0a5e2ebaaa638d946f1892050'] = 'Número de visitas y visitantes únicos'; $_MODULE['<{statsvisits}prestashop>statsvisits_d7e637a6e9ff116de2fa89551240a94d'] = 'Visitas'; diff --git a/modules/statsvisits/translations/fr.php b/modules/statsvisits/translations/fr.php index d2e8a5cb0..2415ce5ed 100644 --- a/modules/statsvisits/translations/fr.php +++ b/modules/statsvisits/translations/fr.php @@ -5,17 +5,17 @@ $_MODULE = array(); $_MODULE['<{statsvisits}prestashop>statsvisits_998e4c5c80f27dec552e99dfed34889a'] = 'Export CSV'; $_MODULE['<{statsvisits}prestashop>statsvisits_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guide'; -$_MODULE['<{statsvisits}prestashop>statsvisits_4793db9717cc512af1406b09766a0a1f'] = 'Cette information est surtout qualitative : c\'est à vous de déterminer l\'intérêt d\'une visite sans suite.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_9bf5a493522a65d550f096505874873b'] = 'Cette information est surtout qualitative : c\'est à vous de déterminer l\'intérêt d\'une visite sans suite.'; $_MODULE['<{statsvisits}prestashop>statsvisits_504c16c26a96283f91fb46a69b7c8153'] = 'Visites et visiteurs'; -$_MODULE['<{statsvisits}prestashop>statsvisits_2d9101f085dd2114768a88ec53a4d338'] = 'Propose des graphiques montrant l\'évolution de vos visites et visiteurs.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_5d2b93d36c456f9dc204de59d789b777'] = 'Propose des graphiques montrant l\'évolution de vos visites et visiteurs.'; $_MODULE['<{statsvisits}prestashop>statsvisits_e90d50ca1e68dc66c97bd62929dcbaf1'] = 'Le graphique d\'évolution visiteurs ressemble fortement au graphique des visites, mais fournit des informations supplémentaires:'; -$_MODULE['<{statsvisits}prestashop>statsvisits_0ec292c17c7dded03bee9b3a6528cb9c'] = 'Dans le cas contraire, la conclusion n\'est pas si simple. Le problème peut être esthétique ou ergonomique, ou alors l\'offre insuffisante. Il se peut également que ces visiteurs soient arrivées là par erreur, sans intérêt particulier pour votre boutique ; ce phénomène arrive couramment avec les moteurs de recherche.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_c745121a98cf1d5b26bc5299d9880d5c'] = 'Dans le cas contraire, la conclusion n\'est pas si simple. Le problème peut être esthétique ou ergonomique, ou alors l\'offre insuffisante. Il se peut également que ces visiteurs soient arrivées là par erreur, sans intérêt particulier pour votre boutique ; ce phénomène arrive couramment avec les moteurs de recherche.'; $_MODULE['<{statsvisits}prestashop>statsvisits_ae5d01b6efa819cc7a7c05a8c57fcc2c'] = 'Visiteurs'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9cc2d19df71705e62e5ae8ec152ef78f'] = 'On appelle visiteur une personne inconnue - non inscrite ou non connectée - naviguant sur votre boutique. Un visiteur peut donc visiter votre boutique plusieurs fois.'; -$_MODULE['<{statsvisits}prestashop>statsvisits_ffbee337f031c2282b311bac40bc8bb9'] = 'Déterminez l\'intérêt d\'une visite'; +$_MODULE['<{statsvisits}prestashop>statsvisits_f43a4cf6dcc4ec617d2296d03d26c90f'] = 'On appelle visiteur une personne inconnue - non inscrite ou non connectée - naviguant sur votre boutique. Un visiteur peut donc visiter votre boutique plusieurs fois.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_0dc434050b01c74f7a64820f84b9f464'] = 'Déterminez l\'intérêt d\'une visite'; $_MODULE['<{statsvisits}prestashop>statsvisits_54067074d24489ddb5654bf46642cb85'] = 'Nombre total de visites'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9efcb563b932863f45ab70cbf1647a61'] = 'Une visite correspond au passage d\'un internaute sur votre boutique. Une seule visite est comptée pour toute la durée de sa session.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_b8901fb7bbfaf9b0c4724343c7cd1f90'] = 'Une visite correspond au passage d\'un internaute sur votre boutique. Une seule visite est comptée pour toute la durée de sa session.'; $_MODULE['<{statsvisits}prestashop>statsvisits_23e640d55e56db79971918936e95bf9d'] = 'Nombre total de visiteurs'; -$_MODULE['<{statsvisits}prestashop>statsvisits_cb3ba5c56a0115bd92d888c89e759745'] = 'Si c\'est le cas, alors félicitations, votre site est bien conçu et plaît indéniablement.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_e9849ece0b2ecf1eea74d92d492a47f2'] = 'Si c\'est le cas, alors félicitations, votre site est bien conçu et plaît indéniablement.'; $_MODULE['<{statsvisits}prestashop>statsvisits_39b960b0a5e2ebaaa638d946f1892050'] = 'Nombre de visites et visiteurs uniques'; $_MODULE['<{statsvisits}prestashop>statsvisits_d7e637a6e9ff116de2fa89551240a94d'] = 'Visites'; diff --git a/modules/statsvisits/translations/it.php b/modules/statsvisits/translations/it.php index 10652e49a..04f1ae3ea 100644 --- a/modules/statsvisits/translations/it.php +++ b/modules/statsvisits/translations/it.php @@ -5,17 +5,17 @@ $_MODULE = array(); $_MODULE['<{statsvisits}prestashop>statsvisits_998e4c5c80f27dec552e99dfed34889a'] = 'Esporta CSV'; $_MODULE['<{statsvisits}prestashop>statsvisits_6602bbeb2956c035fb4cb5e844a4861b'] = 'Guida'; -$_MODULE['<{statsvisits}prestashop>statsvisits_4793db9717cc512af1406b09766a0a1f'] = 'Questa informazione è prevalentemente qualitativa: è necessario determinare l\'interesse di una visita errata.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_9bf5a493522a65d550f096505874873b'] = 'Questa informazione è prevalentemente qualitativa: è necessario determinare l\'interesse di una visita errata.'; $_MODULE['<{statsvisits}prestashop>statsvisits_504c16c26a96283f91fb46a69b7c8153'] = 'Visite e visitatori'; -$_MODULE['<{statsvisits}prestashop>statsvisits_2d9101f085dd2114768a88ec53a4d338'] = 'Visualizza le statistiche relative alle visite e visitatori'; +$_MODULE['<{statsvisits}prestashop>statsvisits_5d2b93d36c456f9dc204de59d789b777'] = 'Visualizza le statistiche relative alle visite e visitatori'; $_MODULE['<{statsvisits}prestashop>statsvisits_e90d50ca1e68dc66c97bd62929dcbaf1'] = 'Il grafico di evoluzione dei visitatori ricorda molto il grafico delle visite, ma fornisce ulteriori informazioni:'; -$_MODULE['<{statsvisits}prestashop>statsvisits_0ec292c17c7dded03bee9b3a6528cb9c'] = 'In caso contrario, la conclusione non è così semplice. Il problema può essere estetico o ergonomico, oppure l\'offerta non è sufficiente. E\' anche possibile che questi visitatori sono arrivati qui per errore, senza particolare interesse per il tuo negozio, questo fenomeno spesso accade con i motori di ricerca.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_c745121a98cf1d5b26bc5299d9880d5c'] = 'In caso contrario, la conclusione non è così semplice. Il problema può essere estetico o ergonomico, oppure l\'offerta non è sufficiente. E\' anche possibile che questi visitatori sono arrivati qui per errore, senza particolare interesse per il tuo negozio, questo fenomeno spesso accade con i motori di ricerca.'; $_MODULE['<{statsvisits}prestashop>statsvisits_ae5d01b6efa819cc7a7c05a8c57fcc2c'] = 'Visitatori'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9cc2d19df71705e62e5ae8ec152ef78f'] = 'Un visitatore è una persona sconosciuta - che non si è registrata o iscritta - e naviga nel tuo negozio. Un visitatore può venire a visitare il tuo negozio molte volte.'; -$_MODULE['<{statsvisits}prestashop>statsvisits_ffbee337f031c2282b311bac40bc8bb9'] = 'Determinare l\'interesse di una visita'; -$_MODULE['<{statsvisits}prestashop>statsvisits_9efcb563b932863f45ab70cbf1647a61'] = 'Una visita corrisponde ad un utente di Internet che viene nel tuo negozio. Fino alla fine della sessione, una sola visita viene conteggiata.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_f43a4cf6dcc4ec617d2296d03d26c90f'] = 'Un visitatore è una persona sconosciuta - che non si è registrata o iscritta - e naviga nel tuo negozio. Un visitatore può venire a visitare il tuo negozio molte volte.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_0dc434050b01c74f7a64820f84b9f464'] = 'Determinare l\'interesse di una visita'; +$_MODULE['<{statsvisits}prestashop>statsvisits_b8901fb7bbfaf9b0c4724343c7cd1f90'] = 'Una visita corrisponde ad un utente di Internet che viene nel tuo negozio. Fino alla fine della sessione, una sola visita viene conteggiata.'; $_MODULE['<{statsvisits}prestashop>statsvisits_54067074d24489ddb5654bf46642cb85'] = 'Visite totali:'; $_MODULE['<{statsvisits}prestashop>statsvisits_23e640d55e56db79971918936e95bf9d'] = 'Totale visitatori:'; -$_MODULE['<{statsvisits}prestashop>statsvisits_cb3ba5c56a0115bd92d888c89e759745'] = 'Se questo è il caso, complimenti, il tuo sito è ben congegnato e piacevole.'; +$_MODULE['<{statsvisits}prestashop>statsvisits_e9849ece0b2ecf1eea74d92d492a47f2'] = 'Se questo è il caso, complimenti, il tuo sito è ben congegnato e piacevole.'; $_MODULE['<{statsvisits}prestashop>statsvisits_39b960b0a5e2ebaaa638d946f1892050'] = 'Numero di visite e visitatori unici'; $_MODULE['<{statsvisits}prestashop>statsvisits_d7e637a6e9ff116de2fa89551240a94d'] = 'Visite'; diff --git a/themes/default/404.tpl b/themes/default/404.tpl index 42539ec78..82bca1568 100644 --- a/themes/default/404.tpl +++ b/themes/default/404.tpl @@ -29,7 +29,7 @@ {l s='We\'re sorry, but the Web address you\'ve entered is no longer available.'}

-

{l s='To find a product, please type its name in the field below'}

+

{l s='To find a product, please type its name in the field below.'}

diff --git a/themes/default/address.tpl b/themes/default/address.tpl index 7c33539ef..79b1d1474 100644 --- a/themes/default/address.tpl +++ b/themes/default/address.tpl @@ -206,14 +206,14 @@ $(function(){ldelim}

{if $one_phone_at_least} -

{l s='You must register at least one phone number.'} *

+

{l s='You must register at least one phone number.'}

{/if}

-

- +

+

diff --git a/themes/default/authentication.tpl b/themes/default/authentication.tpl index 3c846cfca..0249bf084 100644 --- a/themes/default/authentication.tpl +++ b/themes/default/authentication.tpl @@ -23,7 +23,7 @@ * International Registered Trademark & Property of PrestaShop SA *} -{capture name=path}{l s='Login:'}{/capture} +{capture name=path}{l s='Login'}{/capture} {include file="$tpl_dir./breadcrumb.tpl"} ' ); - - iframe_doc.close(); - - // Update the Iframe's hash, for great justice. - iframe.location.hash = hash; - } - }; - - })(); - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - // ^^^^^^^^^^^^^^^^^^^ REMOVE IF NOT SUPPORTING IE6/7/8 ^^^^^^^^^^^^^^^^^^^ - // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - return self; - })(); - -})(jQuery,this); - - -(function( $, window, undefined ) { - -var createHandler = function( sequential ) { - - // Default to sequential - if ( sequential === undefined ) { - sequential = true; - } - - return function( name, reverse, $to, $from ) { - - var deferred = new $.Deferred(), - reverseClass = reverse ? " reverse" : "", - active = $.mobile.urlHistory.getActive(), - toScroll = active.lastScroll || $.mobile.defaultHomeScroll, - screenHeight = $.mobile.getScreenHeight(), - maxTransitionOverride = $.mobile.maxTransitionWidth !== false && $( window ).width() > $.mobile.maxTransitionWidth, - none = !$.support.cssTransitions || maxTransitionOverride || !name || name === "none" || Math.max( $( window ).scrollTop(), toScroll ) > $.mobile.getMaxScrollForTransition(), - toPreClass = " ui-page-pre-in", - toggleViewportClass = function() { - $.mobile.pageContainer.toggleClass( "ui-mobile-viewport-transitioning viewport-" + name ); - }, - scrollPage = function() { - // By using scrollTo instead of silentScroll, we can keep things better in order - // Just to be precautios, disable scrollstart listening like silentScroll would - $.event.special.scrollstart.enabled = false; - - window.scrollTo( 0, toScroll ); - - // reenable scrollstart listening like silentScroll would - setTimeout( function() { - $.event.special.scrollstart.enabled = true; - }, 150 ); - }, - cleanFrom = function() { - $from - .removeClass( $.mobile.activePageClass + " out in reverse " + name ) - .height( "" ); - }, - startOut = function() { - // if it's not sequential, call the doneOut transition to start the TO page animating in simultaneously - if ( !sequential ) { - doneOut(); - } - else { - $from.animationComplete( doneOut ); - } - - // Set the from page's height and start it transitioning out - // Note: setting an explicit height helps eliminate tiling in the transitions - $from - .height( screenHeight + $( window ).scrollTop() ) - .addClass( name + " out" + reverseClass ); - }, - - doneOut = function() { - - if ( $from && sequential ) { - cleanFrom(); - } - - startIn(); - }, - - startIn = function() { - - // Prevent flickering in phonegap container: see comments at #4024 regarding iOS - $to.css( "z-index", -10 ); - - $to.addClass( $.mobile.activePageClass + toPreClass ); - - // Send focus to page as it is now display: block - $.mobile.focusPage( $to ); - - // Set to page height - $to.height( screenHeight + toScroll ); - - scrollPage(); - - // Restores visibility of the new page: added together with $to.css( "z-index", -10 ); - $to.css( "z-index", "" ); - - if ( !none ) { - $to.animationComplete( doneIn ); - } - - $to - .removeClass( toPreClass ) - .addClass( name + " in" + reverseClass ); - - if ( none ) { - doneIn(); - } - - }, - - doneIn = function() { - - if ( !sequential ) { - - if ( $from ) { - cleanFrom(); - } - } - - $to - .removeClass( "out in reverse " + name ) - .height( "" ); - - toggleViewportClass(); - - // In some browsers (iOS5), 3D transitions block the ability to scroll to the desired location during transition - // This ensures we jump to that spot after the fact, if we aren't there already. - if ( $( window ).scrollTop() !== toScroll ) { - scrollPage(); - } - - deferred.resolve( name, reverse, $to, $from, true ); - }; - - toggleViewportClass(); - - if ( $from && !none ) { - startOut(); - } - else { - doneOut(); - } - - return deferred.promise(); - }; -}; - -// generate the handlers from the above -var sequentialHandler = createHandler(), - simultaneousHandler = createHandler( false ), - defaultGetMaxScrollForTransition = function() { - return $.mobile.getScreenHeight() * 3; - }; - -// Make our transition handler the public default. -$.mobile.defaultTransitionHandler = sequentialHandler; - -//transition handler dictionary for 3rd party transitions -$.mobile.transitionHandlers = { - "default": $.mobile.defaultTransitionHandler, - "sequential": sequentialHandler, - "simultaneous": simultaneousHandler -}; - -$.mobile.transitionFallbacks = {}; - -// If transition is defined, check if css 3D transforms are supported, and if not, if a fallback is specified -$.mobile._maybeDegradeTransition = function( transition ) { - if ( transition && !$.support.cssTransform3d && $.mobile.transitionFallbacks[ transition ] ) { - transition = $.mobile.transitionFallbacks[ transition ]; - } - - return transition; -}; - -// Set the getMaxScrollForTransition to default if no implementation was set by user -$.mobile.getMaxScrollForTransition = $.mobile.getMaxScrollForTransition || defaultGetMaxScrollForTransition; -})( jQuery, this ); - -(function( $, undefined ) { - - //define vars for interal use - var $window = $( window ), - $html = $( 'html' ), - $head = $( 'head' ), - - //url path helpers for use in relative url management - path = { - - // This scary looking regular expression parses an absolute URL or its relative - // variants (protocol, site, document, query, and hash), into the various - // components (protocol, host, path, query, fragment, etc that make up the - // URL as well as some other commonly used sub-parts. When used with RegExp.exec() - // or String.match, it parses the URL into a results array that looks like this: - // - // [0]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread#msg-content - // [1]: http://jblas:password@mycompany.com:8080/mail/inbox?msg=1234&type=unread - // [2]: http://jblas:password@mycompany.com:8080/mail/inbox - // [3]: http://jblas:password@mycompany.com:8080 - // [4]: http: - // [5]: // - // [6]: jblas:password@mycompany.com:8080 - // [7]: jblas:password - // [8]: jblas - // [9]: password - // [10]: mycompany.com:8080 - // [11]: mycompany.com - // [12]: 8080 - // [13]: /mail/inbox - // [14]: /mail/ - // [15]: inbox - // [16]: ?msg=1234&type=unread - // [17]: #msg-content - // - urlParseRE: /^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/, - - // Abstraction to address xss (Issue #4787) by removing the authority in - // browsers that auto decode it. All references to location.href should be - // replaced with a call to this method so that it can be dealt with properly here - getLocation: function( url ) { - var uri = url ? this.parseUrl( url ) : location, - hash = this.parseUrl( url || location.href ).hash; - - // mimic the browser with an empty string when the hash is empty - hash = hash === "#" ? "" : hash; - - // Make sure to parse the url or the location object for the hash because using location.hash - // is autodecoded in firefox, the rest of the url should be from the object (location unless - // we're testing) to avoid the inclusion of the authority - return uri.protocol + "//" + uri.host + uri.pathname + uri.search + hash; - }, - - parseLocation: function() { - return this.parseUrl( this.getLocation() ); - }, - - //Parse a URL into a structure that allows easy access to - //all of the URL components by name. - parseUrl: function( url ) { - // If we're passed an object, we'll assume that it is - // a parsed url object and just return it back to the caller. - if ( $.type( url ) === "object" ) { - return url; - } - - var matches = path.urlParseRE.exec( url || "" ) || []; - - // Create an object that allows the caller to access the sub-matches - // by name. Note that IE returns an empty string instead of undefined, - // like all other browsers do, so we normalize everything so its consistent - // no matter what browser we're running on. - return { - href: matches[ 0 ] || "", - hrefNoHash: matches[ 1 ] || "", - hrefNoSearch: matches[ 2 ] || "", - domain: matches[ 3 ] || "", - protocol: matches[ 4 ] || "", - doubleSlash: matches[ 5 ] || "", - authority: matches[ 6 ] || "", - username: matches[ 8 ] || "", - password: matches[ 9 ] || "", - host: matches[ 10 ] || "", - hostname: matches[ 11 ] || "", - port: matches[ 12 ] || "", - pathname: matches[ 13 ] || "", - directory: matches[ 14 ] || "", - filename: matches[ 15 ] || "", - search: matches[ 16 ] || "", - hash: matches[ 17 ] || "" - }; - }, - - //Turn relPath into an asbolute path. absPath is - //an optional absolute path which describes what - //relPath is relative to. - makePathAbsolute: function( relPath, absPath ) { - if ( relPath && relPath.charAt( 0 ) === "/" ) { - return relPath; - } - - relPath = relPath || ""; - absPath = absPath ? absPath.replace( /^\/|(\/[^\/]*|[^\/]+)$/g, "" ) : ""; - - var absStack = absPath ? absPath.split( "/" ) : [], - relStack = relPath.split( "/" ); - for ( var i = 0; i < relStack.length; i++ ) { - var d = relStack[ i ]; - switch ( d ) { - case ".": - break; - case "..": - if ( absStack.length ) { - absStack.pop(); - } - break; - default: - absStack.push( d ); - break; - } - } - return "/" + absStack.join( "/" ); - }, - - //Returns true if both urls have the same domain. - isSameDomain: function( absUrl1, absUrl2 ) { - return path.parseUrl( absUrl1 ).domain === path.parseUrl( absUrl2 ).domain; - }, - - //Returns true for any relative variant. - isRelativeUrl: function( url ) { - // All relative Url variants have one thing in common, no protocol. - return path.parseUrl( url ).protocol === ""; - }, - - //Returns true for an absolute url. - isAbsoluteUrl: function( url ) { - return path.parseUrl( url ).protocol !== ""; - }, - - //Turn the specified realtive URL into an absolute one. This function - //can handle all relative variants (protocol, site, document, query, fragment). - makeUrlAbsolute: function( relUrl, absUrl ) { - if ( !path.isRelativeUrl( relUrl ) ) { - return relUrl; - } - - if ( absUrl === undefined ) { - absUrl = documentBase; - } - - var relObj = path.parseUrl( relUrl ), - absObj = path.parseUrl( absUrl ), - protocol = relObj.protocol || absObj.protocol, - doubleSlash = relObj.protocol ? relObj.doubleSlash : ( relObj.doubleSlash || absObj.doubleSlash ), - authority = relObj.authority || absObj.authority, - hasPath = relObj.pathname !== "", - pathname = path.makePathAbsolute( relObj.pathname || absObj.filename, absObj.pathname ), - search = relObj.search || ( !hasPath && absObj.search ) || "", - hash = relObj.hash; - - return protocol + doubleSlash + authority + pathname + search + hash; - }, - - //Add search (aka query) params to the specified url. - addSearchParams: function( url, params ) { - var u = path.parseUrl( url ), - p = ( typeof params === "object" ) ? $.param( params ) : params, - s = u.search || "?"; - return u.hrefNoSearch + s + ( s.charAt( s.length - 1 ) !== "?" ? "&" : "" ) + p + ( u.hash || "" ); - }, - - convertUrlToDataUrl: function( absUrl ) { - var u = path.parseUrl( absUrl ); - if ( path.isEmbeddedPage( u ) ) { - // For embedded pages, remove the dialog hash key as in getFilePath(), - // otherwise the Data Url won't match the id of the embedded Page. - return u.hash.split( dialogHashKey )[0].replace( /^#/, "" ); - } else if ( path.isSameDomain( u, documentBase ) ) { - return u.hrefNoHash.replace( documentBase.domain, "" ).split( dialogHashKey )[0]; - } - - return window.decodeURIComponent(absUrl); - }, - - //get path from current hash, or from a file path - get: function( newPath ) { - if ( newPath === undefined ) { - newPath = path.parseLocation().hash; - } - return path.stripHash( newPath ).replace( /[^\/]*\.[^\/*]+$/, '' ); - }, - - //return the substring of a filepath before the sub-page key, for making a server request - getFilePath: function( path ) { - var splitkey = '&' + $.mobile.subPageUrlKey; - return path && path.split( splitkey )[0].split( dialogHashKey )[0]; - }, - - //set location hash to path - set: function( path ) { - location.hash = path; - }, - - //test if a given url (string) is a path - //NOTE might be exceptionally naive - isPath: function( url ) { - return ( /\// ).test( url ); - }, - - //return a url path with the window's location protocol/hostname/pathname removed - clean: function( url ) { - return url.replace( documentBase.domain, "" ); - }, - - //just return the url without an initial # - stripHash: function( url ) { - return url.replace( /^#/, "" ); - }, - - //remove the preceding hash, any query params, and dialog notations - cleanHash: function( hash ) { - return path.stripHash( hash.replace( /\?.*$/, "" ).replace( dialogHashKey, "" ) ); - }, - - isHashValid: function( hash ) { - return ( /^#[^#]+$/ ).test( hash ); - }, - - //check whether a url is referencing the same domain, or an external domain or different protocol - //could be mailto, etc - isExternal: function( url ) { - var u = path.parseUrl( url ); - return u.protocol && u.domain !== documentUrl.domain ? true : false; - }, - - hasProtocol: function( url ) { - return ( /^(:?\w+:)/ ).test( url ); - }, - - //check if the specified url refers to the first page in the main application document. - isFirstPageUrl: function( url ) { - // We only deal with absolute paths. - var u = path.parseUrl( path.makeUrlAbsolute( url, documentBase ) ), - - // Does the url have the same path as the document? - samePath = u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ), - - // Get the first page element. - fp = $.mobile.firstPage, - - // Get the id of the first page element if it has one. - fpId = fp && fp[0] ? fp[0].id : undefined; - - // The url refers to the first page if the path matches the document and - // it either has no hash value, or the hash is exactly equal to the id of the - // first page element. - return samePath && ( !u.hash || u.hash === "#" || ( fpId && u.hash.replace( /^#/, "" ) === fpId ) ); - }, - - isEmbeddedPage: function( url ) { - var u = path.parseUrl( url ); - - //if the path is absolute, then we need to compare the url against - //both the documentUrl and the documentBase. The main reason for this - //is that links embedded within external documents will refer to the - //application document, whereas links embedded within the application - //document will be resolved against the document base. - if ( u.protocol !== "" ) { - return ( u.hash && ( u.hrefNoHash === documentUrl.hrefNoHash || ( documentBaseDiffers && u.hrefNoHash === documentBase.hrefNoHash ) ) ); - } - return ( /^#/ ).test( u.href ); - }, - - - // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR - // requests if the document doing the request was loaded via the file:// protocol. - // This is usually to allow the application to "phone home" and fetch app specific - // data. We normally let the browser handle external/cross-domain urls, but if the - // allowCrossDomainPages option is true, we will allow cross-domain http/https - // requests to go through our page loading logic. - isPermittedCrossDomainRequest: function( docUrl, reqUrl ) { - return $.mobile.allowCrossDomainPages && - docUrl.protocol === "file:" && - reqUrl.search( /^https?:/ ) !== -1; - } - }, - - //will be defined when a link is clicked and given an active class - $activeClickedLink = null, - - //urlHistory is purely here to make guesses at whether the back or forward button was clicked - //and provide an appropriate transition - urlHistory = { - // Array of pages that are visited during a single page load. - // Each has a url and optional transition, title, and pageUrl (which represents the file path, in cases where URL is obscured, such as dialogs) - stack: [], - - //maintain an index number for the active page in the stack - activeIndex: 0, - - //get active - getActive: function() { - return urlHistory.stack[ urlHistory.activeIndex ]; - }, - - getPrev: function() { - return urlHistory.stack[ urlHistory.activeIndex - 1 ]; - }, - - getNext: function() { - return urlHistory.stack[ urlHistory.activeIndex + 1 ]; - }, - - // addNew is used whenever a new page is added - addNew: function( url, transition, title, pageUrl, role ) { - //if there's forward history, wipe it - if ( urlHistory.getNext() ) { - urlHistory.clearForward(); - } - - urlHistory.stack.push( {url : url, transition: transition, title: title, pageUrl: pageUrl, role: role } ); - - urlHistory.activeIndex = urlHistory.stack.length - 1; - }, - - //wipe urls ahead of active index - clearForward: function() { - urlHistory.stack = urlHistory.stack.slice( 0, urlHistory.activeIndex + 1 ); - }, - - directHashChange: function( opts ) { - var back , forward, newActiveIndex, prev = this.getActive(); - - // check if url is in history and if it's ahead or behind current page - $.each( urlHistory.stack, function( i, historyEntry ) { - - //if the url is in the stack, it's a forward or a back - if ( decodeURIComponent( opts.currentUrl ) === decodeURIComponent( historyEntry.url ) ) { - //define back and forward by whether url is older or newer than current page - back = i < urlHistory.activeIndex; - forward = !back; - newActiveIndex = i; - } - }); - - // save new page index, null check to prevent falsey 0 result - this.activeIndex = newActiveIndex !== undefined ? newActiveIndex : this.activeIndex; - - if ( back ) { - ( opts.either || opts.isBack )( true ); - } else if ( forward ) { - ( opts.either || opts.isForward )( false ); - } - }, - - //disable hashchange event listener internally to ignore one change - //toggled internally when location.hash is updated to match the url of a successful page load - ignoreNextHashChange: false - }, - - //define first selector to receive focus when a page is shown - focusable = "[tabindex],a,button:visible,select:visible,input", - - //queue to hold simultanious page transitions - pageTransitionQueue = [], - - //indicates whether or not page is in process of transitioning - isPageTransitioning = false, - - //nonsense hash change key for dialogs, so they create a history entry - dialogHashKey = "&ui-state=dialog", - - //existing base tag? - $base = $head.children( "base" ), - - //tuck away the original document URL minus any fragment. - documentUrl = path.parseLocation(), - - //if the document has an embedded base tag, documentBase is set to its - //initial value. If a base tag does not exist, then we default to the documentUrl. - documentBase = $base.length ? path.parseUrl( path.makeUrlAbsolute( $base.attr( "href" ), documentUrl.href ) ) : documentUrl, - - //cache the comparison once. - documentBaseDiffers = ( documentUrl.hrefNoHash !== documentBase.hrefNoHash ), - - getScreenHeight = $.mobile.getScreenHeight; - - //base element management, defined depending on dynamic base tag support - var base = $.support.dynamicBaseTag ? { - - //define base element, for use in routing asset urls that are referenced in Ajax-requested markup - element: ( $base.length ? $base : $( "", { href: documentBase.hrefNoHash } ).prependTo( $head ) ), - - //set the generated BASE element's href attribute to a new page's base path - set: function( href ) { - base.element.attr( "href", path.makeUrlAbsolute( href, documentBase ) ); - }, - - //set the generated BASE element's href attribute to a new page's base path - reset: function() { - base.element.attr( "href", documentBase.hrefNoHash ); - } - - } : undefined; - - /* internal utility functions */ - - // NOTE Issue #4950 Android phonegap doesn't navigate back properly - // when a full page refresh has taken place. It appears that hashchange - // and replacestate history alterations work fine but we need to support - // both forms of history traversal in our code that uses backward history - // movement - $.mobile.back = function() { - var nav = window.navigator; - - // if the setting is on and the navigator object is - // available use the phonegap navigation capability - if( this.phonegapNavigationEnabled && - nav && - nav.app && - nav.app.backHistory ){ - nav.app.backHistory(); - } else { - window.history.back(); - } - }; - - //direct focus to the page title, or otherwise first focusable element - $.mobile.focusPage = function ( page ) { - var autofocus = page.find( "[autofocus]" ), - pageTitle = page.find( ".ui-title:eq(0)" ); - - if ( autofocus.length ) { - autofocus.focus(); - return; - } - - if ( pageTitle.length ) { - pageTitle.focus(); - } else{ - page.focus(); - } - }; - - //remove active classes after page transition or error - function removeActiveLinkClass( forceRemoval ) { - if ( !!$activeClickedLink && ( !$activeClickedLink.closest( "." + $.mobile.activePageClass ).length || forceRemoval ) ) { - $activeClickedLink.removeClass( $.mobile.activeBtnClass ); - } - $activeClickedLink = null; - } - - function releasePageTransitionLock() { - isPageTransitioning = false; - if ( pageTransitionQueue.length > 0 ) { - $.mobile.changePage.apply( null, pageTransitionQueue.pop() ); - } - } - - // Save the last scroll distance per page, before it is hidden - var setLastScrollEnabled = true, - setLastScroll, delayedSetLastScroll; - - setLastScroll = function() { - // this barrier prevents setting the scroll value based on the browser - // scrolling the window based on a hashchange - if ( !setLastScrollEnabled ) { - return; - } - - var active = $.mobile.urlHistory.getActive(); - - if ( active ) { - var lastScroll = $window.scrollTop(); - - // Set active page's lastScroll prop. - // If the location we're scrolling to is less than minScrollBack, let it go. - active.lastScroll = lastScroll < $.mobile.minScrollBack ? $.mobile.defaultHomeScroll : lastScroll; - } - }; - - // bind to scrollstop to gather scroll position. The delay allows for the hashchange - // event to fire and disable scroll recording in the case where the browser scrolls - // to the hash targets location (sometimes the top of the page). once pagechange fires - // getLastScroll is again permitted to operate - delayedSetLastScroll = function() { - setTimeout( setLastScroll, 100 ); - }; - - // disable an scroll setting when a hashchange has been fired, this only works - // because the recording of the scroll position is delayed for 100ms after - // the browser might have changed the position because of the hashchange - $window.bind( $.support.pushState ? "popstate" : "hashchange", function() { - setLastScrollEnabled = false; - }); - - // handle initial hashchange from chrome :( - $window.one( $.support.pushState ? "popstate" : "hashchange", function() { - setLastScrollEnabled = true; - }); - - // wait until the mobile page container has been determined to bind to pagechange - $window.one( "pagecontainercreate", function() { - // once the page has changed, re-enable the scroll recording - $.mobile.pageContainer.bind( "pagechange", function() { - - setLastScrollEnabled = true; - - // remove any binding that previously existed on the get scroll - // which may or may not be different than the scroll element determined for - // this page previously - $window.unbind( "scrollstop", delayedSetLastScroll ); - - // determine and bind to the current scoll element which may be the window - // or in the case of touch overflow the element with touch overflow - $window.bind( "scrollstop", delayedSetLastScroll ); - }); - }); - - // bind to scrollstop for the first page as "pagechange" won't be fired in that case - $window.bind( "scrollstop", delayedSetLastScroll ); - - // No-op implementation of transition degradation - $.mobile._maybeDegradeTransition = $.mobile._maybeDegradeTransition || function( transition ) { - return transition; - }; - - //function for transitioning between two existing pages - function transitionPages( toPage, fromPage, transition, reverse ) { - - if ( fromPage ) { - //trigger before show/hide events - fromPage.data( "page" )._trigger( "beforehide", null, { nextPage: toPage } ); - } - - toPage.data( "page" )._trigger( "beforeshow", null, { prevPage: fromPage || $( "" ) } ); - - //clear page loader - $.mobile.hidePageLoadingMsg(); - - transition = $.mobile._maybeDegradeTransition( transition ); - - //find the transition handler for the specified transition. If there - //isn't one in our transitionHandlers dictionary, use the default one. - //call the handler immediately to kick-off the transition. - var th = $.mobile.transitionHandlers[ transition || "default" ] || $.mobile.defaultTransitionHandler, - promise = th( transition, reverse, toPage, fromPage ); - - promise.done(function() { - - //trigger show/hide events - if ( fromPage ) { - fromPage.data( "page" )._trigger( "hide", null, { nextPage: toPage } ); - } - - //trigger pageshow, define prevPage as either fromPage or empty jQuery obj - toPage.data( "page" )._trigger( "show", null, { prevPage: fromPage || $( "" ) } ); - }); - - return promise; - } - - //simply set the active page's minimum height to screen height, depending on orientation - function resetActivePageHeight() { - var aPage = $( "." + $.mobile.activePageClass ), - aPagePadT = parseFloat( aPage.css( "padding-top" ) ), - aPagePadB = parseFloat( aPage.css( "padding-bottom" ) ), - aPageBorderT = parseFloat( aPage.css( "border-top-width" ) ), - aPageBorderB = parseFloat( aPage.css( "border-bottom-width" ) ); - - aPage.css( "min-height", getScreenHeight() - aPagePadT - aPagePadB - aPageBorderT - aPageBorderB ); - } - - //shared page enhancements - function enhancePage( $page, role ) { - // If a role was specified, make sure the data-role attribute - // on the page element is in sync. - if ( role ) { - $page.attr( "data-" + $.mobile.ns + "role", role ); - } - - //run page plugin - $page.page(); - } - - /* exposed $.mobile methods */ - - //animation complete callback - $.fn.animationComplete = function( callback ) { - if ( $.support.cssTransitions ) { - return $( this ).one( 'webkitAnimationEnd animationend', callback ); - } - else{ - // defer execution for consistency between webkit/non webkit - setTimeout( callback, 0 ); - return $( this ); - } - }; - - //expose path object on $.mobile - $.mobile.path = path; - - //expose base object on $.mobile - $.mobile.base = base; - - //history stack - $.mobile.urlHistory = urlHistory; - - $.mobile.dialogHashKey = dialogHashKey; - - - - //enable cross-domain page support - $.mobile.allowCrossDomainPages = false; - - //return the original document url - $.mobile.getDocumentUrl = function( asParsedObject ) { - return asParsedObject ? $.extend( {}, documentUrl ) : documentUrl.href; - }; - - //return the original document base url - $.mobile.getDocumentBase = function( asParsedObject ) { - return asParsedObject ? $.extend( {}, documentBase ) : documentBase.href; - }; - - $.mobile._bindPageRemove = function() { - var page = $( this ); - - // when dom caching is not enabled or the page is embedded bind to remove the page on hide - if ( !page.data( "page" ).options.domCache && - page.is( ":jqmData(external-page='true')" ) ) { - - page.bind( 'pagehide.remove', function() { - var $this = $( this ), - prEvent = new $.Event( "pageremove" ); - - $this.trigger( prEvent ); - - if ( !prEvent.isDefaultPrevented() ) { - $this.removeWithDependents(); - } - }); - } - }; - - // Load a page into the DOM. - $.mobile.loadPage = function( url, options ) { - // This function uses deferred notifications to let callers - // know when the page is done loading, or if an error has occurred. - var deferred = $.Deferred(), - - // The default loadPage options with overrides specified by - // the caller. - settings = $.extend( {}, $.mobile.loadPage.defaults, options ), - - // The DOM element for the page after it has been loaded. - page = null, - - // If the reloadPage option is true, and the page is already - // in the DOM, dupCachedPage will be set to the page element - // so that it can be removed after the new version of the - // page is loaded off the network. - dupCachedPage = null, - - // determine the current base url - findBaseWithDefault = function() { - var closestBase = ( $.mobile.activePage && getClosestBaseUrl( $.mobile.activePage ) ); - return closestBase || documentBase.hrefNoHash; - }, - - // The absolute version of the URL passed into the function. This - // version of the URL may contain dialog/subpage params in it. - absUrl = path.makeUrlAbsolute( url, findBaseWithDefault() ); - - - // If the caller provided data, and we're using "get" request, - // append the data to the URL. - if ( settings.data && settings.type === "get" ) { - absUrl = path.addSearchParams( absUrl, settings.data ); - settings.data = undefined; - } - - // If the caller is using a "post" request, reloadPage must be true - if ( settings.data && settings.type === "post" ) { - settings.reloadPage = true; - } - - // The absolute version of the URL minus any dialog/subpage params. - // In otherwords the real URL of the page to be loaded. - var fileUrl = path.getFilePath( absUrl ), - - // The version of the Url actually stored in the data-url attribute of - // the page. For embedded pages, it is just the id of the page. For pages - // within the same domain as the document base, it is the site relative - // path. For cross-domain pages (Phone Gap only) the entire absolute Url - // used to load the page. - dataUrl = path.convertUrlToDataUrl( absUrl ); - - // Make sure we have a pageContainer to work with. - settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; - - // Check to see if the page already exists in the DOM. - // NOTE do _not_ use the :jqmData psuedo selector because parenthesis - // are a valid url char and it breaks on the first occurence - page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" ); - - // If we failed to find the page, check to see if the url is a - // reference to an embedded page. If so, it may have been dynamically - // injected by a developer, in which case it would be lacking a data-url - // attribute and in need of enhancement. - if ( page.length === 0 && dataUrl && !path.isPath( dataUrl ) ) { - page = settings.pageContainer.children( "#" + dataUrl ) - .attr( "data-" + $.mobile.ns + "url", dataUrl ) - .jqmData( "url", dataUrl ); - } - - // If we failed to find a page in the DOM, check the URL to see if it - // refers to the first page in the application. If it isn't a reference - // to the first page and refers to non-existent embedded page, error out. - if ( page.length === 0 ) { - if ( $.mobile.firstPage && path.isFirstPageUrl( fileUrl ) ) { - // Check to make sure our cached-first-page is actually - // in the DOM. Some user deployed apps are pruning the first - // page from the DOM for various reasons, we check for this - // case here because we don't want a first-page with an id - // falling through to the non-existent embedded page error - // case. If the first-page is not in the DOM, then we let - // things fall through to the ajax loading code below so - // that it gets reloaded. - if ( $.mobile.firstPage.parent().length ) { - page = $( $.mobile.firstPage ); - } - } else if ( path.isEmbeddedPage( fileUrl ) ) { - deferred.reject( absUrl, options ); - return deferred.promise(); - } - } - - // If the page we are interested in is already in the DOM, - // and the caller did not indicate that we should force a - // reload of the file, we are done. Otherwise, track the - // existing page as a duplicated. - if ( page.length ) { - if ( !settings.reloadPage ) { - enhancePage( page, settings.role ); - deferred.resolve( absUrl, options, page ); - return deferred.promise(); - } - dupCachedPage = page; - } - - var mpc = settings.pageContainer, - pblEvent = new $.Event( "pagebeforeload" ), - triggerData = { url: url, absUrl: absUrl, dataUrl: dataUrl, deferred: deferred, options: settings }; - - // Let listeners know we're about to load a page. - mpc.trigger( pblEvent, triggerData ); - - // If the default behavior is prevented, stop here! - if ( pblEvent.isDefaultPrevented() ) { - return deferred.promise(); - } - - if ( settings.showLoadMsg ) { - - // This configurable timeout allows cached pages a brief delay to load without showing a message - var loadMsgDelay = setTimeout(function() { - $.mobile.showPageLoadingMsg(); - }, settings.loadMsgDelay ), - - // Shared logic for clearing timeout and removing message. - hideMsg = function() { - - // Stop message show timer - clearTimeout( loadMsgDelay ); - - // Hide loading message - $.mobile.hidePageLoadingMsg(); - }; - } - - // Reset base to the default document base. - if ( base ) { - base.reset(); - } - - if ( !( $.mobile.allowCrossDomainPages || path.isSameDomain( documentUrl, absUrl ) ) ) { - deferred.reject( absUrl, options ); - } else { - // Load the new page. - $.ajax({ - url: fileUrl, - type: settings.type, - data: settings.data, - dataType: "html", - success: function( html, textStatus, xhr ) { - //pre-parse html to check for a data-url, - //use it as the new fileUrl, base path, etc - var all = $( "

" ), - - //page title regexp - newPageTitle = html.match( /]*>([^<]*)/ ) && RegExp.$1, - - // TODO handle dialogs again - pageElemRegex = new RegExp( "(<[^>]+\\bdata-" + $.mobile.ns + "role=[\"']?page[\"']?[^>]*>)" ), - dataUrlRegex = new RegExp( "\\bdata-" + $.mobile.ns + "url=[\"']?([^\"'>]*)[\"']?" ); - - - // data-url must be provided for the base tag so resource requests can be directed to the - // correct url. loading into a temprorary element makes these requests immediately - if ( pageElemRegex.test( html ) && - RegExp.$1 && - dataUrlRegex.test( RegExp.$1 ) && - RegExp.$1 ) { - url = fileUrl = path.getFilePath( $( "
" + RegExp.$1 + "
" ).text() ); - } - - if ( base ) { - base.set( fileUrl ); - } - - //workaround to allow scripts to execute when included in page divs - all.get( 0 ).innerHTML = html; - page = all.find( ":jqmData(role='page'), :jqmData(role='dialog')" ).first(); - - //if page elem couldn't be found, create one and insert the body element's contents - if ( !page.length ) { - page = $( "
" + html.split( /<\/?body[^>]*>/gmi )[1] + "
" ); - } - - if ( newPageTitle && !page.jqmData( "title" ) ) { - if ( ~newPageTitle.indexOf( "&" ) ) { - newPageTitle = $( "
" + newPageTitle + "
" ).text(); - } - page.jqmData( "title", newPageTitle ); - } - - //rewrite src and href attrs to use a base url - if ( !$.support.dynamicBaseTag ) { - var newPath = path.get( fileUrl ); - page.find( "[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]" ).each(function() { - var thisAttr = $( this ).is( '[href]' ) ? 'href' : - $( this ).is( '[src]' ) ? 'src' : 'action', - thisUrl = $( this ).attr( thisAttr ); - - // XXX_jblas: We need to fix this so that it removes the document - // base URL, and then prepends with the new page URL. - //if full path exists and is same, chop it - helps IE out - thisUrl = thisUrl.replace( location.protocol + '//' + location.host + location.pathname, '' ); - - if ( !/^(\w+:|#|\/)/.test( thisUrl ) ) { - $( this ).attr( thisAttr, newPath + thisUrl ); - } - }); - } - - //append to page and enhance - // TODO taging a page with external to make sure that embedded pages aren't removed - // by the various page handling code is bad. Having page handling code in many - // places is bad. Solutions post 1.0 - page - .attr( "data-" + $.mobile.ns + "url", path.convertUrlToDataUrl( fileUrl ) ) - .attr( "data-" + $.mobile.ns + "external-page", true ) - .appendTo( settings.pageContainer ); - - // wait for page creation to leverage options defined on widget - page.one( 'pagecreate', $.mobile._bindPageRemove ); - - enhancePage( page, settings.role ); - - // Enhancing the page may result in new dialogs/sub pages being inserted - // into the DOM. If the original absUrl refers to a sub-page, that is the - // real page we are interested in. - if ( absUrl.indexOf( "&" + $.mobile.subPageUrlKey ) > -1 ) { - page = settings.pageContainer.children( "[data-" + $.mobile.ns +"url='" + dataUrl + "']" ); - } - - //bind pageHide to removePage after it's hidden, if the page options specify to do so - - // Remove loading message. - if ( settings.showLoadMsg ) { - hideMsg(); - } - - // Add the page reference and xhr to our triggerData. - triggerData.xhr = xhr; - triggerData.textStatus = textStatus; - triggerData.page = page; - - // Let listeners know the page loaded successfully. - settings.pageContainer.trigger( "pageload", triggerData ); - - deferred.resolve( absUrl, options, page, dupCachedPage ); - }, - error: function( xhr, textStatus, errorThrown ) { - //set base back to current path - if ( base ) { - base.set( path.get() ); - } - - // Add error info to our triggerData. - triggerData.xhr = xhr; - triggerData.textStatus = textStatus; - triggerData.errorThrown = errorThrown; - - var plfEvent = new $.Event( "pageloadfailed" ); - - // Let listeners know the page load failed. - settings.pageContainer.trigger( plfEvent, triggerData ); - - // If the default behavior is prevented, stop here! - // Note that it is the responsibility of the listener/handler - // that called preventDefault(), to resolve/reject the - // deferred object within the triggerData. - if ( plfEvent.isDefaultPrevented() ) { - return; - } - - // Remove loading message. - if ( settings.showLoadMsg ) { - - // Remove loading message. - hideMsg(); - - // show error message - $.mobile.showPageLoadingMsg( $.mobile.pageLoadErrorMessageTheme, $.mobile.pageLoadErrorMessage, true ); - - // hide after delay - setTimeout( $.mobile.hidePageLoadingMsg, 1500 ); - } - - deferred.reject( absUrl, options ); - } - }); - } - - return deferred.promise(); - }; - - $.mobile.loadPage.defaults = { - type: "get", - data: undefined, - reloadPage: false, - role: undefined, // By default we rely on the role defined by the @data-role attribute. - showLoadMsg: false, - pageContainer: undefined, - loadMsgDelay: 50 // This delay allows loads that pull from browser cache to occur without showing the loading message. - }; - - // Show a specific page in the page container. - $.mobile.changePage = function( toPage, options ) { - // If we are in the midst of a transition, queue the current request. - // We'll call changePage() once we're done with the current transition to - // service the request. - if ( isPageTransitioning ) { - pageTransitionQueue.unshift( arguments ); - return; - } - - var settings = $.extend( {}, $.mobile.changePage.defaults, options ); - - // Make sure we have a pageContainer to work with. - settings.pageContainer = settings.pageContainer || $.mobile.pageContainer; - - // Make sure we have a fromPage. - settings.fromPage = settings.fromPage || $.mobile.activePage; - - var mpc = settings.pageContainer, - pbcEvent = new $.Event( "pagebeforechange" ), - triggerData = { toPage: toPage, options: settings }; - - // Let listeners know we're about to change the current page. - mpc.trigger( pbcEvent, triggerData ); - - // If the default behavior is prevented, stop here! - if ( pbcEvent.isDefaultPrevented() ) { - return; - } - - // We allow "pagebeforechange" observers to modify the toPage in the trigger - // data to allow for redirects. Make sure our toPage is updated. - - toPage = triggerData.toPage; - - // Set the isPageTransitioning flag to prevent any requests from - // entering this method while we are in the midst of loading a page - // or transitioning. - - isPageTransitioning = true; - - // If the caller passed us a url, call loadPage() - // to make sure it is loaded into the DOM. We'll listen - // to the promise object it returns so we know when - // it is done loading or if an error ocurred. - if ( typeof toPage === "string" ) { - $.mobile.loadPage( toPage, settings ) - .done(function( url, options, newPage, dupCachedPage ) { - isPageTransitioning = false; - options.duplicateCachedPage = dupCachedPage; - $.mobile.changePage( newPage, options ); - }) - .fail(function( url, options ) { - isPageTransitioning = false; - - //clear out the active button state - removeActiveLinkClass( true ); - - //release transition lock so navigation is free again - releasePageTransitionLock(); - settings.pageContainer.trigger( "pagechangefailed", triggerData ); - }); - return; - } - - // If we are going to the first-page of the application, we need to make - // sure settings.dataUrl is set to the application document url. This allows - // us to avoid generating a document url with an id hash in the case where the - // first-page of the document has an id attribute specified. - if ( toPage[ 0 ] === $.mobile.firstPage[ 0 ] && !settings.dataUrl ) { - settings.dataUrl = documentUrl.hrefNoHash; - } - - // The caller passed us a real page DOM element. Update our - // internal state and then trigger a transition to the page. - var fromPage = settings.fromPage, - url = ( settings.dataUrl && path.convertUrlToDataUrl( settings.dataUrl ) ) || toPage.jqmData( "url" ), - // The pageUrl var is usually the same as url, except when url is obscured as a dialog url. pageUrl always contains the file path - pageUrl = url, - fileUrl = path.getFilePath( url ), - active = urlHistory.getActive(), - activeIsInitialPage = urlHistory.activeIndex === 0, - historyDir = 0, - pageTitle = document.title, - isDialog = settings.role === "dialog" || toPage.jqmData( "role" ) === "dialog"; - - // By default, we prevent changePage requests when the fromPage and toPage - // are the same element, but folks that generate content manually/dynamically - // and reuse pages want to be able to transition to the same page. To allow - // this, they will need to change the default value of allowSamePageTransition - // to true, *OR*, pass it in as an option when they manually call changePage(). - // It should be noted that our default transition animations assume that the - // formPage and toPage are different elements, so they may behave unexpectedly. - // It is up to the developer that turns on the allowSamePageTransitiona option - // to either turn off transition animations, or make sure that an appropriate - // animation transition is used. - if ( fromPage && fromPage[0] === toPage[0] && !settings.allowSamePageTransition ) { - isPageTransitioning = false; - mpc.trigger( "pagechange", triggerData ); - - // Even if there is no page change to be done, we should keep the urlHistory in sync with the hash changes - if ( settings.fromHashChange ) { - urlHistory.directHashChange({ - currentUrl: url, - isBack: function() {}, - isForward: function() {} - }); - } - - return; - } - - // We need to make sure the page we are given has already been enhanced. - enhancePage( toPage, settings.role ); - - // If the changePage request was sent from a hashChange event, check to see if the - // page is already within the urlHistory stack. If so, we'll assume the user hit - // the forward/back button and will try to match the transition accordingly. - if ( settings.fromHashChange ) { - urlHistory.directHashChange({ - currentUrl: url, - isBack: function() { historyDir = -1; }, - isForward: function() { historyDir = 1; } - }); - } - - // Kill the keyboard. - // XXX_jblas: We need to stop crawling the entire document to kill focus. Instead, - // we should be tracking focus with a delegate() handler so we already have - // the element in hand at this point. - // Wrap this in a try/catch block since IE9 throw "Unspecified error" if document.activeElement - // is undefined when we are in an IFrame. - try { - if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== 'body' ) { - $( document.activeElement ).blur(); - } else { - $( "input:focus, textarea:focus, select:focus" ).blur(); - } - } catch( e ) {} - - // Record whether we are at a place in history where a dialog used to be - if so, do not add a new history entry and do not change the hash either - var alreadyThere = false; - - // If we're displaying the page as a dialog, we don't want the url - // for the dialog content to be used in the hash. Instead, we want - // to append the dialogHashKey to the url of the current page. - if ( isDialog && active ) { - // on the initial page load active.url is undefined and in that case should - // be an empty string. Moving the undefined -> empty string back into - // urlHistory.addNew seemed imprudent given undefined better represents - // the url state - - // If we are at a place in history that once belonged to a dialog, reuse - // this state without adding to urlHistory and without modifying the hash. - // However, if a dialog is already displayed at this point, and we're - // about to display another dialog, then we must add another hash and - // history entry on top so that one may navigate back to the original dialog - if ( active.url.indexOf( dialogHashKey ) > -1 && !$.mobile.activePage.is( ".ui-dialog" ) ) { - settings.changeHash = false; - alreadyThere = true; - } - - // Normally, we tack on a dialog hash key, but if this is the location of a stale dialog, - // we reuse the URL from the entry - url = ( active.url || "" ) + ( alreadyThere ? "" : dialogHashKey ); - - // tack on another dialogHashKey if this is the same as the initial hash - // this makes sure that a history entry is created for this dialog - if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) { - url += dialogHashKey; - } - } - - // Set the location hash. - if ( settings.changeHash !== false && url ) { - //disable hash listening temporarily - urlHistory.ignoreNextHashChange = true; - //update hash and history - path.set( url ); - } - - // if title element wasn't found, try the page div data attr too - // If this is a deep-link or a reload ( active === undefined ) then just use pageTitle - var newPageTitle = ( !active )? pageTitle : toPage.jqmData( "title" ) || toPage.children( ":jqmData(role='header')" ).find( ".ui-title" ).getEncodedText(); - if ( !!newPageTitle && pageTitle === document.title ) { - pageTitle = newPageTitle; - } - if ( !toPage.jqmData( "title" ) ) { - toPage.jqmData( "title", pageTitle ); - } - - // Make sure we have a transition defined. - settings.transition = settings.transition || - ( ( historyDir && !activeIsInitialPage ) ? active.transition : undefined ) || - ( isDialog ? $.mobile.defaultDialogTransition : $.mobile.defaultPageTransition ); - - //add page to history stack if it's not back or forward - if ( !historyDir ) { - // Overwrite the current entry if it's a leftover from a dialog - if ( alreadyThere ) { - urlHistory.activeIndex = Math.max( 0, urlHistory.activeIndex - 1 ); - } - urlHistory.addNew( url, settings.transition, pageTitle, pageUrl, settings.role ); - } - - //set page title - document.title = urlHistory.getActive().title; - - //set "toPage" as activePage - $.mobile.activePage = toPage; - - // If we're navigating back in the URL history, set reverse accordingly. - settings.reverse = settings.reverse || historyDir < 0; - - transitionPages( toPage, fromPage, settings.transition, settings.reverse ) - .done(function( name, reverse, $to, $from, alreadyFocused ) { - removeActiveLinkClass(); - - //if there's a duplicateCachedPage, remove it from the DOM now that it's hidden - if ( settings.duplicateCachedPage ) { - settings.duplicateCachedPage.remove(); - } - - // Send focus to the newly shown page. Moved from promise .done binding in transitionPages - // itself to avoid ie bug that reports offsetWidth as > 0 (core check for visibility) - // despite visibility: hidden addresses issue #2965 - // https://github.com/jquery/jquery-mobile/issues/2965 - if ( !alreadyFocused ) { - $.mobile.focusPage( toPage ); - } - - releasePageTransitionLock(); - - // Let listeners know we're all done changing the current page. - mpc.trigger( "pagechange", triggerData ); - }); - }; - - $.mobile.changePage.defaults = { - transition: undefined, - reverse: false, - changeHash: true, - fromHashChange: false, - role: undefined, // By default we rely on the role defined by the @data-role attribute. - duplicateCachedPage: undefined, - pageContainer: undefined, - showLoadMsg: true, //loading message shows by default when pages are being fetched during changePage - dataUrl: undefined, - fromPage: undefined, - allowSamePageTransition: false - }; - -/* Event Bindings - hashchange, submit, and click */ - function findClosestLink( ele ) - { - while ( ele ) { - // Look for the closest element with a nodeName of "a". - // Note that we are checking if we have a valid nodeName - // before attempting to access it. This is because the - // node we get called with could have originated from within - // an embedded SVG document where some symbol instance elements - // don't have nodeName defined on them, or strings are of type - // SVGAnimatedString. - if ( ( typeof ele.nodeName === "string" ) && ele.nodeName.toLowerCase() === "a" ) { - break; - } - ele = ele.parentNode; - } - return ele; - } - - // The base URL for any given element depends on the page it resides in. - function getClosestBaseUrl( ele ) - { - // Find the closest page and extract out its url. - var url = $( ele ).closest( ".ui-page" ).jqmData( "url" ), - base = documentBase.hrefNoHash; - - if ( !url || !path.isPath( url ) ) { - url = base; - } - - return path.makeUrlAbsolute( url, base); - } - - //The following event bindings should be bound after mobileinit has been triggered - //the following deferred is resolved in the init file - $.mobile.navreadyDeferred = $.Deferred(); - $.mobile.navreadyDeferred.done(function() { - //bind to form submit events, handle with Ajax - $( document ).delegate( "form", "submit", function( event ) { - var $this = $( this ); - - if ( !$.mobile.ajaxEnabled || - // test that the form is, itself, ajax false - $this.is( ":jqmData(ajax='false')" ) || - // test that $.mobile.ignoreContentEnabled is set and - // the form or one of it's parents is ajax=false - !$this.jqmHijackable().length ) { - return; - } - - var type = $this.attr( "method" ), - target = $this.attr( "target" ), - url = $this.attr( "action" ); - - // If no action is specified, browsers default to using the - // URL of the document containing the form. Since we dynamically - // pull in pages from external documents, the form should submit - // to the URL for the source document of the page containing - // the form. - if ( !url ) { - // Get the @data-url for the page containing the form. - url = getClosestBaseUrl( $this ); - if ( url === documentBase.hrefNoHash ) { - // The url we got back matches the document base, - // which means the page must be an internal/embedded page, - // so default to using the actual document url as a browser - // would. - url = documentUrl.hrefNoSearch; - } - } - - url = path.makeUrlAbsolute( url, getClosestBaseUrl( $this ) ); - - if ( ( path.isExternal( url ) && !path.isPermittedCrossDomainRequest( documentUrl, url ) ) || target ) { - return; - } - - $.mobile.changePage( - url, - { - type: type && type.length && type.toLowerCase() || "get", - data: $this.serialize(), - transition: $this.jqmData( "transition" ), - reverse: $this.jqmData( "direction" ) === "reverse", - reloadPage: true - } - ); - event.preventDefault(); - }); - - //add active state on vclick - $( document ).bind( "vclick", function( event ) { - // if this isn't a left click we don't care. Its important to note - // that when the virtual event is generated it will create the which attr - if ( event.which > 1 || !$.mobile.linkBindingEnabled ) { - return; - } - - var link = findClosestLink( event.target ); - - // split from the previous return logic to avoid find closest where possible - // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping - // can be avoided - if ( !$( link ).jqmHijackable().length ) { - return; - } - - if ( link ) { - if ( path.parseUrl( link.getAttribute( "href" ) || "#" ).hash !== "#" ) { - removeActiveLinkClass( true ); - $activeClickedLink = $( link ).closest( ".ui-btn" ).not( ".ui-disabled" ); - $activeClickedLink.addClass( $.mobile.activeBtnClass ); - } - } - }); - - // click routing - direct to HTTP or Ajax, accordingly - $( document ).bind( "click", function( event ) { - if ( !$.mobile.linkBindingEnabled ) { - return; - } - - var link = findClosestLink( event.target ), $link = $( link ), httpCleanup; - - // If there is no link associated with the click or its not a left - // click we want to ignore the click - // TODO teach $.mobile.hijackable to operate on raw dom elements so the link wrapping - // can be avoided - if ( !link || event.which > 1 || !$link.jqmHijackable().length ) { - return; - } - - //remove active link class if external (then it won't be there if you come back) - httpCleanup = function() { - window.setTimeout(function() { removeActiveLinkClass( true ); }, 200 ); - }; - - //if there's a data-rel=back attr, go back in history - if ( $link.is( ":jqmData(rel='back')" ) ) { - $.mobile.back(); - return false; - } - - var baseUrl = getClosestBaseUrl( $link ), - - //get href, if defined, otherwise default to empty hash - href = path.makeUrlAbsolute( $link.attr( "href" ) || "#", baseUrl ); - - //if ajax is disabled, exit early - if ( !$.mobile.ajaxEnabled && !path.isEmbeddedPage( href ) ) { - httpCleanup(); - //use default click handling - return; - } - - // XXX_jblas: Ideally links to application pages should be specified as - // an url to the application document with a hash that is either - // the site relative path or id to the page. But some of the - // internal code that dynamically generates sub-pages for nested - // lists and select dialogs, just write a hash in the link they - // create. This means the actual URL path is based on whatever - // the current value of the base tag is at the time this code - // is called. For now we are just assuming that any url with a - // hash in it is an application page reference. - if ( href.search( "#" ) !== -1 ) { - href = href.replace( /[^#]*#/, "" ); - if ( !href ) { - //link was an empty hash meant purely - //for interaction, so we ignore it. - event.preventDefault(); - return; - } else if ( path.isPath( href ) ) { - //we have apath so make it the href we want to load. - href = path.makeUrlAbsolute( href, baseUrl ); - } else { - //we have a simple id so use the documentUrl as its base. - href = path.makeUrlAbsolute( "#" + href, documentUrl.hrefNoHash ); - } - } - - // Should we handle this link, or let the browser deal with it? - var useDefaultUrlHandling = $link.is( "[rel='external']" ) || $link.is( ":jqmData(ajax='false')" ) || $link.is( "[target]" ), - - // Some embedded browsers, like the web view in Phone Gap, allow cross-domain XHR - // requests if the document doing the request was loaded via the file:// protocol. - // This is usually to allow the application to "phone home" and fetch app specific - // data. We normally let the browser handle external/cross-domain urls, but if the - // allowCrossDomainPages option is true, we will allow cross-domain http/https - // requests to go through our page loading logic. - - //check for protocol or rel and its not an embedded page - //TODO overlap in logic from isExternal, rel=external check should be - // moved into more comprehensive isExternalLink - isExternal = useDefaultUrlHandling || ( path.isExternal( href ) && !path.isPermittedCrossDomainRequest( documentUrl, href ) ); - - if ( isExternal ) { - httpCleanup(); - //use default click handling - return; - } - - //use ajax - var transition = $link.jqmData( "transition" ), - reverse = $link.jqmData( "direction" ) === "reverse" || - // deprecated - remove by 1.0 - $link.jqmData( "back" ), - - //this may need to be more specific as we use data-rel more - role = $link.attr( "data-" + $.mobile.ns + "rel" ) || undefined; - - $.mobile.changePage( href, { transition: transition, reverse: reverse, role: role, link: $link } ); - event.preventDefault(); - }); - - //prefetch pages when anchors with data-prefetch are encountered - $( document ).delegate( ".ui-page", "pageshow.prefetch", function() { - var urls = []; - $( this ).find( "a:jqmData(prefetch)" ).each(function() { - var $link = $( this ), - url = $link.attr( "href" ); - - if ( url && $.inArray( url, urls ) === -1 ) { - urls.push( url ); - - $.mobile.loadPage( url, { role: $link.attr( "data-" + $.mobile.ns + "rel" ) } ); - } - }); - }); - - $.mobile._handleHashChange = function( hash ) { - //find first page via hash - var to = path.stripHash( hash ), - //transition is false if it's the first page, undefined otherwise (and may be overridden by default) - transition = $.mobile.urlHistory.stack.length === 0 ? "none" : undefined, - - // "navigate" event fired to allow others to take advantage of the more robust hashchange handling - navEvent = new $.Event( "navigate" ), - - // default options for the changPage calls made after examining the current state - // of the page and the hash - changePageOptions = { - transition: transition, - changeHash: false, - fromHashChange: true - }; - - if ( 0 === urlHistory.stack.length ) { - urlHistory.initialDst = to; - } - - // We should probably fire the "navigate" event from those places that make calls to _handleHashChange, - // and have _handleHashChange hook into the "navigate" event instead of triggering it here - $.mobile.pageContainer.trigger( navEvent ); - if ( navEvent.isDefaultPrevented() ) { - return; - } - - //if listening is disabled (either globally or temporarily), or it's a dialog hash - if ( !$.mobile.hashListeningEnabled || urlHistory.ignoreNextHashChange ) { - urlHistory.ignoreNextHashChange = false; - return; - } - - // special case for dialogs - if ( urlHistory.stack.length > 1 && to.indexOf( dialogHashKey ) > -1 && urlHistory.initialDst !== to ) { - - // If current active page is not a dialog skip the dialog and continue - // in the same direction - if ( !$.mobile.activePage.is( ".ui-dialog" ) ) { - //determine if we're heading forward or backward and continue accordingly past - //the current dialog - urlHistory.directHashChange({ - currentUrl: to, - isBack: function() { $.mobile.back(); }, - isForward: function() { window.history.forward(); } - }); - - // prevent changePage() - return; - } else { - // if the current active page is a dialog and we're navigating - // to a dialog use the dialog objected saved in the stack - urlHistory.directHashChange({ - currentUrl: to, - - // regardless of the direction of the history change - // do the following - either: function( isBack ) { - var active = $.mobile.urlHistory.getActive(); - - to = active.pageUrl; - - // make sure to set the role, transition and reversal - // as most of this is lost by the domCache cleaning - $.extend( changePageOptions, { - role: active.role, - transition: active.transition, - reverse: isBack - }); - } - }); - } - } - - //if to is defined, load it - if ( to ) { - // At this point, 'to' can be one of 3 things, a cached page element from - // a history stack entry, an id, or site-relative/absolute URL. If 'to' is - // an id, we need to resolve it against the documentBase, not the location.href, - // since the hashchange could've been the result of a forward/backward navigation - // that crosses from an external page/dialog to an internal page/dialog. - to = ( typeof to === "string" && !path.isPath( to ) ) ? ( path.makeUrlAbsolute( '#' + to, documentBase ) ) : to; - - // If we're about to go to an initial URL that contains a reference to a non-existent - // internal page, go to the first page instead. We know that the initial hash refers to a - // non-existent page, because the initial hash did not end up in the initial urlHistory entry - if ( to === path.makeUrlAbsolute( '#' + urlHistory.initialDst, documentBase ) && - urlHistory.stack.length && urlHistory.stack[0].url !== urlHistory.initialDst.replace( dialogHashKey, "" ) ) { - to = $.mobile.firstPage; - } - $.mobile.changePage( to, changePageOptions ); - } else { - //there's no hash, go to the first page in the dom - $.mobile.changePage( $.mobile.firstPage, changePageOptions ); - } - }; - - //hashchange event handler - $window.bind( "hashchange", function( e, triggered ) { - // Firefox auto-escapes the location.hash as for v13 but - // leaves the href untouched - $.mobile._handleHashChange( path.parseLocation().hash ); - }); - - //set page min-heights to be device specific - $( document ).bind( "pageshow", resetActivePageHeight ); - $( window ).bind( "throttledresize", resetActivePageHeight ); - - });//navreadyDeferred done callback - -})( jQuery ); - -(function( $, window ) { - // For now, let's Monkeypatch this onto the end of $.mobile._registerInternalEvents - // Scope self to pushStateHandler so we can reference it sanely within the - // methods handed off as event handlers - var pushStateHandler = {}, - self = pushStateHandler, - $win = $( window ), - url = $.mobile.path.parseLocation(), - mobileinitDeferred = $.Deferred(), - domreadyDeferred = $.Deferred(); - - $( document ).ready( $.proxy( domreadyDeferred, "resolve" ) ); - - $( document ).one( "mobileinit", $.proxy( mobileinitDeferred, "resolve" ) ); - - $.extend( pushStateHandler, { - // TODO move to a path helper, this is rather common functionality - initialFilePath: (function() { - return url.pathname + url.search; - })(), - - hashChangeTimeout: 200, - - hashChangeEnableTimer: undefined, - - initialHref: url.hrefNoHash, - - state: function() { - return { - // firefox auto decodes the url when using location.hash but not href - hash: $.mobile.path.parseLocation().hash || "#" + self.initialFilePath, - title: document.title, - - // persist across refresh - initialHref: self.initialHref - }; - }, - - resetUIKeys: function( url ) { - var dialog = $.mobile.dialogHashKey, - subkey = "&" + $.mobile.subPageUrlKey, - dialogIndex = url.indexOf( dialog ); - - if ( dialogIndex > -1 ) { - url = url.slice( 0, dialogIndex ) + "#" + url.slice( dialogIndex ); - } else if ( url.indexOf( subkey ) > -1 ) { - url = url.split( subkey ).join( "#" + subkey ); - } - - return url; - }, - - // TODO sort out a single barrier to hashchange functionality - nextHashChangePrevented: function( value ) { - $.mobile.urlHistory.ignoreNextHashChange = value; - self.onHashChangeDisabled = value; - }, - - // on hash change we want to clean up the url - // NOTE this takes place *after* the vanilla navigation hash change - // handling has taken place and set the state of the DOM - onHashChange: function( e ) { - // disable this hash change - if ( self.onHashChangeDisabled ) { - return; - } - - var href, state, - // firefox auto decodes the url when using location.hash but not href - hash = $.mobile.path.parseLocation().hash, - isPath = $.mobile.path.isPath( hash ), - resolutionUrl = isPath ? $.mobile.path.getLocation() : $.mobile.getDocumentUrl(); - - hash = isPath ? hash.replace( "#", "" ) : hash; - - - // propulate the hash when its not available - state = self.state(); - - // make the hash abolute with the current href - href = $.mobile.path.makeUrlAbsolute( hash, resolutionUrl ); - - if ( isPath ) { - href = self.resetUIKeys( href ); - } - - // replace the current url with the new href and store the state - // Note that in some cases we might be replacing an url with the - // same url. We do this anyways because we need to make sure that - // all of our history entries have a state object associated with - // them. This allows us to work around the case where $.mobile.back() - // is called to transition from an external page to an embedded page. - // In that particular case, a hashchange event is *NOT* generated by the browser. - // Ensuring each history entry has a state object means that onPopState() - // will always trigger our hashchange callback even when a hashchange event - // is not fired. - history.replaceState( state, document.title, href ); - }, - - // on popstate (ie back or forward) we need to replace the hash that was there previously - // cleaned up by the additional hash handling - onPopState: function( e ) { - var poppedState = e.originalEvent.state, - fromHash, toHash, hashChanged; - - // if there's no state its not a popstate we care about, eg chrome's initial popstate - if ( poppedState ) { - // if we get two pop states in under this.hashChangeTimeout - // make sure to clear any timer set for the previous change - clearTimeout( self.hashChangeEnableTimer ); - - // make sure to enable hash handling for the the _handleHashChange call - self.nextHashChangePrevented( false ); - - // change the page based on the hash in the popped state - $.mobile._handleHashChange( poppedState.hash ); - - // prevent any hashchange in the next self.hashChangeTimeout - self.nextHashChangePrevented( true ); - - // re-enable hash change handling after swallowing a possible hash - // change event that comes on all popstates courtesy of browsers like Android - self.hashChangeEnableTimer = setTimeout( function() { - self.nextHashChangePrevented( false ); - }, self.hashChangeTimeout ); - } - }, - - init: function() { - $win.bind( "hashchange", self.onHashChange ); - - // Handle popstate events the occur through history changes - $win.bind( "popstate", self.onPopState ); - - // if there's no hash, we need to replacestate for returning to home - if ( location.hash === "" ) { - history.replaceState( self.state(), document.title, $.mobile.path.getLocation() ); - } - } - }); - - // We need to init when "mobileinit", "domready", and "navready" have all happened - $.when( domreadyDeferred, mobileinitDeferred, $.mobile.navreadyDeferred ).done(function() { - if ( $.mobile.pushStateEnabled && $.support.pushState ) { - pushStateHandler.init(); - } - }); -})( jQuery, this ); - -/* -* fallback transition for flip in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.flip = "fade"; - -})( jQuery, this ); -/* -* fallback transition for flow in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.flow = "fade"; - -})( jQuery, this ); -/* -* fallback transition for pop in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.pop = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slide in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Use the simultaneous transitions handler for slide transitions -$.mobile.transitionHandlers.slide = $.mobile.transitionHandlers.simultaneous; - -// Set the slide transitions's fallback to "fade" -$.mobile.transitionFallbacks.slide = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slidedown in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slidedown = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slidefade in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -// Set the slide transitions's fallback to "fade" -$.mobile.transitionFallbacks.slidefade = "fade"; - -})( jQuery, this ); -/* -* fallback transition for slideup in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.slideup = "fade"; - -})( jQuery, this ); -/* -* fallback transition for turn in non-3D supporting browsers (which tend to handle complex transitions poorly in general -*/ - -(function( $, window, undefined ) { - -$.mobile.transitionFallbacks.turn = "fade"; - -})( jQuery, this ); - -(function( $, undefined ) { - -$.mobile.page.prototype.options.degradeInputs = { - color: false, - date: false, - datetime: false, - "datetime-local": false, - email: false, - month: false, - number: false, - range: "number", - search: "text", - tel: false, - time: false, - url: false, - week: false -}; - - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - - var page = $.mobile.closestPageData( $( e.target ) ), options; - - if ( !page ) { - return; - } - - options = page.options; - - // degrade inputs to avoid poorly implemented native functionality - $( e.target ).find( "input" ).not( page.keepNativeSelector() ).each(function() { - var $this = $( this ), - type = this.getAttribute( "type" ), - optType = options.degradeInputs[ type ] || "text"; - - if ( options.degradeInputs[ type ] ) { - var html = $( "
" ).html( $this.clone() ).html(), - // In IE browsers, the type sometimes doesn't exist in the cloned markup, so we replace the closing tag instead - hasType = html.indexOf( " type=" ) > -1, - findstr = hasType ? /\s+type=["']?\w+['"]?/ : /\/?>/, - repstr = " type=\"" + optType + "\" data-" + $.mobile.ns + "type=\"" + type + "\"" + ( hasType ? "" : ">" ); - - $this.replaceWith( html.replace( findstr, repstr ) ); - } - }); - -}); - -})( jQuery ); - -(function( $, window, undefined ) { - -$.widget( "mobile.dialog", $.mobile.widget, { - options: { - closeBtnText: "Close", - overlayTheme: "a", - initSelector: ":jqmData(role='dialog')" - }, - _create: function() { - var self = this, - $el = this.element, - headerCloseButton = $( ""+ this.options.closeBtnText + "" ), - dialogWrap = $( "
", { - "role" : "dialog", - "class" : "ui-dialog-contain ui-corner-all ui-overlay-shadow" - }); - - $el.addClass( "ui-dialog ui-overlay-" + this.options.overlayTheme ); - - // Class the markup for dialog styling - // Set aria role - $el - .wrapInner( dialogWrap ) - .children() - .find( ":jqmData(role='header')" ) - .prepend( headerCloseButton ) - .end() - .children( ':first-child') - .addClass( "ui-corner-top" ) - .end() - .children( ":last-child" ) - .addClass( "ui-corner-bottom" ); - - // this must be an anonymous function so that select menu dialogs can replace - // the close method. This is a change from previously just defining data-rel=back - // on the button and letting nav handle it - // - // Use click rather than vclick in order to prevent the possibility of unintentionally - // reopening the dialog if the dialog opening item was directly under the close button. - headerCloseButton.bind( "click", function() { - self.close(); - }); - - /* bind events - - clicks and submits should use the closing transition that the dialog opened with - unless a data-transition is specified on the link/form - - if the click was on the close button, or the link has a data-rel="back" it'll go back in history naturally - */ - $el.bind( "vclick submit", function( event ) { - var $target = $( event.target ).closest( event.type === "vclick" ? "a" : "form" ), - active; - - if ( $target.length && !$target.jqmData( "transition" ) ) { - - active = $.mobile.urlHistory.getActive() || {}; - - $target.attr( "data-" + $.mobile.ns + "transition", ( active.transition || $.mobile.defaultDialogTransition ) ) - .attr( "data-" + $.mobile.ns + "direction", "reverse" ); - } - }) - .bind( "pagehide", function( e, ui ) { - $( this ).find( "." + $.mobile.activeBtnClass ).not( ".ui-slider-bg" ).removeClass( $.mobile.activeBtnClass ); - }) - // Override the theme set by the page plugin on pageshow - .bind( "pagebeforeshow", function() { - self._isCloseable = true; - if ( self.options.overlayTheme ) { - self.element - .page( "removeContainerBackground" ) - .page( "setContainerBackground", self.options.overlayTheme ); - } - }); - }, - - // Close method goes back in history - close: function() { - var dst; - - if ( this._isCloseable ) { - this._isCloseable = false; - if ( $.mobile.hashListeningEnabled ) { - $.mobile.back(); - } else { - dst = $.mobile.urlHistory.getPrev().url; - if ( !$.mobile.path.isPath( dst ) ) { - dst = $.mobile.path.makeUrlAbsolute( "#" + dst ); - } - - $.mobile.changePage( dst, { changeHash: false, fromHashChange: true } ); - } - } - } -}); - -//auto self-init widgets -$( document ).delegate( $.mobile.dialog.prototype.options.initSelector, "pagecreate", function() { - $.mobile.dialog.prototype.enhance( this ); -}); - -})( jQuery, this ); - -(function( $, undefined ) { - -$.mobile.page.prototype.options.backBtnText = "Back"; -$.mobile.page.prototype.options.addBackBtn = false; -$.mobile.page.prototype.options.backBtnTheme = null; -$.mobile.page.prototype.options.headerTheme = "a"; -$.mobile.page.prototype.options.footerTheme = "a"; -$.mobile.page.prototype.options.contentTheme = null; - -// NOTE bind used to force this binding to run before the buttonMarkup binding -// which expects .ui-footer top be applied in its gigantic selector -// TODO remove the buttonMarkup giant selector and move it to the various modules -// on which it depends -$( document ).bind( "pagecreate", function( e ) { - var $page = $( e.target ), - o = $page.data( "page" ).options, - pageRole = $page.jqmData( "role" ), - pageTheme = o.theme; - - $( ":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')", $page ) - .jqmEnhanceable() - .each(function() { - - var $this = $( this ), - role = $this.jqmData( "role" ), - theme = $this.jqmData( "theme" ), - contentTheme = theme || o.contentTheme || ( pageRole === "dialog" && pageTheme ), - $headeranchors, - leftbtn, - rightbtn, - backBtn; - - $this.addClass( "ui-" + role ); - - //apply theming and markup modifications to page,header,content,footer - if ( role === "header" || role === "footer" ) { - - var thisTheme = theme || ( role === "header" ? o.headerTheme : o.footerTheme ) || pageTheme; - - $this - //add theme class - .addClass( "ui-bar-" + thisTheme ) - // Add ARIA role - .attr( "role", role === "header" ? "banner" : "contentinfo" ); - - if ( role === "header") { - // Right,left buttons - $headeranchors = $this.children( "a, button" ); - leftbtn = $headeranchors.hasClass( "ui-btn-left" ); - rightbtn = $headeranchors.hasClass( "ui-btn-right" ); - - leftbtn = leftbtn || $headeranchors.eq( 0 ).not( ".ui-btn-right" ).addClass( "ui-btn-left" ).length; - - rightbtn = rightbtn || $headeranchors.eq( 1 ).addClass( "ui-btn-right" ).length; - } - - // Auto-add back btn on pages beyond first view - if ( o.addBackBtn && - role === "header" && - $( ".ui-page" ).length > 1 && - $page.jqmData( "url" ) !== $.mobile.path.stripHash( location.hash ) && - !leftbtn ) { - - backBtn = $( ""+ o.backBtnText +"" ) - // If theme is provided, override default inheritance - .attr( "data-"+ $.mobile.ns +"theme", o.backBtnTheme || thisTheme ) - .prependTo( $this ); - } - - // Page title - $this.children( "h1, h2, h3, h4, h5, h6" ) - .addClass( "ui-title" ) - // Regardless of h element number in src, it becomes h1 for the enhanced page - .attr({ - "role": "heading", - "aria-level": "1" - }); - - } else if ( role === "content" ) { - if ( contentTheme ) { - $this.addClass( "ui-body-" + ( contentTheme ) ); - } - - // Add ARIA role - $this.attr( "role", "main" ); - } - }); -}); - -})( jQuery ); - -(function( $, undefined ) { - -// filter function removes whitespace between label and form element so we can use inline-block (nodeType 3 = text) -$.fn.fieldcontain = function( options ) { - return this - .addClass( "ui-field-contain ui-body ui-br" ) - .contents().filter( function() { - return ( this.nodeType === 3 && !/\S/.test( this.nodeValue ) ); - }).remove(); -}; - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $( ":jqmData(role='fieldcontain')", e.target ).jqmEnhanceable().fieldcontain(); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.fn.grid = function( options ) { - return this.each(function() { - - var $this = $( this ), - o = $.extend({ - grid: null - }, options ), - $kids = $this.children(), - gridCols = { solo:1, a:2, b:3, c:4, d:5 }, - grid = o.grid, - iterator; - - if ( !grid ) { - if ( $kids.length <= 5 ) { - for ( var letter in gridCols ) { - if ( gridCols[ letter ] === $kids.length ) { - grid = letter; - } - } - } else { - grid = "a"; - $this.addClass( "ui-grid-duo" ); - } - } - iterator = gridCols[grid]; - - $this.addClass( "ui-grid-" + grid ); - - $kids.filter( ":nth-child(" + iterator + "n+1)" ).addClass( "ui-block-a" ); - - if ( iterator > 1 ) { - $kids.filter( ":nth-child(" + iterator + "n+2)" ).addClass( "ui-block-b" ); - } - if ( iterator > 2 ) { - $kids.filter( ":nth-child(" + iterator + "n+3)" ).addClass( "ui-block-c" ); - } - if ( iterator > 3 ) { - $kids.filter( ":nth-child(" + iterator + "n+4)" ).addClass( "ui-block-d" ); - } - if ( iterator > 4 ) { - $kids.filter( ":nth-child(" + iterator + "n+5)" ).addClass( "ui-block-e" ); - } - }); -}; -})( jQuery ); - -(function( $, undefined ) { - -$( document ).bind( "pagecreate create", function( e ) { - $( ":jqmData(role='nojs')", e.target ).addClass( "ui-nojs" ); - -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.fn.buttonMarkup = function( options ) { - var $workingSet = this, - mapToDataAttr = function( key, value ) { - e.setAttribute( "data-" + $.mobile.ns + key, value ); - el.jqmData( key, value ); - }; - - // Enforce options to be of type string - options = ( options && ( $.type( options ) === "object" ) )? options : {}; - for ( var i = 0; i < $workingSet.length; i++ ) { - var el = $workingSet.eq( i ), - e = el[ 0 ], - o = $.extend( {}, $.fn.buttonMarkup.defaults, { - icon: options.icon !== undefined ? options.icon : el.jqmData( "icon" ), - iconpos: options.iconpos !== undefined ? options.iconpos : el.jqmData( "iconpos" ), - theme: options.theme !== undefined ? options.theme : el.jqmData( "theme" ) || $.mobile.getInheritedTheme( el, "c" ), - inline: options.inline !== undefined ? options.inline : el.jqmData( "inline" ), - shadow: options.shadow !== undefined ? options.shadow : el.jqmData( "shadow" ), - corners: options.corners !== undefined ? options.corners : el.jqmData( "corners" ), - iconshadow: options.iconshadow !== undefined ? options.iconshadow : el.jqmData( "iconshadow" ), - mini: options.mini !== undefined ? options.mini : el.jqmData( "mini" ) - }, options ), - - // Classes Defined - innerClass = "ui-btn-inner", - textClass = "ui-btn-text", - buttonClass, iconClass, - // Button inner markup - buttonInner, - buttonText, - buttonIcon, - buttonElements; - - $.each( o, mapToDataAttr ); - - if ( el.jqmData( "rel" ) === "popup" && el.attr( "href" ) ) { - e.setAttribute( "aria-haspopup", true ); - e.setAttribute( "aria-owns", e.getAttribute( "href" ) ); - } - - // Check if this element is already enhanced - buttonElements = $.data( ( ( e.tagName === "INPUT" || e.tagName === "BUTTON" ) ? e.parentNode : e ), "buttonElements" ); - - if ( buttonElements ) { - e = buttonElements.outer; - el = $( e ); - buttonInner = buttonElements.inner; - buttonText = buttonElements.text; - // We will recreate this icon below - $( buttonElements.icon ).remove(); - buttonElements.icon = null; - } - else { - buttonInner = document.createElement( o.wrapperEls ); - buttonText = document.createElement( o.wrapperEls ); - } - buttonIcon = o.icon ? document.createElement( "span" ) : null; - - if ( attachEvents && !buttonElements ) { - attachEvents(); - } - - // if not, try to find closest theme container - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( el, "c" ); - } - - buttonClass = "ui-btn ui-btn-up-" + o.theme; - buttonClass += o.shadow ? " ui-shadow" : ""; - buttonClass += o.corners ? " ui-btn-corner-all" : ""; - - if ( o.mini !== undefined ) { - // Used to control styling in headers/footers, where buttons default to `mini` style. - buttonClass += o.mini === true ? " ui-mini" : " ui-fullsize"; - } - - if ( o.inline !== undefined ) { - // Used to control styling in headers/footers, where buttons default to `inline` style. - buttonClass += o.inline === true ? " ui-btn-inline" : " ui-btn-block"; - } - - if ( o.icon ) { - o.icon = "ui-icon-" + o.icon; - o.iconpos = o.iconpos || "left"; - - iconClass = "ui-icon " + o.icon; - - if ( o.iconshadow ) { - iconClass += " ui-icon-shadow"; - } - } - - if ( o.iconpos ) { - buttonClass += " ui-btn-icon-" + o.iconpos; - - if ( o.iconpos === "notext" && !el.attr( "title" ) ) { - el.attr( "title", el.getEncodedText() ); - } - } - - innerClass += o.corners ? " ui-btn-corner-all" : ""; - - if ( o.iconpos && o.iconpos === "notext" && !el.attr( "title" ) ) { - el.attr( "title", el.getEncodedText() ); - } - - if ( buttonElements ) { - el.removeClass( buttonElements.bcls || "" ); - } - el.removeClass( "ui-link" ).addClass( buttonClass ); - - buttonInner.className = innerClass; - - buttonText.className = textClass; - if ( !buttonElements ) { - buttonInner.appendChild( buttonText ); - } - if ( buttonIcon ) { - buttonIcon.className = iconClass; - if ( !( buttonElements && buttonElements.icon ) ) { - buttonIcon.innerHTML = " "; - buttonInner.appendChild( buttonIcon ); - } - } - - while ( e.firstChild && !buttonElements ) { - buttonText.appendChild( e.firstChild ); - } - - if ( !buttonElements ) { - e.appendChild( buttonInner ); - } - - // Assign a structure containing the elements of this button to the elements of this button. This - // will allow us to recognize this as an already-enhanced button in future calls to buttonMarkup(). - buttonElements = { - bcls : buttonClass, - outer : e, - inner : buttonInner, - text : buttonText, - icon : buttonIcon - }; - - $.data( e, 'buttonElements', buttonElements ); - $.data( buttonInner, 'buttonElements', buttonElements ); - $.data( buttonText, 'buttonElements', buttonElements ); - if ( buttonIcon ) { - $.data( buttonIcon, 'buttonElements', buttonElements ); - } - } - - return this; -}; - -$.fn.buttonMarkup.defaults = { - corners: true, - shadow: true, - iconshadow: true, - wrapperEls: "span" -}; - -function closestEnabledButton( element ) { - var cname; - - while ( element ) { - // Note that we check for typeof className below because the element we - // handed could be in an SVG DOM where className on SVG elements is defined to - // be of a different type (SVGAnimatedString). We only operate on HTML DOM - // elements, so we look for plain "string". - cname = ( typeof element.className === 'string' ) && ( element.className + ' ' ); - if ( cname && cname.indexOf( "ui-btn " ) > -1 && cname.indexOf( "ui-disabled " ) < 0 ) { - break; - } - - element = element.parentNode; - } - - return element; -} - -var attachEvents = function() { - var hoverDelay = $.mobile.buttonMarkup.hoverDelay, hov, foc; - - $( document ).bind( { - "vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart": function( event ) { - var theme, - $btn = $( closestEnabledButton( event.target ) ), - isTouchEvent = event.originalEvent && /^touch/.test( event.originalEvent.type ), - evt = event.type; - - if ( $btn.length ) { - theme = $btn.attr( "data-" + $.mobile.ns + "theme" ); - - if ( evt === "vmousedown" ) { - if ( isTouchEvent ) { - // Use a short delay to determine if the user is scrolling before highlighting - hov = setTimeout( function() { - $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); - }, hoverDelay ); - } else { - $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-down-" + theme ); - } - } else if ( evt === "vmousecancel" || evt === "vmouseup" ) { - $btn.removeClass( "ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); - } else if ( evt === "vmouseover" || evt === "focus" ) { - if ( isTouchEvent ) { - // Use a short delay to determine if the user is scrolling before highlighting - foc = setTimeout( function() { - $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); - }, hoverDelay ); - } else { - $btn.removeClass( "ui-btn-up-" + theme ).addClass( "ui-btn-hover-" + theme ); - } - } else if ( evt === "vmouseout" || evt === "blur" || evt === "scrollstart" ) { - $btn.removeClass( "ui-btn-hover-" + theme + " ui-btn-down-" + theme ).addClass( "ui-btn-up-" + theme ); - if ( hov ) { - clearTimeout( hov ); - } - if ( foc ) { - clearTimeout( foc ); - } - } - } - }, - "focusin focus": function( event ) { - $( closestEnabledButton( event.target ) ).addClass( $.mobile.focusClass ); - }, - "focusout blur": function( event ) { - $( closestEnabledButton( event.target ) ).removeClass( $.mobile.focusClass ); - } - }); - - attachEvents = null; -}; - -//links in bars, or those with data-role become buttons -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - - $( ":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a", e.target ) - .jqmEnhanceable() - .not( "button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')" ) - .buttonMarkup(); -}); - -})( jQuery ); - - -(function( $, undefined ) { - -$.widget( "mobile.collapsible", $.mobile.widget, { - options: { - expandCueText: " click to expand contents", - collapseCueText: " click to collapse contents", - collapsed: true, - heading: "h1,h2,h3,h4,h5,h6,legend", - theme: null, - contentTheme: null, - inset: true, - mini: false, - initSelector: ":jqmData(role='collapsible')" - }, - _create: function() { - - var $el = this.element, - o = this.options, - collapsible = $el.addClass( "ui-collapsible" ), - collapsibleHeading = $el.children( o.heading ).first(), - collapsedIcon = $el.jqmData( "collapsed-icon" ) || o.collapsedIcon, - expandedIcon = $el.jqmData( "expanded-icon" ) || o.expandedIcon, - collapsibleContent = collapsible.wrapInner( "
" ).children( ".ui-collapsible-content" ), - collapsibleSet = $el.closest( ":jqmData(role='collapsible-set')" ).addClass( "ui-collapsible-set" ); - - // Replace collapsibleHeading if it's a legend - if ( collapsibleHeading.is( "legend" ) ) { - collapsibleHeading = $( "
"+ collapsibleHeading.html() +"
" ).insertBefore( collapsibleHeading ); - collapsibleHeading.next().remove(); - } - - // If we are in a collapsible set - if ( collapsibleSet.length ) { - // Inherit the theme from collapsible-set - if ( !o.theme ) { - o.theme = collapsibleSet.jqmData( "theme" ) || $.mobile.getInheritedTheme( collapsibleSet, "c" ); - } - // Inherit the content-theme from collapsible-set - if ( !o.contentTheme ) { - o.contentTheme = collapsibleSet.jqmData( "content-theme" ); - } - - // Get the preference for collapsed icon in the set - if ( !o.collapsedIcon ) { - o.collapsedIcon = collapsibleSet.jqmData( "collapsed-icon" ); - } - // Get the preference for expanded icon in the set - if ( !o.expandedIcon ) { - o.expandedIcon = collapsibleSet.jqmData( "expanded-icon" ); - } - // Gets the preference icon position in the set - if ( !o.iconPos ) { - o.iconPos = collapsibleSet.jqmData( "iconpos" ); - } - // Inherit the preference for inset from collapsible-set or set the default value to ensure equalty within a set - if ( collapsibleSet.jqmData( "inset" ) !== undefined ) { - o.inset = collapsibleSet.jqmData( "inset" ); - } else { - o.inset = true; - } - // Gets the preference for mini in the set - if ( !o.mini ) { - o.mini = collapsibleSet.jqmData( "mini" ); - } - } else { - // get inherited theme if not a set and no theme has been set - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( $el, "c" ); - } - } - - if ( !!o.inset ) { - collapsible.addClass( "ui-collapsible-inset" ); - } - - collapsibleContent.addClass( ( o.contentTheme ) ? ( "ui-body-" + o.contentTheme ) : ""); - - collapsedIcon = $el.jqmData( "collapsed-icon" ) || o.collapsedIcon || "plus"; - expandedIcon = $el.jqmData( "expanded-icon" ) || o.expandedIcon || "minus"; - - collapsibleHeading - //drop heading in before content - .insertBefore( collapsibleContent ) - //modify markup & attributes - .addClass( "ui-collapsible-heading" ) - .append( "" ) - .wrapInner( "" ) - .find( "a" ) - .first() - .buttonMarkup({ - shadow: false, - corners: false, - iconpos: $el.jqmData( "iconpos" ) || o.iconPos || "left", - icon: collapsedIcon, - mini: o.mini, - theme: o.theme - }); - - if ( !!o.inset ) { - collapsibleHeading - .find( "a" ).first().add( ".ui-btn-inner", $el ) - .addClass( "ui-corner-top ui-corner-bottom" ); - } - - //events - collapsible - .bind( "expand collapse", function( event ) { - if ( !event.isDefaultPrevented() ) { - var $this = $( this ), - isCollapse = ( event.type === "collapse" ), - contentTheme = o.contentTheme; - - event.preventDefault(); - - collapsibleHeading - .toggleClass( "ui-collapsible-heading-collapsed", isCollapse ) - .find( ".ui-collapsible-heading-status" ) - .text( isCollapse ? o.expandCueText : o.collapseCueText ) - .end() - .find( ".ui-icon" ) - .toggleClass( "ui-icon-" + expandedIcon, !isCollapse ) - // logic or cause same icon for expanded/collapsed state would remove the ui-icon-class - .toggleClass( "ui-icon-" + collapsedIcon, ( isCollapse || expandedIcon === collapsedIcon ) ) - .end() - .find( "a" ).first().removeClass( $.mobile.activeBtnClass ); - - $this.toggleClass( "ui-collapsible-collapsed", isCollapse ); - collapsibleContent.toggleClass( "ui-collapsible-content-collapsed", isCollapse ).attr( "aria-hidden", isCollapse ); - - if ( contentTheme && !!o.inset && ( !collapsibleSet.length || collapsible.jqmData( "collapsible-last" ) ) ) { - collapsibleHeading - .find( "a" ).first().add( collapsibleHeading.find( ".ui-btn-inner" ) ) - .toggleClass( "ui-corner-bottom", isCollapse ); - collapsibleContent.toggleClass( "ui-corner-bottom", !isCollapse ); - } - collapsibleContent.trigger( "updatelayout" ); - } - }) - .trigger( o.collapsed ? "collapse" : "expand" ); - - collapsibleHeading - .bind( "tap", function( event ) { - collapsibleHeading.find( "a" ).first().addClass( $.mobile.activeBtnClass ); - }) - .bind( "click", function( event ) { - - var type = collapsibleHeading.is( ".ui-collapsible-heading-collapsed" ) ? "expand" : "collapse"; - - collapsible.trigger( type ); - - event.preventDefault(); - event.stopPropagation(); - }); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.collapsible.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.collapsibleset", $.mobile.widget, { - options: { - initSelector: ":jqmData(role='collapsible-set')" - }, - _create: function() { - var $el = this.element.addClass( "ui-collapsible-set" ), - o = this.options; - - // Inherit the theme from collapsible-set - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( $el, "c" ); - } - // Inherit the content-theme from collapsible-set - if ( !o.contentTheme ) { - o.contentTheme = $el.jqmData( "content-theme" ); - } - - if ( $el.jqmData( "inset" ) !== undefined ) { - o.inset = $el.jqmData( "inset" ); - } - o.inset = o.inset !== undefined ? o.inset : true; - - // Initialize the collapsible set if it's not already initialized - if ( !$el.jqmData( "collapsiblebound" ) ) { - $el - .jqmData( "collapsiblebound", true ) - .bind( "expand collapse", function( event ) { - var isCollapse = ( event.type === "collapse" ), - collapsible = $( event.target ).closest( ".ui-collapsible" ), - widget = collapsible.data( "collapsible" ); - if ( collapsible.jqmData( "collapsible-last" ) && !!o.inset ) { - collapsible.find( ".ui-collapsible-heading" ).first() - .find( "a" ).first() - .toggleClass( "ui-corner-bottom", isCollapse ) - .find( ".ui-btn-inner" ) - .toggleClass( "ui-corner-bottom", isCollapse ); - collapsible.find( ".ui-collapsible-content" ).toggleClass( "ui-corner-bottom", !isCollapse ); - } - }) - .bind( "expand", function( event ) { - var closestCollapsible = $( event.target ) - .closest( ".ui-collapsible" ); - if ( closestCollapsible.parent().is( ":jqmData(role='collapsible-set')" ) ) { - closestCollapsible - .siblings( ".ui-collapsible" ) - .trigger( "collapse" ); - } - }); - } - }, - - _init: function() { - var $el = this.element, - collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" ), - expanded = collapsiblesInSet.filter( ":jqmData(collapsed='false')" ); - this.refresh(); - - // Because the corners are handled by the collapsible itself and the default state is collapsed - // That was causing https://github.com/jquery/jquery-mobile/issues/4116 - expanded.trigger( "expand" ); - }, - - refresh: function() { - var $el = this.element, - o = this.options, - collapsiblesInSet = $el.children( ":jqmData(role='collapsible')" ); - - $.mobile.collapsible.prototype.enhance( collapsiblesInSet.not( ".ui-collapsible" ) ); - - // clean up borders - if ( !!o.inset ) { - collapsiblesInSet.each(function() { - $( this ).jqmRemoveData( "collapsible-last" ) - .find( ".ui-collapsible-heading" ) - .find( "a" ).first() - .removeClass( "ui-corner-top ui-corner-bottom" ) - .find( ".ui-btn-inner" ) - .removeClass( "ui-corner-top ui-corner-bottom" ); - }); - - collapsiblesInSet.first() - .find( "a" ) - .first() - .addClass( "ui-corner-top" ) - .find( ".ui-btn-inner" ) - .addClass( "ui-corner-top" ); - - collapsiblesInSet.last() - .jqmData( "collapsible-last", true ) - .find( "a" ) - .first() - .addClass( "ui-corner-bottom" ) - .find( ".ui-btn-inner" ) - .addClass( "ui-corner-bottom" ); - } - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.collapsibleset.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.navbar", $.mobile.widget, { - options: { - iconpos: "top", - grid: null, - initSelector: ":jqmData(role='navbar')" - }, - - _create: function() { - - var $navbar = this.element, - $navbtns = $navbar.find( "a" ), - iconpos = $navbtns.filter( ":jqmData(icon)" ).length ? - this.options.iconpos : undefined; - - $navbar.addClass( "ui-navbar ui-mini" ) - .attr( "role", "navigation" ) - .find( "ul" ) - .jqmEnhanceable() - .grid({ grid: this.options.grid }); - - $navbtns.buttonMarkup({ - corners: false, - shadow: false, - inline: true, - iconpos: iconpos - }); - - $navbar.delegate( "a", "vclick", function( event ) { - if ( !$(event.target).hasClass( "ui-disabled" ) ) { - $navbtns.removeClass( $.mobile.activeBtnClass ); - $( this ).addClass( $.mobile.activeBtnClass ); - } - }); - - // Buttons in the navbar with ui-state-persist class should regain their active state before page show - $navbar.closest( ".ui-page" ).bind( "pagebeforeshow", function() { - $navbtns.filter( ".ui-state-persist" ).addClass( $.mobile.activeBtnClass ); - }); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.navbar.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -//Keeps track of the number of lists per page UID -//This allows support for multiple nested list in the same page -//https://github.com/jquery/jquery-mobile/issues/1617 -var listCountPerPage = {}; - -$.widget( "mobile.listview", $.mobile.widget, { - - options: { - theme: null, - countTheme: "c", - headerTheme: "b", - dividerTheme: "b", - splitIcon: "arrow-r", - splitTheme: "b", - inset: false, - initSelector: ":jqmData(role='listview')" - }, - - _create: function() { - var t = this, - listviewClasses = ""; - - listviewClasses += t.options.inset ? " ui-listview-inset ui-corner-all ui-shadow " : ""; - - // create listview markup - t.element.addClass(function( i, orig ) { - return orig + " ui-listview " + listviewClasses; - }); - - t.refresh( true ); - }, - - _removeCorners: function( li, which ) { - var top = "ui-corner-top ui-corner-tr ui-corner-tl", - bot = "ui-corner-bottom ui-corner-br ui-corner-bl"; - - li = li.add( li.find( ".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb" ) ); - - if ( which === "top" ) { - li.removeClass( top ); - } else if ( which === "bottom" ) { - li.removeClass( bot ); - } else { - li.removeClass( top + " " + bot ); - } - }, - - _refreshCorners: function( create ) { - var $li, - $visibleli, - $topli, - $bottomli; - - $li = this.element.children( "li" ); - // At create time and when autodividers calls refresh the li are not visible yet so we need to rely on .ui-screen-hidden - $visibleli = create || $li.filter( ":visible" ).length === 0 ? $li.not( ".ui-screen-hidden" ) : $li.filter( ":visible" ); - - // ui-li-last is used for setting border-bottom on the last li - $li.filter( ".ui-li-last" ).removeClass( "ui-li-last" ); - - if ( this.options.inset ) { - this._removeCorners( $li ); - - // Select the first visible li element - $topli = $visibleli.first() - .addClass( "ui-corner-top" ); - - $topli.add( $topli.find( ".ui-btn-inner" ) - .not( ".ui-li-link-alt span:first-child" ) ) - .addClass( "ui-corner-top" ) - .end() - .find( ".ui-li-link-alt, .ui-li-link-alt span:first-child" ) - .addClass( "ui-corner-tr" ) - .end() - .find( ".ui-li-thumb" ) - .not( ".ui-li-icon" ) - .addClass( "ui-corner-tl" ); - - // Select the last visible li element - $bottomli = $visibleli.last() - .addClass( "ui-corner-bottom ui-li-last" ); - - $bottomli.add( $bottomli.find( ".ui-btn-inner" ) ) - .find( ".ui-li-link-alt" ) - .addClass( "ui-corner-br" ) - .end() - .find( ".ui-li-thumb" ) - .not( ".ui-li-icon" ) - .addClass( "ui-corner-bl" ); - } else { - $visibleli.last().addClass( "ui-li-last" ); - } - if ( !create ) { - this.element.trigger( "updatelayout" ); - } - }, - - // This is a generic utility method for finding the first - // node with a given nodeName. It uses basic DOM traversal - // to be fast and is meant to be a substitute for simple - // $.fn.closest() and $.fn.children() calls on a single - // element. Note that callers must pass both the lowerCase - // and upperCase version of the nodeName they are looking for. - // The main reason for this is that this function will be - // called many times and we want to avoid having to lowercase - // the nodeName from the element every time to ensure we have - // a match. Note that this function lives here for now, but may - // be moved into $.mobile if other components need a similar method. - _findFirstElementByTagName: function( ele, nextProp, lcName, ucName ) { - var dict = {}; - dict[ lcName ] = dict[ ucName ] = true; - while ( ele ) { - if ( dict[ ele.nodeName ] ) { - return ele; - } - ele = ele[ nextProp ]; - } - return null; - }, - _getChildrenByTagName: function( ele, lcName, ucName ) { - var results = [], - dict = {}; - dict[ lcName ] = dict[ ucName ] = true; - ele = ele.firstChild; - while ( ele ) { - if ( dict[ ele.nodeName ] ) { - results.push( ele ); - } - ele = ele.nextSibling; - } - return $( results ); - }, - - _addThumbClasses: function( containers ) { - var i, img, len = containers.length; - for ( i = 0; i < len; i++ ) { - img = $( this._findFirstElementByTagName( containers[ i ].firstChild, "nextSibling", "img", "IMG" ) ); - if ( img.length ) { - img.addClass( "ui-li-thumb" ); - $( this._findFirstElementByTagName( img[ 0 ].parentNode, "parentNode", "li", "LI" ) ).addClass( img.is( ".ui-li-icon" ) ? "ui-li-has-icon" : "ui-li-has-thumb" ); - } - } - }, - - refresh: function( create ) { - this.parentPage = this.element.closest( ".ui-page" ); - this._createSubPages(); - - var o = this.options, - $list = this.element, - self = this, - dividertheme = $list.jqmData( "dividertheme" ) || o.dividerTheme, - listsplittheme = $list.jqmData( "splittheme" ), - listspliticon = $list.jqmData( "spliticon" ), - li = this._getChildrenByTagName( $list[ 0 ], "li", "LI" ), - ol = !!$.nodeName( $list[ 0 ], "ol" ), - jsCount = !$.support.cssPseudoElement, - start = $list.attr( "start" ), - itemClassDict = {}, - item, itemClass, itemTheme, - a, last, splittheme, counter, startCount, newStartCount, countParent, icon, imgParents, img, linkIcon; - - if ( ol && jsCount ) { - $list.find( ".ui-li-dec" ).remove(); - } - - if ( ol ) { - // Check if a start attribute has been set while taking a value of 0 into account - if ( start || start === 0 ) { - if ( !jsCount ) { - startCount = parseFloat( start ) - 1; - $list.css( "counter-reset", "listnumbering " + startCount ); - } else { - counter = parseFloat( start ); - } - } else if ( jsCount ) { - counter = 1; - } - } - - if ( !o.theme ) { - o.theme = $.mobile.getInheritedTheme( this.element, "c" ); - } - - for ( var pos = 0, numli = li.length; pos < numli; pos++ ) { - item = li.eq( pos ); - itemClass = "ui-li"; - - // If we're creating the element, we update it regardless - if ( create || !item.hasClass( "ui-li" ) ) { - itemTheme = item.jqmData( "theme" ) || o.theme; - a = this._getChildrenByTagName( item[ 0 ], "a", "A" ); - var isDivider = ( item.jqmData( "role" ) === "list-divider" ); - - if ( a.length && !isDivider ) { - icon = item.jqmData( "icon" ); - - item.buttonMarkup({ - wrapperEls: "div", - shadow: false, - corners: false, - iconpos: "right", - icon: a.length > 1 || icon === false ? false : icon || "arrow-r", - theme: itemTheme - }); - - if ( ( icon !== false ) && ( a.length === 1 ) ) { - item.addClass( "ui-li-has-arrow" ); - } - - a.first().removeClass( "ui-link" ).addClass( "ui-link-inherit" ); - - if ( a.length > 1 ) { - itemClass += " ui-li-has-alt"; - - last = a.last(); - splittheme = listsplittheme || last.jqmData( "theme" ) || o.splitTheme; - linkIcon = last.jqmData( "icon" ); - - last.appendTo( item ) - .attr( "title", last.getEncodedText() ) - .addClass( "ui-li-link-alt" ) - .empty() - .buttonMarkup({ - shadow: false, - corners: false, - theme: itemTheme, - icon: false, - iconpos: "notext" - }) - .find( ".ui-btn-inner" ) - .append( - $( document.createElement( "span" ) ).buttonMarkup({ - shadow: true, - corners: true, - theme: splittheme, - iconpos: "notext", - // link icon overrides list item icon overrides ul element overrides options - icon: linkIcon || icon || listspliticon || o.splitIcon - }) - ); - } - } else if ( isDivider ) { - - itemClass += " ui-li-divider ui-bar-" + dividertheme; - item.attr( "role", "heading" ); - - if ( ol ) { - //reset counter when a divider heading is encountered - if ( start || start === 0 ) { - if ( !jsCount ) { - newStartCount = parseFloat( start ) - 1; - item.css( "counter-reset", "listnumbering " + newStartCount ); - } else { - counter = parseFloat( start ); - } - } else if ( jsCount ) { - counter = 1; - } - } - - } else { - itemClass += " ui-li-static ui-btn-up-" + itemTheme; - } - } - - if ( ol && jsCount && itemClass.indexOf( "ui-li-divider" ) < 0 ) { - countParent = itemClass.indexOf( "ui-li-static" ) > 0 ? item : item.find( ".ui-link-inherit" ); - - countParent.addClass( "ui-li-jsnumbering" ) - .prepend( "" + ( counter++ ) + ". " ); - } - - // Instead of setting item class directly on the list item and its - // btn-inner at this point in time, push the item into a dictionary - // that tells us what class to set on it so we can do this after this - // processing loop is finished. - - if ( !itemClassDict[ itemClass ] ) { - itemClassDict[ itemClass ] = []; - } - - itemClassDict[ itemClass ].push( item[ 0 ] ); - } - - // Set the appropriate listview item classes on each list item - // and their btn-inner elements. The main reason we didn't do this - // in the for-loop above is because we can eliminate per-item function overhead - // by calling addClass() and children() once or twice afterwards. This - // can give us a significant boost on platforms like WP7.5. - - for ( itemClass in itemClassDict ) { - $( itemClassDict[ itemClass ] ).addClass( itemClass ).children( ".ui-btn-inner" ).addClass( itemClass ); - } - - $list.find( "h1, h2, h3, h4, h5, h6" ).addClass( "ui-li-heading" ) - .end() - - .find( "p, dl" ).addClass( "ui-li-desc" ) - .end() - - .find( ".ui-li-aside" ).each(function() { - var $this = $( this ); - $this.prependTo( $this.parent() ); //shift aside to front for css float - }) - .end() - - .find( ".ui-li-count" ).each(function() { - $( this ).closest( "li" ).addClass( "ui-li-has-count" ); - }).addClass( "ui-btn-up-" + ( $list.jqmData( "counttheme" ) || this.options.countTheme) + " ui-btn-corner-all" ); - - // The idea here is to look at the first image in the list item - // itself, and any .ui-link-inherit element it may contain, so we - // can place the appropriate classes on the image and list item. - // Note that we used to use something like: - // - // li.find(">img:eq(0), .ui-link-inherit>img:eq(0)").each( ... ); - // - // But executing a find() like that on Windows Phone 7.5 took a - // really long time. Walking things manually with the code below - // allows the 400 listview item page to load in about 3 seconds as - // opposed to 30 seconds. - - this._addThumbClasses( li ); - this._addThumbClasses( $list.find( ".ui-link-inherit" ) ); - - this._refreshCorners( create ); - - // autodividers binds to this to redraw dividers after the listview refresh - this._trigger( "afterrefresh" ); - }, - - //create a string for ID/subpage url creation - _idStringEscape: function( str ) { - return str.replace(/[^a-zA-Z0-9]/g, '-'); - }, - - _createSubPages: function() { - var parentList = this.element, - parentPage = parentList.closest( ".ui-page" ), - parentUrl = parentPage.jqmData( "url" ), - parentId = parentUrl || parentPage[ 0 ][ $.expando ], - parentListId = parentList.attr( "id" ), - o = this.options, - dns = "data-" + $.mobile.ns, - self = this, - persistentFooterID = parentPage.find( ":jqmData(role='footer')" ).jqmData( "id" ), - hasSubPages; - - if ( typeof listCountPerPage[ parentId ] === "undefined" ) { - listCountPerPage[ parentId ] = -1; - } - - parentListId = parentListId || ++listCountPerPage[ parentId ]; - - $( parentList.find( "li>ul, li>ol" ).toArray().reverse() ).each(function( i ) { - var self = this, - list = $( this ), - listId = list.attr( "id" ) || parentListId + "-" + i, - parent = list.parent(), - nodeElsFull = $( list.prevAll().toArray().reverse() ), - nodeEls = nodeElsFull.length ? nodeElsFull : $( "" + $.trim(parent.contents()[ 0 ].nodeValue) + "" ), - title = nodeEls.first().getEncodedText(),//url limits to first 30 chars of text - id = ( parentUrl || "" ) + "&" + $.mobile.subPageUrlKey + "=" + listId, - theme = list.jqmData( "theme" ) || o.theme, - countTheme = list.jqmData( "counttheme" ) || parentList.jqmData( "counttheme" ) || o.countTheme, - newPage, anchor; - - //define hasSubPages for use in later removal - hasSubPages = true; - - newPage = list.detach() - .wrap( "
" ) - .parent() - .before( "
" + title + "
" ) - .after( persistentFooterID ? $( "
" ) : "" ) - .parent() - .appendTo( $.mobile.pageContainer ); - - newPage.page(); - - anchor = parent.find( 'a:first' ); - - if ( !anchor.length ) { - anchor = $( "" ).html( nodeEls || title ).prependTo( parent.empty() ); - } - - anchor.attr( "href", "#" + id ); - - }).listview(); - - // on pagehide, remove any nested pages along with the parent page, as long as they aren't active - // and aren't embedded - if ( hasSubPages && - parentPage.is( ":jqmData(external-page='true')" ) && - parentPage.data( "page" ).options.domCache === false ) { - - var newRemove = function( e, ui ) { - var nextPage = ui.nextPage, npURL, - prEvent = new $.Event( "pageremove" ); - - if ( ui.nextPage ) { - npURL = nextPage.jqmData( "url" ); - if ( npURL.indexOf( parentUrl + "&" + $.mobile.subPageUrlKey ) !== 0 ) { - self.childPages().remove(); - parentPage.trigger( prEvent ); - if ( !prEvent.isDefaultPrevented() ) { - parentPage.removeWithDependents(); - } - } - } - }; - - // unbind the original page remove and replace with our specialized version - parentPage - .unbind( "pagehide.remove" ) - .bind( "pagehide.remove", newRemove); - } - }, - - // TODO sort out a better way to track sub pages of the listview this is brittle - childPages: function() { - var parentUrl = this.parentPage.jqmData( "url" ); - - return $( ":jqmData(url^='"+ parentUrl + "&" + $.mobile.subPageUrlKey + "')" ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.listview.prototype.enhanceWithin( e.target ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.listview.prototype.options.autodividers = false; -$.mobile.listview.prototype.options.autodividersSelector = function( elt ) { - // look for the text in the given element - var text = elt.text() || null; - - if ( !text ) { - return null; - } - - // create the text for the divider (first uppercased letter) - text = text.slice( 0, 1 ).toUpperCase(); - - return text; -}; - -$( document ).delegate( "ul,ol", "listviewcreate", function() { - - var list = $( this ), - listview = list.data( "listview" ); - - if ( !listview || !listview.options.autodividers ) { - return; - } - - var replaceDividers = function () { - list.find( "li:jqmData(role='list-divider')" ).remove(); - - var lis = list.find( 'li' ), - lastDividerText = null, li, dividerText; - - for ( var i = 0; i < lis.length ; i++ ) { - li = lis[i]; - dividerText = listview.options.autodividersSelector( $( li ) ); - - if ( dividerText && lastDividerText !== dividerText ) { - var divider = document.createElement( 'li' ); - divider.appendChild( document.createTextNode( dividerText ) ); - divider.setAttribute( 'data-' + $.mobile.ns + 'role', 'list-divider' ); - li.parentNode.insertBefore( divider, li ); - } - - lastDividerText = dividerText; - } - }; - - var afterListviewRefresh = function () { - list.unbind( 'listviewafterrefresh', afterListviewRefresh ); - replaceDividers(); - listview.refresh(); - list.bind( 'listviewafterrefresh', afterListviewRefresh ); - }; - - afterListviewRefresh(); -}); - -})( jQuery ); - -/* -* "checkboxradio" plugin -*/ - -(function( $, undefined ) { - -$.widget( "mobile.checkboxradio", $.mobile.widget, { - options: { - theme: null, - initSelector: "input[type='checkbox'],input[type='radio']" - }, - _create: function() { - var self = this, - input = this.element, - inheritAttr = function( input, dataAttr ) { - return input.jqmData( dataAttr ) || input.closest( "form, fieldset" ).jqmData( dataAttr ); - }, - // NOTE: Windows Phone could not find the label through a selector - // filter works though. - parentLabel = $( input ).closest( "label" ), - label = parentLabel.length ? parentLabel : $( input ).closest( "form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')" ).find( "label" ).filter( "[for='" + input[0].id + "']" ).first(), - inputtype = input[0].type, - mini = inheritAttr( input, "mini" ), - checkedState = inputtype + "-on", - uncheckedState = inputtype + "-off", - icon = input.parents( ":jqmData(type='horizontal')" ).length ? undefined : uncheckedState, - iconpos = inheritAttr( input, "iconpos" ), - activeBtn = icon ? "" : " " + $.mobile.activeBtnClass, - checkedClass = "ui-" + checkedState + activeBtn, - uncheckedClass = "ui-" + uncheckedState, - checkedicon = "ui-icon-" + checkedState, - uncheckedicon = "ui-icon-" + uncheckedState; - - if ( inputtype !== "checkbox" && inputtype !== "radio" ) { - return; - } - - // Expose for other methods - $.extend( this, { - label: label, - inputtype: inputtype, - checkedClass: checkedClass, - uncheckedClass: uncheckedClass, - checkedicon: checkedicon, - uncheckedicon: uncheckedicon - }); - - // If there's no selected theme check the data attr - if ( !this.options.theme ) { - this.options.theme = $.mobile.getInheritedTheme( this.element, "c" ); - } - - label.buttonMarkup({ - theme: this.options.theme, - icon: icon, - shadow: false, - mini: mini, - iconpos: iconpos - }); - - // Wrap the input + label in a div - var wrapper = document.createElement('div'); - wrapper.className = 'ui-' + inputtype; - - input.add( label ).wrapAll( wrapper ); - - label.bind({ - vmouseover: function( event ) { - if ( $( this ).parent().is( ".ui-disabled" ) ) { - event.stopPropagation(); - } - }, - - vclick: function( event ) { - if ( input.is( ":disabled" ) ) { - event.preventDefault(); - return; - } - - self._cacheVals(); - - input.prop( "checked", inputtype === "radio" && true || !input.prop( "checked" ) ); - - // trigger click handler's bound directly to the input as a substitute for - // how label clicks behave normally in the browsers - // TODO: it would be nice to let the browser's handle the clicks and pass them - // through to the associate input. we can swallow that click at the parent - // wrapper element level - input.triggerHandler( 'click' ); - - // Input set for common radio buttons will contain all the radio - // buttons, but will not for checkboxes. clearing the checked status - // of other radios ensures the active button state is applied properly - self._getInputSet().not( input ).prop( "checked", false ); - - self._updateAll(); - return false; - } - }); - - input - .bind({ - vmousedown: function() { - self._cacheVals(); - }, - - vclick: function() { - var $this = $( this ); - - // Adds checked attribute to checked input when keyboard is used - if ( $this.is( ":checked" ) ) { - - $this.prop( "checked", true); - self._getInputSet().not( $this ).prop( "checked", false ); - } else { - - $this.prop( "checked", false ); - } - - self._updateAll(); - }, - - focus: function() { - label.addClass( $.mobile.focusClass ); - }, - - blur: function() { - label.removeClass( $.mobile.focusClass ); - } - }); - - this.refresh(); - }, - - _cacheVals: function() { - this._getInputSet().each(function() { - $( this ).jqmData( "cacheVal", this.checked ); - }); - }, - - //returns either a set of radios with the same name attribute, or a single checkbox - _getInputSet: function() { - if ( this.inputtype === "checkbox" ) { - return this.element; - } - - return this.element.closest( "form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')" ) - .find( "input[name='" + this.element[0].name + "'][type='" + this.inputtype + "']" ); - }, - - _updateAll: function() { - var self = this; - - this._getInputSet().each(function() { - var $this = $( this ); - - if ( this.checked || self.inputtype === "checkbox" ) { - $this.trigger( "change" ); - } - }) - .checkboxradio( "refresh" ); - }, - - refresh: function() { - var input = this.element[0], - label = this.label, - icon = label.find( ".ui-icon" ); - - if ( input.checked ) { - label.addClass( this.checkedClass ).removeClass( this.uncheckedClass ); - icon.addClass( this.checkedicon ).removeClass( this.uncheckedicon ); - } else { - label.removeClass( this.checkedClass ).addClass( this.uncheckedClass ); - icon.removeClass( this.checkedicon ).addClass( this.uncheckedicon ); - } - - if ( input.disabled ) { - this.disable(); - } else { - this.enable(); - } - }, - - disable: function() { - this.element.prop( "disabled", true ).parent().addClass( "ui-disabled" ); - }, - - enable: function() { - this.element.prop( "disabled", false ).parent().removeClass( "ui-disabled" ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.checkboxradio.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.button", $.mobile.widget, { - options: { - theme: null, - icon: null, - iconpos: null, - corners: true, - shadow: true, - iconshadow: true, - initSelector: "button, [type='button'], [type='submit'], [type='reset']" - }, - _create: function() { - var $el = this.element, - $button, - o = this.options, - type, - name, - inline = o.inline || $el.jqmData( "inline" ), - mini = o.mini || $el.jqmData( "mini" ), - classes = "", - $buttonPlaceholder; - - // if this is a link, check if it's been enhanced and, if not, use the right function - if ( $el[ 0 ].tagName === "A" ) { - if ( !$el.hasClass( "ui-btn" ) ) { - $el.buttonMarkup(); - } - - return; - } - - // get the inherited theme - // TODO centralize for all widgets - if ( !this.options.theme ) { - this.options.theme = $.mobile.getInheritedTheme( this.element, "c" ); - } - - // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if ( $el[0].className.length ) { - classes = $el[0].className; - } */ - if ( !!~$el[0].className.indexOf( "ui-btn-left" ) ) { - classes = "ui-btn-left"; - } - - if ( !!~$el[0].className.indexOf( "ui-btn-right" ) ) { - classes = "ui-btn-right"; - } - - if ( $el.attr( "type" ) === "submit" || $el.attr( "type" ) === "reset" ) { - classes ? classes += " ui-submit" : classes = "ui-submit"; - } - $( "label[for='" + $el.attr( "id" ) + "']" ).addClass( "ui-submit" ); - - // Add ARIA role - this.button = $( "
" ) - [ $el.html() ? "html" : "text" ]( $el.html() || $el.val() ) - .insertBefore( $el ) - .buttonMarkup({ - theme: o.theme, - icon: o.icon, - iconpos: o.iconpos, - inline: inline, - corners: o.corners, - shadow: o.shadow, - iconshadow: o.iconshadow, - mini: mini - }) - .addClass( classes ) - .append( $el.addClass( "ui-btn-hidden" ) ); - - $button = this.button; - type = $el.attr( "type" ); - name = $el.attr( "name" ); - - // Add hidden input during submit if input type="submit" has a name. - if ( type !== "button" && type !== "reset" && name ) { - $el.bind( "vclick", function() { - // Add hidden input if it doesn't already exist. - if ( $buttonPlaceholder === undefined ) { - $buttonPlaceholder = $( "", { - type: "hidden", - name: $el.attr( "name" ), - value: $el.attr( "value" ) - }).insertBefore( $el ); - - // Bind to doc to remove after submit handling - $( document ).one( "submit", function() { - $buttonPlaceholder.remove(); - - // reset the local var so that the hidden input - // will be re-added on subsequent clicks - $buttonPlaceholder = undefined; - }); - } - }); - } - - $el.bind({ - focus: function() { - $button.addClass( $.mobile.focusClass ); - }, - - blur: function() { - $button.removeClass( $.mobile.focusClass ); - } - }); - - this.refresh(); - }, - - enable: function() { - this.element.attr( "disabled", false ); - this.button.removeClass( "ui-disabled" ).attr( "aria-disabled", false ); - return this._setOption( "disabled", false ); - }, - - disable: function() { - this.element.attr( "disabled", true ); - this.button.addClass( "ui-disabled" ).attr( "aria-disabled", true ); - return this._setOption( "disabled", true ); - }, - - refresh: function() { - var $el = this.element; - - if ( $el.prop("disabled") ) { - this.disable(); - } else { - this.enable(); - } - - // Grab the button's text element from its implementation-independent data item - $( this.button.data( 'buttonElements' ).text )[ $el.html() ? "html" : "text" ]( $el.html() || $el.val() ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.button.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.fn.controlgroup = function( options ) { - function flipClasses( els, flCorners ) { - els.removeClass( "ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow" ) - .eq( 0 ).addClass( flCorners[ 0 ] ) - .end() - .last().addClass( flCorners[ 1 ] ).addClass( "ui-controlgroup-last" ); - } - - return this.each(function() { - var $el = $( this ), - o = $.extend({ - direction: $el.jqmData( "type" ) || "vertical", - shadow: false, - excludeInvisible: true, - mini: $el.jqmData( "mini" ) - }, options ), - grouplegend = $el.children( "legend" ), - groupheading = $el.children( ".ui-controlgroup-label" ), - groupcontrols = $el.children( ".ui-controlgroup-controls" ), - flCorners = o.direction === "horizontal" ? [ "ui-corner-left", "ui-corner-right" ] : [ "ui-corner-top", "ui-corner-bottom" ], - type = $el.find( "input" ).first().attr( "type" ); - - // First unwrap the controls if the controlgroup was already enhanced - if ( groupcontrols.length ) { - groupcontrols.contents().unwrap(); - } - $el.wrapInner( "
" ); - - if ( grouplegend.length ) { - // Replace legend with more stylable replacement div - $( "
" + grouplegend.html() + "
" ).insertBefore( $el.children( 0 ) ); - grouplegend.remove(); - } else if ( groupheading.length ) { - // Just move the heading if the controlgroup was already enhanced - $el.prepend( groupheading ); - } - - $el.addClass( "ui-corner-all ui-controlgroup ui-controlgroup-" + o.direction ); - - flipClasses( $el.find( ".ui-btn" + ( o.excludeInvisible ? ":visible" : "" ) ).not( '.ui-slider-handle' ), flCorners ); - flipClasses( $el.find( ".ui-btn-inner" ), flCorners ); - - if ( o.shadow ) { - $el.addClass( "ui-shadow" ); - } - - if ( o.mini ) { - $el.addClass( "ui-mini" ); - } - - }); -}; - -// The pagecreate handler for controlgroup is in jquery.mobile.init because of the soft-dependency on the wrapped widgets - -})(jQuery); - -(function( $, undefined ) { - -$( document ).bind( "pagecreate create", function( e ) { - - //links within content areas, tests included with page - $( e.target ) - .find( "a" ) - .jqmEnhanceable() - .not( ".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')" ) - .addClass( "ui-link" ); - -}); - -})( jQuery ); - - -(function( $, undefined ) { - - function fitSegmentInsideSegment( winSize, segSize, offset, desired ) { - var ret = desired; - - if ( winSize < segSize ) { - // Center segment if it's bigger than the window - ret = offset + ( winSize - segSize ) / 2; - } else { - // Otherwise center it at the desired coordinate while keeping it completely inside the window - ret = Math.min( Math.max( offset, desired - segSize / 2 ), offset + winSize - segSize ); - } - - return ret; - } - - function windowCoords() { - var $win = $( window ); - - return { - x: $win.scrollLeft(), - y: $win.scrollTop(), - cx: ( window.innerWidth || $win.width() ), - cy: ( window.innerHeight || $win.height() ) - }; - } - - $.widget( "mobile.popup", $.mobile.widget, { - options: { - theme: null, - overlayTheme: null, - shadow: true, - corners: true, - transition: "none", - positionTo: "origin", - tolerance: null, - initSelector: ":jqmData(role='popup')", - closeLinkSelector: "a:jqmData(rel='back')", - closeLinkEvents: "click.popup", - navigateEvents: "navigate.popup", - closeEvents: "navigate.popup pagebeforechange.popup", - - // NOTE Windows Phone 7 has a scroll position caching issue that - // requires us to disable popup history management by default - // https://github.com/jquery/jquery-mobile/issues/4784 - // - // NOTE this option is modified in _create! - history: !$.mobile.browser.ie - }, - - _eatEventAndClose: function( e ) { - e.preventDefault(); - e.stopImmediatePropagation(); - this.close(); - return false; - }, - - // Make sure the screen size is increased beyond the page height if the popup's causes the document to increase in height - _resizeScreen: function() { - var popupHeight = this._ui.container.outerHeight( true ); - - this._ui.screen.removeAttr( "style" ); - if ( popupHeight > this._ui.screen.height() ) { - this._ui.screen.height( popupHeight ); - } - }, - - _handleWindowKeyUp: function( e ) { - if ( this._isOpen && e.keyCode === $.mobile.keyCode.ESCAPE ) { - return this._eatEventAndClose( e ); - } - }, - - _maybeRefreshTimeout: function() { - var winCoords = windowCoords(); - - if ( this._resizeData ) { - if ( winCoords.x === this._resizeData.winCoords.x && - winCoords.y === this._resizeData.winCoords.y && - winCoords.cx === this._resizeData.winCoords.cx && - winCoords.cy === this._resizeData.winCoords.cy ) { - // timeout not refreshed - return false; - } else { - // clear existing timeout - it will be refreshed below - clearTimeout( this._resizeData.timeoutId ); - } - } - - this._resizeData = { - timeoutId: setTimeout( $.proxy( this, "_resizeTimeout" ), 200 ), - winCoords: winCoords - }; - - return true; - }, - - _resizeTimeout: function() { - if ( !this._maybeRefreshTimeout() ) { - // effectively rapid-open the popup while leaving the screen intact - this._trigger( "beforeposition" ); - this._ui.container - .removeClass( "ui-selectmenu-hidden" ) - .offset( this._placementCoords( this._desiredCoords( undefined, undefined, "window" ) ) ); - - this._resizeScreen(); - this._resizeData = null; - this._orientationchangeInProgress = false; - } - }, - - _handleWindowResize: function( e ) { - if ( this._isOpen ) { - this._maybeRefreshTimeout(); - } - }, - - _handleWindowOrientationchange: function( e ) { - - if ( !this._orientationchangeInProgress ) { - // effectively rapid-close the popup while leaving the screen intact - this._ui.container - .addClass( "ui-selectmenu-hidden" ) - .removeAttr( "style" ); - - this._orientationchangeInProgress = true; - } - }, - - _create: function() { - var ui = { - screen: $( "
" ), - placeholder: $( "
" ), - container: $( "
" ) - }, - thisPage = this.element.closest( ".ui-page" ), - myId = this.element.attr( "id" ), - self = this; - - // We need to adjust the history option to be false if there's no AJAX nav. - // We can't do it in the option declarations because those are run before - // it is determined whether there shall be AJAX nav. - this.options.history = this.options.history && $.mobile.ajaxEnabled && $.mobile.hashListeningEnabled; - - if ( thisPage.length === 0 ) { - thisPage = $( "body" ); - } - - // define the container for navigation event bindings - // TODO this would be nice at the the mobile widget level - this.options.container = this.options.container || $.mobile.pageContainer; - - // Apply the proto - thisPage.append( ui.screen ); - ui.container.insertAfter( ui.screen ); - // Leave a placeholder where the element used to be - ui.placeholder.insertAfter( this.element ); - if ( myId ) { - ui.screen.attr( "id", myId + "-screen" ); - ui.container.attr( "id", myId + "-popup" ); - ui.placeholder.html( "" ); - } - ui.container.append( this.element ); - - // Add class to popup element - this.element.addClass( "ui-popup" ); - - // Define instance variables - $.extend( this, { - _page: thisPage, - _ui: ui, - _fallbackTransition: "", - _currentTransition: false, - _prereqs: null, - _isOpen: false, - _tolerance: null, - _resizeData: null, - _orientationchangeInProgress: false, - _globalHandlers: [ - { - src: $( window ), - handler: { - orientationchange: $.proxy( this, "_handleWindowOrientationchange" ), - resize: $.proxy( this, "_handleWindowResize" ), - keyup: $.proxy( this, "_handleWindowKeyUp" ) - } - } - ] - }); - - $.each( this.options, function( key, value ) { - // Cause initial options to be applied by their handler by temporarily setting the option to undefined - // - the handler then sets it to the initial value - self.options[ key ] = undefined; - self._setOption( key, value, true ); - }); - - ui.screen.bind( "vclick", $.proxy( this, "_eatEventAndClose" ) ); - - $.each( this._globalHandlers, function( idx, value ) { - value.src.bind( value.handler ); - }); - }, - - _applyTheme: function( dst, theme, prefix ) { - var classes = ( dst.attr( "class" ) || "").split( " " ), - alreadyAdded = true, - currentTheme = null, - matches, - themeStr = String( theme ); - - while ( classes.length > 0 ) { - currentTheme = classes.pop(); - matches = ( new RegExp( "^ui-" + prefix + "-([a-z])$" ) ).exec( currentTheme ); - if ( matches && matches.length > 1 ) { - currentTheme = matches[ 1 ]; - break; - } else { - currentTheme = null; - } - } - - if ( theme !== currentTheme ) { - dst.removeClass( "ui-" + prefix + "-" + currentTheme ); - if ( ! ( theme === null || theme === "none" ) ) { - dst.addClass( "ui-" + prefix + "-" + themeStr ); - } - } - }, - - _setTheme: function( value ) { - this._applyTheme( this.element, value, "body" ); - }, - - _setOverlayTheme: function( value ) { - this._applyTheme( this._ui.screen, value, "overlay" ); - - if ( this._isOpen ) { - this._ui.screen.addClass( "in" ); - } - }, - - _setShadow: function( value ) { - this.element.toggleClass( "ui-overlay-shadow", value ); - }, - - _setCorners: function( value ) { - this.element.toggleClass( "ui-corner-all", value ); - }, - - _applyTransition: function( value ) { - this._ui.container.removeClass( this._fallbackTransition ); - if ( value && value !== "none" ) { - this._fallbackTransition = $.mobile._maybeDegradeTransition( value ); - this._ui.container.addClass( this._fallbackTransition ); - } - }, - - _setTransition: function( value ) { - if ( !this._currentTransition ) { - this._applyTransition( value ); - } - }, - - _setTolerance: function( value ) { - var tol = { t: 30, r: 15, b: 30, l: 15 }; - - if ( value ) { - var ar = String( value ).split( "," ); - - $.each( ar, function( idx, val ) { ar[ idx ] = parseInt( val, 10 ); } ); - - switch( ar.length ) { - // All values are to be the same - case 1: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = tol.r = tol.b = tol.l = ar[ 0 ]; - } - break; - - // The first value denotes top/bottom tolerance, and the second value denotes left/right tolerance - case 2: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = tol.b = ar[ 0 ]; - } - if ( !isNaN( ar[ 1 ] ) ) { - tol.l = tol.r = ar[ 1 ]; - } - break; - - // The array contains values in the order top, right, bottom, left - case 4: - if ( !isNaN( ar[ 0 ] ) ) { - tol.t = ar[ 0 ]; - } - if ( !isNaN( ar[ 1 ] ) ) { - tol.r = ar[ 1 ]; - } - if ( !isNaN( ar[ 2 ] ) ) { - tol.b = ar[ 2 ]; - } - if ( !isNaN( ar[ 3 ] ) ) { - tol.l = ar[ 3 ]; - } - break; - - default: - break; - } - } - - this._tolerance = tol; - }, - - _setOption: function( key, value ) { - var exclusions, setter = "_set" + key.charAt( 0 ).toUpperCase() + key.slice( 1 ); - - if ( this[ setter ] !== undefined ) { - this[ setter ]( value ); - } - - // TODO REMOVE FOR 1.2.1 by moving them out to a default options object - exclusions = [ - "initSelector", - "closeLinkSelector", - "closeLinkEvents", - "navigateEvents", - "closeEvents", - "history", - "container" - ]; - - $.mobile.widget.prototype._setOption.apply( this, arguments ); - if ( $.inArray( key, exclusions ) === -1 ) { - // Record the option change in the options and in the DOM data-* attributes - this.element.attr( "data-" + ( $.mobile.ns || "" ) + ( key.replace( /([A-Z])/, "-$1" ).toLowerCase() ), value ); - } - }, - - // Try and center the overlay over the given coordinates - _placementCoords: function( desired ) { - // rectangle within which the popup must fit - var - winCoords = windowCoords(), - rc = { - x: this._tolerance.l, - y: winCoords.y + this._tolerance.t, - cx: winCoords.cx - this._tolerance.l - this._tolerance.r, - cy: winCoords.cy - this._tolerance.t - this._tolerance.b - }, - menuSize, ret; - - // Clamp the width of the menu before grabbing its size - this._ui.container.css( "max-width", rc.cx ); - menuSize = { - cx: this._ui.container.outerWidth( true ), - cy: this._ui.container.outerHeight( true ) - }; - - // Center the menu over the desired coordinates, while not going outside - // the window tolerances. This will center wrt. the window if the popup is too large. - ret = { - x: fitSegmentInsideSegment( rc.cx, menuSize.cx, rc.x, desired.x ), - y: fitSegmentInsideSegment( rc.cy, menuSize.cy, rc.y, desired.y ) - }; - - // Make sure the top of the menu is visible - ret.y = Math.max( 0, ret.y ); - - // If the height of the menu is smaller than the height of the document - // align the bottom with the bottom of the document - - // fix for $( document ).height() bug in core 1.7.2. - var docEl = document.documentElement, docBody = document.body, - docHeight = Math.max( docEl.clientHeight, docBody.scrollHeight, docBody.offsetHeight, docEl.scrollHeight, docEl.offsetHeight ); - - ret.y -= Math.min( ret.y, Math.max( 0, ret.y + menuSize.cy - docHeight ) ); - - return { left: ret.x, top: ret.y }; - }, - - _createPrereqs: function( screenPrereq, containerPrereq, whenDone ) { - var self = this, prereqs; - - // It is important to maintain both the local variable prereqs and self._prereqs. The local variable remains in - // the closure of the functions which call the callbacks passed in. The comparison between the local variable and - // self._prereqs is necessary, because once a function has been passed to .animationComplete() it will be called - // next time an animation completes, even if that's not the animation whose end the function was supposed to catch - // (for example, if an abort happens during the opening animation, the .animationComplete handler is not called for - // that animation anymore, but the handler remains attached, so it is called the next time the popup is opened - // - making it stale. Comparing the local variable prereqs to the widget-level variable self._prereqs ensures that - // callbacks triggered by a stale .animationComplete will be ignored. - - prereqs = { - screen: $.Deferred(), - container: $.Deferred() - }; - - prereqs.screen.then( function() { - if ( prereqs === self._prereqs ) { - screenPrereq(); - } - }); - - prereqs.container.then( function() { - if ( prereqs === self._prereqs ) { - containerPrereq(); - } - }); - - $.when( prereqs.screen, prereqs.container ).done( function() { - if ( prereqs === self._prereqs ) { - self._prereqs = null; - whenDone(); - } - }); - - self._prereqs = prereqs; - }, - - _animate: function( args ) { - // NOTE before removing the default animation of the screen - // this had an animate callback that would relove the deferred - // now the deferred is resolved immediately - // TODO remove the dependency on the screen deferred - this._ui.screen - .removeClass( args.classToRemove ) - .addClass( args.screenClassToAdd ); - - args.prereqs.screen.resolve(); - - if ( args.transition && args.transition !== "none" ) { - if ( args.applyTransition ) { - this._applyTransition( args.transition ); - } - this._ui.container - .animationComplete( $.proxy( args.prereqs.container, "resolve" ) ) - .addClass( args.containerClassToAdd ) - .removeClass( args.classToRemove ); - } else { - args.prereqs.container.resolve(); - } - }, - - // The desired coordinates passed in will be returned untouched if no reference element can be identified via - // desiredPosition.positionTo. Nevertheless, this function ensures that its return value always contains valid - // x and y coordinates by specifying the center middle of the window if the coordinates are absent. - _desiredCoords: function( x, y, positionTo ) { - var dst = null, offset, winCoords = windowCoords(); - - // Establish which element will serve as the reference - if ( positionTo && positionTo !== "origin" ) { - if ( positionTo === "window" ) { - x = winCoords.cx / 2 + winCoords.x; - y = winCoords.cy / 2 + winCoords.y; - } else { - try { - dst = $( positionTo ); - } catch( e ) { - dst = null; - } - if ( dst ) { - dst.filter( ":visible" ); - if ( dst.length === 0 ) { - dst = null; - } - } - } - } - - // If an element was found, center over it - if ( dst ) { - offset = dst.offset(); - x = offset.left + dst.outerWidth() / 2; - y = offset.top + dst.outerHeight() / 2; - } - - // Make sure x and y are valid numbers - center over the window - if ( $.type( x ) !== "number" || isNaN( x ) ) { - x = winCoords.cx / 2 + winCoords.x; - } - if ( $.type( y ) !== "number" || isNaN( y ) ) { - y = winCoords.cy / 2 + winCoords.y; - } - - return { x: x, y: y }; - }, - - _openPrereqsComplete: function() { - var self = this; - - self._ui.container.addClass( "ui-popup-active" ); - self._isOpen = true; - self._resizeScreen(); - - // Android appears to trigger the animation complete before the popup - // is visible. Allowing the stack to unwind before applying focus prevents - // the "blue flash" of element focus in android 4.0 - setTimeout(function(){ - self._ui.container.attr( "tabindex", "0" ).focus(); - self._trigger( "afteropen" ); - }); - }, - - _open: function( options ) { - var coords, transition, - androidBlacklist = ( function() { - var w = window, - ua = navigator.userAgent, - // Rendering engine is Webkit, and capture major version - wkmatch = ua.match( /AppleWebKit\/([0-9\.]+)/ ), - wkversion = !!wkmatch && wkmatch[ 1 ], - androidmatch = ua.match( /Android (\d+(?:\.\d+))/ ), - andversion = !!androidmatch && androidmatch[ 1 ], - chromematch = ua.indexOf( "Chrome" ) > -1; - - // Platform is Android, WebKit version is greater than 534.13 ( Android 3.2.1 ) and not Chrome. - if( androidmatch !== null && andversion === "4.0" && wkversion && wkversion > 534.13 && !chromematch ) { - return true; - } - return false; - }()); - - // Make sure options is defined - options = ( options || {} ); - - // Copy out the transition, because we may be overwriting it later and we don't want to pass that change back to the caller - transition = options.transition || this.options.transition; - - // Give applications a chance to modify the contents of the container before it appears - this._trigger( "beforeposition" ); - - coords = this._placementCoords( this._desiredCoords( options.x, options.y, options.positionTo || this.options.positionTo || "origin" ) ); - - // Count down to triggering "popupafteropen" - we have two prerequisites: - // 1. The popup window animation completes (container()) - // 2. The screen opacity animation completes (screen()) - this._createPrereqs( - $.noop, - $.noop, - $.proxy( this, "_openPrereqsComplete" ) ); - - if ( transition ) { - this._currentTransition = transition; - this._applyTransition( transition ); - } else { - transition = this.options.transition; - } - - if ( !this.options.theme ) { - this._setTheme( this._page.jqmData( "theme" ) || $.mobile.getInheritedTheme( this._page, "c" ) ); - } - - this._ui.screen.removeClass( "ui-screen-hidden" ); - - this._ui.container - .removeClass( "ui-selectmenu-hidden" ) - .offset( coords ); - - if ( this.options.overlayTheme && androidBlacklist ) { - /* TODO: - The native browser on Android 4.0.X ("Ice Cream Sandwich") suffers from an issue where the popup overlay appears to be z-indexed - above the popup itself when certain other styles exist on the same page -- namely, any element set to `position: fixed` and certain - types of input. These issues are reminiscent of previously uncovered bugs in older versions of Android's native browser: - https://github.com/scottjehl/Device-Bugs/issues/3 - - This fix closes the following bugs ( I use "closes" with reluctance, and stress that this issue should be revisited as soon as possible ): - - https://github.com/jquery/jquery-mobile/issues/4816 - https://github.com/jquery/jquery-mobile/issues/4844 - https://github.com/jquery/jquery-mobile/issues/4874 - */ - - // TODO sort out why this._page isn't working - this.element.closest( ".ui-page" ).addClass( "ui-popup-open" ); - } - this._animate({ - additionalCondition: true, - transition: transition, - classToRemove: "", - screenClassToAdd: "in", - containerClassToAdd: "in", - applyTransition: false, - prereqs: this._prereqs - }); - }, - - _closePrereqScreen: function() { - this._ui.screen - .removeClass( "out" ) - .addClass( "ui-screen-hidden" ); - }, - - _closePrereqContainer: function() { - this._ui.container - .removeClass( "reverse out" ) - .addClass( "ui-selectmenu-hidden" ) - .removeAttr( "style" ); - }, - - _closePrereqsDone: function() { - var self = this, opts = self.options; - - self._ui.container.removeAttr( "tabindex" ); - - // remove nav bindings if they are still present - opts.container.unbind( opts.closeEvents ); - - // unbind click handlers added when history is disabled - self.element.undelegate( opts.closeLinkSelector, opts.closeLinkEvents ); - - // remove the global mutex for popups - $.mobile.popup.active = undefined; - - // alert users that the popup is closed - self._trigger( "afterclose" ); - }, - - _close: function() { - this._ui.container.removeClass( "ui-popup-active" ); - this._page.removeClass( "ui-popup-open" ); - - this._isOpen = false; - - // Count down to triggering "popupafterclose" - we have two prerequisites: - // 1. The popup window reverse animation completes (container()) - // 2. The screen opacity animation completes (screen()) - this._createPrereqs( - $.proxy( this, "_closePrereqScreen" ), - $.proxy( this, "_closePrereqContainer" ), - $.proxy( this, "_closePrereqsDone" ) ); - - this._animate( { - additionalCondition: this._ui.screen.hasClass( "in" ), - transition: ( this._currentTransition || this.options.transition ), - classToRemove: "in", - screenClassToAdd: "out", - containerClassToAdd: "reverse out", - applyTransition: true, - prereqs: this._prereqs - }); - }, - - _destroy: function() { - var self = this; - - // hide and remove bindings - self._close(); - - // Put the element back to where the placeholder was and remove the "ui-popup" class - self._setTheme( "none" ); - self.element - .insertAfter( self._ui.placeholder ) - .removeClass( "ui-popup ui-overlay-shadow ui-corner-all" ); - self._ui.screen.remove(); - self._ui.container.remove(); - self._ui.placeholder.remove(); - - // Unbind handlers that were bound to elements outside self.element (the window, in self case) - $.each( self._globalHandlers, function( idx, oneSrc ) { - $.each( oneSrc.handler, function( eventType, handler ) { - oneSrc.src.unbind( eventType, handler ); - }); - }); - }, - - // any navigation event after a popup is opened should close the popup - // NOTE the pagebeforechange is bound to catch navigation events that don't - // alter the url (eg, dialogs from popups) - _bindContainerClose: function() { - var self = this; - - self.options.container - .one( self.options.closeEvents, $.proxy( self._close, self )); - }, - - // TODO no clear deliniation of what should be here and - // what should be in _open. Seems to be "visual" vs "history" for now - open: function( options ) { - var self = this, opts = this.options, url, hashkey, activePage, currentIsDialog, hasHash, urlHistory; - - // make sure open is idempotent - if( $.mobile.popup.active ) { - return; - } - - // set the global popup mutex - $.mobile.popup.active = this; - - // if history alteration is disabled close on navigate events - // and leave the url as is - if( !( opts.history ) ) { - self._open( options ); - self._bindContainerClose(); - - // When histoy is disabled we have to grab the data-rel - // back link clicks so we can close the popup instead of - // relying on history to do it for us - self.element - .delegate( opts.closeLinkSelector, opts.closeLinkEvents, function( e ) { - self._close(); - - // NOTE prevent the browser and navigation handlers from - // working with the link's rel=back. This may cause - // issues for developers expecting the event to bubble - return false; - }); - - return; - } - - // cache some values for min/readability - hashkey = $.mobile.dialogHashKey; - activePage = $.mobile.activePage; - currentIsDialog = activePage.is( ".ui-dialog" ); - url = $.mobile.urlHistory.getActive().url; - hasHash = ( url.indexOf( hashkey ) > -1 ) && !currentIsDialog; - urlHistory = $.mobile.urlHistory; - - if ( hasHash ) { - self._open( options ); - self._bindContainerClose(); - return; - } - - // if the current url has no dialog hash key proceed as normal - // otherwise, if the page is a dialog simply tack on the hash key - if ( url.indexOf( hashkey ) === -1 && !currentIsDialog ){ - url = url + hashkey; - } else { - url = $.mobile.path.parseLocation().hash + hashkey; - } - - // Tack on an extra hashkey if this is the first page and we've just reconstructed the initial hash - if ( urlHistory.activeIndex === 0 && url === urlHistory.initialDst ) { - url += hashkey; - } - - // swallow the the initial navigation event, and bind for the next - opts.container.one( opts.navigateEvents, function( e ) { - e.preventDefault(); - self._open( options ); - self._bindContainerClose(); - }); - - urlHistory.ignoreNextHashChange = currentIsDialog; - - // Gotta love methods with 1mm args :( - urlHistory.addNew( url, undefined, undefined, undefined, "dialog" ); - - // set the new url with (or without) the new dialog hash key - $.mobile.path.set( url ); - }, - - close: function() { - // make sure close is idempotent - if( !$.mobile.popup.active ){ - return; - } - - if( this.options.history ) { - $.mobile.back(); - } else { - this._close(); - } - } - }); - - - // TODO this can be moved inside the widget - $.mobile.popup.handleLink = function( $link ) { - var closestPage = $link.closest( ":jqmData(role='page')" ), - scope = ( ( closestPage.length === 0 ) ? $( "body" ) : closestPage ), - // NOTE make sure to get only the hash, ie7 (wp7) return the absolute href - // in this case ruining the element selection - popup = $( $.mobile.path.parseUrl($link.attr( "href" )).hash, scope[0] ), - offset; - - if ( popup.data( "popup" ) ) { - offset = $link.offset(); - popup.popup( "open", { - x: offset.left + $link.outerWidth() / 2, - y: offset.top + $link.outerHeight() / 2, - transition: $link.jqmData( "transition" ), - positionTo: $link.jqmData( "position-to" ), - link: $link - }); - } - - //remove after delay - setTimeout( function() { - $link.removeClass( $.mobile.activeBtnClass ); - }, 300 ); - }; - - // TODO move inside _create - $( document ).bind( "pagebeforechange", function( e, data ) { - if ( data.options.role === "popup" ) { - $.mobile.popup.handleLink( data.options.link ); - e.preventDefault(); - } - }); - - $( document ).bind( "pagecreate create", function( e ) { - $.mobile.popup.prototype.enhanceWithin( e.target, true ); - }); - -})( jQuery ); - -(function( $ ) { - var meta = $( "meta[name=viewport]" ), - initialContent = meta.attr( "content" ), - disabledZoom = initialContent + ",maximum-scale=1, user-scalable=no", - enabledZoom = initialContent + ",maximum-scale=10, user-scalable=yes", - disabledInitially = /(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test( initialContent ); - - $.mobile.zoom = $.extend( {}, { - enabled: !disabledInitially, - locked: false, - disable: function( lock ) { - if ( !disabledInitially && !$.mobile.zoom.locked ) { - meta.attr( "content", disabledZoom ); - $.mobile.zoom.enabled = false; - $.mobile.zoom.locked = lock || false; - } - }, - enable: function( unlock ) { - if ( !disabledInitially && ( !$.mobile.zoom.locked || unlock === true ) ) { - meta.attr( "content", enabledZoom ); - $.mobile.zoom.enabled = true; - $.mobile.zoom.locked = false; - } - }, - restore: function() { - if ( !disabledInitially ) { - meta.attr( "content", initialContent ); - $.mobile.zoom.enabled = true; - } - } - }); - -}( jQuery )); - -(function( $, undefined ) { - -$.widget( "mobile.textinput", $.mobile.widget, { - options: { - theme: null, - // This option defaults to true on iOS devices. - preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - initSelector: "input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])", - clearSearchButtonText: "clear text", - disabled: false - }, - - _create: function() { - - var self = this, - input = this.element, - o = this.options, - theme = o.theme || $.mobile.getInheritedTheme( this.element, "c" ), - themeclass = " ui-body-" + theme, - mini = input.jqmData( "mini" ) === true, - miniclass = mini ? " ui-mini" : "", - focusedEl, clearbtn; - - function toggleClear() { - setTimeout( function() { - clearbtn.toggleClass( "ui-input-clear-hidden", !input.val() ); - }, 0 ); - } - - $( "label[for='" + input.attr( "id" ) + "']" ).addClass( "ui-input-text" ); - - focusedEl = input.addClass("ui-input-text ui-body-"+ theme ); - - // XXX: Temporary workaround for issue 785 (Apple bug 8910589). - // Turn off autocorrect and autocomplete on non-iOS 5 devices - // since the popup they use can't be dismissed by the user. Note - // that we test for the presence of the feature by looking for - // the autocorrect property on the input element. We currently - // have no test for iOS 5 or newer so we're temporarily using - // the touchOverflow support flag for jQM 1.0. Yes, I feel dirty. - jblas - if ( typeof input[0].autocorrect !== "undefined" && !$.support.touchOverflow ) { - // Set the attribute instead of the property just in case there - // is code that attempts to make modifications via HTML. - input[0].setAttribute( "autocorrect", "off" ); - input[0].setAttribute( "autocomplete", "off" ); - } - - - //"search" input widget - if ( input.is( "[type='search'],:jqmData(type='search')" ) ) { - - focusedEl = input.wrap( "" ).parent(); - clearbtn = $( "
" + o.clearSearchButtonText + "" ) - .bind('click', function( event ) { - input - .val( "" ) - .focus() - .trigger( "change" ); - clearbtn.addClass( "ui-input-clear-hidden" ); - event.preventDefault(); - }) - .appendTo( focusedEl ) - .buttonMarkup({ - icon: "delete", - iconpos: "notext", - corners: true, - shadow: true, - mini: mini - }); - - toggleClear(); - - input.bind( 'paste cut keyup focus change blur', toggleClear ); - - } else { - input.addClass( "ui-corner-all ui-shadow-inset" + themeclass + miniclass ); - } - - input.focus(function() { - focusedEl.addClass( $.mobile.focusClass ); - }) - .blur(function() { - focusedEl.removeClass( $.mobile.focusClass ); - }) - // In many situations, iOS will zoom into the select upon tap, this prevents that from happening - .bind( "focus", function() { - if ( o.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }) - .bind( "blur", function() { - if ( o.preventFocusZoom ) { - $.mobile.zoom.enable( true ); - } - }); - - // Autogrow - if ( input.is( "textarea" ) ) { - var extraLineHeight = 15, - keyupTimeoutBuffer = 100, - keyupTimeout; - - this._keyup = function() { - var scrollHeight = input[ 0 ].scrollHeight, - clientHeight = input[ 0 ].clientHeight; - - if ( clientHeight < scrollHeight ) { - input.height(scrollHeight + extraLineHeight); - } - }; - - input.keyup(function() { - clearTimeout( keyupTimeout ); - keyupTimeout = setTimeout( self._keyup, keyupTimeoutBuffer ); - }); - - // binding to pagechange here ensures that for pages loaded via - // ajax the height is recalculated without user input - this._on( $(document), {"pagechange": "_keyup" }); - - // Issue 509: the browser is not providing scrollHeight properly until the styles load - if ( $.trim( input.val() ) ) { - // bind to the window load to make sure the height is calculated based on BOTH - // the DOM and CSS - this._on( $(window), {"load": "_keyup"}); - } - } - if ( input.attr( "disabled" ) ) { - this.disable(); - } - }, - - disable: function() { - var $el; - if ( this.element.attr( "disabled", true ).is( "[type='search'], :jqmData(type='search')" ) ) { - $el = this.element.parent(); - } else { - $el = this.element; - } - $el.addClass( "ui-disabled" ); - return this._setOption( "disabled", true ); - }, - - enable: function() { - var $el; - - // TODO using more than one line of code is acceptable ;) - if ( this.element.attr( "disabled", false ).is( "[type='search'], :jqmData(type='search')" ) ) { - $el = this.element.parent(); - } else { - $el = this.element; - } - $el.removeClass( "ui-disabled" ); - return this._setOption( "disabled", false ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.textinput.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.mobile.listview.prototype.options.filter = false; -$.mobile.listview.prototype.options.filterPlaceholder = "Filter items..."; -$.mobile.listview.prototype.options.filterTheme = "c"; -// TODO rename callback/deprecate and default to the item itself as the first argument -var defaultFilterCallback = function( text, searchValue, item ) { - return text.toString().toLowerCase().indexOf( searchValue ) === -1; - }; - -$.mobile.listview.prototype.options.filterCallback = defaultFilterCallback; - -$( document ).delegate( ":jqmData(role='listview')", "listviewcreate", function() { - - var list = $( this ), - listview = list.data( "listview" ); - - if ( !listview.options.filter ) { - return; - } - - var wrapper = $( "", { - "class": "ui-listview-filter ui-bar-" + listview.options.filterTheme, - "role": "search" - }), - search = $( "", { - placeholder: listview.options.filterPlaceholder - }) - .attr( "data-" + $.mobile.ns + "type", "search" ) - .jqmData( "lastval", "" ) - .bind( "keyup change", function() { - - var $this = $( this ), - val = this.value.toLowerCase(), - listItems = null, - lastval = $this.jqmData( "lastval" ) + "", - childItems = false, - itemtext = "", - item, - // Check if a custom filter callback applies - isCustomFilterCallback = listview.options.filterCallback !== defaultFilterCallback; - - listview._trigger( "beforefilter", "beforefilter", { input: this } ); - - // Change val as lastval for next execution - $this.jqmData( "lastval" , val ); - if ( isCustomFilterCallback || val.length < lastval.length || val.indexOf( lastval ) !== 0 ) { - - // Custom filter callback applies or removed chars or pasted something totally different, check all items - listItems = list.children(); - } else { - - // Only chars added, not removed, only use visible subset - listItems = list.children( ":not(.ui-screen-hidden)" ); - } - - if ( val ) { - - // This handles hiding regular rows without the text we search for - // and any list dividers without regular rows shown under it - - for ( var i = listItems.length - 1; i >= 0; i-- ) { - item = $( listItems[ i ] ); - itemtext = item.jqmData( "filtertext" ) || item.text(); - - if ( item.is( "li:jqmData(role=list-divider)" ) ) { - - item.toggleClass( "ui-filter-hidequeue" , !childItems ); - - // New bucket! - childItems = false; - - } else if ( listview.options.filterCallback( itemtext, val, item ) ) { - - //mark to be hidden - item.toggleClass( "ui-filter-hidequeue" , true ); - } else { - - // There's a shown item in the bucket - childItems = true; - } - } - - // Show items, not marked to be hidden - listItems - .filter( ":not(.ui-filter-hidequeue)" ) - .toggleClass( "ui-screen-hidden", false ); - - // Hide items, marked to be hidden - listItems - .filter( ".ui-filter-hidequeue" ) - .toggleClass( "ui-screen-hidden", true ) - .toggleClass( "ui-filter-hidequeue", false ); - - } else { - - //filtervalue is empty => show all - listItems.toggleClass( "ui-screen-hidden", false ); - } - listview._refreshCorners(); - }) - .appendTo( wrapper ) - .textinput(); - - if ( listview.options.inset ) { - wrapper.addClass( "ui-listview-filter-inset" ); - } - - wrapper.bind( "submit", function() { - return false; - }) - .insertBefore( list ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.slider", $.mobile.widget, { - widgetEventPrefix: "slide", - - options: { - theme: null, - trackTheme: null, - disabled: false, - initSelector: "input[type='range'], :jqmData(type='range'), :jqmData(role='slider')", - mini: false - }, - - _create: function() { - - // TODO: Each of these should have comments explain what they're for - var self = this, - - control = this.element, - - parentTheme = $.mobile.getInheritedTheme( control, "c" ), - - theme = this.options.theme || parentTheme, - - trackTheme = this.options.trackTheme || parentTheme, - - cType = control[ 0 ].nodeName.toLowerCase(), - - selectClass = ( cType === "select" ) ? "ui-slider-switch" : "", - - controlID = control.attr( "id" ), - - $label = $( "[for='" + controlID + "']" ), - - labelID = $label.attr( "id" ) || controlID + "-label", - - label = $label.attr( "id", labelID ), - - val = function() { - return cType === "input" ? parseFloat( control.val() ) : control[0].selectedIndex; - }, - - min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0, - - max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length-1, - - step = window.parseFloat( control.attr( "step" ) || 1 ), - - inlineClass = ( this.options.inline || control.jqmData( "inline" ) === true ) ? " ui-slider-inline" : "", - - miniClass = ( this.options.mini || control.jqmData( "mini" ) ) ? " ui-slider-mini" : "", - - - domHandle = document.createElement( 'a' ), - handle = $( domHandle ), - domSlider = document.createElement( 'div' ), - slider = $( domSlider ), - - valuebg = control.jqmData( "highlight" ) && cType !== "select" ? (function() { - var bg = document.createElement('div'); - bg.className = 'ui-slider-bg ' + $.mobile.activeBtnClass + ' ui-btn-corner-all'; - return $( bg ).prependTo( slider ); - })() : false, - - options; - - this._type = cType; - - domHandle.setAttribute( 'href', "#" ); - domSlider.setAttribute('role','application'); - domSlider.className = ['ui-slider ',selectClass," ui-btn-down-",trackTheme,' ui-btn-corner-all', inlineClass, miniClass].join( "" ); - domHandle.className = 'ui-slider-handle'; - domSlider.appendChild( domHandle ); - - handle.buttonMarkup({ corners: true, theme: theme, shadow: true }) - .attr({ - "role": "slider", - "aria-valuemin": min, - "aria-valuemax": max, - "aria-valuenow": val(), - "aria-valuetext": val(), - "title": val(), - "aria-labelledby": labelID - }); - - $.extend( this, { - slider: slider, - handle: handle, - valuebg: valuebg, - dragging: false, - beforeStart: null, - userModified: false, - mouseMoved: false - }); - - if ( cType === "select" ) { - var wrapper = document.createElement('div'); - wrapper.className = 'ui-slider-inneroffset'; - - for ( var j = 0,length = domSlider.childNodes.length;j < length;j++ ) { - wrapper.appendChild( domSlider.childNodes[j] ); - } - - domSlider.appendChild( wrapper ); - - // slider.wrapInner( "
" ); - - // make the handle move with a smooth transition - handle.addClass( "ui-slider-handle-snapping" ); - - options = control.find( "option" ); - - for ( var i = 0, optionsCount = options.length; i < optionsCount; i++ ) { - var side = !i ? "b" : "a", - sliderTheme = !i ? " ui-btn-down-" + trackTheme : ( " " + $.mobile.activeBtnClass ), - sliderLabel = document.createElement( 'div' ), - sliderImg = document.createElement( 'span' ); - - sliderImg.className = ['ui-slider-label ui-slider-label-',side,sliderTheme," ui-btn-corner-all"].join( "" ); - sliderImg.setAttribute('role','img'); - sliderImg.appendChild( document.createTextNode( options[i].innerHTML ) ); - $(sliderImg).prependTo( slider ); - } - - self._labels = $( ".ui-slider-label", slider ); - - } - - label.addClass( "ui-slider" ); - - // monitor the input for updated values - control.addClass( cType === "input" ? "ui-slider-input" : "ui-slider-switch" ) - .change(function() { - // if the user dragged the handle, the "change" event was triggered from inside refresh(); don't call refresh() again - if ( !self.mouseMoved ) { - self.refresh( val(), true ); - } - }) - .keyup(function() { // necessary? - self.refresh( val(), true, true ); - }) - .blur(function() { - self.refresh( val(), true ); - }); - - this._preventDocumentDrag = function( event ) { - // NOTE: we don't do this in refresh because we still want to - // support programmatic alteration of disabled inputs - if ( self.dragging && !self.options.disabled ) { - - // self.mouseMoved must be updated before refresh() because it will be used in the control "change" event - self.mouseMoved = true; - - if ( cType === "select" ) { - // make the handle move in sync with the mouse - handle.removeClass( "ui-slider-handle-snapping" ); - } - - self.refresh( event ); - - // only after refresh() you can calculate self.userModified - self.userModified = self.beforeStart !== control[0].selectedIndex; - return false; - } - } - - this._on( $( document ), { "vmousemove": this._preventDocumentDrag }); - - // it appears the clicking the up and down buttons in chrome on - // range/number inputs doesn't trigger a change until the field is - // blurred. Here we check thif the value has changed and refresh - control.bind( "vmouseup", $.proxy( self._checkedRefresh, self)); - - slider.bind( "vmousedown", function( event ) { - // NOTE: we don't do this in refresh because we still want to - // support programmatic alteration of disabled inputs - if ( self.options.disabled ) { - return false; - } - - self.dragging = true; - self.userModified = false; - self.mouseMoved = false; - - if ( cType === "select" ) { - self.beforeStart = control[0].selectedIndex; - } - - self.refresh( event ); - self._trigger( "start" ); - return false; - }) - .bind( "vclick", false ); - - this._sliderMouseUp = function() { - if ( self.dragging ) { - self.dragging = false; - - if ( cType === "select") { - // make the handle move with a smooth transition - handle.addClass( "ui-slider-handle-snapping" ); - - if ( self.mouseMoved ) { - // this is a drag, change the value only if user dragged enough - if ( self.userModified ) { - self.refresh( self.beforeStart === 0 ? 1 : 0 ); - } - else { - self.refresh( self.beforeStart ); - } - } - else { - // this is just a click, change the value - self.refresh( self.beforeStart === 0 ? 1 : 0 ); - } - } - - self.mouseMoved = false; - self._trigger( "stop" ); - return false; - } - }; - - this._on( slider.add( document ), { "vmouseup": this._sliderMouseUp }); - slider.insertAfter( control ); - - // Only add focus class to toggle switch, sliders get it automatically from ui-btn - if ( cType === 'select' ) { - this.handle.bind({ - focus: function() { - slider.addClass( $.mobile.focusClass ); - }, - - blur: function() { - slider.removeClass( $.mobile.focusClass ); - } - }); - } - - this.handle.bind({ - // NOTE force focus on handle - vmousedown: function() { - $( this ).focus(); - }, - - vclick: false, - - keydown: function( event ) { - var index = val(); - - if ( self.options.disabled ) { - return; - } - - // In all cases prevent the default and mark the handle as active - switch ( event.keyCode ) { - case $.mobile.keyCode.HOME: - case $.mobile.keyCode.END: - case $.mobile.keyCode.PAGE_UP: - case $.mobile.keyCode.PAGE_DOWN: - case $.mobile.keyCode.UP: - case $.mobile.keyCode.RIGHT: - case $.mobile.keyCode.DOWN: - case $.mobile.keyCode.LEFT: - event.preventDefault(); - - if ( !self._keySliding ) { - self._keySliding = true; - $( this ).addClass( "ui-state-active" ); - } - break; - } - - // move the slider according to the keypress - switch ( event.keyCode ) { - case $.mobile.keyCode.HOME: - self.refresh( min ); - break; - case $.mobile.keyCode.END: - self.refresh( max ); - break; - case $.mobile.keyCode.PAGE_UP: - case $.mobile.keyCode.UP: - case $.mobile.keyCode.RIGHT: - self.refresh( index + step ); - break; - case $.mobile.keyCode.PAGE_DOWN: - case $.mobile.keyCode.DOWN: - case $.mobile.keyCode.LEFT: - self.refresh( index - step ); - break; - } - }, // remove active mark - - keyup: function( event ) { - if ( self._keySliding ) { - self._keySliding = false; - $( this ).removeClass( "ui-state-active" ); - } - } - }); - - this.refresh( undefined, undefined, true ); - }, - - _checkedRefresh: function() { - if( this.value != this._value() ){ - this.refresh( this._value() ); - } - }, - - _value: function() { - return this._type === "input" ? - parseFloat( this.element.val() ) : this.element[0].selectedIndex; - }, - - refresh: function( val, isfromControl, preventInputUpdate ) { - - // NOTE: we don't return here because we want to support programmatic - // alteration of the input value, which should still update the slider - if ( this.options.disabled || this.element.attr('disabled')) { - this.disable(); - } - - // set the stored value for comparison later - this.value = this._value(); - - var control = this.element, percent, - cType = control[0].nodeName.toLowerCase(), - min = cType === "input" ? parseFloat( control.attr( "min" ) ) : 0, - max = cType === "input" ? parseFloat( control.attr( "max" ) ) : control.find( "option" ).length - 1, - step = ( cType === "input" && parseFloat( control.attr( "step" ) ) > 0 ) ? parseFloat( control.attr( "step" ) ) : 1; - - if ( typeof val === "object" ) { - var data = val, - // a slight tolerance helped get to the ends of the slider - tol = 8; - if ( !this.dragging || - data.pageX < this.slider.offset().left - tol || - data.pageX > this.slider.offset().left + this.slider.width() + tol ) { - return; - } - percent = Math.round( ( ( data.pageX - this.slider.offset().left ) / this.slider.width() ) * 100 ); - } else { - if ( val == null ) { - val = cType === "input" ? parseFloat( control.val() || 0 ) : control[0].selectedIndex; - } - percent = ( parseFloat( val ) - min ) / ( max - min ) * 100; - } - - if ( isNaN( percent ) ) { - return; - } - - if ( percent < 0 ) { - percent = 0; - } - - if ( percent > 100 ) { - percent = 100; - } - - var newval = ( percent / 100 ) * ( max - min ) + min; - - //from jQuery UI slider, the following source will round to the nearest step - var valModStep = ( newval - min ) % step; - var alignValue = newval - valModStep; - - if ( Math.abs( valModStep ) * 2 >= step ) { - alignValue += ( valModStep > 0 ) ? step : ( -step ); - } - // Since JavaScript has problems with large floats, round - // the final value to 5 digits after the decimal point (see jQueryUI: #4124) - newval = parseFloat( alignValue.toFixed(5) ); - - if ( newval < min ) { - newval = min; - } - - if ( newval > max ) { - newval = max; - } - - this.handle.css( "left", percent + "%" ); - this.handle.attr( { - "aria-valuenow": cType === "input" ? newval : control.find( "option" ).eq( newval ).attr( "value" ), - "aria-valuetext": cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText(), - title: cType === "input" ? newval : control.find( "option" ).eq( newval ).getEncodedText() - }); - - if ( this.valuebg ) { - this.valuebg.css( "width", percent + "%" ); - } - - // drag the label widths - if ( this._labels ) { - var handlePercent = this.handle.width() / this.slider.width() * 100, - aPercent = percent && handlePercent + ( 100 - handlePercent ) * percent / 100, - bPercent = percent === 100 ? 0 : Math.min( handlePercent + 100 - aPercent, 100 ); - - this._labels.each(function() { - var ab = $( this ).is( ".ui-slider-label-a" ); - $( this ).width( ( ab ? aPercent : bPercent ) + "%" ); - }); - } - - if ( !preventInputUpdate ) { - var valueChanged = false; - - // update control"s value - if ( cType === "input" ) { - valueChanged = control.val() !== newval; - control.val( newval ); - } else { - valueChanged = control[ 0 ].selectedIndex !== newval; - control[ 0 ].selectedIndex = newval; - } - if ( !isfromControl && valueChanged ) { - control.trigger( "change" ); - } - } - }, - - enable: function() { - this.element.attr( "disabled", false ); - this.slider.removeClass( "ui-disabled" ).attr( "aria-disabled", false ); - return this._setOption( "disabled", false ); - }, - - disable: function() { - this.element.attr( "disabled", true ); - this.slider.addClass( "ui-disabled" ).attr( "aria-disabled", true ); - return this._setOption( "disabled", true ); - } - -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.slider.prototype.enhanceWithin( e.target, true ); -}); - -})( jQuery ); - -(function( $, undefined ) { - -$.widget( "mobile.selectmenu", $.mobile.widget, { - options: { - theme: null, - disabled: false, - icon: "arrow-d", - iconpos: "right", - inline: false, - corners: true, - shadow: true, - iconshadow: true, - overlayTheme: "a", - hidePlaceholderMenuItems: true, - closeText: "Close", - nativeMenu: true, - // This option defaults to true on iOS devices. - preventFocusZoom: /iPhone|iPad|iPod/.test( navigator.platform ) && navigator.userAgent.indexOf( "AppleWebKit" ) > -1, - initSelector: "select:not( :jqmData(role='slider') )", - mini: false - }, - - _button: function() { - return $( "
" ); - }, - - _setDisabled: function( value ) { - this.element.attr( "disabled", value ); - this.button.attr( "aria-disabled", value ); - return this._setOption( "disabled", value ); - }, - - _focusButton : function() { - var self = this; - - setTimeout( function() { - self.button.focus(); - }, 40); - }, - - _selectOptions: function() { - return this.select.find( "option" ); - }, - - // setup items that are generally necessary for select menu extension - _preExtension: function() { - var classes = ""; - // TODO: Post 1.1--once we have time to test thoroughly--any classes manually applied to the original element should be carried over to the enhanced element, with an `-enhanced` suffix. See https://github.com/jquery/jquery-mobile/issues/3577 - /* if ( $el[0].className.length ) { - classes = $el[0].className; - } */ - if ( !!~this.element[0].className.indexOf( "ui-btn-left" ) ) { - classes = " ui-btn-left"; - } - - if ( !!~this.element[0].className.indexOf( "ui-btn-right" ) ) { - classes = " ui-btn-right"; - } - - this.select = this.element.wrap( "
" ); - this.selectID = this.select.attr( "id" ); - this.label = $( "label[for='"+ this.selectID +"']" ).addClass( "ui-select" ); - this.isMultiple = this.select[ 0 ].multiple; - if ( !this.options.theme ) { - this.options.theme = $.mobile.getInheritedTheme( this.select, "c" ); - } - }, - - _create: function() { - this._preExtension(); - - // Allows for extension of the native select for custom selects and other plugins - // see select.custom for example extension - // TODO explore plugin registration - this._trigger( "beforeCreate" ); - - this.button = this._button(); - - var self = this, - - options = this.options, - - inline = options.inline || this.select.jqmData( "inline" ), - mini = options.mini || this.select.jqmData( "mini" ), - iconpos = options.icon ? ( options.iconpos || this.select.jqmData( "iconpos" ) ) : false, - - // IE throws an exception at options.item() function when - // there is no selected item - // select first in this case - selectedIndex = this.select[ 0 ].selectedIndex === -1 ? 0 : this.select[ 0 ].selectedIndex, - - // TODO values buttonId and menuId are undefined here - button = this.button - .insertBefore( this.select ) - .buttonMarkup( { - theme: options.theme, - icon: options.icon, - iconpos: iconpos, - inline: inline, - corners: options.corners, - shadow: options.shadow, - iconshadow: options.iconshadow, - mini: mini - }); - - this.setButtonText(); - - // Opera does not properly support opacity on select elements - // In Mini, it hides the element, but not its text - // On the desktop,it seems to do the opposite - // for these reasons, using the nativeMenu option results in a full native select in Opera - if ( options.nativeMenu && window.opera && window.opera.version ) { - button.addClass( "ui-select-nativeonly" ); - } - - // Add counter for multi selects - if ( this.isMultiple ) { - this.buttonCount = $( "" ) - .addClass( "ui-li-count ui-btn-up-c ui-btn-corner-all" ) - .hide() - .appendTo( button.addClass('ui-li-has-count') ); - } - - // Disable if specified - if ( options.disabled || this.element.attr('disabled')) { - this.disable(); - } - - // Events on native select - this.select.change(function() { - self.refresh(); - }); - - this.build(); - }, - - build: function() { - var self = this; - - this.select - .appendTo( self.button ) - .bind( "vmousedown", function() { - // Add active class to button - self.button.addClass( $.mobile.activeBtnClass ); - }) - .bind( "focus", function() { - self.button.addClass( $.mobile.focusClass ); - }) - .bind( "blur", function() { - self.button.removeClass( $.mobile.focusClass ); - }) - .bind( "focus vmouseover", function() { - self.button.trigger( "vmouseover" ); - }) - .bind( "vmousemove", function() { - // Remove active class on scroll/touchmove - self.button.removeClass( $.mobile.activeBtnClass ); - }) - .bind( "change blur vmouseout", function() { - self.button.trigger( "vmouseout" ) - .removeClass( $.mobile.activeBtnClass ); - }) - .bind( "change blur", function() { - self.button.removeClass( "ui-btn-down-" + self.options.theme ); - }); - - // In many situations, iOS will zoom into the select upon tap, this prevents that from happening - self.button.bind( "vmousedown", function() { - if ( self.options.preventFocusZoom ) { - $.mobile.zoom.disable( true ); - } - }).bind( "mouseup", function() { - if ( self.options.preventFocusZoom ) { - setTimeout(function() { - $.mobile.zoom.enable( true ); - }, 0); - } - }); - }, - - selected: function() { - return this._selectOptions().filter( ":selected" ); - }, - - selectedIndices: function() { - var self = this; - - return this.selected().map(function() { - return self._selectOptions().index( this ); - }).get(); - }, - - setButtonText: function() { - var self = this, - selected = this.selected(), - text = this.placeholder, - span = $( document.createElement( "span" ) ); - - this.button.find( ".ui-btn-text" ).html(function() { - if ( selected.length ) { - text = selected.map(function() { - return $( this ).text(); - }).get().join( ", " ); - } else { - text = self.placeholder; - } - - // TODO possibly aggregate multiple select option classes - return span.text( text ) - .addClass( self.select.attr( "class" ) ) - .addClass( selected.attr( "class" ) ); - }); - }, - - setButtonCount: function() { - var selected = this.selected(); - - // multiple count inside button - if ( this.isMultiple ) { - this.buttonCount[ selected.length > 1 ? "show" : "hide" ]().text( selected.length ); - } - }, - - refresh: function() { - this.setButtonText(); - this.setButtonCount(); - }, - - // open and close preserved in native selects - // to simplify users code when looping over selects - open: $.noop, - close: $.noop, - - disable: function() { - this._setDisabled( true ); - this.button.addClass( "ui-disabled" ); - }, - - enable: function() { - this._setDisabled( false ); - this.button.removeClass( "ui-disabled" ); - } -}); - -//auto self-init widgets -$( document ).bind( "pagecreate create", function( e ) { - $.mobile.selectmenu.prototype.enhanceWithin( e.target, true ); -}); -})( jQuery ); - -/* -* custom "selectmenu" plugin -*/ - -(function( $, undefined ) { - var extendSelect = function( widget ) { - - var select = widget.select, - selectID = widget.selectID, - label = widget.label, - thisPage = widget.select.closest( ".ui-page" ), - selectOptions = widget._selectOptions(), - isMultiple = widget.isMultiple = widget.select[ 0 ].multiple, - buttonId = selectID + "-button", - menuId = selectID + "-menu", - menuPage = $( "
" + - "
" + - "
" + label.getEncodedText() + "
"+ - "
"+ - "
"+ - "
" ), - - listbox = $( "
", { "class": "ui-selectmenu" } ).insertAfter( widget.select ).popup( { theme: "a" } ), - - list = $( "