mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-08-30 20:18:00 +00:00
Permit Meta Viewport in Html (#3623)
Fix #3565. Requester suggested adding viewport as a property of Html Writer. I think it would fit better as a Document Property, so that it can be both read and written, just like other meta properties, making it easier to load an Html spreadsheet and save it as a new one preserving this property. It is an open question whether we should try to preserve this property when writing to other spreadsheet types, e.g. as a custom property for Xlsx. For now, I am not attempting that. Requester also suggested this as a boolean property, but there are other parameters and different values that might be used for viewport. So I am defining it as a string property, with a constant SUGGESTED_VIEWPORT that can be used for requester's use case.
This commit is contained in:
@@ -109,6 +109,8 @@ class Properties
|
||||
|
||||
private string $hyperlinkBase = '';
|
||||
|
||||
private string $viewport = '';
|
||||
|
||||
/**
|
||||
* Create a new Document Properties instance.
|
||||
*/
|
||||
@@ -548,4 +550,18 @@ class Properties
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getViewport(): string
|
||||
{
|
||||
return $this->viewport;
|
||||
}
|
||||
|
||||
public const SUGGESTED_VIEWPORT = 'width=device-width, initial-scale=1';
|
||||
|
||||
public function setViewport(string $viewport): self
|
||||
{
|
||||
$this->viewport = $viewport;
|
||||
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -748,6 +748,10 @@ class Html extends BaseReader
|
||||
case 'title':
|
||||
$properties->setTitle($metaContent);
|
||||
|
||||
break;
|
||||
case 'viewport':
|
||||
$properties->setViewport($metaContent);
|
||||
|
||||
break;
|
||||
default:
|
||||
if (preg_match('/^custom[.](bool|date|float|int|string)[.](.+)$/', $metaName, $matches) === 1) {
|
||||
|
||||
@@ -385,6 +385,7 @@ class Html extends BaseWriter
|
||||
$html .= self::generateMeta($properties->getCompany(), 'company');
|
||||
$html .= self::generateMeta($properties->getManager(), 'manager');
|
||||
$html .= self::generateMeta($properties->getLastModifiedBy(), 'lastModifiedBy');
|
||||
$html .= self::generateMeta($properties->getViewport(), 'viewport');
|
||||
$date = Date::dateTimeFromTimestamp((string) $properties->getCreated());
|
||||
$date->setTimeZone(Date::getDefaultOrLocalTimeZone());
|
||||
$html .= self::generateMeta($date->format(DATE_W3C), 'created');
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace PhpOffice\PhpSpreadsheetTests\Reader\Html;
|
||||
|
||||
use PhpOffice\PhpSpreadsheet\Document\Properties;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheetTests\Functional\AbstractFunctional;
|
||||
|
||||
class ViewportTest extends AbstractFunctional
|
||||
{
|
||||
public function testViewport(): void
|
||||
{
|
||||
$spreadsheetOld = new Spreadsheet();
|
||||
$spreadsheetOld->getProperties()->setViewport(Properties::SUGGESTED_VIEWPORT);
|
||||
$osheet = $spreadsheetOld->getActiveSheet();
|
||||
$osheet->getCell('A1')->setValue(1);
|
||||
|
||||
$spreadsheet = $this->writeAndReload($spreadsheetOld, 'Html');
|
||||
$spreadsheetOld->disconnectWorksheets();
|
||||
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertSame(1, $sheet->getCell('A1')->getValue());
|
||||
self::assertSame('width=device-width, initial-scale=1', $spreadsheet->getProperties()->getViewport());
|
||||
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
|
||||
public function testNoViewport(): void
|
||||
{
|
||||
$spreadsheetOld = new Spreadsheet();
|
||||
//$spreadsheetOld->getProperties()->setViewport(SUGGESTED_VIEWPORT);
|
||||
$osheet = $spreadsheetOld->getActiveSheet();
|
||||
$osheet->getCell('A1')->setValue(1);
|
||||
|
||||
$spreadsheet = $this->writeAndReload($spreadsheetOld, 'Html');
|
||||
$spreadsheetOld->disconnectWorksheets();
|
||||
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
self::assertSame(1, $sheet->getCell('A1')->getValue());
|
||||
self::assertSame('', $spreadsheet->getProperties()->getViewport());
|
||||
|
||||
$spreadsheet->disconnectWorksheets();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user