Skip to content

Commit

Permalink
added all css3 specs
Browse files Browse the repository at this point in the history
  • Loading branch information
lksnmnn committed Aug 15, 2015
1 parent e78fdae commit c7771ac
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 84 deletions.
12 changes: 12 additions & 0 deletions HTMLPurifier.xcodeproj/project.pbxproj
Expand Up @@ -330,6 +330,10 @@
806C47071B7F233100FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.h in Headers */ = {isa = PBXBuildFile; fileRef = 806C47051B7F233100FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.h */; };
806C47091B7F237B00FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.m in Sources */ = {isa = PBXBuildFile; fileRef = 806C47081B7F237B00FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.m */; };
806C470A1B7F237B00FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.m in Sources */ = {isa = PBXBuildFile; fileRef = 806C47081B7F237B00FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.m */; };
806C470C1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m in Sources */ = {isa = PBXBuildFile; fileRef = 806C470B1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m */; };
806C470D1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m in Sources */ = {isa = PBXBuildFile; fileRef = 806C470B1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m */; };
806C470F1B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h in Headers */ = {isa = PBXBuildFile; fileRef = 806C470E1B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h */; };
806C47101B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h in Headers */ = {isa = PBXBuildFile; fileRef = 806C470E1B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h */; };
808CB9C21887DCAA00AFB841 /* HTMLPurifier_AttrDef_HTML_BoolTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 808CB9C11887DCAA00AFB841 /* HTMLPurifier_AttrDef_HTML_BoolTest.m */; };
808CB9C71887E4D500AFB841 /* HTMLPurifier_AttrDefHarness.m in Sources */ = {isa = PBXBuildFile; fileRef = 808CB9C61887E4D500AFB841 /* HTMLPurifier_AttrDefHarness.m */; };
808CB9C918881BD200AFB841 /* HTMLPurifier_AttrDef_HTML_ColorTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 808CB9C818881BD200AFB841 /* HTMLPurifier_AttrDef_HTML_ColorTest.m */; };
Expand Down Expand Up @@ -837,6 +841,8 @@
806C47021B7D263000FE1D4C /* HTMLPurifier_AttrDef_CSS_Shape.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLPurifier_AttrDef_CSS_Shape.m; sourceTree = "<group>"; };
806C47051B7F233100FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLPurifier_AttrDef_CSS_Outline.h; sourceTree = "<group>"; };
806C47081B7F237B00FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLPurifier_AttrDef_CSS_Outline.m; sourceTree = "<group>"; };
806C470B1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLPurifier_AttrDef_CSS_BorderRadius.m; sourceTree = "<group>"; };
806C470E1B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLPurifier_AttrDef_CSS_BorderRadius.h; sourceTree = "<group>"; };
808CB9C11887DCAA00AFB841 /* HTMLPurifier_AttrDef_HTML_BoolTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLPurifier_AttrDef_HTML_BoolTest.m; sourceTree = "<group>"; };
808CB9C51887E4D500AFB841 /* HTMLPurifier_AttrDefHarness.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTMLPurifier_AttrDefHarness.h; sourceTree = "<group>"; };
808CB9C61887E4D500AFB841 /* HTMLPurifier_AttrDefHarness.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTMLPurifier_AttrDefHarness.m; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1636,6 +1642,8 @@
80F53C1E189BE6F600D7805F /* HTMLPurifier_AttrDef_CSS_BackgroundPosition.m */,
80F53C1F189BE6F600D7805F /* HTMLPurifier_AttrDef_CSS_Border.h */,
80F53C20189BE6F600D7805F /* HTMLPurifier_AttrDef_CSS_Border.m */,
806C470E1B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h */,
806C470B1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m */,
806C47051B7F233100FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.h */,
806C47081B7F237B00FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.m */,
80F53C21189BE6F600D7805F /* HTMLPurifier_AttrDef_CSS_Color.h */,
Expand Down Expand Up @@ -2098,6 +2106,7 @@
files = (
806C47001B7D261900FE1D4C /* HTMLPurifier_AttrDef_CSS_Shape.h in Headers */,
1EE4B32E1B13AFAA0056091D /* HTMLPurifier-Prefix.pch in Headers */,
806C470F1B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h in Headers */,
1EB9ACE61B144E0D000EDDA5 /* BasicPHP.h in Headers */,
1E48254318ED9D7F00E4CC64 /* HTMLPurifier.h in Headers */,
806C47061B7F233100FE1D4C /* HTMLPurifier_AttrDef_CSS_Outline.h in Headers */,
Expand Down Expand Up @@ -2294,6 +2303,7 @@
80F53EE1189BE6F700D7805F /* HTMLPurifier_URIFilter_Munge.h in Headers */,
80F53DA2189BE6F700D7805F /* HTMLPurifier_AttrDef_CSS_Font.h in Headers */,
80F53E9C189BE6F700D7805F /* HTMLPurifier_Lexer_libxmlLex.h in Headers */,
806C47101B7F750B00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.h in Headers */,
80F53E36189BE6F700D7805F /* HTMLPurifier_ConfigSchema.h in Headers */,
80F53E02189BE6F700D7805F /* HTMLPurifier_AttrTransform_Nofollow.h in Headers */,
80F53D9E189BE6F700D7805F /* HTMLPurifier_AttrDef_CSS_DenyElementDecorator.h in Headers */,
Expand Down Expand Up @@ -2487,6 +2497,7 @@
1E4825D818ED9DDF00E4CC64 /* HTMLPurifier_DefinitionCache.m in Sources */,
1E4825D918ED9DDF00E4CC64 /* HTMLPurifier_DefinitionCacheFactory.m in Sources */,
1E4825DA18ED9DDF00E4CC64 /* HTMLPurifier_HTMLDefinition.m in Sources */,
806C470C1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m in Sources */,
1E4825DB18ED9DDF00E4CC64 /* HTMLPurifier_URIDefinition.m in Sources */,
1E4825DC18ED9DDF00E4CC64 /* HTMLPurifier_Strategy.m in Sources */,
1E4825DD18ED9DDF00E4CC64 /* HTMLPurifier_Strategy_Composite.m in Sources */,
Expand Down Expand Up @@ -2750,6 +2761,7 @@
80F53E43189BE6F700D7805F /* HTMLPurifier_DefinitionCache.m in Sources */,
80F53DEB189BE6F700D7805F /* HTMLPurifier_AttrTransform_BdoDir.m in Sources */,
80F53E2B189BE6F700D7805F /* HTMLPurifier_ChildDef_Optional.m in Sources */,
806C470D1B7F74FA00FE1D4C /* HTMLPurifier_AttrDef_CSS_BorderRadius.m in Sources */,
80F53DED189BE6F700D7805F /* HTMLPurifier_AttrTransform_BgColor.m in Sources */,
80F53E6F189BE6F700D7805F /* HTMLPurifier_HTMLModule_Text.m in Sources */,
80F53EF8189BE6F700D7805F /* HTMLPurifier_URISchemeRegistry.m in Sources */,
Expand Down
@@ -0,0 +1,19 @@
//
// HTMLPurifier_AttrDef_CSS_BorderRadius.h
// HTMLPurifier
//
// Created by Lukas Neumann on 15.08.15.
// Copyright (c) 2015 Mynigma. All rights reserved.
//

#import "HTMLPurifier_AttrDef.h"

@interface HTMLPurifier_AttrDef_CSS_BorderRadius : HTMLPurifier_AttrDef
/**
* Validates the border-radius property as defined by CSS.
*/

- (NSString*)validateWithString:(NSString*)string config:(HTMLPurifier_Config*)config context:(HTMLPurifier_Context*)context;

@end

@@ -0,0 +1,27 @@
//
// HTMLPurifier_AttrDef_CSS_BorderRadius.m
// HTMLPurifier
//
// Created by Lukas Neumann on 15.08.15.
// Copyright (c) 2015 Mynigma. All rights reserved.
//

#import "HTMLPurifier_AttrDef_CSS_BorderRadius.h"
#import "BasicPHP.h"


@implementation HTMLPurifier_AttrDef_CSS_BorderRadius

/**
* @param string $string
* @param HTMLPurifier_Config $config
* @param HTMLPurifier_Context $context
* @return bool|string
*/
- (NSString*)validateWithString:(NSString*)string config:(HTMLPurifier_Config*)config context:(HTMLPurifier_Context*)context
{
return nil;
}


@end
118 changes: 37 additions & 81 deletions HTMLPurifier/Definition/HTMLPurifier_CSSDefinition.m
Expand Up @@ -29,6 +29,7 @@
#import "HTMLPurifier_AttrDef_CSS_AlphaValue.h"
#import "HTMLPurifier_AttrDef_Integer.h"
#import "HTMLPurifier_AttrDef_CSS_Outline.h"
#import "HTMLPurifier_AttrDef_CSS_BorderRadius.h"
#import "BasicPHP.h"


Expand Down Expand Up @@ -83,6 +84,16 @@ - (void)doSetup:(HTMLPurifier_Config*)config
// border-color
[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Multiple alloc] initWithSingle:color_or_transparent] forKey:@"border-color"];

// border-top-left-radius border-top-right-radius border-bottom-left-radius border-bottom-right-radius
HTMLPurifier_AttrDef_CSS_Composite* border_radius = [[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"initial"]],[[HTMLPurifier_AttrDef_CSS_Multiple alloc] initWithSingle:[HTMLPurifier_AttrDef_CSS_Length new] max:2],[[HTMLPurifier_AttrDef_CSS_Multiple alloc] initWithSingle:[HTMLPurifier_AttrDef_CSS_Percentage new] max:2]]];
[self.info setObject:border_radius forKey:@"border-top-left-radius"];
[self.info setObject:border_radius forKey:@"border-top-right-radius"];
[self.info setObject:border_radius forKey:@"border-bottom-right-radius"];
[self.info setObject:border_radius forKey:@"border-bottom-left-radius"];

// border-radius
[self.info setObject:[HTMLPurifier_AttrDef_CSS_BorderRadius new] forKey:@"border-radius"];

// border-spacing
[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Multiple alloc] initWithSingle:[HTMLPurifier_AttrDef_CSS_Length new] max:2] forKey:@"border-spacing"];

Expand Down Expand Up @@ -290,67 +301,50 @@ - (void)doSetup:(HTMLPurifier_Config*)config
[self.info setObject:length_percentage_auto forKey:@"right"];

// table-layout

[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"auto", @"fixed"]] forKey:@"table-layout"];

// text-align

[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"left", @"right", @"center", @"justify"] caseSensitive:NO] forKey:@"text-align"];

[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"capitalize", @"uppercase", @"lowercase", @"none"] caseSensitive:NO] forKey:@"text-transform"];




[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Length alloc] initWithMin:0] forKey:@"border-radius"];
// text-decoration
[self.info setObject:[HTMLPurifier_AttrDef_CSS_TextDecoration new] forKey:@"text-decoration"];

// text-indent
[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[HTMLPurifier_AttrDef_CSS_Length new], [HTMLPurifier_AttrDef_CSS_Percentage new]]] forKey:@"text-indent"];

// text-transform
[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"capitalize", @"uppercase", @"lowercase", @"none"] caseSensitive:NO] forKey:@"text-transform"];

[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"normal"]], [HTMLPurifier_AttrDef_CSS_Length new]]] forKey:@"word-spacing"];


[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[[HTMLPurifier_AttrDef_CSS_Length alloc] init], [[HTMLPurifier_AttrDef_CSS_Percentage alloc] init]]] forKey:@"text-indent"];

// top
[self.info setObject:length_percentage_auto forKey:@"top"];

// unicode-bidi
[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"normal",@"embed",@"bidi-override"]] forKey:@"unicode-bidi"];


[self.info setObject:maxLength forKey:@"width"];

[self.info setObject:[[HTMLPurifier_AttrDef_CSS_TextDecoration alloc] init] forKey:@"text-decoration"];



[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"auto", @"fixed"]] forKey:@"table-layout"];


// vertical-align
[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"baseline", @"sub", @"super", @"top", @"text-top", @"middle", @"bottom", @"text-bottom"]], [HTMLPurifier_AttrDef_CSS_Length new], [HTMLPurifier_AttrDef_CSS_Percentage new]]] forKey:@"vertical-align"];

// visibility
[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"visible",@"hidden",@"collapse"]] forKey:@"visibility"];

// white-space
[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"nowrap", @"normal", @"pre", @"pre-wrap", @"pre-line"]] forKey:@"white-space"];

// widows
[self.info setObject:[HTMLPurifier_AttrDef_Integer new] forKey:@"widows"];

NSArray* array = @[@"visible",@"hidden",@"collapse"];
HTMLPurifier_AttrDef_Enum* newEnum = [[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:array];
[self.info setObject:newEnum forKey:@"visibility"];
// width
[self.info setObject:maxLength forKey:@"width"];

// word-spacing
[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"normal"]], [HTMLPurifier_AttrDef_CSS_Length new]]] forKey:@"word-spacing"];

// z-index
[self.info setObject:[[HTMLPurifier_AttrDef_CSS_Composite alloc] initWithDefs:@[[HTMLPurifier_AttrDef_Integer new], _auto]] forKey:@"z-index"];


// These CSS properties don't work on many browsers, but we live
// in THE FUTURE!
[self.info setObject:[[HTMLPurifier_AttrDef_Enum alloc] initWithValidValues:@[@"nowrap", @"normal", @"pre", @"pre-wrap", @"pre-line"]] forKey:@"white-space"];

/*
if ([[config get:@"CSS.Proprietary"] boolValue])
{
[self doSetupProprietary:config];
}
if ([config get:@"CSS.Trusted"])
{
[self doSetupTrusted:config];
}*/

BOOL allow_important = [[config get:@"CSS.AllowImportant"] isEqual:@YES];


// wrap all attr-defs with decorator that handles !important
NSArray* allKeys = self.info.allKeys;
for(NSString* k in allKeys)
Expand All @@ -363,44 +357,6 @@ - (void)doSetup:(HTMLPurifier_Config*)config
[self setupConfigStuff:config];
}

// /**
// * @param HTMLPurifier_Config $config
// */
// protected function doSetupProprietary($config)
// {
// // Internet Explorer only scrollbar colors
// $this->info['scrollbar-arrow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
// $this->info['scrollbar-base-color'] = new HTMLPurifier_AttrDef_CSS_Color();
// $this->info['scrollbar-darkshadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
// $this->info['scrollbar-face-color'] = new HTMLPurifier_AttrDef_CSS_Color();
// $this->info['scrollbar-highlight-color'] = new HTMLPurifier_AttrDef_CSS_Color();
// $this->info['scrollbar-shadow-color'] = new HTMLPurifier_AttrDef_CSS_Color();
//
// // technically not proprietary, but CSS3, and no one supports it
// $this->info['opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
// $this->info['-moz-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
// $this->info['-khtml-opacity'] = new HTMLPurifier_AttrDef_CSS_AlphaValue();
//
// // only opacity, for now
// $this->info['filter'] = new HTMLPurifier_AttrDef_CSS_Filter();
//
// // more CSS3
// $this->info['page-break-after'] =
// $this->info['page-break-before'] = new HTMLPurifier_AttrDef_Enum(
// array(
// 'auto',
// 'always',
// 'avoid',
// 'left',
// 'right'
// )
// );
// $this->info['page-break-inside'] = new HTMLPurifier_AttrDef_Enum(array('auto', 'avoid'));
//
// }
//
// );


/**
* Performs extra config-based processing. Based off of
Expand Down
5 changes: 3 additions & 2 deletions HTMLPurifierTests/CSSTest.m
Expand Up @@ -337,7 +337,7 @@ - (void)testBackgroundPosition

- (void)testBackgroundColor
{
[self assertDef:@"background:lightgrey;"];
[self assertDef:@"background:lightgrey;" expected:@"background:#D3D3D3;"];
}

- (void)testBorderSpacing
Expand Down Expand Up @@ -392,7 +392,8 @@ - (void)testNodice

- (void)testPositionAbsolute
{
[self assertDef:@"position:absolute;" expected:nil];
// former: [self assertDef:@"position:absolute;" expected:nil];
[self assertDef:@"position:absolute;"];
}

- (void)testBackgroundImageUrlScript
Expand Down
2 changes: 1 addition & 1 deletion HTMLPurifierTests/HTMLPurifierTests.m
Expand Up @@ -135,7 +135,7 @@ -(void) testVisibility
{
NSString* test = @"<span style=\"display: none !important; visibility: hidden; width: 0; height: 0; opacity: 0; color: transparent;\"> Popular video by EinKamel: \"WM 2014 Müller boarisch\"</span>";
NSString* result = [purifier purify:test];
XCTAssertEqualObjects(result,@"<span style=\"display:none;visibility:hidden;width:0;height:0;\"> Popular video by EinKamel: \"WM 2014 Müller boarisch\"</span>");
XCTAssertEqualObjects(result,@"<span style=\"display:none;visibility:hidden;width:0;height:0;opacity:0;\"> Popular video by EinKamel: \"WM 2014 Müller boarisch\"</span>");
}

-(void) testBase64Img
Expand Down

0 comments on commit c7771ac

Please sign in to comment.