Skip to content

Commit

Permalink
添加图片上传的gem,添加图片需要的ext文件
Browse files Browse the repository at this point in the history
  • Loading branch information
mouse-lin committed Mar 23, 2012
1 parent a4c28e2 commit fb5f751
Show file tree
Hide file tree
Showing 7 changed files with 244 additions and 3 deletions.
3 changes: 3 additions & 0 deletions Gemfile
Expand Up @@ -11,6 +11,9 @@ gem "devise"
gem "mongrel", ">=1.2.0.pre2"
gem "rake", "0.8.7"
gem 'rd_searchlogic', '3.0.1', :require => 'searchlogic'
gem 'kindeditor'
gem 'rmagick'
gem 'paperclip', '~> 2.3'

# Use unicorn as the web server
# gem 'unicorn'
Expand Down
11 changes: 11 additions & 0 deletions Gemfile.lock
Expand Up @@ -31,6 +31,7 @@ GEM
arel (2.0.10)
bcrypt-ruby (2.1.4)
builder (2.1.2)
cocaine (0.2.1)
daemons (1.0.10)
devise (1.3.4)
bcrypt-ruby (~> 2.1.2)
Expand All @@ -40,6 +41,7 @@ GEM
abstract (>= 1.0.0)
gem_plugin (0.2.3)
i18n (0.6.0)
kindeditor (0.0.3)
mail (2.2.19)
activesupport (>= 2.3.6)
i18n (>= 0.4.0)
Expand All @@ -51,6 +53,11 @@ GEM
gem_plugin (~> 0.2.3)
mysql2 (0.2.7)
orm_adapter (0.0.5)
paperclip (2.7.0)
activerecord (>= 2.3.0)
activesupport (>= 2.3.2)
cocaine (>= 0.0.2)
mime-types
polyglot (0.3.3)
rack (1.2.5)
rack-mount (0.6.14)
Expand All @@ -73,6 +80,7 @@ GEM
rake (0.8.7)
rd_searchlogic (3.0.1)
activerecord (>= 3.0.0)
rmagick (2.13.1)
thor (0.14.6)
treetop (1.4.10)
polyglot
Expand All @@ -86,8 +94,11 @@ PLATFORMS

DEPENDENCIES
devise
kindeditor
mongrel (>= 1.2.0.pre2)
mysql2 (= 0.2.7)
paperclip (~> 2.3)
rails (= 3.0.3)
rake (= 0.8.7)
rd_searchlogic (= 3.0.1)
rmagick
2 changes: 2 additions & 0 deletions app/views/layouts/application.html.erb
Expand Up @@ -7,6 +7,7 @@
<%= javascript_include_tag 'Extjs/ext-lang-zh_CN.js' %>
<%= javascript_include_tag 'Extjs/ux/SearchField.js' %>
<%= javascript_include_tag 'Extjs/ux/FileUploadField.js' %>
<%= javascript_include_tag 'PF/public/init.js' %>
<%= javascript_include_tag 'PF/util/util.js' %>
Expand All @@ -16,6 +17,7 @@
<%= stylesheet_link_tag '/javascripts/Extjs/resources/css/ext-all.css' %>
<%= stylesheet_link_tag '/javascripts/Extjs/resources/css/xtheme-gray.css' %>
<%= stylesheet_link_tag 'menu-style.css' %>
<%= stylesheet_link_tag 'fileuploadfield.css' %>
<%= stylesheet_link_tag 'button_icon.css' %>
<%= csrf_meta_tag %>
</head>
Expand Down
182 changes: 182 additions & 0 deletions public/javascripts/Extjs/ux/FileUploadField.js
@@ -0,0 +1,182 @@
/*!
* Ext JS Library 3.2.1
* Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
Ext.ns('Ext.ux.form');

/**
* @class Ext.ux.form.FileUploadField
* @extends Ext.form.TextField
* Creates a file upload field.
* @xtype fileuploadfield
*/
Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, {
/**
* @cfg {String} buttonText The button text to display on the upload button (defaults to
* 'Browse...'). Note that if you supply a value for {@link #buttonCfg}, the buttonCfg.text
* value will be used instead if available.
*/
buttonText: 'Browse...',
/**
* @cfg {Boolean} buttonOnly True to display the file upload field as a button with no visible
* text field (defaults to false). If true, all inherited TextField members will still be available.
*/
buttonOnly: false,
/**
* @cfg {Number} buttonOffset The number of pixels of space reserved between the button and the text field
* (defaults to 3). Note that this only applies if {@link #buttonOnly} = false.
*/
buttonOffset: 3,
/**
* @cfg {Object} buttonCfg A standard {@link Ext.Button} config object.
*/

// private
readOnly: true,

/**
* @hide
* @method autoSize
*/
autoSize: Ext.emptyFn,

// private
initComponent: function(){
Ext.ux.form.FileUploadField.superclass.initComponent.call(this);

this.addEvents(
/**
* @event fileselected
* Fires when the underlying file input field's value has changed from the user
* selecting a new file from the system file selection dialog.
* @param {Ext.ux.form.FileUploadField} this
* @param {String} value The file value returned by the underlying file input field
*/
'fileselected'
);
},

// private
onRender : function(ct, position){
Ext.ux.form.FileUploadField.superclass.onRender.call(this, ct, position);

this.wrap = this.el.wrap({cls:'x-form-field-wrap x-form-file-wrap'});
this.el.addClass('x-form-file-text');
this.el.dom.removeAttribute('name');
this.createFileInput();

var btnCfg = Ext.applyIf(this.buttonCfg || {}, {
text: this.buttonText
});
this.button = new Ext.Button(Ext.apply(btnCfg, {
renderTo: this.wrap,
cls: 'x-form-file-btn' + (btnCfg.iconCls ? ' x-btn-icon' : '')
}));

if(this.buttonOnly){
this.el.hide();
this.wrap.setWidth(this.button.getEl().getWidth());
}

this.bindListeners();
this.resizeEl = this.positionEl = this.wrap;
},

bindListeners: function(){
this.fileInput.on({
scope: this,
mouseenter: function() {
this.button.addClass(['x-btn-over','x-btn-focus'])
},
mouseleave: function(){
this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])
},
mousedown: function(){
this.button.addClass('x-btn-click')
},
mouseup: function(){
this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])
},
change: function(){
var v = this.fileInput.dom.value;
this.setValue(v);
this.fireEvent('fileselected', this, v);
}
});
},

createFileInput : function() {
this.fileInput = this.wrap.createChild({
id: this.getFileInputId(),
name: this.name||this.getId(),
cls: 'x-form-file',
tag: 'input',
type: 'file',
size: 1
});
},

reset : function(){
this.fileInput.remove();
this.createFileInput();
this.bindListeners();
Ext.ux.form.FileUploadField.superclass.reset.call(this);
},

// private
getFileInputId: function(){
return this.id + '-file';
},

// private
onResize : function(w, h){
Ext.ux.form.FileUploadField.superclass.onResize.call(this, w, h);

this.wrap.setWidth(w);

if(!this.buttonOnly){
var w = this.wrap.getWidth() - this.button.getEl().getWidth() - this.buttonOffset;
this.el.setWidth(w);
}
},

// private
onDestroy: function(){
Ext.ux.form.FileUploadField.superclass.onDestroy.call(this);
Ext.destroy(this.fileInput, this.button, this.wrap);
},

onDisable: function(){
Ext.ux.form.FileUploadField.superclass.onDisable.call(this);
this.doDisable(true);
},

onEnable: function(){
Ext.ux.form.FileUploadField.superclass.onEnable.call(this);
this.doDisable(false);

},

// private
doDisable: function(disabled){
this.fileInput.dom.disabled = disabled;
this.button.setDisabled(disabled);
},


// private
preFocus : Ext.emptyFn,

// private
alignErrorIcon : function(){
this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
}

});

Ext.reg('fileuploadfield', Ext.ux.form.FileUploadField);

// backwards compat
Ext.form.FileUploadField = Ext.ux.form.FileUploadField;
14 changes: 12 additions & 2 deletions public/javascripts/PF/pages/settings_index.js
Expand Up @@ -46,7 +46,7 @@ Pf.settings.homeIndex = {
store: studentScoreStore,
loadMask: true,
cm: cm,
height: 300,
height: 250,
region: "south",
bbar : new Pf.util.Bbar({ store : studentScoreStore }),
});
Expand Down Expand Up @@ -76,6 +76,7 @@ Pf.settings.homeIndex = {
title: "test",
region: "center",
autoScroll : true,
fileUpload: true,
frame: true,
labelAlign : 'right',
buttonAlign: 'center',
Expand All @@ -96,7 +97,7 @@ Pf.settings.homeIndex = {
})]
},
{
defaults : { anchor : '95%'},
defaults : { anchor : '95%', },
columnWidth: 1,
defaultType : 'textfield',
layout: "form",
Expand Down Expand Up @@ -125,6 +126,15 @@ Pf.settings.homeIndex = {
fieldLabel: "住址",
name: "home"
},
{
xtype: 'fileuploadfield',
allowBlank : true,
emptyText: '选择',
fieldLabel: '头像',
name: 'size_sheet',
buttonText: '上传',
listeners: { 'fileselected' : {fn: this.onFileSelect, scope: this} }
}
]
}
]
Expand Down
33 changes: 33 additions & 0 deletions public/stylesheets/fileuploadfield.css
@@ -0,0 +1,33 @@
/*!
* Ext JS Library 3.3.1
* Copyright(c) 2006-2010 Sencha Inc.
* licensing@sencha.com
* http://www.sencha.com/license
*/
/*
* FileUploadField component styles
*/
.x-form-file-wrap {
position: relative;
height: 22px;
}
.x-form-file-wrap .x-form-file {
position: absolute;
right: 0;
-moz-opacity: 0;
filter:alpha(opacity: 0);
opacity: 0;
z-index: 2;
height: 22px;
}
.x-form-file-wrap .x-form-file-btn {
position: absolute;
right: 0;
z-index: 1;
}
.x-form-file-wrap .x-form-file-text {
position: absolute;
left: 0;
z-index: 3;
color: #777;
}
2 changes: 1 addition & 1 deletion public/stylesheets/menu-style.css
@@ -1,5 +1,5 @@
body {
font: 11px Arial, Helvetica, sans-serif;
/*font: 11px Arial, Helvetica, sans-serif;*/
background: #ffffff url(../images/main-bg.gif);
padding: 0;
margin: 0;
Expand Down

0 comments on commit fb5f751

Please sign in to comment.