pagedesk¶
/usr/local/m2/setting.json
다음 영역에 대해 기술한다.
{
"functions": {
"contents": {
"pagedesk": {
...
}
}
}
}
How to use¶
명령어 리스트¶
명령어 |
파라미터 |
동작 |
---|---|---|
|
|
기본편집 기능인 https://example.com/view.html/pagedesk/edit/default
|
|
|
POST /pagedesk/edit/query HTTP/1.1
Host: example.com
Content-Type: text/plain
Content-Length: 2043
<html>
<body>
...
</body>
</html>
|
|
|
HTML 원본이 없는 경우, 사전 정의된 템플릿으로 HTML을 생성한다. {url}/pagedesk/edit/default/template/{name}
# 이미지 원본 요청시 템플릿을 사용하여, HTML을 생성한다.
https://example.com/image.jpg/pagedesk/edit/default/template/imgtpl
|
|
|
원본 HTML 중 셀렉터의 영역을 추출하여, HTML을 생성한다. # default 옵션 사용시 dom.extract 설정에 따른다.
https://example.com/view.html/pagedesk/edit/default/extract/default
# 인라인 명령시 설정값은 무시한다. 물론 설정 활성화는 필수이다.
# :id - id 영역추출
# .class - class 영역추출
# tag - tag 영역추출
https://example.com/view.html/pagedesk/edit/default/extract/selector=:id
# attribute
https://example.com/view.html/pagedesk/edit/default/extract/selector=iframe;attribute=srcdoc
# includeSelf
https://example.com/view.html/pagedesk/edit/default/extract/selector=div;includeSelf=true
|
함수 결과물 안내¶
이 함수는 HTML 원본을 편집하는 목적으로 개발되었으며, 함수가 만들어 낸 결과물의 첫 줄에 다음과 같은 주석이 포함된다.
# Content-Type: text/html
<!-- // through m2 pagedesk // -->
<html>
<head>
...
</head>
<body>
...
</body>
</html>
# Content-Type: application/json
{
"prddesc": "<!-- // through m2 pagedesk // --><html><head></head><body></body></html>"
}
위 주석을 통해 pagedesk가 만들어낸 결과물임을 태깅한다.
만약 pagedesk가 획득한 원본에 위 주석이 존재한다면, 이미 처리된 것으로 간주하여 추가 편집하지 않는다.
meta¶
"meta" : {
"enable" : false,
"keyword": "pagedesk",
"maxSourceSize": 1,
"maxDomSourceSize": 0
}
enable (기본: false)
pagedesk 활성화
keyword (기본: pagedesk)
pagedesk 키워드
maxSourceSize (기본: 1MB)
처리가능한 최대 원본 텍스트 크기 (단위: MB)
maxDomSourceSize (기본: 0MB)
dom 기능동작이 가능한 최대 원본 텍스트 크기 (단위: MB).
0
인 경우maxSourceSize
를 사용한다.
template¶
클라이언트 요청 시 원본없이 요청 정보만으로 사전 정의된 문서를 생성한다.
"template": {
"enable": false,
"list": [
{
"name": "imgtpl",
"type": "html",
"body": "<div><img src='${URL}'></div>"
}
]
}
enable (기본: false)
기능 활성화
list¶
템플릿 정의 후 /template/[name]
명령어를 통해 선택한다.
name
템플릿 명
type (기본: html)
문서 타입을 정의한다.
html
요청 Content-Type을text/html
로 정의한다.json
요청 Content-Type을application/json
으로 정의한다.
body
문서 본문을 정의한다.
아래 예약어를 사용할 수 있다.
예약어
설명
표현 예
실행 예
URL
요청 URL
${URL}
https://foo.com/dir/image.jpg?seq=1234
replace¶
{
"functions": {
"contents": {
"pagedesk": {
"replace": {
...
}
}
}
}
}
pre¶
소스가 유입되는 시점에 문자열을 치환한다.
"pre": {
"enable" : false,
"list" : [
{
"src": "://foo.com/",
"dest": "://new.foo.com/"
},
{
"src" : ".bar.com/image/",
"dest" : ".bar.com/s3/image/",
"flags": "gi"
}
]
}
enable (기본: false)
문자열 사전치환 활성화
list
문자열 치환 리스트
src
대상 문자열
dest
반환 문자열
flags (기본: g)
post¶
모든 가공이 완료된 후 응답되기 직전에 문자열을 치환한다.
"post": {
"enable" : false,
"list" : [
{
"src" : "://foo.com/",
"dest" : "://new.foo.com/"
},
{
"src" : ".bar.com/image/",
"dest" : ".bar.com/s3/image/"
}
]
}
enable (기본: false)
문자열 사후치환 활성화
list
문자열 치환 리스트
src
대상 문자열
dest
반환 문자열
flags (기본: g)
html¶
"enable" : false
enable (기본: false)
텍스트 html 문서를 인식한다. 이 모듈이 정상적으로 로딩되어야 dom 처리가 가능하다.
in¶
replace.pre
가 수행된 텍스트를 html 소스로 입력시킨다.
"in": {
"at": null,
"escaped": true
}
at
텍스트가 HTML이 아닌 경우(i.e.
JSON
), HTML의 위치 지시자escaped
true
라면 소스 텍스트가 escape character 치환 처리가 된 것으로 인지하여 unescape 처리한다.
out¶
처리가 완료된 html의 출력형태를 구성한다.
"out": {
"at": null,
"escaped": true
}
at
편집된 HTML을 소스 텍스트의 위치 지시자에 삽입한다. 이 값이
null
이라면 편집된 HTML이 출력 텍스트가 된다.escaped
true
라면 소스 텍스트에 삽입전 escape 처리한다.
dom¶
DOM(Document Object Model)에 기반하여 태그를 추가/삭제한다.
{
"functions": {
"contents": {
"pagedesk": {
"dom": {
...
}
}
}
}
}
extract¶
extract
명령어 지원을 위한 설정. DOM 생성 직후 실행한다.
"extract" : {
"enable": false,
"selector": "#productDetail",
"attribute": null,
"includeSelf": false
}
enable (기본: false)
요소 추출 활성화
selector (기본: null)
추출 대상 셀렉터
attribute (기본: null)
대상 요소의 속성에서 추출
includeSelf (기본: false)
추출 대상에 셀프 요소 포함 여부
# 원본
<section>
<iframe srcdoc="<div><img src=image.jpg></div>">
</section>
# selector=section
<iframe srcdoc="<div><img src=image.jpg></div>">
# selector=section; includeSelf=true
<section>
<iframe srcdoc="<div><img src=image.jpg></div>">
</section>
# selector=iframe; attribute=srcdoc
<div><img src=image.jpg></div>
insert¶
"insert" : {
"enable" : false,
"action": "appendChild",
"list" : [
{
"selector" : "#aa.b.c",
"action" : "appendChild",
"html" : "<p>this is sample</p>"
}
]
}
enable (기본: false)
태그삽입 활성화
action (기본: appendChild)
태그삽입 위치
appendChild
대상 노드의 마지막 child로 삽입insertBefore
대상 노드의 이전 sibling으로 삽입insertAfter
대상 노드의 다음 sibling으로 삽입wrapInnerHtml
대상 노드의 모든 자식 노드를html
로 감싼다.<div id="desc"> <h3>Heading</h3> <p>Paragraph</p> </div>
<div id="desc">
하위 태그를 감싸고 싶다면 아래와 같이 설정한다.{ "selector" : "#desc", "action" : "wrapInnerHtml", # wrapInnerHtml 에서는 닫는 태그를 넣지 않는다. "html" : "<div id="wrapdesc">" # 넣더라도 무시된다. }
위 설정을 통해 출력되는
DOM
은 다음과 같다.<div id="desc"> <div id="wrapdesc"> <h3>Heading</h3> <p>Paragraph</p> </div> </div>
list
태그 삽입 리스트
selector
셀렉터
action
이 아이템에만 적용할 태그 삽입위치. 생략시 상위 레벨의
action
값 사용.html
삽입할 html 태그
remove¶
"remove" : {
"enable" : false,
"includeChild" : true,
"elements" : [
"applet",
"acronym",
"bgsound",
"dir",
"frame",
"frameset",
"noframes",
"hgroup",
"isindex",
"listing",
"nextid",
"noembed",
"strike",
"xmp",
"basefont",
"big",
"blink",
"center",
"font",
"marquee",
"menu",
"menuitem",
"multicol",
"nobr",
"spacer",
"tt",
"rb",
"rtc"
]
}
enable (기본: false)
태그삭제 활성화
includeChild (기본: true)
자식태그 포함 삭제 기본 값
elements
삭제할 태그목록
Note
만약 태그별로 자식포함 includeChild
를 조절하고 싶다면 다음과 같이 객체표현으로 지정가능하다.
"remove" : {
"enable" : false,
"includeChild" : true,
"elements" : [
"applet",
{"tag": "acronym", "includeChild" : false},
"bgsound",
{"tag": "dir", "includeChild" : true}
... (생략 )...
]
}
anchor¶
"anchor": {
"enable": false,
"enableLink": true,
"target": {
"framename": "_blank",
"overwrite": true
}
}
enable (기본: false)
<a> 태그 컨트롤
enableLink (기본: true)
false라면 href 속성을 삭제한다.
target (기본: _blank)
<a target> 속성을 처리한다.
framename
null
인 경우 target을 정의하지 않는다._blank|_self|_parent|_top
브라우저 예약어를 정의한다.[framename]
그 외 사전 정의된 프레임 명을 삽입한다.
overwrite
true
항상framename
을 삽입한다.false
원본 target 부재시 삽입한다.
matchingList (기본: [])
매칭 리스트
domain
도메인 매칭 패턴
Note
만약
example.com
도메인에만 <a> 태그의 링크 기능을 설정하려면matchingList
를 사용한다."anchor": { "enable": true, "enableLink": false, "matchingList": [ { "domain": "(.*).example.com", "enableLink": true, "target": { "framename": "_self" } } ] }
refctrl¶
상품기술서 등 HTML
본문에서 참조되는 임의의 리소스가 허가된 도메인이 아닐 경우(또는 해당할 경우) 참조되지 않도록 상품기술서를 변경한다.
"refctrl" : {
"enable" : false,
"mode" : "whitelist",
"domains" : [ "www.youtube.com", "youtu.be" ],
"tags" : [
{
"name" : "iframe",
"attr" : "src",
"action" : "removeTag"
},
{
"name" : "embed",
"attr" : "src",
"action" : "removeAttr",
"domains" : [ "www.safe.com" ],
}
]
}
참조되는 리소스(i.e src
또는 href
등) 에 대해 domains
필드에 기반하여 리소스 참조 정책을 수정한다.
enable (기본: false)
참조소스 제어 활성화 설정.
true
인 경우에만 참조 소스를 제어한다.mode
도메인 목록인
domain
설정 사용 정책whitelist (기본)
도메인 목록에 존재하지 않는 리소스 참조만 허용한다. 다시 말해 존재하지 않는다면 수정한다.blacklist
도메인 목록에 존재하는 리소스만 수정한다.
domains
대상 도메인 목록. 문자열 배열이다.
tags
수정대상 태그와 속성, 정책 세트를 구성한다.
name
태그 명칭attr
태그가 리소스를 참조하는 속성. 예를 들어<iframe>
의 경우src
속성이며,<a>
의 경우href
이다.action
수정 정책. 다음 값 중 하나를 가진다.removeTag (기본)
해당 태그를 삭제한다.removeAttr
해당 속성을 삭제한다.replaceAttr
속성명을 변경한다. 값은 그대로 유지된다.insertAttr
추가 속성을 삽입한다.
domains (기본: null)
이 태그.속성에 한정하여 적용할 도메인 목록
다음과 같이 HTML
내 알 수 없는 리소스를 <iframe>
으로 참조하는 경우 이를 제어하는 방법에 대해 설명한다.
<p>foo bar</p>
<iframe width="560" height="315" src="https://foo.com/embed/xW95ui6xDNM" title="Unknown video player" allowfullscreen></iframe>
<hr>
다음은 YouTube를 제외한 어떠한 <iframe>
참조도 허용하지 않는 설정이다.
# functions.contents.pagedesk.dom
"refctrl" : {
"enable" : true,
"mode" : "whitelist",
"domains" : [ "youtube.com", "www.youtube.com" ],
"tags" : [
{
"name" : "iframe",
"attr" : "src",
"action" : "removeTag"
}
]
}
Note
위 설정에서 "mode" : "blacklist"
으로 설정한다면 YouTube에 대해서만 태그를 수정한다로 의미가 변경된다.
tags.action
값에 따라 태그가 수정 정책을 정교하게 구성한다.
"action" : "removeTag"
해당 태그를 삭제한다. 아래와 같이<iframe>
태그가 삭제된다.<p>foo bar</p> <hr>
"action" : "removeAttr"
해당 태그의 속성을 삭제한다. 아래와 같이attr
필드의 값으로 설정한src
속성이 삭제된다.<p>foo bar</p> <iframe width="560" height="315" title="Unknown video player" allowfullscreen></iframe> <hr>
"action" : "replaceAttr"
해당 태그의 속성 값을 교체한다. 아래와 같이src
속성이alt
속성으로 대체되었다.<p>foo bar</p> <iframe width="560" height="315" alt="https://foo.com/embed/xW95ui6xDNM" title="Unknown video player" allowfullscreen></iframe> <hr>
대체 속성은 추가적으로
replaceAttr
필드를 참조한다.{ "name" : "iframe", "attr" : "src", "action" : "replaceAttr", "replaceAttr" : "alt" }
"action" : "insertAttr"
설정된 속성을 추가로 태그에 삽입한다. 아래와 같이 추가속성을 통해 해당 태그가 노출되지 않도록 수정한다.<p>foo bar</p> <iframe width="560" height="315" src="https://foo.com/embed/xW95ui6xDNM" style="display:none;" alt="hidden by m2" title="Unknown video player" allowfullscreen></iframe> <hr>
이를 위해 덧붙여질
insertAttr
속성 리스트를 추가 구성해야 한다.{ "name" : "iframe", "attr" : "src", "action" : "insertAttr", "insertAttr" : [ { "name": "style", "value": "display:none;" }, { "name": "alt", "value": "hidden by m2;" } ] }