SlideShare a Scribd company logo
1 of 89
Download to read offline
#	This	is	h1
##	This	is	h2
###	This	is	h3
- This	is	ul
- This	is	ul
1.This	is	ol
2.This	is	ol
This|is|table
---|---|---
<h1>This	is	h1</h1>
<h2>This	is	h2</h2>
<h3>This	is	h3</h3>
<ul>
<li>This	is	ul</li>
<li>This	is	ul</li>
</ul>
<ol>
<li>This	is	ol</li>
<li>This	is	ol</li>
</ol>
<table>
마크다운 문서 HTML
```uml
User->Browser:	request	presentation
Browser->Renderer:	markdown
Renderer->Parser:	rendered	HTML	
Parser->Browser:	presentation	HTML
Browser->User:	do	presentation!
```
```chart
,angular,	react,	vue
LinkedIn,72747,70963,11590
Indeed,15141,14595,1810
Simplyhired,11367,10508,1526
Dice,4719,3529,331
type:	column
title:	Job	positioning
y.title:	Amount
x.title:	Site
```
<h1>This	is	h1</h1>
<h2>This	is	h2</h2>
<h3>This	is	h3</h3>
<ul>
<li>This	is	ul</li>
<li>This	is	ul</li>
</ul>
<ol>
<li>This	is	ol</li>
<li>This	is	ol</li>
</ol>
<table>
<div	class="area	a--title	-ready">
<div	class="title-main">This	is	h2</div>											
</div>
<div	class="block	b--titled	-ready">		
<h3>This	is	h3</h3>
<ul>
<li>This	is	ul<br>This	is	ul</li>
</ul>
<p>1.This	is	ol<br>2.	This	is	ol</p>
<table>…
</div>
HTML 프레젠테이션 HTML
.slide	{
width:	100vw;
height:	calc(100vw*0.5625);
}
.slide	{
width:	100vw;
height:	calc(100vw*0.5625);
}
.slide	{
width:	100vw;
height:	calc(100vw*0.5625);
max-width: calc(100vh*1.7777);
max-height:	100vh;
}
if (window.matchMedia('screen	and	(min-aspect-ratio:	16/9)').matches)	{
html.style.fontSize =	(currentFontSize *	1.7776)	+	'vh';
} else {
html.style.fontSize =	currentFontSize +	'vw';
}
Object.defineProperty(this,	'state',	{
get:	()	=>	this._state,
set:	(newState)	=>	{
switch(newState)	{
case	STATE.READY:
this._ready();
break;
case	STATE.ENTER:
this._enter();
break;
case	STATE.VISIBLE:
this._visible();
break;
…….
case	STATE.PASSED:
this._passed();
break;
…..
}}
});
.spotlight {
background-image:	radial-gradient(circle at 50px	50py,	transparent	100px,	rgba(0,0,0,0.5)	0)
}
.spotlight {
overflow: hidden;
}
.spotligiht:before {
content:	‘’;
border:	solid	9999px	rgba(0,0,0,0.5);
width:	100px;
height:	100px;
border-radius:	50%;	
}
<div class="slide s--contents -passed -visible">
<div class="area a--title -visible">
<div class="title-main">목차 슬라이드</div>
</div>
<div class="block b--normal -visible">
<ul>
<li>프로젝트 문서 내에 H1 단락이 1개 이상 존재하면 자동으로 생성됩니다.</li>
<li>발표모드 옵션에서 생성 여부를 결정할 수 있습니다.</li>
</ul>
<p><img src="https://nhnent.dooray.com/files/xxxxx"	alt="Screenshot-2018-4-3	Dooray
presentation mode test.png”>
</p>
</div>
</div>
<div class="slide s--contents -passed -visible">
<div class="area a--title -visible">
<div class="title-main">목차 슬라이드</div>
</div>
<div class="block b--normal -visible">
<ul>
<li>프로젝트 문서 내에 H1 단락이 1개 이상 존재하면 자동으로 생성됩니다.</li>
<li>발표모드 옵션에서 생성 여부를 결정할 수 있습니다.</li>
</ul>
<p><img src="https://nhnent.dooray.com/files/xxxxx"	alt="Screenshot-2018-4-3	Dooray
presentation mode test.png”>
</p>
</div>
</div>
<div class="slide s--contents -passed -visible">
<div class="area a--title -visible">
<div class="title-main">Table	of	Contents	Slides</div>
</div>
<div class="block b--normal -visible">
<ul>
<li>H1, If	more	than	one	paragraph	exists,	they	are	automatically	created.</li>
<li>You	can	decide	whether	to	create	it	in	the	presentation	mode	option.</li>
</ul>
<p><img src="https://nhnent.dooray.com/files/xxxxx"	alt="Screenshot-2018-4-3	Dooray
presentation mode test.png”>
</p>
</div>
</div>
import './pageMarker.css'
const MARKER	=	<div	class="slide-marker"><div	class="slide-marker-flip"></div></div>`;
class	PageMarker {
constructor()	{	…
this.flipEl =	this.el.querySelector('.slide-marker-flip');
this.initSvg();
}
install(pres)	{
this.eventManager.on('movedSlide',	this.inActiveMarker.bind(this));
this.eventManager.on('scroll',	()	=>	this.inActiveMarker());
}	
…
export default PageMarker;
// main.js
import PageMarker from ‘./plugin/pageMarker’
Presentation.use(PageMarker)
Dockerfile
FROM	xxxx
COPY .	.	
RUN npm install	
…
CMD [“node”,	“index.js”]
FROM	xxxx
COPY package*.json ./	
RUN npm install	
COPY .	.
…
CMD [“node”,	“index.js”]
[2019] 웹 프레젠테이션 개발기: Dooray! 발표 모드 해부하기
[2019] 웹 프레젠테이션 개발기: Dooray! 발표 모드 해부하기
[2019] 웹 프레젠테이션 개발기: Dooray! 발표 모드 해부하기
[2019] 웹 프레젠테이션 개발기: Dooray! 발표 모드 해부하기

More Related Content

More from NHN FORWARD

More from NHN FORWARD (20)

[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템[2019] 패션 시소러스 기반 상품 특징 분석 시스템
[2019] 패션 시소러스 기반 상품 특징 분석 시스템
 
[2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿![2019] 스몰 스텝: Android 렛츠기릿!
[2019] 스몰 스텝: Android 렛츠기릿!
 
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)딥러닝, 야 너도 할 수 있어(feat. PyTorch)
딥러닝, 야 너도 할 수 있어(feat. PyTorch)
 
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
NHN 베이스캠프: 신입사원들은 무엇을 배우나요?
 
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
[2019] GIF 스티커 만들기: 스파인 2D를 이용한 움직이는 스티커 만들기
 
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례[2019] 전기 먹는 하마의 다이어트 성공기   클라우드 데이터 센터의 에너지 절감 노력과 사례
[2019] 전기 먹는 하마의 다이어트 성공기 클라우드 데이터 센터의 에너지 절감 노력과 사례
 
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
[2019] 스몰 스텝: Dooray!를 이용한 업무 효율화/자동화(고객문의 시스템 구축)
 
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer[2019] 아직도 돈 주고 DB 쓰나요? for Developer
[2019] 아직도 돈 주고 DB 쓰나요? for Developer
 
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA[2019] 아직도 돈 주고 DB 쓰나요 for DBA
[2019] 아직도 돈 주고 DB 쓰나요 for DBA
 
[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system[2019] 비주얼 브랜딩: Basic system
[2019] 비주얼 브랜딩: Basic system
 
[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기[2019] PAYCO 매거진 서버 Kotlin 적용기
[2019] PAYCO 매거진 서버 Kotlin 적용기
 
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
[2019] 벅스 5.0 (feat. Kotlin, Jetpack)
 
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
[2019] Java에서 Fiber를 이용하여 동시성concurrency 프로그래밍 쉽게 하기
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
 
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
[2019] 비식별 데이터로부터의 가치 창출과 수익화 사례
 
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
[2019] 게임 서버 대규모 부하 테스트와 모니터링 이렇게 해보자
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
 
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
[2019] 언리얼 엔진을 통해 살펴보는 리플렉션과 가비지 컬렉션
 
[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우[2019] 글로벌 게임 서비스 노하우
[2019] 글로벌 게임 서비스 노하우
 
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
[2019] 배틀로얄 전장(map) 제작으로 알아보는 슈팅 게임 레벨 디자인
 

Recently uploaded

TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc
 

Recently uploaded (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Simplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptxSimplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptx
 
Decarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational PerformanceDecarbonising Commercial Real Estate: The Role of Operational Performance
Decarbonising Commercial Real Estate: The Role of Operational Performance
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
Quantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation ComputingQuantum Leap in Next-Generation Computing
Quantum Leap in Next-Generation Computing
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
JavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate GuideJavaScript Usage Statistics 2024 - The Ultimate Guide
JavaScript Usage Statistics 2024 - The Ultimate Guide
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Design and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data ScienceDesign and Development of a Provenance Capture Platform for Data Science
Design and Development of a Provenance Capture Platform for Data Science
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
The Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and InsightThe Zero-ETL Approach: Enhancing Data Agility and Insight
The Zero-ETL Approach: Enhancing Data Agility and Insight
 
Modernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using BallerinaModernizing Legacy Systems Using Ballerina
Modernizing Legacy Systems Using Ballerina
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Introduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDMIntroduction to use of FHIR Documents in ABDM
Introduction to use of FHIR Documents in ABDM
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 

[2019] 웹 프레젠테이션 개발기: Dooray! 발표 모드 해부하기