@@ -876,6 +876,125 @@ $.ui.plugin.add("resizable", "alsoResize", {
876
876
}
877
877
} ) ;
878
878
879
+ $ . ui . plugin . add ( "resizable" , "snap" , {
880
+ start : function ( event , ui ) {
881
+ var self = $ ( this ) . data ( "ui-resizable" ) , o = self . options ;
882
+ self . snapElements = [ ] ;
883
+ var useOffset = self . _helper != null ;
884
+
885
+ $ ( o . snap . constructor != String ? ( o . snap . items || ':data(ui-resizable)' ) : o . snap ) . each ( function ( ) {
886
+ if ( this != self . element [ 0 ] ) {
887
+
888
+ var inst = $ ( this ) . data ( "ui-resizable" ) ;
889
+ var el = null ;
890
+ if ( inst != null ) {
891
+ el = inst . element ;
892
+ }
893
+ else {
894
+ el = $ ( this ) ;
895
+ }
896
+
897
+ var curleft = useOffset ? el . offset ( ) . left : parseFloat ( el . css ( 'left' ) , 10 ) || 0 ;
898
+ var curtop = useOffset ? el . offset ( ) . top : parseFloat ( el . css ( 'top' ) , 10 ) || 0 ;
899
+
900
+ var curwidth = el . width ( ) ;
901
+ var curheight = el . height ( ) ;
902
+
903
+ self . snapElements . push ( {
904
+ item : this ,
905
+ width : curwidth ,
906
+ height : curheight ,
907
+ top : curtop ,
908
+ left : curleft
909
+ } ) ;
910
+ }
911
+ } ) ;
912
+
913
+ } ,
914
+ resize : function ( event , ui ) {
915
+ var self = $ ( this ) . data ( "ui-resizable" ) , o = self . options ;
916
+
917
+ var d = ( o . snapTolerance === undefined ? 20 : o . snapTolerance ) ;
918
+ var mode = ( o . snapMode === undefined ? 'both' : o . snapMode ) ;
919
+
920
+ var x1 = ui . position . left , x2 = ui . position . left + ui . size . width ,
921
+ y1 = ui . position . top , y2 = ui . position . top + ui . size . height ;
922
+
923
+ var axis = { } ;
924
+ axis . n = self . axis . indexOf ( "n" ) != - 1 ;
925
+ axis . s = self . axis . indexOf ( "s" ) != - 1 ;
926
+ axis . w = self . axis . indexOf ( "w" ) != - 1 ;
927
+ axis . e = self . axis . indexOf ( "e" ) != - 1 ;
928
+
929
+ // Container to hold returned position and size.
930
+ var snapped = { } ;
931
+
932
+ for ( var index = self . snapElements . length - 1 ; index >= 0 ; index -- ) {
933
+
934
+ var l = self . snapElements [ index ] . left , r = l + self . snapElements [ index ] . width ,
935
+ t = self . snapElements [ index ] . top , b = t + self . snapElements [ index ] . height ;
936
+
937
+ var o = { } ;
938
+ var i = { } ;
939
+
940
+ // Check for snapping on the outside of the element.
941
+ if ( mode != 'inner' ) {
942
+ o . ts = Math . abs ( t - y2 ) <= d ;
943
+ o . bs = Math . abs ( b - y1 ) <= d ;
944
+ o . ls = Math . abs ( l - x2 ) <= d ;
945
+ o . rs = Math . abs ( r - x1 ) <= d ;
946
+ }
947
+
948
+ // Check for snapping on the inside of the element.
949
+ if ( mode != 'outer' ) {
950
+ i . ts = Math . abs ( t - y1 ) <= d ;
951
+ i . bs = Math . abs ( b - y2 ) <= d ;
952
+ i . ls = Math . abs ( l - x1 ) <= d ;
953
+ i . rs = Math . abs ( r - x2 ) <= d ;
954
+ }
955
+
956
+ // If the resizeable would touch the snapElement if they were snapped together.
957
+ var v = ( y2 >= t && y2 <= b ) || ( y1 >= t && y1 <= b ) || ( y1 <= t && y2 >= b ) || o . ts || o . bs || i . ts || i . bs ;
958
+ var h = ( x2 >= l && x2 <= r ) || ( x1 >= l && x1 <= r ) || ( x1 <= l && x2 >= r ) || o . ls || o . rs || i . ls || i . rs ;
959
+
960
+ if ( o . ts && axis . s && h ) {
961
+ snapped . height = t - ui . position . top ;
962
+ }
963
+ if ( o . bs && axis . n && h ) {
964
+ snapped . height = ui . size . height - ( b - ui . position . top ) ;
965
+ snapped . top = b ;
966
+ }
967
+ if ( o . ls && axis . e && v ) {
968
+ snapped . width = l - ui . position . left ;
969
+ }
970
+ if ( o . rs && axis . w && v ) {
971
+ snapped . width = ui . size . width - ( r - ui . position . left ) ;
972
+ snapped . left = r ;
973
+ }
974
+
975
+ if ( i . ts && axis . n && h ) {
976
+ snapped . height = ui . size . height - ( t - ui . position . top ) ;
977
+ snapped . top = t ;
978
+ }
979
+ if ( i . bs && axis . s && h ) {
980
+ snapped . height = b - ui . position . top ;
981
+ }
982
+ if ( i . ls && axis . w && v ) {
983
+ snapped . width = ui . size . width - ( l - ui . position . left ) ;
984
+ snapped . left = l ;
985
+ }
986
+ if ( i . rs && axis . e && v ) {
987
+ snapped . width = r - ui . position . left ;
988
+ }
989
+ }
990
+
991
+ if ( snapped . left != undefined ) ui . position . left = snapped . left ;
992
+ if ( snapped . top != undefined ) ui . position . top = snapped . top ;
993
+ if ( snapped . width != undefined ) ui . size . width = snapped . width ;
994
+ if ( snapped . height != undefined ) ui . size . height = snapped . height ;
995
+ } ,
996
+ } ) ;
997
+
879
998
$ . ui . plugin . add ( "resizable" , "ghost" , {
880
999
881
1000
start : function ( ) {
0 commit comments