Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
open-source
gridstack.js
Commits
e5a06926
Commit
e5a06926
authored
Dec 19, 2014
by
Pavel Reznikov
Browse files
minify js
parent
38532dd8
Changes
1
Show whitespace changes
Inline
Side-by-side
dist/gridstack.min.js
0 → 100644
View file @
e5a06926
(
function
(
scope
,
_
){
var
Utils
=
{
is_intercepted
:
function
(
a
,
b
){
return
!
(
a
.
x
+
a
.
width
<=
b
.
x
||
b
.
x
+
b
.
width
<=
a
.
x
||
a
.
y
+
a
.
height
<=
b
.
y
||
b
.
y
+
b
.
height
<=
a
.
y
)},
sort
:
function
(
nodes
,
dir
,
width
){
width
=
width
||
_
.
chain
(
nodes
).
map
(
function
(
node
){
return
node
.
x
+
node
.
width
}).
max
().
value
();
dir
=
dir
!=-
1
?
1
:
-
1
;
return
_
.
sortBy
(
nodes
,
function
(
n
){
return
dir
*
(
n
.
x
+
n
.
y
*
width
)})},
create_stylesheet
:
function
(){
var
style
=
document
.
createElement
(
"
style
"
);
style
.
appendChild
(
document
.
createTextNode
(
""
));
document
.
head
.
appendChild
(
style
);
return
style
.
sheet
},
toBool
:
function
(
v
){
if
(
typeof
v
==
"
boolean
"
)
return
v
;
if
(
typeof
v
==
"
string
"
){
v
=
v
.
toLowerCase
();
return
!
(
v
==
""
||
v
==
"
no
"
||
v
==
"
false
"
||
v
==
"
0
"
)}
return
Boolean
(
v
)}};
var
id_seq
=
0
;
var
GridStackEngine
=
function
(
width
,
onchange
,
float
,
height
,
items
){
this
.
width
=
width
;
this
.
float
=
float
||
false
;
this
.
height
=
height
||
0
;
this
.
nodes
=
items
||
[];
this
.
onchange
=
onchange
||
function
(){}};
GridStackEngine
.
prototype
.
_fix_collisions
=
function
(
node
){
this
.
_sort_nodes
(
-
1
);
var
nn
=
node
,
has_locked
=
Boolean
(
_
.
find
(
this
.
nodes
,
function
(
n
){
return
n
.
locked
}));
if
(
!
this
.
float
&&!
has_locked
){
nn
=
{
x
:
0
,
y
:
node
.
y
,
width
:
this
.
width
,
height
:
node
.
height
}}
while
(
true
){
var
collision_node
=
_
.
find
(
this
.
nodes
,
function
(
n
){
return
n
!=
node
&&
Utils
.
is_intercepted
(
n
,
nn
)},
this
);
if
(
typeof
collision_node
==
"
undefined
"
){
return
}
this
.
move_node
(
collision_node
,
collision_node
.
x
,
node
.
y
+
node
.
height
,
collision_node
.
width
,
collision_node
.
height
,
true
)}};
GridStackEngine
.
prototype
.
_sort_nodes
=
function
(
dir
){
this
.
nodes
=
Utils
.
sort
(
this
.
nodes
,
dir
,
this
.
width
)};
GridStackEngine
.
prototype
.
_pack_nodes
=
function
(){
this
.
_sort_nodes
();
if
(
this
.
float
){
_
.
each
(
this
.
nodes
,
function
(
n
,
i
){
if
(
n
.
_updating
||
typeof
n
.
_orig_y
==
"
undefined
"
||
n
.
y
==
n
.
_orig_y
)
return
;
var
new_y
=
n
.
y
;
while
(
new_y
>=
n
.
_orig_y
){
var
collision_node
=
_
.
chain
(
this
.
nodes
).
find
(
function
(
bn
){
return
n
!=
bn
&&
Utils
.
is_intercepted
({
x
:
n
.
x
,
y
:
new_y
,
width
:
n
.
width
,
height
:
n
.
height
},
bn
)}).
value
();
if
(
!
collision_node
){
n
.
_dirty
=
true
;
n
.
y
=
new_y
}
--
new_y
}},
this
)}
else
{
_
.
each
(
this
.
nodes
,
function
(
n
,
i
){
if
(
n
.
locked
)
return
;
while
(
n
.
y
>
0
){
var
new_y
=
n
.
y
-
1
;
var
can_be_moved
=
i
==
0
;
if
(
i
>
0
){
var
collision_node
=
_
.
chain
(
this
.
nodes
).
first
(
i
).
find
(
function
(
bn
){
return
Utils
.
is_intercepted
({
x
:
n
.
x
,
y
:
new_y
,
width
:
n
.
width
,
height
:
n
.
height
},
bn
)}).
value
();
can_be_moved
=
typeof
collision_node
==
"
undefined
"
}
if
(
!
can_be_moved
){
break
}
n
.
_dirty
=
n
.
y
!=
new_y
;
n
.
y
=
new_y
}},
this
)}};
GridStackEngine
.
prototype
.
_prepare_node
=
function
(
node
,
resizing
){
node
=
_
.
defaults
(
node
||
{},{
width
:
1
,
height
:
1
,
x
:
0
,
y
:
0
});
node
.
x
=
parseInt
(
""
+
node
.
x
);
node
.
y
=
parseInt
(
""
+
node
.
y
);
node
.
width
=
parseInt
(
""
+
node
.
width
);
node
.
height
=
parseInt
(
""
+
node
.
height
);
node
.
auto_position
=
node
.
auto_position
||
false
;
node
.
no_resize
=
node
.
no_resize
||
false
;
node
.
no_move
=
node
.
no_move
||
false
;
if
(
node
.
width
>
this
.
width
){
node
.
width
=
this
.
width
}
else
if
(
node
.
width
<
1
){
node
.
width
=
1
}
if
(
node
.
height
<
1
){
node
.
height
=
1
}
if
(
node
.
x
<
0
){
node
.
x
=
0
}
if
(
node
.
x
+
node
.
width
>
this
.
width
){
if
(
resizing
){
node
.
width
=
this
.
width
-
node
.
x
}
else
{
node
.
x
=
this
.
width
-
node
.
width
}}
if
(
node
.
y
<
0
){
node
.
y
=
0
}
return
node
};
GridStackEngine
.
prototype
.
_notify
=
function
(){
var
deleted_nodes
=
Array
.
prototype
.
slice
.
call
(
arguments
,
1
).
concat
(
this
.
get_dirty_nodes
());
deleted_nodes
=
deleted_nodes
.
concat
(
this
.
get_dirty_nodes
());
this
.
onchange
(
deleted_nodes
)};
GridStackEngine
.
prototype
.
clean_nodes
=
function
(){
_
.
each
(
this
.
nodes
,
function
(
n
){
n
.
_dirty
=
false
})};
GridStackEngine
.
prototype
.
get_dirty_nodes
=
function
(){
return
_
.
filter
(
this
.
nodes
,
function
(
n
){
return
n
.
_dirty
})};
GridStackEngine
.
prototype
.
add_node
=
function
(
node
){
node
=
this
.
_prepare_node
(
node
);
if
(
typeof
node
.
max_width
!=
"
undefined
"
)
node
.
width
=
Math
.
min
(
node
.
width
,
node
.
max_width
);
if
(
typeof
node
.
max_height
!=
"
undefined
"
)
node
.
height
=
Math
.
min
(
node
.
height
,
node
.
max_height
);
if
(
typeof
node
.
min_width
!=
"
undefined
"
)
node
.
width
=
Math
.
max
(
node
.
width
,
node
.
min_width
);
if
(
typeof
node
.
min_height
!=
"
undefined
"
)
node
.
height
=
Math
.
max
(
node
.
height
,
node
.
min_height
);
node
.
_id
=++
id_seq
;
node
.
_dirty
=
true
;
if
(
node
.
auto_position
){
this
.
_sort_nodes
();
for
(
var
i
=
0
;;
++
i
){
var
x
=
i
%
this
.
width
,
y
=
Math
.
floor
(
i
/
this
.
width
);
if
(
x
+
node
.
width
>
this
.
width
){
continue
}
if
(
!
_
.
find
(
this
.
nodes
,
function
(
n
){
return
Utils
.
is_intercepted
({
x
:
x
,
y
:
y
,
width
:
node
.
width
,
height
:
node
.
height
},
n
)})){
node
.
x
=
x
;
node
.
y
=
y
;
break
}}}
this
.
nodes
.
push
(
node
);
this
.
_fix_collisions
(
node
);
this
.
_pack_nodes
();
this
.
_notify
();
return
node
};
GridStackEngine
.
prototype
.
remove_node
=
function
(
node
){
node
.
_id
=
null
;
this
.
nodes
=
_
.
without
(
this
.
nodes
,
node
);
this
.
_pack_nodes
();
this
.
_notify
(
node
)};
GridStackEngine
.
prototype
.
can_move_node
=
function
(
node
,
x
,
y
,
width
,
height
){
var
has_locked
=
Boolean
(
_
.
find
(
this
.
nodes
,
function
(
n
){
return
n
.
locked
}));
if
(
!
this
.
height
&&!
has_locked
)
return
true
;
var
cloned_node
;
var
clone
=
new
GridStackEngine
(
this
.
width
,
null
,
this
.
float
,
0
,
_
.
map
(
this
.
nodes
,
function
(
n
){
if
(
n
==
node
){
cloned_node
=
$
.
extend
({},
n
);
return
cloned_node
}
return
$
.
extend
({},
n
)}));
clone
.
move_node
(
cloned_node
,
x
,
y
,
width
,
height
);
var
res
=
true
;
if
(
has_locked
)
res
&=!
Boolean
(
_
.
find
(
clone
.
nodes
,
function
(
n
){
return
n
!=
cloned_node
&&
Boolean
(
n
.
locked
)
&&
Boolean
(
n
.
_dirty
)}));
if
(
this
.
height
)
res
&=
clone
.
get_grid_height
()
<=
this
.
height
;
return
res
};
GridStackEngine
.
prototype
.
can_be_placed_with_respect_to_height
=
function
(
node
){
if
(
!
this
.
height
)
return
true
;
var
clone
=
new
GridStackEngine
(
this
.
width
,
null
,
this
.
float
,
0
,
_
.
map
(
this
.
nodes
,
function
(
n
){
return
$
.
extend
({},
n
)}));
clone
.
add_node
(
node
);
return
clone
.
get_grid_height
()
<=
this
.
height
};
GridStackEngine
.
prototype
.
move_node
=
function
(
node
,
x
,
y
,
width
,
height
,
no_pack
){
if
(
typeof
x
!=
"
number
"
)
x
=
node
.
x
;
if
(
typeof
y
!=
"
number
"
)
y
=
node
.
y
;
if
(
typeof
width
!=
"
number
"
)
width
=
node
.
width
;
if
(
typeof
height
!=
"
number
"
)
height
=
node
.
height
;
if
(
typeof
node
.
max_width
!=
"
undefined
"
)
width
=
Math
.
min
(
width
,
node
.
max_width
);
if
(
typeof
node
.
max_height
!=
"
undefined
"
)
height
=
Math
.
min
(
height
,
node
.
max_height
);
if
(
typeof
node
.
min_width
!=
"
undefined
"
)
width
=
Math
.
max
(
width
,
node
.
min_width
);
if
(
typeof
node
.
min_height
!=
"
undefined
"
)
height
=
Math
.
max
(
height
,
node
.
min_height
);
if
(
node
.
x
==
x
&&
node
.
y
==
y
&&
node
.
width
==
width
&&
node
.
height
==
height
){
return
node
}
var
resizing
=
node
.
width
!=
width
;
node
.
_dirty
=
true
;
node
.
x
=
x
;
node
.
y
=
y
;
node
.
width
=
width
;
node
.
height
=
height
;
node
=
this
.
_prepare_node
(
node
,
resizing
);
this
.
_fix_collisions
(
node
);
if
(
!
no_pack
){
this
.
_pack_nodes
();
this
.
_notify
()}
return
node
};
GridStackEngine
.
prototype
.
get_grid_height
=
function
(){
return
_
.
reduce
(
this
.
nodes
,
function
(
memo
,
n
){
return
Math
.
max
(
memo
,
n
.
y
+
n
.
height
)},
0
)};
GridStackEngine
.
prototype
.
begin_update
=
function
(
node
){
_
.
each
(
this
.
nodes
,
function
(
n
){
n
.
_orig_y
=
n
.
y
});
node
.
_updating
=
true
};
GridStackEngine
.
prototype
.
end_update
=
function
(){
var
n
=
_
.
find
(
this
.
nodes
,
function
(
n
){
return
n
.
_updating
});
if
(
n
){
n
.
_updating
=
false
}};
var
GridStack
=
function
(
el
,
opts
){
var
self
=
this
,
one_column_mode
;
this
.
container
=
$
(
el
);
this
.
opts
=
_
.
defaults
(
opts
||
{},{
width
:
parseInt
(
this
.
container
.
attr
(
"
data-gs-width
"
))
||
12
,
height
:
parseInt
(
this
.
container
.
attr
(
"
data-gs-height
"
))
||
0
,
item_class
:
"
grid-stack-item
"
,
placeholder_class
:
"
grid-stack-placeholder
"
,
handle
:
"
.grid-stack-item-content
"
,
cell_height
:
60
,
vertical_margin
:
20
,
auto
:
true
,
min_width
:
768
,
"
float
"
:
false
,
_class
:
"
grid-stack-
"
+
(
Math
.
random
()
*
1
e4
).
toFixed
(
0
),
animate
:
Boolean
(
this
.
container
.
attr
(
"
data-gs-animate
"
))
||
false
});
this
.
container
.
addClass
(
this
.
opts
.
_class
);
this
.
_styles
=
Utils
.
create_stylesheet
();
this
.
_styles
.
_max
=
0
;
this
.
grid
=
new
GridStackEngine
(
this
.
opts
.
width
,
function
(
nodes
){
var
max_height
=
0
;
_
.
each
(
nodes
,
function
(
n
){
if
(
n
.
_id
==
null
){
n
.
el
.
remove
()}
else
{
n
.
el
.
attr
(
"
data-gs-x
"
,
n
.
x
).
attr
(
"
data-gs-y
"
,
n
.
y
).
attr
(
"
data-gs-width
"
,
n
.
width
).
attr
(
"
data-gs-height
"
,
n
.
height
);
max_height
=
Math
.
max
(
max_height
,
n
.
y
+
n
.
height
)}});
self
.
_update_styles
(
max_height
+
10
)},
this
.
opts
.
float
,
this
.
opts
.
height
);
if
(
this
.
opts
.
auto
){
var
elements
=
[];
this
.
container
.
find
(
"
.
"
+
this
.
opts
.
item_class
).
each
(
function
(
index
,
el
){
el
=
$
(
el
);
elements
.
push
({
el
:
el
,
i
:
parseInt
(
el
.
attr
(
"
data-gs-x
"
))
+
parseInt
(
el
.
attr
(
"
data-gs-y
"
))
*
parseInt
(
el
.
attr
(
"
data-gs-width
"
))})});
_
.
chain
(
elements
).
sortBy
(
function
(
x
){
return
x
.
i
}).
each
(
function
(
i
){
self
.
_prepare_element
(
i
.
el
)})}
this
.
set_animation
(
this
.
opts
.
animate
);
this
.
placeholder
=
$
(
'
<div class="
'
+
this
.
opts
.
placeholder_class
+
"
"
+
this
.
opts
.
item_class
+
'
"><div class="placeholder-content" /></div>
'
).
hide
();
this
.
container
.
append
(
this
.
placeholder
);
this
.
container
.
height
(
this
.
grid
.
get_grid_height
()
*
(
this
.
opts
.
cell_height
+
this
.
opts
.
vertical_margin
)
-
this
.
opts
.
vertical_margin
);
var
on_resize_handler
=
function
(){
if
(
self
.
_is_one_column_mode
()){
if
(
one_column_mode
)
return
;
one_column_mode
=
true
;
_
.
each
(
self
.
grid
.
nodes
,
function
(
node
){
if
(
!
node
.
no_move
){
node
.
el
.
draggable
(
"
disable
"
)}
if
(
!
node
.
no_resize
){
node
.
el
.
resizable
(
"
disable
"
)}})}
else
{
if
(
!
one_column_mode
)
return
;
one_column_mode
=
false
;
_
.
each
(
self
.
grid
.
nodes
,
function
(
node
){
if
(
!
node
.
no_move
){
node
.
el
.
draggable
(
"
enable
"
)}
if
(
!
node
.
no_resize
){
node
.
el
.
resizable
(
"
enable
"
)}})}};
$
(
window
).
resize
(
on_resize_handler
);
on_resize_handler
()};
GridStack
.
prototype
.
_update_styles
=
function
(
max_height
){
if
(
typeof
max_height
==
"
undefined
"
){
max_height
=
this
.
_styles
.
_max
;
this
.
_styles
.
_max
=
0
;
while
(
this
.
_styles
.
rules
.
length
){
this
.
_styles
.
removeRule
(
0
)}
this
.
_update_container_height
()}
if
(
max_height
>
this
.
_styles
.
_max
){
for
(
var
i
=
this
.
_styles
.
_max
;
i
<
max_height
;
++
i
){
var
css
;
css
=
"
.
"
+
this
.
opts
.
_class
+
"
.
"
+
this
.
opts
.
item_class
+
'
[data-gs-height="
'
+
(
i
+
1
)
+
'
"] { height:
'
+
(
this
.
opts
.
cell_height
*
(
i
+
1
)
+
this
.
opts
.
vertical_margin
*
i
)
+
"
px; }
"
;
this
.
_styles
.
insertRule
(
css
,
i
);
css
=
"
.
"
+
this
.
opts
.
_class
+
"
.
"
+
this
.
opts
.
item_class
+
'
[data-gs-y="
'
+
i
+
'
"] { top:
'
+
(
this
.
opts
.
cell_height
*
i
+
this
.
opts
.
vertical_margin
*
i
)
+
"
px; }
"
;
this
.
_styles
.
insertRule
(
css
,
i
)}
this
.
_styles
.
_max
=
max_height
}};
GridStack
.
prototype
.
_update_container_height
=
function
(){
this
.
container
.
height
(
this
.
grid
.
get_grid_height
()
*
(
this
.
opts
.
cell_height
+
this
.
opts
.
vertical_margin
)
-
this
.
opts
.
vertical_margin
)};
GridStack
.
prototype
.
_is_one_column_mode
=
function
(){
return
$
(
window
).
width
()
<=
this
.
opts
.
min_width
};
GridStack
.
prototype
.
_prepare_element
=
function
(
el
){
var
self
=
this
;
el
=
$
(
el
);
el
.
addClass
(
this
.
opts
.
item_class
);
var
node
=
self
.
grid
.
add_node
({
x
:
el
.
attr
(
"
data-gs-x
"
),
y
:
el
.
attr
(
"
data-gs-y
"
),
width
:
el
.
attr
(
"
data-gs-width
"
),
height
:
el
.
attr
(
"
data-gs-height
"
),
max_width
:
el
.
attr
(
"
data-gs-max-width
"
),
min_width
:
el
.
attr
(
"
data-gs-min-width
"
),
max_height
:
el
.
attr
(
"
data-gs-max-height
"
)
||
100
,
min_height
:
el
.
attr
(
"
data-gs-min-height
"
),
auto_position
:
Utils
.
toBool
(
el
.
attr
(
"
data-gs-auto-position
"
)),
no_resize
:
Utils
.
toBool
(
el
.
attr
(
"
data-gs-no-resize
"
)),
no_move
:
Utils
.
toBool
(
el
.
attr
(
"
data-gs-no-move
"
)),
locked
:
Utils
.
toBool
(
el
.
attr
(
"
data-gs-locked
"
)),
el
:
el
});
el
.
data
(
"
_gridstack_node
"
,
node
);
var
cell_width
,
cell_height
;
var
on_start_moving
=
function
(
event
,
ui
){
var
o
=
$
(
this
);
self
.
grid
.
clean_nodes
();
self
.
grid
.
begin_update
(
node
);
cell_width
=
Math
.
ceil
(
o
.
outerWidth
()
/
o
.
attr
(
"
data-gs-width
"
));
cell_height
=
self
.
opts
.
cell_height
+
self
.
opts
.
vertical_margin
;
self
.
placeholder
.
attr
(
"
data-gs-x
"
,
o
.
attr
(
"
data-gs-x
"
)).
attr
(
"
data-gs-y
"
,
o
.
attr
(
"
data-gs-y
"
)).
attr
(
"
data-gs-width
"
,
o
.
attr
(
"
data-gs-width
"
)).
attr
(
"
data-gs-height
"
,
o
.
attr
(
"
data-gs-height
"
)).
show
();
node
.
el
=
self
.
placeholder
};
var
on_end_moving
=
function
(
event
,
ui
){
var
o
=
$
(
this
);
node
.
el
=
o
;
self
.
placeholder
.
hide
();
o
.
attr
(
"
data-gs-x
"
,
node
.
x
).
attr
(
"
data-gs-y
"
,
node
.
y
).
attr
(
"
data-gs-width
"
,
node
.
width
).
attr
(
"
data-gs-height
"
,
node
.
height
).
removeAttr
(
"
style
"
);
self
.
_update_container_height
();
self
.
container
.
trigger
(
"
change
"
,[
self
.
grid
.
get_dirty_nodes
()]);
self
.
grid
.
end_update
();
self
.
grid
.
_sort_nodes
();
setTimeout
(
function
(){
_
.
each
(
self
.
grid
.
nodes
,
function
(
node
){
node
.
el
.
detach
();
self
.
container
.
append
(
node
.
el
)})},
self
.
opts
.
animate
?
300
:
0
)};
el
.
draggable
({
handle
:
this
.
opts
.
handle
,
scroll
:
true
,
appendTo
:
"
body
"
,
start
:
on_start_moving
,
stop
:
on_end_moving
,
drag
:
function
(
event
,
ui
){
var
x
=
Math
.
round
(
ui
.
position
.
left
/
cell_width
),
y
=
Math
.
floor
((
ui
.
position
.
top
+
cell_height
/
2
)
/
cell_height
);
if
(
!
self
.
grid
.
can_move_node
(
node
,
x
,
y
,
node
.
width
,
node
.
height
)){
return
}
self
.
grid
.
move_node
(
node
,
x
,
y
);
self
.
_update_container_height
()}}).
resizable
({
autoHide
:
true
,
handles
:
"
se
"
,
minHeight
:
this
.
opts
.
cell_height
-
10
,
minWidth
:
70
,
start
:
on_start_moving
,
stop
:
on_end_moving
,
resize
:
function
(
event
,
ui
){
var
width
=
Math
.
round
(
ui
.
size
.
width
/
cell_width
),
height
=
Math
.
round
(
ui
.
size
.
height
/
cell_height
);
if
(
!
self
.
grid
.
can_move_node
(
node
,
node
.
x
,
node
.
y
,
width
,
height
)){
return
}
self
.
grid
.
move_node
(
node
,
node
.
x
,
node
.
y
,
width
,
height
);
self
.
_update_container_height
()}});
if
(
node
.
no_move
||
this
.
_is_one_column_mode
()){
el
.
draggable
(
"
disable
"
)}
if
(
node
.
no_resize
||
this
.
_is_one_column_mode
()){
el
.
resizable
(
"
disable
"
)}
el
.
attr
(
"
data-gs-locked
"
,
node
.
locked
?
"
yes
"
:
null
)};
GridStack
.
prototype
.
set_animation
=
function
(
enable
){
if
(
enable
){
this
.
container
.
addClass
(
"
grid-stack-animate
"
)}
else
{
this
.
container
.
removeClass
(
"
grid-stack-animate
"
)}};
GridStack
.
prototype
.
add_widget
=
function
(
el
,
x
,
y
,
width
,
height
,
auto_position
){
el
=
$
(
el
);
if
(
typeof
x
!=
"
undefined
"
)
el
.
attr
(
"
data-gs-x
"
,
x
);
if
(
typeof
y
!=
"
undefined
"
)
el
.
attr
(
"
data-gs-y
"
,
y
);
if
(
typeof
width
!=
"
undefined
"
)
el
.
attr
(
"
data-gs-width
"
,
width
);
if
(
typeof
height
!=
"
undefined
"
)
el
.
attr
(
"
data-gs-height
"
,
height
);
if
(
typeof
auto_position
!=
"
undefined
"
)
el
.
attr
(
"
data-gs-auto-position
"
,
auto_position
?
"
yes
"
:
null
);
this
.
container
.
append
(
el
);
this
.
_prepare_element
(
el
);
this
.
_update_container_height
()};
GridStack
.
prototype
.
will_it_fit
=
function
(
x
,
y
,
width
,
height
,
auto_position
){
var
node
=
{
x
:
x
,
y
:
y
,
width
:
width
,
height
:
height
,
auto_position
:
auto_position
};
return
this
.
grid
.
can_be_placed_with_respect_to_height
(
node
)};
GridStack
.
prototype
.
remove_widget
=
function
(
el
){
el
=
$
(
el
);
var
node
=
el
.
data
(
"
_gridstack_node
"
);
this
.
grid
.
remove_node
(
node
);
el
.
remove
();
this
.
_update_container_height
()};
GridStack
.
prototype
.
remove_all
=
function
(){
_
.
each
(
this
.
grid
.
nodes
,
function
(
node
){
node
.
el
.
remove
()});
this
.
grid
.
nodes
=
[];
this
.
_update_container_height
()};
GridStack
.
prototype
.
resizable
=
function
(
el
,
val
){
el
=
$
(
el
);
el
.
each
(
function
(
index
,
el
){
el
=
$
(
el
);
var
node
=
el
.
data
(
"
_gridstack_node
"
);
if
(
typeof
node
==
"
undefined
"
){
return
}
node
.
no_resize
=!
(
val
||
false
);
if
(
node
.
no_resize
){
el
.
resizable
(
"
disable
"
)}
else
{
el
.
resizable
(
"
enable
"
)}});
return
this
};
GridStack
.
prototype
.
movable
=
function
(
el
,
val
){
el
=
$
(
el
);
el
.
each
(
function
(
index
,
el
){
el
=
$
(
el
);
var
node
=
el
.
data
(
"
_gridstack_node
"
);
if
(
typeof
node
==
"
undefined
"
){
return
}
node
.
no_move
=!
(
val
||
false
);
if
(
node
.
no_move
){
el
.
draggable
(
"
disable
"
)}
else
{
el
.
draggable
(
"
enable
"
)}});
return
this
};
GridStack
.
prototype
.
locked
=
function
(
el
,
val
){
el
=
$
(
el
);
el
.
each
(
function
(
index
,
el
){
el
=
$
(
el
);
var
node
=
el
.
data
(
"
_gridstack_node
"
);
if
(
typeof
node
==
"
undefined
"
){
return
}
node
.
locked
=
val
||
false
;
el
.
attr
(
"
data-gs-locked
"
,
node
.
locked
?
"
yes
"
:
null
)});
return
this
};
GridStack
.
prototype
.
_update_element
=
function
(
el
,
callback
){
el
=
$
(
el
).
first
();
var
node
=
el
.
data
(
"
_gridstack_node
"
);
if
(
typeof
node
==
"
undefined
"
){
return
}
var
self
=
this
;
self
.
grid
.
clean_nodes
();
self
.
grid
.
begin_update
(
node
);
callback
.
call
(
this
,
el
,
node
);
self
.
_update_container_height
();
self
.
container
.
trigger
(
"
change
"
,[
self
.
grid
.
get_dirty_nodes
()]);
self
.
grid
.
end_update
();
self
.
grid
.
_sort_nodes
();
_
.
each
(
self
.
grid
.
nodes
,
function
(
node
){
node
.
el
.
detach
();
self
.
container
.
append
(
node
.
el
)})};
GridStack
.
prototype
.
resize
=
function
(
el
,
width
,
height
){
this
.
_update_element
(
el
,
function
(
el
,
node
){
width
=
width
!=
null
&&
typeof
width
!=
"
undefined
"
?
width
:
node
.
width
;
height
=
height
!=
null
&&
typeof
height
!=
"
undefined
"
?
height
:
node
.
height
;
this
.
grid
.
move_node
(
node
,
node
.
x
,
node
.
y
,
width
,
height
)})};
GridStack
.
prototype
.
move
=
function
(
el
,
x
,
y
){
this
.
_update_element
(
el
,
function
(
el
,
node
){
x
=
x
!=
null
&&
typeof
x
!=
"
undefined
"
?
x
:
node
.
x
;
y
=
y
!=
null
&&
typeof
y
!=
"
undefined
"
?
y
:
node
.
y
;
this
.
grid
.
move_node
(
node
,
x
,
y
,
node
.
width
,
node
.
height
)})};
GridStack
.
prototype
.
cell_height
=
function
(
val
){
if
(
typeof
val
==
"
undefined
"
){
return
this
.
opts
.
cell_height
}
val
=
parseInt
(
val
);
if
(
val
==
this
.
opts
.
cell_height
)
return
;
this
.
opts
.
cell_height
=
val
||
this
.
opts
.
cell_height
;
this
.
_update_styles
()};
GridStack
.
prototype
.
cell_width
=
function
(){
var
o
=
this
.
container
.
find
(
"
.
"
+
this
.
opts
.
item_class
).
first
();
return
Math
.
ceil
(
o
.
outerWidth
()
/
o
.
attr
(
"
data-gs-width
"
))};
scope
.
GridStackUI
=
GridStack
;
scope
.
GridStackUI
.
Utils
=
Utils
;
$
.
fn
.
gridstack
=
function
(
opts
){
return
this
.
each
(
function
(){
if
(
!
$
(
this
).
data
(
"
gridstack
"
)){
$
(
this
).
data
(
"
gridstack
"
,
new
GridStack
(
this
,
opts
))}})}})(
window
,
_
);
\ No newline at end of file
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