Skip to content

Commit 595fb13

Browse files
up JC.AjaxUpload 0.1
1 parent 2c647ba commit 595fb13

File tree

11 files changed

+289
-48
lines changed

11 files changed

+289
-48
lines changed

comps/AjaxUpload/AjaxUpload.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ url: ?callback=callback
5454
* <dt>cauFileExt = file ext, optional</dt>
5555
* <dd>允许上传的文件扩展名, 例: ".jpg, .jpeg, .png, .gif"</dd>
5656
*
57+
* <dt>cauFileSize = [ KB | MB | GB ], default = 1024 MB</dt>
58+
* <dd>上传文件大小限制</dd>
59+
*
5760
* <dt>cauFileName = string, default = file</dt>
5861
* <dd>上传文件的 name 属性</dd>
5962
*
@@ -278,6 +281,13 @@ url: ?callback=callback
278281
_p.trigger( 'UploadReady' );
279282

280283
});
284+
/**
285+
* 文件大小错误
286+
*/
287+
_p.on( 'ERR_FILE_SIZE', function( _evt, _flPath ){
288+
_p._view.errFileSize( _flPath );
289+
_p._view.updateChange();
290+
});
281291
/**
282292
* 文件扩展名错误
283293
*/
@@ -290,6 +300,13 @@ url: ?callback=callback
290300
*/
291301
_p.on( 'BeforeUpload', function( _d ){
292302
_p._view.beforeUpload();
303+
_p._model.cauBeforeUploadCallback()
304+
&& _p._model.cauBeforeUploadCallback().call(
305+
_p
306+
, _d
307+
, _p._model.selector()
308+
, _p._model.frame()
309+
);
293310
});
294311
/**
295312
* 上传完毕触发的事件
@@ -432,6 +449,8 @@ url: ?callback=callback
432449

433450
, cauFileExt: function(){ return this.stringProp( 'cauFileExt' ); }
434451

452+
, cauFileSize: function(){ return this.stringProp( 'cauFileSize' ) || '1024 MB'; }
453+
435454
, cauFileName:
436455
function(){
437456
return this.attrProp('cauFileName') || this.attrProp('name');
@@ -462,6 +481,11 @@ url: ?callback=callback
462481
return this.boolProp( 'cauDefaultHide' );
463482
}
464483

484+
, cauBeforeUploadCallback:
485+
function(){
486+
return this.callbackProp( 'cauBeforeUploadCallback' );
487+
}
488+
465489
, cauUploadDoneCallback:
466490
function(){
467491
return this.callbackProp( 'cauUploadDoneCallback' );
@@ -762,6 +786,22 @@ url: ?callback=callback
762786
;
763787
}
764788
}
789+
790+
, errFileSize:
791+
function( _flPath ){
792+
var _p = this, _cb = _p._model.callbackProp( 'cauFileExtErrCallback' );
793+
if( _cb ){
794+
_cb.call( _p._model.selector(), _p._model.cauFileSize(), _flPath, _p._model.frame() );
795+
}else{
796+
var _msg = JC.f.printf( '文件大小错误, 允许上传的文件大小为: {0} <p class="auExtErr" style="color:red">{1}</p>'
797+
, _p._model.cauFileSize(), _flPath );
798+
JC.Dialog
799+
? JC.Dialog.alert( _msg, 1 )
800+
: alert( _msg )
801+
;
802+
}
803+
804+
}
765805

766806
, errFatalError:
767807
function( _d ){

comps/AjaxUpload/frame/default.html

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,27 @@
7373

7474
_fm.on( 'submit', function( _evt ){
7575
var _flPath = _flBtn.val().trim();
76-
JC.log( 's1', _flPath );
76+
//JC.log( 's1', _flPath );
7777
if( !_flPath ) return prevent( _evt );
78-
JC.log( 's2' );
78+
//JC.log( 's2' );
7979

8080
if( !validFileExt( _flPath, _flBtn.attr('fileExt') ) ) {
8181
_auIns.trigger( 'ERR_FILE_EXT', [ _flPath ] );
8282
try{ _flBtn.val(''); }catch(ex){}
8383
return prevent( _evt );
8484
}
85-
JC.log( 's3' );
85+
//JC.log( 's3' );
8686

8787
_auIns.trigger( 'BeforeUpload' );
8888

89-
JC.log( 's4' );
89+
//JC.log( 's4' );
90+
91+
if( !validFileSize( _flBtn, _flBtn.attr('fileSize') ) ) {
92+
_auIns.trigger( 'ERR_FILE_SIZE',[ _flPath ]);
93+
try{ _flBtn.val(''); }catch(ex){}
94+
return prevent( _evt );
95+
}
96+
9097
});
9198

9299
_disBtn.on('click', function( _evt ){
@@ -114,8 +121,10 @@
114121
function initPage( _ins, _model ){
115122
//alert( [ 'initPage', _model.cauUrl() ] );
116123
_auIns = _ins;
117-
_fm.attr( 'action', addUrlParams( _model.cauUrl(), { 'rnd': new Date().getTime() } ) );
124+
_fm.attr( 'action', JC.f.addUrlParams( _model.cauUrl(), { 'rnd': new Date().getTime() } ) );
118125
_model.cauFileExt() && _flBtn.attr( 'fileExt', _model.cauFileExt() );
126+
127+
_model.cauFileSize() && _flBtn.attr( 'fileSize', _model.cauFileSize() );
119128

120129
_model.cauFileName() && _flBtn.attr( 'name', _model.cauFileName() );
121130

@@ -178,6 +187,43 @@
178187

179188
return _r;
180189
}
190+
191+
/**
192+
* 验证文件大小
193+
*/
194+
function validFileSize( _flBtn, _flSize ){
195+
var _r = true;
196+
_flSize = _flSize || '1024 Mb';
197+
198+
_flBtn = _flBtn[0];
199+
isIE = /msie/i.test(navigator.userAgent) && !window.opera;
200+
if (isIE && _flBtn) {
201+
try{
202+
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
203+
}catch( ex ){
204+
return true;
205+
}
206+
_flPath = _flBtn.value;
207+
var file = fileSystem.GetFile (_flPath);
208+
fileSize = file.Size;
209+
} else {
210+
fileSize = _flBtn.files[0].size;
211+
}
212+
var size = 0;
213+
214+
if( /k/i.test( _flSize ) ){
215+
size = fileSize / Math.pow( 1024, 1 );
216+
}else if( /g/i.test( _flSize ) ){
217+
size = fileSize / Math.pow( 1024, 3 );
218+
}else{
219+
size = fileSize / Math.pow( 1024, 2 );
220+
}
221+
222+
if(size > parseFloat(_flSize) || size <= 0 ){
223+
_r = false ;
224+
}
225+
return _r;
226+
}
181227

182228
function updateBtnX(){
183229
var _flw = _flBtn.prop('offsetWidth')

comps/AutoFixed/AutoFixed.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
* <dd>
3030
* 滚动到多少像素式开始执行 fixed
3131
* </dd>
32+
*
33+
* <dt>data-fixAnchor = bool</dt>
34+
* <dd>
35+
* 是否修正 html 锚点定位问题( 该问题通常出现在 position fixed top = 0 )
36+
* </dd>
3237
* </dl>
3338
*
3439
* @namespace JC
@@ -116,6 +121,16 @@
116121

117122
_p._model.saveDefault();
118123

124+
if( _p._model.fixAnchor() ){
125+
JDOC.delegate( 'a[href]', 'click', function( _evt ){
126+
var _sp = $( this ), _href = _sp.attr( 'href' ) || '';
127+
if( !/^[#]/.test( _href ) ) return;
128+
JC.f.safeTimeout( function(){
129+
JDOC.scrollTop( JDOC.scrollTop() - _p.selector().height() );
130+
}, null, _p._model.gid(), 1 );
131+
});
132+
}
133+
119134
JWIN.on( 'scroll', function( _evt ){
120135
var _st = JDOC.scrollTop(), _cp = _p._model.defaultStyle().gtop;
121136
_p.trigger( 'UPDATE_POSITION', [ _st, _cp ] );
@@ -259,6 +274,12 @@
259274
//JC.log( 'AutoFixed.Model.init:', new Date().getTime() );
260275
}
261276

277+
, gid:
278+
function(){
279+
!this._gid && ( this._gid = JC.f.gid() );
280+
return this._gid;
281+
}
282+
262283
, defaultStyle:
263284
function(){
264285
var _r = {
@@ -311,6 +332,11 @@
311332
return this._fixedTopPx;
312333
}
313334

335+
, fixAnchor:
336+
function(){
337+
return this.boolProp( 'data-fixAnchor' );
338+
}
339+
314340
, fixedClass: function(){ return this.attrProp( 'data-fixedClass' ); }
315341
, normalClass: function(){ return this.attrProp( 'data-normalClass' ); }
316342
, cloneItemClass: function(){ return this.attrProp( 'data-cloneItemClass' ); }

deploy/comps/AjaxUpload/AjaxUpload.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/comps/AjaxUpload/frame/default.html

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,27 @@
7373

7474
_fm.on( 'submit', function( _evt ){
7575
var _flPath = _flBtn.val().trim();
76-
JC.log( 's1', _flPath );
76+
//JC.log( 's1', _flPath );
7777
if( !_flPath ) return prevent( _evt );
78-
JC.log( 's2' );
78+
//JC.log( 's2' );
7979

8080
if( !validFileExt( _flPath, _flBtn.attr('fileExt') ) ) {
8181
_auIns.trigger( 'ERR_FILE_EXT', [ _flPath ] );
8282
try{ _flBtn.val(''); }catch(ex){}
8383
return prevent( _evt );
8484
}
85-
JC.log( 's3' );
85+
//JC.log( 's3' );
8686

8787
_auIns.trigger( 'BeforeUpload' );
8888

89-
JC.log( 's4' );
89+
//JC.log( 's4' );
90+
91+
if( !validFileSize( _flBtn, _flBtn.attr('fileSize') ) ) {
92+
_auIns.trigger( 'ERR_FILE_SIZE',[ _flPath ]);
93+
try{ _flBtn.val(''); }catch(ex){}
94+
return prevent( _evt );
95+
}
96+
9097
});
9198

9299
_disBtn.on('click', function( _evt ){
@@ -114,8 +121,10 @@
114121
function initPage( _ins, _model ){
115122
//alert( [ 'initPage', _model.cauUrl() ] );
116123
_auIns = _ins;
117-
_fm.attr( 'action', addUrlParams( _model.cauUrl(), { 'rnd': new Date().getTime() } ) );
124+
_fm.attr( 'action', JC.f.addUrlParams( _model.cauUrl(), { 'rnd': new Date().getTime() } ) );
118125
_model.cauFileExt() && _flBtn.attr( 'fileExt', _model.cauFileExt() );
126+
127+
_model.cauFileSize() && _flBtn.attr( 'fileSize', _model.cauFileSize() );
119128

120129
_model.cauFileName() && _flBtn.attr( 'name', _model.cauFileName() );
121130

@@ -178,6 +187,43 @@
178187

179188
return _r;
180189
}
190+
191+
/**
192+
* 验证文件大小
193+
*/
194+
function validFileSize( _flBtn, _flSize ){
195+
var _r = true;
196+
_flSize = _flSize || '1024 Mb';
197+
198+
_flBtn = _flBtn[0];
199+
isIE = /msie/i.test(navigator.userAgent) && !window.opera;
200+
if (isIE && _flBtn) {
201+
try{
202+
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
203+
}catch( ex ){
204+
return true;
205+
}
206+
_flPath = _flBtn.value;
207+
var file = fileSystem.GetFile (_flPath);
208+
fileSize = file.Size;
209+
} else {
210+
fileSize = _flBtn.files[0].size;
211+
}
212+
var size = 0;
213+
214+
if( /k/i.test( _flSize ) ){
215+
size = fileSize / Math.pow( 1024, 1 );
216+
}else if( /g/i.test( _flSize ) ){
217+
size = fileSize / Math.pow( 1024, 3 );
218+
}else{
219+
size = fileSize / Math.pow( 1024, 2 );
220+
}
221+
222+
if(size > parseFloat(_flSize) || size <= 0 ){
223+
_r = false ;
224+
}
225+
return _r;
226+
}
181227

182228
function updateBtnX(){
183229
var _flw = _flBtn.prop('offsetWidth')

0 commit comments

Comments
 (0)