Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Platform
Commits
4b98868a
Commit
4b98868a
authored
Nov 25, 2014
by
Nicolas Widart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Publishing menu assets
parent
5d01be91
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
847 additions
and
0 deletions
+847
-0
nestable.css
public/modules/Menu/css/nestable.css
+167
-0
jquery.nestable.js
public/modules/Menu/js/jquery.nestable.js
+484
-0
nestable.less
public/modules/Menu/less/nestable.less
+196
-0
No files found.
public/modules/Menu/css/nestable.css
0 → 100644
View file @
4b98868a
.dd
{
position
:
relative
;
display
:
block
;
margin
:
0
;
padding
:
0
;
list-style
:
none
;
font-size
:
13px
;
line-height
:
29px
;
}
.dd-list
{
display
:
block
;
position
:
relative
;
margin
:
0
;
padding
:
0
;
list-style
:
none
;
}
.dd-list
.dd-list
{
padding-left
:
30px
;
}
.dd-collapsed
.dd-list
{
display
:
none
;
}
.dd-item
,
.dd-empty
,
.dd-placeholder
{
display
:
block
;
position
:
relative
;
margin
:
0
;
padding
:
0
;
min-height
:
20px
;
font-size
:
13px
;
line-height
:
20px
;
}
.dd-handle
{
display
:
block
;
margin
:
5px
0
;
padding
:
4px
10px
;
color
:
#333
;
text-decoration
:
none
;
font-weight
:
bold
;
border
:
1px
solid
#ccc
;
background
:
#fafafa
;
-webkit-border-radius
:
3px
;
border-radius
:
3px
;
box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
}
.dd-handle
:hover
{
color
:
#2ea8e5
;
background
:
#fff
;
cursor
:
move
;
}
.dd-item
>
button
{
display
:
block
;
position
:
relative
;
cursor
:
pointer
;
float
:
right
;
width
:
25px
;
height
:
20px
;
margin
:
5px
0
;
padding
:
0
;
text-indent
:
100%
;
white-space
:
nowrap
;
overflow
:
hidden
;
border
:
0
;
background
:
transparent
;
font-size
:
12px
;
line-height
:
1
;
text-align
:
center
;
font-weight
:
bold
;
}
.dd-item
>
button
:before
{
content
:
'+'
;
display
:
block
;
position
:
absolute
;
width
:
100%
;
text-align
:
center
;
text-indent
:
0
;
}
.dd-item
>
button
[
data-action
=
"collapse"
]
:before
{
content
:
'-'
;
}
.dd-placeholder
,
.dd-empty
{
margin
:
5px
0
;
padding
:
0
;
min-height
:
30px
;
background
:
#f2fbff
;
border
:
1px
dashed
#b6bcbf
;
box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
}
.dd-empty
{
border
:
1px
dashed
#bbb
;
min-height
:
100px
;
background-color
:
#e5e5e5
;
background-image
:
-webkit-linear-gradient
(
45deg
,
#ffffff
25%
,
transparent
25%
,
transparent
75%
,
#ffffff
75%
,
#ffffff
),
-webkit-linear-gradient
(
45deg
,
#ffffff
25%
,
transparent
25%
,
transparent
75%
,
#ffffff
75%
,
#ffffff
);
background-image
:
-moz-linear-gradient
(
45deg
,
#ffffff
25%
,
transparent
25%
,
transparent
75%
,
#ffffff
75%
,
#ffffff
),
-moz-linear-gradient
(
45deg
,
#ffffff
25%
,
transparent
25%
,
transparent
75%
,
#ffffff
75%
,
#ffffff
);
background-image
:
linear-gradient
(
45deg
,
#ffffff
25%
,
transparent
25%
,
transparent
75%
,
#ffffff
75%
,
#ffffff
),
linear-gradient
(
45deg
,
#ffffff
25%
,
transparent
25%
,
transparent
75%
,
#ffffff
75%
,
#ffffff
);
background-size
:
60px
60px
;
background-position
:
0
0
,
30px
30px
;
}
.dd-dragel
{
position
:
absolute
;
pointer-events
:
none
;
z-index
:
9999
;
}
.dd-dragel
>
.dd-item
.dd-handle
{
margin-top
:
0
;
}
.dd-dragel
.dd-handle
{
-webkit-box-shadow
:
2px
4px
6px
0
rgba
(
0
,
0
,
0
,
0.1
);
box-shadow
:
2px
4px
6px
0
rgba
(
0
,
0
,
0
,
0.1
);
}
/**
* Nestable Extras
*/
.nestable-lists
{
display
:
block
;
clear
:
both
;
padding
:
30px
0
;
width
:
100%
;
border
:
0
;
border-top
:
2px
solid
#ddd
;
border-bottom
:
2px
solid
#ddd
;
}
#nestable-menu
{
padding
:
0
;
margin
:
20px
0
;
}
#nestable-output
,
#nestable2-output
{
width
:
100%
;
height
:
7em
;
font-size
:
0.75em
;
line-height
:
1.333333em
;
font-family
:
Consolas
,
monospace
;
padding
:
5px
;
box-sizing
:
border-box
;
-moz-box-sizing
:
border-box
;
}
#nestable2
.dd-handle
{
color
:
#fff
;
border
:
1px
solid
#999
;
background
:
#bbb
;
background
:
-webkit-linear-gradient
(
top
,
#bbbbbb
0%
,
#999999
100%
);
background
:
-moz-linear-gradient
(
top
,
#bbbbbb
0%
,
#999999
100%
);
background
:
linear-gradient
(
top
,
#bbbbbb
0%
,
#999999
100%
);
}
#nestable2
.dd-handle
:hover
{
background
:
#bbb
;
}
#nestable2
.dd-item
>
button
:before
{
color
:
#fff
;
}
@media
only
screen
and
(
min-width
:
700px
)
{
.dd
{
float
:
left
;
width
:
100%
;
}
.dd
+
.dd
{
margin-left
:
2%
;
}
}
.dd-hover
>
.dd-handle
{
background
:
#2ea8e5
!important
;
}
public/modules/Menu/js/jquery.nestable.js
0 → 100644
View file @
4b98868a
/*!
* Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/
* Dual-licensed under the BSD or MIT licenses
*/
;(
function
(
$
,
window
,
document
,
undefined
)
{
var
hasTouch
=
'
ontouchstart
'
in
document
;
/**
* Detect CSS pointer-events property
* events are normally disabled on the dragging element to avoid conflicts
* https://github.com/ausi/Feature-detection-technique-for-pointer-events/blob/master/modernizr-pointerevents.js
*/
var
hasPointerEvents
=
(
function
()
{
var
el
=
document
.
createElement
(
'
div
'
),
docEl
=
document
.
documentElement
;
if
(
!
(
'
pointerEvents
'
in
el
.
style
))
{
return
false
;
}
el
.
style
.
pointerEvents
=
'
auto
'
;
el
.
style
.
pointerEvents
=
'
x
'
;
docEl
.
appendChild
(
el
);
var
supports
=
window
.
getComputedStyle
&&
window
.
getComputedStyle
(
el
,
''
).
pointerEvents
===
'
auto
'
;
docEl
.
removeChild
(
el
);
return
!!
supports
;
})();
var
defaults
=
{
listNodeName
:
'
ol
'
,
itemNodeName
:
'
li
'
,
rootClass
:
'
dd
'
,
listClass
:
'
dd-list
'
,
itemClass
:
'
dd-item
'
,
dragClass
:
'
dd-dragel
'
,
handleClass
:
'
dd-handle
'
,
collapsedClass
:
'
dd-collapsed
'
,
placeClass
:
'
dd-placeholder
'
,
noDragClass
:
'
dd-nodrag
'
,
emptyClass
:
'
dd-empty
'
,
expandBtnHTML
:
'
<button data-action="expand" type="button">Expand</button>
'
,
collapseBtnHTML
:
'
<button data-action="collapse" type="button">Collapse</button>
'
,
group
:
0
,
maxDepth
:
5
,
threshold
:
20
};
function
Plugin
(
element
,
options
)
{
this
.
w
=
$
(
document
);
this
.
el
=
$
(
element
);
this
.
options
=
$
.
extend
({},
defaults
,
options
);
this
.
init
();
}
Plugin
.
prototype
=
{
init
:
function
()
{
var
list
=
this
;
list
.
reset
();
list
.
el
.
data
(
'
nestable-group
'
,
this
.
options
.
group
);
list
.
placeEl
=
$
(
'
<div class="
'
+
list
.
options
.
placeClass
+
'
"/>
'
);
$
.
each
(
this
.
el
.
find
(
list
.
options
.
itemNodeName
),
function
(
k
,
el
)
{
list
.
setParent
(
$
(
el
));
});
list
.
el
.
on
(
'
click
'
,
'
button
'
,
function
(
e
)
{
if
(
list
.
dragEl
)
{
return
;
}
var
target
=
$
(
e
.
currentTarget
),
action
=
target
.
data
(
'
action
'
),
item
=
target
.
parent
(
list
.
options
.
itemNodeName
);
if
(
action
===
'
collapse
'
)
{
list
.
collapseItem
(
item
);
}
if
(
action
===
'
expand
'
)
{
list
.
expandItem
(
item
);
}
});
var
onStartEvent
=
function
(
e
)
{
var
handle
=
$
(
e
.
target
);
if
(
!
handle
.
hasClass
(
list
.
options
.
handleClass
))
{
if
(
handle
.
closest
(
'
.
'
+
list
.
options
.
noDragClass
).
length
)
{
return
;
}
handle
=
handle
.
closest
(
'
.
'
+
list
.
options
.
handleClass
);
}
if
(
!
handle
.
length
||
list
.
dragEl
)
{
return
;
}
list
.
isTouch
=
/^touch/
.
test
(
e
.
type
);
if
(
list
.
isTouch
&&
e
.
touches
.
length
!==
1
)
{
return
;
}
e
.
preventDefault
();
list
.
dragStart
(
e
.
touches
?
e
.
touches
[
0
]
:
e
);
};
var
onMoveEvent
=
function
(
e
)
{
if
(
list
.
dragEl
)
{
e
.
preventDefault
();
list
.
dragMove
(
e
.
touches
?
e
.
touches
[
0
]
:
e
);
}
};
var
onEndEvent
=
function
(
e
)
{
if
(
list
.
dragEl
)
{
e
.
preventDefault
();
list
.
dragStop
(
e
.
touches
?
e
.
touches
[
0
]
:
e
);
}
};
if
(
hasTouch
)
{
list
.
el
[
0
].
addEventListener
(
'
touchstart
'
,
onStartEvent
,
false
);
window
.
addEventListener
(
'
touchmove
'
,
onMoveEvent
,
false
);
window
.
addEventListener
(
'
touchend
'
,
onEndEvent
,
false
);
window
.
addEventListener
(
'
touchcancel
'
,
onEndEvent
,
false
);
}
list
.
el
.
on
(
'
mousedown
'
,
onStartEvent
);
list
.
w
.
on
(
'
mousemove
'
,
onMoveEvent
);
list
.
w
.
on
(
'
mouseup
'
,
onEndEvent
);
},
serialize
:
function
()
{
var
data
,
depth
=
0
,
list
=
this
;
step
=
function
(
level
,
depth
)
{
var
array
=
[
],
items
=
level
.
children
(
list
.
options
.
itemNodeName
);
items
.
each
(
function
()
{
var
li
=
$
(
this
),
item
=
$
.
extend
({},
li
.
data
()),
sub
=
li
.
children
(
list
.
options
.
listNodeName
);
if
(
sub
.
length
)
{
item
.
children
=
step
(
sub
,
depth
+
1
);
}
array
.
push
(
item
);
});
return
array
;
};
data
=
step
(
list
.
el
.
find
(
list
.
options
.
listNodeName
).
first
(),
depth
);
return
data
;
},
serialise
:
function
()
{
return
this
.
serialize
();
},
reset
:
function
()
{
this
.
mouse
=
{
offsetX
:
0
,
offsetY
:
0
,
startX
:
0
,
startY
:
0
,
lastX
:
0
,
lastY
:
0
,
nowX
:
0
,
nowY
:
0
,
distX
:
0
,
distY
:
0
,
dirAx
:
0
,
dirX
:
0
,
dirY
:
0
,
lastDirX
:
0
,
lastDirY
:
0
,
distAxX
:
0
,
distAxY
:
0
};
this
.
isTouch
=
false
;
this
.
moving
=
false
;
this
.
dragEl
=
null
;
this
.
dragRootEl
=
null
;
this
.
dragDepth
=
0
;
this
.
hasNewRoot
=
false
;
this
.
pointEl
=
null
;
},
expandItem
:
function
(
li
)
{
li
.
removeClass
(
this
.
options
.
collapsedClass
);
li
.
children
(
'
[data-action="expand"]
'
).
hide
();
li
.
children
(
'
[data-action="collapse"]
'
).
show
();
li
.
children
(
this
.
options
.
listNodeName
).
show
();
},
collapseItem
:
function
(
li
)
{
var
lists
=
li
.
children
(
this
.
options
.
listNodeName
);
if
(
lists
.
length
)
{
li
.
addClass
(
this
.
options
.
collapsedClass
);
li
.
children
(
'
[data-action="collapse"]
'
).
hide
();
li
.
children
(
'
[data-action="expand"]
'
).
show
();
li
.
children
(
this
.
options
.
listNodeName
).
hide
();
}
},
expandAll
:
function
()
{
var
list
=
this
;
list
.
el
.
find
(
list
.
options
.
itemNodeName
).
each
(
function
()
{
list
.
expandItem
(
$
(
this
));
});
},
collapseAll
:
function
()
{
var
list
=
this
;
list
.
el
.
find
(
list
.
options
.
itemNodeName
).
each
(
function
()
{
list
.
collapseItem
(
$
(
this
));
});
},
setParent
:
function
(
li
)
{
if
(
li
.
children
(
this
.
options
.
listNodeName
).
length
)
{
li
.
prepend
(
$
(
this
.
options
.
expandBtnHTML
));
li
.
prepend
(
$
(
this
.
options
.
collapseBtnHTML
));
}
li
.
children
(
'
[data-action="expand"]
'
).
hide
();
},
unsetParent
:
function
(
li
)
{
li
.
removeClass
(
this
.
options
.
collapsedClass
);
li
.
children
(
'
[data-action]
'
).
remove
();
li
.
children
(
this
.
options
.
listNodeName
).
remove
();
},
dragStart
:
function
(
e
)
{
var
mouse
=
this
.
mouse
,
target
=
$
(
e
.
target
),
dragItem
=
target
.
closest
(
this
.
options
.
itemNodeName
);
this
.
placeEl
.
css
(
'
height
'
,
dragItem
.
height
());
mouse
.
offsetX
=
e
.
offsetX
!==
undefined
?
e
.
offsetX
:
e
.
pageX
-
target
.
offset
().
left
;
mouse
.
offsetY
=
e
.
offsetY
!==
undefined
?
e
.
offsetY
:
e
.
pageY
-
target
.
offset
().
top
;
mouse
.
startX
=
mouse
.
lastX
=
e
.
pageX
;
mouse
.
startY
=
mouse
.
lastY
=
e
.
pageY
;
this
.
dragRootEl
=
this
.
el
;
this
.
dragEl
=
$
(
document
.
createElement
(
this
.
options
.
listNodeName
)).
addClass
(
this
.
options
.
listClass
+
'
'
+
this
.
options
.
dragClass
);
this
.
dragEl
.
css
(
'
width
'
,
dragItem
.
width
());
dragItem
.
after
(
this
.
placeEl
);
dragItem
[
0
].
parentNode
.
removeChild
(
dragItem
[
0
]);
dragItem
.
appendTo
(
this
.
dragEl
);
$
(
document
.
body
).
append
(
this
.
dragEl
);
this
.
dragEl
.
css
({
'
left
'
:
e
.
pageX
-
mouse
.
offsetX
,
'
top
'
:
e
.
pageY
-
mouse
.
offsetY
});
// total depth of dragging item
var
i
,
depth
,
items
=
this
.
dragEl
.
find
(
this
.
options
.
itemNodeName
);
for
(
i
=
0
;
i
<
items
.
length
;
i
++
)
{
depth
=
$
(
items
[
i
]).
parents
(
this
.
options
.
listNodeName
).
length
;
if
(
depth
>
this
.
dragDepth
)
{
this
.
dragDepth
=
depth
;
}
}
},
dragStop
:
function
(
e
)
{
var
el
=
this
.
dragEl
.
children
(
this
.
options
.
itemNodeName
).
first
();
el
[
0
].
parentNode
.
removeChild
(
el
[
0
]);
this
.
placeEl
.
replaceWith
(
el
);
this
.
dragEl
.
remove
();
this
.
el
.
trigger
(
'
change
'
);
if
(
this
.
hasNewRoot
)
{
this
.
dragRootEl
.
trigger
(
'
change
'
);
}
this
.
reset
();
},
dragMove
:
function
(
e
)
{
var
list
,
parent
,
prev
,
next
,
depth
,
opt
=
this
.
options
,
mouse
=
this
.
mouse
;
this
.
dragEl
.
css
({
'
left
'
:
e
.
pageX
-
mouse
.
offsetX
,
'
top
'
:
e
.
pageY
-
mouse
.
offsetY
});
// mouse position last events
mouse
.
lastX
=
mouse
.
nowX
;
mouse
.
lastY
=
mouse
.
nowY
;
// mouse position this events
mouse
.
nowX
=
e
.
pageX
;
mouse
.
nowY
=
e
.
pageY
;
// distance mouse moved between events
mouse
.
distX
=
mouse
.
nowX
-
mouse
.
lastX
;
mouse
.
distY
=
mouse
.
nowY
-
mouse
.
lastY
;
// direction mouse was moving
mouse
.
lastDirX
=
mouse
.
dirX
;
mouse
.
lastDirY
=
mouse
.
dirY
;
// direction mouse is now moving (on both axis)
mouse
.
dirX
=
mouse
.
distX
===
0
?
0
:
mouse
.
distX
>
0
?
1
:
-
1
;
mouse
.
dirY
=
mouse
.
distY
===
0
?
0
:
mouse
.
distY
>
0
?
1
:
-
1
;
// axis mouse is now moving on
var
newAx
=
Math
.
abs
(
mouse
.
distX
)
>
Math
.
abs
(
mouse
.
distY
)
?
1
:
0
;
// do nothing on first move
if
(
!
mouse
.
moving
)
{
mouse
.
dirAx
=
newAx
;
mouse
.
moving
=
true
;
return
;
}
// calc distance moved on this axis (and direction)
if
(
mouse
.
dirAx
!==
newAx
)
{
mouse
.
distAxX
=
0
;
mouse
.
distAxY
=
0
;
}
else
{
mouse
.
distAxX
+=
Math
.
abs
(
mouse
.
distX
);
if
(
mouse
.
dirX
!==
0
&&
mouse
.
dirX
!==
mouse
.
lastDirX
)
{
mouse
.
distAxX
=
0
;
}
mouse
.
distAxY
+=
Math
.
abs
(
mouse
.
distY
);
if
(
mouse
.
dirY
!==
0
&&
mouse
.
dirY
!==
mouse
.
lastDirY
)
{
mouse
.
distAxY
=
0
;
}
}
mouse
.
dirAx
=
newAx
;
/**
* move horizontal
*/
if
(
mouse
.
dirAx
&&
mouse
.
distAxX
>=
opt
.
threshold
)
{
// reset move distance on x-axis for new phase
mouse
.
distAxX
=
0
;
prev
=
this
.
placeEl
.
prev
(
opt
.
itemNodeName
);
// increase horizontal level if previous sibling exists and is not collapsed
if
(
mouse
.
distX
>
0
&&
prev
.
length
&&
!
prev
.
hasClass
(
opt
.
collapsedClass
))
{
// cannot increase level when item above is collapsed
list
=
prev
.
find
(
opt
.
listNodeName
).
last
();
// check if depth limit has reached
depth
=
this
.
placeEl
.
parents
(
opt
.
listNodeName
).
length
;
if
(
depth
+
this
.
dragDepth
<=
opt
.
maxDepth
)
{
// create new sub-level if one doesn't exist
if
(
!
list
.
length
)
{
list
=
$
(
'
<
'
+
opt
.
listNodeName
+
'
/>
'
).
addClass
(
opt
.
listClass
);
list
.
append
(
this
.
placeEl
);
prev
.
append
(
list
);
this
.
setParent
(
prev
);
}
else
{
// else append to next level up
list
=
prev
.
children
(
opt
.
listNodeName
).
last
();
list
.
append
(
this
.
placeEl
);
}
}
}
// decrease horizontal level
if
(
mouse
.
distX
<
0
)
{
// we can't decrease a level if an item preceeds the current one
next
=
this
.
placeEl
.
next
(
opt
.
itemNodeName
);
if
(
!
next
.
length
)
{
parent
=
this
.
placeEl
.
parent
();
this
.
placeEl
.
closest
(
opt
.
itemNodeName
).
after
(
this
.
placeEl
);
if
(
!
parent
.
children
().
length
)
{
this
.
unsetParent
(
parent
.
parent
());
}
}
}
}
var
isEmpty
=
false
;
// find list item under cursor
if
(
!
hasPointerEvents
)
{
this
.
dragEl
[
0
].
style
.
visibility
=
'
hidden
'
;
}
this
.
pointEl
=
$
(
document
.
elementFromPoint
(
e
.
pageX
-
document
.
body
.
scrollLeft
,
e
.
pageY
-
(
window
.
pageYOffset
||
document
.
documentElement
.
scrollTop
)));
if
(
!
hasPointerEvents
)
{
this
.
dragEl
[
0
].
style
.
visibility
=
'
visible
'
;
}
if
(
this
.
pointEl
.
hasClass
(
opt
.
handleClass
))
{
this
.
pointEl
=
this
.
pointEl
.
parent
(
opt
.
itemNodeName
);
}
if
(
this
.
pointEl
.
hasClass
(
opt
.
emptyClass
))
{
isEmpty
=
true
;
}
else
if
(
!
this
.
pointEl
.
length
||
!
this
.
pointEl
.
hasClass
(
opt
.
itemClass
))
{
return
;
}
// find parent list of item under cursor
var
pointElRoot
=
this
.
pointEl
.
closest
(
'
.
'
+
opt
.
rootClass
),
isNewRoot
=
this
.
dragRootEl
.
data
(
'
nestable-id
'
)
!==
pointElRoot
.
data
(
'
nestable-id
'
);
/**
* move vertical
*/
if
(
!
mouse
.
dirAx
||
isNewRoot
||
isEmpty
)
{
// check if groups match if dragging over new root
if
(
isNewRoot
&&
opt
.
group
!==
pointElRoot
.
data
(
'
nestable-group
'
))
{
return
;
}
// check depth limit
depth
=
this
.
dragDepth
-
1
+
this
.
pointEl
.
parents
(
opt
.
listNodeName
).
length
;
if
(
depth
>
opt
.
maxDepth
)
{
return
;
}
var
before
=
e
.
pageY
<
(
this
.
pointEl
.
offset
().
top
+
this
.
pointEl
.
height
()
/
2
);
parent
=
this
.
placeEl
.
parent
();
// if empty create new list to replace empty placeholder
if
(
isEmpty
)
{
list
=
$
(
document
.
createElement
(
opt
.
listNodeName
)).
addClass
(
opt
.
listClass
);
list
.
append
(
this
.
placeEl
);
this
.
pointEl
.
replaceWith
(
list
);
}
else
if
(
before
)
{
this
.
pointEl
.
before
(
this
.
placeEl
);
}
else
{
this
.
pointEl
.
after
(
this
.
placeEl
);
}
if
(
!
parent
.
children
().
length
)
{
this
.
unsetParent
(
parent
.
parent
());
}
if
(
!
this
.
dragRootEl
.
find
(
opt
.
itemNodeName
).
length
)
{
this
.
dragRootEl
.
append
(
'
<div class="
'
+
opt
.
emptyClass
+
'
"/>
'
);
}
// parent root list has changed
if
(
isNewRoot
)
{
this
.
dragRootEl
=
pointElRoot
;
this
.
hasNewRoot
=
this
.
el
[
0
]
!==
this
.
dragRootEl
[
0
];
}
}
}
};
$
.
fn
.
nestable
=
function
(
params
)
{
var
lists
=
this
,
retval
=
this
;
lists
.
each
(
function
()
{
var
plugin
=
$
(
this
).
data
(
"
nestable
"
);
if
(
!
plugin
)
{
$
(
this
).
data
(
"
nestable
"
,
new
Plugin
(
this
,
params
));
$
(
this
).
data
(
"
nestable-id
"
,
new
Date
().
getTime
());
}
else
{
if
(
typeof
params
===
'
string
'
&&
typeof
plugin
[
params
]
===
'
function
'
)
{
retval
=
plugin
[
params
]();
}
}
});
return
retval
||
lists
;
};
})(
window
.
jQuery
||
window
.
Zepto
,
window
,
document
);
public/modules/Menu/less/nestable.less
0 → 100644
View file @
4b98868a
.dd {
position: relative;
display: block;
margin: 0;
padding: 0;
list-style: none;
font-size: 13px;
line-height: 29px;
}
.dd-list {
display: block;
position: relative;
margin: 0;
padding: 0;
list-style: none;
}
.dd-list .dd-list {
padding-left: 30px;
}
.dd-collapsed .dd-list {
display: none;
}
.dd-item,
.dd-empty,
.dd-placeholder {
display: block;
position: relative;
margin: 0;
padding: 0;
min-height: 20px;
font-size: 13px;
line-height: 20px;
}
.dd-handle {
display: block;
margin: 5px 0;
padding: 4px 10px;
color: #333;
text-decoration: none;
font-weight: bold;
border: 1px solid #ccc;
background: #fafafa;
-webkit-border-radius: 3px;
border-radius: 3px;
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.dd-handle:hover {
color: #2ea8e5;
background: #fff;
cursor: move;
}
.dd-item > button {
display: block;
position: relative;
cursor: pointer;
float: right;
width: 25px;
height: 20px;
margin: 5px 0;
padding: 0;
text-indent: 100%;
white-space: nowrap;
overflow: hidden;
border: 0;
background: transparent;
font-size: 12px;
line-height: 1;
text-align: center;
font-weight: bold;
}
.dd-item > button:before {
content: '+';
display: block;
position: absolute;
width: 100%;
text-align: center;
text-indent: 0;
}
.dd-item > button[data-action="collapse"]:before {
content: '-';
}
.dd-placeholder,
.dd-empty {
margin: 5px 0;
padding: 0;
min-height: 30px;
background: #f2fbff;
border: 1px dashed #b6bcbf;
box-sizing: border-box;
-moz-box-sizing: border-box;
}
.dd-empty {
border: 1px dashed #bbb;
min-height: 100px;
background-color: #e5e5e5;
background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
-webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
-moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
background-size: 60px 60px;
background-position: 0 0, 30px 30px;
}
.dd-dragel {
position: absolute;
pointer-events: none;
z-index: 9999;
}
.dd-dragel > .dd-item .dd-handle {
margin-top: 0;
}
.dd-dragel .dd-handle {
-webkit-box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
box-shadow: 2px 4px 6px 0 rgba(0, 0, 0, .1);
}
/**
* Nestable Extras
*/
.nestable-lists {
display: block;
clear: both;
padding: 30px 0;
width: 100%;
border: 0;
border-top: 2px solid #ddd;
border-bottom: 2px solid #ddd;
}
#nestable-menu {
padding: 0;
margin: 20px 0;
}
#nestable-output,
#nestable2-output {
width: 100%;
height: 7em;
font-size: 0.75em;
line-height: 1.333333em;
font-family: Consolas, monospace;
padding: 5px;
box-sizing: border-box;
-moz-box-sizing: border-box;
}
#nestable2 .dd-handle {
color: #fff;
border: 1px solid #999;
background: #bbb;
background: -webkit-linear-gradient(top, #bbb 0%, #999 100%);
background: -moz-linear-gradient(top, #bbb 0%, #999 100%);
background: linear-gradient(top, #bbb 0%, #999 100%);
}
#nestable2 .dd-handle:hover {
background: #bbb;
}
#nestable2 .dd-item > button:before {
color: #fff;
}
@media only screen and (min-width: 700px) {
.dd {
float: left;
width: 100%;
}
.dd + .dd {
margin-left: 2%;
}
}
.dd-hover > .dd-handle {
background: #2ea8e5 !important;
}
Write
Preview
Markdown
is supported
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