Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
be4d32c
- Added functionality to convert-HTML.cs to include a charset parameter
ergo3114 Jun 28, 2017
883df45
- Fixed issues on the charset parameter where flag was always set to …
ergo3114 Jun 29, 2017
3caab36
- Moved Meta tag into Head tag
ergo3114 Jun 29, 2017
cdb3535
- Took away charset defaullt value
ergo3114 Jun 30, 2017
d0222c5
- Added Transitional switch to allow users to switch between strict a…
ergo3114 Jul 4, 2017
35b44c0
- Added validation to the Charset parameter
ergo3114 Jul 15, 2017
6b325b7
- Put the Meta parameter output inside the HTML head tag
ergo3114 Jul 15, 2017
7d39a6c
- Added filtering for the Meta parameter to only allow defined HTML m…
ergo3114 Jul 16, 2017
ac28b95
- Changed the condition for http-equiv from && to ||
ergo3114 Jul 16, 2017
3baca91
- Removed static declaration while attempting to using InvocationInfo…
ergo3114 Jul 16, 2017
56a7db3
- Removed defined get/set functions from the transitional switch para…
ergo3114 Jul 22, 2017
71168cc
- Removed commented out testing
ergo3114 Jul 22, 2017
06ef847
Merge remote-tracking branch 'refs/remotes/PowerShell/master'
ergo3114 Jul 23, 2017
cbec470
- Removed \1 in the root folder
ergo3114 Jul 24, 2017
3daa019
- Added pattern validation to the charset parameter
ergo3114 Jul 25, 2017
0f9279b
- Added error message in resource file
ergo3114 Jul 29, 2017
b6cdea7
- Fixed error introduced in test on push 0f9279b when testing meta pa…
ergo3114 Jul 29, 2017
06e9751
- Removed refresh as a valid meta property
ergo3114 Jul 30, 2017
d77d17c
- Updated Meta parameter validation to a switch statement from an if …
ergo3114 Jul 31, 2017
bd1b6ca
- Removed comments
ergo3114 Aug 5, 2017
65ef76c
- Added X-UA-Compatible as an approved meta item
ergo3114 Aug 27, 2017
7383f1b
- Pull from upstream
ergo3114 Aug 28, 2017
b82a9b6
- Updated Test ConvertTo-HTML meta with invalid properties should thow
ergo3114 Aug 28, 2017
c0c4235
- added {get;set;} for the Transitional vaiable
ergo3114 Sep 1, 2017
19f2ea2
- Added warning message to meta tag from error
ergo3114 Sep 6, 2017
a380a35
- Pull warning from resource file
ergo3114 Sep 7, 2017
4970e36
- Removed commented out code
ergo3114 Sep 7, 2017
3a07e00
- Repush for Appveyor test
ergo3114 Sep 7, 2017
da80adc
- Repushing after rebase
ergo3114 Sep 7, 2017
a0ac1a1
- Changed to pull warning message from resouce file
ergo3114 Sep 8, 2017
605453f
- Changed test for invalid meta keys to look for key pair in verbose …
ergo3114 Sep 8, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,68 @@ public string[] PreContent
}
private string[] _preContent;

/// <summary>
/// Sets and Gets the meta property of the HTML head
/// </summary>
/// <returns></returns>
[Parameter(ParameterSetName = "Page")]
[ValidateNotNullOrEmpty]
public Hashtable Meta
{
get
{
return _meta;
}
set
{
_meta = value;
_metaSpecified = true;
Copy link
Member

@SteveL-MSFT SteveL-MSFT Jul 16, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe the typical pattern is to use InvocationInfo.BoundParameters. This would then allow you to use the automatic properties to simplify the code a bit

Copy link
Contributor Author

@ergo3114 ergo3114 Jul 16, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was unable to get InvocationInfo.BoundParameters to work. I read over InvocationInfo.cs and ImplicitRemotingCommands.cs to see if I can make sense of it but I am at a loss here.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can use an auto property and Meta == null to check if user assign a value.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That should be fine, too

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ergo3114 Please address this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see this as two ways to do the same thing. What are you looking to gain from setting a default value versus checking a flag? Just curious.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A quick search shows we already have inconsistency so I'm fine staying with this pattern

}
}
private Hashtable _meta;
private bool _metaSpecified = false;

/// <summary>
/// Specifies the charset encoding for the HTML document
/// </summary>
[Parameter(ParameterSetName = "Page")]
[ValidateNotNullOrEmpty]
[ValidatePattern("^[A-Za-z0-9]\\w+\\S+[A-Za-z0-9]$")]
public string Charset
{
get
{
return _charset;
}
set
{
_charset = value;
_charsetSpecified = true;
}
}
private string _charset;
private bool _charsetSpecified = false;

/// <summary>
/// When this switch statement is specified,
/// it will change the DOCTYPE to XHTML Transitional DTD
/// </summary>
/// <returns></returns>
[Parameter(ParameterSetName = "Page")]
[ValidateNotNullOrEmpty]
public SwitchParameter Transitional
{
get
{
return _transitional;
}
set
{
_transitional = true;
}
}
private bool _transitional = false;

/// <summary>
/// definitions for hash table keys
/// </summary>
Expand Down Expand Up @@ -364,9 +426,58 @@ protected override void BeginProcessing()

if (!_fragment)
{
WriteObject("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
if(!_transitional)
{
WriteObject("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
}
else
{
WriteObject("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
}
WriteObject("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
WriteObject("<head>");
if(_charsetSpecified)
{
WriteObject("<meta charset=\"" + _charset + "\">");
}
if(_metaSpecified)
{
List<string> useditems = new List<string>();
foreach(string s in _meta.Keys)
{
if(!useditems.Contains(s)){
switch(s.ToLower()){
case "content-type":
case "default-style":
case "x-ua-compatible":
WriteObject("<meta http-equiv=\"" + s + "\" content=\"" + _meta[s] + "\">");
break;
case "application-name":
case "author":
case "description":
case "generator":
case "keywords":
case "viewport":
WriteObject("<meta name=\"" + s + "\" content=\"" + _meta[s] + "\">");
break;
default:
MshCommandRuntime mshCommandRuntime = this.CommandRuntime as MshCommandRuntime;
string Message = StringUtil.Format(ConvertHTMLStrings.MetaPropertyNotFound, s, _meta[s]);
WarningRecord record = new WarningRecord(Message);
InvocationInfo invocationInfo = GetVariableValue(SpecialVariables.MyInvocation) as InvocationInfo;

if (invocationInfo != null)
{
record.SetInvocationInfo(invocationInfo);
}
mshCommandRuntime.WriteWarning(record);
WriteObject("<meta name=\"" + s + "\" content=\"" + _meta[s] + "\">");
break;
}
useditems.Add(s);
}
}
}
WriteObject(_head ?? new string[] { "<title>" + _title + "</title>" }, true);
if (_cssuriSpecified)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema

Version 2.0

The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.

Example:

... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>

There are any number of "resheader" rows that contain simple
name/value pairs.

Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.

The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:

Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.

mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.

mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.

mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="https://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="https://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MetaPropertyNotFound" xml:space="preserve">
<value>Accepted meta properties are content-type, default-style, application-name, author, description, generator, keywords, x-ua-compatible, and viewport. The meta pair: {0} and {1} may not function correctly.</value>
</data>
</root>
Loading