smalltalk
/
osmo-st-all
Archived
1
0
Fork 0

Don't encode urls except in redirections

This commit is contained in:
Nicolas Petton 2010-05-21 13:26:40 +02:00
parent b377e20282
commit b2c53e0ad7
5 changed files with 52 additions and 38 deletions

View File

@ -4,4 +4,9 @@ Object extend [
<category: '*Iliad-Core'>
self displayOn: aStream
]
printEncodedOn: aStream [
<category: '*Iliad-Core'>
Iliad.ILEncoder encodeForHTTP: self greaseString on: aStream
]
]

View File

@ -123,7 +123,7 @@ I know how to print myself in HTML format with the #printHtmlOn: method'>
nextPut: Character space;
nextPutAll: anAttribute key;
nextPutAll: '="'.
ILEncoder encodeForHTTP: anAttribute value greaseString on: aStream.
anAttribute value printEncodedOn: aStream.
aStream nextPut: $"
]

View File

@ -4,7 +4,14 @@ Object subclass: ILEncoder [
<comment: nil>
ILEncoder class [
printUrl: aString encoded: aBoolean on: aStream [
<category: 'encoding'>
aBoolean
ifTrue: [self encodeUrl: aString on: aStream]
ifFalse: [aStream nextPutAll: aString]
]
encodeUrl: aString on: aStream[
<category: 'encoding'>
aString do: [:char |

View File

@ -151,7 +151,7 @@ fragment: <String> or nil'>
"Answer the path converted to a string."
<category: 'converting'>
^String streamContents: [:stream | self encodePathOn: stream]
^String streamContents: [:stream | self printPathOn: stream encoded: false]
]
relativeTo: anUrl [
@ -195,27 +195,15 @@ fragment: <String> or nil'>
ifTrue: [port := (httpHost copyAfter: $:) asNumber]]
]
encodeFragmentOn: aStream [
printOn: aStream encoded: aBoolean usingHtmlEntities: anotherBoolean [
<category: 'encoding'>
fragment ifNil: [^self].
aStream nextPut: $#.
aStream nextPutAll: (ILEncoder encode: fragment)
self printServerOn: aStream encoded: aBoolean.
self printPathOn: aStream encoded: aBoolean.
self printParametersOn: aStream encoded: aBoolean usingHtmlEntities: anotherBoolean.
self printFragmentOn: aStream encoded: aBoolean
]
encodeOn: aStream [
<category: 'encoding'>
self encodeOn: aStream usingHtmlEntities: true
]
encodeOn: aStream usingHtmlEntities: aBoolean [
<category: 'encoding'>
self encodeServerOn: aStream.
self encodePathOn: aStream.
self encodeParametersOn: aStream usingHtmlEntities: aBoolean.
self encodeFragmentOn: aStream
]
encodeParametersOn: aStream usingHtmlEntities: aBoolean [
printParametersOn: aStream encoded: aBoolean usingHtmlEntities: anotherBoolean [
<category: 'encoding'>
| first |
first := true.
@ -223,36 +211,36 @@ fragment: <String> or nil'>
parameters keysAndValuesDo: [:key :value |
aStream nextPutAll: (first
ifTrue: [first := false. '?']
ifFalse: [aBoolean ifTrue: ['&amp;'] ifFalse: ['&']]).
ILEncoder encodeUrl: key on: aStream.
ifFalse: [anotherBoolean ifTrue: ['&amp;'] ifFalse: ['&']]).
ILEncoder printUrl: key encoded: aBoolean on: aStream.
value ifNotNil: [
aStream nextPut: $=.
ILEncoder encodeUrl: value greaseString on: aStream]]
ILEncoder printUrl: value greaseString encoded: aBoolean on: aStream]]
]
encodePathOn: aStream [
printPathOn: aStream encoded: aBoolean [
<category: 'encoding'>
path ifNil: [^self].
aStream nextPut: $/.
path
do: [:each |
ILEncoder encodeUrl: each on: aStream]
ILEncoder printUrl: each encoded: aBoolean on: aStream]
separatedBy: [aStream nextPut: $/]
]
encodeServerOn: aStream [
printServerOn: aStream encoded: aBoolean [
<category: 'encoding'>
hostname ifNil: [^self].
aStream
nextPutAll: scheme;
nextPutAll: '://'.
username notNil ifTrue: [
ILEncoder encodeUrl: username on: aStream.
ILEncoder printUrl: username encoded: aBoolean on: aStream.
password notNil ifTrue: [
aStream nextPut: $:.
ILEncoder encodeUrl: password on: aStream].
ILEncoder printUrl: password encoded: aBoolean on: aStream].
aStream nextPut: $@].
ILEncoder encodeUrl: hostname on: aStream.
ILEncoder printUrl: hostname encoded: aBoolean on: aStream.
port notNil ifTrue: [
((scheme = 'http' and: [port = 80])
or: [scheme = 'https' and: [port = 443]])
@ -262,6 +250,13 @@ fragment: <String> or nil'>
print: port]]
]
printFragmentOn: aStream encoded: aBoolean [
<category: 'encoding'>
fragment ifNil: [^self].
aStream nextPut: $#.
ILEncoder printUrl: fragment encoded: aBoolean on: aStream
]
fragment [
"Answer the fragment part of the URL."
@ -491,9 +486,19 @@ fragment: <String> or nil'>
yourself
]
printOn: aStream encoded: aBoolean [
<category: 'printing'>
self printOn: aStream encoded: aBoolean usingHtmlEntities: false
]
printOn: aStream [
<category: 'printing'>
self encodeOn: aStream usingHtmlEntities: false
self printOn: aStream encoded: true
]
printEncodedOn: aStream [
<category: 'printing'>
self printOn: aStream encoded: false usingHtmlEntities: true
]
]

View File

@ -1,4 +1,4 @@
ILUIWidget subclass: ILWidgetsPaginator [
ILWidget subclass: ILWidgetsPaginator [
| widgets currentPage widgetsPerPage |
<category: 'Iliad-More-UI'>
@ -64,11 +64,8 @@ ILUIWidget subclass: ILWidgetsPaginator [
contents [
<category: 'building'>
^[:e |
e div
class: self cssClass;
build: [:div |
self visibleWidgets do: [:each |
div build: each]];
build: self paginator]
self visibleWidgets do: [:each |
e build: each].
e build: self paginator]
]
]