Added export contacts (csv)

Interface optimizations
This commit is contained in:
RainLoop Team 2014-04-29 15:49:30 +04:00
parent c248292f07
commit 7552ffe241
25 changed files with 526 additions and 290 deletions

View file

@ -5,10 +5,10 @@
.control-group { .control-group {
.control-label.fix-width { .control-label.fix-width {
width: 90px; width: 50px;
} }
.controls.fix-width { .controls.fix-width {
margin-left: 110px; margin-left: 70px;
} }
} }

View file

@ -106,40 +106,17 @@ html.ssm-state-desktop {
#rl-sub-right { #rl-sub-right {
left: 400px; left: 400px;
} }
}
html.ssm-state-tablet {
#rl-left {
width: 160px;
}
#rl-right {
left: 160px;
}
#rl-sub-left {
width: 350px;
.messageList .inputSearch {
width: 220px;
}
}
#rl-sub-right {
left: 350px;
}
.b-compose.modal { .b-compose.modal {
width: 800px; width: 1000px;
} }
.b-contacts-content.modal { .b-contacts-content.modal {
width: 800px; width: 1000px;
} }
} }
html.ssm-state-mobile { html.ssm-state-tablet, html.ssm-state-mobile {
#rl-left { #rl-left {
width: 155px; width: 155px;
@ -162,11 +139,52 @@ html.ssm-state-mobile {
} }
.b-compose.modal { .b-compose.modal {
width: 800px; width: 700px;
} }
.b-contacts-content.modal { .b-contacts-content.modal {
width: 800px; width: 600px;
}
.b-contacts-content.modal {
.b-list-toopbar, .b-list-content, .b-list-footer-toopbar {
width: 150px;
}
.b-list-toopbar .e-search {
width: 125px;
}
.b-view-content {
left: 150px;
}
.contactValueInput {
width: 200px;
}
}
}
html.ssm-state-tablet {
.b-compose.modal {
width: 700px;
}
.b-contacts-content.modal {
width: 700px;
}
.b-contacts-content.modal {
.b-list-toopbar, .b-list-content, .b-list-footer-toopbar {
width: 200px;
}
.b-list-toopbar .e-search {
width: 175px;
}
.b-view-content {
left: 200px;
}
.contactValueInput {
width: 250px;
}
} }
} }

View file

@ -6,9 +6,9 @@
width: 100%; width: 100%;
height: 2px; height: 2px;
z-index: 102; z-index: 102;
-webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.8); -webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.8); -moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.5);
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.8); box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.5);
} }
.nano:before { .nano:before {

View file

@ -176,6 +176,7 @@ class AddressBook extends \RainLoop\Providers\AbstractProvider
'Name' => PropertyType::FULLNAME, 'Name' => PropertyType::FULLNAME,
'FullName' => PropertyType::FULLNAME, 'FullName' => PropertyType::FULLNAME,
'DisplayName' => PropertyType::FULLNAME, 'DisplayName' => PropertyType::FULLNAME,
'GivenName' => PropertyType::FULLNAME,
'First' => PropertyType::FIRST_NAME, 'First' => PropertyType::FIRST_NAME,
'FirstName' => PropertyType::FIRST_NAME, 'FirstName' => PropertyType::FIRST_NAME,
'Middle' => PropertyType::MIDDLE_NAME, 'Middle' => PropertyType::MIDDLE_NAME,
@ -183,9 +184,14 @@ class AddressBook extends \RainLoop\Providers\AbstractProvider
'Last' => PropertyType::LAST_NAME, 'Last' => PropertyType::LAST_NAME,
'LastName' => PropertyType::LAST_NAME, 'LastName' => PropertyType::LAST_NAME,
'Suffix' => PropertyType::NAME_SUFFIX, 'Suffix' => PropertyType::NAME_SUFFIX,
'NameSuffix' => PropertyType::NAME_SUFFIX,
'Prefix' => PropertyType::NAME_PREFIX,
'NamePrefix' => PropertyType::NAME_PREFIX,
'ShortName' => PropertyType::NICK_NAME,
'NickName' => PropertyType::NICK_NAME, 'NickName' => PropertyType::NICK_NAME,
'BusinessFax' => array(PropertyType::PHONE, 'Work,Fax'), 'BusinessFax' => array(PropertyType::PHONE, 'Work,Fax'),
'BusinessFax2' => array(PropertyType::PHONE, 'Work,Fax'), 'BusinessFax2' => array(PropertyType::PHONE, 'Work,Fax'),
'BusinessFax3' => array(PropertyType::PHONE, 'Work,Fax'),
'BusinessPhone' => array(PropertyType::PHONE, 'Work'), 'BusinessPhone' => array(PropertyType::PHONE, 'Work'),
'BusinessPhone2' => array(PropertyType::PHONE, 'Work'), 'BusinessPhone2' => array(PropertyType::PHONE, 'Work'),
'BusinessPhone3' => array(PropertyType::PHONE, 'Work'), 'BusinessPhone3' => array(PropertyType::PHONE, 'Work'),
@ -193,6 +199,7 @@ class AddressBook extends \RainLoop\Providers\AbstractProvider
'CompanyMainPhone' => array(PropertyType::PHONE, 'Work'), 'CompanyMainPhone' => array(PropertyType::PHONE, 'Work'),
'HomeFax' => array(PropertyType::PHONE, 'Home,Fax'), 'HomeFax' => array(PropertyType::PHONE, 'Home,Fax'),
'HomeFax2' => array(PropertyType::PHONE, 'Home,Fax'), 'HomeFax2' => array(PropertyType::PHONE, 'Home,Fax'),
'HomeFax3' => array(PropertyType::PHONE, 'Home,Fax'),
'HomePhone' => array(PropertyType::PHONE, 'Home'), 'HomePhone' => array(PropertyType::PHONE, 'Home'),
'HomePhone2' => array(PropertyType::PHONE, 'Home'), 'HomePhone2' => array(PropertyType::PHONE, 'Home'),
'HomePhone3' => array(PropertyType::PHONE, 'Home'), 'HomePhone3' => array(PropertyType::PHONE, 'Home'),
@ -206,6 +213,9 @@ class AddressBook extends \RainLoop\Providers\AbstractProvider
'Email' => array(PropertyType::EMAIl, 'Home'), 'Email' => array(PropertyType::EMAIl, 'Home'),
'Email2' => array(PropertyType::EMAIl, 'Home'), 'Email2' => array(PropertyType::EMAIl, 'Home'),
'Email3' => array(PropertyType::EMAIl, 'Home'), 'Email3' => array(PropertyType::EMAIl, 'Home'),
'HomeEmail' => array(PropertyType::EMAIl, 'Home'),
'HomeEmail2' => array(PropertyType::EMAIl, 'Home'),
'HomeEmail3' => array(PropertyType::EMAIl, 'Home'),
'EmailAddress' => array(PropertyType::EMAIl, 'Home'), 'EmailAddress' => array(PropertyType::EMAIl, 'Home'),
'Email2Address' => array(PropertyType::EMAIl, 'Home'), 'Email2Address' => array(PropertyType::EMAIl, 'Home'),
'Email3Address' => array(PropertyType::EMAIl, 'Home'), 'Email3Address' => array(PropertyType::EMAIl, 'Home'),

View file

@ -266,22 +266,162 @@ class Contact
} }
/** /**
* @todo
* @return string * @return string
*/ */
public function ToCsvHeader() public function ToCsv($bWithHeader = false)
{ {
return ''; $aData = array();
if ($bWithHeader)
{
$aData[] = array(
'Title', 'First Name', 'Middle Name', 'Last Name', 'Nick Name', 'Display Name',
'Company', 'Department', 'Job Title', 'Office Location',
'E-mail Address', 'Notes', 'Web Page', 'Birthday',
'Other Email', 'Other Phone', 'Other Mobile', 'Mobile Phone',
'Home Email', 'Home Phone', 'Home Fax',
'Home Street', 'Home City', 'Home State', 'Home Postal Code', 'Home Country',
'Business Email', 'Business Phone', 'Business Fax',
'Business Street', 'Business City', 'Business State', 'Business Postal Code', 'Business Country'
);
} }
/** $aValues = array(
* @todo '', // 0 'Title',
* @return string '', // 1 'First Name',
*/ '', // 2 'Middle Name',
public function ToCsvLine() '', // 3 'Last Name',
{ '', // 4 'Nick Name',
'', // 5 'Display Name',
'', // 6 'Company',
'', // 7 'Department',
'', // 8 'Job Title',
'', // 9 'Office Location',
'', // 10 'E-mail Address',
'', // 11 'Notes',
'', // 12 'Web Page',
'', // 13 'Birthday',
'', // 14 'Other Email',
'', // 15 'Other Phone',
'', // 16 'Other Mobile',
'', // 17 'Mobile Phone',
'', // 18 'Home Email',
'', // 19 'Home Phone',
'', // 20 'Home Fax',
'', // 21 'Home Street',
'', // 22 'Home City',
'', // 23 'Home State',
'', // 24 'Home Postal Code',
'', // 25 'Home Country',
'', // 26 'Business Email',
'', // 27 'Business Phone',
'', // 28 'Business Fax',
'', // 29 'Business Street',
'', // 30 'Business City',
'', // 31 'Business State',
'', // 32 'Business Postal Code',
'' // 33 'Business Country'
);
$this->UpdateDependentValues(); $this->UpdateDependentValues();
return '';
foreach ($this->Properties as /* @var $oProperty \RainLoop\Providers\AddressBook\Classes\Property */ &$oProperty)
{
$iIndex = -1;
if ($oProperty)
{
$aUpperTypes = $oProperty->TypesUpperAsArray();
switch ($oProperty->Type)
{
case PropertyType::FULLNAME:
$iIndex = 5;
break;
case PropertyType::NICK_NAME:
$iIndex = 4;
break;
case PropertyType::FIRST_NAME:
$iIndex = 1;
break;
case PropertyType::LAST_NAME:
$iIndex = 3;
break;
case PropertyType::MIDDLE_NAME:
$iIndex = 2;
break;
case PropertyType::EMAIl:
switch (true)
{
case \in_array('OTHER', $aUpperTypes):
$iIndex = 14;
break;
case \in_array('WORK', $aUpperTypes):
$iIndex = 26;
break;
default:
$iIndex = 18;
break;
}
break;
case PropertyType::PHONE:
switch (true)
{
case \in_array('OTHER', $aUpperTypes):
$iIndex = 15;
break;
case \in_array('WORK', $aUpperTypes):
$iIndex = 27;
break;
case \in_array('MOBILE', $aUpperTypes):
$iIndex = 17;
break;
default:
$iIndex = 19;
break;
}
break;
case PropertyType::WEB_PAGE:
$iIndex = 12;
break;
case PropertyType::NOTE:
$iIndex = 11;
break;
}
if (-1 < $iIndex)
{
$aValues[$iIndex] = $oProperty->Value;
}
}
}
// subfix
if (empty($aValues[10])) // 'E-mail Address'
{
if (!empty($aValues[18]))
{
$aValues[10] = $aValues[18];
}
else if (!empty($aValues[26]))
{
$aValues[10] = $aValues[26];
}
else if (!empty($aValues[14]))
{
$aValues[10] = $aValues[14];
}
}
$aData[] = \array_map(function ($sValue) {
$sValue = \trim($sValue);
return \preg_match('/[\r\n,"]/', $sValue) ? '"'.\str_replace('"', '""', $sValue).'"' : $sValue;
}, $aValues);
$sResult = '';
foreach ($aData as $aSubData)
{
$sResult .= \implode(',', $aSubData)."\r\n";
}
return $sResult;
} }
/** /**

View file

@ -90,6 +90,14 @@ class Property
return $aResult; return $aResult;
} }
/**
* @return array
*/
public function TypesUpperAsArray()
{
return \array_map('strtoupper', $this->TypesAsArray());
}
public function UpdateDependentValues() public function UpdateDependentValues()
{ {
$this->Value = \trim($this->Value); $this->Value = \trim($this->Value);

View file

@ -379,7 +379,7 @@ class PdoAddressBook
} }
$bVcf = 'vcf' === $sType; $bVcf = 'vcf' === $sType;
$bCsvHeader = false; $bCsvHeader = true;
$aDatabaseSyncData = $this->prepearDatabaseSyncData($iUserID); $aDatabaseSyncData = $this->prepearDatabaseSyncData($iUserID);
if (\is_array($aDatabaseSyncData) && 0 < \count($aDatabaseSyncData)) if (\is_array($aDatabaseSyncData) && 0 < \count($aDatabaseSyncData))
@ -397,13 +397,8 @@ class PdoAddressBook
} }
else else
{ {
if (!$bCsvHeader) echo $oContact->ToCsv($bCsvHeader);
{ $bCsvHeader = false;
$bCsvHeader = true;
echo $oContact->ToCsvHeader();
}
echo $oContact->ToCsvLine();
} }
} }
} }

View file

@ -20,21 +20,22 @@
<ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="contacts-more-dropdown-id"> <ul class="dropdown-menu g-ui-menu" role="menu" aria-labelledby="contacts-more-dropdown-id">
<li class="e-item" role="presentation"> <li class="e-item" role="presentation">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="initDom: importUploaderButton"> <a class="e-link menuitem" href="#" tabindex="-1" data-bind="initDom: importUploaderButton">
<i data-bind="css: {'icon-list-add': !contacts.importing(), 'icon-spinner animated': contacts.importing}"></i> <i data-bind="css: {'icon-import': !contacts.importing(), 'icon-spinner animated': contacts.importing}"></i>
&nbsp;&nbsp; &nbsp;&nbsp;
<span class="i18n" data-i18n-text="CONTACTS/BUTTON_IMPORT"></span> <span class="i18n" data-i18n-text="CONTACTS/BUTTON_IMPORT"></span>
</a> </a>
</li> </li>
<!-- <li class="e-item" role="presentation" data-bind="visible: allowExport" > <li class="divider" role="presentation" data-bind="visible: allowExport"></li>
<li class="e-item" role="presentation" data-bind="visible: allowExport">
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: exportCsv"> <a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: exportCsv">
<i data-bind="css: {'icon-download': !contacts.exportingCsv(), 'icon-spinner animated': contacts.exportingCsv}"></i> <i data-bind="css: {'icon-export': !contacts.exportingCsv(), 'icon-spinner animated': contacts.exportingCsv}"></i>
&nbsp;&nbsp; &nbsp;&nbsp;
<span class="i18n" data-i18n-text="CONTACTS/BUTTON_EXPORT_CSV"></span> <span class="i18n" data-i18n-text="CONTACTS/BUTTON_EXPORT_CSV"></span>
</a> </a>
</li>--> </li>
<li class="e-item" role="presentation" data-bind="visible: allowExport" > <li class="e-item" role="presentation" data-bind="visible: allowExport" >
<a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: exportVcf"> <a class="e-link menuitem" href="#" tabindex="-1" data-bind="click: exportVcf">
<i data-bind="css: {'icon-download': !contacts.exportingVcf(), 'icon-spinner animated': contacts.exportingVcf}"></i> <i data-bind="css: {'icon-export': !contacts.exportingVcf(), 'icon-spinner animated': contacts.exportingVcf}"></i>
&nbsp;&nbsp; &nbsp;&nbsp;
<span class="i18n" data-i18n-text="CONTACTS/BUTTON_EXPORT_VCARD"></span> <span class="i18n" data-i18n-text="CONTACTS/BUTTON_EXPORT_VCARD"></span>
</a> </a>

View file

@ -1498,6 +1498,12 @@ table {
.icon-cloud-down:before { .icon-cloud-down:before {
content: "\e068"; content: "\e068";
} }
.icon-import:before {
content: "\e069";
}
.icon-export:before {
content: "\e06a";
}
/** initial setup **/ /** initial setup **/
.nano { .nano {
@ -7023,47 +7029,79 @@ html.ssm-state-desktop #rl-sub-left {
html.ssm-state-desktop #rl-sub-right { html.ssm-state-desktop #rl-sub-right {
left: 400px; left: 400px;
} }
html.ssm-state-tablet #rl-left { html.ssm-state-desktop .b-compose.modal {
width: 160px; width: 1000px;
} }
html.ssm-state-tablet #rl-right { html.ssm-state-desktop .b-contacts-content.modal {
left: 160px; width: 1000px;
}
html.ssm-state-tablet #rl-sub-left {
width: 350px;
}
html.ssm-state-tablet #rl-sub-left .messageList .inputSearch {
width: 220px;
}
html.ssm-state-tablet #rl-sub-right {
left: 350px;
}
html.ssm-state-tablet .b-compose.modal {
width: 800px;
}
html.ssm-state-tablet .b-contacts-content.modal {
width: 800px;
} }
html.ssm-state-tablet #rl-left,
html.ssm-state-mobile #rl-left { html.ssm-state-mobile #rl-left {
width: 155px; width: 155px;
} }
html.ssm-state-tablet #rl-right,
html.ssm-state-mobile #rl-right { html.ssm-state-mobile #rl-right {
left: 155px; left: 155px;
} }
html.ssm-state-tablet #rl-sub-left,
html.ssm-state-mobile #rl-sub-left { html.ssm-state-mobile #rl-sub-left {
width: 310px; width: 310px;
} }
html.ssm-state-tablet #rl-sub-left .messageList .inputSearch,
html.ssm-state-mobile #rl-sub-left .messageList .inputSearch { html.ssm-state-mobile #rl-sub-left .messageList .inputSearch {
width: 200px; width: 200px;
} }
html.ssm-state-tablet #rl-sub-right,
html.ssm-state-mobile #rl-sub-right { html.ssm-state-mobile #rl-sub-right {
left: 310px; left: 310px;
} }
html.ssm-state-tablet .b-compose.modal,
html.ssm-state-mobile .b-compose.modal { html.ssm-state-mobile .b-compose.modal {
width: 800px; width: 700px;
} }
html.ssm-state-tablet .b-contacts-content.modal,
html.ssm-state-mobile .b-contacts-content.modal { html.ssm-state-mobile .b-contacts-content.modal {
width: 800px; width: 600px;
}
html.ssm-state-tablet .b-contacts-content.modal .b-list-toopbar,
html.ssm-state-mobile .b-contacts-content.modal .b-list-toopbar,
html.ssm-state-tablet .b-contacts-content.modal .b-list-content,
html.ssm-state-mobile .b-contacts-content.modal .b-list-content,
html.ssm-state-tablet .b-contacts-content.modal .b-list-footer-toopbar,
html.ssm-state-mobile .b-contacts-content.modal .b-list-footer-toopbar {
width: 150px;
}
html.ssm-state-tablet .b-contacts-content.modal .b-list-toopbar .e-search,
html.ssm-state-mobile .b-contacts-content.modal .b-list-toopbar .e-search {
width: 125px;
}
html.ssm-state-tablet .b-contacts-content.modal .b-view-content,
html.ssm-state-mobile .b-contacts-content.modal .b-view-content {
left: 150px;
}
html.ssm-state-tablet .b-contacts-content.modal .contactValueInput,
html.ssm-state-mobile .b-contacts-content.modal .contactValueInput {
width: 200px;
}
html.ssm-state-tablet .b-compose.modal {
width: 700px;
}
html.ssm-state-tablet .b-contacts-content.modal {
width: 700px;
}
html.ssm-state-tablet .b-contacts-content.modal .b-list-toopbar,
html.ssm-state-tablet .b-contacts-content.modal .b-list-content,
html.ssm-state-tablet .b-contacts-content.modal .b-list-footer-toopbar {
width: 200px;
}
html.ssm-state-tablet .b-contacts-content.modal .b-list-toopbar .e-search {
width: 175px;
}
html.ssm-state-tablet .b-contacts-content.modal .b-view-content {
left: 200px;
}
html.ssm-state-tablet .b-contacts-content.modal .contactValueInput {
width: 250px;
} }
html.rl-left-panel-disabled #rl-left { html.rl-left-panel-disabled #rl-left {
width: 5px !important; width: 5px !important;
@ -7115,9 +7153,9 @@ html.rl-no-preview-pane #rl-right .ui-resizable-handle {
width: 100%; width: 100%;
height: 2px; height: 2px;
z-index: 102; z-index: 102;
-webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.8); -webkit-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.5);
-moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.8); -moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.5);
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.8); box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.5);
} }
.nano:before { .nano:before {
top: -2px; top: -2px;
@ -8337,10 +8375,10 @@ html.rl-message-fullscreen .messageView .b-content .buttonFull {
display: none; display: none;
} }
.b-contacts-content .control-group .control-label.fix-width { .b-contacts-content .control-group .control-label.fix-width {
width: 90px; width: 50px;
} }
.b-contacts-content .control-group .controls.fix-width { .b-contacts-content .control-group .controls.fix-width {
margin-left: 110px; margin-left: 70px;
} }
.b-contacts-content.modal { .b-contacts-content.modal {
position: absolute; position: absolute;

File diff suppressed because one or more lines are too long

View file

@ -112,4 +112,6 @@
<glyph unicode="&#57446;" d="M311 155l0-54c0-8-3-15-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 5-8 12-8 20l0 54c0 8 3 15 8 20 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-20z m0 147l0-55c0-8-3-14-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 6-8 12-8 20l0 55c0 7 3 14 8 19 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-19z m0 146l0-55c0-7-3-14-8-19-5-6-12-8-20-8l-54 0c-8 0-15 2-20 8-5 5-8 12-8 19l0 55c0 8 3 14 8 19 5 6 12 8 20 8l54 0c8 0 15-2 20-8 5-5 8-11 8-19z"/> <glyph unicode="&#57446;" d="M311 155l0-54c0-8-3-15-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 5-8 12-8 20l0 54c0 8 3 15 8 20 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-20z m0 147l0-55c0-8-3-14-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 6-8 12-8 20l0 55c0 7 3 14 8 19 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-19z m0 146l0-55c0-7-3-14-8-19-5-6-12-8-20-8l-54 0c-8 0-15 2-20 8-5 5-8 12-8 19l0 55c0 8 3 14 8 19 5 6 12 8 20 8l54 0c8 0 15-2 20-8 5-5 8-11 8-19z"/>
<glyph unicode="&#57447;" d="M341 265c0 2 0 4-2 6l-94 94c-2 1-4 2-6 2-3 0-5-1-6-2l-94-94c-2-2-2-4-2-6 0-3 0-5 2-7 2-1 4-2 6-2l60 0 0-94c0-2 1-4 2-6 2-2 4-2 6-2l52 0c2 0 4 0 6 2 1 2 2 4 2 6l0 94 60 0c2 0 4 1 6 3 1 1 2 3 2 6z m171-77c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/> <glyph unicode="&#57447;" d="M341 265c0 2 0 4-2 6l-94 94c-2 1-4 2-6 2-3 0-5-1-6-2l-94-94c-2-2-2-4-2-6 0-3 0-5 2-7 2-1 4-2 6-2l60 0 0-94c0-2 1-4 2-6 2-2 4-2 6-2l52 0c2 0 4 0 6 2 1 2 2 4 2 6l0 94 60 0c2 0 4 1 6 3 1 1 2 3 2 6z m171-77c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/>
<glyph unicode="&#57448;" d="M341 247c0 3 0 5-2 7-2 1-4 2-6 2l-60 0 0 94c0 2-1 4-2 6-2 2-4 2-6 2l-52 0c-2 0-4 0-6-2-1-2-2-4-2-6l0-94-60 0c-2 0-4-1-6-3-2-1-2-3-2-6 0-2 0-4 2-6l94-94c1-1 3-2 6-2 2 0 4 1 6 2l94 94c1 2 2 4 2 6z m171-59c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/> <glyph unicode="&#57448;" d="M341 247c0 3 0 5-2 7-2 1-4 2-6 2l-60 0 0 94c0 2-1 4-2 6-2 2-4 2-6 2l-52 0c-2 0-4 0-6-2-1-2-2-4-2-6l0-94-60 0c-2 0-4-1-6-3-2-1-2-3-2-6 0-2 0-4 2-6l94-94c1-1 3-2 6-2 2 0 4 1 6 2l94 94c1 2 2 4 2 6z m171-59c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/>
<glyph unicode="&#57449;" d="M375 256c0-5-2-9-6-13l-155-155c-4-4-8-6-13-6-5 0-9 2-13 6-3 3-5 8-5 13l0 82-128 0c-5 0-9 2-13 5-4 4-5 8-5 13l0 110c0 5 1 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 5 13 4 4 8 6 13 6 5 0 9-2 13-6l155-155c4-4 6-8 6-13z m100 101l0-202c0-22-8-42-24-58-16-16-35-24-58-24l-91 0c-3 0-5 1-7 3-2 2-2 4-2 6 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c13 0 23 4 32 13 9 9 14 20 14 32l0 202c0 12-5 23-14 32-9 9-19 13-32 13l-89 0c0 0-1 0-3 1-2 0-4 0-4 0 0 1 0 1-2 2-1 1-2 2-2 3 0 1 0 2 0 3 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c23 0 42-8 58-24 16-16 24-36 24-58z"/>
<glyph unicode="&#57450;" d="M201 101c0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-23 0-42 8-59 24-16 16-24 36-24 58l0 202c0 22 8 42 24 58 17 16 36 24 59 24l91 0c2 0 5-1 6-3 2-2 3-4 3-6 0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-13 0-24-4-33-13-9-9-13-20-13-32l0-202c0-12 4-23 13-32 9-9 20-13 33-13l89 0c0 0 1 0 3-1 2 0 3 0 3 0 0-1 1-1 3-2 1-1 2-2 2-3-1-1 0-2 0-3z m265 155c0-5-2-9-5-13l-156-155c-3-4-7-6-12-6-5 0-10 2-13 6-4 3-6 8-6 13l0 82-128 0c-5 0-9 2-13 5-3 4-5 8-5 13l0 110c0 5 2 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 6 13 3 4 8 6 13 6 5 0 9-2 12-6l156-155c3-4 5-8 5-13z"/>
</font></defs></svg> </font></defs></svg>

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -112,4 +112,6 @@
<glyph unicode="&#57446;" d="M311 155l0-54c0-8-3-15-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 5-8 12-8 20l0 54c0 8 3 15 8 20 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-20z m0 147l0-55c0-8-3-14-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 6-8 12-8 20l0 55c0 7 3 14 8 19 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-19z m0 146l0-55c0-7-3-14-8-19-5-6-12-8-20-8l-54 0c-8 0-15 2-20 8-5 5-8 12-8 19l0 55c0 8 3 14 8 19 5 6 12 8 20 8l54 0c8 0 15-2 20-8 5-5 8-11 8-19z"/> <glyph unicode="&#57446;" d="M311 155l0-54c0-8-3-15-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 5-8 12-8 20l0 54c0 8 3 15 8 20 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-20z m0 147l0-55c0-8-3-14-8-20-5-5-12-8-20-8l-54 0c-8 0-15 3-20 8-5 6-8 12-8 20l0 55c0 7 3 14 8 19 5 5 12 8 20 8l54 0c8 0 15-3 20-8 5-5 8-12 8-19z m0 146l0-55c0-7-3-14-8-19-5-6-12-8-20-8l-54 0c-8 0-15 2-20 8-5 5-8 12-8 19l0 55c0 8 3 14 8 19 5 6 12 8 20 8l54 0c8 0 15-2 20-8 5-5 8-11 8-19z"/>
<glyph unicode="&#57447;" d="M341 265c0 2 0 4-2 6l-94 94c-2 1-4 2-6 2-3 0-5-1-6-2l-94-94c-2-2-2-4-2-6 0-3 0-5 2-7 2-1 4-2 6-2l60 0 0-94c0-2 1-4 2-6 2-2 4-2 6-2l52 0c2 0 4 0 6 2 1 2 2 4 2 6l0 94 60 0c2 0 4 1 6 3 1 1 2 3 2 6z m171-77c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/> <glyph unicode="&#57447;" d="M341 265c0 2 0 4-2 6l-94 94c-2 1-4 2-6 2-3 0-5-1-6-2l-94-94c-2-2-2-4-2-6 0-3 0-5 2-7 2-1 4-2 6-2l60 0 0-94c0-2 1-4 2-6 2-2 4-2 6-2l52 0c2 0 4 0 6 2 1 2 2 4 2 6l0 94 60 0c2 0 4 1 6 3 1 1 2 3 2 6z m171-77c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/>
<glyph unicode="&#57448;" d="M341 247c0 3 0 5-2 7-2 1-4 2-6 2l-60 0 0 94c0 2-1 4-2 6-2 2-4 2-6 2l-52 0c-2 0-4 0-6-2-1-2-2-4-2-6l0-94-60 0c-2 0-4-1-6-3-2-1-2-3-2-6 0-2 0-4 2-6l94-94c1-1 3-2 6-2 2 0 4 1 6 2l94 94c1 2 2 4 2 6z m171-59c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/> <glyph unicode="&#57448;" d="M341 247c0 3 0 5-2 7-2 1-4 2-6 2l-60 0 0 94c0 2-1 4-2 6-2 2-4 2-6 2l-52 0c-2 0-4 0-6-2-1-2-2-4-2-6l0-94-60 0c-2 0-4-1-6-3-2-1-2-3-2-6 0-2 0-4 2-6l94-94c1-1 3-2 6-2 2 0 4 1 6 2l94 94c1 2 2 4 2 6z m171-59c0-29-10-53-30-73-20-20-44-30-72-30l-291 0c-32 0-61 12-84 35-23 24-35 52-35 85 0 23 6 44 19 64 12 19 29 34 50 44-1 5-1 9-1 11 0 38 14 70 40 97 27 26 59 40 97 40 28 0 53-8 76-23 23-16 40-36 50-62 13 11 28 17 44 17 19 0 35-7 49-20 13-14 20-30 20-49 0-13-4-26-11-37 23-5 42-17 57-36 15-18 22-39 22-63z"/>
<glyph unicode="&#57449;" d="M375 256c0-5-2-9-6-13l-155-155c-4-4-8-6-13-6-5 0-9 2-13 6-3 3-5 8-5 13l0 82-128 0c-5 0-9 2-13 5-4 4-5 8-5 13l0 110c0 5 1 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 5 13 4 4 8 6 13 6 5 0 9-2 13-6l155-155c4-4 6-8 6-13z m100 101l0-202c0-22-8-42-24-58-16-16-35-24-58-24l-91 0c-3 0-5 1-7 3-2 2-2 4-2 6 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c13 0 23 4 32 13 9 9 14 20 14 32l0 202c0 12-5 23-14 32-9 9-19 13-32 13l-89 0c0 0-1 0-3 1-2 0-4 0-4 0 0 1 0 1-2 2-1 1-2 2-2 3 0 1 0 2 0 3 0 1-1 3-1 6 0 3 0 6 0 8 0 2 1 4 1 6 0 3 1 5 3 6 1 1 3 2 6 2l91 0c23 0 42-8 58-24 16-16 24-36 24-58z"/>
<glyph unicode="&#57450;" d="M201 101c0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-23 0-42 8-59 24-16 16-24 36-24 58l0 202c0 22 8 42 24 58 17 16 36 24 59 24l91 0c2 0 5-1 6-3 2-2 3-4 3-6 0-1 0-3 0-6 1-3 1-6 1-8-1-2-1-4-1-6-1-3-2-5-3-6-2-1-4-2-6-2l-91 0c-13 0-24-4-33-13-9-9-13-20-13-32l0-202c0-12 4-23 13-32 9-9 20-13 33-13l89 0c0 0 1 0 3-1 2 0 3 0 3 0 0-1 1-1 3-2 1-1 2-2 2-3-1-1 0-2 0-3z m265 155c0-5-2-9-5-13l-156-155c-3-4-7-6-12-6-5 0-10 2-13 6-4 3-6 8-6 13l0 82-128 0c-5 0-9 2-13 5-3 4-5 8-5 13l0 110c0 5 2 9 5 13 4 3 8 5 13 5l128 0 0 82c0 5 2 10 6 13 3 4 8 6 13 6 5 0 9-2 12-6l156-155c3-4 5-8 5-13z"/>
</font></defs></svg> </font></defs></svg>

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before After
Before After

Binary file not shown.

Binary file not shown.

View file

@ -465,6 +465,14 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
<div data-icon="&#xe068;" class="icon"></div> <div data-icon="&#xe068;" class="icon"></div>
<input type="text" readonly="readonly" value="&amp;#xe068;"> <input type="text" readonly="readonly" value="&amp;#xe068;">
</li> </li>
<li>
<div data-icon="&#xe069;" class="icon"></div>
<input type="text" readonly="readonly" value="&amp;#xe069;">
</li>
<li>
<div data-icon="&#xe06a;" class="icon"></div>
<input type="text" readonly="readonly" value="&amp;#xe06a;">
</li>
</ul> </ul>
<h2>CSS mapping</h2> <h2>CSS mapping</h2>
<ul class="glyphs css-mapping"> <ul class="glyphs css-mapping">
@ -888,6 +896,14 @@ h2{font-size:18px;padding:0 0 21px 5px;margin:45px 0 0 0;text-transform:uppercas
<div class="icon icon-cloud-down"></div> <div class="icon icon-cloud-down"></div>
<input type="text" readonly="readonly" value="cloud-down"> <input type="text" readonly="readonly" value="cloud-down">
</li> </li>
<li>
<div class="icon icon-import"></div>
<input type="text" readonly="readonly" value="import">
</li>
<li>
<div class="icon icon-export"></div>
<input type="text" readonly="readonly" value="export">
</li>
</ul> </ul>
</div><script type="text/javascript"> </div><script type="text/javascript">
(function() { (function() {

View file

@ -353,3 +353,9 @@
.icon-cloud-down:before { .icon-cloud-down:before {
content: "\e068"; content: "\e068";
} }
.icon-import:before {
content: "\e069";
}
.icon-export:before {
content: "\e06a";
}