Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
大大大太阳yt
driver.js
提交
cc0ef69e
D
driver.js
项目概览
大大大太阳yt
/
driver.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
driver.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cc0ef69e
编写于
3月 10, 2018
作者:
K
Kamran Ahmed
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Refactor and single element highlight
上级
76a51580
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
81 addition
and
34 deletion
+81
-34
assets/scripts/src/popover.js
assets/scripts/src/popover.js
+1
-1
assets/scripts/src/sholo.js
assets/scripts/src/sholo.js
+63
-33
index.html
index.html
+17
-0
未找到文件。
assets/scripts/src/popover.js
浏览文件 @
cc0ef69e
...
...
@@ -133,7 +133,7 @@ export default class Popover extends Element {
this
.
closeBtnNode
.
innerHTML
=
this
.
options
.
closeBtnText
;
// If there was only one item, hide the buttons
if
(
this
.
options
.
totalCount
===
1
)
{
if
(
!
this
.
options
.
totalCount
||
this
.
options
.
totalCount
===
1
)
{
this
.
footerNode
.
style
.
display
=
'
none
'
;
return
;
}
...
...
assets/scripts/src/sholo.js
浏览文件 @
cc0ef69e
...
...
@@ -126,6 +126,7 @@ export default class Sholo {
*/
reset
()
{
this
.
currentStep
=
0
;
this
.
steps
=
[];
this
.
overlay
.
clear
();
}
...
...
@@ -167,6 +168,10 @@ export default class Sholo {
}
}
/**
* Defines steps to be highlighted
* @param {array} steps
*/
defineSteps
(
steps
)
{
this
.
steps
=
[];
...
...
@@ -175,58 +180,83 @@ export default class Sholo {
throw
new
Error
(
`Element (query selector string) missing in step
${
index
}
`
);
}
const
elementOptions
=
Object
.
assign
({},
this
.
options
,
step
);
const
domElement
=
this
.
document
.
querySelector
(
step
.
element
);
if
(
!
domElement
)
{
console
.
warn
(
`Element to highlight
${
step
.
element
}
not found`
);
const
element
=
this
.
prepareElementFromStep
(
step
,
steps
,
index
);
if
(
!
element
)
{
return
;
}
let
popover
=
null
;
if
(
elementOptions
.
popover
&&
elementOptions
.
popover
.
description
)
{
const
popoverOptions
=
Object
.
assign
(
{},
this
.
options
,
elementOptions
.
popover
,
{
totalCount
:
steps
.
length
,
currentIndex
:
index
,
isFirst
:
index
===
0
,
isLast
:
index
===
steps
.
length
-
1
,
},
);
popover
=
new
Popover
(
popoverOptions
,
this
.
window
,
this
.
document
);
}
const
element
=
new
Element
(
domElement
,
elementOptions
,
popover
,
this
.
overlay
,
this
.
window
,
this
.
document
);
this
.
steps
.
push
(
element
);
});
}
start
()
{
/**
* Prepares the step received from the user and returns an instance
* of Element
*
* @param currentStep Step that is being prepared
* @param allSteps List of all the steps
* @param index Index of the current step
* @returns {null|Element}
*/
prepareElementFromStep
(
currentStep
,
allSteps
=
[],
index
=
0
)
{
let
querySelector
=
''
;
let
elementOptions
=
{};
if
(
typeof
currentStep
===
'
string
'
)
{
querySelector
=
currentStep
;
}
else
{
querySelector
=
currentStep
.
element
;
elementOptions
=
Object
.
assign
({},
this
.
options
,
currentStep
);
}
const
domElement
=
this
.
document
.
querySelector
(
querySelector
);
if
(
!
domElement
)
{
console
.
warn
(
`Element to highlight
${
querySelector
}
not found`
);
return
null
;
}
let
popover
=
null
;
if
(
elementOptions
.
popover
&&
elementOptions
.
popover
.
description
)
{
const
popoverOptions
=
Object
.
assign
(
{},
this
.
options
,
elementOptions
.
popover
,
{
totalCount
:
allSteps
.
length
,
currentIndex
:
index
,
isFirst
:
index
===
0
,
isLast
:
index
===
allSteps
.
length
-
1
,
},
);
popover
=
new
Popover
(
popoverOptions
,
this
.
window
,
this
.
document
);
}
return
new
Element
(
domElement
,
elementOptions
,
popover
,
this
.
overlay
,
this
.
window
,
this
.
document
);
}
/**
* Initiates highlighting steps from first step
* @param {number} index at which highlight is to be started
*/
start
(
index
=
0
)
{
if
(
!
this
.
steps
||
this
.
steps
.
length
===
0
)
{
throw
new
Error
(
'
There are no steps defined to iterate
'
);
}
this
.
currentStep
=
0
;
this
.
overlay
.
highlight
(
this
.
steps
[
0
]);
this
.
currentStep
=
index
;
this
.
overlay
.
highlight
(
this
.
steps
[
index
]);
}
/**
* Highlights the given selector
* @param selector string query selector
* @todo make it accept json or query selector
* Highlights the given element
* @param {string|{element: string, popover: {}}} selector Query selector or a step definition
*/
highlight
(
selector
)
{
const
domElement
=
this
.
document
.
querySelector
(
selector
);
if
(
!
domElement
)
{
console
.
warn
(
`Element to highlight
${
selector
}
not found`
);
const
element
=
this
.
prepareElementFromStep
(
selector
);
if
(
!
element
)
{
return
;
}
// @todo add options such as position, button texts, additional classes etc
const
popover
=
new
Popover
(
this
.
options
,
this
.
window
,
this
.
document
);
const
element
=
new
Element
(
domElement
,
this
.
options
,
popover
,
this
.
overlay
,
this
.
window
,
this
.
document
);
this
.
overlay
.
highlight
(
element
);
}
}
index.html
浏览文件 @
cc0ef69e
...
...
@@ -66,12 +66,28 @@
sholo
.
defineSteps
([
{
element
:
'
.section__header
'
,
popover
:
{
title
:
'
Adding Introductions
'
,
description
:
'
You can use it to add popovers on top of the website
'
,
position
:
'
bottom
'
,
},
},
{
element
:
'
.btn__example
'
,
popover
:
{
title
:
'
Adding Introductions
'
,
description
:
'
You can use it to add popovers on top of the website
'
,
position
:
'
left
'
,
},
},
{
element
:
'
.btn__light
'
,
popover
:
{
title
:
'
Adding Introductions
'
,
description
:
'
You can use it to add popovers on top of the website
'
,
position
:
'
right
'
,
},
},
{
element
:
'
.section__how
'
,
popover
:
{
...
...
@@ -103,6 +119,7 @@
.
addEventListener
(
'
click
'
,
function
()
{
sholo
.
start
();
});
</script>
</body>
</html>
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录