Merge branch 'bootstrap' of https://github.com/PrestaShop/PrestaShop into bootstrap

This commit is contained in:
Vincent Augagneur
2013-11-05 16:32:12 +01:00
61 changed files with 565 additions and 368 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
# Require any additional compass plugins here.
http_path = "/"
css_dir = "css"
sass_dir = "css"
sass_dir = "scss"
images_dir = "img"
javascripts_dir = "js"
fonts_dir = "font"
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
#nobootstrap *,#nobootstrap *:before,#nobootstrap *:after{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}#nobootstrap a{line-height:normal}#nobootstrap .categorieList a{line-height:20px}#nobootstrap p{line-height:normal}#nobootstrap legend{font-size:13px;line-height:20px;width:auto}#nobootstrap label{font-size:13px;display:inline;line-height:normal}#nobootstrap fieldset{clear:both}#nobootstrap .breadcrumb{padding:0}#nobootstrap li{line-height:normal}#nobootstrap select,#nobootstrap textarea,#nobootstrap input{height:inherit}#nobootstrap label,#nobootstrap input,#nobootstrap button,#nobootstrap select,#nobootstrap textarea{font-size:12px;line-height:13px}#nobootstrap input[type="radio"],#nobootstrap input[type="checkbox"]{margin:0}#nobootstrap input[type="text"]{height:14px !important}#nobootstrap table.table{margin:0;padding:0;width:100%;border-collapse:collapse}#nobootstrap table.widthfull{width:100%}#nobootstrap .table thead th{vertical-align:top}#nobootstrap .table th,#nobootstrap .table td{line-height:normal;vertical-align:middle;border-top:none}#nobootstrap #header #header_search #bo_search_submit{height:25px !important}#nobootstrap [class^="icon-"],#nobootstrap [class*=" icon-"]{width:auto}#nobootstrap .toolbarBox [class^="process-icon-"],#nobootstrap .toolbarBox [class*=" process-icon-"]{text-indent:-9000px;overflow:hidden}
File diff suppressed because one or more lines are too long
@@ -1,49 +0,0 @@
#nobootstrap a {
line-height: normal; }
#nobootstrap .categorieList a {
line-height: 20px; }
#nobootstrap p {
line-height: normal; }
#nobootstrap legend {
font-size: 13px;
line-height: 20px;
width: auto !important; }
#nobootstrap label {
font-size: 13px;
display: inline;
line-height: normal; }
#nobootstrap .breadcrumb {
padding: 0; }
#nobootstrap select, #nobootstrap textarea, #nobootstrap input {
height: auto !important;
font-size: 12px !important;
line-height: normal;
margin-bottom: auto;
font-family: Arial, Verdana, Helvetica, sans-serif;
margin-bottom: 0 !important;
width: auto; }
#nobootstrap label, #nobootstrap input, #nobootstrap button, #nobootstrap select, #nobootstrap textarea {
font-size: 12px;
line-height: 13px; }
#nobootstrap input[type="radio"], #nobootstrap input[type="checkbox"] {
margin: 0; }
#nobootstrap input[type="text"] {
height: 14px !important; }
#nobootstrap table.table {
margin: 0;
padding: 0;
width: 100%;
border-collapse: collapse; }
#nobootstrap table.widthfull {
width: 100%; }
#nobootstrap .table th, #nobootstrap .table td {
line-height: normal;
vertical-align: middle;
border-top: none; }
#nobootstrap #header #header_search #bo_search_submit {
height: 25px !important; }
#nobootstrap [class^="icon-"], #nobootstrap [class*=" icon-"] {
width: auto; }
#nobootstrap .toolbarBox [class^="process-icon-"], #nobootstrap .toolbarBox [class*=" process-icon-"] {
text-indent: -9000px;
overflow: hidden; }
@@ -21,7 +21,7 @@ html, body
@include transition-property(margin)
@include transition-duration(0.4s)
@include transition-timing-function(ease-out)
fieldset, .panel
.panel
padding: 20px
margin-bottom: 20px
border: solid 1px darken($bg-content-color,10%)
@@ -66,6 +66,7 @@
@include box-shadow(rgba(0,0,0,0.2) 0 1px 3px inset)
border: solid 1px #ccc
background-color: #eee
cursor: n-resize
.module_col_icon
display: table-cell
width: 50px
+35
View File
@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;
+35
View File
@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;
@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;
@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;
+35
View File
@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;
@@ -1,4 +1,7 @@
@import compass
#nobootstrap
*, *:before, *:after
@include box-sizing(content-box)
a
line-height: normal
.categorieList a
@@ -8,26 +11,25 @@
legend
font-size: 13px
line-height: 20px
width: auto!important
width: auto
label
font-size: 13px
display: inline
line-height: normal
fieldset
clear: both
.breadcrumb
padding: 0
li
line-height:normal
select, textarea, input
height: auto!important
font-size: 12px!important
line-height: normal
margin-bottom: auto
font-family: Arial,Verdana,Helvetica,sans-serif
margin-bottom: 0!important
width: auto
select, textarea, input
height: inherit
label, input, button, select, textarea
font-size: 12px
line-height: 13px
input[type="radio"], input[type="checkbox"]
margin: 0
input[type="text"]
@@ -40,7 +42,7 @@
table.widthfull
width: 100%
.table thead th
vertical-align:top
vertical-align: top
.table th, .table td
line-height: normal
vertical-align: middle
@@ -1,6 +1,5 @@
#nobootstrap {
//old admin theme
body{font-family:Arial, Helvetica, sans-serif}
h1,h2,h3,h4{font-family:Arial, Helvetica, sans-serif;line-height:1.4em;margin-bottom:.5em}
h2{font-size:1.7em}
h3{font-size:1.25em}
@@ -121,14 +120,8 @@
.multishop_toolbar .chzn-container .chzn-results .first{background-color:#408BD5;color:#fff;font-weight:700}
.multishop_toolbar .chzn-container .chzn-results .group{background-color:#C6DEFC;font-style:italic;font-weight:700;padding-left:15px}
.multishop_toolbar .chzn-container .chzn-results .shop{background-color:#EAF2FC;padding-left:30px}
.toolbarBox{background-color:#F8F8F8;border:1px solid #CCC;margin-bottom:10px;padding:10px 0;position:relative}
.toolbarBox .pageTitle{line-height:48px;margin-left:10px}
.toolbarBox .pageTitle h3{font-size:2em;font-weight:700;line-height:48px;margin:0;padding:0}
.toolbarBox ul.cc_button{float:right;margin:0;padding:0}
.toolbarBox ul.cc_button li{color:#666;float:left;height:48px;list-style:none outside none;padding:1px 1px 3px 4px;text-align:center}
.toolbarBox a.toolbar_btn{border:1px solid #f8f8f8;border-width:1px;cursor:pointer;display:block;float:left;font-size:11px;min-width:50px;padding:1px 5px;white-space:nowrap}
.toolbarBox a.toolbar_btn:hover{background-color:#fff;border:1px inset #ccc}
.toolbarBox .toolbar_btn span{display:block;float:none;height:32px;margin:0 auto;position:relative}
.toolbarBox .process-icon-delete{background-image:url(../img/process-icon-delete.png)}
.toolbarBox .process-icon-duplicate{background-image:url(../img/process-icon-duplicate.png)}
.toolbarBox .process-icon-stats{background-image:url(../img/process-icon-stats.png)}
@@ -147,6 +140,7 @@
.toolbarBox .process-icon-help{background-image:url(../img/process-icon-help.png)}
.toolbarBox .process-icon-help-new{background-image:url(../img/process-icon-help-new.png)}
.toolbarBox .process-icon-modules-list{background-image:url(../img/process-icon-modules-list.png)}
.toolbarReduced{margin-right:221px}
#modules_list_button{background-image:url(../img/modules_list_button.png);border:none;cursor:pointer;font-size:1.6em;height:63px;padding-left:45px;position:absolute;right:0;top:0;width:211px}
.toolbarBox #modules_list_container{background:none repeat scroll 0 0 #FFF;border:solid 1px #CCC;display:block;float:right;height:auto;position:absolute;right:13px;top:63px;width:500px;z-index:100}
@@ -340,7 +334,7 @@
#moduleContainer .moduleGridDesc,#modules_list_container_tab .moduleGridDesc{display:block;height:30px;position:relative}
#moduleContainer ul.listing-grid-module li select,#modules_list_container_tab ul.listing-grid-module li select{position:absolute;right:0;top:0}
//root css
*{font-family:Arial,Verdana,Helvetica,sans-serif}
body{color:#000;font-size:12px;margin:0;padding:0}
a img{border:0}
a{color:#000;outline:0;text-decoration:none}
@@ -353,7 +347,7 @@
h3{font-size:1.1em}
h5{font-size:.83em}
h6{font-size:.67em}
h3.blue{color:#268CCD}
.blue{color:#268CCD}
.red{color:red}
form p{margin:.5em 0 0;padding:0 0 .5em}
form sup{color:#C00;font-weight:700;vertical-align:text-top}
@@ -696,45 +690,6 @@
#BoxUseSpecialSyntax .warn{margin:0 auto;width:500px}
#BoxUseSpecialSyntax ul{list-style-type:disc;margin-left:30px}
.id_customization .customization_field{min-width:205px;width:205px}
#carrier_wizard.swMain{display:block;float:left;margin:0;min-width:980px;padding:0;position:relative;width:100%}
#carrier_wizard.swMain .stepContainer{clear:both;display:block;margin:0;overflow:hidden;padding:0;position:relative}
#carrier_wizard.swMain .stepContainer div.content{clear:both;display:block;float:left;margin:0;overflow:visible;padding:0;position:absolute;text-align:left;width:100%;z-index:88}
#carrier_wizard.swMain div.actionBar{background-color:#f7f8f7;border:1px solid #caccca;clear:both;display:block;height:37px;margin-bottom:20px;overflow:auto;padding:0;position:relative;text-align:left;z-index:88}
#carrier_wizard.swMain .stepContainer .StepTitle{clear:both;display:block;margin:0;padding:5px;position:relative;text-align:left;z-index:88}
#carrier_wizard.swMain ul.anchor{clear:both;display:block;float:left;list-style:none;margin:0 0 10px;padding:0;position:relative;width:100%}
#carrier_wizard.swMain ul.anchor li{display:block;float:left;margin:0;padding:0;position:relative}
#carrier_wizard.swMain ul.nbr_steps_4.anchor li{width:25%}
#carrier_wizard.swMain ul.nbr_steps_5.anchor li{width:20%}
#carrier_wizard.swMain ul.anchor li a{display:block;height:32px;margin:0;outline-style:none;overflow:hidden;padding-right:25px;position:relative;text-decoration:none;z-index:99}
#carrier_wizard.swMain ul.anchor li a .stepNumber{color:#fffffe;float:left;font-size:30px;font-style:normal;font-weight:400;height:32px;line-height:32px;padding:0 5px;position:relative;text-align:center;width:24px}
#carrier_wizard.swMain ul.anchor li a .stepDesc{display:table-cell;font-size:15px;height:32px;line-height:13px;position:relative;text-align:left;vertical-align:middle}
#carrier_wizard.swMain ul.anchor li a.selected{background:#404956 url(../img/admin/steps-carrierwizard.png) no-repeat right -32px;color:#F8F8F8;cursor:text}
#carrier_wizard.swMain ul.anchor li a.done,#carrier_wizard.swMain ul.anchor li.done.selected a.selected{background:url(../img/admin/steps-carrierwizard.png) right 0 no-repeat #3f4856;color:#FFF;position:relative;z-index:99}
#carrier_wizard.swMain ul.anchor li a.disabled{background:url(../img/admin/steps-carrierwizard.png) right -64px no-repeat #cbcccb;color:#878787;cursor:text}
#carrier_wizard.swMain .buttonDisabled{background-color:#CCC!important;border:1px solid #CCC!important;color:#F8F8F8!important;cursor:text}
#carrier_wizard.swMain .buttonFinish{background-color:#5A5655;border:1px solid #5A5655;color:#FFF;display:block;float:right;margin:5px 10px 0 3px;outline-style:none;padding:5px;text-align:center;text-decoration:none;width:100px}
#carrier_logo_block{margin:0;padding:0;position:absolute;right:10px}
#carrier_wizard.swMain .msgBox{background-color:#FFD;border:1px solid #FFD700;color:#5A5655;display:none;float:left;margin:4px 0 0 5px;min-width:200px;padding:5px;position:relative;z-index:999}
#carrier_wizard.swMain .msgBox .content{float:left;padding:0}
#carrier_wizard.swMain .msgBox .close{border:1px solid #CCC;color:#CCC;display:block;float:right;margin:0 0 0 5px;outline-style:none;padding:0 2px;position:relative;text-align:center;text-decoration:none}
#carrier_wizard.swMain .msgBox .close:hover{border:1px solid #EA8511;color:#EA8511}
#carrier_wizard .border_top{border-top:solid 1px silver}
#carrier_wizard .border_bottom{border-bottom:solid 1px silver}
#carrier_wizard .border_left{border-left:solid 1px silver}
#carrier_wizard .border_right{border-right:solid 1px silver}
#carrier_wizard .border_all{border:solid 1px silver}
#carrier_wizard input.field_error{background-color:#FCC;border:solid 1px red}
#carrier_wizard .new_range,#carrier_wizard .validate_range{float:left;margin:35px 0 0 10px;width:130px}
#carrier_wizard tr.fees_all{background:#CCC}
#carrier_wizard #zones_table input[type=text]{width:45px}
#carrier_wizard #fieldset_form{min-height:190px}
#carrier_wizard #zone_ranges label{float:none;width:inherit}
#carrier_wizard #step_carrier_summary label{width:40px}
#carrier_wizard #step_carrier_summary .margin-form{padding-left:60px}
#carrier_wizard #summary_zones,#carrier_wizard #summary_groups,#carrier_wizard #summary_shops{list-style:disc;margin-left:20px;margin-top:10px}
#carrier_wizard .ranges_not_follow label{float:none;width:inherit}
#carrier_wizard .ranges_not_follow{margin-bottom:0;width:300px}
#carrier_wizard .assoShop{min-height:inherit}
.float,span.defaultSkin table.mceLayout tr.mceFirst td,#customer_part #customers ul,#MeaningStatus,#CustomerThreadContacts div#MeaningStatus,#conditions #condition_list a{float:left}
.floatr,#customer_part #customers ul li a.id_customer.button{float:right}
a.link,.warn a,#content .conf a:hover,#content .warn a:hover,#content .error a:hover{text-decoration:underline}
@@ -762,6 +717,4 @@
#conditions .condition_group h3,#conditions #condition_list h4{margin:0 0 10px}
#container-customer,#container-multishop{background-color:#EBEDF4;border:1px solid #CCCED7;color:#585A69;padding:10px}
#block_tips,#block_partner_tips{float:right;width:48.1%}
#carrier_wizard.swMain .buttonNext,#carrier_wizard.swMain .buttonPrevious{background-color:#5A5655;border:1px solid #5A5655;color:#FFF;display:block;float:right;margin:5px 3px 0;outline-style:none;padding:5px;text-align:center;text-decoration:none;width:100px}
#carrier_wizard.swMain ul.anchor li a.done .stepNumber,#carrier_wizard.swMain ul.anchor li a.done .stepDesc{color:#A9B6C8}
}
+35
View File
@@ -0,0 +1,35 @@
<?php
/*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;
@@ -27,11 +27,11 @@
{block name="label"}
{if $input['type'] == 'modules'}
<div style="{if !$form_id}display:none{/if}">
<div {if !$form_id}class="hide"{/if}>
<label class="control-label col-lg-3">{l s='Authorized modules:'}</label>
</div>
{elseif $input['type'] == 'group_discount_category'}
<div style="{if !$form_id}display:none{/if}">
<div {if !$form_id}class="hide"{/if}>
{$smarty.block.parent}
</div>
{else}
@@ -39,10 +39,9 @@
{/if}
{/block}
{block name="field"}
{if $input['type'] == 'group_discount_category'}
<div style="{if !$form_id}display:none{/if}">
<div {if !$form_id}class="hide"{/if}>
<script type="text/javascript">
$(document).ready(function() {
$("#group_discount_category").fancybox({
@@ -143,7 +142,7 @@
</tr>
{/foreach}
</table>
</div>
<div style="display:none" id="group_discount_category_fancybox">
<div class="panel form-horizontal">
<div class="col-lg-12">
@@ -168,8 +167,7 @@
</div>
</div>
{elseif $input['type'] == 'modules'}
<div style="{if !$form_id}display:none{/if}">
<div class="margin-form">
<div {if !$form_id}class="hide"{/if}>
<script type="text/javascript">
$(document).ready(function() {
$('#authorized-modules').find('[value="0"]').click(function() {
@@ -185,7 +183,7 @@
<div class="col-lg-9" id="authorized-modules">
{foreach $input['values']['auth_modules'] key=key item=module }
<div class="form-group">
<label class="control-label col-lg-2"><img src="../modules/{$module->name}/logo.gif"> {$module->displayName}</label>
<label class="control-label col-lg-4"><img src="../modules/{$module->name}/logo.gif"> {$module->displayName}</label>
<div class="input-group col-lg-2">
<span class="switch prestashop-switch">
<input type="radio" name="{$module->name}" id="{$module->name}_on" value="1" checked="checked">
@@ -200,7 +198,7 @@
{/foreach}
{foreach $input['values']['unauth_modules'] key=key item=module }
<div class="form-group">
<label class="control-label col-lg-2"><img src="../modules/{$module->name}/logo.gif"> {$module->displayName}</label>
<label class="control-label col-lg-4"><img src="../modules/{$module->name}/logo.gif"> {$module->displayName}</label>
<div class="input-group col-lg-2">
<span class="switch prestashop-switch">
<input type="radio" name="{$module->name}" id="{$module->name}_on" value="1">
@@ -218,4 +216,4 @@
{else}
{$smarty.block.parent}
{/if}
{/block}
{/block}
@@ -26,58 +26,62 @@
{extends file="helpers/view/view.tpl"}
{block name="override_tpl"}
<div class="col-lg-6">
<div class="panel">
<h3><i class="icon-group"></i> {l s='Group information'}</h3>
<h2><i class="icon-group"></i> {$group->name[$language->id]}</h2>
<div class="form-horizontal">
<div class="form-group">
<label class="col-lg-3 control-label">{l s='Discount:'}</label>
<div class="col-lg-3"><p class="form-control-static">{l s='%d%%' sprintf=$group->reduction}</p></div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">{l s='Price display method:'}</label>
<div class="col-lg-3"><p class="form-control-static">{if $group->price_display_method}
{l s='Tax excluded'}
{else}
{l s='Tax included'}
{/if}</p></div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">{l s='Show prices:'}</label>
<div class="col-lg-3"><p class="form-control-static">{if $group->show_prices}{l s='Yes'}{else}{l s='No'}{/if}</p></div>
<div class="row">
<div class="col-lg-6">
<div class="panel">
<h3><i class="icon-group"></i> {l s='Group information'}</h3>
<h2><i class="icon-group"></i> {$group->name[$language->id]}</h2>
<div class="form-horizontal">
<div class="form-group">
<label class="col-lg-3 control-label">{l s='Discount:'}</label>
<div class="col-lg-3"><p class="form-control-static">{l s='%d%%' sprintf=$group->reduction}</p></div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">{l s='Price display method:'}</label>
<div class="col-lg-3"><p class="form-control-static">{if $group->price_display_method}
{l s='Tax excluded'}
{else}
{l s='Tax included'}
{/if}</p></div>
</div>
<div class="form-group">
<label class="col-lg-3 control-label">{l s='Show prices:'}</label>
<div class="col-lg-3"><p class="form-control-static">{if $group->show_prices}{l s='Yes'}{else}{l s='No'}{/if}</p></div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="panel">
<h3><i class="icon-dollar"></i> {l s='Current category discount'}</h3>
{if !$categorieReductions}
<div class="alert alert-warning">{l s='None'}</div>
{else}
<table class="table">
<thead>
<tr>
<th><span class="title_box">{l s='Category'}</span></th>
<th><span class="title_box">{l s='Discount'}</span></th>
</tr>
</thead>
<tbody>
{foreach $categorieReductions key=key item=category }
<tr class="alt_row">
<td>{$category.path}</td>
<td>{l s='%d%%' sprintf=$category.reduction}</td>
</tr>
{/foreach}
<tbody>
</table>
{/if}
<div class="col-lg-6">
<div class="panel">
<h3><i class="icon-dollar"></i> {l s='Current category discount'}</h3>
{if !$categorieReductions}
<div class="alert alert-warning">{l s='None'}</div>
{else}
<table class="table">
<thead>
<tr>
<th><span class="title_box">{l s='Category'}</span></th>
<th><span class="title_box">{l s='Discount'}</span></th>
</tr>
</thead>
<tbody>
{foreach $categorieReductions key=key item=category }
<tr class="alt_row">
<td>{$category.path}</td>
<td>{l s='%d%%' sprintf=$category.reduction}</td>
</tr>
{/foreach}
<tbody>
</table>
{/if}
</div>
</div>
</div>
<div class="col-lg-12">
<h2>{l s='Members of this customer group'}</h2>
<p>{l s='Limited to the first 100 customers.'} {l s='Please use filters to narrow your search.'}</p>
{$customerList}
<div class="row">
<div class="col-lg-12">
<h2>{l s='Members of this customer group'}</h2>
<p>{l s='Limited to the first 100 customers.'} {l s='Please use filters to narrow your search.'}</p>
{$customerList}
</div>
</div>
{/block}
+13 -12
View File
@@ -1927,12 +1927,13 @@ class AdminControllerCore extends Controller
$this->addCSS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/css/admin-theme.css', 'all');
// Deprecated stylesheets + reset bootstrap style for the #nobootstrap field - Backward compatibility
if (!$this->bootstrap)
{
$this->addCSS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/css/backward/admin.css', 'all');
$this->addCSS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/css/backward/bootstrap_admin_reset.css', 'all');
}
//if (!$this->bootstrap)
//{
$this->addCSS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/css/backward-admin-old.css', 'all');
$this->addCSS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/css/backward-admin-bootstrap-reset.css', 'all');
//}
//todo csss for rtl support
if ($this->context->language->is_rtl)
$this->addCSS(_THEME_CSS_DIR_.'rtl.css');
@@ -1944,8 +1945,9 @@ class AdminControllerCore extends Controller
_PS_JS_DIR_.'toggle.js',
_PS_JS_DIR_.'tools.js',
_PS_JS_DIR_.'ajax.js',
_PS_JS_DIR_.'toolbar.js',
//_PS_JS_DIR_.'toolbar.js',
));
//loads specific javascripts for the admin theme, bootstrap.js should be moved into /js root directory
$this->addJS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/js/vendor/bootstrap.js');
$this->addJS(__PS_BASE_URI__.$admin_webpath.'/themes/'.$this->bo_theme.'/js/admin-theme.js');
@@ -1970,14 +1972,13 @@ class AdminControllerCore extends Controller
* @param boolean $htmlentities if set to true(default), the return value will pass through htmlentities($string, ENT_QUOTES, 'utf-8')
* @return string the translation if available, or the english default text.
*/
protected function l($string, $class = 'AdminTab', $addslashes = false, $htmlentities = true)
protected function l($string, $class = null, $addslashes = false, $htmlentities = true)
{
// classname has changed, from AdminXXX to AdminXXXController
// So we remove 10 characters and we keep same keys
if (strtolower(substr($class, -10)) == 'controller')
$class = substr($class, 0, -10);
elseif ($class == 'AdminTab')
if ($class === null || $class == 'AdminTab')
$class = substr(get_class($this), 0, -10);
// classname has changed, from AdminXXX to AdminXXXController, so we remove 10 characters and we keep same keys
elseif (strtolower(substr($class, -10)) == 'controller')
$class = substr($class, 0, -10);
return Translate::getAdminTranslation($string, $class, $addslashes, $htmlentities);
}
@@ -356,7 +356,7 @@ class AdminCategoriesControllerCore extends AdminController
$helper->id = 'box-disabled-categories';
$helper->icon = 'icon-off';
$helper->color = 'color1';
$helper->title = $this->l('Disabled Categories');
$helper->title = $this->l('Disabled Categories', null, null, false);
if (ConfigurationKPI::get('DISABLED_CATEGORIES') !== false)
$helper->value = ConfigurationKPI::get('DISABLED_CATEGORIES');
if (ConfigurationKPI::get('DISABLED_CATEGORIES_EXPIRE') < $time)
@@ -367,7 +367,7 @@ class AdminCategoriesControllerCore extends AdminController
$helper->id = 'box-empty-categories';
$helper->icon = 'icon-bookmark-empty';
$helper->color = 'color2';
$helper->title = $this->l('Empty Categories');
$helper->title = $this->l('Empty Categories', null, null, false);
if (ConfigurationKPI::get('EMPTY_CATEGORIES') !== false)
$helper->value = ConfigurationKPI::get('EMPTY_CATEGORIES');
if (ConfigurationKPI::get('EMPTY_CATEGORIES_EXPIRE') < $time)
@@ -378,8 +378,8 @@ class AdminCategoriesControllerCore extends AdminController
$helper->id = 'box-top-category';
$helper->icon = 'icon-money';
$helper->color = 'color3';
$helper->title = $this->l('Top Category');
$helper->subtitle = $this->l('30 days');
$helper->title = $this->l('Top Category', null, null, false);
$helper->subtitle = $this->l('30 days', null, null, false);
if (ConfigurationKPI::get('TOP_CATEGORY', $this->context->employee->id_lang) !== false)
$helper->value = ConfigurationKPI::get('TOP_CATEGORY', $this->context->employee->id_lang);
if (ConfigurationKPI::get('TOP_CATEGORY_EXPIRE', $this->context->employee->id_lang) < $time)
@@ -478,7 +478,7 @@ class AdminCustomerThreadsControllerCore extends AdminController
$helper->id = 'box-pending-messages';
$helper->icon = 'icon-envelope';
$helper->color = 'color1';
$helper->title = $this->l('Pending Messages');
$helper->title = $this->l('Pending Messages', null, null, false);
if (ConfigurationKPI::get('PENDING_MESSAGES') !== false)
$helper->value = ConfigurationKPI::get('PENDING_MESSAGES');
if (ConfigurationKPI::get('PENDING_MESSAGES_EXPIRE') < $time)
@@ -489,8 +489,8 @@ class AdminCustomerThreadsControllerCore extends AdminController
$helper->id = 'box-age';
$helper->icon = 'icon-time';
$helper->color = 'color2';
$helper->title = $this->l('Average Response Time');
$helper->subtitle = $this->l('30 days');
$helper->title = $this->l('Average Response Time', null, null, false);
$helper->subtitle = $this->l('30 days', null, null, false);
if (ConfigurationKPI::get('AVG_MSG_RESPONSE_TIME') !== false)
$helper->value = ConfigurationKPI::get('AVG_MSG_RESPONSE_TIME');
if (ConfigurationKPI::get('AVG_MSG_RESPONSE_TIME_EXPIRE') < $time)
@@ -501,8 +501,8 @@ class AdminCustomerThreadsControllerCore extends AdminController
$helper->id = 'box-messages-per-thread';
$helper->icon = 'icon-copy';
$helper->color = 'color3';
$helper->title = $this->l('Messages per Thread');
$helper->subtitle = $this->l('30 day');
$helper->title = $this->l('Messages per Thread', null, null, false);
$helper->subtitle = $this->l('30 day', null, null, false);
if (ConfigurationKPI::get('MESSAGES_PER_THREAD') !== false)
$helper->value = ConfigurationKPI::get('MESSAGES_PER_THREAD');
if (ConfigurationKPI::get('MESSAGES_PER_THREAD_EXPIRE') < $time)
@@ -545,8 +545,8 @@ class AdminCustomersControllerCore extends AdminController
$helper->id = 'box-gender';
$helper->icon = 'icon-male';
$helper->color = 'color1';
$helper->title = $this->l('Customers');
$helper->subtitle = $this->l('All Time');
$helper->title = $this->l('Customers', null, null, false);
$helper->subtitle = $this->l('All Time', null, null, false);
if (ConfigurationKPI::get('CUSTOMER_MAIN_GENDER') !== false)
$helper->value = ConfigurationKPI::get('CUSTOMER_MAIN_GENDER');
if (ConfigurationKPI::get('CUSTOMER_MAIN_GENDER_EXPIRE') < $time)
@@ -557,8 +557,8 @@ class AdminCustomersControllerCore extends AdminController
$helper->id = 'box-age';
$helper->icon = 'icon-calendar';
$helper->color = 'color2';
$helper->title = $this->l('Average Age');
$helper->subtitle = $this->l('All Time');
$helper->title = $this->l('Average Age', 'AdminTab', null, false);
$helper->subtitle = $this->l('All Time', null, null, false);
if (ConfigurationKPI::get('AVG_CUSTOMER_AGE') !== false)
$helper->value = ConfigurationKPI::get('AVG_CUSTOMER_AGE');
if (ConfigurationKPI::get('AVG_CUSTOMER_AGE_EXPIRE') < $time)
@@ -569,8 +569,8 @@ class AdminCustomersControllerCore extends AdminController
$helper->id = 'box-orders';
$helper->icon = 'icon-retweet';
$helper->color = 'color3';
$helper->title = $this->l('Orders per Customer');
$helper->subtitle = $this->l('All Time');
$helper->title = $this->l('Orders per Customer', null, null, false);
$helper->subtitle = $this->l('All Time', null, null, false);
if (ConfigurationKPI::get('ORDERS_PER_CUSTOMER') !== false)
$helper->value = ConfigurationKPI::get('ORDERS_PER_CUSTOMER');
if (ConfigurationKPI::get('ORDERS_PER_CUSTOMER_EXPIRE') < $time)
@@ -581,8 +581,8 @@ class AdminCustomersControllerCore extends AdminController
$helper->id = 'box-newsletter';
$helper->icon = 'icon-envelope';
$helper->color = 'color4';
$helper->title = $this->l('Newsletter Registrations');
$helper->subtitle = $this->l('All Time');
$helper->title = $this->l('Newsletter Registrations', null, null, false);
$helper->subtitle = $this->l('All Time', null, null, false);
if (ConfigurationKPI::get('NEWSLETTER_REGISTRATIONS') !== false)
$helper->value = ConfigurationKPI::get('NEWSLETTER_REGISTRATIONS');
if (ConfigurationKPI::get('NEWSLETTER_REGISTRATIONS_EXPIRE') < $time)
+1 -1
View File
@@ -310,7 +310,7 @@ class AdminGroupsControllerCore extends AdminController
),
array(
'type' => 'modules',
'label' => array('auth_modules' => $this->l('Authorized modules:'), 'unauth_modules' => $this->l('Unauthorized modules:')),
'label' => $this->l('Modules Authorization'),
'name' => 'auth_modules',
'values' => $this->formatModuleListAuth($group->id)
)
+3 -3
View File
@@ -987,7 +987,7 @@ class AdminModulesControllerCore extends AdminController
$helper->id = 'box-installed-modules';
$helper->icon = 'icon-puzzle-piece';
$helper->color = 'color1';
$helper->title = html_entity_decode($this->l('Installed Modules'));
$helper->title = $this->l('Installed Modules', null, null, false);
if (ConfigurationKPI::get('INSTALLED_MODULES') !== false)
$helper->value = ConfigurationKPI::get('INSTALLED_MODULES');
if (ConfigurationKPI::get('INSTALLED_MODULES_EXPIRE') < $time)
@@ -998,7 +998,7 @@ class AdminModulesControllerCore extends AdminController
$helper->id = 'box-disabled-modules';
$helper->icon = 'icon-off';
$helper->color = 'color2';
$helper->title = html_entity_decode($this->l('Disabled Modules'));
$helper->title = $this->l('Disabled Modules', null, null, false);
if (ConfigurationKPI::get('DISABLED_MODULES') !== false)
$helper->value = ConfigurationKPI::get('DISABLED_MODULES');
if (ConfigurationKPI::get('DISABLED_MODULES_EXPIRE') < $time)
@@ -1009,7 +1009,7 @@ class AdminModulesControllerCore extends AdminController
$helper->id = 'box-update-modules';
$helper->icon = 'icon-refresh';
$helper->color = 'color3';
$helper->title = html_entity_decode($this->l('Modules to update'));
$helper->title = $this->l('Modules to update', null, null, false);
if (ConfigurationKPI::get('UPDATE_MODULES') !== false)
$helper->value = ConfigurationKPI::get('UPDATE_MODULES');
if (ConfigurationKPI::get('UPDATE_MODULES_EXPIRE') < $time)
+8 -8
View File
@@ -1263,8 +1263,8 @@ class AdminOrdersControllerCore extends AdminController
$helper->icon = 'icon-sort-by-attributes-alt';
//$helper->chart = true;
$helper->color = 'color1';
$helper->title = $this->l('Conversion Rate');
$helper->subtitle = $this->l('30 days');
$helper->title = $this->l('Conversion Rate', null, null, false);
$helper->subtitle = $this->l('30 days', null, null, false);
if (ConfigurationKPI::get('CONVERSION_RATE') !== false)
$helper->value = ConfigurationKPI::get('CONVERSION_RATE');
if (ConfigurationKPI::get('CONVERSION_RATE_CHART') !== false)
@@ -1277,8 +1277,8 @@ class AdminOrdersControllerCore extends AdminController
$helper->id = 'box-carts';
$helper->icon = 'icon-shopping-cart';
$helper->color = 'color2';
$helper->title = $this->l('Abandoned Carts');
$helper->subtitle = $this->l('Today');
$helper->title = $this->l('Abandoned Carts', null, null, false);
$helper->subtitle = $this->l('Today', null, null, false);
$helper->href = $this->context->link->getAdminLink('AdminCarts');
if (ConfigurationKPI::get('ABANDONED_CARTS') !== false)
$helper->value = ConfigurationKPI::get('ABANDONED_CARTS');
@@ -1290,8 +1290,8 @@ class AdminOrdersControllerCore extends AdminController
$helper->id = 'box-average-order';
$helper->icon = 'icon-money';
$helper->color = 'color3';
$helper->title = $this->l('Average Order Value');
$helper->subtitle = $this->l('30 days');
$helper->title = $this->l('Average Order Value', null, null, false);
$helper->subtitle = $this->l('30 days', null, null, false);
if (ConfigurationKPI::get('AVG_ORDER_VALUE') !== false)
$helper->value = ConfigurationKPI::get('AVG_ORDER_VALUE');
if (ConfigurationKPI::get('AVG_ORDER_VALUE_EXPIRE') < $time)
@@ -1302,8 +1302,8 @@ class AdminOrdersControllerCore extends AdminController
$helper->id = 'box-net-profit-visitor';
$helper->icon = 'icon-user';
$helper->color = 'color4';
$helper->title = $this->l('Net Profit per Visitor');
$helper->subtitle = $this->l('30 days');
$helper->title = $this->l('Net Profit per Visitor', null, null, false);
$helper->subtitle = $this->l('30 days', null, null, false);
if (ConfigurationKPI::get('NETPROFIT_VISITOR') !== false)
$helper->value = ConfigurationKPI::get('NETPROFIT_VISITOR');
if (ConfigurationKPI::get('NETPROFIT_VISITOR_EXPIRE') < $time)
@@ -2311,7 +2311,7 @@ class AdminProductsControllerCore extends AdminController
$helper->id = 'box-products-stock';
$helper->icon = 'icon-archive';
$helper->color = 'color1';
$helper->title = $this->l('Items in Stock');
$helper->title = $this->l('Items in Stock', null, null, false);
if (ConfigurationKPI::get('PERCENT_PRODUCT_STOCK') !== false)
$helper->value = ConfigurationKPI::get('PERCENT_PRODUCT_STOCK');
if (ConfigurationKPI::get('PERCENT_PRODUCT_STOCK_EXPIRE') < $time)
@@ -2323,7 +2323,7 @@ class AdminProductsControllerCore extends AdminController
$helper->id = 'box-avg-gross-margin';
$helper->icon = 'icon-tags';
$helper->color = 'color2';
$helper->title = $this->l('Average Gross Margin');
$helper->title = $this->l('Average Gross Margin', null, null, false);
if (ConfigurationKPI::get('PRODUCT_AVG_GROSS_MARGIN') !== false)
$helper->value = ConfigurationKPI::get('PRODUCT_AVG_GROSS_MARGIN');
if (ConfigurationKPI::get('PRODUCT_AVG_GROSS_MARGIN_EXPIRE') < $time)
@@ -2334,8 +2334,8 @@ class AdminProductsControllerCore extends AdminController
$helper->id = 'box-8020-sales-catalog';
$helper->icon = 'icon-beaker';
$helper->color = 'color3';
$helper->title = $this->l('80% of your sales');
$helper->subtitle = $this->l('30 days');
$helper->title = $this->l('80% of your sales', null, null, false);
$helper->subtitle = $this->l('30 days', null, null, false);
if (ConfigurationKPI::get('8020_SALES_CATALOG') !== false)
$helper->value = ConfigurationKPI::get('8020_SALES_CATALOG');
if (ConfigurationKPI::get('8020_SALES_CATALOG_EXPIRE') < $time)
@@ -2346,7 +2346,7 @@ class AdminProductsControllerCore extends AdminController
$helper->id = 'box-disabled-products';
$helper->icon = 'icon-off';
$helper->color = 'color4';
$helper->title = $this->l('Disabled Products');
$helper->title = $this->l('Disabled Products', null, null, false);
if (ConfigurationKPI::get('DISABLED_PRODUCTS') !== false)
$helper->value = ConfigurationKPI::get('DISABLED_PRODUCTS');
if (ConfigurationKPI::get('DISABLED_PRODUCTS_EXPIRE') < $time)
@@ -1294,7 +1294,7 @@ class AdminTranslationsControllerCore extends AdminController
$helper->id = 'box-languages';
$helper->icon = 'icon-microphone';
$helper->color = 'color1';
$helper->title = $this->l('Enabled Languages');
$helper->title = $this->l('Enabled Languages', null, null, false);
if (ConfigurationKPI::get('ENABLED_LANGUAGES') !== false)
$helper->value = ConfigurationKPI::get('ENABLED_LANGUAGES');
if (ConfigurationKPI::get('ENABLED_LANGUAGES_EXPIRE') < $time)
@@ -1305,8 +1305,8 @@ class AdminTranslationsControllerCore extends AdminController
$helper->id = 'box-country';
$helper->icon = 'icon-home';
$helper->color = 'color2';
$helper->title = $this->l('Main Country');
$helper->subtitle = $this->l('30 Days');
$helper->title = $this->l('Main Country', null, null, false);
$helper->subtitle = $this->l('30 Days', null, null, false);
if (ConfigurationKPI::get('MAIN_COUNTRY', $this->context->language->id) !== false)
$helper->value = ConfigurationKPI::get('MAIN_COUNTRY', $this->context->language->id);
if (ConfigurationKPI::get('MAIN_COUNTRY_EXPIRE', $this->context->language->id) < $time)
@@ -1317,7 +1317,7 @@ class AdminTranslationsControllerCore extends AdminController
$helper->id = 'box-translations';
$helper->icon = 'icon-list';
$helper->color = 'color3';
$helper->title = $this->l('Front Office Translations');
$helper->title = $this->l('Front Office Translations', null, null, false);
if (ConfigurationKPI::get('FRONTOFFICE_TRANSLATIONS') !== false)
$helper->value = ConfigurationKPI::get('FRONTOFFICE_TRANSLATIONS');
if (ConfigurationKPI::get('FRONTOFFICE_TRANSLATIONS_EXPIRE') < $time)
+64 -58
View File
@@ -11,63 +11,69 @@ var unicode_hack = (function() {
Extracted from Unicode specification, version 5.0.0, source:
http://unicode.org/versions/Unicode5.0.0/
*/
var unicodeCategories = {
Pi:'[\u00ab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c]',
Sk:'[\u005e\u0060\u00a8\u00af\u00b4\u00b8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02ed\u02ef-\u02ff\u0374\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\uff3e\uff40\uffe3]',
Sm:'[\u002b\u003c-\u003e\u007c\u007e\u00ac\u00b1\u00d7\u00f7\u03f6\u2044\u2052\u207a-\u207c\u208a-\u208c\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2308-\u230b\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27ca\u27d0-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec]',
So:'[\u00a6\u00a7\u00a9\u00ae\u00b0\u00b6\u0482\u060e\u060f\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0cf1\u0cf2\u0f01-\u0f03\u0f13-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fcf\u1360\u1390-\u1399\u1940\u19e0-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23e7\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u269c\u26a0-\u26b2\u2701-\u2704\u2706-\u2709\u270c-\u2727\u2729-\u274b\u274d\u274f-\u2752\u2756\u2758-\u275e\u2761-\u2767\u2794\u2798-\u27af\u27b1-\u27be\u2800-\u28ff\u2b00-\u2b1a\u2b20-\u2b23\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31cf\u3200-\u321e\u322a-\u3243\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd]',
Po:'[\u0021-\u0023\u0025-\u0027\u002a\u002c\u002e\u002f\u003a\u003b\u003f\u0040\u005c\u00a1\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f85\u0fd0\u0fd1\u104a-\u104f\u10fb\u1361-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u19de\u19df\u1a1e\u1a1f\u1b5a-\u1b60\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u3001-\u3003\u303d\u30fb\ua874-\ua877\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]',
Mn:'[\u0300-\u036f\u0483-\u0486\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u0615\u064b-\u065e\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0901\u0902\u093c\u0941-\u0948\u094d\u0951-\u0954\u0962\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a70\u0a71\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41-\u0b43\u0b4d\u0b56\u0b82\u0bc0\u0bcd\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0ce2\u0ce3\u0d41-\u0d43\u0d4d\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032\u1036\u1037\u1039\u1058\u1059\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1dc0-\u1dca\u1dfe\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20ef\u302a-\u302f\u3099\u309a\ua806\ua80b\ua825\ua826\ufb1e\ufe00-\ufe0f\ufe20-\ufe23]',
Ps:'[\u0028\u005b\u007b\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2329\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62]',
Cc:'[\u0000-\u001f\u007f-\u009f]',
Cf:'[\u00ad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u202a-\u202e\u2060-\u2063\u206a-\u206f\ufeff\ufff9-\ufffb]',
Ll:'[\u0061-\u007a\u00aa\u00b5\u00ba\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u037b-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0561-\u0587\u1d00-\u1d2b\u1d62-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9b\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1f00-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c74\u2c76\u2c77\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2d00-\u2d25\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a]',
Lm:'[\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ee\u037a\u0559\u0640\u06e5\u06e6\u07f4\u07f5\u07fa\u0e46\u0ec6\u10fc\u17d7\u1843\u1d2c-\u1d61\u1d78\u1d9b-\u1dbf\u2090-\u2094\u2d6f\u3005\u3031-\u3035\u303b\u309d\u309e\u30fc-\u30fe\ua015\ua717-\ua71a\uff70\uff9e\uff9f]',
Lo:'[\u01bb\u01c0-\u01c3\u0294\u05d0-\u05ea\u05f0-\u05f2\u0621-\u063a\u0641-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u076d\u0780-\u07a5\u07b1\u07ca-\u07ea\u0904-\u0939\u093d\u0950\u0958-\u0961\u097b-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d28\u0d2a-\u0d39\u0d60\u0d61\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0edc\u0edd\u0f00\u0f40-\u0f47\u0f49-\u0f6a\u0f88-\u0f8b\u1000-\u1021\u1023-\u1027\u1029\u102a\u1050-\u1055\u10d0-\u10fa\u1100-\u1159\u115f-\u11a2\u11a8-\u11f9\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u1676\u1681-\u169a\u16a0-\u16ea\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc\u1820-\u1842\u1844-\u1877\u1880-\u18a8\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19a9\u19c1-\u19c7\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u2135-\u2138\u2d30-\u2d65\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006\u303c\u3041-\u3096\u309f\u30a1-\u30fa\u30ff\u3105-\u312c\u3131-\u318e\u31a0-\u31b7\u31f0-\u31ff\u3400\u4db5\u4e00\u9fbb\ua000-\ua014\ua016-\ua48c\ua800\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\uac00\ud7a3\uf900-\ufa2d\ufa30-\ufa6a\ufa70-\ufad9\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]',
Co:'[\ue000\uf8ff]',
Nd:'[\u0030-\u0039\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1b50-\u1b59\uff10-\uff19]',
Lt:'[\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc]',
Lu:'[\u0041-\u005a\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0531-\u0556\u10a0-\u10c5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c75\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\uff21-\uff3a]',
Cs:'[\ud800\udb7f\udb80\udbff\udc00\udfff]',
Zl:'[\u2028]',
Nl:'[\u16ee-\u16f0\u2160-\u2182\u3007\u3021-\u3029\u3038-\u303a]',
Zp:'[\u2029]',
No:'[\u00b2\u00b3\u00b9\u00bc-\u00be\u09f4-\u09f9\u0bf0-\u0bf2\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u2070\u2074-\u2079\u2080-\u2089\u2153-\u215f\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3192-\u3195\u3220-\u3229\u3251-\u325f\u3280-\u3289\u32b1-\u32bf]',
Zs:'[\u0020\u00a0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]',
Sc:'[\u0024\u00a2-\u00a5\u060b\u09f2\u09f3\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20b5\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6]',
Pc:'[\u005f\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f]',
Pd:'[\u002d\u058a\u1806\u2010-\u2015\u2e17\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d]',
Pe:'[\u0029\u005d\u007d\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63]',
Pf:'[\u00bb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d]',
Me:'[\u0488\u0489\u06de\u20dd-\u20e0\u20e2-\u20e4]',
Mc:'[\u0903\u093e-\u0940\u0949-\u094c\u0982\u0983\u09be-\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102c\u1031\u1038\u1056\u1057\u17b6\u17be-\u17c5\u17c7\u17c8\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u19b0-\u19c0\u19c8\u19c9\u1a19-\u1a1b\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43\u1b44\ua802\ua823\ua824\ua827]'
};
/* Also supports the general category (only the first letter) */
var firstLetters = {};
for ( var p in unicodeCategories ) {
if ( firstLetters[p[0]] )
firstLetters[p[0]] = unicodeCategories[p].substring(0,unicodeCategories[p].length-1) + firstLetters[p[0]].substring(1);
else
firstLetters[p[0]] = unicodeCategories[p];
}
for ( var p in firstLetters )
unicodeCategories[p] = firstLetters[p];
/* Gets a regex written in a dialect that supports unicode categories and
translates it to a dialect supported by JavaScript. */
return function(regexpString) {
var modifiers = "";
if ( regexpString instanceof RegExp ) {
modifiers = (regexpString.global ? "g" : "") +
(regexpString.ignoreCase ? "i" : "") +
(regexpString.multiline ? "m" : "");
regexpString = regexpString.source;
}
regexpString = regexpString.replace(/\\p\{(..?)\}/g, function(match,group) {
return unicodeCategories[group] || match;
});
return new RegExp(regexpString,modifiers);
};
var unicodeCategories = {
Pi:'[\u00ab\u2018\u201b\u201c\u201f\u2039\u2e02\u2e04\u2e09\u2e0c\u2e1c]',
Sk:'[\u005e\u0060\u00a8\u00af\u00b4\u00b8\u02c2-\u02c5\u02d2-\u02df\u02e5-\u02ed\u02ef-\u02ff\u0374\u0375\u0384\u0385\u1fbd\u1fbf-\u1fc1\u1fcd-\u1fcf\u1fdd-\u1fdf\u1fed-\u1fef\u1ffd\u1ffe\u309b\u309c\ua700-\ua716\ua720\ua721\uff3e\uff40\uffe3]',
Sm:'[\u002b\u003c-\u003e\u007c\u007e\u00ac\u00b1\u00d7\u00f7\u03f6\u2044\u2052\u207a-\u207c\u208a-\u208c\u2140-\u2144\u214b\u2190-\u2194\u219a\u219b\u21a0\u21a3\u21a6\u21ae\u21ce\u21cf\u21d2\u21d4\u21f4-\u22ff\u2308-\u230b\u2320\u2321\u237c\u239b-\u23b3\u23dc-\u23e1\u25b7\u25c1\u25f8-\u25ff\u266f\u27c0-\u27c4\u27c7-\u27ca\u27d0-\u27e5\u27f0-\u27ff\u2900-\u2982\u2999-\u29d7\u29dc-\u29fb\u29fe-\u2aff\ufb29\ufe62\ufe64-\ufe66\uff0b\uff1c-\uff1e\uff5c\uff5e\uffe2\uffe9-\uffec]',
So:'[\u00a6\u00a7\u00a9\u00ae\u00b0\u00b6\u0482\u060e\u060f\u06e9\u06fd\u06fe\u07f6\u09fa\u0b70\u0bf3-\u0bf8\u0bfa\u0cf1\u0cf2\u0f01-\u0f03\u0f13-\u0f17\u0f1a-\u0f1f\u0f34\u0f36\u0f38\u0fbe-\u0fc5\u0fc7-\u0fcc\u0fcf\u1360\u1390-\u1399\u1940\u19e0-\u19ff\u1b61-\u1b6a\u1b74-\u1b7c\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211e-\u2123\u2125\u2127\u2129\u212e\u213a\u213b\u214a\u214c\u214d\u2195-\u2199\u219c-\u219f\u21a1\u21a2\u21a4\u21a5\u21a7-\u21ad\u21af-\u21cd\u21d0\u21d1\u21d3\u21d5-\u21f3\u2300-\u2307\u230c-\u231f\u2322-\u2328\u232b-\u237b\u237d-\u239a\u23b4-\u23db\u23e2-\u23e7\u2400-\u2426\u2440-\u244a\u249c-\u24e9\u2500-\u25b6\u25b8-\u25c0\u25c2-\u25f7\u2600-\u266e\u2670-\u269c\u26a0-\u26b2\u2701-\u2704\u2706-\u2709\u270c-\u2727\u2729-\u274b\u274d\u274f-\u2752\u2756\u2758-\u275e\u2761-\u2767\u2794\u2798-\u27af\u27b1-\u27be\u2800-\u28ff\u2b00-\u2b1a\u2b20-\u2b23\u2ce5-\u2cea\u2e80-\u2e99\u2e9b-\u2ef3\u2f00-\u2fd5\u2ff0-\u2ffb\u3004\u3012\u3013\u3020\u3036\u3037\u303e\u303f\u3190\u3191\u3196-\u319f\u31c0-\u31cf\u3200-\u321e\u322a-\u3243\u3250\u3260-\u327f\u328a-\u32b0\u32c0-\u32fe\u3300-\u33ff\u4dc0-\u4dff\ua490-\ua4c6\ua828-\ua82b\ufdfd\uffe4\uffe8\uffed\uffee\ufffc\ufffd]',
Po:'[\u0021-\u0023\u0025-\u0027\u002a\u002c\u002e\u002f\u003a\u003b\u003f\u0040\u005c\u00a1\u00b7\u00bf\u037e\u0387\u055a-\u055f\u0589\u05be\u05c0\u05c3\u05c6\u05f3\u05f4\u060c\u060d\u061b\u061e\u061f\u066a-\u066d\u06d4\u0700-\u070d\u07f7-\u07f9\u0964\u0965\u0970\u0df4\u0e4f\u0e5a\u0e5b\u0f04-\u0f12\u0f85\u0fd0\u0fd1\u104a-\u104f\u10fb\u1361-\u1368\u166d\u166e\u16eb-\u16ed\u1735\u1736\u17d4-\u17d6\u17d8-\u17da\u1800-\u1805\u1807-\u180a\u1944\u1945\u19de\u19df\u1a1e\u1a1f\u1b5a-\u1b60\u2016\u2017\u2020-\u2027\u2030-\u2038\u203b-\u203e\u2041-\u2043\u2047-\u2051\u2053\u2055-\u205e\u2cf9-\u2cfc\u2cfe\u2cff\u2e00\u2e01\u2e06-\u2e08\u2e0b\u2e0e-\u2e16\u3001-\u3003\u303d\u30fb\ua874-\ua877\ufe10-\ufe16\ufe19\ufe30\ufe45\ufe46\ufe49-\ufe4c\ufe50-\ufe52\ufe54-\ufe57\ufe5f-\ufe61\ufe68\ufe6a\ufe6b\uff01-\uff03\uff05-\uff07\uff0a\uff0c\uff0e\uff0f\uff1a\uff1b\uff1f\uff20\uff3c\uff61\uff64\uff65]',
Mn:'[\u0300-\u036f\u0483-\u0486\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u0615\u064b-\u065e\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0901\u0902\u093c\u0941-\u0948\u094d\u0951-\u0954\u0962\u0963\u0981\u09bc\u09c1-\u09c4\u09cd\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a70\u0a71\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3f\u0b41-\u0b43\u0b4d\u0b56\u0b82\u0bc0\u0bcd\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0cbc\u0cbf\u0cc6\u0ccc\u0ccd\u0ce2\u0ce3\u0d41-\u0d43\u0d4d\u0dca\u0dd2-\u0dd4\u0dd6\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032\u1036\u1037\u1039\u1058\u1059\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1dc0-\u1dca\u1dfe\u1dff\u20d0-\u20dc\u20e1\u20e5-\u20ef\u302a-\u302f\u3099\u309a\ua806\ua80b\ua825\ua826\ufb1e\ufe00-\ufe0f\ufe20-\ufe23]',
Ps:'[\u0028\u005b\u007b\u0f3a\u0f3c\u169b\u201a\u201e\u2045\u207d\u208d\u2329\u2768\u276a\u276c\u276e\u2770\u2772\u2774\u27c5\u27e6\u27e8\u27ea\u2983\u2985\u2987\u2989\u298b\u298d\u298f\u2991\u2993\u2995\u2997\u29d8\u29da\u29fc\u3008\u300a\u300c\u300e\u3010\u3014\u3016\u3018\u301a\u301d\ufd3e\ufe17\ufe35\ufe37\ufe39\ufe3b\ufe3d\ufe3f\ufe41\ufe43\ufe47\ufe59\ufe5b\ufe5d\uff08\uff3b\uff5b\uff5f\uff62]',
Cc:'[\u0000-\u001f\u007f-\u009f]',
Cf:'[\u00ad\u0600-\u0603\u06dd\u070f\u17b4\u17b5\u200b-\u200f\u202a-\u202e\u2060-\u2063\u206a-\u206f\ufeff\ufff9-\ufffb]',
Ll:'[\u0061-\u007a\u00aa\u00b5\u00ba\u00df-\u00f6\u00f8-\u00ff\u0101\u0103\u0105\u0107\u0109\u010b\u010d\u010f\u0111\u0113\u0115\u0117\u0119\u011b\u011d\u011f\u0121\u0123\u0125\u0127\u0129\u012b\u012d\u012f\u0131\u0133\u0135\u0137\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u0149\u014b\u014d\u014f\u0151\u0153\u0155\u0157\u0159\u015b\u015d\u015f\u0161\u0163\u0165\u0167\u0169\u016b\u016d\u016f\u0171\u0173\u0175\u0177\u017a\u017c\u017e-\u0180\u0183\u0185\u0188\u018c\u018d\u0192\u0195\u0199-\u019b\u019e\u01a1\u01a3\u01a5\u01a8\u01aa\u01ab\u01ad\u01b0\u01b4\u01b6\u01b9\u01ba\u01bd-\u01bf\u01c6\u01c9\u01cc\u01ce\u01d0\u01d2\u01d4\u01d6\u01d8\u01da\u01dc\u01dd\u01df\u01e1\u01e3\u01e5\u01e7\u01e9\u01eb\u01ed\u01ef\u01f0\u01f3\u01f5\u01f9\u01fb\u01fd\u01ff\u0201\u0203\u0205\u0207\u0209\u020b\u020d\u020f\u0211\u0213\u0215\u0217\u0219\u021b\u021d\u021f\u0221\u0223\u0225\u0227\u0229\u022b\u022d\u022f\u0231\u0233-\u0239\u023c\u023f\u0240\u0242\u0247\u0249\u024b\u024d\u024f-\u0293\u0295-\u02af\u037b-\u037d\u0390\u03ac-\u03ce\u03d0\u03d1\u03d5-\u03d7\u03d9\u03db\u03dd\u03df\u03e1\u03e3\u03e5\u03e7\u03e9\u03eb\u03ed\u03ef-\u03f3\u03f5\u03f8\u03fb\u03fc\u0430-\u045f\u0461\u0463\u0465\u0467\u0469\u046b\u046d\u046f\u0471\u0473\u0475\u0477\u0479\u047b\u047d\u047f\u0481\u048b\u048d\u048f\u0491\u0493\u0495\u0497\u0499\u049b\u049d\u049f\u04a1\u04a3\u04a5\u04a7\u04a9\u04ab\u04ad\u04af\u04b1\u04b3\u04b5\u04b7\u04b9\u04bb\u04bd\u04bf\u04c2\u04c4\u04c6\u04c8\u04ca\u04cc\u04ce\u04cf\u04d1\u04d3\u04d5\u04d7\u04d9\u04db\u04dd\u04df\u04e1\u04e3\u04e5\u04e7\u04e9\u04eb\u04ed\u04ef\u04f1\u04f3\u04f5\u04f7\u04f9\u04fb\u04fd\u04ff\u0501\u0503\u0505\u0507\u0509\u050b\u050d\u050f\u0511\u0513\u0561-\u0587\u1d00-\u1d2b\u1d62-\u1d77\u1d79-\u1d9a\u1e01\u1e03\u1e05\u1e07\u1e09\u1e0b\u1e0d\u1e0f\u1e11\u1e13\u1e15\u1e17\u1e19\u1e1b\u1e1d\u1e1f\u1e21\u1e23\u1e25\u1e27\u1e29\u1e2b\u1e2d\u1e2f\u1e31\u1e33\u1e35\u1e37\u1e39\u1e3b\u1e3d\u1e3f\u1e41\u1e43\u1e45\u1e47\u1e49\u1e4b\u1e4d\u1e4f\u1e51\u1e53\u1e55\u1e57\u1e59\u1e5b\u1e5d\u1e5f\u1e61\u1e63\u1e65\u1e67\u1e69\u1e6b\u1e6d\u1e6f\u1e71\u1e73\u1e75\u1e77\u1e79\u1e7b\u1e7d\u1e7f\u1e81\u1e83\u1e85\u1e87\u1e89\u1e8b\u1e8d\u1e8f\u1e91\u1e93\u1e95-\u1e9b\u1ea1\u1ea3\u1ea5\u1ea7\u1ea9\u1eab\u1ead\u1eaf\u1eb1\u1eb3\u1eb5\u1eb7\u1eb9\u1ebb\u1ebd\u1ebf\u1ec1\u1ec3\u1ec5\u1ec7\u1ec9\u1ecb\u1ecd\u1ecf\u1ed1\u1ed3\u1ed5\u1ed7\u1ed9\u1edb\u1edd\u1edf\u1ee1\u1ee3\u1ee5\u1ee7\u1ee9\u1eeb\u1eed\u1eef\u1ef1\u1ef3\u1ef5\u1ef7\u1ef9\u1f00-\u1f07\u1f10-\u1f15\u1f20-\u1f27\u1f30-\u1f37\u1f40-\u1f45\u1f50-\u1f57\u1f60-\u1f67\u1f70-\u1f7d\u1f80-\u1f87\u1f90-\u1f97\u1fa0-\u1fa7\u1fb0-\u1fb4\u1fb6\u1fb7\u1fbe\u1fc2-\u1fc4\u1fc6\u1fc7\u1fd0-\u1fd3\u1fd6\u1fd7\u1fe0-\u1fe7\u1ff2-\u1ff4\u1ff6\u1ff7\u2071\u207f\u210a\u210e\u210f\u2113\u212f\u2134\u2139\u213c\u213d\u2146-\u2149\u214e\u2184\u2c30-\u2c5e\u2c61\u2c65\u2c66\u2c68\u2c6a\u2c6c\u2c74\u2c76\u2c77\u2c81\u2c83\u2c85\u2c87\u2c89\u2c8b\u2c8d\u2c8f\u2c91\u2c93\u2c95\u2c97\u2c99\u2c9b\u2c9d\u2c9f\u2ca1\u2ca3\u2ca5\u2ca7\u2ca9\u2cab\u2cad\u2caf\u2cb1\u2cb3\u2cb5\u2cb7\u2cb9\u2cbb\u2cbd\u2cbf\u2cc1\u2cc3\u2cc5\u2cc7\u2cc9\u2ccb\u2ccd\u2ccf\u2cd1\u2cd3\u2cd5\u2cd7\u2cd9\u2cdb\u2cdd\u2cdf\u2ce1\u2ce3\u2ce4\u2d00-\u2d25\ufb00-\ufb06\ufb13-\ufb17\uff41-\uff5a]',
Lm:'[\u02b0-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ee\u037a\u0559\u0640\u06e5\u06e6\u07f4\u07f5\u07fa\u0e46\u0ec6\u10fc\u17d7\u1843\u1d2c-\u1d61\u1d78\u1d9b-\u1dbf\u2090-\u2094\u2d6f\u3005\u3031-\u3035\u303b\u309d\u309e\u30fc-\u30fe\ua015\ua717-\ua71a\uff70\uff9e\uff9f]',
Lo:'[\u01bb\u01c0-\u01c3\u0294\u05d0-\u05ea\u05f0-\u05f2\u0621-\u063a\u0641-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u076d\u0780-\u07a5\u07b1\u07ca-\u07ea\u0904-\u0939\u093d\u0950\u0958-\u0961\u097b-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d28\u0d2a-\u0d39\u0d60\u0d61\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e45\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0edc\u0edd\u0f00\u0f40-\u0f47\u0f49-\u0f6a\u0f88-\u0f8b\u1000-\u1021\u1023-\u1027\u1029\u102a\u1050-\u1055\u10d0-\u10fa\u1100-\u1159\u115f-\u11a2\u11a8-\u11f9\u1200-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u1676\u1681-\u169a\u16a0-\u16ea\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17dc\u1820-\u1842\u1844-\u1877\u1880-\u18a8\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19a9\u19c1-\u19c7\u1a00-\u1a16\u1b05-\u1b33\u1b45-\u1b4b\u2135-\u2138\u2d30-\u2d65\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3006\u303c\u3041-\u3096\u309f\u30a1-\u30fa\u30ff\u3105-\u312c\u3131-\u318e\u31a0-\u31b7\u31f0-\u31ff\u3400\u4db5\u4e00\u9fbb\ua000-\ua014\ua016-\ua48c\ua800\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\uac00\ud7a3\uf900-\ufa2d\ufa30-\ufa6a\ufa70-\ufad9\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff66-\uff6f\uff71-\uff9d\uffa0-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc]',
Co:'[\ue000\uf8ff]',
Nd:'[\u0030-\u0039\u0660-\u0669\u06f0-\u06f9\u07c0-\u07c9\u0966-\u096f\u09e6-\u09ef\u0a66-\u0a6f\u0ae6-\u0aef\u0b66-\u0b6f\u0be6-\u0bef\u0c66-\u0c6f\u0ce6-\u0cef\u0d66-\u0d6f\u0e50-\u0e59\u0ed0-\u0ed9\u0f20-\u0f29\u1040-\u1049\u17e0-\u17e9\u1810-\u1819\u1946-\u194f\u19d0-\u19d9\u1b50-\u1b59\uff10-\uff19]',
Lt:'[\u01c5\u01c8\u01cb\u01f2\u1f88-\u1f8f\u1f98-\u1f9f\u1fa8-\u1faf\u1fbc\u1fcc\u1ffc]',
Lu:'[\u0041-\u005a\u00c0-\u00d6\u00d8-\u00de\u0100\u0102\u0104\u0106\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0139\u013b\u013d\u013f\u0141\u0143\u0145\u0147\u014a\u014c\u014e\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u0179\u017b\u017d\u0181\u0182\u0184\u0186\u0187\u0189-\u018b\u018e-\u0191\u0193\u0194\u0196-\u0198\u019c\u019d\u019f\u01a0\u01a2\u01a4\u01a6\u01a7\u01a9\u01ac\u01ae\u01af\u01b1-\u01b3\u01b5\u01b7\u01b8\u01bc\u01c4\u01c7\u01ca\u01cd\u01cf\u01d1\u01d3\u01d5\u01d7\u01d9\u01db\u01de\u01e0\u01e2\u01e4\u01e6\u01e8\u01ea\u01ec\u01ee\u01f1\u01f4\u01f6-\u01f8\u01fa\u01fc\u01fe\u0200\u0202\u0204\u0206\u0208\u020a\u020c\u020e\u0210\u0212\u0214\u0216\u0218\u021a\u021c\u021e\u0220\u0222\u0224\u0226\u0228\u022a\u022c\u022e\u0230\u0232\u023a\u023b\u023d\u023e\u0241\u0243-\u0246\u0248\u024a\u024c\u024e\u0386\u0388-\u038a\u038c\u038e\u038f\u0391-\u03a1\u03a3-\u03ab\u03d2-\u03d4\u03d8\u03da\u03dc\u03de\u03e0\u03e2\u03e4\u03e6\u03e8\u03ea\u03ec\u03ee\u03f4\u03f7\u03f9\u03fa\u03fd-\u042f\u0460\u0462\u0464\u0466\u0468\u046a\u046c\u046e\u0470\u0472\u0474\u0476\u0478\u047a\u047c\u047e\u0480\u048a\u048c\u048e\u0490\u0492\u0494\u0496\u0498\u049a\u049c\u049e\u04a0\u04a2\u04a4\u04a6\u04a8\u04aa\u04ac\u04ae\u04b0\u04b2\u04b4\u04b6\u04b8\u04ba\u04bc\u04be\u04c0\u04c1\u04c3\u04c5\u04c7\u04c9\u04cb\u04cd\u04d0\u04d2\u04d4\u04d6\u04d8\u04da\u04dc\u04de\u04e0\u04e2\u04e4\u04e6\u04e8\u04ea\u04ec\u04ee\u04f0\u04f2\u04f4\u04f6\u04f8\u04fa\u04fc\u04fe\u0500\u0502\u0504\u0506\u0508\u050a\u050c\u050e\u0510\u0512\u0531-\u0556\u10a0-\u10c5\u1e00\u1e02\u1e04\u1e06\u1e08\u1e0a\u1e0c\u1e0e\u1e10\u1e12\u1e14\u1e16\u1e18\u1e1a\u1e1c\u1e1e\u1e20\u1e22\u1e24\u1e26\u1e28\u1e2a\u1e2c\u1e2e\u1e30\u1e32\u1e34\u1e36\u1e38\u1e3a\u1e3c\u1e3e\u1e40\u1e42\u1e44\u1e46\u1e48\u1e4a\u1e4c\u1e4e\u1e50\u1e52\u1e54\u1e56\u1e58\u1e5a\u1e5c\u1e5e\u1e60\u1e62\u1e64\u1e66\u1e68\u1e6a\u1e6c\u1e6e\u1e70\u1e72\u1e74\u1e76\u1e78\u1e7a\u1e7c\u1e7e\u1e80\u1e82\u1e84\u1e86\u1e88\u1e8a\u1e8c\u1e8e\u1e90\u1e92\u1e94\u1ea0\u1ea2\u1ea4\u1ea6\u1ea8\u1eaa\u1eac\u1eae\u1eb0\u1eb2\u1eb4\u1eb6\u1eb8\u1eba\u1ebc\u1ebe\u1ec0\u1ec2\u1ec4\u1ec6\u1ec8\u1eca\u1ecc\u1ece\u1ed0\u1ed2\u1ed4\u1ed6\u1ed8\u1eda\u1edc\u1ede\u1ee0\u1ee2\u1ee4\u1ee6\u1ee8\u1eea\u1eec\u1eee\u1ef0\u1ef2\u1ef4\u1ef6\u1ef8\u1f08-\u1f0f\u1f18-\u1f1d\u1f28-\u1f2f\u1f38-\u1f3f\u1f48-\u1f4d\u1f59\u1f5b\u1f5d\u1f5f\u1f68-\u1f6f\u1fb8-\u1fbb\u1fc8-\u1fcb\u1fd8-\u1fdb\u1fe8-\u1fec\u1ff8-\u1ffb\u2102\u2107\u210b-\u210d\u2110-\u2112\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u2130-\u2133\u213e\u213f\u2145\u2183\u2c00-\u2c2e\u2c60\u2c62-\u2c64\u2c67\u2c69\u2c6b\u2c75\u2c80\u2c82\u2c84\u2c86\u2c88\u2c8a\u2c8c\u2c8e\u2c90\u2c92\u2c94\u2c96\u2c98\u2c9a\u2c9c\u2c9e\u2ca0\u2ca2\u2ca4\u2ca6\u2ca8\u2caa\u2cac\u2cae\u2cb0\u2cb2\u2cb4\u2cb6\u2cb8\u2cba\u2cbc\u2cbe\u2cc0\u2cc2\u2cc4\u2cc6\u2cc8\u2cca\u2ccc\u2cce\u2cd0\u2cd2\u2cd4\u2cd6\u2cd8\u2cda\u2cdc\u2cde\u2ce0\u2ce2\uff21-\uff3a]',
Cs:'[\ud800\udb7f\udb80\udbff\udc00\udfff]',
Zl:'[\u2028]',
Nl:'[\u16ee-\u16f0\u2160-\u2182\u3007\u3021-\u3029\u3038-\u303a]',
Zp:'[\u2029]',
No:'[\u00b2\u00b3\u00b9\u00bc-\u00be\u09f4-\u09f9\u0bf0-\u0bf2\u0f2a-\u0f33\u1369-\u137c\u17f0-\u17f9\u2070\u2074-\u2079\u2080-\u2089\u2153-\u215f\u2460-\u249b\u24ea-\u24ff\u2776-\u2793\u2cfd\u3192-\u3195\u3220-\u3229\u3251-\u325f\u3280-\u3289\u32b1-\u32bf]',
Zs:'[\u0020\u00a0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]',
Sc:'[\u0024\u00a2-\u00a5\u060b\u09f2\u09f3\u0af1\u0bf9\u0e3f\u17db\u20a0-\u20b5\ufdfc\ufe69\uff04\uffe0\uffe1\uffe5\uffe6]',
Pc:'[\u005f\u203f\u2040\u2054\ufe33\ufe34\ufe4d-\ufe4f\uff3f]',
Pd:'[\u002d\u058a\u1806\u2010-\u2015\u2e17\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d]',
Pe:'[\u0029\u005d\u007d\u0f3b\u0f3d\u169c\u2046\u207e\u208e\u232a\u2769\u276b\u276d\u276f\u2771\u2773\u2775\u27c6\u27e7\u27e9\u27eb\u2984\u2986\u2988\u298a\u298c\u298e\u2990\u2992\u2994\u2996\u2998\u29d9\u29db\u29fd\u3009\u300b\u300d\u300f\u3011\u3015\u3017\u3019\u301b\u301e\u301f\ufd3f\ufe18\ufe36\ufe38\ufe3a\ufe3c\ufe3e\ufe40\ufe42\ufe44\ufe48\ufe5a\ufe5c\ufe5e\uff09\uff3d\uff5d\uff60\uff63]',
Pf:'[\u00bb\u2019\u201d\u203a\u2e03\u2e05\u2e0a\u2e0d\u2e1d]',
Me:'[\u0488\u0489\u06de\u20dd-\u20e0\u20e2-\u20e4]',
Mc:'[\u0903\u093e-\u0940\u0949-\u094c\u0982\u0983\u09be-\u09c0\u09c7\u09c8\u09cb\u09cc\u09d7\u0a03\u0a3e-\u0a40\u0a83\u0abe-\u0ac0\u0ac9\u0acb\u0acc\u0b02\u0b03\u0b3e\u0b40\u0b47\u0b48\u0b4b\u0b4c\u0b57\u0bbe\u0bbf\u0bc1\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcc\u0bd7\u0c01-\u0c03\u0c41-\u0c44\u0c82\u0c83\u0cbe\u0cc0-\u0cc4\u0cc7\u0cc8\u0cca\u0ccb\u0cd5\u0cd6\u0d02\u0d03\u0d3e-\u0d40\u0d46-\u0d48\u0d4a-\u0d4c\u0d57\u0d82\u0d83\u0dcf-\u0dd1\u0dd8-\u0ddf\u0df2\u0df3\u0f3e\u0f3f\u0f7f\u102c\u1031\u1038\u1056\u1057\u17b6\u17be-\u17c5\u17c7\u17c8\u1923-\u1926\u1929-\u192b\u1930\u1931\u1933-\u1938\u19b0-\u19c0\u19c8\u19c9\u1a19-\u1a1b\u1b04\u1b35\u1b3b\u1b3d-\u1b41\u1b43\u1b44\ua802\ua823\ua824\ua827]'
};
/* Also supports the general category (only the first letter) */
var firstLetters = {};
for (var p in unicodeCategories)
{
if (firstLetters[p[0]])
firstLetters[p[0]] = unicodeCategories[p].substring(0,unicodeCategories[p].length-1) + firstLetters[p[0]].substring(1);
else
firstLetters[p[0]] = unicodeCategories[p];
}
for (var p in firstLetters)
unicodeCategories[p] = firstLetters[p];
/* Gets a regex written in a dialect that supports unicode categories and
translates it to a dialect supported by JavaScript. */
return function(regexpString, classes)
{
var modifiers = "";
if ( regexpString instanceof RegExp ) {
modifiers = (regexpString.global ? "g" : "") +
(regexpString.ignoreCase ? "i" : "") +
(regexpString.multiline ? "m" : "");
regexpString = regexpString.source;
}
regexpString = regexpString.replace(/\\p\{(..?)\}/g, function(match,group) {
var unicode_categorie = unicodeCategories[group];
if (!classes)
unicode_category = unicode_categorie.replace(/\[(.*?)\]/g,"$1")
return unicode_category || match;
});
return new RegExp(regexpString,modifiers);
};
})();
/*
* 2007-2013 PrestaShop
@@ -143,7 +149,7 @@ function validate_isDniLite(s)
function validate_isEmail(s)
{
var reg = unicode_hack('^[a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&\'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+[._a-z\p{L}0-9-]*\.[a-z0-9]+$');
var reg = unicode_hack(/^[a-z\p{L}0-9!#$%&'*+\/=?^`{}|~_-]+[.a-z\p{L}0-9!#$%&'*+\/=?^`{}|~_-]*@[a-z\p{L}0-9]+[._a-z\p{L}0-9-]*\.[a-z\p{L}0-9]+$/i, false);
return reg.test(s);
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 824 B

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 824 B

After

Width:  |  Height:  |  Size: 983 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

@@ -25,12 +25,21 @@
* International Registered Trademark & Property of PrestaShop SA
*/
class DashGoalsAjaxModuleAdminController extends ModuleAdminController
class AdminDashgoalsController extends ModuleAdminController
{
public function initContent()
{
parent::initContent();
die ('Todo');
public function ajaxProcessChangeConfYear()
{
$year = (int)Tools::getValue('year');
Configuration::updateValue('PS_DASHGOALS_CURRENT_YEAR', $year);
$months = $this->module->setMonths($year);
$this->context->smarty->assign(array(
'currency' => $this->context->currency,
'goals_year' => $year,
'goals_months' => $months,
'link' => $this->context->link
));
echo $this->module->display(_PS_MODULE_DIR_.$this->module->name.DIRECTORY_SEPARATOR.$this->module->name.'.php', 'config.tpl');
}
}
+40 -8
View File
@@ -60,6 +60,7 @@ class Dashgoals extends Module
public function install()
{
Configuration::updateValue('PS_DASHGOALS_CURRENT_YEAR', date('Y'));
for ($month = '01'; $month <= 12; $month = sprintf('%02d', $month + 1))
{
$key = strtoupper('dashgoals_traffic_'.$month.'_'.date('Y'));
@@ -73,23 +74,44 @@ class Dashgoals extends Module
ConfigurationKPI::updateValue($key, 80);
}
// Prepare tab
$tab = new Tab();
$tab->active = 1;
$tab->class_name = "AdminDashgoals";
$tab->name = array();
foreach (Language::getLanguages(true) as $lang)
$tab->name[$lang['id_lang']] = 'Dashgoals';
$tab->id_parent = -1;
$tab->module = $this->name;
return (
parent::install()
$tab->add()
&& parent::install()
&& $this->registerHook('dashboardZoneTwo')
&& $this->registerHook('dashboardData')
&& $this->registerHook('displayBackOfficeHeader')
);
}
public function uninstall()
{
$id_tab = (int)Tab::getIdFromClassName('AdminDashgoals');
if ($id_tab)
{
$tab = new Tab($id_tab);
$tab->delete();
}
return parent::uninstall();
}
public function hookDisplayBackOfficeHeader()
{
if (get_class($this->context->controller) == 'AdminDashboardController')
$this->context->controller->addJs($this->_path.'views/js/'.$this->name.'.js');
}
public function hookDashboardZoneTwo($params)
public function setMonths($year)
{
$year = date('Y');
$months = array();
for ($i = '01'; $i <= 12; $i = sprintf('%02d', $i + 1))
$months[$i.'_'.$year] = array('label' => Dashgoals::$month_labels[$i], 'values' => array());
@@ -102,16 +124,26 @@ class Dashgoals extends Module
ConfigurationKPI::updateValue(strtoupper($key), (float)Tools::getValue($key));
$month_row['values'][$type] = ConfigurationKPI::get(strtoupper($key));
}
return $months;
}
$this->context->smarty->assign('currency', $this->context->currency);
$this->context->smarty->assign('goals_year', $year);
$this->context->smarty->assign('goals_months', $months);
public function hookDashboardZoneTwo($params)
{
$year = Configuration::get('PS_DASHGOALS_CURRENT_YEAR');
$months = $this->setMonths($year);
$this->context->smarty->assign(array(
'currency' => $this->context->currency,
'goals_year' => $year,
'goals_months' => $months,
'dashgoals_ajax_link' => $this->context->link->getAdminLink('AdminDashgoals')
));
return $this->display(__FILE__, 'dashboard_zone_two.tpl');
}
public function hookDashboardData($params)
{
$year = ((isset($params['extra']) && $params['extra'] > 1970 && $params['extra'] < 2999) ? $params['extra'] : date('Y'));
$year = ((isset($params['extra']) && $params['extra'] > 1970 && $params['extra'] < 2999) ? $params['extra'] : Configuration::get('PS_DASHGOALS_CURRENT_YEAR'));
return array('data_chart' => array('dash_goals_chart1' => $this->getChartData($year)));
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

+21 -15
View File
@@ -35,24 +35,30 @@ function dashgoals_changeYear(xward)
new_year = dashgoals_year + 1;
else if (xward == 'backward')
new_year = dashgoals_year - 1;
$('#dashgoals_title').text($('#dashgoals_title').text().replace(dashgoals_year, new_year));
dashgoals_year = new_year;
refreshDashboard('dashgoals', false, dashgoals_year);
}
function dashgoals_changeConfYear(xward)
{
// Todo
// getModuleLink('dashgoals', 'ajax', array('year' => $('#dashgoals_conftitle').text()), $ssl = null, $id_lang = null, $id_shop = null)
if (xward == 'forward')
$('#dashgoals_conftitle').text(parseInt($('#dashgoals_conftitle').text()) + 1);
else if (xward == 'backward')
$('#dashgoals_conftitle').text(parseInt($('#dashgoals_conftitle').text()) - 1);
$.ajax({
url: dashgoals_ajax_link,
data: {
ajax: true,
action: 'changeconfyear',
year: new_year
},
success : function(result){
$('#dashgoals_title').text($('#dashgoals_title').text().replace(dashgoals_year, new_year));
var hide_conf = $('#dashgoals_config').hasClass('hide');
$('#dashgoals_config').replaceWith(result);
dashgoals_calc_sales();
if (!hide_conf)
$('#dashgoals_config').removeClass('hide');
$('.dashgoals_config_input').off();
$('.dashgoals_config_input').keyup(function() { dashgoals_calc_sales(); });
dashgoals_year = new_year;
refreshDashboard('dashgoals', false, dashgoals_year);
}
});
}
$(document).ready(function() {
$('.dashgoals_config_input').keyup(function() {
dashgoals_calc_sales();
});
$('.dashgoals_config_input').keyup(function() { dashgoals_calc_sales(); });
dashgoals_calc_sales();
});
@@ -0,0 +1,73 @@
{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2013 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
<section id="dashgoals_config" class="dash_config hide">
<header><i class="icon-wrench"></i> {l s='Configuration' mod='dashgoals'}</header>
<form class="defaultForm form-horizontal" method="post" action="{$link->getAdminLink('AdminDashboard')}">
<table class="table table-condensed table-striped table-bordered">
<thead>
<tr>
<th>{$goals_year}</th>
<th>{l s='Traffic' mod='dashgoals'}</th>
<th>{l s='Conversion Rate' mod='dashgoals'}</th>
<th>{l s='Average Cart Value' mod='dashgoals'}</th>
<th>{l s='Sales' mod='dashgoals'}</th>
</tr>
</thead>
<tbody>
{foreach $goals_months as $month}
<tr>
<td>
{$month.label}
</td>
<td>
<div class="input-group">
<input id="dashgoals_traffic_{$month@key}" name="dashgoals_traffic_{$month@key}" class="dashgoals_config_input form-control"
value="{$month.values.traffic|intval}" />
</div>
</td>
<td>
<div class="input-group">
<input id="dashgoals_conversion_{$month@key}" name="dashgoals_conversion_{$month@key}" class="dashgoals_config_input form-control"
value="{$month.values.conversion|floatval}" />
<span class="input-group-addon">%</span>
</div>
</td>
<td>
<div class="input-group">
<span class="input-group-addon">{$currency->iso_code|escape}</span>
<input id="dashgoals_avg_cart_value_{$month@key}" name="dashgoals_avg_cart_value_{$month@key}" class="dashgoals_config_input form-control"
value="{$month.values.avg_cart_value|intval}" />
</div>
</td>
<td id="dashgoals_sales_{$month@key}" class="dashgoals_sales">
</td>
</tr>
{/foreach}
</tbody>
</table>
<input class="btn btn-default" name="submitDashGoals" type="submit" value="{l s='Save' mod='dashgoals'}" />
</form>
</section>
@@ -30,6 +30,8 @@
var priceDisplayPrecision = 0;
var dashgoals_year = {$goals_year|intval};
var dashgoals_ajax_link = '{$dashgoals_ajax_link|addslashes}';
</script>
<section id="dashgoals" class="panel widget">
@@ -46,58 +48,7 @@
</a>
</span>
</header>
<section id="dashgoals_config" class="dash_config hide">
<header><i class="icon-wrench"></i> {l s='Configuration' mod='dashgoals'}</header>
<form class="defaultForm form-horizontal" method="post" action="{$link->getAdminLink('AdminDashboard')}">
<table class="table table-condensed table-striped table-bordered">
<thead>
<tr>
<th>
<a href="javascript:void(0);" onclick="dashgoals_changeConfYear('backward');" class="icon-backward"></a>
<span id="dashgoals_conftitle">{$goals_year}</span>
<a href="javascript:void(0);" onclick="dashgoals_changeConfYear('forward');" class="icon-forward"></a>
</th>
<th>{l s='Traffic' mod='dashgoals'}</th>
<th>{l s='Conversion Rate' mod='dashgoals'}</th>
<th>{l s='Average Cart Value' mod='dashgoals'}</th>
<th>{l s='Sales' mod='dashgoals'}</th>
</tr>
</thead>
<tbody>
{foreach $goals_months as $month}
<tr>
<td>
{$month.label}
</td>
<td>
<div class="input-group">
<input id="dashgoals_traffic_{$month@key}" name="dashgoals_traffic_{$month@key}" class="dashgoals_config_input form-control"
value="{$month.values.traffic|intval}" />
</div>
</td>
<td>
<div class="input-group">
<input id="dashgoals_conversion_{$month@key}" name="dashgoals_conversion_{$month@key}" class="dashgoals_config_input form-control"
value="{$month.values.conversion|floatval}" />
<span class="input-group-addon">%</span>
</div>
</td>
<td>
<div class="input-group">
<span class="input-group-addon">{$currency->iso_code|escape}</span>
<input id="dashgoals_avg_cart_value_{$month@key}" name="dashgoals_avg_cart_value_{$month@key}" class="dashgoals_config_input form-control"
value="{$month.values.avg_cart_value|intval}" />
</div>
</td>
<td id="dashgoals_sales_{$month@key}" class="dashgoals_sales">
</td>
</tr>
{/foreach}
</tbody>
</table>
<input class="btn btn-default" name="submitDashGoals" type="submit" value="{l s='Save' mod='dashgoals'}" />
</form>
</section>
{include file='./config.tpl'}
<section class="loading">
<div id="dash_goals_chart1" class="chart with-transitions">
<svg></svg>
Binary file not shown.

After

Width:  |  Height:  |  Size: 964 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 973 B

+2 -2
View File
@@ -208,7 +208,7 @@ var contentOnly = {if $content_only}true{else}false{/if}
{if isset($images) && count($images) > 0}
<!-- thumbnails -->
<div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}">
{if isset($images) && count($images) > 3}<span class="view_scroll_spacer"><a id="view_scroll_left" class="" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Previous'}</a></span>{/if}
{if isset($images) && count($images) > 4}<span class="view_scroll_spacer"><a id="view_scroll_left" class="" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Previous'}</a></span>{/if}
<div id="thumbs_list">
<ul id="thumbs_list_frame">
{if isset($images)}
@@ -223,7 +223,7 @@ var contentOnly = {if $content_only}true{else}false{/if}
{/if}
</ul>
</div>
{if isset($images) && count($images) > 3}<a id="view_scroll_right" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Next'}</a>{/if}
{if isset($images) && count($images) > 4}<a id="view_scroll_right" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Next'}</a>{/if}
</div>
{/if}
{if isset($images) && count($images) > 1}<p class="resetimg clear"><span id="wrapResetImages" style="display: none;">