Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
Litemall
Commits
b1af78f9
Commit
b1af78f9
authored
Dec 14, 2019
by
Junling Bu
Browse files
chore[litemall-wx]: 使用vant-weapp 1.0
parent
07351378
Changes
311
Show whitespace changes
Inline
Side-by-side
litemall-wx/lib/vant-weapp/divider/index.json
0 → 100644
View file @
b1af78f9
{
"component"
:
true
,
"usingComponents"
:
{}
}
\ No newline at end of file
litemall-wx/lib/vant-weapp/divider/index.wxml
0 → 100644
View file @
b1af78f9
<wxs src="../wxs/utils.wxs" module="utils" />
<view
class="custom-class {{ utils.bem('divider', [{dashed, hairline}, contentPosition]) }}"
style="{{ borderColor ? 'border-color: ' + borderColor + ';' : '' }}{{ textColor ? 'color: ' + textColor + ';' : '' }} {{ fontSize ? 'font-size: ' + fontSize + 'px;' : '' }} {{ customStyle }}"
>
<slot />
</view>
litemall-wx/lib/vant-weapp/divider/index.wxss
0 → 100644
View file @
b1af78f9
@import '../common/index.wxss';.van-divider{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;margin:16px 0;margin:var(--divider-margin,16px 0);color:#969799;color:var(--divider-text-color,#969799);font-size:14px;font-size:var(--divider-font-size,14px);line-height:24px;line-height:var(--divider-line-height,24px);border:0 solid #ebedf0;border-color:var(--divider-border-color,#ebedf0)}.van-divider:after,.van-divider:before{display:block;-webkit-flex:1;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:1px 0 0}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{-webkit-transform:scaleY(.5);transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:16px;margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:16px;margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:10%;max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:10%;max-width:var(--divider-content-right-width,10%)}
\ No newline at end of file
litemall-wx/lib/vant-weapp/dropdown-item/index.d.ts
0 → 100644
View file @
b1af78f9
export
{};
litemall-wx/lib/vant-weapp/dropdown-item/index.js
0 → 100644
View file @
b1af78f9
import
{
VantComponent
}
from
'
../common/component
'
;
VantComponent
({
field
:
true
,
relation
:
{
name
:
'
dropdown-menu
'
,
type
:
'
ancestor
'
,
linked
(
target
)
{
this
.
parent
=
target
;
this
.
updateDataFromParent
();
},
unlinked
()
{
this
.
parent
=
null
;
}
},
props
:
{
value
:
{
type
:
null
,
observer
:
'
rerender
'
},
title
:
{
type
:
String
,
observer
:
'
rerender
'
},
disabled
:
Boolean
,
titleClass
:
{
type
:
String
,
observer
:
'
rerender
'
},
options
:
{
type
:
Array
,
value
:
[],
observer
:
'
rerender
'
}
},
data
:
{
transition
:
true
,
showPopup
:
false
,
showWrapper
:
false
,
displayTitle
:
''
},
methods
:
{
rerender
()
{
wx
.
nextTick
(()
=>
{
this
.
parent
&&
this
.
parent
.
updateItemListData
();
});
},
updateDataFromParent
()
{
if
(
this
.
parent
)
{
const
{
overlay
,
duration
,
activeColor
,
closeOnClickOverlay
,
direction
}
=
this
.
parent
.
data
;
this
.
setData
({
overlay
,
duration
,
activeColor
,
closeOnClickOverlay
,
direction
});
}
},
onClickOverlay
()
{
this
.
toggle
();
this
.
$emit
(
'
close
'
);
},
onOptionTap
(
event
)
{
const
{
option
}
=
event
.
currentTarget
.
dataset
;
const
{
value
}
=
option
;
const
shouldEmitChange
=
this
.
data
.
value
!==
value
;
this
.
setData
({
showPopup
:
false
,
value
});
setTimeout
(()
=>
{
this
.
setData
({
showWrapper
:
false
});
},
this
.
data
.
duration
||
0
);
this
.
rerender
();
if
(
shouldEmitChange
)
{
this
.
$emit
(
'
change
'
,
value
);
}
},
toggle
(
show
,
options
=
{})
{
const
{
showPopup
,
duration
}
=
this
.
data
;
if
(
show
==
null
)
{
show
=
!
showPopup
;
}
if
(
show
===
showPopup
)
{
return
;
}
if
(
!
show
)
{
const
time
=
options
.
immediate
?
0
:
duration
;
this
.
setData
({
transition
:
!
options
.
immediate
,
showPopup
:
show
});
setTimeout
(()
=>
{
this
.
setData
({
showWrapper
:
false
});
},
time
);
this
.
rerender
();
return
;
}
this
.
parent
.
getChildWrapperStyle
().
then
((
wrapperStyle
=
''
)
=>
{
this
.
setData
({
transition
:
!
options
.
immediate
,
showPopup
:
show
,
wrapperStyle
,
showWrapper
:
true
});
this
.
rerender
();
});
}
}
});
litemall-wx/lib/vant-weapp/dropdown-item/index.json
0 → 100644
View file @
b1af78f9
{
"component"
:
true
,
"usingComponents"
:
{
"van-popup"
:
"../popup/index"
,
"van-cell"
:
"../cell/index"
,
"van-icon"
:
"../icon/index"
}
}
litemall-wx/lib/vant-weapp/dropdown-item/index.wxml
0 → 100644
View file @
b1af78f9
<wxs src="../wxs/utils.wxs" module="utils" />
<view
wx:if="{{ showWrapper }}"
class="{{ utils.bem('dropdown-item', direction) }}"
style="{{ wrapperStyle }}"
>
<van-popup
show="{{ showPopup }}"
custom-style="position: absolute;"
overlay-style="position: absolute;"
overlay="{{ overlay }}"
position="{{ direction === 'down' ? 'top' : 'bottom' }}"
duration="{{ transition ? duration : 0 }}"
close-on-click-overlay="{{ closeOnClickOverlay }}"
bind:close="onClickOverlay"
>
<van-cell
wx:for="{{ options }}"
wx:key="{{ item.value }}"
data-option="{{ item }}"
class="{{ utils.bem('dropdown-item__option', { active: item.value === value } ) }}"
clickable
icon="{{ item.icon }}"
bind:tap="onOptionTap"
>
<view
slot="title"
class="van-dropdown-item__title"
style="{{ item.value === value ? 'color:' + activeColor : '' }}"
>
{{ item.text }}
</view>
<van-icon
wx:if="{{ item.value === value }}"
name="success"
class="van-dropdown-item__icon"
color="{{ activeColor }}"
/>
</van-cell>
<slot />
</van-popup>
</view>
litemall-wx/lib/vant-weapp/dropdown-item/index.wxss
0 → 100644
View file @
b1af78f9
@import '../common/index.wxss';.van-dropdown-item{position:fixed;right:0;left:0;overflow:hidden}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:#1989fa;color:var(--dropdown-menu-option-active-color,#1989fa)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit}
\ No newline at end of file
litemall-wx/lib/vant-weapp/dropdown-menu/index.d.ts
0 → 100644
View file @
b1af78f9
export
{};
litemall-wx/lib/vant-weapp/dropdown-menu/index.js
0 → 100644
View file @
b1af78f9
import
{
VantComponent
}
from
'
../common/component
'
;
import
{
addUnit
}
from
'
../common/utils
'
;
let
ARRAY
=
[];
VantComponent
({
field
:
true
,
relation
:
{
name
:
'
dropdown-item
'
,
type
:
'
descendant
'
,
linked
(
target
)
{
this
.
children
.
push
(
target
);
this
.
updateItemListData
();
},
unlinked
(
target
)
{
this
.
children
=
this
.
children
.
filter
((
child
)
=>
child
!==
target
);
this
.
updateItemListData
();
}
},
props
:
{
activeColor
:
{
type
:
String
,
observer
:
'
updateChildrenData
'
},
overlay
:
{
type
:
Boolean
,
value
:
true
,
observer
:
'
updateChildrenData
'
},
zIndex
:
{
type
:
Number
,
value
:
10
},
duration
:
{
type
:
Number
,
value
:
200
,
observer
:
'
updateChildrenData
'
},
direction
:
{
type
:
String
,
value
:
'
down
'
,
observer
:
'
updateChildrenData
'
},
closeOnClickOverlay
:
{
type
:
Boolean
,
value
:
true
,
observer
:
'
updateChildrenData
'
},
closeOnClickOutside
:
{
type
:
Boolean
,
value
:
true
}
},
data
:
{
itemListData
:
[]
},
beforeCreate
()
{
const
{
windowHeight
}
=
wx
.
getSystemInfoSync
();
this
.
windowHeight
=
windowHeight
;
this
.
children
=
[];
ARRAY
.
push
(
this
);
},
destroyed
()
{
ARRAY
=
ARRAY
.
filter
(
item
=>
item
!==
this
);
},
methods
:
{
updateItemListData
()
{
this
.
setData
({
itemListData
:
this
.
children
.
map
((
child
)
=>
child
.
data
)
});
},
updateChildrenData
()
{
this
.
children
.
forEach
((
child
)
=>
{
child
.
updateDataFromParent
();
});
},
toggleItem
(
active
)
{
this
.
children
.
forEach
((
item
,
index
)
=>
{
const
{
showPopup
}
=
item
.
data
;
if
(
index
===
active
)
{
item
.
toggle
();
}
else
if
(
showPopup
)
{
item
.
toggle
(
false
,
{
immediate
:
true
});
}
});
},
close
()
{
this
.
children
.
forEach
((
child
)
=>
{
child
.
toggle
(
false
,
{
immediate
:
true
});
});
},
getChildWrapperStyle
()
{
const
{
zIndex
,
direction
}
=
this
.
data
;
return
this
.
getRect
(
'
.van-dropdown-menu
'
).
then
((
rect
)
=>
{
const
{
top
=
0
,
bottom
=
0
}
=
rect
;
const
offset
=
direction
===
'
down
'
?
bottom
:
this
.
windowHeight
-
top
;
let
wrapperStyle
=
`z-index:
${
zIndex
}
;`
;
if
(
direction
===
'
down
'
)
{
wrapperStyle
+=
`top:
${
addUnit
(
offset
)}
;`
;
}
else
{
wrapperStyle
+=
`bottom:
${
addUnit
(
offset
)}
;`
;
}
return
wrapperStyle
;
});
},
onTitleTap
(
event
)
{
const
{
index
}
=
event
.
currentTarget
.
dataset
;
const
child
=
this
.
children
[
index
];
if
(
!
child
.
data
.
disabled
)
{
ARRAY
.
forEach
(
menuItem
=>
{
if
(
menuItem
&&
menuItem
.
data
.
closeOnClickOutside
&&
menuItem
!==
this
)
{
menuItem
.
close
();
}
});
this
.
toggleItem
(
index
);
}
}
}
});
litemall-wx/lib/vant-weapp/dropdown-menu/index.json
0 → 100644
View file @
b1af78f9
{
"component"
:
true
}
\ No newline at end of file
litemall-wx/lib/vant-weapp/dropdown-menu/index.wxml
0 → 100644
View file @
b1af78f9
<wxs src="../wxs/utils.wxs" module="utils" />
<wxs src="./index.wxs" module="computed" />
<view class="van-dropdown-menu van-dropdown-menu--top-bottom">
<view
wx:for="{{ itemListData }}"
wx:key="index"
data-index="{{ index }}"
class="{{ utils.bem('dropdown-menu__item', { disabled: item.disabled }) }}"
bind:tap="onTitleTap"
>
<view
class="{{ item.titleClass }} {{ utils.bem('dropdown-menu__title', { active: item.showPopup, down: item.showPopup === (direction === 'down') }) }}"
style="{{ item.showPopup ? 'color:' + activeColor : '' }}"
>
<view class="van-ellipsis">
{{ computed.displayTitle(item) }}
</view>
</view>
</view>
<slot />
</view>
litemall-wx/lib/vant-weapp/dropdown-menu/index.wxs
0 → 100644
View file @
b1af78f9
/* eslint-disable */
function displayTitle(item) {
if (item.title) {
return item.title;
}
var match = item.options.filter(function(option) {
return option.value === item.value;
});
var displayTitle = match.length ? match[0].text : '';
return displayTitle;
}
module.exports = {
displayTitle: displayTitle
};
litemall-wx/lib/vant-weapp/dropdown-menu/index.wxss
0 → 100644
View file @
b1af78f9
@import '../common/index.wxss';.van-dropdown-menu{display:-webkit-flex;display:flex;-webkit-user-select:none;user-select:none;height:50px;height:var(--dropdown-menu-height,50px);background-color:#fff;background-color:var(--dropdown-menu-background-color,#fff)}.van-dropdown-menu__item{display:-webkit-flex;display:flex;-webkit-flex:1;flex:1;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:#969799;color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:0 8px;padding:var(--dropdown-menu-title-padding,0 8px);color:#323233;color:var(--dropdown-menu-title-text-color,#323233);font-size:15px;font-size:var(--dropdown-menu-title-font-size,15px);line-height:18px;line-height:var(--dropdown-menu-title-line-height,18px)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:#1989fa;color:var(--dropdown-menu-title-active-text-color,#1989fa)}.van-dropdown-menu__title--down:after{margin-top:-1px;-webkit-transform:rotate(135deg);transform:rotate(135deg)}
\ No newline at end of file
litemall-wx/lib/vant-weapp/field/index.d.ts
0 → 100644
View file @
b1af78f9
export
{};
litemall-wx/lib/vant-weapp/field/index.js
0 → 100644
View file @
b1af78f9
import
{
VantComponent
}
from
'
../common/component
'
;
import
{
getSystemInfoSync
}
from
'
../common/utils
'
;
VantComponent
({
field
:
true
,
classes
:
[
'
input-class
'
,
'
right-icon-class
'
],
props
:
{
size
:
String
,
icon
:
String
,
label
:
String
,
error
:
Boolean
,
fixed
:
Boolean
,
focus
:
Boolean
,
center
:
Boolean
,
isLink
:
Boolean
,
leftIcon
:
String
,
rightIcon
:
String
,
disabled
:
Boolean
,
autosize
:
Boolean
,
readonly
:
Boolean
,
required
:
Boolean
,
password
:
Boolean
,
iconClass
:
String
,
clearable
:
Boolean
,
clickable
:
Boolean
,
inputAlign
:
String
,
placeholder
:
String
,
customStyle
:
String
,
confirmType
:
String
,
confirmHold
:
Boolean
,
holdKeyboard
:
Boolean
,
errorMessage
:
String
,
arrowDirection
:
String
,
placeholderStyle
:
String
,
errorMessageAlign
:
String
,
selectionEnd
:
{
type
:
Number
,
value
:
-
1
},
selectionStart
:
{
type
:
Number
,
value
:
-
1
},
showConfirmBar
:
{
type
:
Boolean
,
value
:
true
},
adjustPosition
:
{
type
:
Boolean
,
value
:
true
},
cursorSpacing
:
{
type
:
Number
,
value
:
50
},
maxlength
:
{
type
:
Number
,
value
:
-
1
},
type
:
{
type
:
String
,
value
:
'
text
'
},
border
:
{
type
:
Boolean
,
value
:
true
},
titleWidth
:
{
type
:
String
,
value
:
'
90px
'
}
},
data
:
{
focused
:
false
,
system
:
getSystemInfoSync
().
system
.
split
(
'
'
).
shift
().
toLowerCase
()
},
methods
:
{
onInput
(
event
)
{
const
{
value
=
''
}
=
event
.
detail
||
{};
this
.
setData
({
value
},
()
=>
{
this
.
emitChange
(
value
);
});
},
onFocus
(
event
)
{
this
.
setData
({
focused
:
true
});
this
.
$emit
(
'
focus
'
,
event
.
detail
);
},
onBlur
(
event
)
{
this
.
setData
({
focused
:
false
});
this
.
$emit
(
'
blur
'
,
event
.
detail
);
},
onClickIcon
()
{
this
.
$emit
(
'
click-icon
'
);
},
onClear
()
{
this
.
setData
({
value
:
''
},
()
=>
{
this
.
emitChange
(
''
);
this
.
$emit
(
'
clear
'
,
''
);
});
},
onConfirm
()
{
this
.
$emit
(
'
confirm
'
,
this
.
data
.
value
);
},
emitChange
(
value
)
{
this
.
$emit
(
'
input
'
,
value
);
this
.
$emit
(
'
change
'
,
value
);
}
}
});
litemall-wx/lib/vant-weapp/field/index.json
0 → 100644
View file @
b1af78f9
{
"component"
:
true
,
"usingComponents"
:
{
"van-cell"
:
"../cell/index"
,
"van-icon"
:
"../icon/index"
}
}
\ No newline at end of file
litemall-wx/lib/vant-weapp/field/index.wxml
0 → 100644
View file @
b1af78f9
<wxs src="../wxs/utils.wxs" module="utils" />
<van-cell
size="{{ size }}"
icon="{{ leftIcon }}"
title="{{ label }}"
center="{{ center }}"
border="{{ border }}"
is-link="{{ isLink }}"
required="{{ required }}"
clickable="{{ clickable }}"
title-width="{{ titleWidth }}"
custom-style="{{ customStyle }}"
arrow-direction="{{ arrowDirection }}"
custom-class="van-field"
>
<slot name="left-icon" slot="icon" />
<slot name="label" slot="title" />
<view class="{{ utils.bem('field__body', [type, system]) }}">
<textarea
wx:if="{{ type === 'textarea' }}"
class="input-class {{ utils.bem('field__input', [inputAlign, type, { disabled, error }]) }}"
fixed="{{ fixed }}"
focus="{{ focus }}"
value="{{ value }}"
disabled="{{ disabled || readonly }}"
maxlength="{{ maxlength }}"
placeholder="{{ placeholder }}"
placeholder-style="{{ placeholderStyle }}"
placeholder-class="{{ utils.bem('field__placeholder', { error }) }}"
auto-height="{{ autosize }}"
cursor-spacing="{{ cursorSpacing }}"
adjust-position="{{ adjustPosition }}"
show-confirm-bar="{{ showConfirmBar }}"
hold-keyboard="{{ holdKeyboard }}"
selection-end="{{ selectionEnd }}"
selection-start="{{ selectionStart }}"
bindinput="onInput"
bind:blur="onBlur"
bind:focus="onFocus"
bind:confirm="onConfirm"
>
</textarea>
<input
wx:else
class="input-class {{ utils.bem('field__input', [inputAlign, { disabled, error }]) }}"
type="{{ type }}"
focus="{{ focus }}"
value="{{ value }}"
disabled="{{ disabled || readonly }}"
maxlength="{{ maxlength }}"
placeholder="{{ placeholder }}"
placeholder-style="{{ placeholderStyle }}"
placeholder-class="{{ utils.bem('field__placeholder', { error }) }}"
confirm-type="{{ confirmType }}"
confirm-hold="{{ confirmHold }}"
hold-keyboard="{{ holdKeyboard }}"
cursor-spacing="{{ cursorSpacing }}"
adjust-position="{{ adjustPosition }}"
selection-end="{{ selectionEnd }}"
selection-start="{{ selectionStart }}"
password="{{ password || type === 'password' }}"
bindinput="onInput"
bind:blur="onBlur"
bind:focus="onFocus"
bind:confirm="onConfirm"
/>
<van-icon
wx:if="{{ clearable && focused && value && !readonly }}"
size="16px"
name="clear"
class="van-field__clear-root van-field__icon-root"
bindtouchstart="onClear"
/>
<view class="van-field__icon-container" bind:tap="onClickIcon">
<van-icon
wx:if="{{ rightIcon || icon }}"
size="16px"
name="{{ rightIcon || icon }}"
class="van-field__icon-root {{ iconClass }}"
custom-class="right-icon-class"
/>
<slot name="right-icon" />
<slot name="icon" />
</view>
<view class="van-field__button">
<slot name="button" />
</view>
</view>
<view wx:if="{{ errorMessage }}" class="van-field__error-message {{ utils.bem('field__error', [errorMessageAlign, { disabled, error }]) }}">
{{ errorMessage }}
</view>
</van-cell>
litemall-wx/lib/vant-weapp/field/index.wxss
0 → 100644
View file @
b1af78f9
@import '../common/index.wxss';.van-field__body{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center}.van-field__body--textarea{line-height:1.2em;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__body--textarea.van-field__body--ios{margin-top:-4.5px}.van-field__input{position:relative;display:block;box-sizing:border-box;width:100%;margin:0;padding:0;line-height:inherit;text-align:left;background-color:initial;border:0;resize:none;color:#323233;color:var(--field-input-text-color,#323233);height:24px;height:var(--cell-line-height,24px);min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__input--textarea{height:18px;height:var(--field-text-area-min-height,18px);min-height:18px;min-height:var(--field-text-area-min-height,18px)}.van-field__input--error{color:#ee0a24;color:var(--field-input-error-text-color,#ee0a24)}.van-field__input--disabled{background-color:initial;opacity:1;color:#969799;color:var(--field-input-disabled-text-color,#969799)}.van-field__input--center{text-align:center}.van-field__input--right{text-align:right}.van-field__placeholder{position:absolute;top:0;right:0;left:0;pointer-events:none;color:#969799;color:var(--field-placeholder-text-color,#969799)}.van-field__placeholder--error{color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__icon-root{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__clear-root,.van-field__icon-container{line-height:inherit;vertical-align:middle;padding:0 8px;padding:0 var(--padding-xs,8px);margin-right:-8px;margin-right:-var(--padding-xs,8px)}.van-field__button,.van-field__clear-root,.van-field__icon-container{-webkit-flex-shrink:0;flex-shrink:0}.van-field__clear-root{color:#c8c9cc;color:var(--field-clear-icon-color,#c8c9cc)}.van-field__icon-container{color:#969799;color:var(--field-icon-container-color,#969799)}.van-field__icon-container:empty{display:none}.van-field__button{padding-left:8px;padding-left:var(--padding-xs,8px)}.van-field__button:empty{display:none}.van-field__error-message{text-align:left;font-size:12px;font-size:var(--field-error-message-text-font-size,12px);color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}
\ No newline at end of file
litemall-wx/lib/vant-weapp/goods-action-button/index.d.ts
0 → 100644
View file @
b1af78f9
export
{};
Prev
1
2
3
4
5
6
7
8
9
…
16
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment